From fda92a21be23a0c082c7c48083e04641b5182214 Mon Sep 17 00:00:00 2001 From: huangruiteng <14976749+huangruiteng@users.noreply.github.com> Date: Sat, 19 Sep 2026 18:21:57 +0800 Subject: [PATCH 01/10] feat(collaboration): inspect team work from the original Goal conversation Signed-off-by: huangruiteng <14976749+huangruiteng@users.noreply.github.com> --- apps/presentation/dashboard/src/data/chat.ts | 21 +++ .../personal-workspace/goal-loopx-mode.css | 1 + .../personal-workspace/goal-loopx-mode.tsx | 2 + .../personal-workspace/goal-team-work.tsx | 84 +++++++++++ loopx/chat_loopx_mode.py | 22 ++- loopx/cli_commands/delegation.py | 18 ++- loopx/collaboration_mcp.py | 71 ++++++++- .../control_plane/collaboration/delegation.ts | 32 ++++ .../control_plane/effect_runtime_handlers.ts | 3 +- loopx/control_plane/goals/acceptance.py | 85 +++++++---- loopx/control_plane/turn_driver/executor.py | 6 + loopx/web/chat/asset-retention.json | 8 +- loopx/web/chat/assets/index--Ooz6gYk.js | 137 ++++++++++++++++++ loopx/web/chat/assets/index-ABpQAa1U.css | 1 + loopx/web/chat/index.html | 4 +- 15 files changed, 442 insertions(+), 53 deletions(-) create mode 100644 apps/presentation/dashboard/src/features/personal-workspace/goal-team-work.tsx create mode 100644 loopx/web/chat/assets/index--Ooz6gYk.js create mode 100644 loopx/web/chat/assets/index-ABpQAa1U.css diff --git a/apps/presentation/dashboard/src/data/chat.ts b/apps/presentation/dashboard/src/data/chat.ts index 10a26c7f27..309a8f6a0d 100644 --- a/apps/presentation/dashboard/src/data/chat.ts +++ b/apps/presentation/dashboard/src/data/chat.ts @@ -864,6 +864,27 @@ export type LoopXModeSnapshot = { export function fetchLoopXMode(sessionId: string) { return requestJson(`/api/chat/sessions/${sessionId}/loopx`); } +export type DelegationInventory = { + items: Array<{record_id: string; operation_id: string | null; agent_id?: string; todo_id?: string; + status: string; worker_active?: boolean; recovery_required: boolean | null; + artifacts?: Array<{ref: string; sha256: string}>}>; + has_more: boolean; next_cursor: string | null; page_readback_complete: boolean; +}; +export type DelegationPreflight = { + state: "turn_blocked" | "acceptance_unavailable" | "runtime_unavailable" | "runtime_unverified" | "launchable"; + turn_eligible: boolean; acceptance_ready: boolean; turn_route: string; + executor: {host: string; available: boolean | null; reason: string | null; profile: string | null}; +}; +export function fetchLoopXTeamWork(sessionId: string, cursor?: string) { + return requestJson(`/api/chat/sessions/${sessionId}/loopx`, { + method: "POST", body: JSON.stringify({operation: "operations", limit: 10, ...(cursor ? {cursor} : {})}), + }); +} +export function inspectLoopXMember(sessionId: string, bindingId: string) { + return requestJson(`/api/chat/sessions/${sessionId}/loopx`, { + method: "POST", body: JSON.stringify({operation: "inspect", binding_id: bindingId}), + }); +} export function updateLoopXMode(sessionId: string, operation: string, settings?: LoopXModeSettings, operationId = crypto.randomUUID()) { return requestJson(`/api/chat/sessions/${sessionId}/loopx`, { method: "POST", body: JSON.stringify({operation, operation_id: operationId, ...(settings ? {settings} : {})}), 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 910bc6a3e9..f79a2e2037 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 @@ -1 +1,2 @@ .goal-loopx-mode{color:var(--pw-text,#171717);font-size:13px;margin-bottom:10px}.goal-loopx-mode-bar{display:flex;align-items:center;justify-content:space-between;gap:16px}.goal-loopx-mode strong{font-weight:500}.goal-loopx-mode p{font-size:12px;color:var(--pw-muted,#666);margin:4px 0}.goal-loopx-mode-actions{display:flex;gap:8px;flex-shrink:0}.goal-loopx-mode button{display:inline-flex;align-items:center;justify-content:center;gap:6px;min-height:40px;border:1px solid var(--pw-line,#ebebeb);background:var(--pw-surface,#fff);color:inherit;border-radius:6px;padding:8px 12px;font:inherit;cursor:pointer}.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{outline:2px solid #0070f3;outline-offset:2px}.goal-loopx-mode-settings{display:grid;grid-template-columns:1fr 1fr;gap:12px;margin-top:12px;padding:16px;border:1px solid var(--pw-line,#ebebeb);border-radius:12px;background:var(--pw-surface,#fff)}.goal-loopx-mode-settings label{display:flex;flex-direction:column;gap:6px}.goal-loopx-mode-settings input,.goal-loopx-mode-settings select{min-width:0;width:100%;padding:8px;border:1px solid var(--pw-line,#ddd);border-radius:6px;background:var(--pw-surface,#fff);color:inherit;font:inherit}.goal-loopx-mode-settings label:nth-child(3),.goal-loopx-mode-settings p{grid-column:1/-1}.goal-loopx-mode-members{display:flex;flex-wrap:wrap;gap:8px;margin-top:8px}.goal-loopx-mode-members span{padding:4px 8px;border:1px solid var(--pw-line,#ebebeb);border-radius:6px;font-size:12px}.goal-loopx-message-mode{display:flex;align-items:center;gap:8px;margin:8px 0;font-size:12px}.goal-loopx-message-mode select{font:inherit;color:inherit;border:1px solid var(--pw-line,#ebebeb);border-radius:6px;background:var(--pw-surface,#fff);padding:6px}@media(max-width:640px){.goal-loopx-mode-bar{align-items:flex-start;flex-wrap:wrap;gap:8px}.goal-loopx-mode-actions{flex-wrap:wrap}.goal-loopx-mode-settings{grid-template-columns:1fr}.goal-loopx-mode button{min-height:44px}} +.goal-team-work{margin-top:8px}.goal-team-work section{margin-top:8px;padding:12px;border:1px solid var(--pw-line,#ebebeb);border-radius:12px}.goal-team-work ul{list-style:none;padding:0;margin:8px 0}.goal-team-work li{padding:8px 0;border-bottom:1px solid var(--pw-line,#ebebeb);overflow-wrap:anywhere}.goal-team-work li>span{display:block;font-size:12px;color:var(--pw-muted,#666)}.goal-team-bindings li>div,.goal-team-work-actions{display:flex;align-items:center;gap:8px;flex-wrap:wrap}.goal-team-bindings li>div>span{font-size:12px;color:var(--pw-muted,#666)}.goal-team-work code{display:block;font-size:12px;overflow-wrap:anywhere;white-space:normal}.goal-team-work summary{cursor:pointer;padding:4px 0} diff --git a/apps/presentation/dashboard/src/features/personal-workspace/goal-loopx-mode.tsx b/apps/presentation/dashboard/src/features/personal-workspace/goal-loopx-mode.tsx index 419b596542..2e35468d6c 100644 --- a/apps/presentation/dashboard/src/features/personal-workspace/goal-loopx-mode.tsx +++ b/apps/presentation/dashboard/src/features/personal-workspace/goal-loopx-mode.tsx @@ -2,6 +2,7 @@ import {useEffect, useState} from "react"; import {Pause, Play, Settings2} from "lucide-react"; import {fetchLoopXMode, updateLoopXMode, type LoopXModeSnapshot, type LoopXModeSettings} from "../../data/chat"; import {useWorkspaceI18n} from "./i18n"; +import {GoalTeamWork} from "./goal-team-work"; import "./goal-loopx-mode.css"; export function GoalLoopXMode({sessionId, onPrepare, onExecute, onChange}: { @@ -98,6 +99,7 @@ export function GoalLoopXMode({sessionId, onPrepare, onExecute, onChange}: { {snapshot?.enabled && snapshot.native.tokensUsed !== undefined ?

{zh ? "协调员累计用量" : "Coordinator usage"} {snapshot.native.tokensUsed.toLocaleString()} / {snapshot.native.tokenBudget?.toLocaleString() ?? "—"} tokens

: null} {snapshot?.enabled && snapshot.ingress.some(row => row.status !== "delivered") ?

{zh ? "待处理消息:" : "Pending messages: "}{snapshot.ingress.filter(row => row.status !== "delivered").map(row => `${row.mode === "loopx_queue" ? "queue" : "inbox"} · ${row.status}`).join(" / ")}

: null} {snapshot?.enabled && snapshot.deliveries.length ?
{zh ? "成员最近回读" : "Last observations"}{snapshot.deliveries.map(row => {row.agent_id} · {row.status === "accepted" ? (zh ? "已通过验收" : "Accepted") : row.status === "rejected" ? (zh ? "未通过验收" : "Rejected") : row.status === "unavailable" ? (zh ? "需要重新核验" : "Recheck required") : (zh ? "执行中" : "Working")})}
: null} + {configured && sessionId ? : null} {error ?

{error}

: null} ; } diff --git a/apps/presentation/dashboard/src/features/personal-workspace/goal-team-work.tsx b/apps/presentation/dashboard/src/features/personal-workspace/goal-team-work.tsx new file mode 100644 index 0000000000..400c756962 --- /dev/null +++ b/apps/presentation/dashboard/src/features/personal-workspace/goal-team-work.tsx @@ -0,0 +1,84 @@ +import {useEffect, useRef, useState} from "react"; +import {fetchLoopXTeamWork, inspectLoopXMember, type DelegationInventory, type DelegationPreflight} from "../../data/chat"; + +type Member = {id: string; agent_id: string; todo_id: string}; + +/** On-demand observations share the caller/config pin of this Goal conversation. */ +export function GoalTeamWork({sessionId, members, zh}: {sessionId: string; members: Member[]; zh: boolean}) { + const [open, setOpen] = useState(false); + const [page, setPage] = useState(null); + const [checks, setChecks] = useState>({}); + const [busy, setBusy] = useState(false); + const [error, setError] = useState(""); + const generation = useRef(0); + useEffect(() => { + generation.current++; setOpen(false); setPage(null); setChecks({}); setError(""); setBusy(false); + return () => {generation.current++;}; + }, [sessionId]); + async function read(cursor?: string) { + const current = ++generation.current; + setBusy(true); setError(""); setPage(null); + try { + const result = await fetchLoopXTeamWork(sessionId, cursor); + if (current === generation.current) setPage(result); + } catch (failure) { + if (current === generation.current) setError(failure instanceof Error ? failure.message : String(failure)); + } finally {if (current === generation.current) setBusy(false);} + } + async function inspect(id: string) { + const current = ++generation.current; + setBusy(true); setError(""); + setChecks(previous => {const next = {...previous}; delete next[id]; return next;}); + try { + const result = await inspectLoopXMember(sessionId, id); + if (current === generation.current) setChecks(previous => ({...previous, [id]: result})); + } catch (failure) { + if (current === generation.current) setError(failure instanceof Error ? failure.message : String(failure)); + } finally {if (current === generation.current) setBusy(false);} + } + const labels: Record = zh ? { + turn_blocked: "当前任务未获准执行", acceptance_unavailable: "缺少有效验收绑定", + runtime_unavailable: "运行时不可用", runtime_unverified: "运行时可用性尚未验证", launchable: "本机启动条件已满足", + } : {turn_blocked: "Task admission blocked", acceptance_unavailable: "Acceptance binding unavailable", + runtime_unavailable: "Runtime unavailable", runtime_unverified: "Runtime availability unverified", launchable: "Local launch prerequisites met"}; + const stateLabel = (row: DelegationInventory["items"][number]) => { + if (row.status === "unavailable") return zh ? "无法核验" : "Unavailable"; + if (row.status === "accepted") return zh ? "已通过当前验收" : "Currently accepted"; + if (row.status === "rejected") return zh ? "未通过验收" : "Rejected"; + if (row.recovery_required) return zh ? "需要恢复原执行" : "Original execution needs recovery"; + if (row.status === "running" && row.worker_active) return zh ? "执行中" : "Executing"; + if (row.status === "turn_returned" && row.worker_active) return zh ? "正在验收" : "Validating"; + return zh ? "已派发,等待执行回读" : "Dispatched; awaiting execution readback"; + }; + return
+ + {open ?
+

{zh ? "检查按需读取,不会启动成员。结果属于本次回读;暂停协调员不会停止已派发工作。" : "Checks run on demand and start no members. Results are observations; pausing the coordinator retains delegated work."}

+
    {members.map(member =>
  • +
    {member.agent_id}{member.todo_id} +
    + {checks[member.id] ?

    {labels[checks[member.id].state] ?? (zh ? "状态未知" : "Unknown")} + {" · "}{checks[member.id].executor.host}{checks[member.id].executor.reason ? ` · ${checks[member.id].executor.reason}` : ""} + {checks[member.id].executor.profile ? ` · ${checks[member.id].executor.profile}` : ""} + {" · "}{zh ? "不代表正在执行" : "Does not mean executing"}

    : null} +
  • )}
+
{zh ? "此协调身份的持久工作" : "Durable work for this coordinator"} + + {page?.has_more && page.next_cursor ? : null}
+ {busy ?

{zh ? "正在读取当前事实…" : "Reading current facts…"}

: null} + {error ?

{error}

: null} + {page ? <> + {!page.page_readback_complete ?

{zh ? "本页有无法核验的工作,请检查原请求;不要直接重新派工。" : "Some work cannot be verified. Reconcile the original request before redispatching."}

: null} + {!page.items.length ?

{zh ? "此页没有委派记录;不代表整个团队没有工作或 Goal 已完成。" : "No records on this page; this does not establish an idle team or a completed Goal."}

: null} +
    {page.items.map(row =>
  • + {row.agent_id ?? (zh ? "记录不可读" : "Unreadable record")} · {stateLabel(row)} + {row.operation_id ?? row.record_id} + {row.artifacts?.map(artifact =>
    {artifact.ref}{artifact.sha256}
    )} +
  • )}
+

{zh ? "仅限当前协调身份;分页不是团队快照。" : "Scoped to this coordinator; paging is not a team snapshot."}{page.has_more ? (zh ? " 还有下一页。" : " More pages remain.") : ""}

+ : null} +
: null} +
; +} diff --git a/loopx/chat_loopx_mode.py b/loopx/chat_loopx_mode.py index 2b90de6d7f..e70c310f82 100644 --- a/loopx/chat_loopx_mode.py +++ b/loopx/chat_loopx_mode.py @@ -32,14 +32,14 @@ "(relative ref, description, optional sha256), acceptance (strings), return_requirement. " "Read/wait/resume use the original operation_id. Running is not failure; do not duplicate it. " "After context loss, action=operations recovers this requester's durable work. Follow " - "next_cursor for more; unavailable means reconcile, not redispatch.", + "next_cursor for more; unavailable means reconcile, not redispatch. Action=inspect with binding_id checks the actual Turn/profile before new dispatch; unknown availability is not readiness.", "inputSchema": { "type": "object", "additionalProperties": False, "properties": { "action": { "type": "string", - "enum": ["bindings", "operations", "start", "read", "wait", "resume", "messages"], + "enum": ["bindings", "operations", "inspect", "start", "read", "wait", "resume", "messages"], }, "binding_id": {"type": "string"}, "operation_id": {"type": "string"}, @@ -247,7 +247,21 @@ def snapshot(self, session_id): ], } + def read_team(self, session_id, body): + """Owner readback stays available while paused; no model Turn is submitted.""" + operation = body.get("operation") + allowed = {"operation", "binding_id"} if operation == "inspect" else {"operation", "limit", "cursor"} + if operation not in {"inspect", "operations"} or set(body) - allowed: + raise ValueError("invalid team readback request") + session = self._session(session_id) + service, _, _ = self._execution(session, (session.get("loopx_mode") or {}).get("settings") or {}) + result = (service.inspect(body.get("binding_id", "")) if operation == "inspect" else + service.operations(limit=body.get("limit", 10), cursor=body.get("cursor"))) + return {"ok": True, **result} + def apply(self, session_id, body, *, work_dir, objective): + if body.get("operation") in {"inspect", "operations"}: + return self.read_team(session_id, body) if set(body) - { "operation", "settings", @@ -617,6 +631,10 @@ def dispatch(name, arguments): } elif action == "bindings": result = service.directory() + elif action == "inspect": + if set(arguments) != {"action", "binding_id"}: + raise ValueError("inspect requires only binding_id") + result = service.inspect(arguments["binding_id"]) elif action == "operations": result = service.operations(limit=arguments.get("limit", 20), cursor=arguments.get("cursor")) elif action == "start": diff --git a/loopx/cli_commands/delegation.py b/loopx/cli_commands/delegation.py index c6db385b58..49dbc39c99 100644 --- a/loopx/cli_commands/delegation.py +++ b/loopx/cli_commands/delegation.py @@ -17,13 +17,13 @@ def register_delegation(subparsers, add_format): "delegation", help="Launch and recover authorized peer work; returns JSON." ) add_format(parser) - parser.add_argument("delegation_action", choices=("list", "operations", "start", "read", "wait", "resume")) + parser.add_argument("delegation_action", choices=("list", "operations", "inspect", "start", "read", "wait", "resume")) parser.add_argument("--goal-id", required=True) parser.add_argument("--agent-id", required=True, help="Calling registered Agent, not the worker.") parser.add_argument("--execution-config", type=Path, required=True, help="Existing operator-owned local delegation bindings.") parser.add_argument("--operation-id", help="Stable request identity; reuse after a lost response.") - parser.add_argument("--binding-id", help="For start: an authorized binding from list.") + parser.add_argument("--binding-id", help="For start/inspect: an authorized binding from list.") parser.add_argument("--brief-file", type=Path, help="For start: collaboration_brief_v0 JSON file.") parser.add_argument("--parent-request-id", help="For start: the request received by this coordinator.") parser.add_argument("--limit", type=int, help="For operations: page size, 1–50 (default 20).") @@ -41,14 +41,16 @@ def handle_delegation(args, registry_path, runtime_root): raise ValueError(f"delegation {action} requires --execute") if action not in {"start", "resume"} and args.execute: raise ValueError("--execute is only valid for start/resume") - if action not in {"list", "operations"} and not args.operation_id: + if action not in {"list", "operations", "inspect"} and not args.operation_id: raise ValueError(f"delegation {action} requires --operation-id") - if action in {"list", "operations"} and args.operation_id: + if action in {"list", "operations", "inspect"} and args.operation_id: raise ValueError(f"{action} does not select an operation; use read") if action != "operations" and (args.limit is not None or args.cursor is not None): raise ValueError("limit and cursor are only supplied on operations") - if action != "start" and (args.binding_id or args.brief_file or args.parent_request_id): - raise ValueError("binding, brief and parent request are only supplied on start") + if action not in {"start", "inspect"} and args.binding_id: + raise ValueError("binding is only supplied on start/inspect") + if action != "start" and (args.brief_file or args.parent_request_id): + raise ValueError("brief and parent request are only supplied on start") service = Delegations(runtime_root, registry_path, args.goal_id, args.agent_id, args.execution_config.expanduser()) if action == "start": @@ -62,6 +64,10 @@ def handle_delegation(args, registry_path, runtime_root): args.parent_request_id) elif action == "list": result = service.directory() + elif action == "inspect": + if not args.binding_id: + raise ValueError("inspect requires --binding-id") + result = service.inspect(args.binding_id) elif action == "operations": result = service.operations(limit=20 if args.limit is None else args.limit, cursor=args.cursor) elif action == "read": diff --git a/loopx/collaboration_mcp.py b/loopx/collaboration_mcp.py index 92c761a185..e04357d1a1 100644 --- a/loopx/collaboration_mcp.py +++ b/loopx/collaboration_mcp.py @@ -27,7 +27,7 @@ from .file_lock import exclusive_file_lock, LockAcquisitionPolicy, LockAcquireTimeoutError from .todos import list_goal_todos from .control_plane.effect_runtime import effect_runtime_result, EffectRuntimeRemoteError -from .control_plane.goals.acceptance import inspect_goal_acceptance, validate_goal_task_acceptance +from .control_plane.goals.acceptance import inspect_goal_acceptance, validate_goal_task_acceptance, goal_task_validation_files_current from .control_plane.turn_driver.journal_store import turn_journal_path from .control_plane.turn_driver.host_binding import turn_host_arg_option from .control_plane.collaboration.inbox import _hash, _read, _write, _root, _receipt @@ -162,6 +162,48 @@ def operations(self, *, limit: int = 20, cursor: str | None = None) -> dict: return read_delegation_inventory(self, limit=limit, cursor=cursor) + def inspect(self, binding_id: str) -> dict: + """Observe the real Turn preflight; never create a request or run a host.""" + binding = self.binding(binding_id, require_active=True) + if not Path(binding["workspace"]).is_dir(): + raise ValueError("delegation workspace unavailable") + acceptance = inspect_goal_acceptance(registry_path=self.registry, goal_id=self.goal_id, + runtime_root=str(self.root)) + files_current = goal_task_validation_files_current(registry_path=self.registry, + runtime_root=str(self.root), goal_id=self.goal_id, agent_id=binding["agent_id"], todo_id=binding["todo_id"]) + operation = "inspect-" + _hash(binding_id)[:32] + arguments = ["turn", "run-once", "--goal-id", self.goal_id, + "--agent-id", binding["agent_id"], "--todo-id", binding["todo_id"], + "--turn-instance-id", operation, *self._execution_arguments(binding, operation)] + # Host arguments are operator-owned, but inspection must stay read-only + # even when they contain an abbreviated execution flag or a selector. + from .cli import build_parser + + try: + selected = build_parser().parse_args(arguments) + except SystemExit as exc: + raise ValueError("invalid delegation Turn arguments") from exc + if (selected.execute or selected.resume_turn_key + or (selected.goal_id, selected.agent_id, selected.todo_id, selected.turn_instance_id) + != (self.goal_id, binding["agent_id"], binding["todo_id"], operation)): + raise ValueError("delegation inspection cannot execute or retarget bound work") + preview = self._cli(binding, *arguments) + if preview.get("status") != "preview": + raise ValueError(f"delegation Turn preflight unavailable: {preview.get('error') or preview.get('status')}") + current = inspect_goal_acceptance(registry_path=self.registry, goal_id=self.goal_id, + runtime_root=str(self.root)) + if (acceptance != current or self.binding(binding_id, require_active=True) != binding + or files_current != goal_task_validation_files_current(registry_path=self.registry, + runtime_root=str(self.root), goal_id=self.goal_id, + agent_id=binding["agent_id"], todo_id=binding["todo_id"])): + raise ValueError("delegation preflight source changed; retry inspection") + task = next((row for row in (acceptance.get("goal_acceptance_contract") or {}).get("tasks", []) + if row.get("todo_id") == binding["todo_id"]), None) + return effect_runtime_result("collaboration.delegation.preflight", { + "binding": {key: binding[key] for key in ("id", "agent_id", "todo_id")}, + "preview": preview, "acceptance": task, "validation_files_current": files_current, + }) + def start(self, binding_id: str, operation_id: str, brief: dict, parent_request_id: str | None = None) -> dict: binding = self.binding(binding_id, require_active=True) @@ -318,20 +360,24 @@ def execute(self, operation_id: str) -> None: if row["status"] == "prepared": self._observe(path, row, "rejected") - def _execute(self, path: Path, row: dict, binding: dict) -> None: - request_id = row["identity"]["request_id"] - common = ["--goal-id", self.goal_id, "--agent-id", binding["agent_id"]] - host = binding["host_args"] + def _execution_arguments(self, binding: dict, operation_id: str) -> list[str]: + """Exactly the same profile, workspace and validation arguments for preview/run.""" # Preserve the journaled validator argv so existing Turns retain their resume identity. validator = [sys.executable, "-m", "loopx.collaboration_mcp", "--delegation-action", "validate", "--runtime-root", str(self.root), "--registry", str(self.registry), "--goal-id", self.goal_id, "--agent-id", self.agent_id, "--execution-config", str(self.config), - "--workspace", binding["workspace"], "--operation-id", row["identity"]["operation_id"]] - execution = ["--execution-mode", "isolated-headless", "--project", binding["workspace"], + "--workspace", binding["workspace"], "--operation-id", operation_id] + return ["--execution-mode", "isolated-headless", "--project", binding["workspace"], "--scan-root", binding["workspace"], "--no-global-sync", "--timeout-seconds", str(binding["timeout_seconds"]), "--validation-command-json", json.dumps(validator), - "--validation-failure-kind", "repair_required", *host] + "--validation-failure-kind", "repair_required", *binding["host_args"]] + + def _execute(self, path: Path, row: dict, binding: dict) -> None: + request_id = row["identity"]["request_id"] + common = ["--goal-id", self.goal_id, "--agent-id", binding["agent_id"]] + host = binding["host_args"] + execution = self._execution_arguments(binding, row["identity"]["operation_id"]) if row["status"] == "prepared": selected_host = turn_host_arg_option(host, "--host") if not selected_host: @@ -393,6 +439,15 @@ def list_execution_bindings() -> dict: """Read operator-authorized peer task bindings; registration alone cannot launch.""" return delegations.directory() + @server.tool() + def inspect_execution_binding(binding_id: str) -> dict: + """Check the selected task, pinned acceptance and actual Turn executor without launching. + + Unknown runtime availability is not launch readiness; this observation grants + no execution authority. Reuse original operations for existing work. + """ + return delegations.inspect(binding_id) + @server.tool() def list_delegations(limit: int = 20, cursor: str | None = None) -> dict: """Recover this requester's work after context loss. Follow next_cursor for more. diff --git a/loopx/control_plane/collaboration/delegation.ts b/loopx/control_plane/collaboration/delegation.ts index 9d82f88880..8ccda08ad1 100644 --- a/loopx/control_plane/collaboration/delegation.ts +++ b/loopx/control_plane/collaboration/delegation.ts @@ -33,6 +33,38 @@ export function selectDelegationBinding(params: JsonObject): JsonObject { } type Observation = "prepared" | "running" | "turn_returned" | "accepted" | "rejected"; + +/** Read the actual dry-run route/profile, never infer readiness from assignment. */ +export function delegationPreflight(params: JsonObject): JsonObject { + const binding = requireJsonObject(params.binding, "binding identity"); + requireThat([binding.id, binding.agent_id, binding.todo_id].every(text), "binding identities required"); + const preview = requireJsonObject(params.preview, "Turn preview"); + const effects = requireJsonObject(preview.effects, "preview effects"); + requireThat(preview.dry_run === true && preview.status === "preview" + && ["host_invoked", "state_written", "quota_spent", "scheduler_acknowledged"].every(k => effects[k] === false), + "delegation inspection requires a read-only Turn preview"); + const route = requireJsonObject(preview.route, "Turn admission route"); + const executor = requireJsonObject(preview.managed_executor, "selected executor"); + requireThat([true, false, null].includes(executor.available as boolean | null), "runtime availability required"); + requireThat(typeof route.would_invoke_host === "boolean", "Turn admission observation required"); + const eligible = route.would_invoke_host === true && route.selected_todo_id === binding.todo_id; + const acceptance = params.acceptance === null ? null : requireJsonObject(params.acceptance, "task acceptance"); + const pinned = acceptance?.todo_id === binding.todo_id && acceptance?.state === "ready" && params.validation_files_current === true; + const state = !eligible ? "turn_blocked" : !pinned ? "acceptance_unavailable" + : executor.available === false ? "runtime_unavailable" + : executor.available === null ? "runtime_unverified" : "launchable"; + return { + schema_version: "loopx_delegation_preflight_v0", binding, + state, turn_eligible: eligible, turn_route: route.kind, + acceptance_ready: pinned, + executor: {host: executor.executor, available: executor.available, + reason: executor.unavailable_reason, profile: executor.execution_profile}, + effects, + note: "Point-in-time preflight, not an execution permit or evidence of running work. " + + "Start rechecks admission; inspect original operations before dispatching replacements. " + + "Runtime probes have the selected executor's scope, not remote capacity guarantees.", + }; +} const transitions: Record = { prepared: ["running", "rejected"], running: ["turn_returned", "rejected"], turn_returned: ["accepted", "rejected"], accepted: [], rejected: [], diff --git a/loopx/control_plane/effect_runtime_handlers.ts b/loopx/control_plane/effect_runtime_handlers.ts index 339b07643a..eae441182f 100644 --- a/loopx/control_plane/effect_runtime_handlers.ts +++ b/loopx/control_plane/effect_runtime_handlers.ts @@ -1,5 +1,5 @@ import {projectTodoSummaryLanes, projectLegacyTodoWorkCounts} from "./todos/summary_lanes.ts"; -import {delegationInventoryItem, delegationInventoryQuery, selectDelegationBinding, transitionDelegationObservation} from "./collaboration/delegation.ts"; +import {delegationInventoryItem, delegationInventoryQuery, delegationPreflight, selectDelegationBinding, transitionDelegationObservation} from "./collaboration/delegation.ts"; import {planChatMode} from "./collaboration/chat_mode.ts"; import {resolveConversationScope} from "./collaboration/conversation_scope.ts"; import {previewTeamPlan, planTeamTransaction, teamTransactionIdentity} from "./work_items/team_plan.ts"; @@ -633,6 +633,7 @@ export function createEffectRuntimeHandlers( evaluatePostWritebackHookTransaction, ], ["collaboration.delegation.binding", selectDelegationBinding], + ["collaboration.delegation.preflight", delegationPreflight], ["collaboration.delegation.inventory_query", delegationInventoryQuery], ["collaboration.delegation.inventory_item", delegationInventoryItem], ["collaboration.chat_mode", planChatMode], diff --git a/loopx/control_plane/goals/acceptance.py b/loopx/control_plane/goals/acceptance.py index 9614d65b0a..0463cf6ce6 100644 --- a/loopx/control_plane/goals/acceptance.py +++ b/loopx/control_plane/goals/acceptance.py @@ -94,6 +94,30 @@ def _criterion_effects(criteria: list[dict[str, Any]]) -> list[dict[str, Any]]: ] +def goal_task_validation_files_current( + *, registry_path: Path, runtime_root: str, goal_id: str, agent_id: str, todo_id: str, +) -> bool: + """Check declared validator assets without executing output validation.""" + route = {**_routing(registry_path, goal_id, runtime_root, agent_id), "todo_id": todo_id} + basis = _result(_INSPECT_METHOD, route).get("completion_requirements") + if not isinstance(basis, dict) or not basis.get("criteria"): + return False + for effect in _criterion_effects(basis["criteria"]): + pins = effect["validation_files"] + workspace = None + if pins: + workspace, failure = _resolve_completion_validation_workspace( + registry_path=registry_path, goal_id=goal_id, + task_repository=effect.get("task_repository"), delivery_workspace=None, + validation_workspace_path=None, label=effect["validation_label"], + ) + if failure is not None: + return False + if not _acceptance_pins_match(pins, workspace): + return False + return True + + def validate_goal_task_acceptance( *, registry_path: Path, runtime_root: str, goal_id: str, agent_id: str, todo_id: str, ) -> dict[str, Any]: @@ -178,6 +202,35 @@ def run_goal_acceptance_effects( return results +def _acceptance_pins_match(pins: list, workspace: Path | None) -> bool: + if not pins: + return True + if workspace is None: + return False + for pin in pins: + if not isinstance(pin, dict): + return False + relative = pin.get("path") + if not isinstance(relative, str) or not relative or "\\" in relative: + return False + path = Path(relative) + if path.is_absolute() or ".." in path.parts: + return False + candidate = workspace + try: + for part in path.parts: + candidate = candidate / part + if candidate.is_symlink(): + return False + if not candidate.is_file() or hashlib.sha256( + candidate.read_bytes() + ).hexdigest() != pin.get("sha256"): + return False + except OSError: + return False + return True + + def run_goal_acceptance_validation_effect( *, effect: Mapping[str, Any], @@ -208,34 +261,6 @@ def run_goal_acceptance_validation_effect( if failure is not None: return failure - def pins_match() -> bool: - if not pins: - return True - if workspace is None: - return False - for pin in pins: - if not isinstance(pin, dict): - return False - relative = pin.get("path") - if not isinstance(relative, str) or not relative or "\\" in relative: - return False - path = Path(relative) - if path.is_absolute() or ".." in path.parts: - return False - candidate = workspace - try: - for part in path.parts: - candidate = candidate / part - if candidate.is_symlink(): - return False - if not candidate.is_file() or hashlib.sha256( - candidate.read_bytes() - ).hexdigest() != pin.get("sha256"): - return False - except OSError: - return False - return True - def stale_receipt() -> dict[str, Any]: return { "schema_version": "issue_fix_validation_command_v0", @@ -249,7 +274,7 @@ def stale_receipt() -> dict[str, Any]: "local_path_captured": False, } - if not pins_match(): + if not _acceptance_pins_match(pins, workspace): return stale_receipt() receipt = run_declared_completion_validation_effect( effect={ @@ -260,7 +285,7 @@ def stale_receipt() -> dict[str, Any]: delivery_workspace=delivery_workspace, validation_workspace_path=validation_workspace_path, ) - return receipt if pins_match() else stale_receipt() + return receipt if _acceptance_pins_match(pins, workspace) else stale_receipt() def public_goal_acceptance(value: dict[str, Any]) -> dict[str, Any]: diff --git a/loopx/control_plane/turn_driver/executor.py b/loopx/control_plane/turn_driver/executor.py index 7928194563..d1edbfc575 100644 --- a/loopx/control_plane/turn_driver/executor.py +++ b/loopx/control_plane/turn_driver/executor.py @@ -785,6 +785,12 @@ def _execution_payload( "execution_mode": planned_host.get("execution_mode"), "host": journal.get("host"), **managed_executor_payload_entry(plan), + # Preview admission is an observation; execution receipts stay unchanged. + **({"route": { + "kind": plan["route"]["kind"], + "selected_todo_id": (plan["route"].get("selected_todo") or {}).get("todo_id"), + "would_invoke_host": plan["route"]["would_invoke_host"], + }} if not execute else {}), "result_kind": journal.get("result_kind"), "validation": journal.get("task_validation"), "receipt": journal.get("receipt"), diff --git a/loopx/web/chat/asset-retention.json b/loopx/web/chat/asset-retention.json index bac4587143..e1af5a39d4 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-CUFu3vTz.css", - "assets/index-CieyuaAt.js" + "assets/index--Ooz6gYk.js", + "assets/index-ABpQAa1U.css" ], [ "assets/geist-cyrillic-ext-wght-normal-DjL33-gN.woff2", @@ -28,8 +28,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-CUFu3vTz.css", - "assets/index-DY3jV5HH.js" + "assets/index-Cvw0rnKv.js", + "assets/index-D3Tjh7Nj.css" ] ] } diff --git a/loopx/web/chat/assets/index--Ooz6gYk.js b/loopx/web/chat/assets/index--Ooz6gYk.js new file mode 100644 index 0000000000..e0c928d42f --- /dev/null +++ b/loopx/web/chat/assets/index--Ooz6gYk.js @@ -0,0 +1,137 @@ +var e=Object.create,t=Object.defineProperty,n=Object.getOwnPropertyDescriptor,r=Object.getOwnPropertyNames,i=Object.getPrototypeOf,a=Object.prototype.hasOwnProperty,o=(e,t)=>()=>(t||(e((t={exports:{}}).exports,t),e=null),t.exports),s=(e,i,o,s)=>{if(i&&typeof i==`object`||typeof i==`function`)for(var c=r(i),l=0,u=c.length,d;li[e]).bind(null,d),enumerable:!(s=n(i,d))||s.enumerable});return e},c=(n,r,o)=>(o=n==null?{}:e(i(n)),s(r||!n||!n.__esModule||!a.call(n,`default`)?t(o,`default`,{value:n,enumerable:!0}):o,n));(function(){let e=document.createElement(`link`).relList;if(e&&e.supports&&e.supports(`modulepreload`))return;for(let e of document.querySelectorAll(`link[rel="modulepreload"]`))n(e);new MutationObserver(e=>{for(let t of e)if(t.type===`childList`)for(let e of t.addedNodes)e.tagName===`LINK`&&e.rel===`modulepreload`&&n(e)}).observe(document,{childList:!0,subtree:!0});function t(e){let t={};return e.integrity&&(t.integrity=e.integrity),e.referrerPolicy&&(t.referrerPolicy=e.referrerPolicy),t.credentials=e.crossOrigin===`use-credentials`?`include`:e.crossOrigin===`anonymous`?`omit`:`same-origin`,t}function n(e){if(e.ep)return;e.ep=!0;let n=t(e);fetch(e.href,n)}})();var l=o((e=>{function t(e,t){var n=e.length;e.push(t);a:for(;0>>1,a=e[r];if(0>>1;ri(c,n))li(u,c)?(e[r]=u,e[l]=n,r=l):(e[r]=c,e[s]=n,r=s);else if(li(u,n))e[r]=u,e[l]=n,r=l;else break a}}return t}function i(e,t){var n=e.sortIndex-t.sortIndex;return n===0?e.id-t.id:n}if(e.unstable_now=void 0,typeof performance==`object`&&typeof performance.now==`function`){var a=performance;e.unstable_now=function(){return a.now()}}else{var o=Date,s=o.now();e.unstable_now=function(){return o.now()-s}}var c=[],l=[],u=1,d=null,f=3,p=!1,m=!1,h=!1,g=!1,_=typeof setTimeout==`function`?setTimeout:null,v=typeof clearTimeout==`function`?clearTimeout:null,y=typeof setImmediate<`u`?setImmediate:null;function b(e){for(var i=n(l);i!==null;){if(i.callback===null)r(l);else if(i.startTime<=e)r(l),i.sortIndex=i.expirationTime,t(c,i);else break;i=n(l)}}function x(e){if(h=!1,b(e),!m){if(n(c)!==null)m=!0,S||(S=!0,O());else{var t=n(l);t!==null&&te(x,t.startTime-e)}}}var S=!1,C=-1,w=5,T=-1;function E(){return g?!0:!(e.unstable_now()-Tt&&E());){var o=d.callback;if(typeof o==`function`){d.callback=null,f=d.priorityLevel;var s=o(d.expirationTime<=t);if(t=e.unstable_now(),typeof s==`function`){d.callback=s,b(t),i=!0;break b}d===n(c)&&r(c),b(t)}else r(c);d=n(c)}if(d!==null)i=!0;else{var u=n(l);u!==null&&te(x,u.startTime-t),i=!1}}break a}finally{d=null,f=a,p=!1}}}finally{i?O():S=!1}}}var O;if(typeof y==`function`)O=function(){y(D)};else if(typeof MessageChannel<`u`){var k=new MessageChannel,ee=k.port2;k.port1.onmessage=D,O=function(){ee.postMessage(null)}}else O=function(){_(D,0)};function te(t,n){C=_(function(){t(e.unstable_now())},n)}e.unstable_IdlePriority=5,e.unstable_ImmediatePriority=1,e.unstable_LowPriority=4,e.unstable_NormalPriority=3,e.unstable_Profiling=null,e.unstable_UserBlockingPriority=2,e.unstable_cancelCallback=function(e){e.callback=null},e.unstable_forceFrameRate=function(e){0>e||125o?(r.sortIndex=a,t(l,r),n(c)===null&&r===n(l)&&(h?(v(C),C=-1):h=!0,te(x,a-o))):(r.sortIndex=s,t(c,r),m||p||(m=!0,S||(S=!0,O()))),r},e.unstable_shouldYield=E,e.unstable_wrapCallback=function(e){var t=f;return function(){var n=f;f=t;try{return e.apply(this,arguments)}finally{f=n}}}})),u=o(((e,t)=>{t.exports=l()})),d=o((e=>{var t=Symbol.for(`react.transitional.element`),n=Symbol.for(`react.portal`),r=Symbol.for(`react.fragment`),i=Symbol.for(`react.strict_mode`),a=Symbol.for(`react.profiler`),o=Symbol.for(`react.consumer`),s=Symbol.for(`react.context`),c=Symbol.for(`react.forward_ref`),l=Symbol.for(`react.suspense`),u=Symbol.for(`react.memo`),d=Symbol.for(`react.lazy`),f=Symbol.for(`react.activity`),p=Symbol.iterator;function m(e){return typeof e!=`object`||!e?null:(e=p&&e[p]||e[`@@iterator`],typeof e==`function`?e:null)}var h={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},g=Object.assign,_={};function v(e,t,n){this.props=e,this.context=t,this.refs=_,this.updater=n||h}v.prototype.isReactComponent={},v.prototype.setState=function(e,t){if(typeof e!=`object`&&typeof e!=`function`&&e!=null)throw Error(`takes an object of state variables to update or a function which returns an object of state variables.`);this.updater.enqueueSetState(this,e,t,`setState`)},v.prototype.forceUpdate=function(e){this.updater.enqueueForceUpdate(this,e,`forceUpdate`)};function y(){}y.prototype=v.prototype;function b(e,t,n){this.props=e,this.context=t,this.refs=_,this.updater=n||h}var x=b.prototype=new y;x.constructor=b,g(x,v.prototype),x.isPureReactComponent=!0;var S=Array.isArray;function C(){}var w={H:null,A:null,T:null,S:null},T=Object.prototype.hasOwnProperty;function E(e,n,r){var i=r.ref;return{$$typeof:t,type:e,key:n,ref:i===void 0?null:i,props:r}}function D(e,t){return E(e.type,t,e.props)}function O(e){return typeof e==`object`&&!!e&&e.$$typeof===t}function k(e){var t={"=":`=0`,":":`=2`};return`$`+e.replace(/[=:]/g,function(e){return t[e]})}var ee=/\/+/g;function te(e,t){return typeof e==`object`&&e&&e.key!=null?k(``+e.key):t.toString(36)}function A(e){switch(e.status){case`fulfilled`:return e.value;case`rejected`:throw e.reason;default:switch(typeof e.status==`string`?e.then(C,C):(e.status=`pending`,e.then(function(t){e.status===`pending`&&(e.status=`fulfilled`,e.value=t)},function(t){e.status===`pending`&&(e.status=`rejected`,e.reason=t)})),e.status){case`fulfilled`:return e.value;case`rejected`:throw e.reason}}throw e}function j(e,r,i,a,o){var s=typeof e;(s===`undefined`||s===`boolean`)&&(e=null);var c=!1;if(e===null)c=!0;else switch(s){case`bigint`:case`string`:case`number`:c=!0;break;case`object`:switch(e.$$typeof){case t:case n:c=!0;break;case d:return c=e._init,j(c(e._payload),r,i,a,o)}}if(c)return o=o(e),c=a===``?`.`+te(e,0):a,S(o)?(i=``,c!=null&&(i=c.replace(ee,`$&/`)+`/`),j(o,r,i,``,function(e){return e})):o!=null&&(O(o)&&(o=D(o,i+(o.key==null||e&&e.key===o.key?``:(``+o.key).replace(ee,`$&/`)+`/`)+c)),r.push(o)),1;c=0;var l=a===``?`.`:a+`:`;if(S(e))for(var u=0;u{t.exports=d()})),p=o((e=>{var t=f();function n(e){var t=`https://react.dev/errors/`+e;if(1{function n(){if(!(typeof __REACT_DEVTOOLS_GLOBAL_HOOK__>`u`||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!=`function`))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(n)}catch(e){console.error(e)}}n(),t.exports=p()})),h=o((e=>{var t=u(),n=f(),r=m();function i(e){var t=`https://react.dev/errors/`+e;if(1ae||(e.current=ie[ae],ie[ae]=null,ae--)}function I(e,t){ae++,ie[ae]=e.current,e.current=t}var se=F(null),L=F(null),ce=F(null),le=F(null);function ue(e,t){switch(I(ce,t),I(L,e),I(se,null),t.nodeType){case 9:case 11:e=(e=t.documentElement)&&(e=e.namespaceURI)?Wd(e):0;break;default:if(e=t.tagName,t=t.namespaceURI)t=Wd(t),e=Gd(t,e);else switch(e){case`svg`:e=1;break;case`math`:e=2;break;default:e=0}}oe(se),I(se,e)}function de(){oe(se),oe(L),oe(ce)}function fe(e){e.memoizedState!==null&&I(le,e);var t=se.current,n=Gd(t,e.type);t!==n&&(I(L,e),I(se,n))}function pe(e){L.current===e&&(oe(se),oe(L)),le.current===e&&(oe(le),tp._currentValue=re)}var me,he;function ge(e){if(me===void 0)try{throw Error()}catch(e){var t=e.stack.trim().match(/\n( *(at )?)/);me=t&&t[1]||``,he=-1)`:-1i||c[r]!==l[i]){var u=` +`+c[r].replace(` at new `,` at `);return e.displayName&&u.includes(``)&&(u=u.replace(``,e.displayName)),u}while(1<=r&&0<=i);break}}}finally{_e=!1,Error.prepareStackTrace=n}return(n=e?e.displayName||e.name:``)?ge(n):``}function ye(e,t){switch(e.tag){case 26:case 27:case 5:return ge(e.type);case 16:return ge(`Lazy`);case 13:return e.child!==t&&t!==null?ge(`Suspense Fallback`):ge(`Suspense`);case 19:return ge(`SuspenseList`);case 0:case 15:return ve(e.type,!1);case 11:return ve(e.type.render,!1);case 1:return ve(e.type,!0);case 31:return ge(`Activity`);default:return``}}function be(e){try{var t=``,n=null;do t+=ye(e,n),n=e,e=e.return;while(e);return t}catch(e){return` +Error generating stack: `+e.message+` +`+e.stack}}var xe=Object.prototype.hasOwnProperty,Se=t.unstable_scheduleCallback,Ce=t.unstable_cancelCallback,we=t.unstable_shouldYield,Te=t.unstable_requestPaint,Ee=t.unstable_now,De=t.unstable_getCurrentPriorityLevel,Oe=t.unstable_ImmediatePriority,ke=t.unstable_UserBlockingPriority,Ae=t.unstable_NormalPriority,je=t.unstable_LowPriority,Me=t.unstable_IdlePriority,Ne=t.log,R=t.unstable_setDisableYieldValue,z=null,Pe=null;function Fe(e){if(typeof Ne==`function`&&R(e),Pe&&typeof Pe.setStrictMode==`function`)try{Pe.setStrictMode(z,e)}catch{}}var Ie=Math.clz32?Math.clz32:B,Le=Math.log,Re=Math.LN2;function B(e){return e>>>=0,e===0?32:31-(Le(e)/Re|0)|0}var ze=256,Be=262144,Ve=4194304;function He(e){var t=e&42;if(t!==0)return t;switch(e&-e){case 1:return 1;case 2:return 2;case 4:return 4;case 8:return 8;case 16:return 16;case 32:return 32;case 64:return 64;case 128:return 128;case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:return e&261888;case 262144:case 524288:case 1048576:case 2097152:return e&3932160;case 4194304:case 8388608:case 16777216:case 33554432:return e&62914560;case 67108864:return 67108864;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 0;default:return e}}function Ue(e,t,n){var r=e.pendingLanes;if(r===0)return 0;var i=0,a=e.suspendedLanes,o=e.pingedLanes;e=e.warmLanes;var s=r&134217727;return s===0?(s=r&~a,s===0?o===0?n||(n=r&~e,n!==0&&(i=He(n))):i=He(o):i=He(s)):(r=s&~a,r===0?(o&=s,o===0?n||(n=s&~e,n!==0&&(i=He(n))):i=He(o)):i=He(r)),i===0?0:t!==0&&t!==i&&(t&a)===0&&(a=i&-i,n=t&-t,a>=n||a===32&&n&4194048)?t:i}function We(e,t){return(e.pendingLanes&~(e.suspendedLanes&~e.pingedLanes)&t)===0}function Ge(e,t){switch(e){case 1:case 2:case 4:case 8:case 64:return t+250;case 16:case 32:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return t+5e3;case 4194304:case 8388608:case 16777216:case 33554432:return-1;case 67108864:case 134217728:case 268435456:case 536870912:case 1073741824:return-1;default:return-1}}function Ke(){var e=Ve;return Ve<<=1,!(Ve&62914560)&&(Ve=4194304),e}function qe(e){for(var t=[],n=0;31>n;n++)t.push(e);return t}function V(e,t){e.pendingLanes|=t,t!==268435456&&(e.suspendedLanes=0,e.pingedLanes=0,e.warmLanes=0)}function Je(e,t,n,r,i,a){var o=e.pendingLanes;e.pendingLanes=n,e.suspendedLanes=0,e.pingedLanes=0,e.warmLanes=0,e.expiredLanes&=n,e.entangledLanes&=n,e.errorRecoveryDisabledLanes&=n,e.shellSuspendCounter=0;var s=e.entanglements,c=e.expirationTimes,l=e.hiddenUpdates;for(n=o&~n;0`u`||window.document===void 0||window.document.createElement===void 0),sn=!1;if(on)try{var cn={};Object.defineProperty(cn,"passive",{get:function(){sn=!0}}),window.addEventListener(`test`,cn,cn),window.removeEventListener(`test`,cn,cn)}catch{sn=!1}var ln=null,un=null,dn=null;function fn(){if(dn)return dn;var e,t=un,n=t.length,r,i=`value`in ln?ln.value:ln.textContent,a=i.length;for(e=0;e=Wn),qn=` `,Jn=!1;function Yn(e,t){switch(e){case`keyup`:return Hn.indexOf(t.keyCode)!==-1;case`keydown`:return t.keyCode!==229;case`keypress`:case`mousedown`:case`focusout`:return!0;default:return!1}}function Xn(e){return e=e.detail,typeof e==`object`&&`data`in e?e.data:null}var Zn=!1;function Qn(e,t){switch(e){case`compositionend`:return Xn(t);case`keypress`:return t.which===32?(Jn=!0,qn):null;case`textInput`:return e=t.data,e===qn&&Jn?null:e;default:return null}}function $n(e,t){if(Zn)return e===`compositionend`||!Un&&Yn(e,t)?(e=fn(),dn=un=ln=null,Zn=!1,e):null;switch(e){case`paste`:return null;case`keypress`:if(!(t.ctrlKey||t.altKey||t.metaKey)||t.ctrlKey&&t.altKey){if(t.char&&1=t)return{node:n,offset:t-e};e=r}a:{for(;n;){if(n.nextSibling){n=n.nextSibling;break a}n=n.parentNode}n=void 0}n=xr(n)}}function Cr(e,t){return e&&t?e===t?!0:e&&e.nodeType===3?!1:t&&t.nodeType===3?Cr(e,t.parentNode):`contains`in e?e.contains(t):e.compareDocumentPosition?!!(e.compareDocumentPosition(t)&16):!1:!1}function wr(e){e=e!=null&&e.ownerDocument!=null&&e.ownerDocument.defaultView!=null?e.ownerDocument.defaultView:window;for(var t=Nt(e.document);t instanceof e.HTMLIFrameElement;){try{var n=typeof t.contentWindow.location.href==`string`}catch{n=!1}if(n)e=t.contentWindow;else break;t=Nt(e.document)}return t}function Tr(e){var t=e&&e.nodeName&&e.nodeName.toLowerCase();return t&&(t===`input`&&(e.type===`text`||e.type===`search`||e.type===`tel`||e.type===`url`||e.type===`password`)||t===`textarea`||e.contentEditable===`true`)}var Er=on&&`documentMode`in document&&11>=document.documentMode,Dr=null,Or=null,kr=null,Ar=!1;function jr(e,t,n){var r=n.window===n?n.document:n.nodeType===9?n:n.ownerDocument;Ar||Dr==null||Dr!==Nt(r)||(r=Dr,`selectionStart`in r&&Tr(r)?r={start:r.selectionStart,end:r.selectionEnd}:(r=(r.ownerDocument&&r.ownerDocument.defaultView||window).getSelection(),r={anchorNode:r.anchorNode,anchorOffset:r.anchorOffset,focusNode:r.focusNode,focusOffset:r.focusOffset}),kr&&br(kr,r)||(kr=r,r=Od(Or,`onSelect`),0>=o,i-=o,Ci=1<<32-Ie(t)+i|n<h?(g=d,d=null):g=d.sibling;var _=p(i,d,s[h],c);if(_===null){d===null&&(d=g);break}e&&d&&_.alternate===null&&t(i,d),a=o(_,a,h),u===null?l=_:u.sibling=_,u=_,d=g}if(h===s.length)return n(i,d),Mi&&Ti(i,h),l;if(d===null){for(;hg?(_=h,h=null):_=h.sibling;var y=p(a,h,v.value,l);if(y===null){h===null&&(h=_);break}e&&h&&y.alternate===null&&t(a,h),s=o(y,s,g),d===null?u=y:d.sibling=y,d=y,h=_}if(v.done)return n(a,h),Mi&&Ti(a,g),u;if(h===null){for(;!v.done;g++,v=c.next())v=f(a,v.value,l),v!==null&&(s=o(v,s,g),d===null?u=v:d.sibling=v,d=v);return Mi&&Ti(a,g),u}for(h=r(h);!v.done;g++,v=c.next())v=m(h,a,g,v.value,l),v!==null&&(e&&v.alternate!==null&&h.delete(v.key===null?g:v.key),s=o(v,s,g),d===null?u=v:d.sibling=v,d=v);return e&&h.forEach(function(e){return t(a,e)}),Mi&&Ti(a,g),u}function b(e,r,o,c){if(typeof o==`object`&&o&&o.type===y&&o.key===null&&(o=o.props.children),typeof o==`object`&&o){switch(o.$$typeof){case _:a:{for(var l=o.key;r!==null;){if(r.key===l){if(l=o.type,l===y){if(r.tag===7){n(e,r.sibling),c=a(r,o.props.children),c.return=e,e=c;break a}}else if(r.elementType===l||typeof l==`object`&&l&&l.$$typeof===O&&wa(l)===r.type){n(e,r.sibling),c=a(r,o.props),ja(c,o),c.return=e,e=c;break a}n(e,r);break}t(e,r),r=r.sibling}o.type===y?(c=ui(o.props.children,e.mode,c,o.key),c.return=e,e=c):(c=li(o.type,o.key,o.props,null,e.mode,c),ja(c,o),c.return=e,e=c)}return s(e);case v:a:{for(l=o.key;r!==null;){if(r.key===l){if(r.tag===4&&r.stateNode.containerInfo===o.containerInfo&&r.stateNode.implementation===o.implementation){n(e,r.sibling),c=a(r,o.children||[]),c.return=e,e=c;break a}n(e,r);break}t(e,r),r=r.sibling}c=pi(o,e.mode,c),c.return=e,e=c}return s(e);case O:return o=wa(o),b(e,r,o,c)}if(M(o))return h(e,r,o,c);if(A(o)){if(l=A(o),typeof l!=`function`)throw Error(i(150));return o=l.call(o),g(e,r,o,c)}if(typeof o.then==`function`)return b(e,r,Aa(o),c);if(o.$$typeof===C)return b(e,r,$i(e,o),c);Ma(e,o)}return typeof o==`string`&&o!==``||typeof o==`number`||typeof o==`bigint`?(o=``+o,r!==null&&r.tag===6?(n(e,r.sibling),c=a(r,o),c.return=e,e=c):(n(e,r),c=di(o,e.mode,c),c.return=e,e=c),s(e)):n(e,r)}return function(e,t,n,r){try{ka=0;var i=b(e,t,n,r);return Oa=null,i}catch(t){if(t===ya||t===xa)throw t;var a=ai(29,t,null,e.mode);return a.lanes=r,a.return=e,a}}}var Pa=Na(!0),Fa=Na(!1),Ia=!1;function La(e){e.updateQueue={baseState:e.memoizedState,firstBaseUpdate:null,lastBaseUpdate:null,shared:{pending:null,lanes:0,hiddenCallbacks:null},callbacks:null}}function Ra(e,t){e=e.updateQueue,t.updateQueue===e&&(t.updateQueue={baseState:e.baseState,firstBaseUpdate:e.firstBaseUpdate,lastBaseUpdate:e.lastBaseUpdate,shared:e.shared,callbacks:null})}function za(e){return{lane:e,tag:0,payload:null,callback:null,next:null}}function Ba(e,t,n){var r=e.updateQueue;if(r===null)return null;if(r=r.shared,Vl&2){var i=r.pending;return i===null?t.next=t:(t.next=i.next,i.next=t),r.pending=t,t=ni(e),ti(e,null,n),t}return Qr(e,r,t,n),ni(e)}function Va(e,t,n){if(t=t.updateQueue,t!==null&&(t=t.shared,n&4194048)){var r=t.lanes;r&=e.pendingLanes,n|=r,t.lanes=n,Xe(e,n)}}function Ha(e,t){var n=e.updateQueue,r=e.alternate;if(r!==null&&(r=r.updateQueue,n===r)){var i=null,a=null;if(n=n.firstBaseUpdate,n!==null){do{var o={lane:n.lane,tag:n.tag,payload:n.payload,callback:null,next:null};a===null?i=a=o:a=a.next=o,n=n.next}while(n!==null);a===null?i=a=t:a=a.next=t}else i=a=t;n={baseState:r.baseState,firstBaseUpdate:i,lastBaseUpdate:a,shared:r.shared,callbacks:r.callbacks},e.updateQueue=n;return}e=n.lastBaseUpdate,e===null?n.firstBaseUpdate=t:e.next=t,n.lastBaseUpdate=t}var Ua=!1;function Wa(){if(Ua){var e=ua;if(e!==null)throw e}}function Ga(e,t,n,r){Ua=!1;var i=e.updateQueue;Ia=!1;var a=i.firstBaseUpdate,o=i.lastBaseUpdate,s=i.shared.pending;if(s!==null){i.shared.pending=null;var c=s,l=c.next;c.next=null,o===null?a=l:o.next=l,o=c;var u=e.alternate;u!==null&&(u=u.updateQueue,s=u.lastBaseUpdate,s!==o&&(s===null?u.firstBaseUpdate=l:s.next=l,u.lastBaseUpdate=c))}if(a!==null){var d=i.baseState;o=0,u=l=c=null,s=a;do{var f=s.lane&-536870913,p=f!==s.lane;if(p?(Wl&f)===f:(r&f)===f){f!==0&&f===la&&(Ua=!0),u!==null&&(u=u.next={lane:0,tag:s.tag,payload:s.payload,callback:null,next:null});a:{var m=e,g=s;f=t;var _=n;switch(g.tag){case 1:if(m=g.payload,typeof m==`function`){d=m.call(_,d,f);break a}d=m;break a;case 3:m.flags=m.flags&-65537|128;case 0:if(m=g.payload,f=typeof m==`function`?m.call(_,d,f):m,f==null)break a;d=h({},d,f);break a;case 2:Ia=!0}}f=s.callback,f!==null&&(e.flags|=64,p&&(e.flags|=8192),p=i.callbacks,p===null?i.callbacks=[f]:p.push(f))}else p={lane:f,tag:s.tag,payload:s.payload,callback:s.callback,next:null},u===null?(l=u=p,c=d):u=u.next=p,o|=f;if(s=s.next,s===null){if(s=i.shared.pending,s===null)break;p=s,s=p.next,p.next=null,i.lastBaseUpdate=p,i.shared.pending=null}}while(1);u===null&&(c=d),i.baseState=c,i.firstBaseUpdate=l,i.lastBaseUpdate=u,a===null&&(i.shared.lanes=0),Ql|=o,e.lanes=o,e.memoizedState=d}}function Ka(e,t){if(typeof e!=`function`)throw Error(i(191,e));e.call(t)}function qa(e,t){var n=e.callbacks;if(n!==null)for(e.callbacks=null,e=0;ea?a:8;var o=N.T,s={};N.T=s,Ps(e,!1,t,n);try{var c=i(),l=N.S;l!==null&&l(s,c),typeof c==`object`&&c&&typeof c.then==`function`?Ns(e,t,pa(c,r),bu(e)):Ns(e,t,r,bu(e))}catch(n){Ns(e,t,{then:function(){},status:`rejected`,reason:n},bu())}finally{P.p=a,o!==null&&s.types!==null&&(o.types=s.types),N.T=o}}function Cs(){}function ws(e,t,n,r){if(e.tag!==5)throw Error(i(476));var a=Ts(e).queue;Ss(e,a,t,re,n===null?Cs:function(){return Es(e),n(r)})}function Ts(e){var t=e.memoizedState;if(t!==null)return t;t={memoizedState:re,baseState:re,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:Fo,lastRenderedState:re},next:null};var n={};return t.next={memoizedState:n,baseState:n,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:Fo,lastRenderedState:n},next:null},e.memoizedState=t,e=e.alternate,e!==null&&(e.memoizedState=t),t}function Es(e){var t=Ts(e);t.next===null&&(t=e.alternate.memoizedState),Ns(e,t.next.queue,{},bu())}function Ds(){return H(tp)}function Os(){return Ao().memoizedState}function ks(){return Ao().memoizedState}function As(e){for(var t=e.return;t!==null;){switch(t.tag){case 24:case 3:var n=bu();e=za(n);var r=Ba(t,e,n);r!==null&&(Su(r,t,n),Va(r,t,n)),t={cache:aa()},e.payload=t;return}t=t.return}}function js(e,t,n){var r=bu();n={lane:r,revertLane:0,gesture:null,action:n,hasEagerState:!1,eagerState:null,next:null},Fs(e)?Is(t,n):(n=$r(e,t,n,r),n!==null&&(Su(n,e,r),Ls(n,t,r)))}function Ms(e,t,n){Ns(e,t,n,bu())}function Ns(e,t,n,r){var i={lane:r,revertLane:0,gesture:null,action:n,hasEagerState:!1,eagerState:null,next:null};if(Fs(e))Is(t,i);else{var a=e.alternate;if(e.lanes===0&&(a===null||a.lanes===0)&&(a=t.lastRenderedReducer,a!==null))try{var o=t.lastRenderedState,s=a(o,n);if(i.hasEagerState=!0,i.eagerState=s,yr(s,o))return Qr(e,t,i,0),Hl===null&&Zr(),!1}catch{}if(n=$r(e,t,i,r),n!==null)return Su(n,e,r),Ls(n,t,r),!0}return!1}function Ps(e,t,n,r){if(r={lane:2,revertLane:md(),gesture:null,action:r,hasEagerState:!1,eagerState:null,next:null},Fs(e)){if(t)throw Error(i(479))}else t=$r(e,n,r,2),t!==null&&Su(t,e,2)}function Fs(e){var t=e.alternate;return e===lo||t!==null&&t===lo}function Is(e,t){mo=po=!0;var n=e.pending;n===null?t.next=t:(t.next=n.next,n.next=t),e.pending=t}function Ls(e,t,n){if(n&4194048){var r=t.lanes;r&=e.pendingLanes,n|=r,t.lanes=n,Xe(e,n)}}var Rs={readContext:H,use:No,useCallback:bo,useContext:bo,useEffect:bo,useImperativeHandle:bo,useLayoutEffect:bo,useInsertionEffect:bo,useMemo:bo,useReducer:bo,useRef:bo,useState:bo,useDebugValue:bo,useDeferredValue:bo,useTransition:bo,useSyncExternalStore:bo,useId:bo,useHostTransitionStatus:bo,useFormState:bo,useActionState:bo,useOptimistic:bo,useMemoCache:bo,useCacheRefresh:bo};Rs.useEffectEvent=bo;var zs={readContext:H,use:No,useCallback:function(e,t){return ko().memoizedState=[e,t===void 0?null:t],e},useContext:H,useEffect:ls,useImperativeHandle:function(e,t,n){n=n==null?null:n.concat([e]),ss(4194308,4,hs.bind(null,t,e),n)},useLayoutEffect:function(e,t){return ss(4194308,4,e,t)},useInsertionEffect:function(e,t){ss(4,2,e,t)},useMemo:function(e,t){var n=ko();t=t===void 0?null:t;var r=e();if(ho){Fe(!0);try{e()}finally{Fe(!1)}}return n.memoizedState=[r,t],r},useReducer:function(e,t,n){var r=ko();if(n!==void 0){var i=n(t);if(ho){Fe(!0);try{n(t)}finally{Fe(!1)}}}else i=t;return r.memoizedState=r.baseState=i,e={pending:null,lanes:0,dispatch:null,lastRenderedReducer:e,lastRenderedState:i},r.queue=e,e=e.dispatch=js.bind(null,lo,e),[r.memoizedState,e]},useRef:function(e){var t=ko();return e={current:e},t.memoizedState=e},useState:function(e){e=Go(e);var t=e.queue,n=Ms.bind(null,lo,t);return t.dispatch=n,[e.memoizedState,n]},useDebugValue:_s,useDeferredValue:function(e,t){return bs(ko(),e,t)},useTransition:function(){var e=Go(!1);return e=Ss.bind(null,lo,e.queue,!0,!1),ko().memoizedState=e,[!1,e]},useSyncExternalStore:function(e,t,n){var r=lo,a=ko();if(Mi){if(n===void 0)throw Error(i(407));n=n()}else{if(n=t(),Hl===null)throw Error(i(349));Wl&127||Bo(r,t,n)}a.memoizedState=n;var o={value:n,getSnapshot:t};return a.queue=o,ls(Ho.bind(null,r,o,e),[e]),r.flags|=2048,as(9,{destroy:void 0},Vo.bind(null,r,o,n,t),null),n},useId:function(){var e=ko(),t=Hl.identifierPrefix;if(Mi){var n=wi,r=Ci;n=(r&~(1<<32-Ie(r)-1)).toString(32)+n,t=`_`+t+`R_`+n,n=go++,0<\/script>`,o=o.removeChild(o.firstChild);break;case`select`:o=typeof r.is==`string`?s.createElement(`select`,{is:r.is}):s.createElement(`select`),r.multiple?o.multiple=!0:r.size&&(o.size=r.size);break;default:o=typeof r.is==`string`?s.createElement(a,{is:r.is}):s.createElement(a)}}o[rt]=t,o[it]=r;a:for(s=t.child;s!==null;){if(s.tag===5||s.tag===6)o.appendChild(s.stateNode);else if(s.tag!==4&&s.tag!==27&&s.child!==null){s.child.return=s,s=s.child;continue}if(s===t)break a;for(;s.sibling===null;){if(s.return===null||s.return===t)break a;s=s.return}s.sibling.return=s.return,s=s.sibling}t.stateNode=o;a:switch(Ld(o,a,r),a){case`button`:case`input`:case`select`:case`textarea`:r=!!r.autoFocus;break a;case`img`:r=!0;break a;default:r=!1}r&&Nc(t)}}return Rc(t),Pc(t,t.type,e===null?null:e.memoizedProps,t.pendingProps,n),null;case 6:if(e&&t.stateNode!=null)e.memoizedProps!==r&&Nc(t);else{if(typeof r!=`string`&&t.stateNode===null)throw Error(i(166));if(e=ce.current,zi(t)){if(e=t.stateNode,n=t.memoizedProps,r=null,a=Ai,a!==null)switch(a.tag){case 27:case 5:r=a.memoizedProps}e[rt]=t,e=!!(e.nodeValue===n||r!==null&&!0===r.suppressHydrationWarning||Pd(e.nodeValue,n)),e||Ii(t,!0)}else e=Ud(e).createTextNode(r),e[rt]=t,t.stateNode=e}return Rc(t),null;case 31:if(n=t.memoizedState,e===null||e.memoizedState!==null){if(r=zi(t),n!==null){if(e===null){if(!r)throw Error(i(318));if(e=t.memoizedState,e=e===null?null:e.dehydrated,!e)throw Error(i(557));e[rt]=t}else Bi(),!(t.flags&128)&&(t.memoizedState=null),t.flags|=4;Rc(t),e=!1}else n=Vi(),e!==null&&e.memoizedState!==null&&(e.memoizedState.hydrationErrors=n),e=!0;if(!e)return t.flags&256?(ao(t),t):(ao(t),null);if(t.flags&128)throw Error(i(558))}return Rc(t),null;case 13:if(r=t.memoizedState,e===null||e.memoizedState!==null&&e.memoizedState.dehydrated!==null){if(a=zi(t),r!==null&&r.dehydrated!==null){if(e===null){if(!a)throw Error(i(318));if(a=t.memoizedState,a=a===null?null:a.dehydrated,!a)throw Error(i(317));a[rt]=t}else Bi(),!(t.flags&128)&&(t.memoizedState=null),t.flags|=4;Rc(t),a=!1}else a=Vi(),e!==null&&e.memoizedState!==null&&(e.memoizedState.hydrationErrors=a),a=!0;if(!a)return t.flags&256?(ao(t),t):(ao(t),null)}return ao(t),t.flags&128?(t.lanes=n,t):(n=r!==null,e=e!==null&&e.memoizedState!==null,n&&(r=t.child,a=null,r.alternate!==null&&r.alternate.memoizedState!==null&&r.alternate.memoizedState.cachePool!==null&&(a=r.alternate.memoizedState.cachePool.pool),o=null,r.memoizedState!==null&&r.memoizedState.cachePool!==null&&(o=r.memoizedState.cachePool.pool),o!==a&&(r.flags|=2048)),n!==e&&n&&(t.child.flags|=8192),Ic(t,t.updateQueue),Rc(t),null);case 4:return de(),e===null&&wd(t.stateNode.containerInfo),Rc(t),null;case 10:return qi(t.type),Rc(t),null;case 19:if(oe(oo),r=t.memoizedState,r===null)return Rc(t),null;if(a=!!(t.flags&128),o=r.rendering,o===null){if(a)Lc(r,!1);else{if(Zl!==0||e!==null&&e.flags&128)for(e=t.child;e!==null;){if(o=so(e),o!==null){for(t.flags|=128,Lc(r,!1),e=o.updateQueue,t.updateQueue=e,Ic(t,e),t.subtreeFlags=0,e=n,n=t.child;n!==null;)ci(n,e),n=n.sibling;return I(oo,oo.current&1|2),Mi&&Ti(t,r.treeForkCount),t.child}e=e.sibling}r.tail!==null&&Ee()>cu&&(t.flags|=128,a=!0,Lc(r,!1),t.lanes=4194304)}}else{if(!a){if(e=so(o),e!==null){if(t.flags|=128,a=!0,e=e.updateQueue,t.updateQueue=e,Ic(t,e),Lc(r,!0),r.tail===null&&r.tailMode===`hidden`&&!o.alternate&&!Mi)return Rc(t),null}else 2*Ee()-r.renderingStartTime>cu&&n!==536870912&&(t.flags|=128,a=!0,Lc(r,!1),t.lanes=4194304)}r.isBackwards?(o.sibling=t.child,t.child=o):(e=r.last,e===null?t.child=o:e.sibling=o,r.last=o)}return r.tail===null?(Rc(t),null):(e=r.tail,r.rendering=e,r.tail=e.sibling,r.renderingStartTime=Ee(),e.sibling=null,n=oo.current,I(oo,a?n&1|2:n&1),Mi&&Ti(t,r.treeForkCount),e);case 22:case 23:return ao(t),Qa(),r=t.memoizedState!==null,e===null?r&&(t.flags|=8192):e.memoizedState!==null!==r&&(t.flags|=8192),r?n&536870912&&!(t.flags&128)&&(Rc(t),t.subtreeFlags&6&&(t.flags|=8192)):Rc(t),n=t.updateQueue,n!==null&&Ic(t,n.retryQueue),n=null,e!==null&&e.memoizedState!==null&&e.memoizedState.cachePool!==null&&(n=e.memoizedState.cachePool.pool),r=null,t.memoizedState!==null&&t.memoizedState.cachePool!==null&&(r=t.memoizedState.cachePool.pool),r!==n&&(t.flags|=2048),e!==null&&oe(ha),null;case 24:return n=null,e!==null&&(n=e.memoizedState.cache),t.memoizedState.cache!==n&&(t.flags|=2048),qi(ia),Rc(t),null;case 25:return null;case 30:return null}throw Error(i(156,t.tag))}function Bc(e,t){switch(Oi(t),t.tag){case 1:return e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 3:return qi(ia),de(),e=t.flags,e&65536&&!(e&128)?(t.flags=e&-65537|128,t):null;case 26:case 27:case 5:return pe(t),null;case 31:if(t.memoizedState!==null){if(ao(t),t.alternate===null)throw Error(i(340));Bi()}return e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 13:if(ao(t),e=t.memoizedState,e!==null&&e.dehydrated!==null){if(t.alternate===null)throw Error(i(340));Bi()}return e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 19:return oe(oo),null;case 4:return de(),null;case 10:return qi(t.type),null;case 22:case 23:return ao(t),Qa(),e!==null&&oe(ha),e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 24:return qi(ia),null;case 25:return null;default:return null}}function Vc(e,t){switch(Oi(t),t.tag){case 3:qi(ia),de();break;case 26:case 27:case 5:pe(t);break;case 4:de();break;case 31:t.memoizedState!==null&&ao(t);break;case 13:ao(t);break;case 19:oe(oo);break;case 10:qi(t.type);break;case 22:case 23:ao(t),Qa(),e!==null&&oe(ha);break;case 24:qi(ia)}}function Hc(e,t){try{var n=t.updateQueue,r=n===null?null:n.lastEffect;if(r!==null){var i=r.next;n=i;do{if((n.tag&e)===e){r=void 0;var a=n.create,o=n.inst;r=a(),o.destroy=r}n=n.next}while(n!==i)}}catch(e){Zu(t,t.return,e)}}function Uc(e,t,n){try{var r=t.updateQueue,i=r===null?null:r.lastEffect;if(i!==null){var a=i.next;r=a;do{if((r.tag&e)===e){var o=r.inst,s=o.destroy;if(s!==void 0){o.destroy=void 0,i=t;var c=n,l=s;try{l()}catch(e){Zu(i,c,e)}}}r=r.next}while(r!==a)}}catch(e){Zu(t,t.return,e)}}function Wc(e){var t=e.updateQueue;if(t!==null){var n=e.stateNode;try{qa(t,n)}catch(t){Zu(e,e.return,t)}}}function Gc(e,t,n){n.props=Ks(e.type,e.memoizedProps),n.state=e.memoizedState;try{n.componentWillUnmount()}catch(n){Zu(e,t,n)}}function Kc(e,t){try{var n=e.ref;if(n!==null){switch(e.tag){case 26:case 27:case 5:var r=e.stateNode;break;case 30:r=e.stateNode;break;default:r=e.stateNode}typeof n==`function`?e.refCleanup=n(r):n.current=r}}catch(n){Zu(e,t,n)}}function qc(e,t){var n=e.ref,r=e.refCleanup;if(n!==null){if(typeof r==`function`)try{r()}catch(n){Zu(e,t,n)}finally{e.refCleanup=null,e=e.alternate,e!=null&&(e.refCleanup=null)}else if(typeof n==`function`)try{n(null)}catch(n){Zu(e,t,n)}else n.current=null}}function Jc(e){var t=e.type,n=e.memoizedProps,r=e.stateNode;try{a:switch(t){case`button`:case`input`:case`select`:case`textarea`:n.autoFocus&&r.focus();break a;case`img`:n.src?r.src=n.src:n.srcSet&&(r.srcset=n.srcSet)}}catch(t){Zu(e,e.return,t)}}function Yc(e,t,n){try{var r=e.stateNode;Rd(r,e.type,n,t),r[it]=t}catch(t){Zu(e,e.return,t)}}function Xc(e){return e.tag===5||e.tag===3||e.tag===26||e.tag===27&&ef(e.type)||e.tag===4}function Zc(e){a:for(;;){for(;e.sibling===null;){if(e.return===null||Xc(e.return))return null;e=e.return}for(e.sibling.return=e.return,e=e.sibling;e.tag!==5&&e.tag!==6&&e.tag!==18;){if(e.tag===27&&ef(e.type)||e.flags&2||e.child===null||e.tag===4)continue a;e.child.return=e,e=e.child}if(!(e.flags&2))return e.stateNode}}function Qc(e,t,n){var r=e.tag;if(r===5||r===6)e=e.stateNode,t?(n.nodeType===9?n.body:n.nodeName===`HTML`?n.ownerDocument.body:n).insertBefore(e,t):(t=n.nodeType===9?n.body:n.nodeName===`HTML`?n.ownerDocument.body:n,t.appendChild(e),n=n._reactRootContainer,n!=null||t.onclick!==null||(t.onclick=Xt));else if(r!==4&&(r===27&&ef(e.type)&&(n=e.stateNode,t=null),e=e.child,e!==null))for(Qc(e,t,n),e=e.sibling;e!==null;)Qc(e,t,n),e=e.sibling}function $c(e,t,n){var r=e.tag;if(r===5||r===6)e=e.stateNode,t?n.insertBefore(e,t):n.appendChild(e);else if(r!==4&&(r===27&&ef(e.type)&&(n=e.stateNode),e=e.child,e!==null))for($c(e,t,n),e=e.sibling;e!==null;)$c(e,t,n),e=e.sibling}function el(e){var t=e.stateNode,n=e.memoizedProps;try{for(var r=e.type,i=t.attributes;i.length;)t.removeAttributeNode(i[0]);Ld(t,r,n),t[rt]=e,t[it]=n}catch(t){Zu(e,e.return,t)}}var tl=!1,nl=!1,rl=!1,il=typeof WeakSet==`function`?WeakSet:Set,al=null;function ol(e,t){if(e=e.containerInfo,Vd=up,e=wr(e),Tr(e)){if(`selectionStart`in e)var n={start:e.selectionStart,end:e.selectionEnd};else a:{n=(n=e.ownerDocument)&&n.defaultView||window;var r=n.getSelection&&n.getSelection();if(r&&r.rangeCount!==0){n=r.anchorNode;var a=r.anchorOffset,o=r.focusNode;r=r.focusOffset;try{n.nodeType,o.nodeType}catch{n=null;break a}var s=0,c=-1,l=-1,u=0,d=0,f=e,p=null;b:for(;;){for(var m;f!==n||a!==0&&f.nodeType!==3||(c=s+a),f!==o||r!==0&&f.nodeType!==3||(l=s+r),f.nodeType===3&&(s+=f.nodeValue.length),(m=f.firstChild)!==null;)p=f,f=m;for(;;){if(f===e)break b;if(p===n&&++u===a&&(c=s),p===o&&++d===r&&(l=s),(m=f.nextSibling)!==null)break;f=p,p=f.parentNode}f=m}n=c===-1||l===-1?null:{start:c,end:l}}else n=null}n||={start:0,end:0}}else n=null;for(Hd={focusedElem:e,selectionRange:n},up=!1,al=t;al!==null;)if(t=al,e=t.child,t.subtreeFlags&1028&&e!==null)e.return=t,al=e;else for(;al!==null;){switch(t=al,o=t.alternate,e=t.flags,t.tag){case 0:if(e&4&&(e=t.updateQueue,e=e===null?null:e.events,e!==null))for(n=0;n title`))),Ld(o,r,n),o[rt]=e,gt(o),r=o;break a;case`link`:var s=Wf(`link`,`href`,a).get(r+(n.href||``));if(s){for(var c=0;cg&&(o=g,g=h,h=o);var _=Sr(s,h),v=Sr(s,g);if(_&&v&&(p.rangeCount!==1||p.anchorNode!==_.node||p.anchorOffset!==_.offset||p.focusNode!==v.node||p.focusOffset!==v.offset)){var y=d.createRange();y.setStart(_.node,_.offset),p.removeAllRanges(),h>g?(p.addRange(y),p.extend(v.node,v.offset)):(y.setEnd(v.node,v.offset),p.addRange(y))}}}}for(d=[],p=s;p=p.parentNode;)p.nodeType===1&&d.push({element:p,left:p.scrollLeft,top:p.scrollTop});for(typeof s.focus==`function`&&s.focus(),s=0;sn?32:n,N.T=null,n=gu,gu=null;var o=fu,s=mu;if(du=0,pu=fu=null,mu=0,Vl&6)throw Error(i(331));var c=Vl;if(Vl|=4,Il(o.current),Ol(o,o.current,s,n),Vl=c,q(0,!1),Pe&&typeof Pe.onPostCommitFiberRoot==`function`)try{Pe.onPostCommitFiberRoot(z,o)}catch{}return!0}finally{P.p=a,N.T=r,qu(e,t)}}function Xu(e,t,n){t=hi(n,t),t=Qs(e.stateNode,t,2),e=Ba(e,t,2),e!==null&&(V(e,2),cd(e))}function Zu(e,t,n){if(e.tag===3)Xu(e,e,n);else for(;t!==null;){if(t.tag===3){Xu(t,e,n);break}if(t.tag===1){var r=t.stateNode;if(typeof t.type.getDerivedStateFromError==`function`||typeof r.componentDidCatch==`function`&&(uu===null||!uu.has(r))){e=hi(n,e),n=$s(2),r=Ba(t,n,2),r!==null&&(ec(n,r,t,e),V(r,2),cd(r));break}}t=t.return}}function Qu(e,t,n){var r=e.pingCache;if(r===null){r=e.pingCache=new Bl;var i=new Set;r.set(t,i)}else i=r.get(t),i===void 0&&(i=new Set,r.set(t,i));i.has(n)||(Yl=!0,i.add(n),e=G.bind(null,e,t,n),t.then(e,e))}function G(e,t,n){var r=e.pingCache;r!==null&&r.delete(t),e.pingedLanes|=e.suspendedLanes&n,e.warmLanes&=~n,Hl===e&&(Wl&n)===n&&(Zl===4||Zl===3&&(Wl&62914560)===Wl&&300>Ee()-ou?!(Vl&2)&&ku(e,0):eu|=n,nu===Wl&&(nu=0)),cd(e)}function $u(e,t){t===0&&(t=Ke()),e=ei(e,t),e!==null&&(V(e,t),cd(e))}function ed(e){var t=e.memoizedState,n=0;t!==null&&(n=t.retryLane),$u(e,n)}function td(e,t){var n=0;switch(e.tag){case 31:case 13:var r=e.stateNode,a=e.memoizedState;a!==null&&(n=a.retryLane);break;case 19:r=e.stateNode;break;case 22:r=e.stateNode._retryCache;break;default:throw Error(i(314))}r!==null&&r.delete(t),$u(e,n)}function K(e,t){return Se(e,t)}var nd=null,rd=null,id=!1,ad=!1,od=!1,sd=0;function cd(e){e!==rd&&e.next===null&&(rd===null?nd=rd=e:rd=rd.next=e),ad=!0,id||(id=!0,pd())}function q(e,t){if(!od&&ad){od=!0;do for(var n=!1,r=nd;r!==null;){if(!t){if(e!==0){var i=r.pendingLanes;if(i===0)var a=0;else{var o=r.suspendedLanes,s=r.pingedLanes;a=(1<<31-Ie(42|e)+1)-1,a&=i&~(o&~s),a=a&201326741?a&201326741|1:a?a|2:0}a!==0&&(n=!0,fd(r,a))}else a=Wl,a=Ue(r,r===Hl?a:0,r.cancelPendingCommit!==null||r.timeoutHandle!==-1),!(a&3)||We(r,a)||(n=!0,fd(r,a))}r=r.next}while(n);od=!1}}function ld(){J()}function J(){ad=id=!1;var e=0;sd!==0&&Jd()&&(e=sd);for(var t=Ee(),n=null,r=nd;r!==null;){var i=r.next,a=ud(r,t);a===0?(r.next=null,n===null?nd=i:n.next=i,i===null&&(rd=n)):(n=r,(e!==0||a&3)&&(ad=!0)),r=i}du!==0&&du!==5||q(e,!1),sd!==0&&(sd=0)}function ud(e,t){for(var n=e.suspendedLanes,r=e.pingedLanes,i=e.expirationTimes,a=e.pendingLanes&-62914561;0s)break;var u=c.transferSize,d=c.initiatorType;u&&zd(d)&&(c=c.responseEnd,o+=u*(c`u`?null:document;function wf(e,t,n){var r=Cf;if(r&&typeof t==`string`&&t){var i=Ft(t);i=`link[rel="`+e+`"][href="`+i+`"]`,typeof n==`string`&&(i+=`[crossorigin="`+n+`"]`),vf.has(i)||(vf.add(i),e={rel:e,crossOrigin:n,href:t},r.querySelector(i)===null&&(t=r.createElement(`link`),Ld(t,`link`,e),gt(t),r.head.appendChild(t)))}}function Tf(e){bf.D(e),wf(`dns-prefetch`,e,null)}function Ef(e,t){bf.C(e,t),wf(`preconnect`,e,t)}function Df(e,t,n){bf.L(e,t,n);var r=Cf;if(r&&e&&t){var i=`link[rel="preload"][as="`+Ft(t)+`"]`;t===`image`&&n&&n.imageSrcSet?(i+=`[imagesrcset="`+Ft(n.imageSrcSet)+`"]`,typeof n.imageSizes==`string`&&(i+=`[imagesizes="`+Ft(n.imageSizes)+`"]`)):i+=`[href="`+Ft(e)+`"]`;var a=i;switch(t){case`style`:a=Nf(e);break;case`script`:a=Lf(e)}_f.has(a)||(e=h({rel:`preload`,href:t===`image`&&n&&n.imageSrcSet?void 0:e,as:t},n),_f.set(a,e),r.querySelector(i)!==null||t===`style`&&r.querySelector(Pf(a))||t===`script`&&r.querySelector(Rf(a))||(t=r.createElement(`link`),Ld(t,`link`,e),gt(t),r.head.appendChild(t)))}}function Of(e,t){bf.m(e,t);var n=Cf;if(n&&e){var r=t&&typeof t.as==`string`?t.as:`script`,i=`link[rel="modulepreload"][as="`+Ft(r)+`"][href="`+Ft(e)+`"]`,a=i;switch(r){case`audioworklet`:case`paintworklet`:case`serviceworker`:case`sharedworker`:case`worker`:case`script`:a=Lf(e)}if(!_f.has(a)&&(e=h({rel:`modulepreload`,href:e},t),_f.set(a,e),n.querySelector(i)===null)){switch(r){case`audioworklet`:case`paintworklet`:case`serviceworker`:case`sharedworker`:case`worker`:case`script`:if(n.querySelector(Rf(a)))return}r=n.createElement(`link`),Ld(r,`link`,e),gt(r),n.head.appendChild(r)}}}function kf(e,t,n){bf.S(e,t,n);var r=Cf;if(r&&e){var i=ht(r).hoistableStyles,a=Nf(e);t||=`default`;var o=i.get(a);if(!o){var s={loading:0,preload:null};if(o=r.querySelector(Pf(a)))s.loading=5;else{e=h({rel:`stylesheet`,href:e,"data-precedence":t},n),(n=_f.get(a))&&Vf(e,n);var c=o=r.createElement(`link`);gt(c),Ld(c,`link`,e),c._p=new Promise(function(e,t){c.onload=e,c.onerror=t}),c.addEventListener(`load`,function(){s.loading|=1}),c.addEventListener(`error`,function(){s.loading|=2}),s.loading|=4,Bf(o,t,r)}o={type:`stylesheet`,instance:o,count:1,state:s},i.set(a,o)}}}function Af(e,t){bf.X(e,t);var n=Cf;if(n&&e){var r=ht(n).hoistableScripts,i=Lf(e),a=r.get(i);a||(a=n.querySelector(Rf(i)),a||(e=h({src:e,async:!0},t),(t=_f.get(i))&&Hf(e,t),a=n.createElement(`script`),gt(a),Ld(a,`link`,e),n.head.appendChild(a)),a={type:`script`,instance:a,count:1,state:null},r.set(i,a))}}function jf(e,t){bf.M(e,t);var n=Cf;if(n&&e){var r=ht(n).hoistableScripts,i=Lf(e),a=r.get(i);a||(a=n.querySelector(Rf(i)),a||(e=h({src:e,async:!0,type:`module`},t),(t=_f.get(i))&&Hf(e,t),a=n.createElement(`script`),gt(a),Ld(a,`link`,e),n.head.appendChild(a)),a={type:`script`,instance:a,count:1,state:null},r.set(i,a))}}function Mf(e,t,n,r){var a=(a=ce.current)?yf(a):null;if(!a)throw Error(i(446));switch(e){case`meta`:case`title`:return null;case`style`:return typeof n.precedence==`string`&&typeof n.href==`string`?(t=Nf(n.href),n=ht(a).hoistableStyles,r=n.get(t),r||(r={type:`style`,instance:null,count:0,state:null},n.set(t,r)),r):{type:`void`,instance:null,count:0,state:null};case`link`:if(n.rel===`stylesheet`&&typeof n.href==`string`&&typeof n.precedence==`string`){e=Nf(n.href);var o=ht(a).hoistableStyles,s=o.get(e);if(s||(a=a.ownerDocument||a,s={type:`stylesheet`,instance:null,count:0,state:{loading:0,preload:null}},o.set(e,s),(o=a.querySelector(Pf(e)))&&!o._p&&(s.instance=o,s.state.loading=5),_f.has(e)||(n={rel:`preload`,as:`style`,href:n.href,crossOrigin:n.crossOrigin,integrity:n.integrity,media:n.media,hrefLang:n.hrefLang,referrerPolicy:n.referrerPolicy},_f.set(e,n),o||If(a,e,n,s.state))),t&&r===null)throw Error(i(528,``));return s}if(t&&r!==null)throw Error(i(529,``));return null;case`script`:return t=n.async,n=n.src,typeof n==`string`&&t&&typeof t!=`function`&&typeof t!=`symbol`?(t=Lf(n),n=ht(a).hoistableScripts,r=n.get(t),r||(r={type:`script`,instance:null,count:0,state:null},n.set(t,r)),r):{type:`void`,instance:null,count:0,state:null};default:throw Error(i(444,e))}}function Nf(e){return`href="`+Ft(e)+`"`}function Pf(e){return`link[rel="stylesheet"][`+e+`]`}function Ff(e){return h({},e,{"data-precedence":e.precedence,precedence:null})}function If(e,t,n,r){e.querySelector(`link[rel="preload"][as="style"][`+t+`]`)?r.loading=1:(t=e.createElement(`link`),r.preload=t,t.addEventListener(`load`,function(){return r.loading|=1}),t.addEventListener(`error`,function(){return r.loading|=2}),Ld(t,`link`,n),gt(t),e.head.appendChild(t))}function Lf(e){return`[src="`+Ft(e)+`"]`}function Rf(e){return`script[async]`+e}function zf(e,t,n){if(t.count++,t.instance===null)switch(t.type){case`style`:var r=e.querySelector(`style[data-href~="`+Ft(n.href)+`"]`);if(r)return t.instance=r,gt(r),r;var a=h({},n,{"data-href":n.href,"data-precedence":n.precedence,href:null,precedence:null});return r=(e.ownerDocument||e).createElement(`style`),gt(r),Ld(r,`style`,a),Bf(r,n.precedence,e),t.instance=r;case`stylesheet`:a=Nf(n.href);var o=e.querySelector(Pf(a));if(o)return t.state.loading|=4,t.instance=o,gt(o),o;r=Ff(n),(a=_f.get(a))&&Vf(r,a),o=(e.ownerDocument||e).createElement(`link`),gt(o);var s=o;return s._p=new Promise(function(e,t){s.onload=e,s.onerror=t}),Ld(o,`link`,r),t.state.loading|=4,Bf(o,n.precedence,e),t.instance=o;case`script`:return o=Lf(n.src),(a=e.querySelector(Rf(o)))?(t.instance=a,gt(a),a):(r=n,(a=_f.get(o))&&(r=h({},n),Hf(r,a)),e=e.ownerDocument||e,a=e.createElement(`script`),gt(a),Ld(a,`link`,r),e.head.appendChild(a),t.instance=a);case`void`:return null;default:throw Error(i(443,t.type))}else t.type===`stylesheet`&&!(t.state.loading&4)&&(r=t.instance,t.state.loading|=4,Bf(r,n.precedence,e));return t.instance}function Bf(e,t,n){for(var r=n.querySelectorAll(`link[rel="stylesheet"][data-precedence],style[data-precedence]`),i=r.length?r[r.length-1]:null,a=i,o=0;o title`):null)}function Kf(e,t,n){if(n===1||t.itemProp!=null)return!1;switch(e){case`meta`:case`title`:return!0;case`style`:if(typeof t.precedence!=`string`||typeof t.href!=`string`||t.href===``)break;return!0;case`link`:if(typeof t.rel!=`string`||typeof t.href!=`string`||t.href===``||t.onLoad||t.onError)break;switch(t.rel){case`stylesheet`:return e=t.disabled,typeof t.precedence==`string`&&e==null;default:return!0}case`script`:if(t.async&&typeof t.async!=`function`&&typeof t.async!=`symbol`&&!t.onLoad&&!t.onError&&t.src&&typeof t.src==`string`)return!0}return!1}function qf(e){return!(e.type===`stylesheet`&&!(e.state.loading&3))}function Jf(e,t,n,r){if(n.type===`stylesheet`&&(typeof r.media!=`string`||!1!==matchMedia(r.media).matches)&&!(n.state.loading&4)){if(n.instance===null){var i=Nf(r.href),a=t.querySelector(Pf(i));if(a){t=a._p,typeof t==`object`&&t&&typeof t.then==`function`&&(e.count++,e=Zf.bind(e),t.then(e,e)),n.state.loading|=4,n.instance=a,gt(a);return}a=t.ownerDocument||t,r=Ff(r),(i=_f.get(i))&&Vf(r,i),a=a.createElement(`link`),gt(a);var o=a;o._p=new Promise(function(e,t){o.onload=e,o.onerror=t}),Ld(a,`link`,r),n.instance=a}e.stylesheets===null&&(e.stylesheets=new Map),e.stylesheets.set(n,t),(t=n.state.preload)&&!(n.state.loading&3)&&(e.count++,n=Zf.bind(e),t.addEventListener(`load`,n),t.addEventListener(`error`,n))}}var Yf=0;function Xf(e,t){return e.stylesheets&&e.count===0&&$f(e,e.stylesheets),0Yf?50:800)+t);return e.unsuspend=n,function(){e.unsuspend=null,clearTimeout(r),clearTimeout(i)}}:null}function Zf(){if(this.count--,this.count===0&&(this.imgCount===0||!this.waitingForImages)){if(this.stylesheets)$f(this,this.stylesheets);else if(this.unsuspend){var e=this.unsuspend;this.unsuspend=null,e()}}}var Qf=null;function $f(e,t){e.stylesheets=null,e.unsuspend!==null&&(e.count++,Qf=new Map,t.forEach(ep,e),Qf=null,Zf.call(e))}function ep(e,t){if(!(t.state.loading&4)){var n=Qf.get(e);if(n)var r=n.get(null);else{n=new Map,Qf.set(e,n);for(var i=e.querySelectorAll(`link[data-precedence],style[data-precedence]`),a=0;a{function n(){if(!(typeof __REACT_DEVTOOLS_GLOBAL_HOOK__>`u`||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!=`function`))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(n)}catch(e){console.error(e)}}n(),t.exports=h()})),_=class{constructor(){this.listeners=new Set,this.subscribe=this.subscribe.bind(this)}subscribe(e){return this.listeners.add(e),this.onSubscribe(),()=>{this.listeners.delete(e),this.onUnsubscribe()}}hasListeners(){return this.listeners.size>0}onSubscribe(){}onUnsubscribe(){}},v=new class extends _{#e;#t;#n;constructor(){super(),this.#n=e=>{if(typeof window<`u`&&window.addEventListener){let t=()=>e();return window.addEventListener(`visibilitychange`,t,!1),()=>{window.removeEventListener(`visibilitychange`,t)}}}}onSubscribe(){this.#t||this.setEventListener(this.#n)}onUnsubscribe(){this.hasListeners()||(this.#t?.(),this.#t=void 0)}setEventListener(e){this.#n=e,this.#t?.(),this.#t=e(e=>{typeof e==`boolean`?this.setFocused(e):this.onFocus()})}setFocused(e){this.#e!==e&&(this.#e=e,this.onFocus())}onFocus(){let e=this.isFocused();this.listeners.forEach(t=>{t(e)})}isFocused(){return typeof this.#e==`boolean`?this.#e:globalThis.document?.visibilityState!==`hidden`}},y={setTimeout:(e,t)=>setTimeout(e,t),clearTimeout:e=>clearTimeout(e),setInterval:(e,t)=>setInterval(e,t),clearInterval:e=>clearInterval(e)},b=new class{#e=y;setTimeoutProvider(e){this.#e=e}setTimeout(e,t){return this.#e.setTimeout(e,t)}clearTimeout(e){this.#e.clearTimeout(e)}setInterval(e,t){return this.#e.setInterval(e,t)}clearInterval(e){this.#e.clearInterval(e)}};function x(e){setTimeout(e,0)}var S=typeof window>`u`||`Deno`in globalThis;function C(){}function w(e,t){return typeof e==`function`?e(t):e}function T(e){return typeof e==`number`&&e>=0&&e!==1/0}function E(e,t){return Math.max(e+(t||0)-Date.now(),0)}function D(e,t){return typeof e==`function`?e(t):e}function O(e,t){return typeof e==`function`?e(t):e}function k(e,t){let{type:n=`all`,exact:r,fetchStatus:i,predicate:a,queryKey:o,stale:s}=e;if(o){if(r){if(t.queryHash!==te(o,t.options))return!1}else if(!j(t.queryKey,o))return!1}if(n!==`all`){let e=t.isActive();if(n===`active`&&!e||n===`inactive`&&e)return!1}return!(typeof s==`boolean`&&t.isStale()!==s||i&&i!==t.state.fetchStatus||a&&!a(t))}function ee(e,t){let{exact:n,status:r,predicate:i,mutationKey:a}=e;if(a){if(!t.options.mutationKey)return!1;if(n){if(A(t.options.mutationKey)!==A(a))return!1}else if(!j(t.options.mutationKey,a))return!1}return!(r&&t.state.status!==r||i&&!i(t))}function te(e,t){return(t?.queryKeyHashFn||A)(e)}function A(e){return JSON.stringify(e,(e,t)=>P(t)?Object.keys(t).sort().reduce((e,n)=>(e[n]=t[n],e),{}):t)}function j(e,t){return e===t?!0:typeof e==typeof t&&e&&t&&typeof e==`object`&&typeof t==`object`?Object.keys(t).every(n=>j(e[n],t[n])):!1}var ne=Object.prototype.hasOwnProperty;function M(e,t,n=0){if(e===t)return e;if(n>500)return t;let r=N(e)&&N(t);if(!r&&!(P(e)&&P(t)))return t;let i=(r?e:Object.keys(e)).length,a=r?t:Object.keys(t),o=a.length,s=r?Array(o):{},c=0;for(let l=0;l{b.setTimeout(t,e)})}function ae(e,t,n){return typeof n.structuralSharing==`function`?n.structuralSharing(e,t):n.structuralSharing===!1?t:M(e,t)}function F(e,t,n=0){let r=[...e,t];return n&&r.length>n?r.slice(1):r}function oe(e,t,n=0){let r=[t,...e];return n&&r.length>n?r.slice(0,-1):r}var I=Symbol();function se(e,t){return!e.queryFn&&t?.initialPromise?()=>t.initialPromise:!e.queryFn||e.queryFn===I?()=>Promise.reject(Error(`Missing queryFn: '${e.queryHash}'`)):e.queryFn}function L(e,t,n){let r=!1,i;return Object.defineProperty(e,"signal",{enumerable:!0,get:()=>(i??=t(),r?i:(r=!0,i.aborted?n():i.addEventListener(`abort`,n,{once:!0}),i))}),e}var ce=(()=>{let e=()=>S;return{isServer(){return e()},setIsServer(t){e=t}}})();function le(){let e,t,n=new Promise((n,r)=>{e=n,t=r});n.status=`pending`,n.catch(()=>{});function r(e){Object.assign(n,e),delete n.resolve,delete n.reject}return n.resolve=t=>{r({status:`fulfilled`,value:t}),e(t)},n.reject=e=>{r({status:`rejected`,reason:e}),t(e)},n}var ue=x;function de(){let e=[],t=0,n=e=>{e()},r=e=>{e()},i=ue,a=r=>{t?e.push(r):i(()=>{n(r)})},o=()=>{let t=e;e=[],t.length&&i(()=>{r(()=>{t.forEach(e=>{n(e)})})})};return{batch:e=>{let n;t++;try{n=e()}finally{t--,t||o()}return n},batchCalls:e=>(...t)=>{a(()=>{e(...t)})},schedule:a,setNotifyFunction:e=>{n=e},setBatchNotifyFunction:e=>{r=e},setScheduler:e=>{i=e}}}var fe=de(),pe=new class extends _{#e=!0;#t;#n;constructor(){super(),this.#n=e=>{if(typeof window<`u`&&window.addEventListener){let t=()=>e(!0),n=()=>e(!1);return window.addEventListener(`online`,t,!1),window.addEventListener(`offline`,n,!1),()=>{window.removeEventListener(`online`,t),window.removeEventListener(`offline`,n)}}}}onSubscribe(){this.#t||this.setEventListener(this.#n)}onUnsubscribe(){this.hasListeners()||(this.#t?.(),this.#t=void 0)}setEventListener(e){this.#n=e,this.#t?.(),this.#t=e(this.setOnline.bind(this))}setOnline(e){this.#e!==e&&(this.#e=e,this.listeners.forEach(t=>{t(e)}))}isOnline(){return this.#e}};function me(e){return Math.min(1e3*2**e,3e4)}function he(e){return(e??`online`)!==`online`||pe.isOnline()}var ge=class extends Error{constructor(e){super(`CancelledError`),this.revert=e?.revert,this.silent=e?.silent}};function _e(e){let t=!1,n=0,r,i=le(),a=()=>i.status!==`pending`,o=t=>{if(!a()){let n=new ge(t);f(n),e.onCancel?.(n)}},s=()=>{t=!0},c=()=>{t=!1},l=()=>v.isFocused()&&(e.networkMode===`always`||pe.isOnline())&&e.canRun(),u=()=>he(e.networkMode)&&e.canRun(),d=e=>{a()||(r?.(),i.resolve(e))},f=e=>{a()||(r?.(),i.reject(e))},p=()=>new Promise(t=>{r=e=>{(a()||l())&&t(e)},e.onPause?.()}).then(()=>{r=void 0,a()||e.onContinue?.()}),m=()=>{if(a())return;let r,i=n===0?e.initialPromise:void 0;try{r=i??e.fn()}catch(e){r=Promise.reject(e)}Promise.resolve(r).then(d).catch(r=>{if(a())return;let i=e.retry??(ce.isServer()?0:3),o=e.retryDelay??me,s=typeof o==`function`?o(n,r):o,c=i===!0||typeof i==`number`&&nl()?void 0:p()).then(()=>{t?f(r):m()})})};return{promise:i,status:()=>i.status,cancel:o,continue:()=>(r?.(),i),cancelRetry:s,continueRetry:c,canStart:u,start:()=>(u()?m():p().then(m),i)}}var ve=class{#e;destroy(){this.clearGcTimeout()}scheduleGc(){this.clearGcTimeout(),T(this.gcTime)&&(this.#e=b.setTimeout(()=>{this.optionalRemove()},this.gcTime))}updateGcTime(e){this.gcTime=Math.max(this.gcTime||0,e??(ce.isServer()?1/0:3e5))}clearGcTimeout(){this.#e!==void 0&&(b.clearTimeout(this.#e),this.#e=void 0)}};function ye(e){return{onFetch:(t,n)=>{let r=t.options,i=t.fetchOptions?.meta?.fetchMore?.direction,a=t.state.data?.pages||[],o=t.state.data?.pageParams||[],s={pages:[],pageParams:[]},c=0,l=async()=>{let n=!1,l=e=>{L(e,()=>t.signal,()=>n=!0)},u=se(t.options,t.fetchOptions),d=async(e,r,i)=>{if(n)return Promise.reject(t.signal.reason);if(r==null&&e.pages.length)return Promise.resolve(e);let a=(()=>{let e={client:t.client,queryKey:t.queryKey,pageParam:r,direction:i?`backward`:`forward`,meta:t.options.meta};return l(e),e})(),o=await u(a),{maxPages:s}=t.options,c=i?oe:F;return{pages:c(e.pages,o,s),pageParams:c(e.pageParams,r,s)}};if(i&&a.length){let e=i===`backward`,t=e?xe:be,n={pages:a,pageParams:o};s=await d(n,t(r,n),e)}else{let t=e??a.length;do{let e=c===0?o[0]??r.initialPageParam:be(r,s);if(c>0&&e==null)break;s=await d(s,e),c++}while(ct.options.persister?.(l,{client:t.client,queryKey:t.queryKey,meta:t.options.meta,signal:t.signal},n):l}}}function be(e,{pages:t,pageParams:n}){let r=t.length-1;return t.length>0?e.getNextPageParam(t[r],t,n[r],n):void 0}function xe(e,{pages:t,pageParams:n}){return t.length>0?e.getPreviousPageParam?.(t[0],t,n[0],n):void 0}var Se=class extends ve{#e;#t;#n;#r;#i;#a;#o;#s;constructor(e){super(),this.#s=!1,this.#o=e.defaultOptions,this.setOptions(e.options),this.observers=[],this.#i=e.client,this.#r=this.#i.getQueryCache(),this.queryKey=e.queryKey,this.queryHash=e.queryHash,this.#t=Te(this.options),this.state=e.state??this.#t,this.scheduleGc()}get meta(){return this.options.meta}get queryType(){return this.#e}get promise(){return this.#a?.promise}setOptions(e){if(this.options={...this.#o,...e},e?._type&&(this.#e=e._type),this.updateGcTime(this.options.gcTime),this.state&&this.state.data===void 0){let e=Te(this.options);e.data!==void 0&&(this.setState(we(e.data,e.dataUpdatedAt)),this.#t=e)}}optionalRemove(){!this.observers.length&&this.state.fetchStatus===`idle`&&this.#r.remove(this)}setData(e,t){let n=ae(this.state.data,e,this.options);return this.#l({data:n,type:`success`,dataUpdatedAt:t?.updatedAt,manual:t?.manual}),n}setState(e){this.#l({type:`setState`,state:e})}cancel(e){let t=this.#a?.promise;return this.#a?.cancel(e),t?t.then(C).catch(C):Promise.resolve()}destroy(){super.destroy(),this.cancel({silent:!0})}get resetState(){return this.#t}reset(){this.destroy(),this.setState(this.resetState)}isActive(){return this.observers.some(e=>O(e.options.enabled,this)!==!1)}isDisabled(){return this.getObserversCount()>0?!this.isActive():this.options.queryFn===I||!this.isFetched()}isFetched(){return this.state.dataUpdateCount+this.state.errorUpdateCount>0}isStatic(){return this.getObserversCount()>0&&this.observers.some(e=>D(e.options.staleTime,this)===`static`)}isStale(){return this.getObserversCount()>0?this.observers.some(e=>e.getCurrentResult().isStale):this.state.data===void 0||this.state.isInvalidated}isStaleByTime(e=0){return this.state.data===void 0?!0:e===`static`?!1:this.state.isInvalidated?!0:!E(this.state.dataUpdatedAt,e)}onFocus(){this.observers.find(e=>e.shouldFetchOnWindowFocus())?.refetch({cancelRefetch:!1}),this.#a?.continue()}onOnline(){this.observers.find(e=>e.shouldFetchOnReconnect())?.refetch({cancelRefetch:!1}),this.#a?.continue()}addObserver(e){this.observers.includes(e)||(this.observers.push(e),this.clearGcTimeout(),this.#r.notify({type:`observerAdded`,query:this,observer:e}))}removeObserver(e){this.observers.includes(e)&&(this.observers=this.observers.filter(t=>t!==e),this.observers.length||(this.#a&&(this.#s||this.#c()?this.#a.cancel({revert:!0}):this.#a.cancelRetry()),this.scheduleGc()),this.#r.notify({type:`observerRemoved`,query:this,observer:e}))}getObserversCount(){return this.observers.length}#c(){return this.state.fetchStatus===`paused`&&this.state.status===`pending`}invalidate(){this.state.isInvalidated||this.#l({type:`invalidate`})}async fetch(e,t){if(this.state.fetchStatus!==`idle`&&this.#a?.status()!==`rejected`){if(this.state.data!==void 0&&t?.cancelRefetch)this.cancel({silent:!0});else if(this.#a)return this.#a.continueRetry(),this.#a.promise}if(e&&this.setOptions(e),!this.options.queryFn){let e=this.observers.find(e=>e.options.queryFn);e&&this.setOptions(e.options)}let n=new AbortController,r=e=>{Object.defineProperty(e,"signal",{enumerable:!0,get:()=>(this.#s=!0,n.signal)})},i=()=>{let e=se(this.options,t),n=(()=>{let e={client:this.#i,queryKey:this.queryKey,meta:this.meta};return r(e),e})();return this.#s=!1,this.options.persister?this.options.persister(e,n,this):e(n)},a=(()=>{let e={fetchOptions:t,options:this.options,queryKey:this.queryKey,client:this.#i,state:this.state,fetchFn:i};return r(e),e})();(this.#e===`infinite`?ye(this.options.pages):this.options.behavior)?.onFetch(a,this),this.#n=this.state,(this.state.fetchStatus===`idle`||this.state.fetchMeta!==a.fetchOptions?.meta)&&this.#l({type:`fetch`,meta:a.fetchOptions?.meta}),this.#a=_e({initialPromise:t?.initialPromise,fn:a.fetchFn,onCancel:e=>{e instanceof ge&&e.revert&&this.setState({...this.#n,fetchStatus:`idle`}),n.abort()},onFail:(e,t)=>{this.#l({type:`failed`,failureCount:e,error:t})},onPause:()=>{this.#l({type:`pause`})},onContinue:()=>{this.#l({type:`continue`})},retry:a.options.retry,retryDelay:a.options.retryDelay,networkMode:a.options.networkMode,canRun:()=>!0});try{let e=await this.#a.start();if(e===void 0)throw Error(`${this.queryHash} data is undefined`);return this.setData(e),this.#r.config.onSuccess?.(e,this),this.#r.config.onSettled?.(e,this.state.error,this),e}catch(e){if(e instanceof ge){if(e.silent)return this.#a.promise;if(e.revert){if(this.state.data===void 0)throw e;return this.state.data}}throw this.#l({type:`error`,error:e}),this.#r.config.onError?.(e,this),this.#r.config.onSettled?.(this.state.data,e,this),e}finally{this.scheduleGc()}}#l(e){let t=t=>{switch(e.type){case`failed`:return{...t,fetchFailureCount:e.failureCount,fetchFailureReason:e.error};case`pause`:return{...t,fetchStatus:`paused`};case`continue`:return{...t,fetchStatus:`fetching`};case`fetch`:return{...t,...Ce(t.data,this.options),fetchMeta:e.meta??null};case`success`:let n={...t,...we(e.data,e.dataUpdatedAt),dataUpdateCount:t.dataUpdateCount+1,...!e.manual&&{fetchStatus:`idle`,fetchFailureCount:0,fetchFailureReason:null}};return this.#n=e.manual?n:void 0,n;case`error`:let r=e.error;return{...t,error:r,errorUpdateCount:t.errorUpdateCount+1,errorUpdatedAt:Date.now(),fetchFailureCount:t.fetchFailureCount+1,fetchFailureReason:r,fetchStatus:`idle`,status:`error`,isInvalidated:!0};case`invalidate`:return{...t,isInvalidated:!0};case`setState`:return{...t,...e.state}}};this.state=t(this.state),fe.batch(()=>{this.observers.forEach(e=>{e.onQueryUpdate()}),this.#r.notify({query:this,type:`updated`,action:e})})}};function Ce(e,t){return{fetchFailureCount:0,fetchFailureReason:null,fetchStatus:he(t.networkMode)?`fetching`:`paused`,...e===void 0&&{error:null,status:`pending`}}}function we(e,t){return{data:e,dataUpdatedAt:t??Date.now(),error:null,isInvalidated:!1,status:`success`}}function Te(e){let t=typeof e.initialData==`function`?e.initialData():e.initialData,n=t!==void 0,r=n?typeof e.initialDataUpdatedAt==`function`?e.initialDataUpdatedAt():e.initialDataUpdatedAt:0;return{data:t,dataUpdateCount:0,dataUpdatedAt:n?r??Date.now():0,error:null,errorUpdateCount:0,errorUpdatedAt:0,fetchFailureCount:0,fetchFailureReason:null,fetchMeta:null,isInvalidated:!1,status:n?`success`:`pending`,fetchStatus:`idle`}}var Ee=class extends ve{#e;#t;#n;#r;constructor(e){super(),this.#e=e.client,this.mutationId=e.mutationId,this.#n=e.mutationCache,this.#t=[],this.state=e.state||De(),this.setOptions(e.options),this.scheduleGc()}setOptions(e){this.options=e,this.updateGcTime(this.options.gcTime)}get meta(){return this.options.meta}addObserver(e){this.#t.includes(e)||(this.#t.push(e),this.clearGcTimeout(),this.#n.notify({type:`observerAdded`,mutation:this,observer:e}))}removeObserver(e){this.#t=this.#t.filter(t=>t!==e),this.scheduleGc(),this.#n.notify({type:`observerRemoved`,mutation:this,observer:e})}optionalRemove(){this.#t.length||(this.state.status===`pending`?this.scheduleGc():this.#n.remove(this))}continue(){return this.#r?.continue()??this.execute(this.state.variables)}async execute(e){let t=()=>{this.#i({type:`continue`})},n={client:this.#e,meta:this.options.meta,mutationKey:this.options.mutationKey};this.#r=_e({fn:()=>this.options.mutationFn?this.options.mutationFn(e,n):Promise.reject(Error(`No mutationFn found`)),onFail:(e,t)=>{this.#i({type:`failed`,failureCount:e,error:t})},onPause:()=>{this.#i({type:`pause`})},onContinue:t,retry:this.options.retry??0,retryDelay:this.options.retryDelay,networkMode:this.options.networkMode,canRun:()=>this.#n.canRun(this)});let r=this.state.status===`pending`,i=!this.#r.canStart();try{if(r)t();else{this.#i({type:`pending`,variables:e,isPaused:i}),this.#n.config.onMutate&&await this.#n.config.onMutate(e,this,n);let t=await this.options.onMutate?.(e,n);t!==this.state.context&&this.#i({type:`pending`,context:t,variables:e,isPaused:i})}let a=await this.#r.start();return await this.#n.config.onSuccess?.(a,e,this.state.context,this,n),await this.options.onSuccess?.(a,e,this.state.context,n),await this.#n.config.onSettled?.(a,null,this.state.variables,this.state.context,this,n),await this.options.onSettled?.(a,null,e,this.state.context,n),this.#i({type:`success`,data:a}),a}catch(t){try{await this.#n.config.onError?.(t,e,this.state.context,this,n)}catch(e){Promise.reject(e)}try{await this.options.onError?.(t,e,this.state.context,n)}catch(e){Promise.reject(e)}try{await this.#n.config.onSettled?.(void 0,t,this.state.variables,this.state.context,this,n)}catch(e){Promise.reject(e)}try{await this.options.onSettled?.(void 0,t,e,this.state.context,n)}catch(e){Promise.reject(e)}throw this.#i({type:`error`,error:t}),t}finally{this.#n.runNext(this)}}#i(e){let t=t=>{switch(e.type){case`failed`:return{...t,failureCount:e.failureCount,failureReason:e.error};case`pause`:return{...t,isPaused:!0};case`continue`:return{...t,isPaused:!1};case`pending`:return{...t,context:e.context,data:void 0,failureCount:0,failureReason:null,error:null,isPaused:e.isPaused,status:`pending`,variables:e.variables,submittedAt:Date.now()};case`success`:return{...t,data:e.data,failureCount:0,failureReason:null,error:null,status:`success`,isPaused:!1};case`error`:return{...t,data:void 0,error:e.error,failureCount:t.failureCount+1,failureReason:e.error,isPaused:!1,status:`error`}}};this.state=t(this.state),fe.batch(()=>{this.#t.forEach(t=>{t.onMutationUpdate(e)}),this.#n.notify({mutation:this,type:`updated`,action:e})})}};function De(){return{context:void 0,data:void 0,error:null,failureCount:0,failureReason:null,isPaused:!1,status:`idle`,variables:void 0,submittedAt:0}}var Oe=class extends _{constructor(e={}){super(),this.config=e,this.#e=new Set,this.#t=new Map,this.#n=0}#e;#t;#n;build(e,t,n){let r=new Ee({client:e,mutationCache:this,mutationId:++this.#n,options:e.defaultMutationOptions(t),state:n});return this.add(r),r}add(e){this.#e.add(e);let t=ke(e);if(typeof t==`string`){let n=this.#t.get(t);n?n.push(e):this.#t.set(t,[e])}this.notify({type:`added`,mutation:e})}remove(e){if(this.#e.delete(e)){let t=ke(e);if(typeof t==`string`){let n=this.#t.get(t);if(n){if(n.length>1){let t=n.indexOf(e);t!==-1&&n.splice(t,1)}else n[0]===e&&this.#t.delete(t)}}}this.notify({type:`removed`,mutation:e})}canRun(e){let t=ke(e);if(typeof t==`string`){let n=this.#t.get(t)?.find(e=>e.state.status===`pending`);return!n||n===e}return!0}runNext(e){let t=ke(e);return typeof t==`string`?(this.#t.get(t)?.find(t=>t!==e&&t.state.isPaused))?.continue()??Promise.resolve():Promise.resolve()}clear(){fe.batch(()=>{this.#e.forEach(e=>{this.notify({type:`removed`,mutation:e})}),this.#e.clear(),this.#t.clear()})}getAll(){return Array.from(this.#e)}find(e){let t={exact:!0,...e};return this.getAll().find(e=>ee(t,e))}findAll(e={}){return this.getAll().filter(t=>ee(e,t))}notify(e){fe.batch(()=>{this.listeners.forEach(t=>{t(e)})})}resumePausedMutations(){let e=this.getAll().filter(e=>e.state.isPaused);return fe.batch(()=>Promise.all(e.map(e=>e.continue().catch(C))))}};function ke(e){return e.options.scope?.id}var Ae=class extends _{constructor(e={}){super(),this.config=e,this.#e=new Map}#e;build(e,t,n){let r=t.queryKey,i=t.queryHash??te(r,t),a=this.get(i);return a||(a=new Se({client:e,queryKey:r,queryHash:i,options:e.defaultQueryOptions(t),state:n,defaultOptions:e.getQueryDefaults(r)}),this.add(a)),a}add(e){this.#e.has(e.queryHash)||(this.#e.set(e.queryHash,e),this.notify({type:`added`,query:e}))}remove(e){let t=this.#e.get(e.queryHash);t&&(e.destroy(),t===e&&this.#e.delete(e.queryHash),this.notify({type:`removed`,query:e}))}clear(){fe.batch(()=>{this.getAll().forEach(e=>{this.remove(e)})})}get(e){return this.#e.get(e)}getAll(){return[...this.#e.values()]}find(e){let t={exact:!0,...e};return this.getAll().find(e=>k(t,e))}findAll(e={}){let t=this.getAll();return Object.keys(e).length>0?t.filter(t=>k(e,t)):t}notify(e){fe.batch(()=>{this.listeners.forEach(t=>{t(e)})})}onFocus(){fe.batch(()=>{this.getAll().forEach(e=>{e.onFocus()})})}onOnline(){fe.batch(()=>{this.getAll().forEach(e=>{e.onOnline()})})}},je=class{#e;#t;#n;#r;#i;#a;#o;#s;constructor(e={}){this.#e=e.queryCache||new Ae,this.#t=e.mutationCache||new Oe,this.#n=e.defaultOptions||{},this.#r=new Map,this.#i=new Map,this.#a=0}mount(){this.#a++,this.#a===1&&(this.#o=v.subscribe(async e=>{e&&(await this.resumePausedMutations(),this.#e.onFocus())}),this.#s=pe.subscribe(async e=>{e&&(await this.resumePausedMutations(),this.#e.onOnline())}))}unmount(){this.#a--,this.#a===0&&(this.#o?.(),this.#o=void 0,this.#s?.(),this.#s=void 0)}isFetching(e){return this.#e.findAll({...e,fetchStatus:`fetching`}).length}isMutating(e){return this.#t.findAll({...e,status:`pending`}).length}getQueryData(e){let t=this.defaultQueryOptions({queryKey:e});return this.#e.get(t.queryHash)?.state.data}ensureQueryData(e){let t=this.defaultQueryOptions(e),n=this.#e.build(this,t),r=n.state.data;return r===void 0?this.fetchQuery(e):(e.revalidateIfStale&&n.isStaleByTime(D(t.staleTime,n))&&this.prefetchQuery(t),Promise.resolve(r))}getQueriesData(e){return this.#e.findAll(e).map(({queryKey:e,state:t})=>[e,t.data])}setQueryData(e,t,n){let r=this.defaultQueryOptions({queryKey:e}),i=this.#e.get(r.queryHash)?.state.data,a=w(t,i);if(a!==void 0)return this.#e.build(this,r).setData(a,{...n,manual:!0})}setQueriesData(e,t,n){return fe.batch(()=>this.#e.findAll(e).map(({queryKey:e})=>[e,this.setQueryData(e,t,n)]))}getQueryState(e){let t=this.defaultQueryOptions({queryKey:e});return this.#e.get(t.queryHash)?.state}removeQueries(e){let t=this.#e;fe.batch(()=>{t.findAll(e).forEach(e=>{t.remove(e)})})}resetQueries(e,t){let n=this.#e;return fe.batch(()=>(n.findAll(e).forEach(e=>{e.reset()}),this.refetchQueries({type:`active`,...e},t)))}cancelQueries(e,t={}){let n={revert:!0,...t},r=fe.batch(()=>this.#e.findAll(e).map(e=>e.cancel(n)));return Promise.all(r).then(C).catch(C)}invalidateQueries(e,t={}){return fe.batch(()=>(this.#e.findAll(e).forEach(e=>{e.invalidate()}),e?.refetchType===`none`?Promise.resolve():this.refetchQueries({...e,type:e?.refetchType??e?.type??`active`},t)))}refetchQueries(e,t={}){let n={...t,cancelRefetch:t.cancelRefetch??!0},r=fe.batch(()=>this.#e.findAll(e).filter(e=>!e.isDisabled()&&!e.isStatic()).map(e=>{let t=e.fetch(void 0,n);return n.throwOnError||(t=t.catch(C)),e.state.fetchStatus===`paused`?Promise.resolve():t}));return Promise.all(r).then(C)}fetchQuery(e){let t=this.defaultQueryOptions(e);t.retry===void 0&&(t.retry=!1);let n=this.#e.build(this,t);return n.isStaleByTime(D(t.staleTime,n))?n.fetch(t):Promise.resolve(n.state.data)}prefetchQuery(e){return this.fetchQuery(e).then(C).catch(C)}fetchInfiniteQuery(e){return e._type=`infinite`,this.fetchQuery(e)}prefetchInfiniteQuery(e){return this.fetchInfiniteQuery(e).then(C).catch(C)}ensureInfiniteQueryData(e){return e._type=`infinite`,this.ensureQueryData(e)}resumePausedMutations(){return pe.isOnline()?this.#t.resumePausedMutations():Promise.resolve()}getQueryCache(){return this.#e}getMutationCache(){return this.#t}getDefaultOptions(){return this.#n}setDefaultOptions(e){this.#n=e}setQueryDefaults(e,t){this.#r.set(A(e),{queryKey:e,defaultOptions:t})}getQueryDefaults(e){let t=[...this.#r.values()],n={};return t.forEach(t=>{j(e,t.queryKey)&&Object.assign(n,t.defaultOptions)}),n}setMutationDefaults(e,t){this.#i.set(A(e),{mutationKey:e,defaultOptions:t})}getMutationDefaults(e){let t=[...this.#i.values()],n={};return t.forEach(t=>{j(e,t.mutationKey)&&Object.assign(n,t.defaultOptions)}),n}defaultQueryOptions(e){if(e._defaulted)return e;let t={...this.#n.queries,...this.getQueryDefaults(e.queryKey),...e,_defaulted:!0};return t.queryHash||=te(t.queryKey,t),t.refetchOnReconnect===void 0&&(t.refetchOnReconnect=t.networkMode!==`always`),t.throwOnError===void 0&&(t.throwOnError=!!t.suspense),!t.networkMode&&t.persister&&(t.networkMode=`offlineFirst`),t.queryFn===I&&(t.enabled=!1),t}defaultMutationOptions(e){return e?._defaulted?e:{...this.#n.mutations,...e?.mutationKey&&this.getMutationDefaults(e.mutationKey),...e,_defaulted:!0}}clear(){this.#e.clear(),this.#t.clear()}},Me=o((e=>{var t=Symbol.for(`react.transitional.element`),n=Symbol.for(`react.fragment`);function r(e,n,r){var i=null;if(r!==void 0&&(i=``+r),n.key!==void 0&&(i=``+n.key),`key`in n)for(var a in r={},n)a!==`key`&&(r[a]=n[a]);else r=n;return n=r.ref,{$$typeof:t,type:e,key:i,ref:n===void 0?null:n,props:r}}e.Fragment=n,e.jsx=r,e.jsxs=r})),Ne=o(((e,t)=>{t.exports=Me()})),R=c(f(),1),z=Ne(),Pe=R.createContext(void 0),Fe=({client:e,children:t})=>(R.useEffect(()=>(e.mount(),()=>{e.unmount()}),[e]),(0,z.jsx)(Pe.Provider,{value:e,children:t})),Ie=typeof window<`u`?R.useLayoutEffect:R.useEffect;function Le(e){let t=R.useRef({value:e,prev:null}),n=t.current.value;return e!==n&&(t.current={value:e,prev:n}),t.current.prev}function Re(e,t,n={},r={}){R.useEffect(()=>{if(!e.current||r.disabled||typeof IntersectionObserver!=`function`)return;let i=new IntersectionObserver(([e])=>{t(e)},n);return i.observe(e.current),()=>{i.disconnect()}},[t,n,r.disabled,e])}function B(e){let t=R.useRef(null);return R.useImperativeHandle(e,()=>t.current,[]),t}function ze(e){return e[e.length-1]}function Be(e){return typeof e==`function`}function Ve(e,t){return Be(e)?e(t):e}var He=Object.prototype.hasOwnProperty,Ue=Object.prototype.propertyIsEnumerable;function We(e){for(let t in e)if(He.call(e,t))return!0;return!1}var Ge=()=>Object.create(null),Ke=(e,t)=>qe(e,t,Ge);function qe(e,t,n=()=>({}),r=0){if(e===t)return e;if(r>500)return t;let i=t,a=Xe(e)&&Xe(i);if(!a&&!(Je(e)&&Je(i)))return i;let o=a?e:V(e);if(!o)return i;let s=a?i:V(i);if(!s)return i;let c=o.length,l=s.length,u=a?Array(l):n(),d=0;for(let t=0;ti||!Ze(e[o],t[o],n)))return!1;return i===a}return!1}function Qe(e){let t,n,r=new Promise((e,r)=>{t=e,n=r});return r.status=`pending`,r.resolve=n=>{r.status=`resolved`,r.value=n,t(n),e?.(n)},r.reject=e=>{r.status=`rejected`,n(e)},r}function $e(e){return!!(e&&typeof e==`object`&&typeof e.then==`function`)}function et(e){return e.replace(/[\x00-\x1f\x7f]/g,``)}function tt(e){let t;try{t=decodeURI(e)}catch{t=e.replaceAll(/%[0-9A-F]{2}/gi,e=>{try{return decodeURI(e)}catch{return e}})}return et(t)}var nt=[`http:`,`https:`,`mailto:`,`tel:`];function rt(e,t){if(!e)return!1;try{let n=new URL(e);return!t.has(n.protocol)}catch{return!1}}function it(e){if(!e||!/[%\\\x00-\x1f\x7f]/.test(e)&&!e.startsWith(`//`))return{path:e,handledProtocolRelativeURL:!1};let t=/%25|%5C/gi,n=0,r=``,i;for(;(i=t.exec(e))!==null;)r+=tt(e.slice(n,i.index))+i[0],n=t.lastIndex;r+=tt(n?e.slice(n):e);let a=!1;return r.startsWith(`//`)&&(a=!0,r=`/`+r.replace(/^\/+/,``)),{path:r,handledProtocolRelativeURL:a}}function at(e){return/\s|[^\u0000-\u007F]/.test(e)?e.replace(/\s|[^\u0000-\u007F]/gu,encodeURIComponent):e}function ot(e,t){if(e===t)return!0;if(e.length!==t.length)return!1;for(let n=0;n{e.next&&(e.prev?(e.prev.next=e.next,e.next.prev=e.prev,e.next=void 0,r&&(r.next=e,e.prev=r)):(e.next.prev=void 0,n=e.next,e.next=void 0,r&&(e.prev=r,r.next=e)),r=e)};return{get(e){let n=t.get(e);if(n)return i(n),n.value},set(a,o){if(t.size>=e&&n){let e=n;t.delete(e.key),e.next&&(n=e.next,e.next.prev=void 0),e===r&&(r=void 0)}let s=t.get(a);if(s)s.value=o,i(s);else{let e={key:a,value:o,prev:r};r&&(r.next=e),r=e,n||=e,t.set(a,e)}},clear(){t.clear(),n=void 0,r=void 0}}}var lt=4,ut=5;function dt(e){let t=e.indexOf(`{`);if(t===-1)return null;let n=e.indexOf(`}`,t);return n===-1||t+1>=e.length?null:[t,n]}function ft(e,t,n=new Uint16Array(6)){let r=e.indexOf(`/`,t),i=r===-1?e.length:r,a=e.substring(t,i);if(!a||!a.includes(`$`))return n[0]=0,n[1]=t,n[2]=t,n[3]=i,n[4]=i,n[5]=i,n;if(a===`$`){let r=e.length;return n[0]=2,n[1]=t,n[2]=t,n[3]=r,n[4]=r,n[5]=r,n}if(a.charCodeAt(0)===36)return n[0]=1,n[1]=t,n[2]=t+1,n[3]=i,n[4]=i,n[5]=i,n;let o=dt(a);if(o){let[r,s]=o,c=a.charCodeAt(r+1);if(c===45){if(r+2!e.parse&&e.caseSensitive===f&&e.prefix===p&&e.suffix===m);if(h)o=h;else{let e=_t(1,n.fullPath??n.from,f,p,m);o=e,e.depth=a,e.parent=i,i.dynamic??=[],i.dynamic.push(e)}break}case 3:{let t=r.substring(u,e[1]),s=r.substring(e[4],d),f=c&&!!(t||s),p=t?f?t:t.toLowerCase():void 0,m=s?f?s:s.toLowerCase():void 0,h=!l&&i.optional?.find(e=>!e.parse&&e.caseSensitive===f&&e.prefix===p&&e.suffix===m);if(h)o=h;else{let e=_t(3,n.fullPath??n.from,f,p,m);o=e,e.parent=i,e.depth=a,i.optional??=[],i.optional.push(e)}break}case 2:{let t=r.substring(u,e[1]),s=r.substring(e[4],d),l=c&&!!(t||s),f=t?l?t:t.toLowerCase():void 0,p=s?l?s:s.toLowerCase():void 0,m=_t(2,n.fullPath??n.from,l,f,p);o=m,m.parent=i,m.depth=a,i.wildcard??=[],i.wildcard.push(m)}}i=o}if(l&&n.children&&!n.isRoot&&n.id&&n.id.charCodeAt(n.id.lastIndexOf(`/`)+1)===95){let e=gt(n.fullPath??n.from);e.kind=ut,e.parent=i,a++,e.depth=a,i.pathless??=[],i.pathless.push(e),i=e}let u=(n.path||!n.children)&&!n.isRoot;if(u&&r.endsWith(`/`)){let e=gt(n.fullPath??n.from);e.kind=lt,e.parent=i,a++,e.depth=a,i.index=e,i=e}i.parse=l??null,i.priority=n.options?.params?.priority??0,u&&!i.route&&(i.route=n,i.fullPath=n.fullPath??n.from)}if(n.children)for(let r of n.children)pt(e,t,r,s,i,a,o)}function mt(e,t){if(e.parse&&!t.parse)return-1;if(!e.parse&&t.parse)return 1;if(e.parse&&t.parse&&(e.priority||t.priority))return t.priority-e.priority;if(e.prefix&&t.prefix&&e.prefix!==t.prefix){if(e.prefix.startsWith(t.prefix))return-1;if(t.prefix.startsWith(e.prefix))return 1}if(e.suffix&&t.suffix&&e.suffix!==t.suffix){if(e.suffix.endsWith(t.suffix))return-1;if(t.suffix.endsWith(e.suffix))return 1}return e.prefix&&!t.prefix?-1:!e.prefix&&t.prefix?1:e.suffix&&!t.suffix?-1:!e.suffix&&t.suffix?1:e.caseSensitive&&!t.caseSensitive?-1:!e.caseSensitive&&t.caseSensitive?1:0}function ht(e){if(e.pathless)for(let t of e.pathless)ht(t);if(e.static)for(let t of e.static.values())ht(t);if(e.staticInsensitive)for(let t of e.staticInsensitive.values())ht(t);if(e.dynamic?.length){e.dynamic.sort(mt);for(let t of e.dynamic)ht(t)}if(e.optional?.length){e.optional.sort(mt);for(let t of e.optional)ht(t)}if(e.wildcard?.length){e.wildcard.sort(mt);for(let t of e.wildcard)ht(t)}}function gt(e){return{kind:0,depth:0,pathless:null,index:null,static:null,staticInsensitive:null,dynamic:null,optional:null,wildcard:null,route:null,fullPath:e,parent:null,parse:null,priority:0}}function _t(e,t,n,r,i){return{kind:e,depth:0,pathless:null,index:null,static:null,staticInsensitive:null,dynamic:null,optional:null,wildcard:null,route:null,fullPath:t,parent:null,parse:null,priority:0,caseSensitive:n,prefix:r,suffix:i}}function vt(e,t){let n=gt(`/`),r=new Uint16Array(6);for(let t of e)pt(!1,r,t,1,n,0);ht(n),t.masksTree=n,t.flatCache=ct(1e3)}function yt(e,t){e||=`/`;let n=t.flatCache.get(e);if(n)return n;let r=wt(e,t.masksTree);return t.flatCache.set(e,r),r}function bt(e,t,n,r,i){e||=`/`,r||=`/`;let a=t?`case\0${e}`:e,o=i.singleCache.get(a);return o||(o=gt(`/`),pt(t,new Uint16Array(6),{from:e},1,o,0),i.singleCache.set(a,o)),wt(r,o,n)}function xt(e,t,n=!1){let r=n?e:`nofuzz\0${e}`,i=t.matchCache.get(r);if(i!==void 0)return i;e||=`/`;let a;try{a=wt(e,t.segmentTree,n)}catch(e){if(e instanceof URIError)a=null;else throw e}return a&&(a.branch=Et(a.route)),t.matchCache.set(r,a),a}function St(e){return e===`/`?e:e.replace(/\/{1,}$/,``)}function Ct(e,t=!1,n){let r=gt(e.fullPath),i=new Uint16Array(6),a={},o={},s=0;return pt(t,i,e,1,r,0,e=>{if(n?.(e,s),e.id in a&&st(),a[e.id]=e,s!==0&&e.path){let t=St(e.fullPath);(!o[t]||e.fullPath.endsWith(`/`))&&(o[t]=e)}s++}),ht(r),{processedTree:{segmentTree:r,singleCache:ct(1e3),matchCache:ct(1e3),flatCache:null,masksTree:null},routesById:a,routesByPath:o}}function wt(e,t,n=!1){let r=e.split(`/`),i=Ot(e,r,t,n);if(!i)return null;let[a]=Tt(e,r,i);return{route:i.node.route,rawParams:a}}function Tt(e,t,n){let r=Dt(n.node),i=null,a=Object.create(null),o=n.extract?.part??0,s=n.extract?.node??0,c=n.extract?.path??0,l=n.extract?.segment??0;for(;s=0;e--){let n=i.wildcard[e],{prefix:r,suffix:a}=n;if(!(r&&(v||!(n.caseSensitive?y:b??=y.toLowerCase()).startsWith(r)))){if(a){if(v)continue;let e=t.slice(u).join(`/`).slice(-a.length);if((n.caseSensitive?e:e.toLowerCase())!==a)continue}s.push({node:n,index:o,skipped:d,depth:f+1,statics:p,dynamics:m,optionals:h,extract:g,rawParams:_})}}if(i.optional){let e=d|1<=0;n--){let r=i.optional[n];s.push({node:r,index:u,skipped:e,depth:t,statics:p,dynamics:m,optionals:h,extract:g,rawParams:_})}if(!v)for(let e=i.optional.length-1;e>=0;e--){let n=i.optional[e],{prefix:r,suffix:a}=n;if(r||a){let e=n.caseSensitive?y:b??=y.toLowerCase();if(r&&!e.startsWith(r)||a&&!e.endsWith(a))continue}s.push({node:n,index:u+1,skipped:d,depth:t,statics:p,dynamics:m,optionals:h+kt(o,u),extract:g,rawParams:_})}}if(!v&&i.dynamic&&y)for(let e=i.dynamic.length-1;e>=0;e--){let t=i.dynamic[e],{prefix:n,suffix:r}=t;if(n||r){let e=t.caseSensitive?y:b??=y.toLowerCase();if(n&&!e.startsWith(n)||r&&!e.endsWith(r))continue}s.push({node:t,index:u+1,skipped:d,depth:f+1,statics:p,dynamics:m+kt(o,u),optionals:h,extract:g,rawParams:_})}if(!v&&i.staticInsensitive){let e=i.staticInsensitive.get(b??=y.toLowerCase());e&&s.push({node:e,index:u+1,skipped:d,depth:f+1,statics:p+kt(o,u),dynamics:m,optionals:h,extract:g,rawParams:_})}if(!v&&i.static){let e=i.static.get(y);e&&s.push({node:e,index:u+1,skipped:d,depth:f+1,statics:p+kt(o,u),dynamics:m,optionals:h,extract:g,rawParams:_})}if(i.pathless){let e=f+1;for(let t=i.pathless.length-1;t>=0;t--){let n=i.pathless[t];s.push({node:n,index:u,skipped:d,depth:e,statics:p,dynamics:m,optionals:h,extract:g,rawParams:_})}}}if(l)return l;if(r&&c){let n=c.index;for(let e=0;ee.statics||t.statics===e.statics&&(t.dynamics>e.dynamics||t.dynamics===e.dynamics&&(t.optionals>e.optionals||t.optionals===e.optionals&&((t.node.kind===lt)>(e.node.kind===lt)||t.node.kind===lt==(e.node.kind===lt)&&t.depth>e.depth)))}function Nt(e){return Pt(e.filter(e=>e!==void 0).join(`/`))}function Pt(e){return e.replace(/\/{2,}/g,`/`)}function Ft(e){return e===`/`?e:e.replace(/^\/{1,}/,``)}function It(e){let t=e.length;return t>1&&e[t-1]===`/`?e.replace(/\/{1,}$/,``):e}function Lt(e){return It(Ft(e))}function Rt(e,t){return e?.endsWith(`/`)&&e!==`/`&&e!==`${t}/`?e.slice(0,-1):e}function zt(e,t,n){return Rt(e,n)===Rt(t,n)}function Bt({base:e,to:t,trailingSlash:n=`never`,cache:r}){let i=t.startsWith(`/`),a=!i&&t===`.`,o;if(r){o=i?t:a?e:e+`\0`+t;let n=r.get(o);if(n)return n}let s;if(a)s=e.split(`/`);else if(i)s=t.split(`/`);else{for(s=e.split(`/`);s.length>1&&ze(s)===``;)s.pop();let n=t.split(`/`);for(let e=0,t=n.length;e1&&(ze(s)===``?n===`never`&&s.pop():n===`always`&&s.push(``));let c=Pt(s.join(`/`))||`/`;return o&&r&&r.set(o,c),c}function Vt(e){let t=new Map(e.map(e=>[encodeURIComponent(e),e])),n=Array.from(t.keys()).map(e=>e.replace(/[.*+?^${}()|[\]\\]/g,`\\$&`)).join(`|`),r=new RegExp(n,`g`);return e=>e.replace(r,e=>t.get(e)??e)}function Ht(e,t,n){let r=t[e];return typeof r==`string`?e===`_splat`?/^[a-zA-Z0-9\-._~!/]*$/.test(r)?r:r.split(`/`).map(e=>Wt(e,n)).join(`/`):Wt(r,n):r}function Ut({path:e,params:t,decoder:n,...r}){let i=!1,a=Object.create(null);if(!e||e===`/`)return{interpolatedPath:`/`,usedParams:a,isMissingParams:i};if(!e.includes(`$`))return{interpolatedPath:e,usedParams:a,isMissingParams:i};let o=e.length,s=0,c,l=``;for(;s{t[0]===`?`&&(t=t.substring(1));let n=Jt(t);for(let t in n){let r=n[t];if(typeof r==`string`)try{n[t]=e(r)}catch{}}return n}}function Qt(e,t){let n=typeof t==`function`;function r(r){if(typeof r==`object`&&r)try{return e(r)}catch{}else if(n&&typeof r==`string`)try{return t(r),e(r)}catch{}return r}return e=>{let t=Kt(e,r);return t?`?${t}`:``}}var $t=`__root__`;function en(e){if(e.statusCode=e.statusCode||e.code||307,!e._builtLocation&&!e.reloadDocument&&typeof e.href==`string`)try{new URL(e.href),e.reloadDocument=!0}catch{}let t=new Headers(e.headers);e.href&&t.get(`Location`)===null&&t.set(`Location`,e.href);let n=new Response(null,{status:e.statusCode,headers:t});if(n.options=e,e.throw)throw n;return n}function tn(e){return e instanceof Response&&!!e.options}var nn=e=>{if(!e.rendered)return e.rendered=!0,e.onReady?.()},rn=e=>e.stores.matchesId.get().some(t=>e.stores.matchStores.get(t)?.get()._forcePending),an=(e,t)=>!!(e.preload&&!e.router.stores.matchStores.has(t)),on=(e,t,n=!0)=>{let r={...e.router.options.context??{}},i=n?t:t-1;for(let t=0;t<=i;t++){let n=e.matches[t];if(!n)continue;let i=e.router.getMatch(n.id);i&&Object.assign(r,i.__routeContext,i.__beforeLoadContext)}return r},sn=(e,t)=>{if(!e.matches.length)return;let n=t.routeId,r=e.matches.findIndex(t=>t.routeId===e.router.routeTree.id),i=r>=0?r:0,a=n?e.matches.findIndex(e=>e.routeId===n):e.firstBadMatchIndex??e.matches.length-1;a<0&&(a=i);for(let t=a;t>=0;t--){let n=e.matches[t];if(e.router.looseRoutesById[n.routeId].options.notFoundComponent)return t}return n?a:i},cn=(e,t,n)=>{if(!(!tn(n)&&!Gt(n)))throw tn(n)&&n.redirectHandled&&!n.options.reloadDocument?n:(t&&(t._nonReactive.beforeLoadPromise?.resolve(),t._nonReactive.loaderPromise?.resolve(),t._nonReactive.beforeLoadPromise=void 0,t._nonReactive.loaderPromise=void 0,t._nonReactive.error=n,e.updateMatch(t.id,r=>({...r,status:tn(n)?`redirected`:Gt(n)?`notFound`:r.status===`pending`?`success`:r.status,context:on(e,t.index),isFetching:!1,error:n})),Gt(n)&&!n.routeId&&(n.routeId=t.routeId),t._nonReactive.loadPromise?.resolve()),tn(n)&&(e.rendered=!0,n.options._fromLocation=e.location,n.redirectHandled=!0,n=e.router.resolveRedirect(n)),n)},ln=(e,t)=>{let n=e.router.getMatch(t);return!!(!n||n._nonReactive.dehydrated)},un=(e,t,n)=>{let r=on(e,n);e.updateMatch(t,e=>({...e,context:r}))},dn=(e,t,n)=>{let{id:r,routeId:i}=e.matches[t],a=e.router.looseRoutesById[i];if(n instanceof Promise)throw n;e.firstBadMatchIndex??=t,cn(e,e.router.getMatch(r),n);try{a.options.onError?.(n)}catch(t){n=t,cn(e,e.router.getMatch(r),n)}e.updateMatch(r,e=>(e._nonReactive.beforeLoadPromise?.resolve(),e._nonReactive.beforeLoadPromise=void 0,e._nonReactive.loadPromise?.resolve(),{...e,error:n,status:`error`,isFetching:!1,updatedAt:Date.now(),abortController:new AbortController})),!e.preload&&!tn(n)&&!Gt(n)&&(e.serialError??=n)},fn=(e,t,n,r)=>{if(r._nonReactive.pendingTimeout!==void 0)return;let i=n.options.pendingMs??e.router.options.defaultPendingMs;if(e.onReady&&!an(e,t)&&(n.options.loader||n.options.beforeLoad||Cn(n))&&typeof i==`number`&&i!==1/0&&(n.options.pendingComponent??e.router.options?.defaultPendingComponent)){let t=setTimeout(()=>{nn(e)},i);r._nonReactive.pendingTimeout=t}},pn=(e,t,n)=>{let r=e.router.getMatch(t);if(!r._nonReactive.beforeLoadPromise&&!r._nonReactive.loaderPromise)return;fn(e,t,n,r);let i=()=>{let n=e.router.getMatch(t);n.preload&&(n.status===`redirected`||n.status===`notFound`)&&cn(e,n,n.error)};return r._nonReactive.beforeLoadPromise?r._nonReactive.beforeLoadPromise.then(i):i()},mn=(e,t,n,r)=>{let i=e.router.getMatch(t),a=i._nonReactive.loadPromise;i._nonReactive.loadPromise=Qe(()=>{a?.resolve(),a=void 0});let{paramsError:o,searchError:s}=i;o&&dn(e,n,o),s&&dn(e,n,s),fn(e,t,r,i);let c=new AbortController,l=!1,u=()=>{l||(l=!0,e.updateMatch(t,e=>({...e,isFetching:`beforeLoad`,fetchCount:e.fetchCount+1,abortController:c})))},d=()=>{i._nonReactive.beforeLoadPromise?.resolve(),i._nonReactive.beforeLoadPromise=void 0,e.updateMatch(t,e=>({...e,isFetching:!1}))};if(!r.options.beforeLoad){e.router.batch(()=>{u(),d()});return}i._nonReactive.beforeLoadPromise=Qe();let f={...on(e,n,!1),...i.__routeContext},{search:p,params:m,cause:h}=i,g=an(e,t),_={search:p,abortController:c,params:m,preload:g,context:f,location:e.location,navigate:t=>e.router.navigate({...t,_fromLocation:e.location}),buildLocation:e.router.buildLocation,cause:g?`preload`:h,matches:e.matches,routeId:r.id,...e.router.options.additionalContext},v=r=>{if(r===void 0){e.router.batch(()=>{u(),d()});return}(tn(r)||Gt(r))&&(u(),dn(e,n,r)),e.router.batch(()=>{u(),e.updateMatch(t,e=>({...e,__beforeLoadContext:r})),d()})},y;try{if(y=r.options.beforeLoad(_),$e(y))return u(),y.catch(t=>{dn(e,n,t)}).then(v)}catch(t){u(),dn(e,n,t)}v(y)},hn=(e,t)=>{let{id:n,routeId:r}=e.matches[t],i=e.router.looseRoutesById[r],a=()=>s(),o=()=>mn(e,n,t,i),s=()=>{if(ln(e,n))return;let t=pn(e,n,i);return $e(t)?t.then(o):o()};return a()},gn=(e,t,n)=>{let r=e.router.getMatch(t);if(!r||!n.options.head&&!n.options.scripts&&!n.options.headers)return;let i={ssr:e.router.options.ssr,matches:e.matches,match:r,params:r.params,loaderData:r.loaderData};return Promise.all([n.options.head?.(i),n.options.scripts?.(i),n.options.headers?.(i)]).then(([e,t,n])=>({meta:e?.meta,links:e?.links,headScripts:e?.scripts,headers:n,scripts:t,styles:e?.styles}))},_n=(e,t,n,r,i)=>{let a=t[r-1],{params:o,loaderDeps:s,abortController:c,cause:l}=e.router.getMatch(n),u=on(e,r),d=an(e,n);return{params:o,deps:s,preload:!!d,parentMatchPromise:a,abortController:c,context:u,location:e.location,navigate:t=>e.router.navigate({...t,_fromLocation:e.location}),cause:d?`preload`:l,route:i,...e.router.options.additionalContext}},vn=async(e,t,n,r,i)=>{try{let a=e.router.getMatch(n);try{Sn(i);let o=i.options.loader,s=typeof o==`function`?o:o?.handler,c=s?.(_n(e,t,n,r,i)),l=!!s&&$e(c);if((l||i._lazyPromise||i._componentsPromise||i.options.head||i.options.scripts||i.options.headers||a._nonReactive.minPendingPromise)&&e.updateMatch(n,e=>({...e,isFetching:`loader`})),s){let t=l?await c:c;cn(e,e.router.getMatch(n),t),t!==void 0&&e.updateMatch(n,e=>({...e,loaderData:t}))}i._lazyPromise&&await i._lazyPromise;let u=a._nonReactive.minPendingPromise;u&&await u,i._componentsPromise&&await i._componentsPromise,e.updateMatch(n,t=>({...t,error:void 0,context:on(e,r),status:`success`,isFetching:!1,updatedAt:Date.now()}))}catch(t){let o=t;if(o?.name===`AbortError`){if(a.abortController.signal.aborted){a._nonReactive.loaderPromise?.resolve(),a._nonReactive.loaderPromise=void 0;return}e.updateMatch(n,t=>({...t,status:t.status===`pending`?`success`:t.status,isFetching:!1,context:on(e,r)}));return}let s=a._nonReactive.minPendingPromise;s&&await s,Gt(t)&&await i.options.notFoundComponent?.preload?.(),cn(e,e.router.getMatch(n),t);try{i.options.onError?.(t)}catch(t){o=t,cn(e,e.router.getMatch(n),t)}!tn(o)&&!Gt(o)&&await Sn(i,[`errorComponent`]),e.updateMatch(n,t=>({...t,error:o,context:on(e,r),status:`error`,isFetching:!1}))}}catch(t){let r=e.router.getMatch(n);r&&(r._nonReactive.loaderPromise=void 0),cn(e,r,t)}},yn=async(e,t,n)=>{async function r(r,a,c,l,d){let f=Date.now()-a.updatedAt,p=r?d.options.preloadStaleTime??e.router.options.defaultPreloadStaleTime??3e4:d.options.staleTime??e.router.options.defaultStaleTime??0,m=d.options.shouldReload,h=typeof m==`function`?m(_n(e,t,i,n,d)):m,{status:g,invalid:_}=l,v=f>=p&&(!!e.forceStaleReload||l.cause===`enter`||c!==void 0&&c!==l.id);o=g===`success`&&(_||(h??v)),r&&d.options.preload===!1||(o&&!e.sync&&u?(s=!0,(async()=>{try{await vn(e,t,i,n,d);let r=e.router.getMatch(i);r._nonReactive.loaderPromise?.resolve(),r._nonReactive.loadPromise?.resolve(),r._nonReactive.loaderPromise=void 0,r._nonReactive.loadPromise=void 0}catch(t){tn(t)&&await e.router.navigate(t.options)}})()):g!==`success`||o?await vn(e,t,i,n,d):un(e,i,n))}let{id:i,routeId:a}=e.matches[n],o=!1,s=!1,c=e.router.looseRoutesById[a],l=c.options.loader,u=((typeof l==`function`?void 0:l?.staleReloadMode)??e.router.options.defaultStaleReloadMode)!==`blocking`;if(ln(e,i)){if(!e.router.getMatch(i))return e.matches[n];un(e,i,n)}else{let t=e.router.getMatch(i),o=e.router.stores.matchesId.get()[n],s=(o&&e.router.stores.matchStores.get(o)||null)?.routeId===a?o:e.router.stores.matches.get().find(e=>e.routeId===a)?.id,l=an(e,i);if(t._nonReactive.loaderPromise){if(t.status===`success`&&!e.sync&&!t.preload&&u)return t;await t._nonReactive.loaderPromise;let n=e.router.getMatch(i),a=n._nonReactive.error||n.error;a&&cn(e,n,a),n.status===`pending`&&await r(l,t,s,n,c)}else{let n=l&&!e.router.stores.matchStores.has(i),a=e.router.getMatch(i);a._nonReactive.loaderPromise=Qe(),n!==a.preload&&e.updateMatch(i,e=>({...e,preload:n})),await r(l,t,s,a,c)}}let d=e.router.getMatch(i);s||(d._nonReactive.loaderPromise?.resolve(),d._nonReactive.loadPromise?.resolve(),d._nonReactive.loadPromise=void 0),clearTimeout(d._nonReactive.pendingTimeout),d._nonReactive.pendingTimeout=void 0,s||(d._nonReactive.loaderPromise=void 0),d._nonReactive.dehydrated=void 0;let f=s?d.isFetching:!1;return f!==d.isFetching||d.invalid!==!1?(e.updateMatch(i,e=>({...e,isFetching:f,invalid:!1})),e.router.getMatch(i)):d};async function bn(e){let t=e,n=[];rn(t.router)&&nn(t);let r;for(let e=0;e({...e,...a?{status:`success`,globalNotFound:!0,error:void 0}:{status:`notFound`,error:l},isFetching:!1})),u=e,await Sn(r,[`notFoundComponent`])}else if(!t.preload){let e=t.matches[0];e.globalNotFound||t.router.getMatch(e.id)?.globalNotFound&&t.updateMatch(e.id,e=>({...e,globalNotFound:!1,error:void 0}))}if(t.serialError&&t.firstBadMatchIndex!==void 0){let e=t.router.looseRoutesById[t.matches[t.firstBadMatchIndex].routeId];await Sn(e,[`errorComponent`])}for(let e=0;e<=u;e++){let{id:n,routeId:r}=t.matches[e],i=t.router.looseRoutesById[r];try{let e=gn(t,n,i);if(e){let r=await e;t.updateMatch(n,e=>({...e,...r}))}}catch(e){console.error(`Error executing head for route ${r}:`,e)}}let d=nn(t);if($e(d)&&await d,l)throw l;if(t.serialError&&!t.preload&&!t.onReady)throw t.serialError;return t.matches}function xn(e,t){let n=t.map(t=>e.options[t]?.preload?.()).filter(Boolean);if(n.length!==0)return Promise.all(n)}function Sn(e,t=wn){!e._lazyLoaded&&e._lazyPromise===void 0&&(e.lazyFn?e._lazyPromise=e.lazyFn().then(t=>{let{id:n,...r}=t.options;Object.assign(e.options,r),e._lazyLoaded=!0,e._lazyPromise=void 0}):e._lazyLoaded=!0);let n=()=>e._componentsLoaded?void 0:t===wn?(()=>{if(e._componentsPromise===void 0){let t=xn(e,wn);t?e._componentsPromise=t.then(()=>{e._componentsLoaded=!0,e._componentsPromise=void 0}):e._componentsLoaded=!0}return e._componentsPromise})():xn(e,t);return e._lazyPromise?e._lazyPromise.then(n):n()}function Cn(e){for(let t of wn)if(e.options[t]?.preload)return!0;return!1}var wn=[`component`,`errorComponent`,`pendingComponent`,`notFoundComponent`];function Tn(e){return{input:({url:t})=>{for(let n of e)t=Dn(n,t);return t},output:({url:t})=>{for(let n=e.length-1;n>=0;n--)t=On(e[n],t);return t}}}function En(e){let t=Lt(e.basepath),n=`/${t}`,r=e.caseSensitive?n:n.toLowerCase(),i=`${r}/`;return{input:({url:t})=>{let a=e.caseSensitive?t.pathname:t.pathname.toLowerCase();return a===r?t.pathname=`/`:a.startsWith(i)&&(t.pathname=t.pathname.slice(n.length)),t},output:({url:e})=>(e.pathname=Nt([`/`,t,e.pathname]),e)}}function Dn(e,t){let n=e?.input?.({url:t});if(n){if(typeof n==`string`)return new URL(n);if(n instanceof URL)return n}return t}function On(e,t){let n=e?.output?.({url:t});if(n){if(typeof n==`string`)return new URL(n);if(n instanceof URL)return n}return t}function kn(e,t){let{createMutableStore:n,createReadonlyStore:r,batch:i,init:a}=t,o=new Map,s=new Map,c=new Map,l=n(e.status),u=n(e.loadedAt),d=n(e.isLoading),f=n(e.isTransitioning),p=n(e.location),m=n(e.resolvedLocation),h=n(e.statusCode),g=n(e.redirect),_=n([]),v=n([]),y=n([]),b=r(()=>An(o,_.get())),x=r(()=>An(s,v.get())),S=r(()=>An(c,y.get())),C=r(()=>_.get()[0]),w=r(()=>_.get().some(e=>o.get(e)?.get().status===`pending`)),T=r(()=>({locationHref:p.get().href,resolvedLocationHref:m.get()?.href,status:l.get()})),E=r(()=>({status:l.get(),loadedAt:u.get(),isLoading:d.get(),isTransitioning:f.get(),matches:b.get(),location:p.get(),resolvedLocation:m.get(),statusCode:h.get(),redirect:g.get()})),D=ct(64);function O(e){let t=D.get(e);return t||(t=r(()=>{let t=_.get();for(let n of t){let t=o.get(n);if(t&&t.routeId===e)return t.get()}}),D.set(e,t)),t}let k={status:l,loadedAt:u,isLoading:d,isTransitioning:f,location:p,resolvedLocation:m,statusCode:h,redirect:g,matchesId:_,pendingIds:v,cachedIds:y,matches:b,pendingMatches:x,cachedMatches:S,firstId:C,hasPending:w,matchRouteDeps:T,matchStores:o,pendingMatchStores:s,cachedMatchStores:c,__store:E,getRouteMatchStore:O,setMatches:ee,setPending:te,setCached:A};ee(e.matches),a?.(k);function ee(e){jn(e,o,_,n,i)}function te(e){jn(e,s,v,n,i)}function A(e){jn(e,c,y,n,i)}return k}function An(e,t){let n=[];for(let r of t){let t=e.get(r);t&&n.push(t.get())}return n}function jn(e,t,n,r,i){let a=e.map(e=>e.id),o=new Set(a);i(()=>{for(let e of t.keys())o.has(e)||t.delete(e);for(let n of e){let e=t.get(n.id);if(!e){let e=r(n);e.routeId=n.routeId,t.set(n.id,e);continue}e.routeId=n.routeId,e.get()!==n&&e.set(n)}ot(n.get(),a)||n.set(a)})}var Mn=`__TSR_index`,Nn=`popstate`,Pn=`beforeunload`;function Fn(e){let t=e.getLocation(),n=new Set,r=r=>{t=e.getLocation(),n.forEach(e=>e({location:t,action:r}))},i=n=>{e.notifyOnIndexChange??!0?r(n):t=e.getLocation()},a=async({task:n,navigateOpts:r,...i})=>{if(r?.ignoreBlocker??!1){n();return}let a=e.getBlockers?.()??[],o=i.type===`PUSH`||i.type===`REPLACE`;if(typeof document<`u`&&a.length&&o)for(let n of a){let r=zn(i.path,i.state);if(await n.blockerFn({currentLocation:t,nextLocation:r,action:i.type})){e.onBlocked?.();return}}n()};return{get location(){return t},get length(){return e.getLength()},subscribers:n,subscribe:e=>(n.add(e),()=>{n.delete(e)}),push:(n,i,o)=>{let s=t.state[Mn];i=In(s+1,i),a({task:()=>{e.pushState(n,i),r({type:`PUSH`})},navigateOpts:o,type:`PUSH`,path:n,state:i})},replace:(n,i,o)=>{let s=t.state[Mn];i=In(s,i),a({task:()=>{e.replaceState(n,i),r({type:`REPLACE`})},navigateOpts:o,type:`REPLACE`,path:n,state:i})},go:(t,n)=>{a({task:()=>{e.go(t),i({type:`GO`,index:t})},navigateOpts:n,type:`GO`})},back:t=>{a({task:()=>{e.back(t?.ignoreBlocker??!1),i({type:`BACK`})},navigateOpts:t,type:`BACK`})},forward:t=>{a({task:()=>{e.forward(t?.ignoreBlocker??!1),i({type:`FORWARD`})},navigateOpts:t,type:`FORWARD`})},canGoBack:()=>t.state[Mn]!==0,createHref:t=>e.createHref(t),block:t=>{if(!e.setBlockers)return()=>{};let n=e.getBlockers?.()??[];return e.setBlockers([...n,t]),()=>{let n=e.getBlockers?.()??[];e.setBlockers?.(n.filter(e=>e!==t))}},flush:()=>e.flush?.(),destroy:()=>e.destroy?.(),notify:r}}function In(e,t){t||={};let n=Bn();return{...t,key:n,__TSR_key:n,[Mn]:e}}function Ln(e){let t=e?.window??(typeof document<`u`?window:void 0),n=t.history.pushState,r=t.history.replaceState,i=[],a=()=>i,o=e=>i=e,s=e?.createHref??(e=>e),c=e?.parseLocation??(()=>zn(`${t.location.pathname}${t.location.search}${t.location.hash}`,t.history.state));if(!t.history.state?.__TSR_key&&!t.history.state?.key){let e=Bn();t.history.replaceState({[Mn]:0,key:e,__TSR_key:e},``)}let l=c(),u,d=!1,f=!1,p=!1,m=!1,h=()=>l,g,_,v=()=>{g&&(C._ignoreSubscribers=!0,(g.isPush?t.history.pushState:t.history.replaceState)(g.state,``,g.href),C._ignoreSubscribers=!1,g=void 0,_=void 0,u=void 0)},y=(e,t,n)=>{let r=s(t);_||(u=l),l=zn(t,n),g={href:r,state:n,isPush:g?.isPush||e===`push`},_||=Promise.resolve().then(()=>v())},b=e=>{l=c(),C.notify({type:e})},x=async()=>{if(f){f=!1;return}let e=c(),n=e.state[Mn]-l.state[Mn],r=n===1,i=n===-1,o=!r&&!i||d;d=!1;let s=o?`GO`:i?`BACK`:`FORWARD`,u=o?{type:`GO`,index:n}:{type:i?`BACK`:`FORWARD`};if(p)p=!1;else{let n=a();if(typeof document<`u`&&n.length){for(let r of n)if(await r.blockerFn({currentLocation:l,nextLocation:e,action:s})){f=!0,t.history.go(1),C.notify(u);return}}}l=c(),C.notify(u)},S=e=>{if(m){m=!1;return}let t=!1,n=a();if(typeof document<`u`&&n.length)for(let e of n){let n=e.enableBeforeUnload??!0;if(n===!0){t=!0;break}if(typeof n==`function`&&n()===!0){t=!0;break}}if(t)return e.preventDefault(),e.returnValue=``},C=Fn({getLocation:h,getLength:()=>t.history.length,pushState:(e,t)=>y(`push`,e,t),replaceState:(e,t)=>y(`replace`,e,t),back:e=>(e&&(p=!0),m=!0,t.history.back()),forward:e=>{e&&(p=!0),m=!0,t.history.forward()},go:e=>{d=!0,t.history.go(e)},createHref:e=>s(e),flush:v,destroy:()=>{t.history.pushState=n,t.history.replaceState=r,t.removeEventListener(Pn,S,{capture:!0}),t.removeEventListener(Nn,x)},onBlocked:()=>{u&&l!==u&&(l=u)},getBlockers:a,setBlockers:o,notifyOnIndexChange:!1});return t.addEventListener(Pn,S,{capture:!0}),t.addEventListener(Nn,x),t.history.pushState=function(...e){let r=n.apply(t.history,e);return C._ignoreSubscribers||b(`PUSH`),r},t.history.replaceState=function(...e){let n=r.apply(t.history,e);return C._ignoreSubscribers||b(`REPLACE`),n},C}function Rn(e){let t=e.replace(/[\x00-\x1f\x7f]/g,``);return t.startsWith(`//`)&&(t=`/`+t.replace(/^\/+/,``)),t}function zn(e,t){let n=Rn(e),r=n.indexOf(`#`),i=n.indexOf(`?`),a=Bn();return{href:n,pathname:n.substring(0,r>0?i>0?Math.min(r,i):r:i>0?i:n.length),hash:r>-1?n.substring(r):``,search:i>-1?n.slice(i,r===-1?void 0:r):``,state:t||{[Mn]:0,key:a,__TSR_key:a}}}function Bn(){return(Math.random()+1).toString(36).substring(7)}function Vn(e,t){let n=t,r=e;return{fromLocation:n,toLocation:r,pathChanged:n?.pathname!==r.pathname,hrefChanged:n?.href!==r.href,hashChanged:n?.hash!==r.hash}}var Hn=new WeakMap,Un=class{constructor(e,t){this.tempLocationKey=`${Math.round(Math.random()*1e7)}`,this.resetNextScroll=!0,this.shouldViewTransition=void 0,this.isViewTransitionTypesSupported=void 0,this.subscribers=new Set,this.isScrollRestoring=!1,this.isScrollRestorationSetup=!1,this.routeBranchCache=new WeakMap,this.startTransition=e=>e(),this.update=e=>{let t=this.options,n=this.basepath??t?.basepath??`/`,r=this.basepath===void 0,i=t?.rewrite;if(this.options={...t,...e},this.isServer=this.options.isServer??typeof document>`u`,this.protocolAllowlist=new Set(this.options.protocolAllowlist),this.options.pathParamsAllowedCharacters&&(this.pathParamsDecoder=Vt(this.options.pathParamsAllowedCharacters)),(!this.history||this.options.history&&this.options.history!==this.history)&&(this.history=this.options.history?this.options.history:Ln()),this.origin=this.options.origin,this.origin||=window?.origin&&window.origin!==`null`?window.origin:`http://localhost`,this.history&&this.updateLatestLocation(),this.options.routeTree!==this.routeTree){this.routeTree=this.options.routeTree;let e;this.resolvePathCache=ct(1e3),e=this.buildRouteTree(),this.setRoutes(e)}if(!this.stores&&this.latestLocation){let e=this.getStoreConfig(this);this.batch=e.batch,this.stores=kn(Kn(this.latestLocation),e),fr(this)}let a=!1,o=this.options.basepath??`/`,s=this.options.rewrite;if(r||n!==o||i!==s){this.basepath=o;let e=[],t=Lt(o);t&&t!==`/`&&e.push(En({basepath:o})),s&&e.push(s),this.rewrite=e.length===0?void 0:e.length===1?e[0]:Tn(e),this.history&&this.updateLatestLocation(),a=!0}a&&this.stores&&this.stores.location.set(this.latestLocation),typeof window<`u`&&`CSS`in window&&typeof window.CSS?.supports==`function`&&(this.isViewTransitionTypesSupported=window.CSS.supports(`selector(:active-view-transition-type(a))`))},this.updateLatestLocation=()=>{this.latestLocation=this.parseLocation(this.history.location,this.latestLocation)},this.buildRouteTree=()=>{let e=Ct(this.routeTree,this.options.caseSensitive,(e,t)=>{e.init({originalIndex:t})});return this.options.routeMasks&&vt(this.options.routeMasks,e.processedTree),e},this.subscribe=(e,t)=>{let n={eventType:e,fn:t};return this.subscribers.add(n),()=>{this.subscribers.delete(n)}},this.emit=e=>{this.subscribers.forEach(t=>{t.eventType===e.type&&t.fn(e)})},this.parseLocation=(e,t)=>{let n=({pathname:e,search:n,hash:r,href:i,state:a})=>{if(!this.rewrite&&!/[ \x00-\x1f\x7f\u0080-\uffff]/.test(e)){let i=this.options.parseSearch(n),o=this.options.stringifySearch(i);return{href:e+o+r,publicHref:e+o+r,pathname:it(e).path,external:!1,searchStr:o,search:Ke(t?.search,i),hash:it(r.slice(1)).path,state:qe(t?.state,a)}}let o=new URL(i,this.origin),s=Dn(this.rewrite,o),c=this.options.parseSearch(s.search),l=this.options.stringifySearch(c);return s.search=l,{href:s.href.replace(s.origin,``),publicHref:i,pathname:it(s.pathname).path,external:!!this.rewrite&&s.origin!==this.origin,searchStr:l,search:Ke(t?.search,c),hash:it(s.hash.slice(1)).path,state:qe(t?.state,a)}},r=n(e),{__tempLocation:i,__tempKey:a}=r.state;if(i&&(!a||a===this.tempLocationKey)){let e=n(i);return e.state.key=r.state.key,e.state.__TSR_key=r.state.__TSR_key,delete e.state.__tempLocation,{...e,maskedLocation:r}}return r},this.resolvePathWithBase=(e,t)=>Bt({base:e,to:t.includes(`//`)?Pt(t):t,trailingSlash:this.options.trailingSlash,cache:this.resolvePathCache}),this.matchRoutes=(e,t,n)=>typeof e==`string`?this.matchRoutesInternal({pathname:e,search:t},n):this.matchRoutesInternal(e,t),this.getMatchedRoutes=e=>Jn({pathname:e,routesById:this.routesById,processedTree:this.processedTree}),this.cancelMatch=e=>{let t=this.getMatch(e);t&&(t.abortController.abort(),clearTimeout(t._nonReactive.pendingTimeout),t._nonReactive.pendingTimeout=void 0)},this.cancelMatches=()=>{this.stores.pendingIds.get().forEach(e=>{this.cancelMatch(e)}),this.stores.matchesId.get().forEach(e=>{if(this.stores.pendingMatchStores.has(e))return;let t=this.stores.matchStores.get(e)?.get();t&&(t.status===`pending`||t.isFetching===`loader`)&&this.cancelMatch(e)})},this.buildLocation=e=>{let t=(t={})=>{let n=t._fromLocation||this.pendingBuiltLocation||this.latestLocation,r=this.matchRoutesLightweight(n);t.from;let i=t.unsafeRelative===`path`?n.pathname:t.from??r.fullPath,a=t.to?`${t.to}`:void 0,o=r.search,s=Object.assign(Object.create(null),r.params),c=a?.charCodeAt(0)===47?`/`:this.resolvePathWithBase(i,`.`),l=a?this.resolvePathWithBase(c,a):c,u=t.params===!1||t.params===null?Object.create(null):(t.params??!0)===!0?s:Object.assign(s,Ve(t.params,s)),d=this.routesByPath[It(l)],f;if(d)f=this.getRouteBranch(d);else if(l.includes(`$`))f=[];else{let e=this.getMatchedRoutes(l);f=e.matchedRoutes,this.options.notFoundRoute&&(!e.foundRoute||e.foundRoute.path!==`/`&&e.routeParams[`**`])&&(f=[...f,this.options.notFoundRoute])}if(f.length&&We(u))for(let e of f){let t=e.options.params?.stringify??e.options.stringifyParams;if(t)try{Object.assign(u,t(u))}catch{}}let p=e.leaveParams?l:it(Ut({path:l,params:u,decoder:this.pathParamsDecoder,server:this.isServer}).interpolatedPath).path,m=o;if(e._includeValidateSearch&&this.options.search?.strict){let e={};f.forEach(t=>{if(t.options.validateSearch)try{Object.assign(e,qn(t.options.validateSearch,{...e,...m}))}catch{}}),m=e}m=Yn({search:m,dest:t,destRoutes:f,_includeValidateSearch:e._includeValidateSearch}),m=Ke(o,m);let h=this.options.stringifySearch(m),g=t.hash===!0?n.hash:t.hash?Ve(t.hash,n.hash):void 0,_=g?`#${g}`:``,v=t.state===!0?n.state:t.state?Ve(t.state,n.state):{};v=qe(n.state,v);let y=`${p}${h}${_}`,b,x,S=!1;if(this.rewrite){let e=new URL(y,this.origin),t=On(this.rewrite,e);b=e.href.replace(e.origin,``),t.origin===this.origin?x=t.pathname+t.search+t.hash:(x=t.href,S=!0)}else b=at(y),x=b;return{publicHref:x,href:b,pathname:p,search:m,searchStr:h,state:v,hash:g??``,external:S,unmaskOnReload:t.unmaskOnReload}},n=(n={},r)=>{let i=t(n),a=r?t(r):void 0;if(!a){let n=Object.create(null);if(this.options.routeMasks){let o=yt(i.pathname,this.processedTree);if(o){Object.assign(n,o.rawParams);let{from:i,params:s,...c}=o.route,l=s===!1||s===null?Object.create(null):(s??!0)===!0?n:Object.assign(n,Ve(s,n));r={from:e.from,...c,params:l},a=t(r)}}}return a&&(i.maskedLocation=a),i};return e.mask?n(e,{from:e.from,...e.mask}):n(e)},this.commitLocation=async({viewTransition:e,ignoreBlocker:t,...n})=>{let r,i=()=>{let e=[`key`,`__TSR_key`,`__TSR_index`,`__hashScrollIntoViewOptions`];e.forEach(e=>{n.state[e]=this.latestLocation.state[e]});let t=Ze(n.state,this.latestLocation.state);return e.forEach(e=>{delete n.state[e]}),t},a=It(this.latestLocation.href)===It(n.href),o=this.commitLocationPromise;if(this.commitLocationPromise=Qe(()=>{o?.resolve(),o=void 0}),a&&i())this.load();else{let{maskedLocation:i,hashScrollIntoView:a,...o}=n;i&&(o={...i,state:{...i.state,__tempKey:void 0,__tempLocation:{...o,search:o.searchStr,state:{...o.state,__tempKey:void 0,__tempLocation:void 0,__TSR_key:void 0,key:void 0}}}},(o.unmaskOnReload??this.options.unmaskOnReload??!1)&&(o.state.__tempKey=this.tempLocationKey)),o.state.__hashScrollIntoViewOptions=a??this.options.defaultHashScrollIntoView??!0,this.shouldViewTransition=e,r=n.replace?`REPLACE`:`PUSH`,this.history[r===`REPLACE`?`replace`:`push`](o.publicHref,o.state,{ignoreBlocker:t})}return this.resetNextScroll=n.resetScroll??!0,this.history.subscribers.size||this.load(r?{action:{type:r}}:void 0),this.commitLocationPromise},this.buildAndCommitLocation=({replace:e,resetScroll:t,hashScrollIntoView:n,viewTransition:r,ignoreBlocker:i,href:a,...o}={})=>{if(a){let t=this.history.location.state.__TSR_index,n=zn(a,{__TSR_index:e?t:t+1}),r=new URL(n.pathname,this.origin);o.to=Dn(this.rewrite,r).pathname,o.search=this.options.parseSearch(n.search),o.hash=n.hash.slice(1)}let s=this.buildLocation({...o,_includeValidateSearch:!0});this.pendingBuiltLocation=s;let c=this.commitLocation({...s,viewTransition:r,replace:e,resetScroll:t,hashScrollIntoView:n,ignoreBlocker:i});return Promise.resolve().then(()=>{this.pendingBuiltLocation===s&&(this.pendingBuiltLocation=void 0)}),c},this.navigate=async({to:e,reloadDocument:t,href:n,publicHref:r,...i})=>{let a=!1;if(n)try{new URL(`${n}`),a=!0}catch{}if(a&&!t&&(t=!0),t){if(e!==void 0||!n){let t=this.buildLocation({to:e,...i});n??=t.publicHref,r??=t.publicHref}let t=!a&&r?r:n;if(rt(t,this.protocolAllowlist))return Promise.resolve();if(!i.ignoreBlocker){let e=this.history.getBlockers?.()??[];for(let t of e)if(t?.blockerFn&&await t.blockerFn({currentLocation:this.latestLocation,nextLocation:this.latestLocation,action:`PUSH`}))return Promise.resolve()}return i.replace?window.location.replace(t):window.location.href=t,Promise.resolve()}return this.buildAndCommitLocation({...i,href:n,to:e,_isNavigate:!0})},this.beforeLoad=()=>{this.cancelMatches(),this.updateLatestLocation();let e=this.matchRoutes(this.latestLocation),t=this.stores.cachedMatches.get().filter(t=>!e.some(e=>e.id===t.id));this.batch(()=>{this.stores.status.set(`pending`),this.stores.statusCode.set(200),this.stores.isLoading.set(!0),this.stores.location.set(this.latestLocation),this.stores.setPending(e),this.stores.setCached(t)})},this.load=async e=>{let t=e?.action?.type,n,r,i,a=this.stores.resolvedLocation.get()??this.stores.location.get();for(i=new Promise(o=>{this.startTransition(async()=>{try{this.beforeLoad(),t?Hn.set(this.latestLocation,t):Hn.delete(this.latestLocation);let n=this.latestLocation,r=Vn(n,this.stores.resolvedLocation.get());this.stores.redirect.get()||this.emit({type:`onBeforeNavigate`,...r}),this.emit({type:`onBeforeLoad`,...r}),await bn({router:this,sync:e?.sync,forceStaleReload:a.href===n.href,matches:this.stores.pendingMatches.get(),location:n,updateMatch:this.updateMatch,onReady:async()=>{this.startTransition(()=>{this.startViewTransition(async()=>{let e=null,t=null,n=null,r=null;this.batch(()=>{let i=this.stores.pendingMatches.get(),a=i.length,o=this.stores.matches.get();e=a?o.filter(e=>!this.stores.pendingMatchStores.has(e.id)):null;let s=new Set;for(let e of this.stores.pendingMatchStores.values())e.routeId&&s.add(e.routeId);let c=new Set;for(let e of this.stores.matchStores.values())e.routeId&&c.add(e.routeId);t=a?o.filter(e=>!s.has(e.routeId)):null,n=a?i.filter(e=>!c.has(e.routeId)):null,r=a?i.filter(e=>c.has(e.routeId)):o,this.stores.isLoading.set(!1),this.stores.loadedAt.set(Date.now()),a&&(this.stores.setMatches(i),this.stores.setPending([]),this.stores.setCached([...this.stores.cachedMatches.get(),...e.filter(e=>e.status!==`error`&&e.status!==`notFound`&&e.status!==`redirected`)]),this.clearExpiredCache())});for(let[e,i]of[[t,`onLeave`],[n,`onEnter`],[r,`onStay`]])if(e)for(let t of e)this.looseRoutesById[t.routeId].options[i]?.(t)})})}})}catch(e){tn(e)?(n=e,this.navigate({...n.options,replace:!0,ignoreBlocker:!0})):Gt(e)&&(r=e);let t=n?n.status:r?404:this.stores.matches.get().some(e=>e.status===`error`)?500:200;this.batch(()=>{this.stores.statusCode.set(t),this.stores.redirect.set(n)})}this.latestLoadPromise===i&&(this.commitLocationPromise?.resolve(),this.latestLoadPromise=void 0,this.commitLocationPromise=void 0),o()})}),this.latestLoadPromise=i,await i;this.latestLoadPromise&&i!==this.latestLoadPromise;)await this.latestLoadPromise;let o;this.hasNotFoundMatch()?o=404:this.stores.matches.get().some(e=>e.status===`error`)&&(o=500),o!==void 0&&this.stores.statusCode.set(o)},this.startViewTransition=e=>{let t=this.shouldViewTransition??this.options.defaultViewTransition;if(this.shouldViewTransition=void 0,t&&typeof document<`u`&&`startViewTransition`in document&&typeof document.startViewTransition==`function`){let n;if(typeof t==`object`&&this.isViewTransitionTypesSupported){let r=this.latestLocation,i=this.stores.resolvedLocation.get(),a=typeof t.types==`function`?t.types(Vn(r,i)):t.types;if(a===!1){e();return}n={update:e,types:a}}else n=e;document.startViewTransition(n)}else e()},this.updateMatch=(e,t)=>{this.startTransition(()=>{let n=this.stores.pendingMatchStores.get(e);if(n){n.set(t);return}let r=this.stores.matchStores.get(e);if(r){r.set(t);return}let i=this.stores.cachedMatchStores.get(e);if(i){let n=t(i.get());n.status===`redirected`?this.stores.cachedMatchStores.delete(e)&&this.stores.cachedIds.set(t=>t.filter(t=>t!==e)):i.set(n)}})},this.getMatch=e=>this.stores.cachedMatchStores.get(e)?.get()??this.stores.pendingMatchStores.get(e)?.get()??this.stores.matchStores.get(e)?.get(),this.invalidate=e=>{let t=t=>e?.filter?.(t)??!0?{...t,invalid:!0,...e?.forcePending||t.status===`error`||t.status===`notFound`?{status:`pending`,error:void 0}:void 0}:t;return this.batch(()=>{this.stores.setMatches(this.stores.matches.get().map(t)),this.stores.setCached(this.stores.cachedMatches.get().map(t)),this.stores.setPending(this.stores.pendingMatches.get().map(t))}),this.shouldViewTransition=!1,this.load({sync:e?.sync})},this.getParsedLocationHref=e=>e.publicHref||`/`,this.resolveRedirect=e=>{let t=e.headers.get(`Location`);if(!e.options.href||e.options._builtLocation){let t=e.options._builtLocation??this.buildLocation(e.options),n=this.getParsedLocationHref(t);e.options.href=n,e.headers.set(`Location`,n)}else if(t)try{let n=new URL(t);if(this.origin&&n.origin===this.origin){let t=n.pathname+n.search+n.hash;e.options.href=t,e.headers.set(`Location`,t)}}catch{}if(e.options.href&&!e.options._builtLocation&&rt(e.options.href,this.protocolAllowlist))throw Error(`Redirect blocked: unsafe protocol`);return e.headers.get(`Location`)||e.headers.set(`Location`,e.options.href),e},this.clearCache=e=>{let t=e?.filter;t===void 0?this.stores.setCached([]):this.stores.setCached(this.stores.cachedMatches.get().filter(e=>!t(e)))},this.clearExpiredCache=()=>{let e=Date.now();this.clearCache({filter:t=>{let n=this.looseRoutesById[t.routeId];if(!n.options.loader)return!0;let r=(t.preload?n.options.preloadGcTime??this.options.defaultPreloadGcTime:n.options.gcTime??this.options.defaultGcTime)??3e5;return t.status===`error`||e-t.updatedAt>=r}})},this.loadRouteChunk=Sn,this.preloadRoute=async e=>{let t=e._builtLocation??this.buildLocation(e),n=this.matchRoutes(t,{throwOnError:!0,preload:!0,dest:e}),r=new Set([...this.stores.matchesId.get(),...this.stores.pendingIds.get()]),i=new Set([...r,...this.stores.cachedIds.get()]),a=n.filter(e=>!i.has(e.id));if(a.length){let e=this.stores.cachedMatches.get();this.stores.setCached([...e,...a])}try{return n=await bn({router:this,matches:n,location:t,preload:!0,updateMatch:(e,t)=>{r.has(e)?n=n.map(n=>n.id===e?t(n):n):this.updateMatch(e,t)}}),n}catch(e){if(tn(e))return e.options.reloadDocument?void 0:await this.preloadRoute({...e.options,_fromLocation:t});Gt(e)||console.error(e);return}},this.matchRoute=(e,t)=>{let n={...e,to:e.to?this.resolvePathWithBase(e.from||``,e.to):void 0,params:e.params||{},leaveParams:!0},r=this.buildLocation(n);if(t?.pending&&this.stores.status.get()!==`pending`)return!1;let i=(t?.pending===void 0?!this.stores.isLoading.get():t.pending)?this.latestLocation:this.stores.resolvedLocation.get()||this.stores.location.get(),a=bt(r.pathname,t?.caseSensitive??!1,t?.fuzzy??!1,i.pathname,this.processedTree);return!a||e.params&&!Ze(a.rawParams,e.params,{partial:!0})?!1:t?.includeSearch??!0?Ze(i.search,r.search,{partial:!0})?a.rawParams:!1:a.rawParams},this.hasNotFoundMatch=()=>this.stores.matches.get().some(e=>e.status===`notFound`||e.globalNotFound),this.getStoreConfig=t,this.update({defaultPreloadDelay:50,defaultPendingMs:1e3,defaultPendingMinMs:500,context:void 0,...e,caseSensitive:e.caseSensitive??!1,notFoundMode:e.notFoundMode??`fuzzy`,stringifySearch:e.stringifySearch??Xt,parseSearch:e.parseSearch??Yt,protocolAllowlist:e.protocolAllowlist??nt}),typeof document<`u`&&(self.__TSR_ROUTER__=this)}isShell(){return!!this.options.isShell}isPrerendering(){return!!this.options.isPrerendering}get state(){return this.stores.__store.get()}setRoutes({routesById:e,routesByPath:t,processedTree:n}){this.routesById=e,this.routesByPath=t,this.processedTree=n;let r=this.options.notFoundRoute;r&&(r.init({originalIndex:99999999999}),this.routesById[r.id]=r)}getRouteBranch(e){let t=this.routeBranchCache.get(e);return t||(t=Et(e),this.routeBranchCache.set(e,t)),t}get looseRoutesById(){return this.routesById}getParentContext(e){return e?.id?e.context??this.options.context??void 0:this.options.context??void 0}matchRoutesInternal(e,t){let n=this.getMatchedRoutes(e.pathname),{foundRoute:r,routeParams:i}=n,{matchedRoutes:a}=n,o=!1;(r?r.path!==`/`&&i[`**`]:It(e.pathname))&&(this.options.notFoundRoute?a=[...a,this.options.notFoundRoute]:o=!0);let s=o?Zn(this.options.notFoundMode,a):void 0,c=Array(a.length),l=new Map;for(let e of this.stores.matchStores.values())e.routeId&&l.set(e.routeId,e.get());for(let n=0;nthis.navigate({...t,_fromLocation:e}),buildLocation:this.buildLocation,cause:n.cause,abortController:n.abortController,preload:!!n.preload,matches:c,routeId:r.id};n.__routeContext=r.options.context(t)??void 0}n.context={...a,...n.__routeContext,...n.__beforeLoadContext}}}return c}matchRoutesLightweight(e){let{matchedRoutes:t,routeParams:n}=this.getMatchedRoutes(e.pathname),r=ze(t),i={...e.search};for(let e of t)try{Object.assign(i,qn(e.options.validateSearch,i))}catch{}let a=ze(this.stores.matchesId.get()),o=a&&this.stores.matchStores.get(a)?.get(),s=o&&o.routeId===r.id&&o.pathname===e.pathname,c;if(s)c=o.params;else{let e=Object.assign(Object.create(null),n);for(let n of t)try{Qn(n,e)}catch{}c=e}return{matchedRoutes:t,fullPath:r.fullPath,search:i,params:c}}},Wn=class extends Error{},Gn=class extends Error{};function Kn(e){return{loadedAt:0,isLoading:!1,isTransitioning:!1,status:`idle`,resolvedLocation:void 0,location:e,matches:[],statusCode:200}}function qn(e,t){if(e==null)return{};if(`~standard`in e){let n=e[`~standard`].validate(t);if(n instanceof Promise)throw new Wn(`Async validation not supported`);if(n.issues)throw new Wn(JSON.stringify(n.issues,void 0,2),{cause:n});return n.value}return`parse`in e?e.parse(t):typeof e==`function`?e(t):{}}function Jn({pathname:e,routesById:t,processedTree:n}){let r=Object.create(null),i=It(e),a,o=xt(i,n,!0);return o&&(a=o.route,Object.assign(r,o.rawParams)),{matchedRoutes:o?.branch||[t.__root__],routeParams:r,foundRoute:a}}function Yn({search:e,dest:t,destRoutes:n,_includeValidateSearch:r}){return Xn(n)(e,t,r??!1)}function Xn(e){let t={dest:null,_includeValidateSearch:!1,middlewares:[]};for(let n of e)`search`in n.options?n.options.search?.middlewares&&t.middlewares.push(...n.options.search.middlewares):(n.options.preSearchFilters||n.options.postSearchFilters)&&t.middlewares.push(({search:e,next:t})=>{let r=e;`preSearchFilters`in n.options&&n.options.preSearchFilters&&(r=n.options.preSearchFilters.reduce((e,t)=>t(e),e));let i=t(r);return`postSearchFilters`in n.options&&n.options.postSearchFilters?n.options.postSearchFilters.reduce((e,t)=>t(e),i):i}),n.options.validateSearch&&t.middlewares.push(({search:e,next:r})=>{let i=r(e);if(!t._includeValidateSearch)return i;try{return{...i,...qn(n.options.validateSearch,i)??void 0}}catch{return i}});t.middlewares.push(({search:e})=>{let n=t.dest;return n.search?n.search===!0?e:Ve(n.search,e):{}});let n=(e,t,r)=>{if(e>=r.length)return t;let i=r[e];return i({search:t,next:t=>n(e+1,t,r)})};return function(e,r,i){return t.dest=r,t._includeValidateSearch=i,n(0,e,t.middlewares)}}function Zn(e,t){if(e!==`root`)for(let e=t.length-1;e>=0;e--){let n=t[e];if(n.children)return n.id}return $t}function Qn(e,t){let n=e.options.params?.parse??e.options.parseParams;if(n){let e=n(t);if(e===!1)throw Error(`Route params.parse returned false for a matched route`);Object.assign(t,e)}}function $n(){try{return sessionStorage}catch{return}}var er=`tsr-scroll-restoration-v1_3`,tr=$n();function nr(){try{return JSON.parse(tr?.getItem(`tsr-scroll-restoration-v1_3`)||`{}`)}catch{return{}}}function rr(){try{tr?.setItem(er,JSON.stringify(ir))}catch{}}var ir=nr(),ar=`data-scroll-restoration-id`,or=e=>e.state.__TSR_key||e.href;function sr(e){let t=e.getAttribute(ar);if(t)return`[${ar}="${t}"]`;let n=``,r=e,i;for(;i=r.parentNode;){let e=1,t=r;for(;t=t.previousElementSibling;)e++;let a=`${r.localName}:nth-child(${e})`;n=n?`${a} > ${n}`:a,r=i}return n}var cr=!1,lr=`window`;function ur(e){try{return typeof e==`function`?e():document.querySelector(e)}catch{}}function dr(e){let t=[];for(let n of e){if(n===lr)continue;let e=ur(n);e&&t.push(e)}return t}function fr(e,t){if((t??e.options.scrollRestoration)&&(e.isScrollRestoring=!0),e.isScrollRestorationSetup)return;e.isScrollRestorationSetup=!0,cr=!1;let n=e.options.getScrollRestorationKey||or,r=new Map,i=(e,t,n)=>{let i=r.get(e)||{};i.scrollX=t,i.scrollY=n,r.set(e,i)};history.scrollRestoration=`manual`;let a=t=>{if(!(cr||!e.isScrollRestoring)){if(t.target===document)i(lr,scrollX,scrollY);else{let e=t.target;i(e,e.scrollLeft,e.scrollTop)}}},o=t=>{if(!e.isScrollRestoring)return;let n=ir[t]||={};for(let[e,t]of r)e===lr?n[lr]=t:e.isConnected&&(n[sr(e)]=t)};document.addEventListener(`scroll`,a,!0),e.subscribe(`onBeforeLoad`,e=>{e.fromLocation&&o(n(e.fromLocation)),r.clear()}),addEventListener(`pagehide`,()=>{o(n(e.stores.resolvedLocation.get()??e.stores.location.get())),rr()}),e.subscribe(`onRendered`,t=>{let i=e.options.scrollRestorationBehavior,a=e.options.scrollToTopSelectors,o=e.resetNextScroll,s;if(r.clear(),o||(e.resetNextScroll=!0),typeof e.options.scrollRestoration==`function`&&!e.options.scrollRestoration({location:e.latestLocation}))return;let c=n(t.toLocation),l=t.fromLocation&&n(t.fromLocation);if(e.isScrollRestoring&&l&&l!==c){let e=ir[l];if(e){let t=ir[c];for(let n in e){if(n===lr){if(o)continue}else{let e=ur(n);if(!e||o&&a&&(s??=dr(a),s.includes(e)))continue}t||=ir[c]={},t[n]??=e[n]}}}cr=!0;try{let n=t.toLocation.hash,r=t.toLocation.state.__hashScrollIntoViewOptions??!0,l=!1;if(o){let o=Hn.get(t.toLocation),u=n&&r&&(o===`PUSH`||o===`REPLACE`),d=e.isScrollRestoring?ir[c]:void 0;if(d)for(let e in d){let{scrollX:t,scrollY:n}=d[e];if(e===lr){if(u)continue;scrollTo({top:n,left:t,behavior:i}),l=!0}else{let r=ur(e);r&&(r.scrollLeft=t,r.scrollTop=n)}}if(!l&&!n){let e={top:0,left:0,behavior:i};if(scrollTo(e),a){s??=dr(a);for(let t of s)t.scrollTo(e)}}}!l&&n&&r&&document.getElementById(n)?.scrollIntoView(r)}finally{cr=!1}})}var pr=`Error preloading route! ☝️`,mr=class{get to(){return this._to}get id(){return this._id}get path(){return this._path}get fullPath(){return this._fullPath}constructor(e){if(this.init=e=>{this.originalIndex=e.originalIndex;let t=this.options,n=!t?.path&&!t?.id;this.parentRoute=this.options.getParentRoute?.(),n?this._path=$t:this.parentRoute||st();let r=n?$t:t?.path;r&&r!==`/`&&(r=Ft(r));let i=t?.id||r,a=n?$t:Nt([this.parentRoute.id===`__root__`?``:this.parentRoute.id,i]);r===`__root__`&&(r=`/`),a!==`__root__`&&(a=Nt([`/`,a]));let o=a===`__root__`?`/`:Nt([this.parentRoute.fullPath,r]);this._path=r,this._id=a,this._fullPath=o,this._to=It(o)},this.addChildren=e=>this._addFileChildren(e),this._addFileChildren=e=>(Array.isArray(e)&&(this.children=e),typeof e==`object`&&e&&(this.children=Object.values(e)),this),this._addFileTypes=()=>this,this.updateLoader=e=>(Object.assign(this.options,e),this),this.update=e=>(Object.assign(this.options,e),this),this.lazy=e=>(this.lazyFn=e,this),this.redirect=e=>en({from:this.fullPath,...e}),this.options=e||{},this.isRoot=!e?.getParentRoute,e?.id&&e?.path)throw Error(`Route cannot have both an 'id' and a 'path' option.`)}},hr=class extends mr{constructor(e){super(e)}};function gr(e){let t=e.errorComponent??vr;return(0,z.jsx)(_r,{getResetKey:e.getResetKey,onCatch:e.onCatch,children:({error:n,reset:r})=>n?R.createElement(t,{error:n,reset:r}):e.children})}var _r=class extends R.Component{constructor(...e){super(...e),this.state={error:null}}static getDerivedStateFromProps(e,t){let n=e.getResetKey();return t.error&&t.resetKey!==n?{resetKey:n,error:null}:{resetKey:n}}static getDerivedStateFromError(e){return{error:e}}reset(){this.setState({error:null})}componentDidCatch(e,t){this.props.onCatch&&this.props.onCatch(e,t)}render(){return this.props.children({error:this.state.error,reset:()=>{this.reset()}})}};function vr({error:e}){let[t,n]=R.useState(!1);return(0,z.jsxs)(`div`,{style:{padding:`.5rem`,maxWidth:`100%`},children:[(0,z.jsxs)(`div`,{style:{display:`flex`,alignItems:`center`,gap:`.5rem`},children:[(0,z.jsx)(`strong`,{style:{fontSize:`1rem`},children:`Something went wrong!`}),(0,z.jsx)(`button`,{style:{appearance:`none`,fontSize:`.6em`,border:`1px solid currentColor`,padding:`.1rem .2rem`,fontWeight:`bold`,borderRadius:`.25rem`},onClick:()=>n(e=>!e),children:t?`Hide Error`:`Show Error`})]}),(0,z.jsx)(`div`,{style:{height:`.25rem`}}),t?(0,z.jsx)(`div`,{children:(0,z.jsx)(`pre`,{style:{fontSize:`.7em`,border:`1px solid red`,borderRadius:`.25rem`,padding:`.3rem`,color:`red`,overflow:`auto`},children:e.message?(0,z.jsx)(`code`,{children:e.message}):null})}):null]})}function yr({children:e,fallback:t=null}){return br()?(0,z.jsx)(R.Fragment,{children:e}):(0,z.jsx)(R.Fragment,{children:t})}function br(){return R.useSyncExternalStore(xr,()=>!0,()=>!1)}function xr(){return()=>{}}var Sr=R.createContext(null);function Cr(e){return R.useContext(Sr)}var wr=R.createContext(void 0),Tr=R.createContext(void 0),Er=(e=>(e[e.None=0]=`None`,e[e.Mutable=1]=`Mutable`,e[e.Watching=2]=`Watching`,e[e.RecursedCheck=4]=`RecursedCheck`,e[e.Recursed=8]=`Recursed`,e[e.Dirty=16]=`Dirty`,e[e.Pending=32]=`Pending`,e))(Er||{});function Dr({update:e,notify:t,unwatched:n}){return{link:r,unlink:i,propagate:a,checkDirty:o,shallowPropagate:s};function r(e,t,n){let r=t.depsTail;if(r!==void 0&&r.dep===e)return;let i=r===void 0?t.deps:r.nextDep;if(i!==void 0&&i.dep===e){i.version=n,t.depsTail=i;return}let a=e.subsTail;if(a!==void 0&&a.version===n&&a.sub===t)return;let o=t.depsTail=e.subsTail={version:n,dep:e,sub:t,prevDep:r,nextDep:i,prevSub:a,nextSub:void 0};i!==void 0&&(i.prevDep=o),r===void 0?t.deps=o:r.nextDep=o,a===void 0?e.subs=o:a.nextSub=o}function i(e,t=e.sub){let r=e.dep,i=e.prevDep,a=e.nextDep,o=e.nextSub,s=e.prevSub;return a===void 0?t.depsTail=i:a.prevDep=i,i===void 0?t.deps=a:i.nextDep=a,o===void 0?r.subsTail=s:o.prevSub=s,s===void 0?(r.subs=o)===void 0&&n(r):s.nextSub=o,a}function a(e){let n=e.nextSub,r;top:do{let i=e.sub,a=i.flags;if(a&60?a&12?a&4?!(a&48)&&c(e,i)?(i.flags=a|40,a&=1):a=0:i.flags=a&-9|32:a=0:i.flags=a|32,a&2&&t(i),a&1){let t=i.subs;if(t!==void 0){let i=(e=t).nextSub;i!==void 0&&(r={value:n,prev:r},n=i);continue}}if((e=n)!==void 0){n=e.nextSub;continue}for(;r!==void 0;)if(e=r.value,r=r.prev,e!==void 0){n=e.nextSub;continue top}break}while(!0)}function o(t,n){let r,i=0,a=!1;top:do{let o=t.dep,c=o.flags;if(n.flags&16)a=!0;else if((c&17)==17){if(e(o)){let e=o.subs;e.nextSub!==void 0&&s(e),a=!0}}else if((c&33)==33){(t.nextSub!==void 0||t.prevSub!==void 0)&&(r={value:t,prev:r}),t=o.deps,n=o,++i;continue}if(!a){let e=t.nextDep;if(e!==void 0){t=e;continue}}for(;i--;){let i=n.subs,o=i.nextSub!==void 0;if(o?(t=r.value,r=r.prev):t=i,a){if(e(n)){o&&s(i),n=t.sub;continue}a=!1}else n.flags&=-33;n=t.sub;let c=t.nextDep;if(c!==void 0){t=c;continue top}}return a}while(!0)}function s(e){do{let n=e.sub,r=n.flags;(r&48)==32&&(n.flags=r|16,(r&6)==2&&t(n))}while((e=e.nextSub)!==void 0)}function c(e,t){let n=t.depsTail;for(;n!==void 0;){if(n===e)return!0;n=n.prevDep}return!1}}function Or(e,t,n){let r=typeof e==`object`,i=r?e:void 0;return{next:(r?e.next:e)?.bind(i),error:(r?e.error:t)?.bind(i),complete:(r?e.complete:n)?.bind(i)}}var kr=[],Ar=0,{link:jr,unlink:Mr,propagate:Nr,checkDirty:Pr,shallowPropagate:Fr}=Dr({update(e){return e._update()},notify(e){kr[Lr++]=e,e.flags&=~Er.Watching},unwatched(e){e.depsTail!==void 0&&(e.depsTail=void 0,e.flags=Er.Mutable|Er.Dirty,Vr(e))}}),Ir=0,Lr=0,Rr,zr=0;function Br(e){try{++zr,e()}finally{--zr||Hr()}}function Vr(e){let t=e.depsTail,n=t===void 0?e.deps:t.nextDep;for(;n!==void 0;)n=Mr(n,e)}function Hr(){if(!(zr>0)){for(;Ir{i.get(),n.current?t.next?.(i._snapshot):n.current=!0});return{unsubscribe:()=>{r.stop()}}},_update(e){let a=Rr,o=t?.compare??Object.is;if(n)Rr=i,++Ar,i.depsTail=void 0;else if(e===void 0)return!1;n&&(i.flags=Er.Mutable|Er.RecursedCheck);try{let t=i._snapshot,a=typeof e==`function`?e(t):e===void 0&&n?r(t):e;return t===void 0||!o(t,a)?(i._snapshot=a,!0):!1}finally{Rr=a,n&&(i.flags&=~Er.RecursedCheck),Vr(i)}}};return n?(i.flags=Er.Mutable|Er.Dirty,i.get=function(){let e=i.flags;if(e&Er.Dirty||e&Er.Pending&&Pr(i.deps,i)){if(i._update()){let e=i.subs;e!==void 0&&Fr(e)}}else e&Er.Pending&&(i.flags=e&~Er.Pending);return Rr!==void 0&&jr(i,Rr,Ar),i._snapshot}):i.set=function(e){if(i._update(e)){let e=i.subs;e!==void 0&&(Nr(e),Fr(e),Hr())}},i}function Wr(e){let t=()=>{let t=Rr;Rr=n,++Ar,n.depsTail=void 0,n.flags=Er.Watching|Er.RecursedCheck;try{return e()}finally{Rr=t,n.flags&=~Er.RecursedCheck,Vr(n)}},n={deps:void 0,depsTail:void 0,subs:void 0,subsTail:void 0,flags:Er.Watching|Er.RecursedCheck,notify(){let e=this.flags;e&Er.Dirty||e&Er.Pending&&Pr(this.deps,this)?t():this.flags=Er.Watching},stop(){this.flags=Er.None,this.depsTail=void 0,Vr(this)}};return t(),n}var Gr=o((e=>{var t=f();function n(e,t){return e===t&&(e!==0||1/e==1/t)||e!==e&&t!==t}var r=typeof Object.is==`function`?Object.is:n,i=t.useState,a=t.useEffect,o=t.useLayoutEffect,s=t.useDebugValue;function c(e,t){var n=t(),r=i({inst:{value:n,getSnapshot:t}}),c=r[0].inst,u=r[1];return o(function(){c.value=n,c.getSnapshot=t,l(c)&&u({inst:c})},[e,n,t]),a(function(){return l(c)&&u({inst:c}),e(function(){l(c)&&u({inst:c})})},[e]),s(n),n}function l(e){var t=e.getSnapshot;e=e.value;try{var n=t();return!r(e,n)}catch{return!0}}function u(e,t){return t()}var d=typeof window>`u`||window.document===void 0||window.document.createElement===void 0?u:c;e.useSyncExternalStore=t.useSyncExternalStore===void 0?d:t.useSyncExternalStore})),Kr=o(((e,t)=>{t.exports=Gr()})),qr=o((e=>{var t=f(),n=Kr();function r(e,t){return e===t&&(e!==0||1/e==1/t)||e!==e&&t!==t}var i=typeof Object.is==`function`?Object.is:r,a=n.useSyncExternalStore,o=t.useRef,s=t.useEffect,c=t.useMemo,l=t.useDebugValue;e.useSyncExternalStoreWithSelector=function(e,t,n,r,u){var d=o(null);if(d.current===null){var f={hasValue:!1,value:null};d.current=f}else f=d.current;d=c(function(){function e(e){if(!a){if(a=!0,o=e,e=r(e),u!==void 0&&f.hasValue){var t=f.value;if(u(t,e))return s=t}return s=e}if(t=s,i(o,e))return t;var n=r(e);return u!==void 0&&u(t,n)?(o=e,t):(o=e,s=n)}var a=!1,o,s,c=n===void 0?null:n;return[function(){return e(t())},c===null?void 0:function(){return e(c())}]},[t,n,r,u]);var p=a(e,d[0],d[1]);return s(function(){f.hasValue=!0,f.value=p},[p]),l(p),p}})),Jr=o(((e,t)=>{t.exports=qr()}))();function Yr(e,t){return e===t}function Xr(e,t,n=Yr){let r=(0,R.useCallback)(t=>{if(!e)return()=>{};let{unsubscribe:n}=e.subscribe(t);return n},[e]),i=(0,R.useCallback)(()=>e?.get(),[e]);return(0,Jr.useSyncExternalStoreWithSelector)(r,i,i,t,n)}var Zr={get:()=>void 0,subscribe:()=>({unsubscribe:()=>{}})};function Qr(e){let t=Cr(),n=R.useContext(e.from?Tr:wr),r=e.from??n,i=r?e.from?t.stores.getRouteMatchStore(r):t.stores.matchStores.get(r):void 0,a=R.useRef(void 0);return Xr(i??Zr,n=>{if((e.shouldThrow??!0)&&!n&&st(),n===void 0)return;let r=e.select?e.select(n):n;if(e.structuralSharing??t.options.defaultStructuralSharing){let e=qe(a.current,r);return a.current=e,e}return r})}function $r(e){return Qr({from:e.from,strict:e.strict,structuralSharing:e.structuralSharing,select:t=>e.select?e.select(t.loaderData):t.loaderData})}function ei(e){let{select:t,...n}=e;return Qr({...n,select:e=>t?t(e.loaderDeps):e.loaderDeps})}function ti(e){return Qr({from:e.from,shouldThrow:e.shouldThrow,structuralSharing:e.structuralSharing,strict:e.strict,select:t=>{let n=e.strict===!1?t.params:t._strictParams;return e.select?e.select(n):n}})}function ni(e){return Qr({from:e.from,strict:e.strict,shouldThrow:e.shouldThrow,structuralSharing:e.structuralSharing,select:t=>e.select?e.select(t.search):t.search})}function ri(e){let t=Cr();return R.useCallback(n=>t.navigate({...n,from:n.from??e?.from}),[e?.from,t])}function ii(e){let t=Cr(),n=ri(),r=R.useRef(null);return Ie(()=>{r.current!==e&&(n(e),r.current=e)},[t,e,n]),null}function ai(e){return Qr({...e,select:t=>e.select?e.select(t.context):t.context})}var oi=m();function si(e,t){let n=Cr(),r=B(t),{activeProps:i,inactiveProps:a,activeOptions:o,to:s,preload:c,preloadDelay:l,preloadIntentProximity:u,hashScrollIntoView:d,replace:f,startTransition:p,resetScroll:m,viewTransition:h,children:g,target:_,disabled:v,style:y,className:b,onClick:x,onBlur:S,onFocus:C,onMouseEnter:w,onMouseLeave:T,onTouchStart:E,ignoreBlocker:D,params:O,search:k,hash:ee,state:te,mask:A,reloadDocument:j,unsafeRelative:ne,from:M,_fromLocation:N,...P}=e,re=br(),ie=R.useMemo(()=>e,[n,e.from,e._fromLocation,e.hash,e.to,e.search,e.params,e.state,e.mask,e.unsafeRelative]),ae=Xr(n.stores.location,e=>e,(e,t)=>e.href===t.href),F=R.useMemo(()=>{let e={_fromLocation:ae,...ie};return n.buildLocation(e)},[n,ae,ie]),oe=F.maskedLocation?F.maskedLocation.publicHref:F.publicHref,I=F.maskedLocation?F.maskedLocation.external:F.external,se=R.useMemo(()=>gi(oe,I,n.history,v),[v,I,oe,n.history]),L=R.useMemo(()=>{if(se?.external)return rt(se.href,n.protocolAllowlist)?void 0:se.href;if(!_i(s)&&typeof s==`string`&&s.indexOf(`:`)!==-1)try{return new URL(s),rt(s,n.protocolAllowlist)?void 0:s}catch{}},[s,se,n.protocolAllowlist]),ce=R.useMemo(()=>{if(L)return!1;if(o?.exact){if(!zt(ae.pathname,F.pathname,n.basepath))return!1}else{let e=Rt(ae.pathname,n.basepath),t=Rt(F.pathname,n.basepath);if(!(e.startsWith(t)&&(e.length===t.length||e[t.length]===`/`)))return!1}return(o?.includeSearch??!0)&&!Ze(ae.search,F.search,{partial:!o?.exact,ignoreUndefined:!o?.explicitUndefined})?!1:!o?.includeHash||re&&ae.hash===F.hash},[o?.exact,o?.explicitUndefined,o?.includeHash,o?.includeSearch,ae,L,re,F.hash,F.pathname,F.search,n.basepath]),le=ce?Ve(i,{})??li:ci,ue=ce?ci:Ve(a,{})??ci,de=[b,le.className,ue.className].filter(Boolean).join(` `),fe=(y||le.style||ue.style)&&{...y,...le.style,...ue.style},[pe,me]=R.useState(!1),he=R.useRef(!1),ge=e.reloadDocument||L?!1:c??n.options.defaultPreload,_e=l??n.options.defaultPreloadDelay??0,ve=R.useCallback(()=>{n.preloadRoute({...ie,_builtLocation:F}).catch(e=>{console.warn(e),console.warn(pr)})},[n,ie,F]);Re(r,R.useCallback(e=>{e?.isIntersecting&&ve()},[ve]),mi,{disabled:!!v||ge!==`viewport`}),R.useEffect(()=>{he.current||!v&&ge===`render`&&(ve(),he.current=!0)},[v,ve,ge]);let ye=e=>{let t=e.currentTarget.getAttribute(`target`),r=_===void 0?t:_;if(!v&&!yi(e)&&!e.defaultPrevented&&(!r||r===`_self`)&&e.button===0){e.preventDefault(),(0,oi.flushSync)(()=>{me(!0)});let t=n.subscribe(`onResolved`,()=>{t(),me(!1)});n.navigate({...ie,replace:f,resetScroll:m,hashScrollIntoView:d,startTransition:p,viewTransition:h,ignoreBlocker:D})}};if(L)return{...P,ref:r,href:L,...g&&{children:g},..._&&{target:_},...v&&{disabled:v},...y&&{style:y},...b&&{className:b},...x&&{onClick:x},...S&&{onBlur:S},...C&&{onFocus:C},...w&&{onMouseEnter:w},...T&&{onMouseLeave:T},...E&&{onTouchStart:E}};let be=e=>{if(v||ge!==`intent`)return;if(!_e){ve();return}let t=e.currentTarget;if(pi.has(t))return;let n=setTimeout(()=>{pi.delete(t),ve()},_e);pi.set(t,n)},xe=e=>{v||ge!==`intent`||ve()},Se=e=>{if(v||!ge||!_e)return;let t=e.currentTarget,n=pi.get(t);n&&(clearTimeout(n),pi.delete(t))};return{...P,...le,...ue,href:se?.href,ref:r,onClick:hi([x,ye]),onBlur:hi([S,Se]),onFocus:hi([C,be]),onMouseEnter:hi([w,be]),onMouseLeave:hi([T,Se]),onTouchStart:hi([E,xe]),disabled:!!v,target:_,...fe&&{style:fe},...de&&{className:de},...v&&ui,...ce&&di,...re&&pe&&fi}}var ci={},li={className:`active`},ui={role:`link`,"aria-disabled":!0},di={"data-status":`active`,"aria-current":`page`},fi={"data-transitioning":`transitioning`},pi=new WeakMap,mi={rootMargin:`100px`},hi=e=>t=>{for(let n of e)if(n){if(t.defaultPrevented)return;n(t)}};function gi(e,t,n,r){if(!r)return t?{href:e,external:!0}:{href:n.createHref(e)||`/`,external:!1}}function _i(e){if(typeof e!=`string`)return!1;let t=e.charCodeAt(0);return t===47?e.charCodeAt(1)!==47:t===46}var vi=R.forwardRef((e,t)=>{let{_asChild:n,...r}=e,{type:i,...a}=si(r,t),o=typeof r.children==`function`?r.children({isActive:a[`data-status`]===`active`}):r.children;if(!n){let{disabled:e,...t}=a;return R.createElement(`a`,t,o)}return R.createElement(n,a,o)});function yi(e){return!!(e.metaKey||e.altKey||e.ctrlKey||e.shiftKey)}var bi=class extends mr{constructor(e){super(e),this.useMatch=e=>Qr({select:e?.select,from:this.id,structuralSharing:e?.structuralSharing}),this.useRouteContext=e=>ai({...e,from:this.id}),this.useSearch=e=>ni({select:e?.select,structuralSharing:e?.structuralSharing,from:this.id}),this.useParams=e=>ti({select:e?.select,structuralSharing:e?.structuralSharing,from:this.id}),this.useLoaderDeps=e=>ei({...e,from:this.id}),this.useLoaderData=e=>$r({...e,from:this.id}),this.useNavigate=()=>ri({from:this.fullPath}),this.Link=R.forwardRef((e,t)=>(0,z.jsx)(vi,{ref:t,from:this.fullPath,...e}))}};function xi(e){return new bi(e)}var Si=class extends hr{constructor(e){super(e),this.useMatch=e=>Qr({select:e?.select,from:this.id,structuralSharing:e?.structuralSharing}),this.useRouteContext=e=>ai({...e,from:this.id}),this.useSearch=e=>ni({select:e?.select,structuralSharing:e?.structuralSharing,from:this.id}),this.useParams=e=>ti({select:e?.select,structuralSharing:e?.structuralSharing,from:this.id}),this.useLoaderDeps=e=>ei({...e,from:this.id}),this.useLoaderData=e=>$r({...e,from:this.id}),this.useNavigate=()=>ri({from:this.fullPath}),this.Link=R.forwardRef((e,t)=>(0,z.jsx)(vi,{ref:t,from:this.fullPath,...e}))}};function Ci(e){return new Si(e)}function wi(e){let t=Cr(),n=`not-found-${Xr(t.stores.location,e=>e.pathname)}-${Xr(t.stores.status,e=>e)}`;return(0,z.jsx)(gr,{getResetKey:()=>n,onCatch:(t,n)=>{if(Gt(t))e.onCatch?.(t,n);else throw t},errorComponent:({error:t})=>{if(Gt(t))return e.fallback?.(t);throw t},children:e.children})}function Ti(){return(0,z.jsx)(`p`,{children:`Not Found`})}function Ei(e){return(0,z.jsx)(z.Fragment,{children:e.children})}function Di(e,t,n){return t.options.notFoundComponent?(0,z.jsx)(t.options.notFoundComponent,{...n}):e.options.defaultNotFoundComponent?(0,z.jsx)(e.options.defaultNotFoundComponent,{...n}):(0,z.jsx)(Ti,{})}var Oi=R.memo(function({matchId:e}){let t=Cr(),n=t.stores.matchStores.get(e);n||st();let r=Xr(t.stores.loadedAt,e=>e),i=Xr(n,e=>e);return(0,z.jsx)(ki,{router:t,matchId:e,resetKey:r,matchState:R.useMemo(()=>{let e=i.routeId,n=t.routesById[e].parentRoute?.id;return{routeId:e,ssr:i.ssr,_displayPending:i._displayPending,parentRouteId:n}},[i._displayPending,i.routeId,i.ssr,t.routesById])})});function ki({router:e,matchId:t,resetKey:n,matchState:r}){let i=e.routesById[r.routeId],a=i.options.pendingComponent??e.options.defaultPendingComponent,o=a?(0,z.jsx)(a,{}):null,s=i.options.errorComponent??e.options.defaultErrorComponent,c=i.options.onCatch??e.options.defaultOnCatch,l=i.isRoot?i.options.notFoundComponent??e.options.notFoundRoute?.options.component:i.options.notFoundComponent,u=r.ssr===!1||r.ssr===`data-only`,d=(!i.isRoot||i.options.wrapInSuspense||u)&&(i.options.wrapInSuspense??a??(i.options.errorComponent?.preload||u))?R.Suspense:Ei,f=s?gr:Ei,p=l?wi:Ei;return(0,z.jsxs)(i.isRoot?i.options.shellComponent??Ei:Ei,{children:[(0,z.jsx)(wr.Provider,{value:t,children:(0,z.jsx)(d,{fallback:o,children:(0,z.jsx)(f,{getResetKey:()=>n,errorComponent:s||vr,onCatch:(e,t)=>{if(Gt(e))throw e.routeId??=r.routeId,e;c?.(e,t)},children:(0,z.jsx)(p,{fallback:e=>{if(e.routeId??=r.routeId,!l||e.routeId&&e.routeId!==r.routeId||!e.routeId&&!i.isRoot)throw e;return R.createElement(l,e)},children:u||r._displayPending?(0,z.jsx)(yr,{fallback:o,children:(0,z.jsx)(ji,{matchId:t})}):(0,z.jsx)(ji,{matchId:t})})})})}),r.parentRouteId===`__root__`?(0,z.jsxs)(z.Fragment,{children:[(0,z.jsx)(Ai,{resetKey:n}),(e.options.scrollRestoration,null)]}):null]})}function Ai({resetKey:e}){let t=Cr(),n=R.useRef(void 0);return Ie(()=>{let e=t.latestLocation.href;(n.current===void 0||n.current!==e)&&(t.emit({type:`onRendered`,...Vn(t.stores.location.get(),t.stores.resolvedLocation.get())}),n.current=e)},[t.latestLocation.state.__TSR_key,e,t]),null}var ji=R.memo(function({matchId:e}){let t=Cr(),n=(e,n)=>t.getMatch(e.id)?._nonReactive[n]??e._nonReactive[n],r=t.stores.matchStores.get(e);r||st();let i=Xr(r,e=>e),a=i.routeId,o=t.routesById[a],s=R.useMemo(()=>{let e=(t.routesById[a].options.remountDeps??t.options.defaultRemountDeps)?.({routeId:a,loaderDeps:i.loaderDeps,params:i._strictParams,search:i._strictSearch});return e?JSON.stringify(e):void 0},[a,i.loaderDeps,i._strictParams,i._strictSearch,t.options.defaultRemountDeps,t.routesById]),c=R.useMemo(()=>{let e=o.options.component??t.options.defaultComponent;return e?(0,z.jsx)(e,{},s):(0,z.jsx)(Mi,{})},[s,o.options.component,t.options.defaultComponent]);if(i._displayPending)throw n(i,`displayPendingPromise`);if(i._forcePending)throw n(i,`minPendingPromise`);if(i.status===`pending`){let e=o.options.pendingMinMs??t.options.defaultPendingMinMs;if(e){let n=t.getMatch(i.id);if(n&&!n._nonReactive.minPendingPromise){let t=Qe();n._nonReactive.minPendingPromise=t,setTimeout(()=>{t.resolve(),n._nonReactive.minPendingPromise=void 0},e)}}throw n(i,`loadPromise`)}if(i.status===`notFound`)return Gt(i.error)||st(),Di(t,o,i.error);if(i.status===`redirected`)throw tn(i.error)||st(),n(i,`loadPromise`);if(i.status===`error`)throw i.error;return c}),Mi=R.memo(function(){let e=Cr(),t=R.useContext(wr),n,r=!1,i;{let a=t?e.stores.matchStores.get(t):void 0;[n,r]=Xr(a,e=>[e?.routeId,e?.globalNotFound??!1]),i=Xr(e.stores.matchesId,e=>e[e.findIndex(e=>e===t)+1])}let a=n?e.routesById[n]:void 0,o=e.options.defaultPendingComponent?(0,z.jsx)(e.options.defaultPendingComponent,{}):null;if(r)return a||st(),Di(e,a,void 0);if(!i)return null;let s=(0,z.jsx)(Oi,{matchId:i});return n===`__root__`?(0,z.jsx)(R.Suspense,{fallback:o,children:s}):s});function Ni(){let e=Cr(),t=R.useRef({router:e,mounted:!1}),[n,r]=R.useState(!1),i=Xr(e.stores.isLoading,e=>e),a=Xr(e.stores.hasPending,e=>e),o=Le(i),s=i||n||a,c=Le(s),l=i||a,u=Le(l);return e.startTransition=e=>{r(!0),R.startTransition(()=>{e(),r(!1)})},R.useEffect(()=>{let t=e.history.subscribe(e.load),n=e.buildLocation({to:e.latestLocation.pathname,search:!0,params:!0,hash:!0,state:!0,_includeValidateSearch:!0});return It(e.latestLocation.publicHref)!==It(n.publicHref)&&e.commitLocation({...n,replace:!0}),()=>{t()}},[e,e.history]),Ie(()=>{typeof window<`u`&&e.ssr||t.current.router===e&&t.current.mounted||(t.current={router:e,mounted:!0},(async()=>{try{await e.load()}catch(e){console.error(e)}})())},[e]),Ie(()=>{o&&!i&&e.emit({type:`onLoad`,...Vn(e.stores.location.get(),e.stores.resolvedLocation.get())})},[o,e,i]),Ie(()=>{u&&!l&&e.emit({type:`onBeforeRouteMount`,...Vn(e.stores.location.get(),e.stores.resolvedLocation.get())})},[l,u,e]),Ie(()=>{if(c&&!s){let t=Vn(e.stores.location.get(),e.stores.resolvedLocation.get());e.emit({type:`onResolved`,...t}),Br(()=>{e.stores.status.set(`idle`),e.stores.resolvedLocation.set(e.stores.location.get())})}},[s,c,e]),null}function Pi(){let e=Cr(),t=e.routesById.__root__.options.pendingComponent??e.options.defaultPendingComponent,n=t?(0,z.jsx)(t,{}):null,r=(0,z.jsxs)(typeof document<`u`&&e.ssr?Ei:R.Suspense,{fallback:n,children:[(0,z.jsx)(Ni,{}),(0,z.jsx)(Fi,{})]});return e.options.InnerWrap?(0,z.jsx)(e.options.InnerWrap,{children:r}):r}function Fi(){let e=Cr(),t=Xr(e.stores.firstId,e=>e),n=Xr(e.stores.loadedAt,e=>e),r=t?(0,z.jsx)(Oi,{matchId:t}):null;return(0,z.jsx)(wr.Provider,{value:t,children:e.options.disableGlobalCatchBoundary?r:(0,z.jsx)(gr,{getResetKey:()=>n,errorComponent:vr,onCatch:void 0,children:r})})}var Ii=e=>({createMutableStore:Ur,createReadonlyStore:Ur,batch:Br}),Li=e=>new Ri(e),Ri=class extends Un{constructor(e){super(e,Ii)}};function zi({router:e,children:t,...n}){We(n)&&e.update({...e.options,...n,context:{...e.options.context,...n.context}});let r=(0,z.jsx)(Sr.Provider,{value:e,children:t});return e.options.Wrap?(0,z.jsx)(e.options.Wrap,{children:r}):r}function Bi({router:e,...t}){return(0,z.jsx)(zi,{router:e,...t,children:(0,z.jsx)(Pi,{})})}var Vi=g(),Hi=(0,R.createContext)(null),Ui=`loopx-pw-locale`,Wi={en:{"acceptance.connected":`Connected`,"acceptance.mapped":`Project mapped`,"acceptance.refreshed":`State refreshed`,"acceptance.inspected":`Adapter inspected`,"acceptance.recorded":`Run recorded`,"acceptance.judged":`Feedback recorded`,"acceptance.approved":`Approval recorded`,"acceptance.ready":`Controller readiness recorded`,"acceptance.attentionSource":`Current status`,"acceptance.visionSource":`Agent acceptance criteria`,"acceptance.todoSource":`Task state`,"acceptance.runSource":`Fresh run evidence`,"acceptance.title":`Acceptance observations`,"acceptance.unavailable":`Acceptance observations are unavailable. Goal completion is unknown.`,"acceptance.partial":`Partial observations only. Completed tasks and an empty gap list do not prove Goal acceptance.`,"acceptance.gaps":`Evidence still required`,"acceptance.reasonUnknown":`Reason not provided by the source`,"acceptance.unknown":`Unknown`,"acceptance.required":`Required evidence or condition`,"acceptance.observed":`Observed at`,"acceptance.noGaps":`No gaps in the available observations. Full acceptance has not been assessed.`,"acceptance.guards":`Pending gates`,"acceptance.noGuards":`No pending gates in the available observations.`,"acceptance.scope":`Decision scope`,"acceptance.next":`Next action from current status`,"acceptance.historical_progress":`Recorded progress`,"acceptance.historical":`Historical lifecycle observations do not grant permission or certify acceptance.`,"acceptance.missing":`Sources not available:`,"acceptance.truncated":`Only the first 12 observations are shown.`,"common.actions":`Actions`,"common.agent":`Agent`,"common.allMessages":`All messages`,"common.cancel":`Cancel`,"common.close":`Close`,"common.closeActionReceipt":`Close action receipt`,"common.confirm":`Confirm`,"common.export":`Export`,"common.failed":`Failed`,"common.goal":`Goal`,"common.loading":`Loading…`,"common.none":`None`,"common.off":`Off`,"common.on":`On`,"common.open":`Open`,"common.owner":`Owner`,"common.readOnly":`Read only`,"common.recently":`Just now`,"common.status":`Status`,"common.task":`Task`,"common.you":`You`,"common.waiting":`Waiting`,"composer.addImage":`Add image`,"composer.agentProgress":`Ask Agent for a progress report`,"composer.blockers":`Ask what blocks`,"composer.agentProgressPrompt":`Give me a progress report for this Goal: completed, running, blocked, and next steps.`,"composer.attachImageHint":`Choose, paste, or drag an image`,"composer.clarifyDefer":`Deferring a Todo requires a deterministic resume condition. Add todo_done:, pr_merged:[owner/repo]#, capacity_available:, or resume_at:.`,"composer.clarifySingleAction":`This message contains multiple operations that may change state. Describe one operation at a time so each confirmation preview can be reviewed separately.`,"composer.createGoal":`Create Goal`,"composer.createGoalDraft":`Goal draft`,"composer.createGoalDraftDescription":`Complete the draft and send it. LoopX will show a confirmation preview first.`,"composer.createGoalDraftLead":`Create a long-term Goal:`,"composer.createGoalTemplate":`Create a long-term Goal: +Objective: +Completion criteria: +Execution boundary (optional): +Related repository (optional): +Notification method (optional):`,"composer.createGoalHint":`Insert a Goal template to review before creation`,"composer.evidence":`Check what is proven`,"composer.globalProgress":`Summarize all Goal progress`,"composer.globalProgressPrompt":`Summarize the latest progress and blockers for all active Goals.`,"composer.globalTasks":`Ask about global priorities`,"composer.globalTasksPrompt":`Which Goals need me, and what should I handle first?`,"composer.goalMessageHint":`Your message is delivered to {agent} in this Goal session.`,"composer.goalRunningHint":`{count} conversations are running in this Goal · your message goes to the current {agent} conversation`,"composer.goalPlaceholder":`Ask or guide {goal}…`,"composer.imageAnalysisPrompt":`Analyze these images in the context of the current Goal and tell me the next step.`,"composer.imageCountError":`You can add up to {count} images.`,"composer.imagePicker":`Image file picker`,"composer.imageReadError":`Could not read image {name}.`,"composer.imageReadGenericError":`Could not read the image.`,"composer.imageSizeError":`Each image must be {size} MB or smaller.`,"composer.imageTypeError":`PNG, JPEG, WebP, and GIF images are supported.`,"composer.imagesPending":`Images to send`,"composer.managerMessageHint":`Your message goes to the LoopX Manager across Goals for global questions or Goal creation.`,"composer.managerPlaceholder":`Ask the LoopX Manager, or describe a new Goal…`,"composer.monitor":`Configure scheduled check`,"composer.monitorGoalQuestion":`Which Goal should receive the scheduled check?`,"composer.monitorTemplate":`Add a scheduled check for the current Goal: +Check target: +Frequency (supports 30 minutes / 2 hours / daily): Every 2 hours +Stop condition: Goal completes`,"composer.monitorShortcutTemplate":`Add a scheduled check for the current Goal: +Check target: {target} +Frequency: Every 2 hours +Stop condition: Goal completes`,"composer.monitorTemplateWithoutGoal":`Configure a scheduled check: +Goal: +Check target: +Frequency: Every 2 hours +Stop condition: Goal completes`,"composer.heartbeatGoalQuestion":`Which Goal should receive the Heartbeat?`,"composer.heartbeatTemplate":`Set a Heartbeat for the current Goal: +Frequency: Daily +Stop condition: Goal completes +Notification: Only notify me when needed`,"composer.heartbeatTemplateWithoutGoal":`Set up a Heartbeat: +Goal: +Frequency: Daily +Stop condition: Goal completes +Notification: Only notify me when needed`,"composer.nextAction":`Ask what’s next`,"composer.nextActionPrompt":`What should I do next?`,"composer.send":`Send`,"composer.sendMessage":`Send a message to LoopX`,"composer.sendMessageHint":`Send message`,"composer.sentImageAlt":`Remove image {name}`,"conversation.agentPending":`Working…`,"conversation.close":`Close conversation receipt`,"conversation.convertHint":`Turn the Agent’s latest reply into a Task draft`,"conversation.full":`View full conversation`,"conversation.receipt":`Conversation receipt`,"conversation.replying":`Replying`,"conversation.title":`Manager conversation`,"conversation.toTask":`Convert to Task`,"digest.away":`Runs since your previous visit`,"digest.completed":`new completions`,"digest.failed":`new failed/interrupted runs`,"digest.needsYou":`currently need confirmation`,"feedback.applying":`Running: {title}`,"feedback.cancelFailed":`Cancel failed: {error}`,"feedback.completed":`Completed: {title}`,"feedback.executionFailed":`Execution failed: {error}`,"feedback.gateRequired":`Your confirmation is required: {summary}`,"feedback.notCompleted":`Not completed: {status}`,"feedback.goalRefreshFailed":`The Goal opened, but its latest state could not be refreshed. Use Refresh to try again.`,"feedback.preparingPreview":`Preparing confirmation preview: {title}`,"feedback.previewFailed":`Could not prepare the confirmation preview: {error}`,"feedback.sendFailed":`Send failed: {error}`,"feedback.sendGenericError":`Could not send the message. Try again later.`,"feedback.stale":`State changed, so nothing was applied. Generate a new confirmation preview.`,"feedback.taskDraftCreated":`Created a Task draft from the reply. Edit and send it to review the confirmation preview.`,"goal.defaultTitle":`New personal Goal`,"goal.initialTodo":`Work toward the completion criteria: {criteria}`,"goal.objectiveBoundary":`Execution boundary: {boundary}`,"goal.objectiveCompletion":`Completion criteria: {criteria}`,"drawer.advancedDiagnostics":`Advanced diagnostics`,"drawer.agentWorking":`Agent is continuing; the record updates automatically.`,"drawer.analysis":`Analyzing`,"drawer.apply":`Confirm and apply`,"drawer.applying":`Applying…`,"drawer.attentionBlocking":`Blocking an Agent`,"drawer.attentionWaiting":`Waiting for your decision`,"drawer.autoNotify":`Human-gate auto notifications`,"drawer.branch":`Branch`,"drawer.closeDetail":`Close details and return to {context}`,"drawer.connected":`Connected`,"drawer.correctionDescription":`The message keeps the current Goal, Todo, and Agent Session context.`,"drawer.correctionLabel":`Guide {agent}`,"drawer.correctionPlaceholder":`For example: focus on permission risks first and do not commit yet…`,"drawer.correctionSend":`Send guidance`,"drawer.correctionTextarea":`Enter guidance for Goal {goal}, Agent {agent}, Run {run}`,"drawer.copyRepository":`Copy repository identity`,"drawer.copyRepositoryDone":`Repository identity copied`,"drawer.copyRepositoryError":`Copy failed. Check browser clipboard permission.`,"drawer.copyRepositorySuccess":`Copied. You can paste it into another tool.`,"drawer.cost":`Cost 24h / 7d`,"drawer.costShort":`Cost`,"drawer.durationShort":`Duration`,"drawer.period24h":`24h`,"drawer.period7d":`7d`,"drawer.tokens":`Tokens 24h / 7d`,"drawer.tokensShort":`tokens`,"drawer.usageNotMeasured":`Not measured`,"drawer.currentGoal":`Current Goal`,"attentionDetail.title":`Request details`,"attentionDetail.request":`What is requested`,"attentionDetail.decision":`Decision requested`,"attentionDetail.unknownRequest":`Not specified; review the source before deciding`,"attentionDetail.open":`Open in current projection`,"attentionDetail.closed":`Closed`,"attentionDetail.deferred":`Deferred`,"attentionDetail.superseded":`Replaced`,"attentionDetail.unknown":`Status not provided`,"attentionDetail.unavailable":`The source has not confirmed this item; refresh before acting`,"attentionDetail.unknownReason":`The source has not provided a reason.`,"attentionDetail.targetTodo":`Linked Todo to unblock`,"attentionDetail.targetAgent":`Agent named by the request`,"attentionDetail.scope":`Declared decision scope`,"attentionDetail.notProvided":`Not provided`,"attentionDetail.replacement":`Replacement Todo`,"attentionDetail.openReplacement":`Open replacement`,"attentionDetail.boundary":`Reading this detail does not resolve a gate or grant authority. Available decisions require a fresh preview.`,"drawer.decisionDefaultEvidence":`No additional public-safe evidence is attached. The next step will still show a Preview first.`,"drawer.decisionDefaultReason":`This decision affects the next step of the current Todo.`,"drawer.decisionDefer":`Decide later`,"drawer.decisionMore":`More decisions`,"drawer.decisionReject":`Reject`,"drawer.decisionReview":`Review impact and decide`,"drawer.dependencies":`Dependencies`,"drawer.detailsAndActions":`Details & actions`,"drawer.duration":`Duration 24h / 7d`,"drawer.evidence":`Evidence`,"drawer.executionHistory":`Execution history`,"drawer.executionRecord":`Run record`,"drawer.executionRecordAndResult":`Execution & result`,"drawer.explainDecision":`Explain this decision`,"drawer.gateApproveHint":`Run one command in the terminal to complete approval:`,"drawer.gateRejectHint":`Replace approve with reject at the end to decline. This notice disappears after the command runs.`,"drawer.gateRequiresHost":`Host confirmation required`,"drawer.gateRequiresHostDescription":`This page cannot approve this protected permission change. Nothing was written by your click.`,"drawer.goalAutoRun":`Automatic runs for this Goal`,"drawer.goalChanges":`Pending changes for this Goal`,"drawer.goalDetails":`Goal details`,"drawer.group":`Group`,"drawer.inspectorFull":`Switch to full screen`,"drawer.inspectorFullView":`Full-screen view`,"drawer.inspectorHalf":`Switch to half screen`,"drawer.inspectorHalfView":`Half-screen view`,"drawer.lastNotification":`Latest notification`,"drawer.larkConfigure":`Configure Lark connection`,"drawer.larkConnect":`Connect Lark App`,"drawer.larkConnection":`Lark connection`,"drawer.larkNotConfigured":`Not configured`,"drawer.larkNotConfiguredDescription":`After setup, LoopX sends a Feishu notification when this Goal needs your confirmation.`,"drawer.managerChanges":`Pending Manager changes`,"drawer.moreActions":`More actions`,"drawer.moreRunActions":`More run actions`,"drawer.nextTransition":`Next transition`,"drawer.noExecutionHistory":`No execution history yet.`,"drawer.noRun":`Execution Session has not started`,"drawer.noRunDescription":`Run records will appear here after an Agent starts execution.`,"drawer.notAssigned":`Unassigned`,"drawer.notLinked":`Not linked`,"drawer.notSet":`Not set`,"drawer.outputDetails":`Output details`,"drawer.outputRecorded":`This output is recorded on the current Goal.`,"drawer.outputSafePreview":`Public-safe output preview`,"drawer.outputRun":`Run`,"drawer.outputTodo":`Todo`,"drawer.outputs":`Outputs from this run`,"drawer.previewUnavailable":`No public-safe inline preview is available for this output.`,"drawer.priority":`Priority`,"drawer.progress":`Progress`,"drawer.proposalApplied":`Applied. LoopX state will refresh.`,"drawer.proposalApplyFailed":`Apply failed. No changes were written.`,"drawer.proposalApplyFailedHint":`Refresh the Goal state and regenerate. If it still fails, keep this page open and inspect advanced diagnostics.`,"drawer.proposalClose":`Close`,"drawer.proposalDefer":`Later`,"drawer.proposalDeferred":`Deferred. You can apply it later or regenerate it.`,"drawer.proposalEnterGoal":`Open new Goal`,"drawer.proposalExplainer":`After confirmation, LoopX applies this change and shows the write result. Closing or canceling changes nothing.`,"drawer.proposalRecheck":`Recheck against latest state`,"drawer.proposalRegenerate":`Retry with latest state`,"drawer.proposalRejected":`Rejected. This change will not be written.`,"drawer.proposalStale":`Source state changed. Recheck against the latest state.`,"drawer.proposalViewGoal":`View updated Goal`,"drawer.reassign":`Reassign to`,"drawer.reassignSummary":`Reassign: {task}`,"drawer.reason":`Reason`,"drawer.recoveryDescription":`Local history is preserved. Choose a recovery path.`,"drawer.recoveryFailed":`Upstream Session recovery failed`,"drawer.recoveryNewSession":`Start a new Session with context`,"drawer.recoveryRetry":`Retry recovery`,"drawer.repositoryRole":`Execution workspace`,"drawer.repository":`Repository`,"drawer.replyMode":`Reply mode`,"drawer.subagentApplied":`Applied and verified against the shared Goal state.`,"drawer.subagentAppliedRefreshFailed":`Applied and verified. The status view could not refresh; retry the page refresh later.`,"drawer.subagentApplying":`Applying and verifying shared-state readback…`,"drawer.subagentApplyFailed":`Could not apply the sub-agent setting.`,"drawer.subagentChildLimit":`Current limit`,"drawer.subagentConfirmDisable":`Confirm turning off sub-agent execution`,"drawer.subagentConfirmEnable":`Confirm turning on sub-agent execution`,"drawer.subagentCurrentBoundary":`Current task-domain restriction`,"drawer.subagentDescription":`Allows the runtime to create temporary child agents for independent tasks only after Todo, quota, capability, and write-scope gates pass. It does not force parallel work or grant durable authority.`,"drawer.subagentDisable":`Preview turning off sub-agent execution`,"drawer.subagentDisableSummary":`New child-agent execution will be disabled for this Goal. Existing Todo ownership and execution records stay unchanged.`,"drawer.subagentDomainInvalid":`The selected task-domain restriction is invalid.`,"drawer.subagentDomainTodoCount":`{count} matching open Todos`,"drawer.subagentDomains":`Task-domain restriction (optional)`,"drawer.subagentDomainsEmpty":`No open advancement Todo declares task_domain. Leave this empty to keep child execution unrestricted by task domain.`,"drawer.subagentDomainsHint":`Leave every option clear to apply no task-domain filter. Selecting domains admits only matching typed Todos; all other execution gates still apply.`,"drawer.subagentDomainsUnrestricted":`No task-domain restriction`,"drawer.subagentEnable":`Preview turning on sub-agent execution`,"drawer.subagentLabel":`Per-Goal execution boundary`,"drawer.subagentModel":`Child model`,"drawer.subagentEffort":`Child reasoning effort`,"drawer.subagentModelDefault":`Host default`,"drawer.subagentLunaPreset":`Use Luna / max`,"drawer.subagentClearModel":`Clear model preference`,"drawer.subagentModelHint":`Use Preview configuration update to save this preference. It can be saved while execution is off; host support is checked at launch.`,"drawer.subagentModelRequired":`Choose a child model before setting reasoning effort.`,"drawer.subagentMaxChildren":`Maximum child agents`,"drawer.subagentNoChange":`The current Goal already matches this setting; nothing was written.`,"drawer.subagentPending":`Pending confirmation`,"drawer.subagentPreviewBoundary":`Preview configuration update`,"drawer.subagentPreviewFailed":`Could not create the sub-agent setting preview.`,"drawer.subagentPreviewing":`Checking the latest Goal state…`,"drawer.subagentPreviewReady":`Preview locked. Confirm to apply this Goal setting.`,"drawer.subagentPreviewSummary":`Allow up to {count} child agents. Task-domain restriction: {domains}.`,"drawer.subagentRemoteReadOnly":`This source is read only. Open the Goal on its host to change the setting.`,"drawer.subagentTitle":`Adaptive sub-agent execution`,"drawer.remoteDetailsDescription":`SSH sources expose public-safe status only and do not read connection settings from the source host.`,"drawer.remoteDetailsUnavailable":`Remote details are not projected`,"drawer.resumeNo":`No`,"drawer.resumeYes":`Yes`,"drawer.runDetails":`Execution Session`,"drawer.runInterrupt":`Interrupt this run`,"drawer.runLatest":`View latest execution`,"drawer.runNewSession":`Start new Session`,"drawer.runCloseSession":`Close Session`,"drawer.runRecordEmpty":`No run record yet. The Agent has not started this execution. Check waiting conditions or resume the Session under Details & actions.`,"drawer.runRecordProjected":`No step-by-step record is available. LoopX read {completed}/{total} projected steps{outputs}; inspect the Session under Details & actions.`,"drawer.runRecordProjectedOutputs":` and {count} outputs`,"drawer.runRoleAssistant":`Completed`,"drawer.runRoleSystem":`Needs review`,"drawer.runRoleUser":`Task received`,"drawer.runView":`Session views`,"drawer.scheduleAdd":`Add scheduled check`,"drawer.scheduleDefaultNotification":`Notify only when you are needed`,"drawer.scheduleDefaultStop":`Goal completes or owner stops it`,"drawer.scheduleDefaultTarget":`Wake according to this Goal’s LoopX schedule.`,"drawer.scheduleEdit":`Change to every 2 hours`,"drawer.scheduleLast":`Last run`,"drawer.scheduleLocalTimezone":`Local timezone`,"drawer.scheduleNext":`Next run`,"drawer.scheduleNeverRun":`Not run yet`,"drawer.scheduleNotification":`Notification`,"drawer.schedulePause":`Pause`,"drawer.schedulePending":`Waiting for schedule`,"drawer.scheduleResume":`Resume`,"drawer.scheduleRunNow":`Run now`,"drawer.scheduleStop":`Stop {kind}`,"drawer.scheduleStopCondition":`Stop condition`,"drawer.scheduleTimezone":`Timezone`,"drawer.sessionRecoverable":`Resumable`,"drawer.sessionStatus":`Session status`,"drawer.setupHeartbeat":`Set up Heartbeat`,"drawer.taskActions":`Pending Todo actions`,"drawer.taskAdvancement":`Advancement task`,"drawer.taskBlock":`Mark blocked`,"drawer.taskComplete":`Mark complete`,"drawer.taskCompletedNote":`This task is retained as a read-only record.`,"drawer.taskCompletedTitle":`Task completed`,"drawer.taskDefer":`Defer`,"drawer.taskDeferCondition":`Todo defer resume condition`,"drawer.taskDeferInvalid":`Unsupported condition format; use one of the deterministic conditions below.`,"drawer.taskDeferPlaceholder":`For example, resume_at:2026-09-14T09:00:00+08:00`,"drawer.taskDeferReview":`Review defer`,"drawer.taskDeferSupported":`Supports todo_done, pr_merged, capacity_available, and timezone-aware resume_at conditions.`,"drawer.taskDeferUntil":`Defer until`,"drawer.taskDetails":`Todo details`,"drawer.taskInfo":`Task information`,"drawer.taskManage":`Manage task`,"drawer.taskNextCompleted":`Create a follow-up task`,"drawer.taskNextOpen":`Advance or update status`,"drawer.taskOrdinary":`Task`,"drawer.taskStatusBlocked":`Blocked`,"drawer.taskStatusDeferred":`Deferred`,"drawer.resumeWhen":`Resume condition`,"drawer.resumeState":`Resume state`,"drawer.resumePending":`Waiting for condition`,"drawer.resumeReady":`Ready to resume`,"drawer.resumeReceipt":`Resume receipt`,"drawer.taskNextDeferred":`Wait for the resume condition, then reassess`,"drawer.taskNextResumeReady":`Resume condition met; awaiting lifecycle replan`,"drawer.taskStatusCompleted":`Completed`,"drawer.taskStatusOpen":`Ready`,"drawer.taskSuccessor":`Create follow-up Todo`,"drawer.taskSuccessorNote":`Owner marked this blocked while waiting for more context.`,"drawer.taskSuccessorSummary":`Create follow-up Todo: {task}`,"drawer.taskSuccessorText":`Follow-up work for {task}`,"drawer.taskType":`Task type`,"drawer.topic":`Topic`,"drawer.trigger":`Trigger`,"drawer.titleAttention":`Needs you`,"drawer.titleOutput":`Output details`,"drawer.titleProposalApplied":`Execution result`,"drawer.titleProposalConfirm":`Confirm execution`,"drawer.titleSchedule":`Scheduled check`,"drawer.unconfigured":`Not configured`,"drawer.workspaceCandidates":`Available workspaces`,"files.emptySummary":`Public-safe output`,"files.empty":`No files, outputs, or verified reports yet.`,"files.loadingReports":`Loading verified milestone reports…`,"files.reportDelta":`+{added} added · {changed} changed`,"files.reportAdded":`added`,"files.reportChanged":`changed`,"files.reportGeneration":`Generation`,"files.reportLoadFailed":`Could not load verified reports`,"files.reportPublication":`Publication`,"files.title":`Files & Outputs`,"files.verifiedReport":`Verified milestone report`,"header.agentUnavailable":`Unavailable`,"header.chatRuntime":`Chat`,"header.workAgentCount":`{count} work Agents`,"header.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.managerEndpointStewardDefault":`Runs {executor}, the steward channel's shipped default. Select an executor explicitly to move it.`,"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.default":`After confirmation, the canonical LoopX service will write the state change.`,"proposal.impact.goalCreate":`After confirmation, LoopX will create the Goal and its initial Todo, then let the selected Agent start the first run.`,"proposal.impact.lifecycleDelete":`After confirmation, this stopped Goal is removed from the source and global registries. Project files, history state, and backups are preserved.`,"proposal.impact.lifecycleResume":`After confirmation, the Goal becomes eligible for automatic scheduling and returns to Active Goals. Actual execution still follows quota, Gate, and Todo constraints.`,"proposal.impact.lifecycleStop":`After confirmation, automatic progress stops and the Goal moves to the collapsed Stopped list. History, Todos, and evidence remain available for resuming.`,"proposal.impact.protected":`This action must be completed through the protected LoopX write service.`,"proposal.impact.operation":`The exact terms are read-only here. Confirm or reject the same immutable request in the bound Feishu group; confirmation consumes one canonical claim.`,"proposal.primary.apply":`Confirm and apply`,"proposal.primary.goalCreate":`Create Goal and start first run`,"proposal.primary.lifecycleDelete":`Delete Goal`,"proposal.primary.lifecycleResume":`Resume Goal`,"proposal.primary.lifecycleStop":`Stop Goal`,"proposal.primary.todoStart":`Create task and start execution`,"proposal.primary.operationGroup":`Confirm in Feishu group`,"proposal.primary.operationResultPending":`Result card delivery pending`,"proposal.primary.operationResultVerified":`Verified result`,"proposal.resultDelivery.verified":`Verified in the original group card`,"proposal.resultDelivery.pending":`Pending verified return to the original group card`,"proposal.summary.goalCreate":`Create Goal: {title}`,"proposal.summary.heartbeat":`Set a Heartbeat for the current Goal`,"proposal.summary.lifecycleDelete":`Delete Goal: {title}`,"proposal.summary.lifecycleResume":`Resume Goal: {title}`,"proposal.summary.lifecycleStop":`Stop Goal: {title}`,"proposal.summary.monitor":`Create a scheduled check for the current Goal: {target}`,"proposal.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.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":`Convert to Task`,"tasks.completed":`Completed`,"runs.discoveryPartial":`Some execution details are unavailable. Reconnecting; task summaries are not live execution status.`,"runs.discoveryOffline":`Execution service unavailable. Reconnecting; retained task summaries may be stale.`,"files.openConversation":`Go to conversation`,"files.exportSummary":`Export summary`,"tasks.viewDescription":`Decisions first, then work and recent completions`,"tasks.viewLabel":`Task view`,"tasks.listView":`List`,"tasks.boardView":`Board`,"tasks.completedSummary":`{count} tasks completed. Recent details are projected by the control plane when needed.`,"tasks.emptyCompleted":`No completed tasks yet.`,"tasks.emptyConfirm":`No tasks waiting for confirmation.`,"tasks.emptyRunning":`No queued or running tasks.`,"tasks.emptySchedules":`No scheduled tasks.`,"tasks.emptyGoal":`This Goal has no tasks yet. Describe the next step below and LoopX will show a confirmation preview first.`,"tasks.markComplete":`Mark complete: {name}`,"tasks.moreActions":`More actions: {name}`,"tasks.openExecution":`View execution: {name}`,"tasks.pending":`Pending`,"tasks.pendingAndRunning":`Queued / Running`,"tasks.scheduled":`Scheduled & continuous`,"tasks.sessionError":`Session issue`,"tasks.waiting":`Queued`,"tasks.waitingAge":`Waiting {age}`,"tasks.viewExecution":`View execution`,"tasks.viewResult":`View result`,"time.days":`{count} days`,"time.hours":`{count} hours`,"timeline.emptyGoal":`This Goal has no new activity`,"timeline.emptyGoalDescription":`Ask for progress or send new guidance.`,"timeline.emptyWorkspace":`Your workspace is quiet today`,"timeline.emptyWorkspaceDescription":`Describe a Goal to the LoopX Manager, or ask what deserves attention today.`,"timeline.gateHistory":`{count} historical Gates`,"timeline.pending":`Working…`,"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: +目标: +完成标准: +执行边界(可选): +关联仓库(可选): +通知方式(可选):`,"composer.createGoalHint":`填入 Goal 模板草稿,检查后再创建`,"composer.globalProgress":`汇总所有 Goal 进展`,"composer.globalProgressPrompt":`请帮我汇总所有活跃 Goal 的最新进展与阻塞。`,"composer.globalTasks":`询问全局待办`,"composer.globalTasksPrompt":`有哪些 Goal 正在等我?我现在该优先处理什么?`,"composer.goalMessageHint":`你的消息由 {agent} 在本 Goal 的会话中接收`,"composer.goalRunningHint":`本项目有 {count} 段会话正在运行 · 消息发往当前 {agent} 对话`,"composer.goalPlaceholder":`询问或纠偏 {goal}…`,"composer.imageAnalysisPrompt":`请结合这些图片分析当前 Goal,并告诉我下一步。`,"composer.imageCountError":`最多添加 {count} 张图片。`,"composer.imagePicker":`图片文件选择器`,"composer.imageReadError":`无法读取图片 {name}`,"composer.imageReadGenericError":`图片读取失败。`,"composer.imageSizeError":`单张图片不能超过 {size}MB。`,"composer.imageTypeError":`支持 PNG、JPEG、WebP 和 GIF 图片。`,"composer.imagesPending":`待发送图片`,"composer.managerMessageHint":`你的消息由 LoopX 管家跨 Goal 接收,支持全局询问与创建 Goal`,"composer.managerPlaceholder":`问问 LoopX 管家,或描述一个新 Goal…`,"composer.monitor":`配置定时检查`,"composer.monitorGoalQuestion":`为哪个 Goal 添加定时检查?`,"composer.monitorTemplate":`为当前 Goal 添加定时检查: +检查内容: +频率(支持 30 分钟 / 2 小时 / 每天):每 2 小时 +停止条件:Goal 完成`,"composer.monitorShortcutTemplate":`为当前 Goal 添加定时检查: +检查内容:{target} +频率:每 2 小时 +停止条件:Goal 完成`,"composer.monitorTemplateWithoutGoal":`配置定时检查: +Goal: +检查内容: +频率:每 2 小时 +停止条件:Goal 完成`,"composer.heartbeatGoalQuestion":`为哪个 Goal 设置 Heartbeat?`,"composer.heartbeatTemplate":`为当前 Goal 设置 Heartbeat: +频率:每天 +停止条件:Goal 完成 +通知:仅在需要我时`,"composer.heartbeatTemplateWithoutGoal":`设置 Heartbeat: +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.subagentAppliedRefreshFailed":`已写入并通过共享 Goal 状态读回;状态投影刷新失败,可稍后手动刷新。`,"drawer.subagentApplying":`正在写入并校验共享状态读回…`,"drawer.subagentApplyFailed":`子代理设置写入失败。`,"drawer.subagentChildLimit":`当前上限`,"drawer.subagentConfirmDisable":`确认关闭子代理执行`,"drawer.subagentConfirmEnable":`确认开启子代理执行`,"drawer.subagentCurrentBoundary":`当前任务领域限制`,"drawer.subagentDescription":`仅在 Todo、配额、能力和写入范围门禁全部通过后,允许运行时为相互独立的任务临时创建子代理;不会强制并行,也不会授予持久权限。`,"drawer.subagentDisable":`预览关闭子代理执行`,"drawer.subagentDisableSummary":`这个 Goal 将不再创建新的子代理;现有 Todo 归属和执行记录不受影响。`,"drawer.subagentDomainInvalid":`所选任务领域限制无效。`,"drawer.subagentDomainTodoCount":`匹配 {count} 个开放 Todo`,"drawer.subagentDomains":`任务领域限制(可选)`,"drawer.subagentDomainsEmpty":`当前没有开放的 advancement Todo 声明 task_domain;保持为空即可不按任务领域限制子代理执行。`,"drawer.subagentDomainsHint":`全部不选表示不按任务领域过滤;选择后只放行匹配且已声明领域的 Todo,其他执行门禁始终生效。`,"drawer.subagentDomainsUnrestricted":`不限制任务领域`,"drawer.subagentEnable":`预览开启子代理执行`,"drawer.subagentLabel":`Per-Goal 执行边界`,"drawer.subagentModel":`子 Agent 模型`,"drawer.subagentEffort":`子 Agent 推理档位`,"drawer.subagentModelDefault":`宿主默认`,"drawer.subagentLunaPreset":`使用 Luna / max`,"drawer.subagentClearModel":`清除模型偏好`,"drawer.subagentModelHint":`填写后通过“预览配置调整”保存,执行关闭时也可保存偏好;启动时须核验宿主支持情况。`,"drawer.subagentModelRequired":`设置推理档位前请先指定子 Agent 模型。`,"drawer.subagentMaxChildren":`最多子代理数`,"drawer.subagentNoChange":`当前 Goal 已是这个设置,没有写入任何内容。`,"drawer.subagentPending":`待确认`,"drawer.subagentPreviewBoundary":`预览配置调整`,"drawer.subagentPreviewFailed":`无法生成子代理设置预览。`,"drawer.subagentPreviewing":`正在核对最新 Goal 状态…`,"drawer.subagentPreviewReady":`预览已锁定,确认后才会写入这个 Goal。`,"drawer.subagentPreviewSummary":`最多允许创建 {count} 个子代理;任务领域限制:{domains}。`,"drawer.subagentRemoteReadOnly":`当前来源只读,请在 Goal 所在主机上修改。`,"drawer.subagentTitle":`自适应子代理执行`,"drawer.remoteDetailsDescription":`SSH 来源只展示公开安全状态,不读取来源主机上的连接配置。`,"drawer.remoteDetailsUnavailable":`远端详情未投影`,"drawer.resumeNo":`否`,"drawer.resumeYes":`是`,"drawer.runDetails":`执行 Session`,"drawer.runInterrupt":`中断本次运行`,"drawer.runLatest":`查看最近执行过程`,"drawer.runNewSession":`开始新 Session`,"drawer.runCloseSession":`关闭 Session`,"drawer.runRecordEmpty":`还没有运行记录。Agent 尚未开始这次执行;请在“详情与操作”查看等待条件或恢复 Session。`,"drawer.runRecordProjected":`当前没有可展示的逐步运行记录。LoopX 已读取到 {completed}/{total} 的投影进度{outputs};请在“详情与操作”检查 Session 状态。`,"drawer.runRecordProjectedOutputs":`和 {count} 项产出`,"drawer.runRoleAssistant":`已完成`,"drawer.runRoleSystem":`需检查`,"drawer.runRoleUser":`收到任务`,"drawer.runView":`Session 视图`,"drawer.scheduleAdd":`添加定时检查`,"drawer.scheduleDefaultNotification":`仅在需要你时通知`,"drawer.scheduleDefaultStop":`Goal 完成或 owner 停止`,"drawer.scheduleDefaultTarget":`由 LoopX 调度器按 Goal 配置唤醒。`,"drawer.scheduleEdit":`改为每 2 小时`,"drawer.scheduleLast":`上次执行`,"drawer.scheduleLocalTimezone":`本地时区`,"drawer.scheduleNext":`下次执行`,"drawer.scheduleNeverRun":`尚未执行`,"drawer.scheduleNotification":`通知`,"drawer.schedulePause":`暂停`,"drawer.schedulePending":`等待调度`,"drawer.scheduleResume":`恢复`,"drawer.scheduleRunNow":`立即运行`,"drawer.scheduleStop":`停止{kind}`,"drawer.scheduleStopCondition":`停止条件`,"drawer.scheduleTimezone":`时区`,"drawer.sessionRecoverable":`可恢复`,"drawer.sessionStatus":`会话状态`,"drawer.setupHeartbeat":`设置 Heartbeat`,"drawer.taskActions":`Todo 待确认操作`,"drawer.taskAdvancement":`推进任务`,"drawer.taskBlock":`标记阻塞`,"drawer.taskComplete":`标记完成`,"drawer.taskCompletedNote":`该任务保留为只读记录。`,"drawer.taskCompletedTitle":`任务已完成`,"drawer.taskDefer":`暂缓`,"drawer.taskDeferCondition":`Todo 暂缓恢复条件`,"drawer.taskDeferInvalid":`条件格式不受支持;请使用下列可判定条件。`,"drawer.taskDeferPlaceholder":`例如 resume_at:2026-09-14T09:00:00+08:00`,"drawer.taskDeferReview":`检查暂缓`,"drawer.taskDeferSupported":`支持 todo_done、pr_merged、capacity_available 与带时区的 resume_at 条件。`,"drawer.taskDeferUntil":`暂缓至`,"drawer.taskDetails":`Todo 详情`,"drawer.taskInfo":`任务信息`,"drawer.taskManage":`管理任务`,"drawer.taskNextCompleted":`可创建后续任务`,"drawer.taskNextOpen":`推进或更新状态`,"drawer.taskOrdinary":`普通任务`,"drawer.taskStatusBlocked":`受阻`,"drawer.taskStatusDeferred":`已延期`,"drawer.resumeWhen":`恢复条件`,"drawer.resumeState":`恢复状态`,"drawer.resumePending":`等待条件满足`,"drawer.resumeReady":`可恢复`,"drawer.resumeReceipt":`恢复回执`,"drawer.taskNextDeferred":`等待恢复条件满足后重新评估`,"drawer.taskNextResumeReady":`恢复条件已满足,等待生命周期重新规划`,"drawer.taskStatusCompleted":`已完成`,"drawer.taskStatusOpen":`待执行`,"drawer.taskSuccessor":`创建后续 Todo`,"drawer.taskSuccessorNote":`Owner 标记为阻塞,等待补充上下文。`,"drawer.taskSuccessorSummary":`创建后续 Todo:{task}`,"drawer.taskSuccessorText":`{task} 的后续工作`,"drawer.taskType":`任务类型`,"drawer.topic":`Topic`,"drawer.trigger":`触发方式`,"drawer.titleAttention":`需要你`,"drawer.titleOutput":`产出详情`,"drawer.titleProposalApplied":`执行结果`,"drawer.titleProposalConfirm":`确认执行`,"drawer.titleSchedule":`定时检查`,"drawer.unconfigured":`未配置`,"drawer.workspaceCandidates":`可选择的工作区`,"files.emptySummary":`公开安全产出`,"files.empty":`还没有文件、产出或已验证的阶段周报。`,"files.loadingReports":`正在加载已验证的阶段周报…`,"files.reportDelta":`+{added} 新增 · {changed} 变化`,"files.reportAdded":`新增`,"files.reportChanged":`变化`,"files.reportGeneration":`生成批次`,"files.reportLoadFailed":`无法加载已验证周报`,"files.reportPublication":`发布批次`,"files.title":`Files & Outputs`,"files.verifiedReport":`已验证阶段周报`,"header.agentUnavailable":`不可用`,"header.chatRuntime":`Chat`,"header.workAgentCount":`{count} 个工作 Agent`,"header.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.managerEndpointStewardDefault":`当前运行 {executor},管家通道的出货默认值;如需改指请显式选择执行器。`,"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.default":`确认后会调用规范 LoopX 服务写入状态。`,"proposal.impact.goalCreate":`确认后会创建 Goal 和首个 Todo,并让选定 Agent 开始首轮推进。`,"proposal.impact.lifecycleDelete":`确认后会从 source registry 和 global registry 移除这个已停止 Goal;项目文件、历史状态文件和备份不会被删除。`,"proposal.impact.lifecycleResume":`确认后会恢复 Goal 的自动调度资格并移回 Active Goals;实际执行仍受 quota、Gate 和 Todo 约束。`,"proposal.impact.lifecycleStop":`确认后会停止自动推进,并将 Goal 移入折叠的「已停止」列表;历史、Todo 和证据都会保留,可随时恢复。`,"proposal.impact.protected":`该操作需要通过受保护的 LoopX 写入服务完成。`,"proposal.impact.operation":`这里仅展示同一份不可变条款。请在已绑定的飞书群确认或拒绝;确认只会消费一个规范 claim。`,"proposal.primary.apply":`确认并应用`,"proposal.primary.goalCreate":`创建 Goal 并开始首轮`,"proposal.primary.lifecycleDelete":`删除 Goal`,"proposal.primary.lifecycleResume":`恢复 Goal`,"proposal.primary.lifecycleStop":`停止 Goal`,"proposal.primary.todoStart":`创建任务并开始执行`,"proposal.primary.operationGroup":`前往飞书群确认`,"proposal.primary.operationResultPending":`结果卡回传待恢复`,"proposal.primary.operationResultVerified":`结果已核验`,"proposal.resultDelivery.verified":`已在原群卡片完成回读核验`,"proposal.resultDelivery.pending":`等待回传并核验原群卡片`,"proposal.summary.goalCreate":`创建 Goal:{title}`,"proposal.summary.heartbeat":`为当前 Goal 设置 Heartbeat`,"proposal.summary.lifecycleDelete":`删除 Goal:{title}`,"proposal.summary.lifecycleResume":`恢复 Goal:{title}`,"proposal.summary.lifecycleStop":`停止 Goal:{title}`,"proposal.summary.monitor":`为当前 Goal 创建定时检查:{target}`,"proposal.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.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":`转为 Task`,"tasks.completed":`已完成`,"runs.discoveryPartial":`部分执行详情暂不可用,正在重连;任务摘要不代表实时执行状态。`,"runs.discoveryOffline":`执行服务暂不可用,正在重连;保留的任务摘要可能已过时。`,"files.openConversation":`前往会话`,"files.exportSummary":`导出摘要`,"tasks.viewDescription":`先处理待确认,再查看工作与完成记录`,"tasks.viewLabel":`任务视图`,"tasks.listView":`列表`,"tasks.boardView":`看板`,"tasks.completedSummary":`已完成 {count} 项,近期完成明细由控制面按需投影。`,"tasks.emptyCompleted":`还没有完成的任务。`,"tasks.emptyConfirm":`没有待确认的任务。`,"tasks.emptyRunning":`没有待执行或进行中的任务。`,"tasks.emptySchedules":`没有定时任务。`,"tasks.emptyGoal":`这个 Goal 还没有任务。用下面的输入框描述下一步,LoopX 会先展示待确认操作。`,"tasks.markComplete":`标记完成:{name}`,"tasks.moreActions":`更多操作:{name}`,"tasks.openExecution":`查看执行过程:{name}`,"tasks.pending":`待处理`,"tasks.pendingAndRunning":`待执行 / 进行中`,"tasks.scheduled":`定时与持续`,"tasks.sessionError":`Session 异常`,"tasks.waiting":`待执行`,"tasks.waitingAge":`已等待 {age}`,"tasks.viewExecution":`查看执行过程`,"tasks.viewResult":`查看结果`,"time.days":`{count} 天`,"time.hours":`{count} 小时`,"timeline.emptyGoal":`这个 Goal 还没有新动态`,"timeline.emptyGoalDescription":`你可以直接询问进度或下发新的纠偏信息。`,"timeline.emptyWorkspace":`今天的工作区很安静`,"timeline.emptyWorkspaceDescription":`向 LoopX 管家描述一个 Goal,或询问今天最值得关注的事情。`,"timeline.gateHistory":`{count} 项历史 Gate`,"timeline.pending":`正在整理…`,"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) { + if (${o} in input) { + payload.issues = payload.issues.concat(${n}.issues.map(iss => ({ + ...iss, + path: iss.path ? [${o}, ...iss.path] : [${o}] + }))); + } + } + + if (${n}.value === undefined) { + if (${o} in input) { + newResult[${o}] = undefined; + } + } else { + newResult[${o}] = ${n}.value; + } + + `):c?t.write(` + if (${n}.issues.length) { + payload.issues = payload.issues.concat(${n}.issues.map(iss => ({ + ...iss, + path: iss.path ? [${o}, ...iss.path] : [${o}] + }))); + } + + if (${n}.value === undefined) { + if (${o} in input) { + newResult[${o}] = undefined; + } + } else { + newResult[${o}] = ${n}.value; + } + + `):t.write(` + const ${n}_present = ${o} in input; + if (${n}.issues.length) { + payload.issues = payload.issues.concat(${n}.issues.map(iss => ({ + ...iss, + path: iss.path ? [${o}, ...iss.path] : [${o}] + }))); + } + if (!${n}_present && !${n}.issues.length) { + payload.issues.push({ + code: "invalid_type", + expected: "nonoptional", + input: undefined, + path: [${o}] + }); + } + + if (${n}_present) { + if (${n}.value === undefined) { + newResult[${o}] = undefined; + } else { + newResult[${o}] = ${n}.value; + } + } + + `)}t.write(`payload.value = newResult;`),t.write(`return payload;`);let s=t.compile();return(t,n)=>s(e,t,n)},a,o=ga,s=!ta.jitless,c=s&&_a.value,l=t.catchall,u;e._zod.parse=(d,f)=>{u??=r.value;let p=d.value;return o(p)?s&&c&&f?.async===!1&&f.jitless!==!0?(a||=i(t.shape),d=a(d,f),l?Vs([],p,d,f,u,e):d):n(d,f):(d.issues.push({expected:`object`,code:`invalid_type`,input:p,inst:e}),d)}});function Ws(e,t,n,r){for(let n of e)if(n.issues.length===0)return t.value=n.value,t;let i=e.filter(e=>!Ma(e));return i.length===1?(t.value=i[0].value,i[0]):(t.issues.push({code:`invalid_union`,input:t.value,inst:n,errors:e.map(e=>e.issues.map(e=>Ia(e,r,na())))}),t)}var Gs=H(`$ZodUnion`,(e,t)=>{ns.init(e,t),ua(e._zod,`optin`,()=>t.options.some(e=>e._zod.optin===`optional`)?`optional`:void 0),ua(e._zod,`optout`,()=>t.options.some(e=>e._zod.optout===`optional`)?`optional`:void 0),ua(e._zod,`values`,()=>{if(t.options.every(e=>e._zod.values))return new Set(t.options.flatMap(e=>Array.from(e._zod.values)))}),ua(e._zod,`pattern`,()=>{if(t.options.every(e=>e._zod.pattern)){let e=t.options.map(e=>e._zod.pattern);return RegExp(`^(${e.map(e=>sa(e.source)).join(`|`)})$`)}});let n=t.options.length===1?t.options[0]._zod.run:null;e._zod.parse=(r,i)=>{if(n)return n(r,i);let a=!1,o=[];for(let e of t.options){let t=e._zod.run({value:r.value,issues:[]},i);if(t instanceof Promise)o.push(t),a=!0;else{if(t.issues.length===0)return t;o.push(t)}}return a?Promise.all(o).then(t=>Ws(t,r,e,i)):Ws(o,r,e,i)}}),Ks=H(`$ZodDiscriminatedUnion`,(e,t)=>{t.inclusive=!1,Gs.init(e,t);let n=e._zod.parse;ua(e._zod,`propValues`,()=>{let e={};for(let n of t.options){let r=n._zod.propValues;if(!r||Object.keys(r).length===0)throw Error(`Invalid discriminated union option at index "${t.options.indexOf(n)}"`);for(let[t,n]of Object.entries(r)){e[t]||(e[t]=new Set);for(let r of n)e[t].add(r)}}return e});let r=aa(()=>{let e=t.options,n=new Map;for(let r of e){let e=r._zod.propValues?.[t.discriminator];if(!e||e.size===0)throw Error(`Invalid discriminated union option at index "${t.options.indexOf(r)}"`);for(let t of e){if(n.has(t))throw Error(`Duplicate discriminator value "${String(t)}"`);n.set(t,r)}}return n});e._zod.parse=(i,a)=>{let o=i.value;if(!ga(o))return i.issues.push({code:`invalid_type`,expected:`object`,input:o,inst:e}),i;let s=r.value.get(o?.[t.discriminator]);return s?s._zod.run(i,a):t.unionFallback||a.direction===`backward`?n(i,a):(i.issues.push({code:`invalid_union`,errors:[],note:`No matching discriminator`,discriminator:t.discriminator,options:Array.from(r.value.keys()),input:o,path:[t.discriminator],inst:e}),i)}}),qs=H(`$ZodIntersection`,(e,t)=>{ns.init(e,t),e._zod.parse=(e,n)=>{let r=e.value,i=t.left._zod.run({value:r,issues:[]},n),a=t.right._zod.run({value:r,issues:[]},n);return i instanceof Promise||a instanceof Promise?Promise.all([i,a]).then(([t,n])=>Ys(e,t,n)):Ys(e,i,a)}});function Js(e,t){if(e===t||e instanceof Date&&t instanceof Date&&+e==+t)return{valid:!0,data:e};if(va(e)&&va(t)){let n=Object.keys(t),r=Object.keys(e).filter(e=>n.indexOf(e)!==-1),i={...e,...t};for(let n of r){let r=Js(e[n],t[n]);if(!r.valid)return{valid:!1,mergeErrorPath:[n,...r.mergeErrorPath]};i[n]=r.data}return{valid:!0,data:i}}if(Array.isArray(e)&&Array.isArray(t)){if(e.length!==t.length)return{valid:!1,mergeErrorPath:[]};let n=[];for(let r=0;re.l&&e.r).map(([e])=>e);if(a.length&&i&&e.issues.push({...i,keys:a}),Ma(e))return e;let o=Js(t.value,n.value);if(!o.valid)throw Error(`Unmergable intersection. Error path: ${JSON.stringify(o.mergeErrorPath)}`);return e.value=o.data,e}var Xs=H(`$ZodTuple`,(e,t)=>{ns.init(e,t);let n=t.items;e._zod.parse=(r,i)=>{let a=r.value;if(!Array.isArray(a))return r.issues.push({input:a,inst:e,expected:`tuple`,code:`invalid_type`}),r;r.value=[];let o=[],s=Zs(n,`optin`),c=Zs(n,`optout`);if(!t.rest){if(a.lengthn.length&&r.issues.push({code:`too_big`,maximum:n.length,inclusive:!0,input:a,inst:e,origin:`array`})}let l=Array(n.length);for(let e=0;e{l[e]=t})):l[e]=t}if(t.rest){let e=n.length-1,s=a.slice(n.length);for(let n of s){e++;let a=t.rest._zod.run({value:n,issues:[]},i);a instanceof Promise?o.push(a.then(t=>Qs(t,r,e))):Qs(a,r,e)}}return o.length?Promise.all(o).then(()=>$s(l,r,n,a,c)):$s(l,r,n,a,c)}});function Zs(e,t){for(let n=e.length-1;n>=0;n--)if(e[n]._zod[t]!==`optional`)return n+1;return 0}function Qs(e,t,n){e.issues.length&&t.issues.push(...Pa(n,e.issues)),t.value[n]=e.value}function $s(e,t,n,r,i){for(let a=0;a=i){t.value.length=a;break}t.issues.push(...Pa(a,n.issues))}t.value[a]=n.value}for(let e=t.value.length-1;e>=r.length&&n[e]._zod.optout===`optional`&&t.value[e]===void 0;e--)t.value.length=e;return t}var ec=H(`$ZodRecord`,(e,t)=>{ns.init(e,t),e._zod.parse=(n,r)=>{let i=n.value;if(!va(i))return n.issues.push({expected:`record`,code:`invalid_type`,input:i,inst:e}),n;let a=[],o=t.keyType._zod.values;if(o){n.value={};let s=new Set;for(let c of o)if(typeof c==`string`||typeof c==`number`||typeof c==`symbol`){s.add(typeof c==`number`?c.toString():c);let o=t.keyType._zod.run({value:c,issues:[]},r);if(o instanceof Promise)throw Error(`Async schemas not supported in object keys currently`);if(o.issues.length){n.issues.push({code:`invalid_key`,origin:`record`,issues:o.issues.map(e=>Ia(e,r,na())),input:c,path:[c],inst:e});continue}let l=o.value,u=t.valueType._zod.run({value:i[c],issues:[]},r);u instanceof Promise?a.push(u.then(e=>{e.issues.length&&n.issues.push(...Pa(c,e.issues)),n.value[l]=e.value})):(u.issues.length&&n.issues.push(...Pa(c,u.issues)),n.value[l]=u.value)}let c;for(let e in i)s.has(e)||(c??=[],c.push(e));c&&c.length>0&&n.issues.push({code:`unrecognized_keys`,input:i,inst:e,keys:c})}else{n.value={};for(let o of Reflect.ownKeys(i)){if(o===`__proto__`||!Object.prototype.propertyIsEnumerable.call(i,o))continue;let s=t.keyType._zod.run({value:o,issues:[]},r);if(s instanceof Promise)throw Error(`Async schemas not supported in object keys currently`);if(typeof o==`string`&&Mo.test(o)&&s.issues.length){let e=t.keyType._zod.run({value:Number(o),issues:[]},r);if(e instanceof Promise)throw Error(`Async schemas not supported in object keys currently`);e.issues.length===0&&(s=e)}if(s.issues.length){t.mode===`loose`?n.value[o]=i[o]:n.issues.push({code:`invalid_key`,origin:`record`,issues:s.issues.map(e=>Ia(e,r,na())),input:o,path:[o],inst:e});continue}let c=t.valueType._zod.run({value:i[o],issues:[]},r);c instanceof Promise?a.push(c.then(e=>{e.issues.length&&n.issues.push(...Pa(o,e.issues)),n.value[s.value]=e.value})):(c.issues.length&&n.issues.push(...Pa(o,c.issues)),n.value[s.value]=c.value)}}return a.length?Promise.all(a).then(()=>n):n}}),tc=H(`$ZodEnum`,(e,t)=>{ns.init(e,t);let n=ra(t.entries),r=new Set(n);e._zod.values=r,e._zod.pattern=RegExp(`^(${n.filter(e=>ba.has(typeof e)).map(e=>typeof e==`string`?xa(e):e.toString()).join(`|`)})$`),e._zod.parse=(t,i)=>{let a=t.value;return r.has(a)||t.issues.push({code:`invalid_value`,values:n,input:a,inst:e}),t}}),nc=H(`$ZodLiteral`,(e,t)=>{if(ns.init(e,t),t.values.length===0)throw Error(`Cannot create literal schema with no valid values`);let n=new Set(t.values);e._zod.values=n,e._zod.pattern=RegExp(`^(${t.values.map(e=>typeof e==`string`?xa(e):e?xa(e.toString()):String(e)).join(`|`)})$`),e._zod.parse=(r,i)=>{let a=r.value;return n.has(a)||r.issues.push({code:`invalid_value`,values:t.values,input:a,inst:e}),r}}),rc=H(`$ZodTransform`,(e,t)=>{ns.init(e,t),e._zod.optin=`optional`,e._zod.parse=(n,r)=>{if(r.direction===`backward`)throw new ea(e.constructor.name);let i=t.transform(n.value,n);if(r.async)return(i instanceof Promise?i:Promise.resolve(i)).then(e=>(n.value=e,n.fallback=!0,n));if(i instanceof Promise)throw new $i;return n.value=i,n.fallback=!0,n}});function ic(e,t){return t===void 0&&(e.issues.length||e.fallback)?{issues:[],value:void 0}:e}var ac=H(`$ZodOptional`,(e,t)=>{ns.init(e,t),e._zod.optin=`optional`,e._zod.optout=`optional`,ua(e._zod,`values`,()=>t.innerType._zod.values?new Set([...t.innerType._zod.values,void 0]):void 0),ua(e._zod,`pattern`,()=>{let e=t.innerType._zod.pattern;return e?RegExp(`^(${sa(e.source)})?$`):void 0}),e._zod.parse=(e,n)=>{if(t.innerType._zod.optin===`optional`){let r=e.value,i=t.innerType._zod.run(e,n);return i instanceof Promise?i.then(e=>ic(e,r)):ic(i,r)}return e.value===void 0?e:t.innerType._zod.run(e,n)}}),oc=H(`$ZodExactOptional`,(e,t)=>{ac.init(e,t),ua(e._zod,`values`,()=>t.innerType._zod.values),ua(e._zod,`pattern`,()=>t.innerType._zod.pattern),e._zod.parse=(e,n)=>t.innerType._zod.run(e,n)}),sc=H(`$ZodNullable`,(e,t)=>{ns.init(e,t),ua(e._zod,`optin`,()=>t.innerType._zod.optin),ua(e._zod,`optout`,()=>t.innerType._zod.optout),ua(e._zod,`pattern`,()=>{let e=t.innerType._zod.pattern;return e?RegExp(`^(${sa(e.source)}|null)$`):void 0}),ua(e._zod,`values`,()=>t.innerType._zod.values?new Set([...t.innerType._zod.values,null]):void 0),e._zod.parse=(e,n)=>e.value===null?e:t.innerType._zod.run(e,n)}),cc=H(`$ZodDefault`,(e,t)=>{ns.init(e,t),e._zod.optin=`optional`,ua(e._zod,`values`,()=>t.innerType._zod.values),e._zod.parse=(e,n)=>{if(n.direction===`backward`)return t.innerType._zod.run(e,n);if(e.value===void 0)return e.value=t.defaultValue,e;let r=t.innerType._zod.run(e,n);return r instanceof Promise?r.then(e=>lc(e,t)):lc(r,t)}});function lc(e,t){return e.value===void 0&&(e.value=t.defaultValue),e}var uc=H(`$ZodPrefault`,(e,t)=>{ns.init(e,t),e._zod.optin=`optional`,ua(e._zod,`values`,()=>t.innerType._zod.values),e._zod.parse=(e,n)=>(n.direction===`backward`||e.value===void 0&&(e.value=t.defaultValue),t.innerType._zod.run(e,n))}),dc=H(`$ZodNonOptional`,(e,t)=>{ns.init(e,t),ua(e._zod,`values`,()=>{let e=t.innerType._zod.values;return e?new Set([...e].filter(e=>e!==void 0)):void 0}),e._zod.parse=(n,r)=>{let i=t.innerType._zod.run(n,r);return i instanceof Promise?i.then(t=>fc(t,e)):fc(i,e)}});function fc(e,t){return!e.issues.length&&e.value===void 0&&e.issues.push({code:`invalid_type`,expected:`nonoptional`,input:e.value,inst:t}),e}var pc=H(`$ZodCatch`,(e,t)=>{ns.init(e,t),e._zod.optin=`optional`,ua(e._zod,`optout`,()=>t.innerType._zod.optout),ua(e._zod,`values`,()=>t.innerType._zod.values),e._zod.parse=(e,n)=>{if(n.direction===`backward`)return t.innerType._zod.run(e,n);let r=t.innerType._zod.run(e,n);return r instanceof Promise?r.then(r=>(e.value=r.value,r.issues.length&&(e.value=t.catchValue({...e,error:{issues:r.issues.map(e=>Ia(e,n,na()))},input:e.value}),e.issues=[],e.fallback=!0),e)):(e.value=r.value,r.issues.length&&(e.value=t.catchValue({...e,error:{issues:r.issues.map(e=>Ia(e,n,na()))},input:e.value}),e.issues=[],e.fallback=!0),e)}}),mc=H(`$ZodPipe`,(e,t)=>{ns.init(e,t),ua(e._zod,`values`,()=>t.in._zod.values),ua(e._zod,`optin`,()=>t.in._zod.optin),ua(e._zod,`optout`,()=>t.out._zod.optout),ua(e._zod,`propValues`,()=>t.in._zod.propValues),e._zod.parse=(e,n)=>{if(n.direction===`backward`){let r=t.out._zod.run(e,n);return r instanceof Promise?r.then(e=>hc(e,t.in,n)):hc(r,t.in,n)}let r=t.in._zod.run(e,n);return r instanceof Promise?r.then(e=>hc(e,t.out,n)):hc(r,t.out,n)}});function hc(e,t,n){return e.issues.length?(e.aborted=!0,e):t._zod.run({value:e.value,issues:e.issues,fallback:e.fallback},n)}var gc=H(`$ZodReadonly`,(e,t)=>{ns.init(e,t),ua(e._zod,`propValues`,()=>t.innerType._zod.propValues),ua(e._zod,`values`,()=>t.innerType._zod.values),ua(e._zod,`optin`,()=>t.innerType?._zod?.optin),ua(e._zod,`optout`,()=>t.innerType?._zod?.optout),e._zod.parse=(e,n)=>{if(n.direction===`backward`)return t.innerType._zod.run(e,n);let r=t.innerType._zod.run(e,n);return r instanceof Promise?r.then(_c):_c(r)}});function _c(e){return e.value=Object.freeze(e.value),e}var vc=H(`$ZodCustom`,(e,t)=>{Lo.init(e,t),ns.init(e,t),e._zod.parse=(e,t)=>e,e._zod.check=n=>{let r=n.value,i=t.fn(r);if(i instanceof Promise)return i.then(t=>yc(t,n,r,e));yc(i,n,r,e)}});function yc(e,t,n,r){if(!e){let e={code:`custom`,input:n,inst:r,path:[...r._zod.def.path??[]],continue:!r._zod.def.abort};r._zod.def.params&&(e.params=r._zod.def.params),t.issues.push(Ra(e))}}var bc,xc=class{constructor(){this._map=new WeakMap,this._idmap=new Map}add(e,...t){let n=t[0];return this._map.set(e,n),n&&typeof n==`object`&&`id`in n&&this._idmap.set(n.id,e),this}clear(){return this._map=new WeakMap,this._idmap=new Map,this}remove(e){let t=this._map.get(e);return t&&typeof t==`object`&&`id`in t&&this._idmap.delete(t.id),this._map.delete(e),this}get(e){let t=e._zod.parent;if(t){let n={...this.get(t)??{}};delete n.id;let r={...n,...this._map.get(e)};return Object.keys(r).length?r:void 0}return this._map.get(e)}has(e){return this._map.has(e)}};function Sc(){return new xc}(bc=globalThis).__zod_globalRegistry??(bc.__zod_globalRegistry=Sc());var Cc=globalThis.__zod_globalRegistry;function wc(e,t){return new e({type:`string`,...U(t)})}function Tc(e,t){return new e({type:`string`,format:`email`,check:`string_format`,abort:!1,...U(t)})}function Ec(e,t){return new e({type:`string`,format:`guid`,check:`string_format`,abort:!1,...U(t)})}function Dc(e,t){return new e({type:`string`,format:`uuid`,check:`string_format`,abort:!1,...U(t)})}function Oc(e,t){return new e({type:`string`,format:`uuid`,check:`string_format`,abort:!1,version:`v4`,...U(t)})}function kc(e,t){return new e({type:`string`,format:`uuid`,check:`string_format`,abort:!1,version:`v6`,...U(t)})}function Ac(e,t){return new e({type:`string`,format:`uuid`,check:`string_format`,abort:!1,version:`v7`,...U(t)})}function jc(e,t){return new e({type:`string`,format:`url`,check:`string_format`,abort:!1,...U(t)})}function Mc(e,t){return new e({type:`string`,format:`emoji`,check:`string_format`,abort:!1,...U(t)})}function Nc(e,t){return new e({type:`string`,format:`nanoid`,check:`string_format`,abort:!1,...U(t)})}function Pc(e,t){return new e({type:`string`,format:`cuid`,check:`string_format`,abort:!1,...U(t)})}function Fc(e,t){return new e({type:`string`,format:`cuid2`,check:`string_format`,abort:!1,...U(t)})}function Ic(e,t){return new e({type:`string`,format:`ulid`,check:`string_format`,abort:!1,...U(t)})}function Lc(e,t){return new e({type:`string`,format:`xid`,check:`string_format`,abort:!1,...U(t)})}function Rc(e,t){return new e({type:`string`,format:`ksuid`,check:`string_format`,abort:!1,...U(t)})}function zc(e,t){return new e({type:`string`,format:`ipv4`,check:`string_format`,abort:!1,...U(t)})}function Bc(e,t){return new e({type:`string`,format:`ipv6`,check:`string_format`,abort:!1,...U(t)})}function Vc(e,t){return new e({type:`string`,format:`cidrv4`,check:`string_format`,abort:!1,...U(t)})}function Hc(e,t){return new e({type:`string`,format:`cidrv6`,check:`string_format`,abort:!1,...U(t)})}function Uc(e,t){return new e({type:`string`,format:`base64`,check:`string_format`,abort:!1,...U(t)})}function Wc(e,t){return new e({type:`string`,format:`base64url`,check:`string_format`,abort:!1,...U(t)})}function Gc(e,t){return new e({type:`string`,format:`e164`,check:`string_format`,abort:!1,...U(t)})}function Kc(e,t){return new e({type:`string`,format:`jwt`,check:`string_format`,abort:!1,...U(t)})}function qc(e,t){return new e({type:`string`,format:`datetime`,check:`string_format`,offset:!1,local:!1,precision:null,...U(t)})}function Jc(e,t){return new e({type:`string`,format:`date`,check:`string_format`,...U(t)})}function Yc(e,t){return new e({type:`string`,format:`time`,check:`string_format`,precision:null,...U(t)})}function Xc(e,t){return new e({type:`string`,format:`duration`,check:`string_format`,...U(t)})}function Zc(e,t){return new e({type:`number`,checks:[],...U(t)})}function Qc(e,t){return new e({type:`number`,check:`number_format`,abort:!1,format:`safeint`,...U(t)})}function $c(e,t){return new e({type:`boolean`,...U(t)})}function el(e,t){return new e({type:`null`,...U(t)})}function tl(e){return new e({type:`unknown`})}function nl(e,t){return new e({type:`never`,...U(t)})}function rl(e,t){return new zo({check:`less_than`,...U(t),value:e,inclusive:!1})}function il(e,t){return new zo({check:`less_than`,...U(t),value:e,inclusive:!0})}function al(e,t){return new Bo({check:`greater_than`,...U(t),value:e,inclusive:!1})}function ol(e,t){return new Bo({check:`greater_than`,...U(t),value:e,inclusive:!0})}function sl(e,t){return new Vo({check:`multiple_of`,...U(t),value:e})}function cl(e,t){return new Uo({check:`max_length`,...U(t),maximum:e})}function ll(e,t){return new Wo({check:`min_length`,...U(t),minimum:e})}function ul(e,t){return new Go({check:`length_equals`,...U(t),length:e})}function dl(e,t){return new qo({check:`string_format`,format:`regex`,...U(t),pattern:e})}function fl(e){return new Jo({check:`string_format`,format:`lowercase`,...U(e)})}function pl(e){return new Yo({check:`string_format`,format:`uppercase`,...U(e)})}function ml(e,t){return new Xo({check:`string_format`,format:`includes`,...U(t),includes:e})}function hl(e,t){return new Zo({check:`string_format`,format:`starts_with`,...U(t),prefix:e})}function gl(e,t){return new Qo({check:`string_format`,format:`ends_with`,...U(t),suffix:e})}function _l(e){return new $o({check:`overwrite`,tx:e})}function vl(e){return _l(t=>t.normalize(e))}function yl(){return _l(e=>e.trim())}function bl(){return _l(e=>e.toLowerCase())}function xl(){return _l(e=>e.toUpperCase())}function Sl(){return _l(e=>ma(e))}function Cl(e,t,n){return new e({type:`array`,element:t,...U(n)})}function wl(e,t,n){return new e({type:`custom`,check:`custom`,fn:t,...U(n)})}function Tl(e,t){let n=El(t=>(t.addIssue=e=>{if(typeof e==`string`)t.issues.push(Ra(e,t.value,n._zod.def));else{let r=e;r.fatal&&(r.continue=!1),r.code??=`custom`,r.input??=t.value,r.inst??=n,r.continue??=!n._zod.def.abort,t.issues.push(Ra(r))}},e(t.value,t)),t);return n}function El(e,t){let n=new Lo({check:`custom`,...U(t)});return n._zod.check=e,n}function Dl(e){let t=e?.target??`draft-2020-12`;return t===`draft-4`&&(t=`draft-04`),t===`draft-7`&&(t=`draft-07`),{processors:e.processors??{},metadataRegistry:e?.metadata??Cc,target:t,unrepresentable:e?.unrepresentable??`throw`,override:e?.override??(()=>{}),io:e?.io??`output`,counter:0,seen:new Map,cycles:e?.cycles??`ref`,reused:e?.reused??`inline`,external:e?.external??void 0}}function Ol(e,t,n={path:[],schemaPath:[]}){var r;let i=e._zod.def,a=t.seen.get(e);if(a)return a.count++,n.schemaPath.includes(e)&&(a.cycle=n.path),a.schema;let o={schema:{},count:1,cycle:void 0,path:n.path};t.seen.set(e,o);let s=e._zod.toJSONSchema?.();if(s)o.schema=s;else{let r={...n,schemaPath:[...n.schemaPath,e],path:n.path};if(e._zod.processJSONSchema)e._zod.processJSONSchema(t,o.schema,r);else{let n=o.schema,a=t.processors[i.type];if(!a)throw Error(`[toJSONSchema]: Non-representable type encountered: ${i.type}`);a(e,t,n,r)}let a=e._zod.parent;a&&(o.ref||=a,Ol(a,t,r),t.seen.get(a).isParent=!0)}let c=t.metadataRegistry.get(e);return c&&Object.assign(o.schema,c),t.io===`input`&&jl(e)&&(delete o.schema.examples,delete o.schema.default),t.io===`input`&&`_prefault`in o.schema&&((r=o.schema).default??(r.default=o.schema._prefault)),delete o.schema._prefault,t.seen.get(e).schema}function kl(e,t){let n=e.seen.get(t);if(!n)throw Error(`Unprocessed schema. This is a bug in Zod.`);let r=new Map;for(let t of e.seen.entries()){let n=e.metadataRegistry.get(t[0])?.id;if(n){let e=r.get(n);if(e&&e!==t[0])throw Error(`Duplicate schema id "${n}" detected during JSON Schema conversion. Two different schemas cannot share the same id when converted together.`);r.set(n,t[0])}}let i=t=>{let r=e.target===`draft-2020-12`?`$defs`:`definitions`;if(e.external){let n=e.external.registry.get(t[0])?.id,i=e.external.uri??(e=>e);if(n)return{ref:i(n)};let a=t[1].defId??t[1].schema.id??`schema${e.counter++}`;return t[1].defId=a,{defId:a,ref:`${i(`__shared`)}#/${r}/${a}`}}if(t[1]===n)return{ref:`#`};let i=`#/${r}/`,a=t[1].schema.id??`__schema${e.counter++}`;return{defId:a,ref:i+a}},a=e=>{if(e[1].schema.$ref)return;let t=e[1],{ref:n,defId:r}=i(e);t.def={...t.schema},r&&(t.defId=r);let a=t.schema;for(let e in a)delete a[e];a.$ref=n};if(e.cycles===`throw`)for(let t of e.seen.entries()){let e=t[1];if(e.cycle)throw Error(`Cycle detected: #/${e.cycle?.join(`/`)}/ + +Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.`)}for(let n of e.seen.entries()){let r=n[1];if(t===n[0]){a(n);continue}if(e.external){let r=e.external.registry.get(n[0])?.id;if(t!==n[0]&&r){a(n);continue}}if(e.metadataRegistry.get(n[0])?.id){a(n);continue}if(r.cycle){a(n);continue}if(r.count>1&&e.reused===`ref`){a(n);continue}}}function Al(e,t){let n=e.seen.get(t);if(!n)throw Error(`Unprocessed schema. This is a bug in Zod.`);let r=t=>{let n=e.seen.get(t);if(n.ref===null)return;let i=n.def??n.schema,a={...i},o=n.ref;if(n.ref=null,o){r(o);let n=e.seen.get(o),s=n.schema;if(s.$ref&&(e.target===`draft-07`||e.target===`draft-04`||e.target===`openapi-3.0`)?(i.allOf=i.allOf??[],i.allOf.push(s)):Object.assign(i,s),Object.assign(i,a),t._zod.parent===o)for(let e in i)e!==`$ref`&&e!==`allOf`&&(e in a||delete i[e]);if(s.$ref&&n.def)for(let e in i)e!==`$ref`&&e!==`allOf`&&e in n.def&&JSON.stringify(i[e])===JSON.stringify(n.def[e])&&delete i[e]}let s=t._zod.parent;if(s&&s!==o){r(s);let t=e.seen.get(s);if(t?.schema.$ref&&(i.$ref=t.schema.$ref,t.def))for(let e in i)e!==`$ref`&&e!==`allOf`&&e in t.def&&JSON.stringify(i[e])===JSON.stringify(t.def[e])&&delete i[e]}e.override({zodSchema:t,jsonSchema:i,path:n.path??[]})};for(let t of[...e.seen.entries()].reverse())r(t[0]);let i={};if(e.target===`draft-2020-12`?i.$schema=`https://json-schema.org/draft/2020-12/schema`:e.target===`draft-07`?i.$schema=`http://json-schema.org/draft-07/schema#`:e.target===`draft-04`?i.$schema=`http://json-schema.org/draft-04/schema#`:e.target,e.external?.uri){let n=e.external.registry.get(t)?.id;if(!n)throw Error("Schema is missing an `id` property");i.$id=e.external.uri(n)}Object.assign(i,n.def??n.schema);let a=e.metadataRegistry.get(t)?.id;a!==void 0&&i.id===a&&delete i.id;let o=e.external?.defs??{};for(let t of e.seen.entries()){let e=t[1];e.def&&e.defId&&(e.def.id===e.defId&&delete e.def.id,o[e.defId]=e.def)}e.external||Object.keys(o).length>0&&(e.target===`draft-2020-12`?i.$defs=o:i.definitions=o);try{let n=JSON.parse(JSON.stringify(i));return Object.defineProperty(n,"~standard",{value:{...t[`~standard`],jsonSchema:{input:Nl(t,`input`,e.processors),output:Nl(t,`output`,e.processors)}},enumerable:!1,writable:!1}),n}catch{throw Error(`Error converting schema to JSON.`)}}function jl(e,t){let n=t??{seen:new Set};if(n.seen.has(e))return!1;n.seen.add(e);let r=e._zod.def;if(r.type===`transform`)return!0;if(r.type===`array`)return jl(r.element,n);if(r.type===`set`)return jl(r.valueType,n);if(r.type===`lazy`)return jl(r.getter(),n);if(r.type===`promise`||r.type===`optional`||r.type===`nonoptional`||r.type===`nullable`||r.type===`readonly`||r.type==="default"||r.type===`prefault`)return jl(r.innerType,n);if(r.type===`intersection`)return jl(r.left,n)||jl(r.right,n);if(r.type===`record`||r.type===`map`)return jl(r.keyType,n)||jl(r.valueType,n);if(r.type===`pipe`)return e._zod.traits.has(`$ZodCodec`)?!0:jl(r.in,n)||jl(r.out,n);if(r.type===`object`){for(let e in r.shape)if(jl(r.shape[e],n))return!0;return!1}if(r.type===`union`){for(let e of r.options)if(jl(e,n))return!0;return!1}if(r.type===`tuple`){for(let e of r.items)if(jl(e,n))return!0;return!!(r.rest&&jl(r.rest,n))}return!1}var Ml=(e,t={})=>n=>{let r=Dl({...n,processors:t});return Ol(e,r),kl(r,e),Al(r,e)},Nl=(e,t,n={})=>r=>{let{libraryOptions:i,target:a}=r??{},o=Dl({...i??{},target:a,io:t,processors:n});return Ol(e,o),kl(o,e),Al(o,e)},Pl={guid:`uuid`,url:`uri`,datetime:`date-time`,json_string:`json-string`,regex:``},Fl=(e,t,n,r)=>{let i=n;i.type=`string`;let{minimum:a,maximum:o,format:s,patterns:c,contentEncoding:l}=e._zod.bag;if(typeof a==`number`&&(i.minLength=a),typeof o==`number`&&(i.maxLength=o),s&&(i.format=Pl[s]??s,i.format===``&&delete i.format,s===`time`&&delete i.format),l&&(i.contentEncoding=l),c&&c.size>0){let e=[...c];e.length===1?i.pattern=e[0].source:e.length>1&&(i.allOf=[...e.map(e=>({...t.target===`draft-07`||t.target===`draft-04`||t.target===`openapi-3.0`?{type:`string`}:{},pattern:e.source}))])}},Il=(e,t,n,r)=>{let i=n,{minimum:a,maximum:o,format:s,multipleOf:c,exclusiveMaximum:l,exclusiveMinimum:u}=e._zod.bag;i.type=typeof s==`string`&&s.includes(`int`)?`integer`:`number`;let d=typeof u==`number`&&u>=(a??-1/0),f=typeof l==`number`&&l<=(o??1/0),p=t.target===`draft-04`||t.target===`openapi-3.0`;d?p?(i.minimum=u,i.exclusiveMinimum=!0):i.exclusiveMinimum=u:typeof a==`number`&&(i.minimum=a),f?p?(i.maximum=l,i.exclusiveMaximum=!0):i.exclusiveMaximum=l:typeof o==`number`&&(i.maximum=o),typeof c==`number`&&(i.multipleOf=c)},Ll=(e,t,n,r)=>{n.type=`boolean`},Rl=(e,t,n,r)=>{t.target===`openapi-3.0`?(n.type=`string`,n.nullable=!0,n.enum=[null]):n.type=`null`},zl=(e,t,n,r)=>{n.not={}},Bl=(e,t,n,r)=>{let i=e._zod.def,a=ra(i.entries);a.every(e=>typeof e==`number`)&&(n.type=`number`),a.every(e=>typeof e==`string`)&&(n.type=`string`),n.enum=a},Vl=(e,t,n,r)=>{let i=e._zod.def,a=[];for(let e of i.values)if(e===void 0){if(t.unrepresentable===`throw`)throw Error("Literal `undefined` cannot be represented in JSON Schema")}else if(typeof e==`bigint`){if(t.unrepresentable===`throw`)throw Error(`BigInt literals cannot be represented in JSON Schema`);a.push(Number(e))}else a.push(e);if(a.length!==0){if(a.length===1){let e=a[0];n.type=e===null?`null`:typeof e,t.target===`draft-04`||t.target===`openapi-3.0`?n.enum=[e]:n.const=e}else a.every(e=>typeof e==`number`)&&(n.type=`number`),a.every(e=>typeof e==`string`)&&(n.type=`string`),a.every(e=>typeof e==`boolean`)&&(n.type=`boolean`),a.every(e=>e===null)&&(n.type=`null`),n.enum=a}},Hl=(e,t,n,r)=>{if(t.unrepresentable===`throw`)throw Error(`Custom types cannot be represented in JSON Schema`)},Ul=(e,t,n,r)=>{if(t.unrepresentable===`throw`)throw Error(`Transforms cannot be represented in JSON Schema`)},Wl=(e,t,n,r)=>{let i=n,a=e._zod.def,{minimum:o,maximum:s}=e._zod.bag;typeof o==`number`&&(i.minItems=o),typeof s==`number`&&(i.maxItems=s),i.type=`array`,i.items=Ol(a.element,t,{...r,path:[...r.path,`items`]})},Gl=(e,t,n,r)=>{let i=n,a=e._zod.def;i.type=`object`,i.properties={};let o=a.shape;for(let e in o)i.properties[e]=Ol(o[e],t,{...r,path:[...r.path,`properties`,e]});let s=new Set(Object.keys(o)),c=new Set([...s].filter(e=>{let n=a.shape[e]._zod;return t.io===`input`?n.optin===void 0:n.optout===void 0}));c.size>0&&(i.required=Array.from(c)),a.catchall?._zod.def.type===`never`?i.additionalProperties=!1:a.catchall?a.catchall&&(i.additionalProperties=Ol(a.catchall,t,{...r,path:[...r.path,`additionalProperties`]})):t.io===`output`&&(i.additionalProperties=!1)},Kl=(e,t,n,r)=>{let i=e._zod.def,a=i.inclusive===!1,o=i.options.map((e,n)=>Ol(e,t,{...r,path:[...r.path,a?`oneOf`:`anyOf`,n]}));a?n.oneOf=o:n.anyOf=o},ql=(e,t,n,r)=>{let i=e._zod.def,a=Ol(i.left,t,{...r,path:[...r.path,`allOf`,0]}),o=Ol(i.right,t,{...r,path:[...r.path,`allOf`,1]}),s=e=>`allOf`in e&&Object.keys(e).length===1;n.allOf=[...s(a)?a.allOf:[a],...s(o)?o.allOf:[o]]},Jl=(e,t,n,r)=>{let i=n,a=e._zod.def;i.type=`array`;let o=t.target===`draft-2020-12`?`prefixItems`:`items`,s=t.target===`draft-2020-12`||t.target===`openapi-3.0`?`items`:`additionalItems`,c=a.items.map((e,n)=>Ol(e,t,{...r,path:[...r.path,o,n]})),l=a.rest?Ol(a.rest,t,{...r,path:[...r.path,s,...t.target===`openapi-3.0`?[a.items.length]:[]]}):null;t.target===`draft-2020-12`?(i.prefixItems=c,l&&(i.items=l)):t.target===`openapi-3.0`?(i.items={anyOf:c},l&&i.items.anyOf.push(l),i.minItems=c.length,l||(i.maxItems=c.length)):(i.items=c,l&&(i.additionalItems=l));let{minimum:u,maximum:d}=e._zod.bag;typeof u==`number`&&(i.minItems=u),typeof d==`number`&&(i.maxItems=d)},Yl=(e,t,n,r)=>{let i=n,a=e._zod.def;i.type=`object`;let o=a.keyType,s=o._zod.bag?.patterns;if(a.mode===`loose`&&s&&s.size>0){let e=Ol(a.valueType,t,{...r,path:[...r.path,`patternProperties`,`*`]});i.patternProperties={};for(let t of s)i.patternProperties[t.source]=e}else(t.target===`draft-07`||t.target===`draft-2020-12`)&&(i.propertyNames=Ol(a.keyType,t,{...r,path:[...r.path,`propertyNames`]})),i.additionalProperties=Ol(a.valueType,t,{...r,path:[...r.path,`additionalProperties`]});let c=o._zod.values;if(c){let e=[...c].filter(e=>typeof e==`string`||typeof e==`number`);e.length>0&&(i.required=e)}},Xl=(e,t,n,r)=>{let i=e._zod.def,a=Ol(i.innerType,t,r),o=t.seen.get(e);t.target===`openapi-3.0`?(o.ref=i.innerType,n.nullable=!0):n.anyOf=[a,{type:`null`}]},Zl=(e,t,n,r)=>{let i=e._zod.def;Ol(i.innerType,t,r);let a=t.seen.get(e);a.ref=i.innerType},Ql=(e,t,n,r)=>{let i=e._zod.def;Ol(i.innerType,t,r);let a=t.seen.get(e);a.ref=i.innerType,n.default=JSON.parse(JSON.stringify(i.defaultValue))},$l=(e,t,n,r)=>{let i=e._zod.def;Ol(i.innerType,t,r);let a=t.seen.get(e);a.ref=i.innerType,t.io===`input`&&(n._prefault=JSON.parse(JSON.stringify(i.defaultValue)))},eu=(e,t,n,r)=>{let i=e._zod.def;Ol(i.innerType,t,r);let a=t.seen.get(e);a.ref=i.innerType;let o;try{o=i.catchValue(void 0)}catch{throw Error(`Dynamic catch values are not supported in JSON Schema`)}n.default=o},tu=(e,t,n,r)=>{let i=e._zod.def,a=i.in._zod.traits.has(`$ZodTransform`),o=t.io===`input`?a?i.out:i.in:i.out;Ol(o,t,r);let s=t.seen.get(e);s.ref=o},nu=(e,t,n,r)=>{let i=e._zod.def;Ol(i.innerType,t,r);let a=t.seen.get(e);a.ref=i.innerType,n.readOnly=!0},ru=(e,t,n,r)=>{let i=e._zod.def;Ol(i.innerType,t,r);let a=t.seen.get(e);a.ref=i.innerType},iu=H(`ZodISODateTime`,(e,t)=>{gs.init(e,t),Mu.init(e,t)});function au(e){return qc(iu,e)}var ou=H(`ZodISODate`,(e,t)=>{_s.init(e,t),Mu.init(e,t)});function su(e){return Jc(ou,e)}var cu=H(`ZodISOTime`,(e,t)=>{vs.init(e,t),Mu.init(e,t)});function lu(e){return Yc(cu,e)}var uu=H(`ZodISODuration`,(e,t)=>{ys.init(e,t),Mu.init(e,t)});function du(e){return Xc(uu,e)}var fu=(e,t)=>{Ba.init(e,t),e.name=`ZodError`,Object.defineProperties(e,{format:{value:t=>Ua(e,t)},flatten:{value:t=>Ha(e,t)},addIssue:{value:t=>{e.issues.push(t),e.message=JSON.stringify(e.issues,ia,2)}},addIssues:{value:t=>{e.issues.push(...t),e.message=JSON.stringify(e.issues,ia,2)}},isEmpty:{get(){return e.issues.length===0}}})},pu=H(`ZodError`,fu),mu=H(`ZodError`,fu,{Parent:Error}),hu=Wa(mu),gu=Ga(mu),_u=Ka(mu),vu=Ja(mu),yu=Xa(mu),bu=Za(mu),xu=Qa(mu),Su=$a(mu),Cu=eo(mu),wu=to(mu),Tu=no(mu),Eu=ro(mu),Du=new WeakMap;function Ou(e,t,n){let r=Object.getPrototypeOf(e),i=Du.get(r);if(i||(i=new Set,Du.set(r,i)),!i.has(t)){i.add(t);for(let e in n){let t=n[e];Object.defineProperty(r,e,{configurable:!0,enumerable:!1,get(){let n=t.bind(this);return Object.defineProperty(this,e,{configurable:!0,writable:!0,enumerable:!0,value:n}),n},set(t){Object.defineProperty(this,e,{configurable:!0,writable:!0,enumerable:!0,value:t})}})}}}var ku=H(`ZodType`,(e,t)=>(ns.init(e,t),Object.assign(e[`~standard`],{jsonSchema:{input:Nl(e,`input`),output:Nl(e,`output`)}}),e.toJSONSchema=Ml(e,{}),e.def=t,e.type=t.type,Object.defineProperty(e,"_def",{value:t}),e.parse=(t,n)=>hu(e,t,n,{callee:e.parse}),e.safeParse=(t,n)=>_u(e,t,n),e.parseAsync=async(t,n)=>gu(e,t,n,{callee:e.parseAsync}),e.safeParseAsync=async(t,n)=>vu(e,t,n),e.spa=e.safeParseAsync,e.encode=(t,n)=>yu(e,t,n),e.decode=(t,n)=>bu(e,t,n),e.encodeAsync=async(t,n)=>xu(e,t,n),e.decodeAsync=async(t,n)=>Su(e,t,n),e.safeEncode=(t,n)=>Cu(e,t,n),e.safeDecode=(t,n)=>wu(e,t,n),e.safeEncodeAsync=async(t,n)=>Tu(e,t,n),e.safeDecodeAsync=async(t,n)=>Eu(e,t,n),Ou(e,`ZodType`,{check(...e){let t=this.def;return this.clone(fa(t,{checks:[...t.checks??[],...e.map(e=>typeof e==`function`?{_zod:{check:e,def:{check:`custom`},onattach:[]}}:e)]}),{parent:!0})},with(...e){return this.check(...e)},clone(e,t){return Sa(this,e,t)},brand(){return this},register(e,t){return e.add(this,t),this},refine(e,t){return this.check(Ud(e,t))},superRefine(e,t){return this.check(Wd(e,t))},overwrite(e){return this.check(_l(e))},optional(){return Td(this)},exactOptional(){return Dd(this)},nullable(){return kd(this)},nullish(){return Td(kd(this))},nonoptional(e){return Fd(this,e)},array(){return q(this)},or(e){return dd([this,e])},and(e){return hd(this,e)},transform(e){return zd(this,Cd(e))},default(e){return jd(this,e)},prefault(e){return Nd(this,e)},catch(e){return Ld(this,e)},pipe(e){return zd(this,e)},readonly(){return Vd(this)},describe(e){let t=this.clone();return Cc.add(t,{description:e}),t},meta(...e){if(e.length===0)return Cc.get(this);let t=this.clone();return Cc.add(t,e[0]),t},isOptional(){return this.safeParse(void 0).success},isNullable(){return this.safeParse(null).success},apply(e){return e(this)}}),Object.defineProperty(e,"description",{get(){return Cc.get(e)?.description},configurable:!0}),e)),Au=H(`_ZodString`,(e,t)=>{rs.init(e,t),ku.init(e,t),e._zod.processJSONSchema=(t,n,r)=>Fl(e,t,n,r);let n=e._zod.bag;e.format=n.format??null,e.minLength=n.minimum??null,e.maxLength=n.maximum??null,Ou(e,`_ZodString`,{regex(...e){return this.check(dl(...e))},includes(...e){return this.check(ml(...e))},startsWith(...e){return this.check(hl(...e))},endsWith(...e){return this.check(gl(...e))},min(...e){return this.check(ll(...e))},max(...e){return this.check(cl(...e))},length(...e){return this.check(ul(...e))},nonempty(...e){return this.check(ll(1,...e))},lowercase(e){return this.check(fl(e))},uppercase(e){return this.check(pl(e))},trim(){return this.check(yl())},normalize(...e){return this.check(vl(...e))},toLowerCase(){return this.check(bl())},toUpperCase(){return this.check(xl())},slugify(){return this.check(Sl())}})}),ju=H(`ZodString`,(e,t)=>{rs.init(e,t),Au.init(e,t),e.email=t=>e.check(Tc(Nu,t)),e.url=t=>e.check(jc(Iu,t)),e.jwt=t=>e.check(Kc(Zu,t)),e.emoji=t=>e.check(Mc(Lu,t)),e.guid=t=>e.check(Ec(Pu,t)),e.uuid=t=>e.check(Dc(Fu,t)),e.uuidv4=t=>e.check(Oc(Fu,t)),e.uuidv6=t=>e.check(kc(Fu,t)),e.uuidv7=t=>e.check(Ac(Fu,t)),e.nanoid=t=>e.check(Nc(Ru,t)),e.guid=t=>e.check(Ec(Pu,t)),e.cuid=t=>e.check(Pc(zu,t)),e.cuid2=t=>e.check(Fc(Bu,t)),e.ulid=t=>e.check(Ic(Vu,t)),e.base64=t=>e.check(Uc(Ju,t)),e.base64url=t=>e.check(Wc(Yu,t)),e.xid=t=>e.check(Lc(Hu,t)),e.ksuid=t=>e.check(Rc(Uu,t)),e.ipv4=t=>e.check(zc(Wu,t)),e.ipv6=t=>e.check(Bc(Gu,t)),e.cidrv4=t=>e.check(Vc(Ku,t)),e.cidrv6=t=>e.check(Hc(qu,t)),e.e164=t=>e.check(Gc(Xu,t)),e.datetime=t=>e.check(au(t)),e.date=t=>e.check(su(t)),e.time=t=>e.check(lu(t)),e.duration=t=>e.check(du(t))});function W(e){return wc(ju,e)}var Mu=H(`ZodStringFormat`,(e,t)=>{is.init(e,t),Au.init(e,t)}),Nu=H(`ZodEmail`,(e,t)=>{ss.init(e,t),Mu.init(e,t)}),Pu=H(`ZodGUID`,(e,t)=>{as.init(e,t),Mu.init(e,t)}),Fu=H(`ZodUUID`,(e,t)=>{os.init(e,t),Mu.init(e,t)}),Iu=H(`ZodURL`,(e,t)=>{cs.init(e,t),Mu.init(e,t)}),Lu=H(`ZodEmoji`,(e,t)=>{ls.init(e,t),Mu.init(e,t)}),Ru=H(`ZodNanoID`,(e,t)=>{us.init(e,t),Mu.init(e,t)}),zu=H(`ZodCUID`,(e,t)=>{ds.init(e,t),Mu.init(e,t)}),Bu=H(`ZodCUID2`,(e,t)=>{fs.init(e,t),Mu.init(e,t)}),Vu=H(`ZodULID`,(e,t)=>{ps.init(e,t),Mu.init(e,t)}),Hu=H(`ZodXID`,(e,t)=>{ms.init(e,t),Mu.init(e,t)}),Uu=H(`ZodKSUID`,(e,t)=>{hs.init(e,t),Mu.init(e,t)}),Wu=H(`ZodIPv4`,(e,t)=>{bs.init(e,t),Mu.init(e,t)}),Gu=H(`ZodIPv6`,(e,t)=>{xs.init(e,t),Mu.init(e,t)}),Ku=H(`ZodCIDRv4`,(e,t)=>{Ss.init(e,t),Mu.init(e,t)}),qu=H(`ZodCIDRv6`,(e,t)=>{Cs.init(e,t),Mu.init(e,t)}),Ju=H(`ZodBase64`,(e,t)=>{Ts.init(e,t),Mu.init(e,t)}),Yu=H(`ZodBase64URL`,(e,t)=>{Ds.init(e,t),Mu.init(e,t)}),Xu=H(`ZodE164`,(e,t)=>{Os.init(e,t),Mu.init(e,t)}),Zu=H(`ZodJWT`,(e,t)=>{As.init(e,t),Mu.init(e,t)}),Qu=H(`ZodNumber`,(e,t)=>{js.init(e,t),ku.init(e,t),e._zod.processJSONSchema=(t,n,r)=>Il(e,t,n,r),Ou(e,`ZodNumber`,{gt(e,t){return this.check(al(e,t))},gte(e,t){return this.check(ol(e,t))},min(e,t){return this.check(ol(e,t))},lt(e,t){return this.check(rl(e,t))},lte(e,t){return this.check(il(e,t))},max(e,t){return this.check(il(e,t))},int(e){return this.check(ed(e))},safe(e){return this.check(ed(e))},positive(e){return this.check(al(0,e))},nonnegative(e){return this.check(ol(0,e))},negative(e){return this.check(rl(0,e))},nonpositive(e){return this.check(il(0,e))},multipleOf(e,t){return this.check(sl(e,t))},step(e,t){return this.check(sl(e,t))},finite(){return this}});let n=e._zod.bag;e.minValue=Math.max(n.minimum??-1/0,n.exclusiveMinimum??-1/0)??null,e.maxValue=Math.min(n.maximum??1/0,n.exclusiveMaximum??1/0)??null,e.isInt=(n.format??``).includes(`int`)||Number.isSafeInteger(n.multipleOf??.5),e.isFinite=!0,e.format=n.format??null});function G(e){return Zc(Qu,e)}var $u=H(`ZodNumberFormat`,(e,t)=>{Ms.init(e,t),Qu.init(e,t)});function ed(e){return Qc($u,e)}var td=H(`ZodBoolean`,(e,t)=>{Ns.init(e,t),ku.init(e,t),e._zod.processJSONSchema=(t,n,r)=>Ll(e,t,n,r)});function K(e){return $c(td,e)}var nd=H(`ZodNull`,(e,t)=>{Ps.init(e,t),ku.init(e,t),e._zod.processJSONSchema=(t,n,r)=>Rl(e,t,n,r)});function rd(e){return el(nd,e)}var id=H(`ZodUnknown`,(e,t)=>{Fs.init(e,t),ku.init(e,t),e._zod.processJSONSchema=(e,t,n)=>void 0});function ad(){return tl(id)}var od=H(`ZodNever`,(e,t)=>{Is.init(e,t),ku.init(e,t),e._zod.processJSONSchema=(t,n,r)=>zl(e,t,n,r)});function sd(e){return nl(od,e)}var cd=H(`ZodArray`,(e,t)=>{Rs.init(e,t),ku.init(e,t),e._zod.processJSONSchema=(t,n,r)=>Wl(e,t,n,r),e.element=t.element,Ou(e,`ZodArray`,{min(e,t){return this.check(ll(e,t))},nonempty(e){return this.check(ll(1,e))},max(e,t){return this.check(cl(e,t))},length(e,t){return this.check(ul(e,t))},unwrap(){return this.element}})});function q(e,t){return Cl(cd,e,t)}var ld=H(`ZodObject`,(e,t)=>{Us.init(e,t),ku.init(e,t),e._zod.processJSONSchema=(t,n,r)=>Gl(e,t,n,r),ua(e,`shape`,()=>t.shape),Ou(e,`ZodObject`,{keyof(){return Y(Object.keys(this._zod.def.shape))},catchall(e){return this.clone({...this._zod.def,catchall:e})},passthrough(){return this.clone({...this._zod.def,catchall:ad()})},loose(){return this.clone({...this._zod.def,catchall:ad()})},strict(){return this.clone({...this._zod.def,catchall:sd()})},strip(){return this.clone({...this._zod.def,catchall:void 0})},extend(e){return Da(this,e)},safeExtend(e){return Oa(this,e)},merge(e){return ka(this,e)},pick(e){return Ta(this,e)},omit(e){return Ea(this,e)},partial(...e){return Aa(wd,this,e[0])},required(...e){return ja(Pd,this,e[0])}})});function J(e,t){return new ld({type:`object`,shape:e??{},...U(t)})}var ud=H(`ZodUnion`,(e,t)=>{Gs.init(e,t),ku.init(e,t),e._zod.processJSONSchema=(t,n,r)=>Kl(e,t,n,r),e.options=t.options});function dd(e,t){return new ud({type:`union`,options:e,...U(t)})}var fd=H(`ZodDiscriminatedUnion`,(e,t)=>{ud.init(e,t),Ks.init(e,t)});function pd(e,t,n){return new fd({type:`union`,options:t,discriminator:e,...U(n)})}var md=H(`ZodIntersection`,(e,t)=>{qs.init(e,t),ku.init(e,t),e._zod.processJSONSchema=(t,n,r)=>ql(e,t,n,r)});function hd(e,t){return new md({type:`intersection`,left:e,right:t})}var gd=H(`ZodTuple`,(e,t)=>{Xs.init(e,t),ku.init(e,t),e._zod.processJSONSchema=(t,n,r)=>Jl(e,t,n,r),e.rest=t=>e.clone({...e._zod.def,rest:t})});function _d(e,t,n){let r=t instanceof ns;return new gd({type:`tuple`,items:e,rest:r?t:null,...U(r?n:t)})}var vd=H(`ZodRecord`,(e,t)=>{ec.init(e,t),ku.init(e,t),e._zod.processJSONSchema=(t,n,r)=>Yl(e,t,n,r),e.keyType=t.keyType,e.valueType=t.valueType});function yd(e,t,n){return!t||!t._zod?new vd({type:`record`,keyType:W(),valueType:e,...U(t)}):new vd({type:`record`,keyType:e,valueType:t,...U(n)})}var bd=H(`ZodEnum`,(e,t)=>{tc.init(e,t),ku.init(e,t),e._zod.processJSONSchema=(t,n,r)=>Bl(e,t,n,r),e.enum=t.entries,e.options=Object.values(t.entries);let n=new Set(Object.keys(t.entries));e.extract=(e,r)=>{let i={};for(let r of e)if(n.has(r))i[r]=t.entries[r];else throw Error(`Key ${r} not found in enum`);return new bd({...t,checks:[],...U(r),entries:i})},e.exclude=(e,r)=>{let i={...t.entries};for(let t of e)if(n.has(t))delete i[t];else throw Error(`Key ${t} not found in enum`);return new bd({...t,checks:[],...U(r),entries:i})}});function Y(e,t){return new bd({type:`enum`,entries:Array.isArray(e)?Object.fromEntries(e.map(e=>[e,e])):e,...U(t)})}var xd=H(`ZodLiteral`,(e,t)=>{nc.init(e,t),ku.init(e,t),e._zod.processJSONSchema=(t,n,r)=>Vl(e,t,n,r),e.values=new Set(t.values),Object.defineProperty(e,"value",{get(){if(t.values.length>1)throw Error("This schema contains multiple valid literal values. Use `.values` instead.");return t.values[0]}})});function X(e,t){return new xd({type:`literal`,values:Array.isArray(e)?e:[e],...U(t)})}var Sd=H(`ZodTransform`,(e,t)=>{rc.init(e,t),ku.init(e,t),e._zod.processJSONSchema=(t,n,r)=>Ul(e,t,n,r),e._zod.parse=(n,r)=>{if(r.direction===`backward`)throw new ea(e.constructor.name);n.addIssue=r=>{if(typeof r==`string`)n.issues.push(Ra(r,n.value,t));else{let t=r;t.fatal&&(t.continue=!1),t.code??=`custom`,t.input??=n.value,t.inst??=e,n.issues.push(Ra(t))}};let i=t.transform(n.value,n);return i instanceof Promise?i.then(e=>(n.value=e,n.fallback=!0,n)):(n.value=i,n.fallback=!0,n)}});function Cd(e){return new Sd({type:`transform`,transform:e})}var wd=H(`ZodOptional`,(e,t)=>{ac.init(e,t),ku.init(e,t),e._zod.processJSONSchema=(t,n,r)=>ru(e,t,n,r),e.unwrap=()=>e._zod.def.innerType});function Td(e){return new wd({type:`optional`,innerType:e})}var Ed=H(`ZodExactOptional`,(e,t)=>{oc.init(e,t),ku.init(e,t),e._zod.processJSONSchema=(t,n,r)=>ru(e,t,n,r),e.unwrap=()=>e._zod.def.innerType});function Dd(e){return new Ed({type:`optional`,innerType:e})}var Od=H(`ZodNullable`,(e,t)=>{sc.init(e,t),ku.init(e,t),e._zod.processJSONSchema=(t,n,r)=>Xl(e,t,n,r),e.unwrap=()=>e._zod.def.innerType});function kd(e){return new Od({type:`nullable`,innerType:e})}var Ad=H(`ZodDefault`,(e,t)=>{cc.init(e,t),ku.init(e,t),e._zod.processJSONSchema=(t,n,r)=>Ql(e,t,n,r),e.unwrap=()=>e._zod.def.innerType,e.removeDefault=e.unwrap});function jd(e,t){return new Ad({type:`default`,innerType:e,get defaultValue(){return typeof t==`function`?t():ya(t)}})}var Md=H(`ZodPrefault`,(e,t)=>{uc.init(e,t),ku.init(e,t),e._zod.processJSONSchema=(t,n,r)=>$l(e,t,n,r),e.unwrap=()=>e._zod.def.innerType});function Nd(e,t){return new Md({type:`prefault`,innerType:e,get defaultValue(){return typeof t==`function`?t():ya(t)}})}var Pd=H(`ZodNonOptional`,(e,t)=>{dc.init(e,t),ku.init(e,t),e._zod.processJSONSchema=(t,n,r)=>Zl(e,t,n,r),e.unwrap=()=>e._zod.def.innerType});function Fd(e,t){return new Pd({type:`nonoptional`,innerType:e,...U(t)})}var Id=H(`ZodCatch`,(e,t)=>{pc.init(e,t),ku.init(e,t),e._zod.processJSONSchema=(t,n,r)=>eu(e,t,n,r),e.unwrap=()=>e._zod.def.innerType,e.removeCatch=e.unwrap});function Ld(e,t){return new Id({type:`catch`,innerType:e,catchValue:typeof t==`function`?t:()=>t})}var Rd=H(`ZodPipe`,(e,t)=>{mc.init(e,t),ku.init(e,t),e._zod.processJSONSchema=(t,n,r)=>tu(e,t,n,r),e.in=t.in,e.out=t.out});function zd(e,t){return new Rd({type:`pipe`,in:e,out:t})}var Bd=H(`ZodReadonly`,(e,t)=>{gc.init(e,t),ku.init(e,t),e._zod.processJSONSchema=(t,n,r)=>nu(e,t,n,r),e.unwrap=()=>e._zod.def.innerType});function Vd(e){return new Bd({type:`readonly`,innerType:e})}var Hd=H(`ZodCustom`,(e,t)=>{vc.init(e,t),ku.init(e,t),e._zod.processJSONSchema=(t,n,r)=>Hl(e,t,n,r)});function Ud(e,t={}){return wl(Hd,e,t)}function Wd(e,t){return Tl(e,t)}var Gd=e=>typeof e==`string`&&e.trim()?e.trim():null;function Kd(e){let t=e.decision_scope&&typeof e.decision_scope==`object`&&!Array.isArray(e.decision_scope)?e.decision_scope:{},n=Gd(t.kind),r=Gd(t.granularity),i=Gd(t.scope_key),a=Gd(e.superseded_by);return{interaction:e.task_class===`user_gate`?`decision`:`unknown`,lifecycle:a?`superseded`:e.status===`deferred`?`deferred`:e.done===!0||[`done`,`completed`,`closed`,`archived`].includes(String(e.status))?`closed`:e.status===`open`||e.status===`blocked`?`open`:`unknown`,reason:Gd(e.note),evidence:Gd(e.evidence),blocksAgent:Gd(e.blocks_agent),unblocksTodoId:Gd(e.unblocks_todo_id),decisionScope:n&&r&&i?{kind:n,granularity:r,scopeKey:i}:null,supersededBy:a}}function qd(e,t,n,r){return{...e,sourceId:t,goalTitle:r??e.goalTitle,details:n?e.details:{...e.details??Kd({}),lifecycle:`unavailable`}}}function Jd(e,t){return t.find(t=>t.sourceId===e.sourceId&&t.goalId===e.goalId&&t.todoId===e.todoId)||{...e,details:{...e.details??Kd({}),lifecycle:`unavailable`}}}function Yd(e,t){let n=e.details?.supersededBy;if(!(!n||n===e.todoId||e.details?.lifecycle===`unavailable`))return t.find(t=>t.sourceId===e.sourceId&&t.goalId===e.goalId&&t.todoId===n)}function Xd(e){return![`closed`,`deferred`,`superseded`,`unavailable`].includes(e.details?.lifecycle??`unknown`)}var Zd={ok:!0,registry:`$HOME/.codex/loopx/registry.global.json`,runtime_root:`$HOME/.codex/loopx`,goal_count:1,run_count:8440,status_contract:{schema_version:2,minimum_dashboard_schema_version:2,producer:`loopx status`,reload_hint:`scripts/macos-dashboard-launchagent.sh restart`},usage_summary:{available:!0,source:`run_history`,generated_at:`2026-07-06T06:49:06.471166+00:00`,sample_run_count:20,proxy_note:`run-history proxy; excludes token counts and raw thread logs`,totals:{runs_24h:20,runs_7d:20,quota_spend_slots_24h:11,quota_spend_slots_7d:11,automation_run_count_24h:11,automation_run_count_7d:11,progress_signal_run_count_24h:9,progress_signal_run_count_7d:9},goals:[{goal_id:`loopx-meta`,runs_24h:20,runs_7d:20,quota_spend_slots_24h:11,quota_spend_slots_7d:11,automation_run_count_24h:11,automation_run_count_7d:11,progress_signal_run_count_24h:9,progress_signal_run_count_7d:9,project_share_24h:1}]},event_ledger_summary:{available:!0,source:`run_history`,generated_at:`2026-07-06T06:49:06.360662+00:00`,sample_run_count:20,proxy_note:`append-only run-history projection; compact event-class counts only`,event_classes:[`accounting`,`decision`,`evidence`,`state`,`work`],totals:{events_24h:20,events_7d:20,by_class_24h:{accounting:11,decision:0,evidence:0,state:0,work:9},by_class_7d:{accounting:11,decision:0,evidence:0,state:0,work:9}},goals:[{goal_id:`loopx-meta`,events_24h:20,events_7d:20,by_class_24h:{accounting:11,decision:0,evidence:0,state:0,work:9},by_class_7d:{accounting:11,decision:0,evidence:0,state:0,work:9},latest_event_class:`accounting`,latest_event_at:`2026-07-06T14:37:32+08:00`}]},promotion_readiness_summary:{available:!0,source:`run_history_full_scan`,goal_id:`loopx-meta`,generated_at:`2026-07-05T20:02:02+08:00`,classification:`canary_promotion_readiness_smoke_group`,delivery_batch_scale:`multi_surface`,delivery_outcome:`primary_goal_outcome`,recommended_action:`Canary promotion-readiness smoke passed; promotion may proceed after doctor/status reports fresh evidence.`,json_exists:!0,markdown_exists:!0,freshness_window_hours:24,freshness_status:`fresh`,is_fresh:!0,requires_readiness_run:!1,age_seconds:67624,age_hours:18.78,freshness_reference_time:`2026-07-06T06:49:06.408527+00:00`,sample_run_count:0,proxy_note:`canary promotion-readiness projection from append-only run history; exact evidence stays in run artifacts`},promotion_gate:{ok:!0,registry:`$HOME/.codex/loopx/registry.global.json`,runtime_root:`$HOME/.codex/loopx`,gate:`promotion_readiness`,gate_state:`ready`,can_promote:!0,should_warn:!1,non_blocking:!0,recommended_action:`promotion readiness is fresh`,readiness:{available:!0,goal_id:`loopx-meta`,generated_at:`2026-07-05T20:02:02+08:00`,classification:`canary_promotion_readiness_smoke_group`,delivery_batch_scale:`multi_surface`,delivery_outcome:`primary_goal_outcome`,recommended_action:`Canary promotion-readiness smoke passed; promotion may proceed after doctor/status reports fresh evidence.`,json_exists:!0,markdown_exists:!0,runtime_root:`$HOME/.codex/loopx`,freshness_window_hours:24,freshness_status:`fresh`,is_fresh:!0,requires_readiness_run:!1,age_seconds:67624,age_hours:18.78,freshness_reference_time:`2026-07-06T06:49:06.471087+00:00`}},decision_freshness_summary:{available:!0,source:`run_history`,generated_at:`2026-07-06T06:49:06.471133+00:00`,sample_run_count:20,window_days:7,proxy_note:`checkpointed decision freshness projection; rebase old decisions at the decision point before reuse`,summary:{decision_count:0,stale_count:0,rebase_required_count:0,fresh_count:0},items:[]},todo_index:JSON.parse(`{"schema_version":"todo_index_v0","source":"live_loopx_status_public_slice","total_count":12,"current_projected_count":12,"rollout_event_count":94,"item_limit":12,"items":[{"goal_id":"loopx-meta","index":0,"done":false,"text":"todo update recorded for todo_1596c3a678bb","schema_version":"todo_index_item_v0","todo_id":"todo_1596c3a678bb","role":"agent","status":"open","title":"todo update recorded for todo_1596c3a678bb","source":"rollout_event_log","agent_id":"codex-main-control","latest_event_kind":"todo_update","latest_event_at":"2026-07-06T06:33:32Z","latest_event_status":"open","event_count":7,"event_kinds":["todo_update"]},{"goal_id":"loopx-meta","index":24,"done":false,"text":"Monitor ArcticDB #3179 LoopX comment https://github.com/man-group/ArcticDB/issues/3179#issuecomment-4797835630 for metadata-only maintainer reply signal; do not read private material or reply again without owner approva…","schema_version":"todo_index_item_v0","todo_id":"todo_15bc0926a494","role":"agent","status":"open","priority":"P0-REVENUE MONITOR","title":"Monitor ArcticDB #3179 LoopX comment https://github.com/man-group/ArcticDB/issues/3179#issuecomment-4797835630 for metadata-only maintainer reply signal; do not read private material or reply again without owner approva…","archive_state":"active","source_section":"Agent Todo","source":"attention_queue","task_class":"continuous_monitor","action_kind":"github_public_reply_metadata_monitor","claimed_by":"codex-value-explorer","evidence":"autonomous replan: bounded current value-explorer monitor lane with explicit expires_at.","note":"Set bounded watch expiry for metadata-only public reply monitor; no catch-up after expiry.","updated_at":"2026-07-05T06:27:15+08:00"},{"goal_id":"loopx-meta","index":17,"done":false,"text":"Block direct merge of legacy PR #199 until it is rebased/rewritten onto LoopX: rename goal_harness paths/imports and goal-harness CLI strings to loopx, rerun launch-artifact-handle smoke, and verify it does not reintrod…","schema_version":"todo_index_item_v0","todo_id":"todo_2bf560b48a0c","role":"agent","status":"open","priority":"P0","title":"Block direct merge of legacy PR #199 until it is rebased/rewritten onto LoopX: rename goal_harness paths/imports and goal-harness CLI strings to loopx, rerun launch-artifact-handle smoke, and verify it does not reintrod…","archive_state":"active","source_section":"Agent Todo","source":"attention_queue","task_class":"blocker","action_kind":"legacy_open_pr_rename_blocker","claimed_by":"codex-main-control"},{"goal_id":"loopx-meta","index":23,"done":false,"text":"Fix or bypass local SkillsBench Docker verifier reward collection before using local fallback for canonical base/test comparison; organize-messy-files base on merged #668 reached final verifier but produced empty verifi…","schema_version":"todo_index_item_v0","todo_id":"todo_3ed1c4a69164","role":"agent","status":"open","priority":"P0","title":"Fix or bypass local SkillsBench Docker verifier reward collection before using local fallback for canonical base/test comparison; organize-messy-files base on merged #668 reached final verifier but produced empty verifi…","archive_state":"active","source_section":"Agent Todo","source":"attention_queue","task_class":"blocker","action_kind":"skillsbench_local_verifier_reward_collection","claimed_by":"codex-main-control","required_capabilities":["benchmark_runner"]},{"goal_id":"loopx-meta","index":32,"done":false,"text":"Rerun SkillsBench raw vs loopx-goal-start-product-mode on citation-check and powerlifting with PR #779 merged; inspect compact public counters for soft_verify_exception_continued, probe_operation_count, task-facing solv…","schema_version":"todo_index_item_v0","todo_id":"todo_44907a5f355d","role":"agent","status":"blocked","priority":"P0","title":"Rerun SkillsBench raw vs loopx-goal-start-product-mode on citation-check and powerlifting with PR #779 merged; inspect compact public counters for soft_verify_exception_continued, probe_operation_count, task-facing solv…","archive_state":"active","source_section":"Agent Todo","source":"attention_queue","task_class":"advancement_task","action_kind":"skillsbench_goal_start_raw_new_rerun","claimed_by":"codex-main-control","evidence":"Public-safe redacted live LoopX text; inspect local status for the full row.","note":"Do not spend a full citation-check loopx rerun yet: #865 fixed scored output paths and #874 added bootstrap preflight attribution, but citation-check itself still preflights as apt+verifier bootstrap risk on ECS.","updated_at":"2026-06-29T00:49:36+08:00"},{"goal_id":"loopx-meta","index":39,"done":false,"text":"Run the next SkillsBench loopx-goal-start-product-mode reverse-channel case on latest main (no local Docker), prioritizing a currently bad or uncertain case, then update the public case ledger and true LoopX issue analy…","schema_version":"todo_index_item_v0","todo_id":"todo_4762c790e583","role":"agent","status":"blocked","priority":"P0","title":"Run the next SkillsBench loopx-goal-start-product-mode reverse-channel case on latest main (no local Docker), prioritizing a currently bad or uncertain case, then update the public case ledger and true LoopX issue analy…","archive_state":"active","source_section":"Agent Todo","source":"attention_queue","task_class":"advancement_task","action_kind":"skillsbench_goal_start_remote_rerun","claimed_by":"codex-main-control","evidence":"A prior benchmark adapter change was validated before the legacy surface was archived. Current research uses the RFC-linked benchmark workspace and toolkit boundary smokes.","note":"2026-06-29: fixed host-local ACP idle/no-output root cause in PR #894. ACP protocol tool_call_count=0 is now distinguished from reverse-channel task-facing bridge activity; repeated codex_exec_bridge_idle_timeout withou…","updated_at":"2026-06-29T19:40:32+08:00"},{"goal_id":"loopx-meta","index":0,"done":false,"text":"todo add recorded for todo_584f55f8f3b4","schema_version":"todo_index_item_v0","todo_id":"todo_584f55f8f3b4","role":"agent","status":"open","title":"todo add recorded for todo_584f55f8f3b4","source":"rollout_event_log","agent_id":"codex-value-explorer","latest_event_kind":"todo_update","latest_event_at":"2026-07-06T06:48:49Z","latest_event_status":"open","event_count":3,"event_kinds":["todo_add","todo_update"]},{"goal_id":"loopx-meta","index":40,"done":false,"text":"Monitor r10 SkillsBench 30-case codex-app-server-goal-baseline batch, summarize completed compact results into the common case ledger, and stop/repair if setup/bootstrap creates new non-solver blockers.","schema_version":"todo_index_item_v0","todo_id":"todo_62debf065fec","role":"agent","status":"blocked","priority":"P0 MONITOR","title":"Monitor r10 SkillsBench 30-case codex-app-server-goal-baseline batch, summarize completed compact results into the common case ledger, and stop/repair if setup/bootstrap creates new non-solver blockers.","archive_state":"active","source_section":"Agent Todo","source":"attention_queue","task_class":"continuous_monitor","action_kind":"monitor_skillsbench_batch","claimed_by":"codex-main-control","evidence":"Observed 2026-06-30T02:52+08: active-state target_key=skillsbench-goal-baseline-30case-20260629T1826Z-r10; local ps/tmux/recent artifact search found no r10 batch process or compact artifact; no raw task/log/trajectory …","updated_at":"2026-06-30T02:54:54+08:00"},{"goal_id":"loopx-meta","index":0,"done":false,"text":"todo add recorded for todo_93bc6439c521","schema_version":"todo_index_item_v0","todo_id":"todo_93bc6439c521","role":"agent","status":"open","title":"todo add recorded for todo_93bc6439c521","source":"rollout_event_log","agent_id":"codex-main-control","latest_event_kind":"todo_claim","latest_event_at":"2026-07-06T06:32:52Z","latest_event_status":"open","event_count":2,"event_kinds":["todo_add","todo_claim"]},{"goal_id":"loopx-meta","index":27,"done":false,"text":"Run the SkillsBench two-arm comparison after the goal-start route is countable: raw Codex vs new loopx-goal-start-product-mode, reporting task_score/control_score/time and compact public-safe LoopX todo rollout evidence.","schema_version":"todo_index_item_v0","todo_id":"todo_aad7e9716927","role":"agent","status":"blocked","priority":"P0","title":"Run the SkillsBench two-arm comparison after the goal-start route is countable: raw Codex vs new loopx-goal-start-product-mode, reporting task_score/control_score/time and compact public-safe LoopX todo rollout evidence.","archive_state":"active","source_section":"Agent Todo","source":"attention_queue","task_class":"advancement_task","action_kind":"run_goal_start_product_mode_matrix","claimed_by":"codex-main-control","evidence":"driver.status shows DONE raw then RUN loopx-goal-start with no running driver; raw benchmark_run.compact first_blocker=skillsbench_codex_acp_provider_zero_activity; source guard requires --host-local-acp-launch for Loop…","note":"Remote run group skillsbench-raw-new-goal-start-20260627T0420Z produced a material closeout for citation-check raw only; raw compact attribution is skillsbench_codex_acp_provider_zero_activity with official score missin…","updated_at":"2026-06-27T13:05:47+08:00"},{"goal_id":"loopx-meta","index":21,"done":false,"text":"Observe remote official SkillsBench powerlifting-coef-calc base/test runtime-layer mountfix pair skillsbench-powerlifting-coef-calc-remote-canonical-runtime-mountfix-pair-20260623T022028Z: use compact/public artifacts o…","schema_version":"todo_index_item_v0","todo_id":"todo_aec1873c7f28","role":"agent","status":"open","priority":"P0 MONITOR","title":"Observe remote official SkillsBench powerlifting-coef-calc base/test runtime-layer mountfix pair skillsbench-powerlifting-coef-calc-remote-canonical-runtime-mountfix-pair-20260623T022028Z: use compact/public artifacts o…","archive_state":"active","source_section":"Agent Todo","source":"attention_queue","task_class":"continuous_monitor","claimed_by":"codex-main-control","note":"2026-06-23 projection fix: this is monitor context for the powerlifting run, not an advancement next action; current executable path is SkillsBench build cache/prewarm repair.","updated_at":"2026-06-23T10:37:43+08:00"},{"goal_id":"loopx-meta","index":0,"done":false,"text":"todo add recorded for todo_c02cb7d19607","schema_version":"todo_index_item_v0","todo_id":"todo_c02cb7d19607","role":"agent","status":"open","title":"todo add recorded for todo_c02cb7d19607","source":"rollout_event_log","agent_id":"codex-value-explorer","latest_event_kind":"todo_add","latest_event_at":"2026-07-06T03:47:54Z","latest_event_status":"open","event_count":1,"event_kinds":["todo_add"]}]}`),agent_management_projection:{schema_version:`agent_management_projection_v0`,mode:`read_only`,goal_id:`loopx-meta`,generated_at:`2026-07-06T06:49:06Z`,style_hint:null,truth_contract:{todo_is_runtime_work_item:!0,projection_is_writable:!1,introduces_task_runtime:!1,write_api:!1},source_summary:{registered_agent_count:4,projected_agent_count:4,todo_source:`live_loopx_status_public_slice`,public_safe_export:!0},agents:[{agent_id:`codex-main-control`,agent_model:`peer_v1`,profile_role:`release-validation`,state:`blocked`,next_action:`Continue projected todo todo_2bf560b48a0c.`,last_activity_at:`2026-06-29T00:49:36+08:00`,evidence_refs:[`todo:todo_e72afc24f04a:evidence`],goal_ids:[`loopx-meta`],stale_claim_hint:{state:`activity_missing`,claimed_by:`codex-main-control`,reason:`claimed open todo has no projected activity timestamp`,recommended_operator_action:`inspect evidence before considering reassignment`},current_todo:{schema_version:`todo_row_v0`,todo_id:`todo_2bf560b48a0c`,goal_id:`loopx-meta`,role:`agent`,status:`open`,priority:`P0`,title:`Block direct merge of legacy PR #199 until it is rebased/rewritten onto LoopX: rename goal_harn…`,task_class:`blocker`,action_kind:`legacy_open_pr_rename_blocker`,claimed_by:`codex-main-control`}},{agent_id:`codex-product-capability`,agent_model:`peer_v1`,profile_role:`product-validation`,state:`monitoring`,next_action:`Continue projected todo todo_ded745761822.`,last_activity_at:`2026-07-06T06:29:53Z`,evidence_refs:[`todo:todo_ded745761822:evidence`],goal_ids:[`loopx-meta`],current_todo:{schema_version:`todo_row_v0`,todo_id:`todo_ded745761822`,goal_id:`loopx-meta`,role:`agent`,status:`open`,priority:`P0-LOCAL`,title:`Public-safe redacted live LoopX text; inspect local status for the full row.`,task_class:`continuous_monitor`,action_kind:`Public-safe redacted live LoopX text; inspect local status for the full row.`,claimed_by:`codex-product-capability`,updated_at:`2026-07-04T20:22:45+08:00`}},{agent_id:`codex-side-bypass`,agent_model:`peer_v1`,profile_role:`implementation-validation`,state:`waiting`,next_action:`Inspect status projection before taking work.`,last_activity_at:`2026-07-06T06:32:16Z`,evidence_refs:[`rollout_event:todo_complete:todo_22c946938115`],goal_ids:[`loopx-meta`]},{agent_id:`codex-value-explorer`,agent_model:`peer_v1`,profile_role:`value-exploration`,state:`monitoring`,next_action:`Continue projected todo todo_584f55f8f3b4.`,last_activity_at:`2026-07-06T09:39:59+08:00`,evidence_refs:[`rollout_event:todo_update:todo_584f55f8f3b4`],goal_ids:[`loopx-meta`],current_todo:{schema_version:`todo_row_v0`,todo_id:`todo_584f55f8f3b4`,goal_id:`loopx-meta`,role:`agent`,status:`open`,title:`todo add recorded for todo_584f55f8f3b4`}}]},contract:{ok:!0,summary:{errors:0,warnings:1,checks:6},errors:[],warnings:["loopx-meta: duplicate index rows raw=8444 unique=8440 unexpected=3 artifact_identity_collisions=2 artifact_collision_rows=3 reward_overlays=1; inspect with `loopx history --goal-id loopx-meta inspect-index-duplicates`; artifact identity collisions need review…"],checks:[`registry goals checked: 12`,`registry boundary: shared_local_registry push_allowed=False tracked=False ignored=False`,`user-gate scopes checked: 6 open multi-agent gates`,`runtime root resolved: $HOME/.codex/loopx`,`run-history goals=28 runs=10210`,`public boundary scan clean: 1218 files`]},global_registry:{available:!0,ok:!0,registry:`$HOME/.codex/loopx/registry.global.json`,current_registry:`$HOME/.codex/loopx/registry.global.json`,current_registry_is_global:!0,global_goal_count:12,current_goal_count:12,source_registry_count:7,summary:{high:0,action:8,info:0,checks:2,findings:8},findings:[{kind:`source_registry_missing`,severity:`action`,message:"`cc-test` source registry is missing",recommended_action:"reconnect `cc-test` from its project or archive it if the project is obsolete",goal_id:`cc-test`,path:`Public-safe redacted live LoopX text; inspect local status for the full row.`},{kind:`state_file_missing`,severity:`action`,message:"`cc-test` active state file is missing",recommended_action:"repair `cc-test` state_file or reconnect the project",goal_id:`cc-test`,path:`Public-safe redacted live LoopX text; inspect local status for the full row.`},{kind:`source_registry_missing`,severity:`action`,message:"`cc-tmp` source registry is missing",recommended_action:"reconnect `cc-tmp` from its project or archive it if the project is obsolete",goal_id:`cc-tmp`,path:`Public-safe redacted live LoopX text; inspect local status for the full row.`},{kind:`state_file_missing`,severity:`action`,message:"`cc-tmp` active state file is missing",recommended_action:"repair `cc-tmp` state_file or reconnect the project",goal_id:`cc-tmp`,path:`Public-safe redacted live LoopX text; inspect local status for the full row.`},{kind:`source_registry_missing`,severity:`action`,message:"`cc-tmp-xdrchpuaul` source registry is missing",recommended_action:"reconnect `cc-tmp-xdrchpuaul` from its project or archive it if the project is obsolete",goal_id:`cc-tmp-xdrchpuaul`,path:`Public-safe redacted live LoopX text; inspect local status for the full row.`},{kind:`state_file_missing`,severity:`action`,message:"`cc-tmp-xdrchpuaul` active state file is missing",recommended_action:"repair `cc-tmp-xdrchpuaul` state_file or reconnect the project",goal_id:`cc-tmp-xdrchpuaul`,path:`Public-safe redacted live LoopX text; inspect local status for the full row.`},{kind:`source_registry_missing`,severity:`action`,message:"`loopx-auto-research-e2e-probe-20260628-2225-goal` source registry is missing",recommended_action:"reconnect `loopx-auto-research-e2e-probe-20260628-2225-goal` from its project or archive it if the project is obsolete",goal_id:`loopx-auto-research-e2e-probe-20260628-2225-goal`,path:`Public-safe redacted live LoopX text; inspect local status for the full row.`},{kind:`state_file_missing`,severity:`action`,message:"`loopx-auto-research-e2e-probe-20260628-2225-goal` active state file is missing",recommended_action:"repair `loopx-auto-research-e2e-probe-20260628-2225-goal` state_file or reconnect the project",goal_id:`loopx-auto-research-e2e-probe-20260628-2225-goal`,path:`Public-safe redacted live LoopX text; inspect local status for the full row.`}],checks:[`global registry goals checked: 12`,`global source registries checked: 7`]},attention_queue:JSON.parse(`{"available":true,"item_count":1,"needs_user_or_controller":0,"needs_controller":0,"needs_codex":1,"watching_external_evidence":0,"items":[{"goal_id":"loopx-meta","status":"skillsbench_codex_cli_goal_tail4_keepalive_relaunched","lifecycle_phase":"adapter_inspected","lifecycle_flags":["adapter_inspected"],"waiting_on":"codex","severity":"action","recommended_action":"Monitor run_group skillsbench-codex-cli-goal-xhigh-tail4-keepalive-20260706T143132CST using public compact/public artifacts only; once benchmark_run.compact.json lands for each case, classify launcher/case/solver/verifi…","source":"latest_run","quota":{"compute":1.0,"window_hours":24,"slot_minutes":1,"allowed_slots":1440,"spent_slots":97,"state":"eligible","reason":"1 compute quota; eligible for the next automatic agent turn"},"agent_todos":{"source_section":"Agent Todo","total_count":12,"open_count":12,"done_count":0,"items":[{"goal_id":"loopx-meta","index":0,"done":false,"text":"todo update recorded for todo_1596c3a678bb","schema_version":"todo_index_item_v0","todo_id":"todo_1596c3a678bb","role":"agent","status":"open","title":"todo update recorded for todo_1596c3a678bb","source":"rollout_event_log","agent_id":"codex-main-control","latest_event_kind":"todo_update","latest_event_at":"2026-07-06T06:33:32Z","latest_event_status":"open","event_count":7,"event_kinds":["todo_update"]},{"goal_id":"loopx-meta","index":24,"done":false,"text":"Monitor ArcticDB #3179 LoopX comment https://github.com/man-group/ArcticDB/issues/3179#issuecomment-4797835630 for metadata-only maintainer reply signal; do not read private material or reply again without owner approva…","schema_version":"todo_index_item_v0","todo_id":"todo_15bc0926a494","role":"agent","status":"open","priority":"P0-REVENUE MONITOR","title":"Monitor ArcticDB #3179 LoopX comment https://github.com/man-group/ArcticDB/issues/3179#issuecomment-4797835630 for metadata-only maintainer reply signal; do not read private material or reply again without owner approva…","archive_state":"active","source_section":"Agent Todo","source":"attention_queue","task_class":"continuous_monitor","action_kind":"github_public_reply_metadata_monitor","claimed_by":"codex-value-explorer","evidence":"autonomous replan: bounded current value-explorer monitor lane with explicit expires_at.","note":"Set bounded watch expiry for metadata-only public reply monitor; no catch-up after expiry.","updated_at":"2026-07-05T06:27:15+08:00"},{"goal_id":"loopx-meta","index":17,"done":false,"text":"Block direct merge of legacy PR #199 until it is rebased/rewritten onto LoopX: rename goal_harness paths/imports and goal-harness CLI strings to loopx, rerun launch-artifact-handle smoke, and verify it does not reintrod…","schema_version":"todo_index_item_v0","todo_id":"todo_2bf560b48a0c","role":"agent","status":"open","priority":"P0","title":"Block direct merge of legacy PR #199 until it is rebased/rewritten onto LoopX: rename goal_harness paths/imports and goal-harness CLI strings to loopx, rerun launch-artifact-handle smoke, and verify it does not reintrod…","archive_state":"active","source_section":"Agent Todo","source":"attention_queue","task_class":"blocker","action_kind":"legacy_open_pr_rename_blocker","claimed_by":"codex-main-control"},{"goal_id":"loopx-meta","index":23,"done":false,"text":"Fix or bypass local SkillsBench Docker verifier reward collection before using local fallback for canonical base/test comparison; organize-messy-files base on merged #668 reached final verifier but produced empty verifi…","schema_version":"todo_index_item_v0","todo_id":"todo_3ed1c4a69164","role":"agent","status":"open","priority":"P0","title":"Fix or bypass local SkillsBench Docker verifier reward collection before using local fallback for canonical base/test comparison; organize-messy-files base on merged #668 reached final verifier but produced empty verifi…","archive_state":"active","source_section":"Agent Todo","source":"attention_queue","task_class":"blocker","action_kind":"skillsbench_local_verifier_reward_collection","claimed_by":"codex-main-control","required_capabilities":["benchmark_runner"]},{"goal_id":"loopx-meta","index":32,"done":false,"text":"Rerun SkillsBench raw vs loopx-goal-start-product-mode on citation-check and powerlifting with PR #779 merged; inspect compact public counters for soft_verify_exception_continued, probe_operation_count, task-facing solv…","schema_version":"todo_index_item_v0","todo_id":"todo_44907a5f355d","role":"agent","status":"blocked","priority":"P0","title":"Rerun SkillsBench raw vs loopx-goal-start-product-mode on citation-check and powerlifting with PR #779 merged; inspect compact public counters for soft_verify_exception_continued, probe_operation_count, task-facing solv…","archive_state":"active","source_section":"Agent Todo","source":"attention_queue","task_class":"advancement_task","action_kind":"skillsbench_goal_start_raw_new_rerun","claimed_by":"codex-main-control","evidence":"Public-safe redacted live LoopX text; inspect local status for the full row.","note":"Do not spend a full citation-check loopx rerun yet: #865 fixed scored output paths and #874 added bootstrap preflight attribution, but citation-check itself still preflights as apt+verifier bootstrap risk on ECS.","updated_at":"2026-06-29T00:49:36+08:00"},{"goal_id":"loopx-meta","index":39,"done":false,"text":"Run the next SkillsBench loopx-goal-start-product-mode reverse-channel case on latest main (no local Docker), prioritizing a currently bad or uncertain case, then update the public case ledger and true LoopX issue analy…","schema_version":"todo_index_item_v0","todo_id":"todo_4762c790e583","role":"agent","status":"blocked","priority":"P0","title":"Run the next SkillsBench loopx-goal-start-product-mode reverse-channel case on latest main (no local Docker), prioritizing a currently bad or uncertain case, then update the public case ledger and true LoopX issue analy…","archive_state":"active","source_section":"Agent Todo","source":"attention_queue","task_class":"advancement_task","action_kind":"skillsbench_goal_start_remote_rerun","claimed_by":"codex-main-control","evidence":"A prior benchmark adapter change was validated before the legacy surface was archived. Current research uses the RFC-linked benchmark workspace and toolkit boundary smokes.","note":"2026-06-29: fixed host-local ACP idle/no-output root cause in PR #894. ACP protocol tool_call_count=0 is now distinguished from reverse-channel task-facing bridge activity; repeated codex_exec_bridge_idle_timeout withou…","updated_at":"2026-06-29T19:40:32+08:00"},{"goal_id":"loopx-meta","index":0,"done":false,"text":"todo add recorded for todo_584f55f8f3b4","schema_version":"todo_index_item_v0","todo_id":"todo_584f55f8f3b4","role":"agent","status":"open","title":"todo add recorded for todo_584f55f8f3b4","source":"rollout_event_log","agent_id":"codex-value-explorer","latest_event_kind":"todo_update","latest_event_at":"2026-07-06T06:48:49Z","latest_event_status":"open","event_count":3,"event_kinds":["todo_add","todo_update"]},{"goal_id":"loopx-meta","index":40,"done":false,"text":"Monitor r10 SkillsBench 30-case codex-app-server-goal-baseline batch, summarize completed compact results into the common case ledger, and stop/repair if setup/bootstrap creates new non-solver blockers.","schema_version":"todo_index_item_v0","todo_id":"todo_62debf065fec","role":"agent","status":"blocked","priority":"P0 MONITOR","title":"Monitor r10 SkillsBench 30-case codex-app-server-goal-baseline batch, summarize completed compact results into the common case ledger, and stop/repair if setup/bootstrap creates new non-solver blockers.","archive_state":"active","source_section":"Agent Todo","source":"attention_queue","task_class":"continuous_monitor","action_kind":"monitor_skillsbench_batch","claimed_by":"codex-main-control","evidence":"Observed 2026-06-30T02:52+08: active-state target_key=skillsbench-goal-baseline-30case-20260629T1826Z-r10; local ps/tmux/recent artifact search found no r10 batch process or compact artifact; no raw task/log/trajectory …","updated_at":"2026-06-30T02:54:54+08:00"},{"goal_id":"loopx-meta","index":0,"done":false,"text":"todo add recorded for todo_93bc6439c521","schema_version":"todo_index_item_v0","todo_id":"todo_93bc6439c521","role":"agent","status":"open","title":"todo add recorded for todo_93bc6439c521","source":"rollout_event_log","agent_id":"codex-main-control","latest_event_kind":"todo_claim","latest_event_at":"2026-07-06T06:32:52Z","latest_event_status":"open","event_count":2,"event_kinds":["todo_add","todo_claim"]},{"goal_id":"loopx-meta","index":27,"done":false,"text":"Run the SkillsBench two-arm comparison after the goal-start route is countable: raw Codex vs new loopx-goal-start-product-mode, reporting task_score/control_score/time and compact public-safe LoopX todo rollout evidence.","schema_version":"todo_index_item_v0","todo_id":"todo_aad7e9716927","role":"agent","status":"blocked","priority":"P0","title":"Run the SkillsBench two-arm comparison after the goal-start route is countable: raw Codex vs new loopx-goal-start-product-mode, reporting task_score/control_score/time and compact public-safe LoopX todo rollout evidence.","archive_state":"active","source_section":"Agent Todo","source":"attention_queue","task_class":"advancement_task","action_kind":"run_goal_start_product_mode_matrix","claimed_by":"codex-main-control","evidence":"driver.status shows DONE raw then RUN loopx-goal-start with no running driver; raw benchmark_run.compact first_blocker=skillsbench_codex_acp_provider_zero_activity; source guard requires --host-local-acp-launch for Loop…","note":"Remote run group skillsbench-raw-new-goal-start-20260627T0420Z produced a material closeout for citation-check raw only; raw compact attribution is skillsbench_codex_acp_provider_zero_activity with official score missin…","updated_at":"2026-06-27T13:05:47+08:00"},{"goal_id":"loopx-meta","index":21,"done":false,"text":"Observe remote official SkillsBench powerlifting-coef-calc base/test runtime-layer mountfix pair skillsbench-powerlifting-coef-calc-remote-canonical-runtime-mountfix-pair-20260623T022028Z: use compact/public artifacts o…","schema_version":"todo_index_item_v0","todo_id":"todo_aec1873c7f28","role":"agent","status":"open","priority":"P0 MONITOR","title":"Observe remote official SkillsBench powerlifting-coef-calc base/test runtime-layer mountfix pair skillsbench-powerlifting-coef-calc-remote-canonical-runtime-mountfix-pair-20260623T022028Z: use compact/public artifacts o…","archive_state":"active","source_section":"Agent Todo","source":"attention_queue","task_class":"continuous_monitor","claimed_by":"codex-main-control","note":"2026-06-23 projection fix: this is monitor context for the powerlifting run, not an advancement next action; current executable path is SkillsBench build cache/prewarm repair.","updated_at":"2026-06-23T10:37:43+08:00"},{"goal_id":"loopx-meta","index":0,"done":false,"text":"todo add recorded for todo_c02cb7d19607","schema_version":"todo_index_item_v0","todo_id":"todo_c02cb7d19607","role":"agent","status":"open","title":"todo add recorded for todo_c02cb7d19607","source":"rollout_event_log","agent_id":"codex-value-explorer","latest_event_kind":"todo_add","latest_event_at":"2026-07-06T03:47:54Z","latest_event_status":"open","event_count":1,"event_kinds":["todo_add"]}]}}]}`),run_history:{available:!0,goal_count:1,run_count:5,goals:[{id:`loopx-meta`,domain:`loopx-platform`,status:`active-read-only`,lifecycle_phase:`adapter_inspected`,lifecycle_flags:[`adapter_inspected`],registry_member:!0,legacy_runtime_goal:!1,adapter_kind:`harness_self_improvement`,adapter_status:`connected-read-only`,index_exists:!0,raw_index_records:8444,unique_runs:8440,quota:{compute:1,window_hours:24,slot_minutes:1,allowed_slots:1440,spent_slots:97,state:`waiting`,reason:`no active Codex-ready work is currently selected`},latest_runs:[{generated_at:`2026-07-06T14:37:32+08:00`,goal_id:`loopx-meta`,classification:`quota_slot_spent`,agent_id:`codex-value-explorer`,recommended_action:`审阅 PR #1524 的 Agent Management 面板视觉方向:workspace hint 与 stale claim hint 是否符合预期;确认后允许 codex-value-explorer 自合并。`,health_check:`quota safe-bypass operator gate; quota slot spend event public-safe`,json_exists:!0,markdown_exists:!0,lifecycle_phase:`adapter_inspected`,lifecycle_flags:[`adapter_inspected`]},{generated_at:`2026-07-06T14:33:55+08:00`,goal_id:`loopx-meta`,classification:`quota_slot_spent`,agent_id:`codex-main-control`,recommended_action:`[P1] Repair SkillsBench post-run debug gate consistency for countable codex-cli-goal official-zero runs: when attempt_accounting is countable and case_closeout_complete=true, do not project first_blocker=loopx_closeout_…`,health_check:`quota should-run eligible; quota slot spend event public-safe`,json_exists:!0,markdown_exists:!0,lifecycle_phase:`adapter_inspected`,lifecycle_flags:[`adapter_inspected`]},{generated_at:`2026-07-06T14:33:54+08:00`,goal_id:`loopx-meta`,classification:`skillsbench_codex_cli_goal_tail4_keepalive_relaunched`,agent_id:`codex-main-control`,progress_scope:`goal`,delivery_batch_scale:`single_surface`,delivery_outcome:`outcome_progress`,recommended_action:`Monitor run_group skillsbench-codex-cli-goal-xhigh-tail4-keepalive-20260706T143132CST using public compact/public artifacts only; once benchmark_run.compact.json lands for each case, classify launcher/case/solver/verifi…`,health_check:`state_file 1/1; registry_goal 1/1; authority_sources 10`,json_exists:!0,markdown_exists:!0,lifecycle_phase:`adapter_inspected`,lifecycle_flags:[`adapter_inspected`]},{generated_at:`2026-07-06T14:33:34+08:00`,goal_id:`loopx-meta`,classification:`quota_slot_spent`,agent_id:`codex-side-bypass`,recommended_action:`[P0] Rerun real KNN visible auto-research after the successor-link fix and verify evaluator completion projects a second-round hypothesis/frontier or explicit completion gate without manual intervention; keep evidence p…`,health_check:`quota should-run eligible; quota slot spend event public-safe`,json_exists:!0,markdown_exists:!0,lifecycle_phase:`adapter_inspected`,lifecycle_flags:[`adapter_inspected`]},{generated_at:`2026-07-06T14:32:57+08:00`,goal_id:`loopx-meta`,classification:`auto_research_successor_link_fix_merged`,agent_id:`codex-side-bypass`,progress_scope:`agent_lane`,delivery_batch_scale:`implementation`,delivery_outcome:`outcome_progress`,recommended_action:`[P0] Rerun real KNN visible auto-research after the successor-link fix and verify evaluator completion projects a second-round hypothesis/frontier or explicit completion gate without manual intervention; keep evidence p…`,health_check:`state_file 1/1; registry_goal 1/1; authority_sources 0`,json_exists:!0,markdown_exists:!0,lifecycle_phase:`adapter_inspected`,lifecycle_flags:[`adapter_inspected`]}]}]}},Qd=W().nullable(),$d=pd(`enabled`,[J({enabled:X(!1)}),J({enabled:X(!0),revision:G().int().positive(),digest:W().min(1),objective:W(),non_goals:q(W()),held_todo_ids:q(W()),status:Y([`unverified`,`stale`,`failed`,`partial`,`accepted`,`held`]),criteria:q(J({id:W(),description:W()})),tasks:q(J({todo_id:W(),state:Y([`ready`,`unbound`,`stale`]),criterion_ids:q(W()),reason:W().optional(),reason_code:W().optional(),applicable:K().optional()})),verification:J({operation_id:W(),contract_revision:G().int().positive(),contract_digest:W(),todo_id:W().nullable(),results:q(J({criterion_id:W(),passed:K(),exit_code:G().int().nullable()}))}).nullable()})]),ef=J({schema_version:X(`goal_acceptance_observation_projection_v0`),goal_id:W(),read_only:X(!0),acceptance_assessed:X(!1),coverage:Y([`partial`,`unavailable`]),missing_sources:q(W()),truncated:K(),historical_progress:q(J({kind:W(),observed_at:Qd,source:W(),evidence_refs:q(W())})),acceptance_gaps:q(J({kind:W(),owner:Qd,reason:Qd,evidence_required:Qd,observed_at:Qd,source:W(),reason_code:W().optional(),resolution_hint:W().optional(),component_checks:J({checkpoint_satisfied:K(),checkpoint_fresh:K(),path_outcome_valid:K(),evidence_refs_present:K(),final_outcome_claim_present:K(),no_reported_outcome_gap:K()}).optional()})),guards:q(J({kind:W(),todo_id:Qd,blocks_agent:Qd,owner:Qd,reason:Qd,evidence_required:Qd,decision_scope:Qd})),next_action:Qd,next_action_source:Qd,goal_acceptance_contract:$d.optional()}),tf=dd([W(),G(),K(),rd()]),nf=yd(W(),tf),rf=J({todo_id:W().optional(),priority:W().optional(),status:W(),title:W(),claimed_by:W().optional(),task_class:W().optional(),action_kind:W().optional()}),af=J({gate_id:W(),kind:W(),status:W(),blocks:q(W()).optional()}),of=J({todo_id:W().optional(),owner_agent:W().optional(),status:W().optional(),lease_until:W().optional(),write_scope:q(W()).optional()}),sf=J({generated_at:W().optional(),classification:W().optional(),summary:W().optional()}),cf=J({kind:W().optional().default(`warning`),message:dd([W(),q(W())]).optional().default(`compact source warning`)}).passthrough(),lf=J({schema_version:X(`goal_channel_projection_v0`),mode:X(`read_only`),goal_id:W(),display_name:W(),generated_at:W().optional().nullable(),latest_status:W(),waiting_on:W(),next_action:W(),source_refs:yd(W(),tf),decision_frame:J({user_action_required:K(),agent_action_required:K(),quiet_noop_allowed:K()}),quota:nf,user_todos:q(rf).default([]),agent_todos:q(rf).default([]),open_gates:q(af).default([]),active_leases:q(of).default([]),artifacts:q(nf).default([]),recent_events:q(sf).default([]),source_warnings:q(cf).default([]),truth_contract:J({event_ledger_is_source_of_truth:K(),projection_is_writable:K(),recompute_rule:W(),write_authority:W()})}),uf=J({compute:G().optional().default(1),window_hours:G().optional().default(24),slot_minutes:G().optional().default(1),allowed_slots:G().optional().nullable(),spent_slots:G().optional().default(0),state:W().optional().nullable(),next_eligible_at:W().optional().nullable(),reason:W().optional().nullable(),blocked_action_scope:W().optional().nullable(),focus_wait:K().optional().nullable(),handoff_outcome_floor_block:K().optional().nullable(),safe_bypass_allowed:K().optional().default(!1),safe_bypass_kind:W().optional().nullable(),safe_bypass_policy:W().optional().nullable(),post_handoff_outcome_gap_streak:G().optional().nullable(),outcome_gap_threshold:G().optional().nullable(),must_advance:q(W()).optional().default([]),avoid:q(W()).optional().default([])}).transform(e=>{let t=Math.max(1,e.slot_minutes),n=Math.round(e.window_hours*60*e.compute/t);return{...e,slot_minutes:t,allowed_slots:e.allowed_slots??n}}),df=J({self_repair:J({enabled:K().optional().default(!1),allow_health_blocker_repair:K().optional().default(!1),allow_waiting_projection_repair:K().optional().default(!1)}).optional().nullable()}).passthrough(),ff=J({model_config:J({model:W(),reasoning_effort:W().optional()}).optional(),mode:W().optional().default(`default`),orchestration_mode:W().optional().nullable(),spawn_allowed:K().optional().default(!1),allowed:K().optional().nullable(),max_children:G().optional().default(0),allowed_domains:q(W()).optional().default([])}).passthrough(),pf=J({label:W().optional().nullable(),path:W(),anchor:W().optional().nullable(),exists:K().optional().default(!1),resolved_path:W().optional().nullable()}),mf=J({index:G(),done:K(),text:W(),schema_version:W().optional().nullable(),todo_id:W().optional().nullable(),role:W().optional().nullable(),status:W().optional().nullable(),resume_when:W().optional().nullable(),resume_ready:K().optional().nullable(),resume_condition:yd(W(),ad()).optional().nullable(),priority:W().optional().nullable(),title:W().optional().nullable(),archive_state:W().optional().nullable(),source_section:W().optional().nullable(),task_class:W().optional().nullable(),task_domain:W().optional().nullable(),action_kind:W().optional().nullable(),claimed_by:W().optional().nullable(),required_capabilities:q(W()).optional(),note:W().optional().nullable(),evidence:W().optional().nullable(),updated_at:W().optional().nullable(),review_materials:q(pf).optional().default([])}).passthrough(),hf=J({source_section:W().optional().nullable(),total_count:G().optional().default(0),open_count:G().optional().default(0),done_count:G().optional().default(0),advancement_done_count:G().optional(),items:q(mf).optional().default([]),deferred_items:q(mf).optional()}),gf=mf.extend({goal_id:W(),source:W().optional().nullable(),event_count:G().optional().default(0),event_kinds:q(W()).optional().default([]),latest_event_kind:W().optional().nullable(),latest_event_at:W().optional().nullable(),latest_event_status:W().optional().nullable(),agent_id:W().optional().nullable()}).passthrough(),_f=J({schema_version:W().optional().nullable(),source:W().optional().nullable(),total_count:G().optional().default(0),current_projected_count:G().optional().default(0),rollout_event_count:G().optional().default(0),item_limit:G().optional().nullable(),items:q(gf).optional().default([])}),vf=J({kind:W().optional().nullable(),label:W().optional().nullable(),path_safe:K().optional().default(!1),branch:W().optional().nullable(),write_scope:q(W()).optional().default([])}).passthrough(),yf=J({state:W().optional().nullable(),claimed_by:W().optional().nullable(),last_activity_at:W().optional().nullable(),threshold_hours:G().optional().nullable(),reason:W().optional().nullable(),recommended_operator_action:W().optional().nullable()}).passthrough(),bf=J({schema_version:W().optional().nullable(),todo_id:W().optional().nullable(),goal_id:W().optional().nullable(),role:W().optional().nullable(),status:W().optional().nullable(),priority:W().optional().nullable(),title:W().optional().nullable(),task_class:W().optional().nullable(),action_kind:W().optional().nullable(),claimed_by:W().optional().nullable(),required_write_scopes:q(W()).optional().default([]),workspace_ref:vf.optional().nullable()}).passthrough(),xf=J({schema_version:W().optional().nullable(),from_agent:W().optional().nullable(),to_agent:W().optional().nullable(),intent:W().optional().nullable(),summary:W().optional().nullable(),blocker:W().optional().nullable(),suggested_next_action:W().optional().nullable(),evidence_refs:q(W()).optional().default([]),updated_at:W().optional().nullable()}).passthrough(),Sf=J({agent_id:W(),role:W().optional().nullable(),state:W().optional().nullable(),current_todo:bf.optional().nullable(),next_action:W().optional().nullable(),last_activity_at:W().optional().nullable(),evidence_refs:q(W()).optional().default([]),handoff_refs:q(W()).optional().default([]),handoff_note:xf.optional().nullable(),workspace_ref:vf.optional().nullable(),stale_claim_hint:yf.optional().nullable(),blocked_on:bf.optional().nullable(),goal_ids:q(W()).optional().default([])}).passthrough(),Cf=J({schema_version:W().optional().nullable(),mode:W().optional().nullable(),goal_id:W().optional().nullable(),generated_at:W().optional().nullable(),style_hint:J({preferred:W().optional().nullable(),license_boundary:W().optional().nullable()}).optional().nullable(),truth_contract:J({todo_is_runtime_work_item:K().optional().default(!0),projection_is_writable:K().optional().default(!1),introduces_task_runtime:K().optional().default(!1),write_api:K().optional().default(!1)}).optional().nullable(),source_summary:J({registered_agent_count:G().optional().default(0),projected_agent_count:G().optional().default(0),todo_source:W().optional().nullable()}).optional().nullable(),agents:q(Sf).optional().default([])}).passthrough(),wf=J({goal_id:W(),configured:K().optional().default(!1),enabled:K().optional().default(!1),human_gate_auto_notify_enabled:K().optional().default(!1),target_ref:W().optional().nullable(),receipt_count:G().optional().default(0),last_notified_at:W().optional().nullable()}).passthrough(),Tf=J({schema_version:W().optional().nullable(),generated_at:W().optional().nullable(),goals:q(wf).optional().default([])}).passthrough(),Ef=J({source_section:W().optional().nullable(),open:G().optional().default(0),done:G().optional().default(0),total:G().optional().default(0),advancement_done_count:G().optional(),next:W().optional().nullable(),next_index:G().optional().nullable(),items:q(mf).optional().default([]),recent_completed_advancement_items:q(mf).optional().default([])}),Df=J({goal_id:W(),status:W().optional().nullable(),waiting_on:W().optional().nullable(),severity:W().optional().nullable(),index:G().optional().nullable(),text:W(),source:W().optional().nullable()}),Of=J({source:W().optional().nullable(),open_count:G().optional().default(0),items:q(Df).optional().default([])}),kf=J({goal_id:W(),status:W().optional().nullable(),waiting_on:W().optional().nullable(),quota_state:W().optional().nullable(),priority:W().optional().nullable(),todo_index:G().optional().nullable(),text:W(),source:W().optional().nullable()}),Af=J({source:W().optional().nullable(),open_count:G().optional().default(0),items:q(kf).optional().default([])}),jf=J({generated_at:W().optional().nullable(),classification:W().optional().nullable(),summary:W().optional().nullable()}),Mf=J({kind:W().optional().nullable(),source:W().optional().nullable(),severity:W().optional().nullable(),requires_refresh_state:K().optional().default(!1),reason:W().optional().nullable(),active_state_updated_at:W().optional().nullable(),latest_run_generated_at:W().optional().nullable(),latest_run_state_updated_at:W().optional().nullable(),latest_run_classification:W().optional().nullable(),recommended_action:W().optional().nullable()}),Nf=J({generated_at:W().optional().nullable(),classification:W().optional().nullable(),delivery_batch_scale:W().optional().nullable(),delivery_outcome:W().optional().nullable(),health_check:W().optional().nullable(),json_exists:K().optional().nullable(),markdown_exists:K().optional().nullable()}),Pf=J({project_asset_backed:K().optional(),same_source_should_run:K().optional(),codex_ready:K().optional(),handoff_has_next_action:K().optional(),handoff_has_stop_condition:K().optional(),handoff_sanitized_surface:K().optional()}).catchall(K()),Ff=J({ready:K().optional().default(!1),codex_ready:K().optional().default(!1),source:W().optional().nullable(),quota_state:W().optional().nullable(),checks:Pf.optional().default({}),handoff_status:W().optional().nullable(),handoff_ready_at:W().optional().nullable(),handoff_ready_classification:W().optional().nullable(),post_handoff_run_seen:K().optional().default(!1),post_handoff_latest_run:Nf.optional().nullable(),post_handoff_recent_runs:q(Nf).optional().default([]),post_handoff_small_scale_streak:G().int().nonnegative().optional().default(0),post_handoff_outcome_gap_streak:G().int().nonnegative().optional().default(0),next_probe:W().optional().nullable()}),If=J({schema_version:W().optional().nullable(),kind:W().optional().nullable(),missing_roles:q(W()).optional().default([]),source:W().optional().nullable(),recommended_action:W().optional().nullable()}),Lf=J({owner:W(),gate:W(),next_action:W(),stop_condition:W(),user_todos:Ef.optional().nullable(),agent_todos:Ef.optional().nullable(),quota:uf.optional().nullable(),control_plane:df.optional().nullable(),orchestration:ff.optional().nullable(),latest_validation:jf.optional().nullable(),stale_latest_run_warning:Mf.optional().nullable(),todo_projection_gap:If.optional().nullable()}),Rf=J({goal_id:W(),activation_state:Y([`active`,`stopped`]).optional().default(`active`),status:W(),waiting_on:W(),severity:W(),recommended_action:W(),project_asset:Lf.optional().nullable(),handoff_readiness:Ff.optional().nullable(),source:W().optional(),operator_question:W().optional().nullable(),agent_command:W().optional().nullable(),lifecycle_phase:W().optional().nullable(),lifecycle_flags:q(W()).optional().default([]),controller_stage:W().optional().nullable(),missing_gates:q(W()).optional().default([]),next_handoff_condition:W().optional().nullable(),quota:uf.optional().nullable(),control_plane:df.optional().nullable(),user_todos:hf.optional().nullable(),agent_todos:hf.optional().nullable(),stale_latest_run_warning:Mf.optional().nullable(),dependency_blockers:Of.optional().nullable(),todo_state_file:W().optional().nullable(),goal_channel_projection:lf.optional().nullable()}),zf=J({recorded_at:W().optional().nullable(),decision:W().optional().nullable(),reward:W().optional().nullable(),reason_summary:W().optional().nullable(),follow_up:W().optional().nullable()}),Bf=J({recorded_at:W().optional().nullable(),gate:W().optional().nullable(),decision:W().optional().nullable(),operator_question:W().optional().nullable(),reason_summary:W().optional().nullable(),follow_up:W().optional().nullable(),agent_command:W().optional().nullable()}),Vf=J({version:W().optional().nullable(),goal_id:W().optional().nullable(),run_id:W().optional().nullable(),gate_id:W().optional().nullable(),created_state_ref:W().optional().nullable(),created_policy_version:W().optional().nullable(),interrupt_payload:J({question:W().optional().nullable(),choices:q(W()).optional().default([])}).optional().nullable(),allowed_decisions:q(W()).optional().default([]),operator_decision:W().optional().nullable(),latest_state_ref:W().optional().nullable(),freshness_check:W().optional().nullable(),precondition_check:W().optional().nullable(),migration_or_rebase_result:W().optional().nullable(),resulting_action:W().optional().nullable(),validation_after_resume:W().optional().nullable()}),Hf=J({id:W().optional().nullable(),ok:K().optional().nullable(),review:W().optional().nullable()}),Uf=J({classification:W().optional().nullable(),read_only_observer_ready:K().optional().nullable(),decision_advisor_ready:K().optional().nullable(),write_controller_ready:K().optional().nullable(),missing_gates:q(W()).optional().default([]),review_judgment:W().optional().nullable(),next_handoff_condition:W().optional().nullable(),gates:q(Hf).optional().default([])}),Wf=J({declared:K().optional().default(!1),required:K().optional().default(!1),path:W().optional().nullable(),path_exists:K().optional().nullable(),read_status:W().optional().nullable(),default_entry_count:G().optional().default(0),default_entries_checked:G().optional().default(0),default_entries_present:G().optional().default(0),topic_authority_count:G().optional().default(0),project_material_count:G().optional().default(0),project_material_repository_count:G().optional().default(0),project_material_owner_review_required_count:G().optional().default(0),project_material_stale_count:G().optional().default(0),project_material_current_authority_count:G().optional().default(0),deprecated_source_count:G().optional().default(0),conflict_risk:W().optional().nullable()}),Gf=J({adapter_kind:W().optional().nullable(),adapter_status:W().optional().nullable(),authority_source_count:G().optional().nullable(),authority_registry_declared:K().optional().nullable(),authority_registry_path_exists:K().optional().nullable(),authority_registry_default_entry_count:G().optional().nullable(),authority_registry_default_entries_present:G().optional().nullable(),topic_authority_count:G().optional().nullable(),project_material_count:G().optional().nullable(),project_material_repository_count:G().optional().nullable(),project_material_owner_review_required_count:G().optional().nullable(),project_material_stale_count:G().optional().nullable(),project_material_current_authority_count:G().optional().nullable(),authority_registry_conflict_risk:W().optional().nullable(),guard_count:G().optional().nullable(),sections_found:G().optional().nullable(),sections_checked:G().optional().nullable(),files_present:G().optional().nullable(),files_checked:G().optional().nullable()}),Kf=J({generated_at:W(),goal_id:W(),classification:W().optional().nullable(),lifecycle_phase:W().optional().nullable(),lifecycle_flags:q(W()).optional().default([]),recommended_action:W().optional().nullable(),health_check:W().optional().nullable(),active_task_count:G().optional().nullable(),active_priorities:yd(W(),ad()).optional().nullable(),cache_check:W().optional().nullable(),json_exists:K().optional().default(!1),markdown_exists:K().optional().default(!1),human_reward:zf.optional().nullable(),operator_gate:Bf.optional().nullable(),operator_gate_resume_contract:Vf.optional().nullable(),controller_readiness:Uf.optional().nullable(),project_map:Gf.optional().nullable()}),qf=J({acceptance_observation:ef.optional().nullable().catch(null),id:W(),activation_state:Y([`active`,`stopped`]).optional().default(`active`),display_name:W().optional().nullable(),domain:W().optional().nullable(),status:W().optional().nullable(),lifecycle_phase:W().optional().nullable(),lifecycle_flags:q(W()).optional().default([]),registry_member:K().optional().default(!1),legacy_runtime_goal:K().optional().default(!1),adapter_kind:W().optional().nullable(),adapter_status:W().optional().nullable(),authority_registry:Wf.optional().nullable(),quota:uf.optional().nullable(),control_plane:df.optional().nullable(),spawn_policy:ff.optional().nullable(),orchestration:ff.optional().nullable(),coordination:J({agent_model:W().optional().nullable(),registered_agents:q(W()).optional().default([])}).optional().nullable(),index_exists:K().optional().default(!1),raw_index_records:G().optional().default(0),unique_runs:G().optional().default(0),latest_runs:q(Kf).optional().default([])}),Jf=J({available:K(),goal_count:G().optional().default(0),run_count:G().optional().default(0),goals:q(qf).optional().default([]),recent_runs:q(Kf).optional().default([])}),Yf=J({kind:W(),severity:W(),message:W(),recommended_action:W(),goal_id:W().optional().nullable(),path:W().optional().nullable(),goal_ids:q(W()).optional().default([])}),Xf=J({available:K(),ok:K(),registry:W(),current_registry:W().optional().nullable(),current_registry_is_global:K().optional().default(!1),global_goal_count:G().optional().default(0),current_goal_count:G().optional().default(0),source_registry_count:G().optional().default(0),summary:J({high:G().optional().default(0),action:G().optional().default(0),info:G().optional().default(0),checks:G().optional().default(0),findings:G().optional().default(0)}),findings:q(Yf).optional().default([]),checks:q(W()).optional().default([])}),Zf=J({runs_24h:G().optional().default(0),runs_7d:G().optional().default(0),quota_spend_slots_24h:G().optional().default(0),quota_spend_slots_7d:G().optional().default(0),automation_run_count_24h:G().optional().default(0),automation_run_count_7d:G().optional().default(0),progress_signal_run_count_24h:G().optional().default(0),progress_signal_run_count_7d:G().optional().default(0),input_tokens_24h:G().optional(),input_tokens_7d:G().optional(),output_tokens_24h:G().optional(),output_tokens_7d:G().optional(),cache_tokens_24h:G().optional(),cache_tokens_7d:G().optional(),cost_usd_24h:G().optional(),cost_usd_7d:G().optional(),duration_ms_24h:G().optional(),duration_ms_7d:G().optional()}),Qf=Zf.extend({goal_id:W(),project_share_24h:G().optional().default(0)}),$f=J({available:K().optional().default(!0),source:W().optional().default(`run_history`),generated_at:W().optional().nullable(),sample_run_count:G().optional().default(0),proxy_note:W().optional().nullable(),totals:Zf.optional().default({runs_24h:0,runs_7d:0,quota_spend_slots_24h:0,quota_spend_slots_7d:0,automation_run_count_24h:0,automation_run_count_7d:0,progress_signal_run_count_24h:0,progress_signal_run_count_7d:0}),goals:q(Qf).optional().default([])}).optional().nullable(),ep=J({accounting:G().optional().default(0),decision:G().optional().default(0),evidence:G().optional().default(0),state:G().optional().default(0),work:G().optional().default(0)}),tp={accounting:0,decision:0,evidence:0,state:0,work:0},np=J({events_24h:G().optional().default(0),events_7d:G().optional().default(0),by_class_24h:ep.optional().default(tp),by_class_7d:ep.optional().default(tp)}),rp=np.extend({goal_id:W(),latest_event_class:W().optional().nullable(),latest_event_at:W().optional().nullable()}),ip={events_24h:0,events_7d:0,by_class_24h:tp,by_class_7d:tp},ap=J({available:K().optional().default(!0),source:W().optional().default(`run_history`),generated_at:W().optional().nullable(),sample_run_count:G().optional().default(0),proxy_note:W().optional().nullable(),event_classes:q(W()).optional().default([`accounting`,`decision`,`evidence`,`state`,`work`]),totals:np.optional().default(ip),goals:q(rp).optional().default([])}).optional().nullable(),op=J({available:K().optional().default(!1),source:W().optional().default(`run_history`),goal_id:W().optional().nullable(),generated_at:W().optional().nullable(),classification:W().optional().nullable(),delivery_batch_scale:W().optional().nullable(),delivery_outcome:W().optional().nullable(),recommended_action:W().optional().nullable(),json_exists:K().optional().default(!1),markdown_exists:K().optional().default(!1),freshness_window_hours:G().optional().default(24),freshness_status:W().optional().nullable(),is_fresh:K().optional().default(!1),requires_readiness_run:K().optional().default(!0),age_seconds:G().optional().nullable(),age_hours:G().optional().nullable(),freshness_reference_time:W().optional().nullable(),sample_run_count:G().optional().default(0),proxy_note:W().optional().nullable(),reason:W().optional().nullable()}).optional().nullable(),sp=J({ok:K().optional().default(!0),registry:W().optional().nullable(),runtime_root:W().optional().nullable(),gate:W().optional().default(`promotion_readiness`),gate_state:W().optional().default(`warning`),can_promote:K().optional().default(!1),should_warn:K().optional().default(!0),non_blocking:K().optional().default(!0),recommended_action:W().optional().nullable(),warning_message:W().optional().nullable(),readiness:op.default(null)}).optional().nullable(),cp=J({decision_count:G().optional().default(0),stale_count:G().optional().default(0),rebase_required_count:G().optional().default(0),fresh_count:G().optional().default(0)}),lp=J({goal_id:W(),decision_kind:W().optional().nullable(),decision_at:W().optional().nullable(),classification:W().optional().nullable(),age_days:G().optional().nullable(),stale_by_age:K().optional().default(!1),newer_event_count_7d:G().optional().default(0),newer_event_classes_7d:ep.optional().default(tp),freshness_state:W().optional().nullable(),requires_decision_point_rebase:K().optional().default(!1),reason:W().optional().nullable()}),up=J({available:K().optional().default(!0),source:W().optional().default(`run_history`),generated_at:W().optional().nullable(),sample_run_count:G().optional().default(0),window_days:G().optional().default(7),proxy_note:W().optional().nullable(),summary:cp.optional().default({decision_count:0,stale_count:0,rebase_required_count:0,fresh_count:0}),items:q(lp).optional().default([])}).optional().nullable(),dp=J({schema_version:G().optional().default(0),minimum_dashboard_schema_version:G().optional().default(2),producer:W().optional().nullable(),reload_hint:W().optional().nullable()}).optional().default({schema_version:0,minimum_dashboard_schema_version:2,producer:null,reload_hint:`scripts/macos-dashboard-launchagent.sh restart`}),fp=J({schema_version:X(`loopx_goal_projection_scope_v0`),scope:Y([`all`,`active`,`stopped`]),complete:K(),projected_goal_count:G().int().nonnegative(),registry_goal_count:G().int().nonnegative(),registry_revision:W().optional().nullable()}),pp=J({source:W().optional().default(`serve-status`),status_url:W().optional().nullable(),health_url:W().optional().nullable(),review_material_url:W().optional().nullable(),presentation_surfaces_url:W().optional().nullable(),presentation_detail_url:W().optional().nullable(),periodic_report_index_url:W().optional().nullable(),periodic_report_detail_url:W().optional().nullable(),ssh_hosts_url:W().optional().nullable(),reward_dry_run_url:W().optional().nullable(),reward_append_url:W().optional().nullable(),reward_write_enabled:K().optional().default(!1),configure_goal_dry_run_url:W().optional().nullable(),configure_goal_apply_url:W().optional().nullable(),control_plane_write_enabled:K().optional().default(!1)}).optional().nullable(),mp=J({extension_id:W().min(1),surface_id:W().regex(/^[a-z][a-z0-9]*(?:-[a-z0-9]+)*$/),extension_revision:W().min(1),payload_sha256:W().regex(/^[0-9a-f]{64}$/)}).strict(),hp=J({extension_id:W().min(1),extension_revision:W().min(1),surface_id:W().regex(/^[a-z][a-z0-9]*(?:-[a-z0-9]+)*$/),surface_kind:W().regex(/^[a-z][a-z0-9]*(?:_[a-z0-9]+)*$/),title:W().min(1),view_schema:W().regex(/^[a-z][a-z0-9_]*_v\d+$/),visibility:Y([`public-safe`,`owner-only`]),goal_id:W().min(1).nullable(),generated_at:W().min(1).nullable(),review_due_at:W().min(1).nullable(),diagnostic:W().min(1).nullable(),empty_state_title:W().min(1),empty_state_detail:W().min(1)}),gp=dd([hp.extend({state:Y([`ready`,`review_due`]),goal_id:W().min(1),generated_at:W().min(1),detail_ref:mp}).strict(),hp.extend({state:X(`empty`),detail_ref:sd().optional()}).strict(),hp.extend({state:X(`invalid`),diagnostic:W().min(1),detail_ref:sd().optional()}).strict()]),_p=J({schema_version:X(`extension_presentation_surfaces_v0`),count:G().int().nonnegative(),ready_count:G().int().nonnegative(),review_due_count:G().int().nonnegative(),empty_count:G().int().nonnegative(),invalid_count:G().int().nonnegative(),items:q(gp)}).strict(),vp={schema_version:`extension_presentation_surfaces_v0`,count:0,ready_count:0,review_due_count:0,empty_count:0,invalid_count:0,items:[]};J({ok:X(!0),presentation_surfaces:_p}).strict();var yp=J({goal_id:W().min(1),agent_id:W().min(1),generation_id:W().min(1),content_sha256:W().regex(/^sha256:[0-9a-f]{64}$/)}).strict(),bp=J({goal_id:W().min(1),agent_id:W().min(1),generation_id:W().min(1),publication_id:W().min(1),delivered_at:W().min(1),predecessor_publication_id:W().min(1).nullable().optional(),detail_ref:yp}).strict(),xp=J({schema_version:X(`periodic_report_workspace_index_v0`),count:G().int().nonnegative(),items:q(bp)}),Sp=xp.extend({returned_count:G().int().nonnegative(),total_count:G().int().nonnegative(),limit:G().int().nonnegative(),offset:G().int().nonnegative(),truncated:K()}).strict(),Cp=xp.strict().transform(e=>({...e,returned_count:e.count,total_count:e.count,limit:e.count,offset:0,truncated:!1})),wp=J({ok:X(!0),periodic_reports:dd([Sp,Cp])}).strict(),Tp=J({schema_version:X(`periodic_report_workspace_projection_v0`),goal_id:W().min(1),agent_id:W().min(1),generation_id:W().min(1),generated_at:W().min(1),title:W().min(1),summary:W().min(1),content_sha256:W().regex(/^sha256:[0-9a-f]{64}$/),period_window:J({start_at:W().min(1),end_at:W().min(1)}).strict(),interaction:J({attention_kind:X(`progress`),interaction:X(`inform`),delivery:X(`surface`),form:X(`milestone_report`),writable:X(!1)}).strict(),delta:J({added_count:G().int().nonnegative(),changed_count:G().int().nonnegative(),item_count:G().int().positive(),items:q(J({fact_id:W().min(1),source_ref:W().min(1),title:W().min(1),summary:W().min(1),status:W().min(1),content_kind:W().min(1),change_kind:Y([`added`,`changed`]),previous_status:W().min(1).optional()}).strict())}).strict(),publication:J({publication_id:W().min(1),delivered_at:W().min(1),predecessor_publication_id:W().min(1).nullable().optional(),cursor_id:W().min(1)}).strict(),truth_contract:J({published_cursor_is_source_of_truth:X(!0),generation_receipt_is_delivery_receipt:X(!1),projection_is_writable:X(!1),browser_write_api:X(!1)}).strict()}).strict(),Ep=J({ok:X(!0),projection:Tp}).strict(),Dp=J({ok:K(),registry:W(),runtime_root:W(),goal_count:G(),run_count:G(),status_contract:dp,goal_projection:fp.optional().nullable().default(null),local_dashboard_api:pp,contract:J({ok:K(),summary:J({errors:G(),warnings:G(),checks:G()}),errors:q(W()),warnings:q(W()),checks:q(W()).optional().default([])}),global_registry:Xf.optional().default({available:!1,ok:!0,registry:``,current_registry:null,current_registry_is_global:!1,global_goal_count:0,current_goal_count:0,source_registry_count:0,summary:{high:0,action:0,info:0,checks:0,findings:0},findings:[],checks:[]}),attention_queue:J({available:K(),item_count:G(),needs_user_or_controller:G(),needs_controller:G().optional().default(0),needs_codex:G(),watching_external_evidence:G(),autonomous_backlog_candidates:Af.optional().nullable(),items:q(Rf)}),run_history:Jf.optional().default({available:!1,goal_count:0,run_count:0,goals:[],recent_runs:[]}),event_ledger_summary:ap.default(null),promotion_readiness_summary:op.default(null),promotion_gate:sp.default(null),decision_freshness_summary:up.default(null),usage_summary:$f.default(null),todo_index:_f.optional().nullable().default(null),agent_management_projection:Cf.optional().nullable().default(null),goal_channel_notification_projection:Tf.optional().nullable().default(null),presentation_surfaces:_p.optional().default(vp)});J({ok:K(),dry_run:K().optional().default(!0),appended:K().optional().default(!1),goal_id:W().optional().nullable(),raw_index_records_before:G().optional().nullable(),preview_id:W().optional().nullable(),selected_run:J({generated_at:W().optional().nullable(),classification:W().optional().nullable(),recommended_action:W().optional().nullable(),json_exists:K().optional().nullable(),markdown_exists:K().optional().nullable()}).optional().nullable(),human_reward:zf.optional().nullable(),active_state_summary:W().optional().nullable(),project_agent_visibility:J({source_of_truth:W().optional().nullable(),history_command:W().optional().nullable(),active_state_role:W().optional().nullable(),review_packet_role:W().optional().nullable()}).optional().nullable(),error:W().optional().nullable()});function Op(e,t,n){let r=e.run_history.goals.map(e=>e.id===t&&e.activation_state!==n?{...e,activation_state:n}:e),i=e.attention_queue.items.map(e=>e.goal_id===t&&e.activation_state!==n?{...e,activation_state:n}:e),a=r.some((t,n)=>t!==e.run_history.goals[n]),o=i.some((t,n)=>t!==e.attention_queue.items[n]);return!a&&!o?e:{...e,attention_queue:o?{...e.attention_queue,items:i}:e.attention_queue,run_history:a?{...e.run_history,goals:r}:e.run_history}}function kp(e,t){let n=e.run_history.goals.filter(e=>e.id!==t),r=e.attention_queue.items.filter(e=>e.goal_id!==t);return n.length===e.run_history.goals.length&&r.length===e.attention_queue.items.length?e:{...e,attention_queue:{...e.attention_queue,items:r},run_history:{...e.run_history,goals:n}}}function Ap(e){return Dp.parse(e)}function jp(e){return e instanceof pu?e.issues.map(e=>`${e.path.join(`.`)||`root`}: ${e.message}`).join(`; `):e instanceof Error?e.message:String(e)}var Mp=Ap(Zd),Np=J({ok:X(!0),schema_version:X(`loopx_workspace_directory_v1`),registry_revision:W(),goals:q(J({id:W(),display_name:W(),activation_state:Y([`active`,`stopped`]),registry_member:X(!0)}))});function Pp(e,t,n={}){if(!e)return{};let r=new Set(n.invalidateGoalIds??[]),i=new Map(e.directory.goals.map(e=>[e.id,e]));return Object.fromEntries(t.goals.flatMap(t=>{let n=i.get(t.id),a=e.snapshots[t.id];return!n||!a||r.has(t.id)||n.display_name!==t.display_name||n.activation_state!==t.activation_state?[]:[[t.id,a]]}))}function Fp(e,t,n){let r=new URL(e,n);r.searchParams.delete(`goal_activation`),r.searchParams.delete(`goal_id`),r.searchParams.delete(`view`);for(let[e,n]of Object.entries(t))r.searchParams.set(e,n);return r.toString()}async function Ip(e,t){let n=await fetch(Fp(e,{view:`workspace-directory`},t),{cache:`no-store`,signal:AbortSignal.timeout(5e3)});if(!n.ok)return null;let r=Np.safeParse(await n.json());return r.success?r.data:null}function Lp(e){return Ap({ok:!0,registry:``,runtime_root:``,goal_count:e.goals.length,run_count:0,local_dashboard_api:{},contract:{ok:!0,summary:{errors:0,warnings:0,checks:0},errors:[],warnings:[]},attention_queue:{available:!1,item_count:0,needs_user_or_controller:0,needs_codex:0,watching_external_evidence:0,items:[]},run_history:{available:!1,goal_count:e.goals.length,run_count:0,goals:e.goals,recent_runs:[]}})}async function Rp(e,t){if(!e.body)return`service`;let n=e.body.getReader(),r=()=>{n.cancel().catch(()=>{})};t.addEventListener(`abort`,r,{once:!0});let i=new Uint8Array(16384),a=0;try{for(t.throwIfAborted();;){let{done:e,value:r}=await n.read();if(t.throwIfAborted(),e)break;if(a+r.byteLength>i.byteLength)return`service`;i.set(r,a),a+=r.byteLength}let e=JSON.parse(new TextDecoder().decode(i.subarray(0,a)));return typeof e==`object`&&e&&!Array.isArray(e)&&`error_code`in e&&e.error_code===`workspace_status_access_denied`?`access`:`service`}catch{return t.throwIfAborted(),`service`}finally{t.removeEventListener(`abort`,r),r(),n.releaseLock()}}async function zp(e,t,n,r,i,a,o){let s=[...n.goals],c=new Map;async function l(){for(;s.length&&i()&&!o?.aborted;){let l=s.findIndex(e=>e.id===a()),u=l>=0?l:s.findIndex(e=>e.activation_state===`active`);if(u<0)return;let d=s.splice(u,1)[0],f=(c.get(d.id)??0)+1;c.set(d.id,f);let p=new AbortController,m=!1,h=()=>p.abort();o?.addEventListener(`abort`,h,{once:!0});let g=setTimeout(()=>{m=!0,p.abort()},3e4),_=null;try{let a=await fetch(Fp(e,{goal_id:d.id},t),{cache:`no-store`,signal:p.signal});if(!a.ok)_=a.status===409?`revision`:a.status>=500?await Rp(a,p.signal):`scope`,p.signal.throwIfAborted();else{let e=await a.json();if(e.workspace_registry_revision!==n.registry_revision)_=`revision`;else{let t=Ap(e);!t.run_history.goals.some(e=>e.id===d.id)||t.run_history.goals.some(e=>e.id!==d.id)?_=`scope`:i()&&!o?.aborted&&r(d.id,t,null)}}}catch(e){_=m?`timeout`:e instanceof TypeError?`network`:`invalid`}finally{clearTimeout(g),o?.removeEventListener(`abort`,h)}if(!i()||o?.aborted)return;_&&[`timeout`,`network`,`service`].includes(_)&&f<3?(await new Promise(e=>setTimeout(e,f*1e3)),s.push(d)):_&&r(d.id,null,_)}}await Promise.all([l(),l()])}var Bp=(...e)=>e.filter((e,t,n)=>!!e&&e.trim()!==``&&n.indexOf(e)===t).join(` `).trim(),Vp=e=>e.replace(/([a-z0-9])([A-Z])/g,`$1-$2`).toLowerCase(),Hp=e=>e.replace(/^([A-Z])|[\s-_]+(\w)/g,(e,t,n)=>n?n.toUpperCase():t.toLowerCase()),Up=e=>{let t=Hp(e);return t.charAt(0).toUpperCase()+t.slice(1)},Wp={xmlns:`http://www.w3.org/2000/svg`,width:24,height:24,viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,strokeWidth:2,strokeLinecap:`round`,strokeLinejoin:`round`},Gp=e=>{for(let t in e)if(t.startsWith(`aria-`)||t===`role`||t===`title`)return!0;return!1},Kp=(0,R.createContext)({}),qp=()=>(0,R.useContext)(Kp),Jp=(0,R.forwardRef)(({color:e,size:t,strokeWidth:n,absoluteStrokeWidth:r,className:i=``,children:a,iconNode:o,...s},c)=>{let{size:l=24,strokeWidth:u=2,absoluteStrokeWidth:d=!1,color:f=`currentColor`,className:p=``}=qp()??{},m=r??d?Number(n??u)*24/Number(t??l):n??u;return(0,R.createElement)(`svg`,{ref:c,...Wp,width:t??l??Wp.width,height:t??l??Wp.height,stroke:e??f,strokeWidth:m,className:Bp(`lucide`,p,i),...!a&&!Gp(s)&&{"aria-hidden":`true`},...s},[...o.map(([e,t])=>(0,R.createElement)(e,t)),...Array.isArray(a)?a:[a]])}),Z=(e,t)=>{let n=(0,R.forwardRef)(({className:n,...r},i)=>(0,R.createElement)(Jp,{ref:i,iconNode:t,className:Bp(`lucide-${Vp(Up(e))}`,`lucide-${e}`,n),...r}));return n.displayName=Up(e),n},Yp=Z(`activity`,[[`path`,{d:`M22 12h-2.48a2 2 0 0 0-1.93 1.46l-2.35 8.36a.25.25 0 0 1-.48 0L9.24 2.18a.25.25 0 0 0-.48 0l-2.35 8.36A2 2 0 0 1 4.49 12H2`,key:`169zse`}]]),Xp=Z(`arrow-down`,[[`path`,{d:`M12 5v14`,key:`s699le`}],[`path`,{d:`m19 12-7 7-7-7`,key:`1idqje`}]]),Zp=Z(`arrow-left`,[[`path`,{d:`m12 19-7-7 7-7`,key:`1l729n`}],[`path`,{d:`M19 12H5`,key:`x3x0zl`}]]),Qp=Z(`arrow-right`,[[`path`,{d:`M5 12h14`,key:`1ays0h`}],[`path`,{d:`m12 5 7 7-7 7`,key:`xquz4c`}]]),$p=Z(`arrow-up-down`,[[`path`,{d:`m21 16-4 4-4-4`,key:`f6ql7i`}],[`path`,{d:`M17 20V4`,key:`1ejh1v`}],[`path`,{d:`m3 8 4-4 4 4`,key:`11wl7u`}],[`path`,{d:`M7 4v16`,key:`1glfcx`}]]),em=Z(`arrow-up`,[[`path`,{d:`m5 12 7-7 7 7`,key:`hav0vg`}],[`path`,{d:`M12 19V5`,key:`x0mq9r`}]]),tm=Z(`badge-check`,[[`path`,{d:`M3.85 8.62a4 4 0 0 1 4.78-4.77 4 4 0 0 1 6.74 0 4 4 0 0 1 4.78 4.78 4 4 0 0 1 0 6.74 4 4 0 0 1-4.77 4.78 4 4 0 0 1-6.75 0 4 4 0 0 1-4.78-4.77 4 4 0 0 1 0-6.76Z`,key:`3c2336`}],[`path`,{d:`m9 12 2 2 4-4`,key:`dzmm74`}]]),nm=Z(`bell`,[[`path`,{d:`M10.268 21a2 2 0 0 0 3.464 0`,key:`vwvbt9`}],[`path`,{d:`M3.262 15.326A1 1 0 0 0 4 17h16a1 1 0 0 0 .74-1.673C19.41 13.956 18 12.499 18 8A6 6 0 0 0 6 8c0 4.499-1.411 5.956-2.738 7.326`,key:`11g9vi`}]]),rm=Z(`bot`,[[`path`,{d:`M12 8V4H8`,key:`hb8ula`}],[`rect`,{width:`16`,height:`12`,x:`4`,y:`8`,rx:`2`,key:`enze0r`}],[`path`,{d:`M2 14h2`,key:`vft8re`}],[`path`,{d:`M20 14h2`,key:`4cs60a`}],[`path`,{d:`M15 13v2`,key:`1xurst`}],[`path`,{d:`M9 13v2`,key:`rq6x2g`}]]),im=Z(`braces`,[[`path`,{d:`M8 3H7a2 2 0 0 0-2 2v5a2 2 0 0 1-2 2 2 2 0 0 1 2 2v5c0 1.1.9 2 2 2h1`,key:`ezmyqa`}],[`path`,{d:`M16 21h1a2 2 0 0 0 2-2v-5c0-1.1.9-2 2-2a2 2 0 0 1-2-2V5a2 2 0 0 0-2-2h-1`,key:`e1hn23`}]]),am=Z(`calendar-clock`,[[`path`,{d:`M16 14v2.2l1.6 1`,key:`fo4ql5`}],[`path`,{d:`M16 2v4`,key:`4m81vk`}],[`path`,{d:`M21 7.5V6a2 2 0 0 0-2-2H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h3.5`,key:`1osxxc`}],[`path`,{d:`M3 10h5`,key:`r794hk`}],[`path`,{d:`M8 2v4`,key:`1cmpym`}],[`circle`,{cx:`16`,cy:`16`,r:`6`,key:`qoo3c4`}]]),om=Z(`check`,[[`path`,{d:`M20 6 9 17l-5-5`,key:`1gmf2c`}]]),sm=Z(`chevron-down`,[[`path`,{d:`m6 9 6 6 6-6`,key:`qrunsl`}]]),cm=Z(`chevron-right`,[[`path`,{d:`m9 18 6-6-6-6`,key:`mthhwq`}]]),lm=Z(`chevron-up`,[[`path`,{d:`m18 15-6-6-6 6`,key:`153udz`}]]),um=Z(`circle-alert`,[[`circle`,{cx:`12`,cy:`12`,r:`10`,key:`1mglay`}],[`line`,{x1:`12`,x2:`12`,y1:`8`,y2:`12`,key:`1pkeuh`}],[`line`,{x1:`12`,x2:`12.01`,y1:`16`,y2:`16`,key:`4dfq90`}]]),dm=Z(`circle-check`,[[`circle`,{cx:`12`,cy:`12`,r:`10`,key:`1mglay`}],[`path`,{d:`m9 12 2 2 4-4`,key:`dzmm74`}]]),fm=Z(`clipboard-check`,[[`rect`,{width:`8`,height:`4`,x:`8`,y:`2`,rx:`1`,ry:`1`,key:`tgr4d6`}],[`path`,{d:`M16 4h2a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h2`,key:`116196`}],[`path`,{d:`m9 14 2 2 4-4`,key:`df797q`}]]),pm=Z(`code-xml`,[[`path`,{d:`m18 16 4-4-4-4`,key:`1inbqp`}],[`path`,{d:`m6 8-4 4 4 4`,key:`15zrgr`}],[`path`,{d:`m14.5 4-5 16`,key:`e7oirm`}]]),mm=Z(`copy`,[[`rect`,{width:`14`,height:`14`,x:`8`,y:`8`,rx:`2`,ry:`2`,key:`17jyea`}],[`path`,{d:`M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2`,key:`zix9uf`}]]),hm=Z(`database`,[[`ellipse`,{cx:`12`,cy:`5`,rx:`9`,ry:`3`,key:`msslwz`}],[`path`,{d:`M3 5V19A9 3 0 0 0 21 19V5`,key:`1wlel7`}],[`path`,{d:`M3 12A9 3 0 0 0 21 12`,key:`mv7ke4`}]]),gm=Z(`download`,[[`path`,{d:`M12 15V3`,key:`m9g1x1`}],[`path`,{d:`M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4`,key:`ih7n3h`}],[`path`,{d:`m7 10 5 5 5-5`,key:`brsn70`}]]),_m=Z(`ellipsis`,[[`circle`,{cx:`12`,cy:`12`,r:`1`,key:`41hilf`}],[`circle`,{cx:`19`,cy:`12`,r:`1`,key:`1wjl8i`}],[`circle`,{cx:`5`,cy:`12`,r:`1`,key:`1pcz8c`}]]),vm=Z(`external-link`,[[`path`,{d:`M15 3h6v6`,key:`1q9fwt`}],[`path`,{d:`M10 14 21 3`,key:`gplh6r`}],[`path`,{d:`M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6`,key:`a6xqqp`}]]),ym=Z(`eye`,[[`path`,{d:`M2.062 12.348a1 1 0 0 1 0-.696 10.75 10.75 0 0 1 19.876 0 1 1 0 0 1 0 .696 10.75 10.75 0 0 1-19.876 0`,key:`1nclc0`}],[`circle`,{cx:`12`,cy:`12`,r:`3`,key:`1v7zrd`}]]),bm=Z(`file-braces`,[[`path`,{d:`M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z`,key:`1oefj6`}],[`path`,{d:`M14 2v5a1 1 0 0 0 1 1h5`,key:`wfsgrz`}],[`path`,{d:`M10 12a1 1 0 0 0-1 1v1a1 1 0 0 1-1 1 1 1 0 0 1 1 1v1a1 1 0 0 0 1 1`,key:`1oajmo`}],[`path`,{d:`M14 18a1 1 0 0 0 1-1v-1a1 1 0 0 1 1-1 1 1 0 0 1-1-1v-1a1 1 0 0 0-1-1`,key:`mpwhp6`}]]),xm=Z(`file-check-corner`,[[`path`,{d:`M10.5 22H6a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.706.706l3.588 3.588A2.4 2.4 0 0 1 20 8v6`,key:`g5mvt7`}],[`path`,{d:`M14 2v5a1 1 0 0 0 1 1h5`,key:`wfsgrz`}],[`path`,{d:`m14 20 2 2 4-4`,key:`15kota`}]]),Sm=Z(`file-text`,[[`path`,{d:`M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z`,key:`1oefj6`}],[`path`,{d:`M14 2v5a1 1 0 0 0 1 1h5`,key:`wfsgrz`}],[`path`,{d:`M10 9H8`,key:`b1mrlr`}],[`path`,{d:`M16 13H8`,key:`t4e002`}],[`path`,{d:`M16 17H8`,key:`z1uh3a`}]]),Cm=Z(`git-branch`,[[`path`,{d:`M15 6a9 9 0 0 0-9 9V3`,key:`1cii5b`}],[`circle`,{cx:`18`,cy:`6`,r:`3`,key:`1h7g24`}],[`circle`,{cx:`6`,cy:`18`,r:`3`,key:`fqmcym`}]]),wm=Z(`git-compare-arrows`,[[`circle`,{cx:`5`,cy:`6`,r:`3`,key:`1qnov2`}],[`path`,{d:`M12 6h5a2 2 0 0 1 2 2v7`,key:`1yj91y`}],[`path`,{d:`m15 9-3-3 3-3`,key:`1lwv8l`}],[`circle`,{cx:`19`,cy:`18`,r:`3`,key:`1qljk2`}],[`path`,{d:`M12 18H7a2 2 0 0 1-2-2V9`,key:`16sdep`}],[`path`,{d:`m9 15 3 3-3 3`,key:`1m3kbl`}]]),Tm=Z(`info`,[[`circle`,{cx:`12`,cy:`12`,r:`10`,key:`1mglay`}],[`path`,{d:`M12 16v-4`,key:`1dtifu`}],[`path`,{d:`M12 8h.01`,key:`e9boi3`}]]),Em=Z(`key-round`,[[`path`,{d:`M2.586 17.414A2 2 0 0 0 2 18.828V21a1 1 0 0 0 1 1h3a1 1 0 0 0 1-1v-1a1 1 0 0 1 1-1h1a1 1 0 0 0 1-1v-1a1 1 0 0 1 1-1h.172a2 2 0 0 0 1.414-.586l.814-.814a6.5 6.5 0 1 0-4-4z`,key:`1s6t7t`}],[`circle`,{cx:`16.5`,cy:`7.5`,r:`.5`,fill:`currentColor`,key:`w0ekpg`}]]),Dm=Z(`languages`,[[`path`,{d:`m5 8 6 6`,key:`1wu5hv`}],[`path`,{d:`m4 14 6-6 2-3`,key:`1k1g8d`}],[`path`,{d:`M2 5h12`,key:`or177f`}],[`path`,{d:`M7 2h1`,key:`1t2jsx`}],[`path`,{d:`m22 22-5-10-5 10`,key:`don7ne`}],[`path`,{d:`M14 18h6`,key:`1m8k6r`}]]),Om=Z(`layout-dashboard`,[[`rect`,{width:`7`,height:`9`,x:`3`,y:`3`,rx:`1`,key:`10lvy0`}],[`rect`,{width:`7`,height:`5`,x:`14`,y:`3`,rx:`1`,key:`16une8`}],[`rect`,{width:`7`,height:`9`,x:`14`,y:`12`,rx:`1`,key:`1hutg5`}],[`rect`,{width:`7`,height:`5`,x:`3`,y:`16`,rx:`1`,key:`ldoo1y`}]]),km=Z(`list-plus`,[[`path`,{d:`M16 5H3`,key:`m91uny`}],[`path`,{d:`M11 12H3`,key:`51ecnj`}],[`path`,{d:`M16 19H3`,key:`zzsher`}],[`path`,{d:`M18 9v6`,key:`1twb98`}],[`path`,{d:`M21 12h-6`,key:`bt1uis`}]]),Am=Z(`loader-circle`,[[`path`,{d:`M21 12a9 9 0 1 1-6.219-8.56`,key:`13zald`}]]),jm=Z(`maximize-2`,[[`path`,{d:`M15 3h6v6`,key:`1q9fwt`}],[`path`,{d:`m21 3-7 7`,key:`1l2asr`}],[`path`,{d:`m3 21 7-7`,key:`tjx5ai`}],[`path`,{d:`M9 21H3v-6`,key:`wtvkvv`}]]),Mm=Z(`menu`,[[`path`,{d:`M4 5h16`,key:`1tepv9`}],[`path`,{d:`M4 12h16`,key:`1lakjw`}],[`path`,{d:`M4 19h16`,key:`1djgab`}]]),Nm=Z(`message-circle-question-mark`,[[`path`,{d:`M2.992 16.342a2 2 0 0 1 .094 1.167l-1.065 3.29a1 1 0 0 0 1.236 1.168l3.413-.998a2 2 0 0 1 1.099.092 10 10 0 1 0-4.777-4.719`,key:`1sd12s`}],[`path`,{d:`M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3`,key:`1u773s`}],[`path`,{d:`M12 17h.01`,key:`p32p05`}]]),Pm=Z(`message-square-text`,[[`path`,{d:`M22 17a2 2 0 0 1-2 2H6.828a2 2 0 0 0-1.414.586l-2.202 2.202A.71.71 0 0 1 2 21.286V5a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2z`,key:`18887p`}],[`path`,{d:`M7 11h10`,key:`1twpyw`}],[`path`,{d:`M7 15h6`,key:`d9of3u`}],[`path`,{d:`M7 7h8`,key:`af5zfr`}]]),Fm=Z(`minimize-2`,[[`path`,{d:`m14 10 7-7`,key:`oa77jy`}],[`path`,{d:`M20 10h-6V4`,key:`mjg0md`}],[`path`,{d:`m3 21 7-7`,key:`tjx5ai`}],[`path`,{d:`M4 14h6v6`,key:`rmj7iw`}]]),Im=Z(`moon`,[[`path`,{d:`M20.985 12.486a9 9 0 1 1-9.473-9.472c.405-.022.617.46.402.803a6 6 0 0 0 8.268 8.268c.344-.215.825-.004.803.401`,key:`kfwtm`}]]),Lm=Z(`palette`,[[`path`,{d:`M12 22a1 1 0 0 1 0-20 10 9 0 0 1 10 9 5 5 0 0 1-5 5h-2.25a1.75 1.75 0 0 0-1.4 2.8l.3.4a1.75 1.75 0 0 1-1.4 2.8z`,key:`e79jfc`}],[`circle`,{cx:`13.5`,cy:`6.5`,r:`.5`,fill:`currentColor`,key:`1okk4w`}],[`circle`,{cx:`17.5`,cy:`10.5`,r:`.5`,fill:`currentColor`,key:`f64h9f`}],[`circle`,{cx:`6.5`,cy:`12.5`,r:`.5`,fill:`currentColor`,key:`qy21gx`}],[`circle`,{cx:`8.5`,cy:`7.5`,r:`.5`,fill:`currentColor`,key:`fotxhn`}]]),Rm=Z(`paperclip`,[[`path`,{d:`m16 6-8.414 8.586a2 2 0 0 0 2.829 2.829l8.414-8.586a4 4 0 1 0-5.657-5.657l-8.379 8.551a6 6 0 1 0 8.485 8.485l8.379-8.551`,key:`1miecu`}]]),zm=Z(`pause`,[[`rect`,{x:`14`,y:`3`,width:`5`,height:`18`,rx:`1`,key:`kaeet6`}],[`rect`,{x:`5`,y:`3`,width:`5`,height:`18`,rx:`1`,key:`1wsw3u`}]]),Bm=Z(`play`,[[`path`,{d:`M5 5a2 2 0 0 1 3.008-1.728l11.997 6.998a2 2 0 0 1 .003 3.458l-12 7A2 2 0 0 1 5 19z`,key:`10ikf1`}]]),Vm=Z(`plus`,[[`path`,{d:`M5 12h14`,key:`1ays0h`}],[`path`,{d:`M12 5v14`,key:`s699le`}]]),Hm=Z(`radio`,[[`path`,{d:`M16.247 7.761a6 6 0 0 1 0 8.478`,key:`1fwjs5`}],[`path`,{d:`M19.075 4.933a10 10 0 0 1 0 14.134`,key:`ehdyv1`}],[`path`,{d:`M4.925 19.067a10 10 0 0 1 0-14.134`,key:`1q22gi`}],[`path`,{d:`M7.753 16.239a6 6 0 0 1 0-8.478`,key:`r2q7qm`}],[`circle`,{cx:`12`,cy:`12`,r:`2`,key:`1c9p78`}]]),Um=Z(`refresh-cw`,[[`path`,{d:`M3 12a9 9 0 0 1 9-9 9.75 9.75 0 0 1 6.74 2.74L21 8`,key:`v9h5vc`}],[`path`,{d:`M21 3v5h-5`,key:`1q7to0`}],[`path`,{d:`M21 12a9 9 0 0 1-9 9 9.75 9.75 0 0 1-6.74-2.74L3 16`,key:`3uifl3`}],[`path`,{d:`M8 16H3v5`,key:`1cv678`}]]),Wm=Z(`rotate-ccw`,[[`path`,{d:`M3 12a9 9 0 1 0 9-9 9.75 9.75 0 0 0-6.74 2.74L3 8`,key:`1357e3`}],[`path`,{d:`M3 3v5h5`,key:`1xhq8a`}]]),Gm=Z(`rotate-cw`,[[`path`,{d:`M21 12a9 9 0 1 1-9-9c2.52 0 4.93 1 6.74 2.74L21 8`,key:`1p45f6`}],[`path`,{d:`M21 3v5h-5`,key:`1q7to0`}]]),Km=Z(`search`,[[`path`,{d:`m21 21-4.34-4.34`,key:`14j7rj`}],[`circle`,{cx:`11`,cy:`11`,r:`8`,key:`4ej97u`}]]),qm=Z(`send`,[[`path`,{d:`M14.536 21.686a.5.5 0 0 0 .937-.024l6.5-19a.496.496 0 0 0-.635-.635l-19 6.5a.5.5 0 0 0-.024.937l7.93 3.18a2 2 0 0 1 1.112 1.11z`,key:`1ffxy3`}],[`path`,{d:`m21.854 2.147-10.94 10.939`,key:`12cjpa`}]]),Jm=Z(`server-cog`,[[`path`,{d:`m10.852 14.772-.383.923`,key:`11vil6`}],[`path`,{d:`M13.148 14.772a3 3 0 1 0-2.296-5.544l-.383-.923`,key:`1v3clb`}],[`path`,{d:`m13.148 9.228.383-.923`,key:`t2zzyc`}],[`path`,{d:`m13.53 15.696-.382-.924a3 3 0 1 1-2.296-5.544`,key:`1bxfiv`}],[`path`,{d:`m14.772 10.852.923-.383`,key:`k9m8cz`}],[`path`,{d:`m14.772 13.148.923.383`,key:`1xvhww`}],[`path`,{d:`M4.5 10H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2v4a2 2 0 0 1-2 2h-.5`,key:`tn8das`}],[`path`,{d:`M4.5 14H4a2 2 0 0 0-2 2v4a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2v-4a2 2 0 0 0-2-2h-.5`,key:`1g2pve`}],[`path`,{d:`M6 18h.01`,key:`uhywen`}],[`path`,{d:`M6 6h.01`,key:`1utrut`}],[`path`,{d:`m9.228 10.852-.923-.383`,key:`1wtb30`}],[`path`,{d:`m9.228 13.148-.923.383`,key:`1a830x`}]]),Ym=Z(`server`,[[`rect`,{width:`20`,height:`8`,x:`2`,y:`2`,rx:`2`,ry:`2`,key:`ngkwjq`}],[`rect`,{width:`20`,height:`8`,x:`2`,y:`14`,rx:`2`,ry:`2`,key:`iecqi9`}],[`line`,{x1:`6`,x2:`6.01`,y1:`6`,y2:`6`,key:`16zg32`}],[`line`,{x1:`6`,x2:`6.01`,y1:`18`,y2:`18`,key:`nzw8ys`}]]),Xm=Z(`settings-2`,[[`path`,{d:`M14 17H5`,key:`gfn3mx`}],[`path`,{d:`M19 7h-9`,key:`6i9tg`}],[`circle`,{cx:`17`,cy:`17`,r:`3`,key:`18b49y`}],[`circle`,{cx:`7`,cy:`7`,r:`3`,key:`dfmy0x`}]]),Zm=Z(`shield-check`,[[`path`,{d:`M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z`,key:`oel41y`}],[`path`,{d:`m9 12 2 2 4-4`,key:`dzmm74`}]]),Qm=Z(`sliders-horizontal`,[[`path`,{d:`M10 5H3`,key:`1qgfaw`}],[`path`,{d:`M12 19H3`,key:`yhmn1j`}],[`path`,{d:`M14 3v4`,key:`1sua03`}],[`path`,{d:`M16 17v4`,key:`1q0r14`}],[`path`,{d:`M21 12h-9`,key:`1o4lsq`}],[`path`,{d:`M21 19h-5`,key:`1rlt1p`}],[`path`,{d:`M21 5h-7`,key:`1oszz2`}],[`path`,{d:`M8 10v4`,key:`tgpxqk`}],[`path`,{d:`M8 12H3`,key:`a7s4jb`}]]),$m=Z(`sparkles`,[[`path`,{d:`M11.017 2.814a1 1 0 0 1 1.966 0l1.051 5.558a2 2 0 0 0 1.594 1.594l5.558 1.051a1 1 0 0 1 0 1.966l-5.558 1.051a2 2 0 0 0-1.594 1.594l-1.051 5.558a1 1 0 0 1-1.966 0l-1.051-5.558a2 2 0 0 0-1.594-1.594l-5.558-1.051a1 1 0 0 1 0-1.966l5.558-1.051a2 2 0 0 0 1.594-1.594z`,key:`1s2grr`}],[`path`,{d:`M20 2v4`,key:`1rf3ol`}],[`path`,{d:`M22 4h-4`,key:`gwowj6`}],[`circle`,{cx:`4`,cy:`20`,r:`2`,key:`6kqj1y`}]]),eh=Z(`square`,[[`rect`,{width:`18`,height:`18`,x:`3`,y:`3`,rx:`2`,key:`afitv7`}]]),th=Z(`sun`,[[`circle`,{cx:`12`,cy:`12`,r:`4`,key:`4exip2`}],[`path`,{d:`M12 2v2`,key:`tus03m`}],[`path`,{d:`M12 20v2`,key:`1lh1kg`}],[`path`,{d:`m4.93 4.93 1.41 1.41`,key:`149t6j`}],[`path`,{d:`m17.66 17.66 1.41 1.41`,key:`ptbguv`}],[`path`,{d:`M2 12h2`,key:`1t8f8n`}],[`path`,{d:`M20 12h2`,key:`1q8mjw`}],[`path`,{d:`m6.34 17.66-1.41 1.41`,key:`1m8zz5`}],[`path`,{d:`m19.07 4.93-1.41 1.41`,key:`1shlcs`}]]),nh=Z(`test-tube-diagonal`,[[`path`,{d:`M21 7 6.82 21.18a2.83 2.83 0 0 1-3.99-.01a2.83 2.83 0 0 1 0-4L17 3`,key:`1ub6xw`}],[`path`,{d:`m16 2 6 6`,key:`1gw87d`}],[`path`,{d:`M12 16H4`,key:`1cjfip`}]]),rh=Z(`trash-2`,[[`path`,{d:`M10 11v6`,key:`nco0om`}],[`path`,{d:`M14 11v6`,key:`outv1u`}],[`path`,{d:`M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6`,key:`miytrc`}],[`path`,{d:`M3 6h18`,key:`d0wm0j`}],[`path`,{d:`M8 6V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2`,key:`e791ji`}]]),ih=Z(`triangle-alert`,[[`path`,{d:`m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3`,key:`wmoenq`}],[`path`,{d:`M12 9v4`,key:`juzpu7`}],[`path`,{d:`M12 17h.01`,key:`p32p05`}]]),ah=Z(`unlink`,[[`path`,{d:`m18.84 12.25 1.72-1.71h-.02a5.004 5.004 0 0 0-.12-7.07 5.006 5.006 0 0 0-6.95 0l-1.72 1.71`,key:`yqzxt4`}],[`path`,{d:`m5.17 11.75-1.71 1.71a5.004 5.004 0 0 0 .12 7.07 5.006 5.006 0 0 0 6.95 0l1.71-1.71`,key:`4qinb0`}],[`line`,{x1:`8`,x2:`8`,y1:`2`,y2:`5`,key:`1041cp`}],[`line`,{x1:`2`,x2:`5`,y1:`8`,y2:`8`,key:`14m1p5`}],[`line`,{x1:`16`,x2:`16`,y1:`19`,y2:`22`,key:`rzdirn`}],[`line`,{x1:`19`,x2:`22`,y1:`16`,y2:`16`,key:`ox905f`}]]),oh=Z(`x`,[[`path`,{d:`M18 6 6 18`,key:`1bl5f8`}],[`path`,{d:`m6 6 12 12`,key:`d8bk6v`}]]);function sh(e){return/^[a-zA-Z][a-zA-Z\d+\-.]*:/.test(e)||e.startsWith(`//`)}function ch(e){return[`localhost`,`127.0.0.1`,`::1`,`[::1]`].includes(e)}function lh(e,t,n){let r=e.trim();if(!r)return{error:`status URL is empty`};let i;try{i=new URL(r,t)}catch{return{error:`status URL is invalid`}}let a=!sh(r),o=ch(i.hostname);return!a&&!o?{error:`${n} must be relative or loopback`}:{source:{isLoopback:o,isRelative:a,url:r}}}function uh(e,t){return lh(e,t,`statusUrl`)}function dh(e,t){let n=lh(e,t,`Ops statusUrl`);return n.error?{error:`${n.error}; use showcase mode for public links.`}:n}function fh(e,t,n){let r=new URL(e,n);return r.searchParams.set(`goal_activation`,t),r.toString()}function ph(e,t){if(!t||!e.isLoopback)return null;try{let n=new URL(e.url,window.location.href),r=new URL(t,n.origin);return ch(r.hostname)?r.toString():null}catch{return null}}function mh(e,t){return{detailUrl:ph(t,e.local_dashboard_api?.periodic_report_detail_url),indexUrl:ph(t,e.local_dashboard_api?.periodic_report_index_url)}}async function hh(e,t){let n=new URL(e);n.searchParams.set(`goal_id`,t),n.searchParams.set(`limit`,`100`),n.searchParams.set(`offset`,`0`);let r=await fetch(n,{cache:`no-store`});if(!r.ok)throw Error(`HTTP ${r.status} while loading published reports`);return wp.parse(await r.json()).periodic_reports}async function gh(e,t){let n=new URL(e);Object.entries(t).forEach(([e,t])=>n.searchParams.set(e,t));let r=await fetch(n,{cache:`no-store`});if(!r.ok)throw Error(`HTTP ${r.status} while loading published report detail`);return Ep.parse(await r.json()).projection}function _h(e,t,n){let r=e.find(e=>e.agentId===t&&e.available)??e.find(e=>e.agentId===n&&e.available)??e.find(e=>e.available);if(!r)throw Error(`Chat requires at least one available route`);return r}function vh(e){return e.kind===`todo`}var yh=[{id:`next`,label:`找下一步`,prompt:`结合当前 Goal,告诉我现在最值得推进的一个动作,并说明理由。`},{id:`gate`,label:`看阻塞`,prompt:`当前 Goal 有哪些 Gate 或阻塞?哪些需要我决定?`},{id:`evidence`,label:`查证据`,prompt:`检查当前 Goal 的 Evidence,告诉我哪些结论已经有依据,哪些还需要验证。`}];function bh(e){return!!(e&&typeof e==`object`&&e.session_invalidated===!0)}var xh=``.replace(/\/+$/,``);function Sh(e){return!xh||/^https?:\/\//.test(e)?e:new URL(e,`${xh}/`).toString()}var Ch=J({todo_id:W().nullable(),role:W().nullable(),status:W(),priority:W().nullable(),text:W(),action_kind:W().nullable(),task_class:W().nullable(),claimed_by:W().nullable(),evidence:W().nullable()}),wh=J({goal_id:W(),title:W(),objective:W(),status:W(),waiting_on:W().nullable(),severity:W().nullable(),gate:W(),next_action:W(),top_todo:Ch.nullable(),todos:q(Ch),evidence:q(W()),quota:J({state:W().nullable(),spent_slots:G().nullable(),allowed_slots:G().nullable(),reason:W().nullable()})});J({ok:K(),schema_version:X(`loopx_chat_status_v0`),selected_goal_id:W().nullable(),goal_count:G(),goals:q(wh)});var Th=J({schema_version:W(),executor_endpoint:W(),executor_endpoint_source:W(),executor_endpoint_default_reason:W().optional(),executor_kind:W(),model:W(),model_source:W(),credential_env_var:W(),operator_credential_configured:K(),available:K().nullable(),unavailable_reason:W().nullable()}),Eh=J({ok:X(!0),schema_version:Y([`loopx_chat_capabilities_v0`,`loopx_chat_capabilities_v1`]),agent_backend:W(),sandbox:W(),approval_policy:W(),todo_write:W(),goal_subagent_configuration:W().optional(),goal_id:W().nullable(),manager:J({scope:X(`owner_global`),model:W(),reasoning_effort:W(),channel_binding:Th.optional(),runtime:J({schema_version:X(`manager_runtime_effective_profile_v0`),runtime_profile:Y([`restricted`,`trusted_owner`]),source:W(),configuration_revision:W(),standing_grant:W(),sandbox:W(),approval_policy:W(),tool_classes:q(W()),status:W(),repair:W().optional()})}).optional(),streaming:K().optional(),resume:K().optional(),interrupt:K().optional(),typed_actions:K().optional(),action_kinds:q(W()).optional(),adapters:q(J({agent_id:W(),display_name:W(),adapter_kind:W(),available:K(),streaming:K(),resume:K(),interrupt:K(),location:W().optional(),source:W().optional(),tool_calls:K().optional(),trust_scope:W().optional()})).optional(),lark_cli:J({available:K(),source:W(),version:W().nullable(),error_code:W().nullable()}).optional()}),Dh=J({kind:X(`todo`),text:W(),priority:Y([`P0`,`P1`,`P2`]),rationale:W()}),Oh=pd(`kind`,[Dh,J({kind:X(`steward_team_plan_preview`),preview:yd(W(),ad())})]),kh=J({operation:Y([`merge`,`release`,`deploy`,`delete`,`payment`]),target:W().min(1).max(160),summary:W().max(300)}),Ah=J({schema_version:X(`loopx_chat_agent_response_v0`),message:W(),proposals:q(Oh),protected_action:kh.nullable().optional().default(null),gate:J({kind:W(),summary:W(),next_action:W()}).nullable()}),jh=J({closed:X(!0),ok:X(!0),session_id:W().min(1)});J({dry_run:X(!0),ok:X(!0),preview_id:W().min(1),todo:J({goal_id:W().min(1),text:W(),todo_id:W().optional()})});var Mh=J({schema_version:X(`loopx_chat_todo_receipt_v0`),receipt_id:W().min(1),preview_id:W().min(1),goal_id:W().min(1),todo_id:W().min(1),status:X(`applied`),outcome:Y([`todo_added`,`todo_already_exists`]),already_exists:K(),preview_revision:W().nullable()});J({applied:X(!0),ok:X(!0),receipt:Mh,todo:J({text:W(),todo_id:W()})});var Nh=J({model_config:J({model:W(),reasoning_effort:W().optional()}).optional(),mode:W(),spawn_allowed:K(),max_children:G().int().nonnegative(),allowed_domains:q(W()).optional().default([])}).passthrough(),Ph=J({ok:X(!0),dry_run:K(),execute:K(),written:K(),changed:K(),goal_id:W().min(1),changed_fields:q(W()),before:J({orchestration:Nh}).passthrough(),after:J({orchestration:Nh}).passthrough(),preview_id:W().min(1),feature_summary:J({multi_subagent:Y([`off`,`enabled`])}).passthrough(),global_sync:J({required:K(),executed:K(),readback:J({status:W(),verified:K()}).passthrough()}).passthrough()}),Fh=J({id:W().min(1),outcome:Y([`approved`,`rejected`,`cancelled`]),projectionVerified:K().nullable(),proposal:Dh,receipt:Mh.nullable()}).superRefine((e,t)=>{e.outcome===`approved`&&!e.receipt&&t.addIssue({code:`custom`,message:`approved decision history requires a Todo receipt`,path:[`receipt`]}),e.outcome!==`approved`&&e.receipt&&t.addIssue({code:`custom`,message:`zero-write decision history must not include a Todo receipt`,path:[`receipt`]})});J({schema_version:X(`loopx_chat_decision_history_v0`),goal_id:W().min(1),decisions:q(Fh).max(24)});var Ih=class extends Error{payload;constructor(e,t){super(e),this.payload=t}},Lh=Y([`goal.create`,`goal.update`,`goal.lifecycle`,`todo.create`,`todo.update`,`agent.bind`,`heartbeat.bind`,`monitor.create`,`monitor.update`,`gate.resolve`,`run.correct`,`operation.execute`,`team.plan`]),Rh=J({schema_version:X(`loopx_operation_envelope_v0`),lifecycle_state:Y([`prepared`,`awaiting_confirmation`,`claimed`,`outcome_observed`]),operation_id:W().min(1),confirmation_digest:W().min(1),payload_digest:W().min(1),projection_digest:W().min(1),expires_at:W().min(1),delivery:yd(W(),ad()).nullable(),confirmation:yd(W(),ad()).nullable(),claim:yd(W(),ad()).nullable(),outcome:yd(W(),ad()).nullable(),result_delivery:yd(W(),ad()).nullable().optional()}).passthrough(),zh=J({schema_version:X(`loopx_chat_action_proposal_v1`),proposal_id:W().min(1),action_kind:Lh,summary:W().min(1),normalized_parameters:yd(W(),ad()),context:yd(W(),ad()),expected_state_fingerprint:W().min(1),permission_classification:W().min(1),validation_evidence:q(W().refine(e=>e.trim().length>0,`Validation evidence must be non-blank text`)),available_transitions:q(Y([`apply`,`cancel`,`regenerate`,`reject`,`defer`])),status:Y([`preview_ready`,`applying`,`gated`,`failed`,`rejected`,`deferred`,`cancelled`,`stale`,`applied`]),receipt:yd(W(),ad()).nullable(),stale:yd(W(),ad()).nullable(),gate:yd(W(),ad()).nullable().optional(),error:yd(W(),ad()).nullable().optional(),checkpoint:yd(W(),ad()).nullable().optional(),failure:yd(W(),ad()).nullable().optional(),canonical_update_basis:J({schema_version:X(`loopx_chat_canonical_update_basis_v0`),provider_revision:W().min(1),source_authority:Y([`file_v0`,`sqlite_v0`]),registry_sha256:W().regex(/^[a-f0-9]{64}$/)}).optional(),regenerated_from:W().nullable().optional(),operation:Rh.nullable().optional(),created_at:W(),updated_at:W()}),Bh=J({ok:X(!0),proposal:zh});async function Vh(e){let t=await qh(`/api/actions/preview`,{method:`POST`,body:JSON.stringify({action_kind:e.actionKind,context:e.context,idempotency_key:e.idempotencyKey,normalized_parameters:e.normalizedParameters,summary:e.summary})});return Bh.parse(t).proposal}var Hh=J({ok:X(!0),schema_version:X(`loopx_chat_action_list_v1`),proposals:q(zh)});async function Uh(e={}){let t=new URLSearchParams;e.contextKind&&t.set(`context_kind`,e.contextKind),e.goalId&&t.set(`goal_id`,e.goalId);let n=t.size>0?`?${t.toString()}`:``;return Hh.parse(await qh(`/api/actions${n}`)).proposals}async function Wh(e){let t=await qh(`/api/actions/${encodeURIComponent(e)}/apply`,{method:`POST`,body:`{}`});return J({ok:X(!0),proposal:zh,turn:yd(W(),ad()).nullable().optional()}).parse(t)}async function Gh(e){return Bh.parse(await qh(`/api/actions/${encodeURIComponent(e)}/cancel`,{method:`POST`,body:`{}`})).proposal}async function Kh(e,t){return Bh.parse(await qh(`/api/actions/${encodeURIComponent(e)}/${t}`,{method:`POST`,body:`{}`})).proposal}async function qh(e,t){let n;try{n=await fetch(Sh(e),{cache:`no-store`,...t,headers:{"Content-Type":`application/json`,...t?.headers}})}catch{throw new Ih(`无法连接 LoopX Chat 服务。请确认 Dashboard 与 Chat 服务已启动且来自同一版本。`,{error_code:`chat_api_unavailable`})}let r=await n.text(),i=null;if(r.trim())try{i=JSON.parse(r)}catch{i=null}let a=i&&typeof i==`object`&&!Array.isArray(i)?i:{};if(!n.ok){let e=(a.proposal&&typeof a.proposal==`object`?a.proposal:null)?.status===`stale`?`来源状态已变化,请重新生成预览。`:null,t=n.status>=500?`LoopX Chat 服务暂时不可用(HTTP ${n.status})。请确认 Dashboard 与 Chat 服务已启动且来自同一版本。`:`LoopX Chat 请求失败(HTTP ${n.status})。`;throw new Ih(e??String(a.error||t),Object.keys(a).length?a:{error_code:`chat_api_unavailable`,http_status:n.status})}if(i===null)throw new Ih(`LoopX Chat 服务返回了无法识别的响应(HTTP ${n.status})。请确认 Dashboard 与 Chat 服务来自同一版本。`,{error_code:`invalid_chat_api_response`,http_status:n.status});return i}async function Jh(){return Eh.parse(await qh(`/api/chat/capabilities`))}async function Yh(e){return qh(`/api/chat/projection-messages`,{method:`POST`,body:JSON.stringify({answer:e.answer,context_kind:e.contextKind,goal_id:e.goalId,question:e.question})})}async function Xh(e,t,n=`resume_latest`,r=`goal`){return qh(`/api/chat/sessions`,{method:`POST`,body:JSON.stringify({goal_id:e,agent_id:t,mode:n,context_kind:r})})}async function Zh(e){return qh(`/api/chat/sessions/${e}`)}async function Qh(e){let t=new URLSearchParams;return e.agentId&&t.set(`agent_id`,e.agentId),e.channelId&&t.set(`channel_id`,e.channelId),e.goalId&&t.set(`goal_id`,e.goalId),qh(`/api/chat/sessions?${t.toString()}`)}function $h(e){let t=new Map;for(let n of e)for(let e of n.messages)t.set(e.message_id,e);return[...t.values()].sort((e,t)=>e.created_at.localeCompare(t.created_at)||e.message_id.localeCompare(t.message_id))}async function eg(e){let t=await Qh(e),n=await Promise.all(t.sessions.map(e=>Zh(e.session_id)));return{messages:$h(n),sessions:t.sessions,snapshots:n}}async function tg(e,t,n,r=[]){return qh(`/api/chat/sessions/${e}/turns`,{method:`POST`,body:JSON.stringify({message:t,client_turn_id:n,...r.length?{attachments:r.map(e=>({data_url:e.dataUrl,id:e.id,mime_type:e.mimeType,name:e.name,size:e.size}))}:{}})})}function ng(e){let t=e.split(` +`).filter(e=>e.startsWith(`data:`)).map(e=>e.slice(5).trimStart()).join(` +`);if(!t)return null;try{let e=JSON.parse(t);return!e.kind||!e.payload||typeof e.payload!=`object`?null:{event_id:String(e.event_id??``),sequence:Number(e.sequence??0),kind:String(e.kind),created_at:String(e.created_at??``),payload:e.payload}}catch{return null}}async function rg(e,t,n){let r=``,i=0,a=!1;for(;!a&&i<4;){let o=typeof window>`u`?`http://127.0.0.1`:window.location.origin,s=new URL(Sh(e),o);r&&s.searchParams.set(`after`,r);try{let e=await fetch(s,{cache:`no-store`,headers:{Accept:`text/event-stream`},signal:n});if(!e.ok||!e.body)throw new Ih(`SSE HTTP ${e.status}`,{status:e.status});let o=e.body.getReader(),c=new TextDecoder,l=``;for(;;){let{done:e,value:n}=await o.read();l+=c.decode(n,{stream:!e}).replaceAll(`\r +`,` +`);let i=l.indexOf(` + +`);for(;i>=0;){let e=l.slice(0,i);l=l.slice(i+2);let n=ng(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 Ih(`Agent 事件流连接已断开。`,{reconnect_attempts:i})}async function ig(e,t){return qh(`/api/chat/sessions/${e}/turns/${t}/interrupt`,{method:`POST`,body:`{}`})}function ag(e){return qh(`/api/chat/sessions/${e}/loopx`)}function og(e,t){return qh(`/api/chat/sessions/${e}/loopx`,{method:`POST`,body:JSON.stringify({operation:`operations`,limit:10,...t?{cursor:t}:{}})})}function sg(e,t){return qh(`/api/chat/sessions/${e}/loopx`,{method:`POST`,body:JSON.stringify({operation:`inspect`,binding_id:t})})}function cg(e,t,n,r=crypto.randomUUID()){return qh(`/api/chat/sessions/${e}/loopx`,{method:`POST`,body:JSON.stringify({operation:t,operation_id:r,...n?{settings:n}:{}})})}function lg(e,t,n){return qh(`/api/chat/sessions/${e}/loopx`,{method:`POST`,body:JSON.stringify({operation:`message`,operation_id:crypto.randomUUID(),message:t,delivery_mode:n})})}async function ug(e,t,n={}){let r=await tg(e,t,n.clientTurnId??crypto.randomUUID(),n.attachments);return n.onPhase?.(`turn.accepted`,r.turn_id),dg(e,r.turn_id,r.events_url,n)}async function dg(e,t,n,r={}){let i=null,a={failure:null,interrupted:null};try{await rg(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 Ih&&!r.signal?.aborted?new Ih(i.message,{...i.payload,events_url:n,reconnectable:!0,session_id:e,turn_id:t}):i}if(a.failure)throw new Ih(String(a.failure.message||`Agent 回合失败。`),a.failure);if(a.interrupted)throw new Ih(`Agent 回合已中断。`,{...a.interrupted,error_code:`turn_interrupted`,session_id:e,turn_id:t});return{response:Ah.parse(i),sessionId:e,turnId:t}}async function fg(e,t,n={}){return dg(e,t,`/api/chat/sessions/${e}/turns/${t}/events`,n)}async function pg(e){let t=jh.parse(await qh(`/api/chat/sessions/${e}`,{keepalive:!0,method:`DELETE`}));if(t.session_id!==e)throw new Ih(`Agent 会话关闭回执与本次请求不一致。`,{session_id:t.session_id});return t}async function mg(e){return qh(`/api/chat/sessions/${e}/resume`,{method:`POST`,body:`{}`})}function hg(e){return{goal_id:e.goalId,enabled:e.enabled,...e.modelConfig===void 0?{}:{model_config:e.modelConfig},...e.enabled?{max_children:e.maxChildren,allowed_domains:e.allowedDomains}:{}}}function gg(e,t){let n=e.after.orchestration,r=[...new Set(t.allowedDomains)],i=e.feature_summary.multi_subagent===`enabled`;if(!(e.goal_id===t.goalId&&i===t.enabled&&(t.modelConfig===void 0||JSON.stringify(n.model_config??null)===JSON.stringify(t.modelConfig))&&(t.enabled?n.max_children===t.maxChildren&&JSON.stringify(n.allowed_domains)===JSON.stringify(r):n.spawn_allowed===!1&&n.max_children===0)))throw new Ih(`Goal 子代理配置回执与本次请求不一致,界面已停止更新。`,{after:e.after,goal_id:e.goal_id});return e}async function _g(e){let t=Ph.parse(await qh(`/api/chat/goal-subagents/dry-run`,{method:`POST`,body:JSON.stringify(hg(e))}));if(!t.dry_run||t.execute||t.written)throw new Ih(`Goal 子代理预览返回了非预览回执,已停止进入确认状态。`,{result:t});return gg(t,e)}async function vg(e,t){let n=Ph.parse(await qh(`/api/chat/goal-subagents/apply`,{method:`POST`,body:JSON.stringify({...hg(e),preview_id:t})}));if(n.preview_id!==t||n.dry_run||!n.execute)throw new Ih(`Goal 子代理写入回执与本次确认不一致,界面已停止更新。`,{result:n});if(n.changed&&(!n.written||!n.global_sync.executed||!n.global_sync.readback.verified))throw new Ih(`Goal 子代理设置未通过共享状态读回验证。`,{result:n});return gg(n,e)}var yg=J({ok:X(!0),targets:q(J({enabled:K(),provider:W(),target_name:W()}))});async function bg(){return yg.parse(await qh(`/api/chat/goal-channel/targets`)).targets}var xg=J({ok:K(),blocker:W().optional(),public_summary:W().optional(),status:W().optional()});async function Sg(e){return xg.parse(await qh(`/api/chat/goal-channel/setup`,{method:`POST`,body:JSON.stringify({execute:e.execute,goal_id:e.goalId,target:e.target})}))}async function Cg(e){return xg.parse(await qh(`/api/chat/goal-channel/configure`,{method:`POST`,body:JSON.stringify({auto_notify_human_gates:e.autoNotify,goal_id:e.goalId})}))}var wg=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:wg.nullable().optional()});var Tg=J({schema_version:X(`loopx_machine_configuration_v0`),namespaces:yd(W(),yd(W(),ad()))}),Eg=J({namespace:W(),title:W(),description:W(),schema_versions:q(W()).min(1),configuration_template:yd(W(),ad()),template_status:Y([`ready`,`schema_only`])}),Dg=J({schema_version:X(`machine_configuration_catalog_v0`),namespaces:q(Eg)}),Og=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()}),kg=J({schema_version:X(`capability_configuration_editor_v0`),editable:K(),supported_scopes:q(Y([`goal`,`machine`])),writable_scopes:q(Y([`goal`,`machine`])),fields:q(Og),read_only_reason:W().optional()}),Ag=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:kg}))}),jg=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:Ag}),Mg=J({ok:X(!0),goal_id:W(),capability_id:W(),changed_fields:q(W()),goal_configuration:yd(W(),ad()).nullable(),capability_catalog:Ag}),Ng=Mg.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()}),Pg=dd([Mg.extend({schema_version:X(`goal_configuration_transaction_v0`),status:Y([`applied`,`unchanged`]),plan_revision:W(),applied_revision:W(),readback_verified:X(!0)}),J({ok:X(!1),schema_version:X(`goal_configuration_transaction_v0`),status:X(`partial_write`),goal_id:W(),capability_id:W(),plan_revision:W(),applied_revision:W().nullable(),source_written:X(!0),shared_sync_pending:X(!0),readback_verified:K(),changed_fields:q(W()),goal_configuration:yd(W(),ad()).nullable(),capability_catalog:Ag,error:W(),recommended_action:W()})]),Fg=J({ok:X(!0),available_namespaces:q(W()),namespace_catalog:Dg.optional().default({schema_version:`machine_configuration_catalog_v0`,namespaces:[]}),capability_catalog:Ag,changed_namespaces:q(W()).optional().default([]),invalid_namespaces:q(W()).optional().default([]),machine_configuration:Tg.nullable().optional()}),Ig=Fg.extend({schema_version:X(`machine_configuration_inspection_v0`),status:Y([`configured`,`absent`,`invalid`]),revision:W()}),Lg=Fg.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:Tg.nullable()}),Rg=Fg.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()}),zg=Fg.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()}),Bg=Fg.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)}),Vg=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()}),Hg=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:Vg,base_url:Vg});async function Ug(){return Hg.parse(await qh(`/api/chat/operator-credential`))}async function Wg(e){return Hg.parse(await qh(`/api/chat/operator-credential`,{method:`POST`,body:JSON.stringify(e)}))}async function Gg(){return Ig.parse(await qh(`/api/chat/machine-configuration`))}async function Kg(e){let t=new URLSearchParams({goal_id:e});return jg.parse(await qh(`/api/chat/goal-configuration?${t.toString()}`))}async function qg(e,t,n){return Ng.parse(await qh(`/api/chat/goal-configuration/preview`,{method:`POST`,body:JSON.stringify({goal_id:e,capability_id:t,configuration:n})}))}async function Jg(e,t,n,r){return Pg.parse(await qh(`/api/chat/goal-configuration/apply`,{method:`POST`,body:JSON.stringify({goal_id:e,capability_id:t,configuration:n,expected_plan_revision:r})}))}async function Yg(e,t){return Lg.parse(await qh(`/api/chat/machine-configuration/preview`,{method:`POST`,body:JSON.stringify({namespace:e,namespace_configuration:t})}))}async function Xg(e,t,n){return Rg.parse(await qh(`/api/chat/machine-configuration/apply`,{method:`POST`,body:JSON.stringify({expected_plan_revision:n,namespace:e,namespace_configuration:t})}))}async function Zg(e){return Lg.parse(await qh(`/api/chat/machine-configuration/preview`,{method:`POST`,body:JSON.stringify({namespace:e,operation:`remove`})}))}async function Qg(e,t){return Rg.parse(await qh(`/api/chat/machine-configuration/apply`,{method:`POST`,body:JSON.stringify({expected_plan_revision:t,namespace:e,operation:`remove`})}))}async function $g(e){return zg.parse(await qh(`/api/chat/machine-configuration/rollback`,{method:`POST`,body:JSON.stringify({execute:!1,transaction_id:e})}))}async function e_(e,t){return Bg.parse(await qh(`/api/chat/machine-configuration/rollback`,{method:`POST`,body:JSON.stringify({execute:!0,expected_plan_revision:t,transaction_id:e})}))}var t_=J({ok:X(!0),goals:q(J({goal_id:W(),repository:J({branch:W(),identity:W(),label:W(),read_only:X(!0)})}))});async function n_(){return t_.parse(await qh(`/api/chat/goals/contexts`)).goals}var r_=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 i_(){return r_.parse(await qh(`/api/chat/lark/apps`)).apps}var a_=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 o_(e){return a_.parse(await qh(`/api/chat/lark/app-setups`,{method:`POST`,body:JSON.stringify({app_ref:e.appRef,brand:e.brand})}))}async function s_(e){return a_.parse(await qh(`/api/chat/lark/app-setups/${encodeURIComponent(e)}`))}async function c_(e){return a_.parse(await qh(`/api/chat/lark/app-setups/${encodeURIComponent(e)}`,{method:`DELETE`}))}var l_=[`invalid_event`,`binding_unavailable`,`chat_mismatch`,`topic_mismatch`,`route_ambiguous`,`self_message`,`invalid_routing_state`,`not_addressed`],u_=J({ok:X(!0),chats:q(J({chat_id:W(),chat_name:W()}))});async function d_(e,t){let n=new URLSearchParams({app_ref:e});return t&&n.set(`query`,t),u_.parse(await qh(`/api/chat/lark/chats?${n.toString()}`)).chats}var f_=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(l_).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 p_(){return f_.parse(await qh(`/api/chat/lark/connections`)).connections}async function m_(e){return xg.parse(await qh(`/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 h_(e,t){let n=new URLSearchParams({goal_id:e,connection_id:t});return xg.parse(await qh(`/api/chat/lark/connections?${n.toString()}`,{method:`DELETE`}))}function g_(e){return{loadedUrl:null,projectionRevision:0,requestedUrl:e,selectionRevision:0,requestGeneration:0}}function __(e,t){return e.selectionRevision+=1,e.requestedUrl=t,e.selectionRevision}function v_(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 y_(e,t){return t.generation===e.requestGeneration&&e.projectionRevision===t.projectionRevision&&e.selectionRevision===t.selectionRevision}function b_(e,t){return y_(e,t)&&(!t.background||e.requestedUrl===null&&e.loadedUrl===t.url)}function x_(e,t,n){return t.get(e)===n}function S_(e,t,n,r){return e.filter(e=>x_(r(e),n,t))}function C_(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 w_=[`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`],T_=[`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`],E_=[`accounting`,`decision`,`evidence`,`state`,`work`],D_={accounting:0,decision:0,evidence:0,state:0,work:0},O_={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 k_(e,t){let n={...e};for(let r of w_)n[r]=(Number(e[r])||0)+(Number(t[r])||0);for(let r of T_)(e[r]!==void 0||t[r]!==void 0)&&(n[r]=(e[r]??0)+(t[r]??0));return n}function A_(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 j_(e,t){let n={...e};for(let r of E_)n[r]=(e[r]??0)+(t[r]??0);return n}function M_(e){let t={events_24h:0,events_7d:0,by_class_24h:{...D_},by_class_7d:{...D_}};for(let n of e)t.events_24h+=n.events_24h,t.events_7d+=n.events_7d,t.by_class_24h=j_(t.by_class_24h,n.by_class_24h),t.by_class_7d=j_(t.by_class_7d,n.by_class_7d);return t}function N_(e,t,n){if(!e&&!t)return null;let r=S_(e?.goals??[],`active`,n,e=>e.goal_id),i=S_(t?.goals??[],`stopped`,n,e=>e.goal_id),a=C_(r,i,e=>e.goal_id),o=M_(r),s=M_(i),c={events_24h:o.events_24h+s.events_24h,events_7d:o.events_7d+s.events_7d,by_class_24h:j_(o.by_class_24h,s.by_class_24h),by_class_7d:j_(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 P_(e,t,n){if(!e&&!t)return null;let r=C_([...S_(e?.items??[],`active`,n,e=>e.goal_id),...S_(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 F_(e,t){return C_([...e,...t].sort((e,t)=>t.generated_at.localeCompare(e.generated_at)),[],e=>`${e.goal_id}:${e.generated_at}:${e.classification??``}`)}function I_(e,t,n){let r=C_(S_(e.items,`active`,n,e=>e.goal_id),S_(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 L_(e){let t=e.todo_id?.trim()||``;return t?`${e.goal_id}:${t}`:`${e.goal_id}:synthetic:${e.role??``}:${e.index??``}:${e.text??``}`}function R_(e){let t={...O_};for(let n of e){for(let e of w_)t[e]+=Number(n[e])||0;for(let e of T_)n[e]!==void 0&&(t[e]=(t[e]??0)+n[e])}return t}function z_(e,t,n){if(!e&&!t)return null;let r=S_(e?.items??[],`active`,n,e=>e.goal_id),i=S_(t?.items??[],`stopped`,n,e=>e.goal_id),a=C_(r,i,L_);return{...e??t,current_projected_count:r.length+i.length,items:a,rollout_event_count:a.reduce((e,t)=>e+(t.event_count??0),0),total_count:a.length}}function B_(e,t,n){if(!e&&!t)return null;let r=S_(e?.goals??[],`active`,n,e=>e.goal_id),i=S_(t?.goals??[],`stopped`,n,e=>e.goal_id),a=C_(r,i,e=>e.goal_id),o=k_(R_(r),R_(i));return{...e??t,goals:A_(a,Number(o.runs_24h)||0),sample_run_count:(e?.sample_run_count??0)+(t?.sample_run_count??0),totals:o}}function V_(e,t,n){if(!e&&!t)return null;let r=(e?.agents??[]).filter(e=>e.goal_ids.some(e=>x_(e,n,`active`))||(e.current_todo?.goal_id?x_(e.current_todo.goal_id,n,`active`):!1)),i=(t?.agents??[]).filter(e=>e.goal_ids.some(e=>x_(e,n,`stopped`))||(e.current_todo?.goal_id?x_(e.current_todo.goal_id,n,`stopped`):!1)),a=C_(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 H_(e,t,n){if(!e&&!t)return null;let r=C_(S_(e?.goals??[],`active`,n,e=>e.goal_id),S_(t?.goals??[],`stopped`,n,e=>e.goal_id),e=>e.goal_id);return{...e??t,goals:r}}function U_(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=C_(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:V_(c.agent_management_projection,l.agent_management_projection,s),attention_queue:I_(c.attention_queue,l.attention_queue,s),decision_freshness_summary:P_(c.decision_freshness_summary,l.decision_freshness_summary,s),event_ledger_summary:N_(c.event_ledger_summary,l.event_ledger_summary,s),goal_channel_notification_projection:H_(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:F_(c.run_history.recent_runs,l.run_history.recent_runs),run_count:c.run_history.run_count+l.run_history.run_count},todo_index:z_(c.todo_index,l.todo_index,s),usage_summary:B_(c.usage_summary,l.usage_summary,s)}}function W_(e){var t,n,r=``;if(typeof e==`string`||typeof e==`number`)r+=e;else if(typeof e==`object`){if(Array.isArray(e)){var i=e.length;for(t=0;ttypeof e==`boolean`?`${e}`:e===0?`0`:e,q_=G_,J_=(e,t)=>n=>{if(t?.variants==null)return q_(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=K_(t)||K_(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 q_(e,a,t?.compoundVariants?.reduce((e,t)=>{let{class:n,className:r,...a}=t;return Object.entries(a).every(e=>{let[t,n]=e;return Array.isArray(n)?n.includes({...i,...o}[t]):{...i,...o}[t]===n})?[...e,n,r]:e},[]),n?.class,n?.className)},Y_=(e,t)=>{let n=Array(e.length+t.length);for(let t=0;t({classGroupId:e,validator:t}),Z_=(e=new Map,t=null,n)=>({nextPart:e,validators:t,classGroupId:n}),Q_=`-`,$_=[],ev=`arbitrary..`,tv=e=>{let t=iv(e),{conflictingClassGroups:n,conflictingClassGroupModifiers:r}=e;return{getClassGroupId:e=>{if(e.startsWith(`[`)&&e.endsWith(`]`))return rv(e);let n=e.split(Q_);return nv(n,+(n[0]===``&&n.length>1),t)},getConflictingClassGroupIds:(e,t)=>{if(t){let t=r[e],i=n[e];return t?i?Y_(i,t):t:i||$_}return n[e]||$_}}},nv=(e,t,n)=>{if(e.length-t===0)return n.classGroupId;let r=e[t],i=n.nextPart.get(r);if(i){let n=nv(e,t+1,i);if(n)return n}let a=n.validators;if(a===null)return;let o=t===0?e.join(Q_):e.slice(t).join(Q_),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?ev+r:void 0})(),iv=e=>{let{theme:t,classGroups:n}=e;return av(n,t)},av=(e,t)=>{let n=Z_();for(let r in e){let i=e[r];ov(i,n,r,t)}return n},ov=(e,t,n,r)=>{let i=e.length;for(let a=0;a{if(typeof e==`string`){cv(e,t,n);return}if(typeof e==`function`){lv(e,t,n,r);return}uv(e,t,n,r)},cv=(e,t,n)=>{let r=e===``?t:dv(t,e);r.classGroupId=n},lv=(e,t,n,r)=>{if(fv(e)){ov(e(r),t,n,r);return}t.validators===null&&(t.validators=[]),t.validators.push(X_(n,e))},uv=(e,t,n,r)=>{let i=Object.entries(e),a=i.length;for(let e=0;e{let n=e,r=t.split(Q_),i=r.length;for(let e=0;e`isThemeGetter`in e&&e.isThemeGetter===!0,pv=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)}}},mv=`!`,hv=`:`,gv=[],_v=(e,t,n,r,i)=>({modifiers:e,hasImportantModifier:t,baseClassName:n,maybePostfixModifierPosition:r,isExternal:i}),vv=e=>{let{prefix:t,experimentalParseClassName:n}=e,r=e=>{let t=[],n=0,r=0,i=0,a,o=e.length;for(let s=0;si?a-i:void 0;return _v(t,l,c,u)};if(t){let e=t+hv,n=r;r=t=>t.startsWith(e)?n(t.slice(e.length)):_v(gv,!1,t,void 0,!0)}if(n){let e=r;r=t=>n({className:t,parseClassName:e})}return r},yv=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}},bv=e=>({cache:pv(e.cacheSize),parseClassName:vv(e),sortModifiers:yv(e),postfixLookupClassGroupIds:xv(e),...tv(e)}),xv=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(Sv),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?_+mv:_,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},wv=(...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=bv(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=Cv(e,n);return i(e,a),a};return a=o,(...e)=>a(wv(...e))},Dv=[],Ov=e=>{let t=t=>t[e]||Dv;return t.isThemeGetter=!0,t},kv=/^\[(?:(\w[\w-]*):)?(.+)\]$/i,Av=/^\((?:(\w[\w-]*):)?(.+)\)$/i,jv=/^\d+(?:\.\d+)?\/\d+(?:\.\d+)?$/,Mv=/^(\d+(\.\d+)?)?(xs|sm|md|lg|xl)$/,Nv=/\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$/,Pv=/^(rgba?|hsla?|hwb|(ok)?(lab|lch)|color-mix)\(.+\)$/,Fv=/^(inset_)?-?((\d+)?\.?(\d+)[a-z]+|0)_-?((\d+)?\.?(\d+)[a-z]+|0)/,Iv=/^(url|image|image-set|cross-fade|element|(repeating-)?(linear|radial|conic)-gradient)\(.+\)$/,Lv=e=>jv.test(e),Rv=e=>!!e&&!Number.isNaN(Number(e)),zv=e=>!!e&&Number.isInteger(Number(e)),Bv=e=>e.endsWith(`%`)&&Rv(e.slice(0,-1)),Vv=e=>Mv.test(e),Hv=()=>!0,Uv=e=>Nv.test(e)&&!Pv.test(e),Wv=()=>!1,Gv=e=>Fv.test(e),Kv=e=>Iv.test(e),qv=e=>!Q(e)&&!$(e),Jv=e=>e.startsWith(`@container`)&&(e[10]===`/`&&e[11]!==void 0||e[11]===`s`&&e[16]!==void 0&&e.startsWith(`-size/`,10)||e[11]===`n`&&e[18]!==void 0&&e.startsWith(`-normal/`,10)),Yv=e=>uy(e,my,Wv),Q=e=>kv.test(e),Xv=e=>uy(e,hy,Uv),Zv=e=>uy(e,gy,Rv),Qv=e=>uy(e,vy,Hv),$v=e=>uy(e,_y,Wv),ey=e=>uy(e,fy,Wv),ty=e=>uy(e,py,Kv),ny=e=>uy(e,yy,Gv),$=e=>Av.test(e),ry=e=>dy(e,hy),iy=e=>dy(e,_y),ay=e=>dy(e,fy),oy=e=>dy(e,my),sy=e=>dy(e,py),cy=e=>dy(e,yy,!0),ly=e=>dy(e,vy,!0),uy=(e,t,n)=>{let r=kv.exec(e);return r?r[1]?t(r[1]):n(r[2]):!1},dy=(e,t,n=!1)=>{let r=Av.exec(e);return r?r[1]?t(r[1]):n:!1},fy=e=>e===`position`||e===`percentage`,py=e=>e===`image`||e===`url`,my=e=>e===`length`||e===`size`||e===`bg-size`,hy=e=>e===`length`,gy=e=>e===`number`,_y=e=>e===`family-name`,vy=e=>e===`number`||e===`weight`,yy=e=>e===`shadow`,by=Ev(()=>{let e=Ov(`color`),t=Ov(`font`),n=Ov(`text`),r=Ov(`font-weight`),i=Ov(`tracking`),a=Ov(`leading`),o=Ov(`breakpoint`),s=Ov(`container`),c=Ov(`spacing`),l=Ov(`radius`),u=Ov(`shadow`),d=Ov(`inset-shadow`),f=Ov(`text-shadow`),p=Ov(`drop-shadow`),m=Ov(`blur`),h=Ov(`perspective`),g=Ov(`aspect`),_=Ov(`ease`),v=Ov(`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=()=>[Lv,`full`,`auto`,...w()],E=()=>[zv,`none`,`subgrid`,$,Q],D=()=>[`auto`,{span:[`full`,zv,$,Q]},zv,$,Q],O=()=>[zv,`auto`,$,Q],k=()=>[`auto`,`min`,`max`,`fr`,$,Q],ee=()=>[`start`,`end`,`center`,`between`,`around`,`evenly`,`stretch`,`baseline`,`center-safe`,`end-safe`],te=()=>[`start`,`end`,`center`,`stretch`,`center-safe`,`end-safe`],A=()=>[`auto`,...w()],j=()=>[Lv,`auto`,`full`,`dvw`,`dvh`,`lvw`,`lvh`,`svw`,`svh`,`min`,`max`,`fit`,...w()],ne=()=>[Lv,`screen`,`full`,`dvw`,`lvw`,`svw`,`min`,`max`,`fit`,...w()],M=()=>[Lv,`screen`,`full`,`lh`,`dvh`,`lvh`,`svh`,`min`,`max`,`fit`,...w()],N=()=>[e,$,Q],P=()=>[...b(),ay,ey,{position:[$,Q]}],re=()=>[`no-repeat`,{repeat:[``,`x`,`y`,`space`,`round`]}],ie=()=>[`auto`,`cover`,`contain`,oy,Yv,{size:[$,Q]}],ae=()=>[Bv,ry,Xv],F=()=>[``,`none`,`full`,l,$,Q],oe=()=>[``,Rv,ry,Xv],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=()=>[Rv,Bv,ay,ey],ce=()=>[``,`none`,m,$,Q],le=()=>[`none`,Rv,$,Q],ue=()=>[`none`,Rv,$,Q],de=()=>[Rv,$,Q],fe=()=>[Lv,`full`,...w()];return{cacheSize:500,theme:{animate:[`spin`,`ping`,`pulse`,`bounce`],aspect:[`video`],blur:[Vv],breakpoint:[Vv],color:[Hv],container:[Vv],"drop-shadow":[Vv],ease:[`in`,`out`,`in-out`],font:[qv],"font-weight":[`thin`,`extralight`,`light`,`normal`,`medium`,`semibold`,`bold`,`extrabold`,`black`],"inset-shadow":[Vv],leading:[`none`,`tight`,`snug`,`normal`,`relaxed`,`loose`],perspective:[`dramatic`,`near`,`normal`,`midrange`,`distant`,`none`],radius:[Vv],shadow:[Vv],spacing:[`px`,Rv],text:[Vv],"text-shadow":[Vv],tracking:[`tighter`,`tight`,`normal`,`wide`,`wider`,`widest`]},classGroups:{aspect:[{aspect:[`auto`,`square`,Lv,Q,$,g]}],container:[`container`],"container-type":[{"@container":[``,`normal`,`size`,$,Q]}],"container-named":[Jv],columns:[{columns:[Rv,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:[zv,`auto`,$,Q]}],basis:[{basis:[Lv,`full`,`auto`,s,...w()]}],"flex-direction":[{flex:[`row`,`row-reverse`,`col`,`col-reverse`]}],"flex-wrap":[{flex:[`nowrap`,`wrap`,`wrap-reverse`]}],flex:[{flex:[Rv,Lv,`auto`,`initial`,`none`,Q]}],grow:[{grow:[``,Rv,$,Q]}],shrink:[{shrink:[``,Rv,$,Q]}],order:[{order:[zv,`first`,`last`,`none`,$,Q]}],"grid-cols":[{"grid-cols":E()}],"col-start-end":[{col:D()}],"col-start":[{"col-start":O()}],"col-end":[{"col-end":O()}],"grid-rows":[{"grid-rows":E()}],"row-start-end":[{row:D()}],"row-start":[{"row-start":O()}],"row-end":[{"row-end":O()}],"grid-flow":[{"grid-flow":[`row`,`col`,`dense`,`row-dense`,`col-dense`]}],"auto-cols":[{"auto-cols":k()}],"auto-rows":[{"auto-rows":k()}],gap:[{gap:w()}],"gap-x":[{"gap-x":w()}],"gap-y":[{"gap-y":w()}],"justify-content":[{justify:[...ee(),`normal`]}],"justify-items":[{"justify-items":[...te(),`normal`]}],"justify-self":[{"justify-self":[`auto`,...te()]}],"align-content":[{content:[`normal`,...ee()]}],"align-items":[{items:[...te(),{baseline:[``,`last`]}]}],"align-self":[{self:[`auto`,...te(),{baseline:[``,`last`]}]}],"place-content":[{"place-content":ee()}],"place-items":[{"place-items":[...te(),`baseline`]}],"place-self":[{"place-self":[`auto`,...te()]}],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:A()}],mx:[{mx:A()}],my:[{my:A()}],ms:[{ms:A()}],me:[{me:A()}],mbs:[{mbs:A()}],mbe:[{mbe:A()}],mt:[{mt:A()}],mr:[{mr:A()}],mb:[{mb:A()}],ml:[{ml:A()}],"space-x":[{"space-x":w()}],"space-x-reverse":[`space-x-reverse`],"space-y":[{"space-y":w()}],"space-y-reverse":[`space-y-reverse`],size:[{size:j()}],"inline-size":[{inline:[`auto`,...ne()]}],"min-inline-size":[{"min-inline":[`auto`,...ne()]}],"max-inline-size":[{"max-inline":[`none`,...ne()]}],"block-size":[{block:[`auto`,...M()]}],"min-block-size":[{"min-block":[`auto`,...M()]}],"max-block-size":[{"max-block":[`none`,...M()]}],w:[{w:[s,`screen`,...j()]}],"min-w":[{"min-w":[s,`screen`,`none`,...j()]}],"max-w":[{"max-w":[s,`screen`,`none`,`prose`,{screen:[o]},...j()]}],h:[{h:[`screen`,`lh`,...j()]}],"min-h":[{"min-h":[`screen`,`lh`,`none`,...j()]}],"max-h":[{"max-h":[`screen`,`lh`,...j()]}],"font-size":[{text:[`base`,n,ry,Xv]}],"font-smoothing":[`antialiased`,`subpixel-antialiased`],"font-style":[`italic`,`not-italic`],"font-weight":[{font:[r,ly,Qv]}],"font-stretch":[{"font-stretch":[`ultra-condensed`,`extra-condensed`,`condensed`,`semi-condensed`,`normal`,`semi-expanded`,`expanded`,`extra-expanded`,`ultra-expanded`,Bv,Q]}],"font-family":[{font:[iy,$v,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":[Rv,`none`,$,Zv]}],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:[Rv,`from-font`,`auto`,$,Xv]}],"text-decoration-color":[{decoration:N()}],"underline-offset":[{"underline-offset":[Rv,`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:[zv,$,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`]},zv,$,Q],radial:[``,$,Q],conic:[zv,$,Q]},sy,ty]}],"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":[Rv,$,Q]}],"outline-w":[{outline:[``,Rv,ry,Xv]}],"outline-color":[{outline:N()}],shadow:[{shadow:[``,`none`,u,cy,ny]}],"shadow-color":[{shadow:N()}],"inset-shadow":[{"inset-shadow":[`none`,d,cy,ny]}],"inset-shadow-color":[{"inset-shadow":N()}],"ring-w":[{ring:oe()}],"ring-w-inset":[`ring-inset`],"ring-color":[{ring:N()}],"ring-offset-w":[{"ring-offset":[Rv,Xv]}],"ring-offset-color":[{"ring-offset":N()}],"inset-ring-w":[{"inset-ring":oe()}],"inset-ring-color":[{"inset-ring":N()}],"text-shadow":[{"text-shadow":[`none`,f,cy,ny]}],"text-shadow-color":[{"text-shadow":N()}],opacity:[{opacity:[Rv,$,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":[Rv]}],"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":[Rv]}],"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:[Rv,$,Q]}],contrast:[{contrast:[Rv,$,Q]}],"drop-shadow":[{"drop-shadow":[``,`none`,p,cy,ny]}],"drop-shadow-color":[{"drop-shadow":N()}],grayscale:[{grayscale:[``,Rv,$,Q]}],"hue-rotate":[{"hue-rotate":[Rv,$,Q]}],invert:[{invert:[``,Rv,$,Q]}],saturate:[{saturate:[Rv,$,Q]}],sepia:[{sepia:[``,Rv,$,Q]}],"backdrop-filter":[{"backdrop-filter":[``,`none`,$,Q]}],"backdrop-blur":[{"backdrop-blur":ce()}],"backdrop-brightness":[{"backdrop-brightness":[Rv,$,Q]}],"backdrop-contrast":[{"backdrop-contrast":[Rv,$,Q]}],"backdrop-grayscale":[{"backdrop-grayscale":[``,Rv,$,Q]}],"backdrop-hue-rotate":[{"backdrop-hue-rotate":[Rv,$,Q]}],"backdrop-invert":[{"backdrop-invert":[``,Rv,$,Q]}],"backdrop-opacity":[{"backdrop-opacity":[Rv,$,Q]}],"backdrop-saturate":[{"backdrop-saturate":[Rv,$,Q]}],"backdrop-sepia":[{"backdrop-sepia":[``,Rv,$,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:[Rv,`initial`,$,Q]}],ease:[{ease:[`linear`,`initial`,_,$,Q]}],delay:[{delay:[Rv,$,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:[zv,$,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:[Rv,ry,Xv,Zv]}],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 xy(...e){return by(G_(e))}var Sy=J_(`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 Cy({className:e,variant:t,size:n,...r}){return(0,z.jsx)(`button`,{className:xy(Sy({variant:t,size:n}),e),type:`button`,...r})}function wy({className:e,...t}){return(0,z.jsx)(`section`,{className:xy(`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 Ty({className:e,...t}){return(0,z.jsx)(`div`,{className:xy(`p-4 pt-0`,e),...t})}var Ey=[`codex`,`claude`,`kiro`,`trae`,`coco`,`openai`,`anthropic`],Dy=new Set([`acp`,`status_projection`]);function Oy(e){let t=e.trim().toLowerCase().replace(/_/gu,`-`);for(let e of Ey)if(t===e||t.startsWith(`${e}-`))return e;return t}function ky(e,t){let n=t?.trim().toLowerCase()??``;return n.length>0&&!Dy.has(n)?Oy(n):Oy(e)}var Ay={"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 jy({request:e}){let{locale:t}=Ji();if(!e)return null;let n=Ay[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 My={stop:`ready_stop`,resume:`resume_review`,delete:`delete_review`};function Ny(e){return typeof e==`object`&&e&&!Array.isArray(e)?e:null}function Py(e){return typeof e==`string`&&e.trim().length>0?e:null}function Fy(e,t=240){let n=typeof e==`string`?e.replace(/\s+/g,` `).trim():``;return n.length>t?`${n.slice(0,t-1)}…`:n}function Iy(e){let t=Ny(e)??{},n=Fy(t.agent_id,80)||`unknown-agent`,r=Fy(t.acceptance,200);if(t.staffing===`gap`){let e=Ny(t.declined_first_todo)??{};return[`${n} · gap`,Fy(t.gap_reason_code,80),Fy(e.text,200)].filter(Boolean).join(` · `)}let i=Ny(t.first_todo)??{};return[`${n} · ready`,Fy(i.priority,8),Fy(i.action_kind,40),Fy(i.text,240),r?`acceptance: ${r}`:``].filter(Boolean).join(` · `)}function Ly(e){let t=Ny(e)??{};return Object.entries(t).map(([e,t])=>`${e}: ${typeof t==`object`&&t?JSON.stringify(t):String(t)}`).join(` · `)}function Ry(e){let t=Ny(e);if(t?.action_kind!==`team.plan`||t.status!==`preview_ready`&&t.status!==`deferred`)return;let n=Ny(Ny(t.normalized_parameters)?.plan);if(!n||n.kind!==`steward_team_plan_preview`||n.applies!==!1)return;let r=Py(t.proposal_id),i=Py(t.expected_state_fingerprint),a=Py(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:Fy(n.objective)},...o.map((e,t)=>({key:`lane_${t+1}`,value:Iy(e)})),...s.length>0?[{key:`lane_gaps`,value:s.map(e=>{let t=Ny(e)??{};return[Fy(t.lane_id,80),Fy(t.reason_code,80)].filter(Boolean).join(`: `)}).filter(Boolean).join(` · `)}]:[],{key:`quota_envelope`,value:Ly(n.quota_envelope)},{key:`stop_condition`,value:Fy(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 zy(e){let t=Ny(e.projection);if(t?.schema_version!==`loopx_operation_projection_v0`)return null;let n=Py(t.title),r=Py(t.subtitle),i=Py(t.focus),a=Py(t.warning);if(!n||!r||!i||!a||!Array.isArray(t.fields))return null;let o=[];for(let e of t.fields){let t=Ny(e),n=Py(t?.label),r=Py(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 By(e){let t=Ny(e);if(t?.action_kind!==`operation.execute`)return;let n=Ny(t.normalized_parameters),r=Ny(t.operation);if(!n||r?.schema_version!==`loopx_operation_envelope_v0`)return;let i=Py(r.operation_id),a=Py(r.confirmation_digest),o=Py(r.expires_at),s=zy(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:Ny(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=Ny(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:Ny(r.result_delivery)!==null,summary:Py(u.summary)??``}}function Vy(e){let t=Ny(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=By(t),i=Ry(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 Ny(t.receipt)?.projection_verified===!0&&(t.action_kind!==`operation.execute`||Ny(Ny(t.operation)?.result_delivery)!==null)?o(`completed`,`readback_verified`):o(`repair`,`readback_unverified`);let c=Ny(t.canonical_update_basis),l=Ny(t.normalized_parameters);if(c?.schema_version===`loopx_chat_canonical_update_basis_v0`&&Py(c.provider_revision)!==null&&Py(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:Ny(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(!(Py(t.proposal_id)!==null&&Py(t.expected_state_fingerprint)!==null&&Array.isArray(d)&&d.length>0&&d.every(e=>Py(e)!==null)&&Array.isArray(f)&&f.includes(`apply`)))return o(`refresh`,`incomplete_proposal`);let p=Ny(t.context),m=l?.operation,h=Py(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=My[m];return g===`ready_stop`&&t.status===`preview_ready`?a({interaction:`direct`,reason:g,canApply:!0}):u(g===`ready_stop`?`action_review`:g)}function Hy(e){return e.error_code===`action_stale`||e.error_code===`action_conflict`||Ny(e.proposal)?.status===`stale`}function Uy(e){return typeof e==`object`&&e?e:{}}function Wy(e){return typeof e==`string`?e:``}function Gy(e,t){let n=Uy(e.plan),r=[],i=Wy(e.goal_id)||Wy(n.goal_id);i&&r.push({key:`goal_id`,label:t(`proposal.field.goalId`),value:i});let a=Wy(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=Uy(e),a=Wy(i.lane_id)||`lane-${n+1}`,o=Wy(i.agent_id),s=Wy(i.acceptance);if(Wy(i.staffing)===`gap`){let e=Uy(i.declined_first_todo);r.push({key:`lane_${a}`,label:o||a,value:[t(`proposal.teamPlan.gapLane`),Xy(Wy(i.gap_reason_code),t),Wy(e.text)].filter(Boolean).join(` · `)});return}let c=Uy(i.first_todo),l=[Wy(c.priority),Wy(c.action_kind),Wy(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=Uy(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=Wy(n.stop_condition);return c&&r.push({key:`stop_condition`,label:t(`proposal.field.stopCondition`),value:`${c} · ${t(`proposal.teamPlan.advisory`)}`}),r}function Ky(e){let t=Uy(e.plan);return Array.isArray(t.lanes)?t.lanes.length:0}function qy(e){let t=Uy(e.plan);return Wy(e.goal_id)||Wy(t.goal_id)}function Jy(e,t){let n=Uy(e),r=Uy(t.plan),i=(Array.isArray(r.lanes)?r.lanes:[]).map(Uy);return(Array.isArray(n.lanes)?n.lanes:[]).map(e=>{let t=Uy(e),n=Wy(t.lane_id),r=i.find(e=>e.lane_id===n);return{laneId:n,agentId:Wy(t.agent_id),task:Wy(Uy(r?.first_todo).text)||n}}).filter(e=>e.laneId.length>0)}function Yy(e,t={}){let n=Uy(e),r=Uy(t.plan),i=(Array.isArray(r.lanes)?r.lanes:[]).map(Uy);return(Array.isArray(n.gap_lanes)?n.gap_lanes:[]).map(e=>{let t=Uy(e);return{laneId:Wy(t.lane_id),agentId:Wy(t.agent_id),reasonCode:Wy(t.reason_code),task:Wy(Uy(i.find(e=>e.lane_id===t.lane_id)?.declined_first_todo).text)}}).filter(e=>e.laneId.length>0)}function Xy(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 Zy(e){let t=Uy(e),n=Wy(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 Qy(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 $y(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 eb(e,t){return e.goals.find(e=>e.goalId===t)?.title??t}function tb(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 rb(e){return`$${e.toFixed(2)}`}function ib(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 ab(e,t,n){return e==null?t:n(e)}function ob(e){return!!(e&&[e.tokens24h,e.tokens7d,e.costUsd24h,e.costUsd7d,e.durationMs24h,e.durationMs7d].some(e=>e!=null))}function sb(e,t){if(!ob(e))return null;let n=(e,n,r,i)=>{let a=[n==null?null:`${nb(n)} ${t.tokens}`,r==null?null:`${t.cost}: ${rb(r)}`,i==null?null:`${t.duration}: ${ib(i)}`].filter(e=>e!==null);return a.length?`${e} ${a.join(` · `)}`:null};return n(t.period7d,e.tokens7d,e.costUsd7d,e.durationMs7d)??n(t.period24h,e.tokens24h,e.costUsd24h,e.durationMs24h)}function cb({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 lb({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=h?sb(h.usage,{cost:v(`drawer.costShort`),duration:v(`drawer.durationShort`),period24h:v(`drawer.period24h`),period7d:v(`drawer.period7d`),tokens:v(`drawer.tokensShort`)}):null,b=t?t.executor_kind===`individual`?v(`header.managerExecutorKindIndividual`):t.executor_kind===`managed`?v(`header.managerExecutorKindManaged`):v(`header.managerExecutorKindRegistered`):null,x=t?.available===!1,S=t?.available===!1?t.unavailable_reason:null,C=S===`operator_credential_unconfigured`?`header.managerExecutionUnavailableCredential`:S===`dsh_runtime_unavailable`?`header.managerExecutionUnavailableRuntime`:S===`invalid_reasoning_effort`?`header.managerExecutionUnavailableEffort`:`header.managerExecutionUnavailable`,w=t&&t.executor_endpoint_source===`product_default`&&t.executor_endpoint_default_reason===`steward_channel_default`?`header.managerEndpointStewardDefault`:null,T=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)(cb,{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&&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,!h&&t?(0,z.jsxs)(`p`,{className:`personal-manager-execution`,children:[(0,z.jsxs)(`span`,{className:x?`personal-execution-chip is-unavailable`:`personal-execution-chip`,children:[(0,z.jsx)(`span`,{className:`personal-execution-chip-endpoint`,children:t.executor_endpoint}),b?(0,z.jsx)(`span`,{className:`personal-execution-chip-kind`,children:b}):null,(0,z.jsx)(`span`,{className:`personal-execution-chip-model`,children:t.model})]}),x?(0,z.jsx)(`span`,{className:`personal-execution-note`,children:v(C,{executor:t.executor_endpoint,credential:t.credential_env_var})}):null,w?(0,z.jsx)(`span`,{className:`personal-execution-rule-note`,children:v(w,{executor:t.executor_endpoint})}):null]}):null,h?(0,z.jsx)(`p`,{children:h.loadState?v(h.loadState===`error`?`startup.goalError`:`startup.goalLoading`):`${h.agentLaneCount&&h.agentLaneCount>1?v(`header.workAgentCount`,{count:h.agentLaneCount}):h.agentLabel??h.agentId} · ${h.loadState?v(h.loadState===`error`?`startup.goalError`:`startup.goalLoading`):Yi(h.state,_)}${y?` · ${y}`:``} · ${h.nextSentence}`}):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`)})]}),T]}):(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:T,(0,z.jsxs)(`span`,{className:`personal-live-indicator`,children:[(0,z.jsx)(`i`,{}),v(`header.live`)]}),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 ub({sessionId:e,members:t,zh:n}){let[r,i]=(0,R.useState)(!1),[a,o]=(0,R.useState)(null),[s,c]=(0,R.useState)({}),[l,u]=(0,R.useState)(!1),[d,f]=(0,R.useState)(``),p=(0,R.useRef)(0);(0,R.useEffect)(()=>(p.current++,i(!1),o(null),c({}),f(``),u(!1),()=>{p.current++}),[e]);async function m(t){let n=++p.current;u(!0),f(``),o(null);try{let r=await og(e,t);n===p.current&&o(r)}catch(e){n===p.current&&f(e instanceof Error?e.message:String(e))}finally{n===p.current&&u(!1)}}async function h(t){let n=++p.current;u(!0),f(``),c(e=>{let n={...e};return delete n[t],n});try{let r=await sg(e,t);n===p.current&&c(e=>({...e,[t]:r}))}catch(e){n===p.current&&f(e instanceof Error?e.message:String(e))}finally{n===p.current&&u(!1)}}let g=n?{turn_blocked:`当前任务未获准执行`,acceptance_unavailable:`缺少有效验收绑定`,runtime_unavailable:`运行时不可用`,runtime_unverified:`运行时可用性尚未验证`,launchable:`本机启动条件已满足`}:{turn_blocked:`Task admission blocked`,acceptance_unavailable:`Acceptance binding unavailable`,runtime_unavailable:`Runtime unavailable`,runtime_unverified:`Runtime availability unverified`,launchable:`Local launch prerequisites met`},_=e=>e.status===`unavailable`?n?`无法核验`:`Unavailable`:e.status===`accepted`?n?`已通过当前验收`:`Currently accepted`:e.status===`rejected`?n?`未通过验收`:`Rejected`:e.recovery_required?n?`需要恢复原执行`:`Original execution needs recovery`:e.status===`running`&&e.worker_active?n?`执行中`:`Executing`:e.status===`turn_returned`&&e.worker_active?n?`正在验收`:`Validating`:n?`已派发,等待执行回读`:`Dispatched; awaiting execution readback`;return(0,z.jsxs)(`div`,{className:`goal-team-work`,children:[(0,z.jsx)(`button`,{type:`button`,"aria-expanded":r,onClick:()=>{i(!r),r||m()},children:n?`团队执行情况`:`Team execution`}),r?(0,z.jsxs)(`section`,{"aria-label":n?`团队执行详情`:`Team execution details`,children:[(0,z.jsx)(`p`,{children:n?`检查按需读取,不会启动成员。结果属于本次回读;暂停协调员不会停止已派发工作。`:`Checks run on demand and start no members. Results are observations; pausing the coordinator retains delegated work.`}),(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)(`span`,{children:e.todo_id}),(0,z.jsx)(`button`,{type:`button`,disabled:l,onClick:()=>void h(e.id),children:n?`检查启动条件`:`Check prerequisites`})]}),s[e.id]?(0,z.jsxs)(`p`,{role:`status`,children:[g[s[e.id].state]??(n?`状态未知`:`Unknown`),` · `,s[e.id].executor.host,s[e.id].executor.reason?` · ${s[e.id].executor.reason}`:``,s[e.id].executor.profile?` · ${s[e.id].executor.profile}`:``,` · `,n?`不代表正在执行`:`Does not mean executing`]}):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:l,onClick:()=>{c({}),m()},children:n?`重新核验`:`Refresh`}),a?.has_more&&a.next_cursor?(0,z.jsx)(`button`,{type:`button`,disabled:l,onClick:()=>void m(a.next_cursor),children:n?`下一页`:`Next page`}):null]}),l?(0,z.jsx)(`p`,{role:`status`,children:n?`正在读取当前事实…`:`Reading current facts…`}):null,d?(0,z.jsx)(`p`,{role:`alert`,children:d}):null,a?(0,z.jsxs)(z.Fragment,{children:[a.page_readback_complete?null:(0,z.jsx)(`p`,{role:`status`,children:n?`本页有无法核验的工作,请检查原请求;不要直接重新派工。`:`Some work cannot be verified. Reconcile the original request before redispatching.`}),a.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:a.items.map(e=>(0,z.jsxs)(`li`,{children:[(0,z.jsxs)(`strong`,{children:[e.agent_id??(n?`记录不可读`:`Unreadable record`),` · `,_(e)]}),(0,z.jsx)(`span`,{children:e.operation_id??e.record_id}),e.artifacts?.map(e=>(0,z.jsxs)(`details`,{children:[(0,z.jsx)(`summary`,{children:e.ref}),(0,z.jsx)(`code`,{children:e.sha256})]},e.ref))]},e.record_id))}),(0,z.jsxs)(`p`,{children:[n?`仅限当前协调身份;分页不是团队快照。`:`Scoped to this coordinator; paging is not a team snapshot.`,a.has_more?n?` 还有下一页。`:` More pages remain.`:``]})]}):null]}):null]})}function db({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)(!1),[u,d]=(0,R.useState)(!1),[f,p]=(0,R.useState)(``),[m,h]=(0,R.useState)({agent_id:``,token_budget:0,execution_config:`.loopx/config/delegations.json`});(0,R.useEffect)(()=>{let t=!0,n=!1;if(s(null),r(null),p(``),l(!1),!e||e===`new-session-pending`)return;async function i(){if(!n){n=!0;try{let n=await ag(e);t&&(s(n),r(n))}catch(e){t&&p(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 g=!!(o?.enabled&&o.active_turn_id),_=o?.native.status??`absent`,v=![`absent`,`complete`].includes(_),y=!!(o?.settings.agent_id&&o.settings.token_budget),b=e=>{h({agent_id:e.settings.agent_id??``,token_budget:e.settings.token_budget??0,execution_config:e.settings.execution_config??`.loopx/config/delegations.json`}),l(!0)},x=o?.enabled?o.recovery_required?a?`LoopX · 需要恢复连接`:`LoopX · Reconnect required`:_===`blocked`?a?`LoopX · 需要处理阻塞`:`LoopX · Blocked`:g?a?`LoopX · 正在推进`:`LoopX · Working`:_===`complete`?a?`LoopX · 本轮已结束`:`LoopX · Run finished`:[`budgetLimited`,`usageLimited`].includes(_)?a?`LoopX · 已到额度限制`:`LoopX · Usage limit`:a?`LoopX · 已暂停`:`LoopX · Paused`:a?`普通对话`:`Conversation`,S=()=>{o&&!c?b(o):l(!1)};async function C(){d(!0),p(``);try{let e=await ag(await t());s(e),r(e),b(e)}catch(e){p(e instanceof Error?e.message:String(e))}finally{d(!1)}}async function w(t){if(e){d(!0),p(``);try{let n=await cg(e,t,t===`configure`?m:void 0);s(n),r(n),l(!1)}catch(e){p(e instanceof Error?e.message:String(e))}finally{d(!1)}}}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)(`div`,{children:[(0,z.jsx)(`strong`,{children:x}),(0,z.jsx)(`p`,{children:g?a?`协调员持续工作;成员保持独立执行与验收。`:`The coordinator continues; members execute and qualify independently.`:o?.enabled&&_===`complete`?a?`本次执行已结束;整个 Goal 仍按原标准验收。`:`This run ended; canonical Goal acceptance remains separate.`:o?.enabled?a?`暂停不会停止已派发成员;整个 Goal 仍按原标准验收。`:`Pausing retains delegated work; Goal acceptance remains separate.`:a?`开启后,当前协调员持续推进本 Goal。`:`Enable continued work on this Goal in this conversation.`})]}),(0,z.jsxs)(`div`,{className:`goal-loopx-mode-actions`,children:[(0,z.jsxs)(`button`,{type:`button`,disabled:u||o?.conversation_busy||!o,onClick:S,"aria-expanded":c,children:[(0,z.jsx)(Xm,{size:14}),a?`运行设置`:`Settings`]}),(0,z.jsxs)(`button`,{type:`button`,disabled:u||!!(o?.conversation_busy&&!g),onClick:async()=>{if(!o){await C();return}g?w(`pause`):!y||Number(o?.settings.token_budget??0)<=Number(o?.native.tokensUsed??0)?S():n(v?`resume`:`start`)},children:[g?(0,z.jsx)(zm,{size:14}):(0,z.jsx)(Bm,{size:14}),g?a?`暂停`:`Pause`:o?.enabled?_===`complete`?a?`开启新一轮`:`Start new run`:a?`恢复推进`:`Continue`:a?`开启 LoopX 模式`:`Enable LoopX`]}),o?.enabled&&!g?(0,z.jsx)(`button`,{type:`button`,disabled:u,onClick:()=>void w(`exit`),children:a?`退出模式`:`Exit mode`}):null]})]}),c?(0,z.jsxs)(`div`,{className:`goal-loopx-mode-settings`,children:[(0,z.jsxs)(`label`,{children:[a?`已注册的协调身份`:`Registered coordinator`,(0,z.jsxs)(`select`,{value:m.agent_id,onChange:e=>h({...m,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:m.token_budget||``,onChange:e=>h({...m,token_budget:Number(e.target.value)})})]}),(0,z.jsxs)(`label`,{children:[a?`成员执行绑定文件(项目内)`:`Member execution bindings (project relative)`,(0,z.jsx)(`input`,{value:m.execution_config,onChange:e=>h({...m,execution_config:e.target.value})})]}),(0,z.jsx)(`p`,{children:a?`复用现有协作执行配置,文件须位于 .loopx/config/。额度包含协调员历史用量;成员沿用各自授权,不随开启扩大。`:`Reuse an existing delegation configuration under .loopx/config/. The allowance includes coordinator history; member grants remain separate.`}),(0,z.jsx)(`button`,{type:`button`,disabled:u||!m.agent_id||m.token_budget<1,onClick:()=>void w(`configure`),children:a?`保存设置`:`Save settings`})]}):null,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,o?.enabled&&o.ingress.some(e=>e.status!==`delivered`)?(0,z.jsxs)(`p`,{role:`status`,children:[a?`待处理消息:`:`Pending messages: `,o.ingress.filter(e=>e.status!==`delivered`).map(e=>`${e.mode===`loopx_queue`?`queue`:`inbox`} · ${e.status}`).join(` / `)]}):null,o?.enabled&&o.deliveries.length?(0,z.jsxs)(`div`,{className:`goal-loopx-mode-members`,"aria-label":a?`最近一次成员回读`:`Last member observations`,children:[(0,z.jsx)(`span`,{children:a?`成员最近回读`:`Last observations`}),o.deliveries.map(e=>(0,z.jsxs)(`span`,{children:[e.agent_id,` · `,e.status===`accepted`?a?`已通过验收`:`Accepted`:e.status===`rejected`?a?`未通过验收`:`Rejected`:e.status===`unavailable`?a?`需要重新核验`:`Recheck required`:a?`执行中`:`Working`]},e.operation_id))]}):null,y&&e?(0,z.jsx)(ub,{sessionId:e,members:o?.members??[],zh:a},`${e}:${o?.settings.agent_id}:${o?.settings.execution_config}`):null,f?(0,z.jsx)(`p`,{className:`personal-composer-error`,role:`alert`,children:f}):null]})}function fb({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 pb=/(`[^`\n]+`)|(\*\*[^*\n]+(\*[^*\n]*)?\*\*)|(\[[^\]\n]{1,120}\]\(https?:\/\/[^)\s]+\))/g;function mb(e,t){let n=[],r=0,i=0;for(let a of e.matchAll(pb)){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:mb(e.text,n)},n);if(e.type===`list`){let t=e.items.map((e,t)=>(0,z.jsx)(`li`,{children:mb(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,mb(e,`${n}-${t}`)]},`${n}-${t}`))},n)})})}function yb({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 bb={completed:`runs.completed`,failed:`runs.failed`,interrupted:`runs.interrupted`,queued:`runs.queued`,running:`runs.running`,waiting:`runs.waiting`};function xb({onSelect:e,run:t}){let{t:n}=Ji(),r=t.totalSteps>0?Math.min(100,t.completedSteps/t.totalSteps*100):0;return(0,z.jsxs)(`button`,{"aria-label":`${n(`tasks.viewExecution`)}:${t.title}`,className:`personal-timeline-row personal-run-row`,"data-testid":`personal-browse-row`,onClick:e,type:`button`,children:[(0,z.jsx)(`span`,{className:`personal-row-icon is-run`,children:(0,z.jsx)(rm,{size:18})}),(0,z.jsxs)(`span`,{className:`personal-run-identity`,children:[(0,z.jsx)(`small`,{children:t.goalTitle}),(0,z.jsx)(`strong`,{children:t.agentLabel})]}),(0,z.jsxs)(`span`,{className:`personal-row-copy`,children:[(0,z.jsx)(`strong`,{children:t.title}),(0,z.jsx)(`small`,{children:t.latestActivity})]}),(0,z.jsxs)(`span`,{className:`personal-run-progress`,"aria-label":`${t.completedSteps}/${t.totalSteps}`,children:[(0,z.jsxs)(`small`,{children:[t.completedSteps,`/`,t.totalSteps]}),(0,z.jsx)(`i`,{children:(0,z.jsx)(`b`,{style:{width:`${r}%`}})})]}),(0,z.jsxs)(`span`,{className:`personal-row-status is-${t.status}`,children:[t.status===`running`?(0,z.jsx)(Am,{className:`personal-spin`,size:14}):null,n(bb[t.status])]}),t.sessionId?(0,z.jsx)(`span`,{className:`personal-run-open-label`,children:n(`tasks.viewExecution`)}):null,(0,z.jsx)(cm,{size:17})]})}function Sb({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 Cb({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 wb({items:e,onSelect:t,selectedGoal:n}){let{t:r}=Ji();if(e.length===0)return(0,z.jsxs)(`div`,{className:`personal-timeline-empty`,children:[(0,z.jsx)(`span`,{children:(0,z.jsx)($m,{size:20})}),(0,z.jsx)(`strong`,{children:r(n?`timeline.emptyGoal`:`timeline.emptyWorkspace`)}),(0,z.jsx)(`p`,{children:r(n?`timeline.emptyGoalDescription`:`timeline.emptyWorkspaceDescription`)})]});let i=[...e].reverse().find(e=>e.kind===`message`&&e.message.role!==`user`||e.kind===`proposal`&&[`applied`,`stale`,`error`,`gated`].includes(e.proposal.status)||e.kind===`run`&&e.run.status===`completed`),a=i?.kind===`message`?`${i.message.agentLabel??r(`header.manager`)}:${i.message.pending?r(`timeline.pending`):i.message.text}`:i?.kind===`proposal`?`${i.proposal.title}:${i.proposal.status}`:i?.kind===`run`?r(`timeline.runCompleted`,{run:i.run.title}):``,o=e.filter(e=>e.kind===`proposal`&&e.proposal.status===`gated`),s=e.filter(e=>e.kind!==`proposal`),c=e.filter(e=>e.kind===`proposal`&&e.proposal.status!==`gated`);function l(e){return e.kind===`attention`?(0,z.jsx)(fb,{attention:e.attention,onSelect:()=>t({item:e.attention,kind:`attention`})},e.id):e.kind===`run`?(0,z.jsx)(xb,{onSelect:()=>t({item:e.run,kind:`run`}),run:e.run},e.id):e.kind===`output`?(0,z.jsx)(yb,{onSelect:()=>t({item:e.output,kind:`output`}),output:e.output},e.id):e.kind===`schedule`?(0,z.jsx)(Sb,{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}),(0,z.jsx)(`p`,{children:e.proposal.impact})]}),(0,z.jsx)(`b`,{children:e.proposal.status===`gated`&&e.proposal.actionKind!==`operation.execute`?r(`timeline.review`):e.proposal.primaryLabel??r(`timeline.reviewAndConfirm`)})]},e.id):(0,z.jsxs)(`article`,{className:`personal-message is-${e.message.role}`,children:[e.message.role===`user`?null:(0,z.jsx)(`span`,{className:`personal-message-avatar`,children:(0,z.jsx)(rm,{size:17})}),(0,z.jsxs)(`div`,{children:[(0,z.jsxs)(`header`,{children:[(0,z.jsx)(`strong`,{children:e.message.role===`user`?r(`common.you`):e.message.agentLabel??r(`header.manager`)}),e.message.time?(0,z.jsx)(`time`,{children:e.message.time}):null]}),e.message.attachments?.length?(0,z.jsx)(`div`,{className:`personal-message-images`,children:e.message.attachments.map(e=>(0,z.jsx)(`img`,{alt:e.name,src:e.dataUrl},e.id))}):null,e.message.role===`user`?(0,z.jsx)(`p`,{children:e.message.text}):(0,z.jsx)(vb,{text:e.message.text}),e.message.pending?(0,z.jsx)(`span`,{className:`personal-message-pending`,children:r(`timeline.pending`)}):null,(0,z.jsx)(jy,{request:e.message.collaboration}),(0,z.jsx)(Cb,{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:a}),(0,z.jsxs)(`div`,{className:`personal-channel-timeline`,children:[s.map(l),o.length?(0,z.jsxs)(`details`,{className:`personal-gated-summary`,children:[(0,z.jsxs)(`summary`,{children:[(0,z.jsx)(`span`,{children:(0,z.jsx)($m,{size:16})}),(0,z.jsx)(`strong`,{children:r(`timeline.waitingConfirmation`)}),(0,z.jsx)(`small`,{children:r(`timeline.gateHistory`,{count:o.length})})]}),(0,z.jsx)(`div`,{children:o.map(l)})]}):null,c.map(l)]})]})}function Tb({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 Eb({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 Db({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:Qy(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`),` · `,Xy(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 Ob(e){return e.replace(/\s+/gu,` `).trim()}function kb(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 Ab(e){return/(我现在该做什么|下一步|哪些\s*Goal\s*在等我|需要我|谁在等我|Agent\s*在做什么|当前进度|总结(?:今天)?进展)/iu.test(e)}function jb(e){let t=/(怎么|如何|为什么|给.*建议|分析一下|解释|只读)/u.test(e),n=/(解决一下|修复一下|处理一下|执行一下|改一下|跑(?:一下)?测试|rebase|push|提交|推送)/iu.test(e);return!t&&n&&/(帮我|请|给我|直接|现在|开始|bytedcli|codebase|git|rebase|push|提交|推送)/iu.test(e)}function Mb(e){return Ob(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 Nb(e,t){let n=Ob(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&&!kb(n,/heartbeat|心跳/iu)&&/(heartbeat|心跳|每天推进|持续推进|daily progress)/iu.test(n);if(!t.goalId&&!kb(n,/goal|目标/iu)&&/(创建|新建|设置|create|start|set up).{0,24}(goal|目标)/iu.test(n)&&r.push({actionKind:`goal.create`,confidence:.97,normalizedParameters:{heartbeat_enabled:!kb(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&&!kb(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&&!kb(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&&!kb(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&&jb(n)&&r.push({actionKind:`todo.create`,confidence:.9,normalizedParameters:{goal_id:t.goalId,start_execution:!0}}),t.goalId&&a){let e=!kb(n,/完成|做完|关闭/u)&&/完成|做完|关闭/u.test(n)?`complete`:!kb(n,/阻塞|卡住/u)&&/阻塞|卡住/u.test(n)?`block`:!kb(n,/暂缓|稍后|推迟/u)&&/暂缓|稍后|推迟/u.test(n)?`defer`:i&&!kb(n,/交给|分配给|改派/u)&&/交给|分配给|改派/u.test(n)?`reassign`:null;if(e){let i=e===`defer`?Mb(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&&Ab(n)?{actionKind:null,confidence:.98,missingFields:[],normalizedParameters:{},route:`projection`}:{actionKind:null,confidence:.75,missingFields:[],normalizedParameters:{},route:`agent_chat`}}function Pb(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 Fb=[`a[href]`,`button:not([disabled])`,`textarea:not([disabled])`,`select:not([disabled])`,`input:not([disabled])`,`[tabindex]:not([tabindex='-1'])`].join(`,`),Ib=[{key:`drawer.taskBlock`,operation:`block`},{key:`drawer.taskSuccessor`,operation:`successor_create`}],Lb=[{key:`drawer.decisionReject`,resolution:`reject`},{key:`drawer.decisionDefer`,resolution:`defer`}],Rb=Array.from({length:32},(e,t)=>t+1),zb=/^[a-z][a-z0-9_.-]{0,63}$/u;function Bb(e){let t=String(e??``).trim().toLowerCase();return zb.test(t)?t:null}function Vb(e,t){return e.enabled===t.enabled&&e.maxChildren===t.maxChildren&&JSON.stringify(e.modelConfig??null)===JSON.stringify(t.modelConfig??null)&&[...e.allowedDomains].sort((e,t)=>e.localeCompare(t)).join(`\0`)===[...t.allowedDomains].sort((e,t)=>e.localeCompare(t)).join(`\0`)}function Hb({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,ee]=(0,R.useState)(``),[te,A]=(0,R.useState)(``),[j,ne]=(0,R.useState)(`idle`),[M,N]=(0,R.useState)(null),[P,re]=(0,R.useState)(null),ie=(0,R.useRef)(null),ae=(0,R.useRef)(null),[F,oe]=(0,R.useState)(e.find(e=>e.available)?.agentId??`codex`),[I,se]=(0,R.useState)(``),L=(0,R.useRef)(null),ce=(0,R.useRef)(null),le=(0,R.useRef)(null),ue=(0,R.useRef)(null),de=f.kind===`run`?`run:${f.item.runId}`:f.kind===`proposal`?`proposal:${f.item.previewId}`:f.kind===`todo`?`todo:${f.item.todoId}`:f.kind===`attention`?`attention:${f.item.todoId}`:f.kind===`output`?`output:${f.item.outputId}`:f.kind===`schedule`?`schedule:${f.item.scheduleId}`:`goal:${f.item.goalId}`;(0,R.useEffect)(()=>{b(`idle`),v(!1),S(`record`),se(``);let e=f.kind===`goal`?f.item.subagentExecution:void 0;w(e?.allowedDomains??[]),ee(e?.modelConfig?.model??``),A(e?.modelConfig?.reasoning_effort??``),O(e?.maxChildren?Math.min(e.maxChildren,32):2),E(null),ne(`idle`),N(null),re(null),ie.current=e??null,ae.current=null},[de]);let fe=f.kind===`goal`?f.item.subagentExecution:void 0;(0,R.useEffect)(()=>{let e=ie.current,t=fe?!e||!Vb(e,fe):e!==null;if(ie.current=fe??null,!P){t&&fe&&(w(fe.allowedDomains),ee(fe.modelConfig?.model??``),A(fe.modelConfig?.reasoning_effort??``),O(fe.maxChildren||2),E(null),ne(`idle`),N(null));return}let n=ae.current;(!fe||Vb(P,fe)||n&&!Vb(n,fe))&&(fe&&(w(fe.allowedDomains),ee(fe.modelConfig?.model??``),A(fe.modelConfig?.reasoning_effort??``),O(fe.maxChildren||2)),ae.current=null,re(null))},[fe,P]),(0,R.useEffect)(()=>{let e=document.activeElement;e instanceof HTMLElement&&!ce.current?.contains(e)&&(le.current=e);let t=window.requestAnimationFrame(()=>ue.current?.focus());return()=>window.cancelAnimationFrame(t)},[de]);let pe=(0,R.useCallback)(()=>{let e=le.current;c(),window.requestAnimationFrame(()=>e?.focus())},[c]);(0,R.useEffect)(()=>{function e(e){if(e.key===`Escape`){e.preventDefault(),pe();return}if(e.key===`Tab`&&f.kind!==`todo`){let t=Array.from(ce.current?.querySelectorAll(Fb)??[]).filter(e=>!e.hasAttribute(`disabled`)&&e.getAttribute(`aria-hidden`)!==`true`);if(t.length===0)return;let n=t[0],r=t[t.length-1];e.shiftKey&&document.activeElement===n?(e.preventDefault(),r.focus()):!e.shiftKey&&document.activeElement===r&&(e.preventDefault(),n.focus())}}return document.addEventListener(`keydown`,e),()=>{document.removeEventListener(`keydown`,e)}},[pe,f.kind]);let me=f.kind===`attention`?m(`drawer.titleAttention`):f.kind===`todo`?m(`drawer.taskDetails`):f.kind===`run`?m(`drawer.runDetails`):f.kind===`output`?m(`drawer.titleOutput`):f.kind===`proposal`&&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`),he=f.kind===`proposal`?f.item.goalId??`manager`:f.item.goalId,ge=f.kind===`attention`?f.item.goalTitle??m(`drawer.currentGoal`):f.kind===`todo`||f.kind===`run`?f.item.goalTitle:f.kind===`output`?f.item.goalTitle??m(`drawer.currentGoal`):f.kind===`goal`?f.item.title:f.kind===`schedule`?m(`drawer.goalAutoRun`):f.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`),_e=f.kind===`goal`?d.find(e=>e.goalId===f.item.goalId&&!!e.sessionId)??d.find(e=>e.goalId===f.item.goalId):null,ve=f.kind===`run`&&(f.item.completedSteps>0||!!f.item.latestActivity||!!f.item.outputs?.length),ye=f.kind===`attention`?Zi(f.item.updatedAt,m):null,be=Mb(I);async function xe(){f.kind!==`run`||!h.trim()||(await r.onCorrectRun?.(f.item,h.trim()),g(``))}async function Se(e,t,n,i){if(t===`successor_create`){await r.onPreviewAction?.({actionKind:`todo.create`,context:{goal_id:e.goalId,kind:`todo`,todo_id:e.todoId},idempotencyKey:`workspace-todo-successor-${e.todoId}-${Date.now().toString(36)}`,normalizedParameters:{goal_id:e.goalId,text:m(`drawer.taskSuccessorText`,{task:e.text})},summary:m(`drawer.taskSuccessorSummary`,{task:e.text})});return}await r.onPreviewAction?.({actionKind:`todo.update`,context:{goal_id:e.goalId,kind:`todo`,todo_id:e.todoId},idempotencyKey:`workspace-todo-${e.todoId}-${t}-${Date.now().toString(36)}`,normalizedParameters:{agent_id:e.claimedBy??F,goal_id:e.goalId,operation:t,...t===`block`?{note:m(`drawer.taskSuccessorNote`)}:{},...t===`defer`&&i?{resume_when:i}:{},todo_id:e.todoId},summary:`${n}:${e.text}`})}async function Ce(e,t,n){u||!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 we=f.kind===`goal`?P??f.item.subagentExecution??{allowedDomains:[],domainCandidates:[],enabled:!1,maxChildren:0}:{allowedDomains:[],domainCandidates:[],enabled:!1,maxChildren:0},Te=j===`previewing`||j===`applying`,Ee=(()=>{if(f.kind!==`goal`)return[];let e=new Map;for(let t of we.allowedDomains){let n=Bb(t);n&&e.set(n,{matchingTodoCount:0,value:n})}if(we.domainCandidates)for(let t of we.domainCandidates){let n=Bb(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=Bb(t.taskDomain);if(!n)continue;let r=e.get(n);e.set(n,{matchingTodoCount:(r?.matchingTodoCount??0)+1,value:n})}return[...e.values()]})();function De(){w(we.allowedDomains),ee(we.modelConfig?.model??``),A(we.modelConfig?.reasoning_effort??``),O(we.maxChildren||2),E(null),ne(`idle`),N(null)}function Oe(){let e=[...new Set(C.map(e=>Bb(e)))];return e.every(e=>!!e)?e:null}function ke(e,t){w(n=>t?[...n,e].filter((e,t,n)=>n.indexOf(e)===t):n.filter(t=>t!==e)),N(null),ne(`idle`),E(null)}async function Ae(e,t=e){if(f.kind!==`goal`||!r.onPreviewGoalSubagentConfiguration)return;let n=e?Oe():[];if(t&&!k.trim()&&te){ne(`error`),E(m(`drawer.subagentModelRequired`));return}if(e&&!n){ne(`error`),E(m(`drawer.subagentDomainInvalid`)),N(null);return}let i={allowedDomains:n??[],enabled:e,goalId:f.item.goalId,maxChildren:e?D:0,...Pb(t,k,te)};ne(`previewing`),E(m(`drawer.subagentPreviewing`)),N(null);try{let e=await r.onPreviewGoalSubagentConfiguration(i);if(!e.changed){ae.current=fe??null,re({...e.configuration,domainCandidates:we.domainCandidates}),w(e.configuration.allowedDomains),ee(e.configuration.modelConfig?.model??``),A(e.configuration.modelConfig?.reasoning_effort??``),O(e.configuration.maxChildren||2),ne(`success`),E(m(`drawer.subagentNoChange`));return}N({...i,changed:e.changed,previewId:e.previewId}),ne(`ready`),E(m(`drawer.subagentPreviewReady`))}catch(e){ne(`error`),E(e instanceof Error?e.message:m(`drawer.subagentPreviewFailed`))}}async function je(){if(!(!M||!r.onApplyGoalSubagentConfiguration)){ne(`applying`),E(m(`drawer.subagentApplying`));try{let e=await r.onApplyGoalSubagentConfiguration({allowedDomains:M.allowedDomains,enabled:M.enabled,goalId:M.goalId,maxChildren:M.maxChildren,modelConfig:M.modelConfig,previewId:M.previewId});ae.current=fe??null,re({...e,domainCandidates:we.domainCandidates}),w(e.allowedDomains),ee(e.modelConfig?.model??``),A(e.modelConfig?.reasoning_effort??``),O(e.maxChildren||2),ne(`success`),E(m(`drawer.subagentApplied`)),N(null);try{await r.onRefresh?.()}catch{ne(`warning`),E(m(`drawer.subagentAppliedRefreshFailed`))}}catch(e){ne(`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:ce,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:ue,tabIndex:-1,children:me}),(0,z.jsx)(`p`,{children:ge})]}),(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:ge}),className:`personal-icon-button personal-drawer-close`,onClick:pe,ref:L,type:`button`,children:[(0,z.jsx)(Zp,{className:`personal-mobile-back`,size:18}),(0,z.jsx)(oh,{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`})]}),ye?(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:m(`common.waiting`)}),(0,z.jsx)(`dd`,{children:m(`tasks.waitingAge`,{age:ye})})]}):null]})]}),(0,z.jsx)(Eb,{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 Ce(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`)]}),Lb.map(e=>(0,z.jsx)(`button`,{onClick:()=>void Ce(f.item,e.resolution,m(e.key)),type:`button`,children:m(e.key)},e.resolution))]})]})]}):null]}):null,f.kind===`todo`?(0,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=>oe(e.target.value),value:F,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-${F}-${Date.now().toString(36)}`,normalizedParameters:{agent_id:F,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":!!I.trim()&&!be,onChange:e=>se(e.target.value),placeholder:m(`drawer.taskDeferPlaceholder`),value:I}),(0,z.jsx)(`button`,{className:`personal-secondary-action`,disabled:!be,onClick:()=>void Se(f.item,`defer`,m(`drawer.taskDefer`),be??void 0),type:`button`,children:m(`drawer.taskDeferReview`)}),(0,z.jsx)(`small`,{children:I.trim()&&!be?m(`drawer.taskDeferInvalid`):m(`drawer.taskDeferSupported`)})]}),(0,z.jsx)(`div`,{className:`personal-task-management-secondary`,children:Ib.map(e=>(0,z.jsx)(`button`,{onClick:()=>void Se(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 Se(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:[ab(f.item.usage?.tokens24h,m(`drawer.usageNotMeasured`),nb),` / `,ab(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:[ab(f.item.usage?.costUsd24h,m(`drawer.usageNotMeasured`),rb),` / `,ab(f.item.usage?.costUsd7d,m(`drawer.usageNotMeasured`),rb)]})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:m(`drawer.duration`)}),(0,z.jsxs)(`dd`,{children:[ab(f.item.usage?.durationMs24h,m(`drawer.usageNotMeasured`),ib),` / `,ab(f.item.usage?.durationMs7d,m(`drawer.usageNotMeasured`),ib)]})]})]})]}),(0,z.jsx)(Tb,{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`)}),_e?.sessionId?(0,z.jsxs)(z.Fragment,{children:[(0,z.jsx)(`h3`,{children:Xi(_e.sessionStatus??_e.status,m)}),(0,z.jsx)(`p`,{children:_e.title}),r.onOpenRunSession?(0,z.jsxs)(`button`,{className:`personal-primary-action`,onClick:()=>void r.onOpenRunSession?.(_e),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":we.enabled,"aria-label":m(M&&j===`ready`?`drawer.subagentPending`:we.enabled?`drawer.subagentDisable`:`drawer.subagentEnable`),className:`personal-subagent-switch`,"data-pending":M&&j===`ready`?`true`:void 0,disabled:u||Te||!!M||!r.onPreviewGoalSubagentConfiguration,onClick:()=>void Ae(!we.enabled),role:`switch`,type:`button`,children:[(0,z.jsx)(`span`,{}),m(M&&j===`ready`?`drawer.subagentPending`:we.enabled?`common.on`:`common.off`)]})]}),(0,z.jsx)(`p`,{children:m(`drawer.subagentDescription`)}),M&&j===`ready`?(0,z.jsxs)(`div`,{className:`personal-subagent-preview`,children:[(0,z.jsx)(`strong`,{children:m(M.enabled?`drawer.subagentConfirmEnable`:`drawer.subagentConfirmDisable`)}),(0,z.jsx)(`p`,{children:M.enabled?m(`drawer.subagentPreviewSummary`,{count:M.maxChildren,domains:M.allowedDomains.join(` · `)||m(`drawer.subagentDomainsUnrestricted`)}):m(`drawer.subagentDisableSummary`)}),M.modelConfig===void 0?null:(0,z.jsxs)(`p`,{children:[m(`drawer.subagentModel`),`: `,M.modelConfig?.model||m(`drawer.subagentModelDefault`),` · `,M.modelConfig?.reasoning_effort||m(`drawer.subagentModelDefault`)]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`button`,{className:`personal-primary-action`,onClick:()=>void je(),type:`button`,children:m(`common.confirm`)}),(0,z.jsx)(`button`,{className:`personal-secondary-action`,onClick:De,type:`button`,children:m(`common.cancel`)})]})]}):null,T?(0,z.jsxs)(`p`,{className:`personal-subagent-feedback is-${j}`,role:`status`,children:[j===`previewing`||j===`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:we.modelConfig?.model||m(`drawer.subagentModelDefault`)})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:m(`drawer.subagentEffort`)}),(0,z.jsx)(`dd`,{children:we.modelConfig?.reasoning_effort||m(`drawer.subagentModelDefault`)})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:m(`drawer.subagentCurrentBoundary`)}),(0,z.jsx)(`dd`,{children:we.allowedDomains.join(` · `)||m(`drawer.subagentDomainsUnrestricted`)})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:m(`drawer.subagentChildLimit`)}),(0,z.jsx)(`dd`,{children:we.maxChildren||0})]})]}),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:Te,children:[(0,z.jsx)(`legend`,{children:m(`drawer.subagentDomains`)}),Ee.length>0?(0,z.jsx)(`div`,{className:`personal-subagent-domain-options`,children:Ee.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=>ke(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:Te,value:k,placeholder:`gpt-5.6-luna`,onChange:e=>{ee(e.target.value),N(null),ne(`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:Te,value:te,onChange:e=>{A(e.target.value),N(null),ne(`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:Te,type:`button`,onClick:()=>{ee(`gpt-5.6-luna`),A(`max`),N(null),ne(`idle`),E(null)},children:m(`drawer.subagentLunaPreset`)}),(0,z.jsx)(`button`,{className:`personal-secondary-action`,disabled:Te,type:`button`,onClick:()=>{ee(``),A(``),N(null),ne(`idle`),E(null)},children:m(`drawer.subagentClearModel`)}),(0,z.jsx)(`p`,{children:m(`drawer.subagentModelHint`)}),(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:Te,onChange:e=>{O(Number(e.target.value)),N(null),ne(`idle`),E(null)},value:D,children:Rb.map(e=>(0,z.jsx)(`option`,{value:e,children:e},e))})]}),(0,z.jsx)(`button`,{className:`personal-secondary-action`,disabled:Te,onClick:()=>void Ae(we.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:ve?m(`drawer.runRecordProjected`,{completed:f.item.completedSteps,outputs:f.item.outputs?.length?m(`drawer.runRecordProjectedOutputs`,{count:f.item.outputs.length}):``,total:f.item.totalSteps}):m(`drawer.runRecordEmpty`)}),f.item.status===`running`?(0,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 xe(),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)(Db,{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}),(0,z.jsx)(`p`,{children:f.item.impact}),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: `,he]}),(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 Ub=[`checking`,`connecting`,`downloading`,`installing_app`,`installing_runtime`],Wb={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 Gb(e,t=`update_failed`){return{phase:`error`,details:{code:typeof e==`string`&&Object.hasOwn(Wb,e)?e:t}}}function Kb(){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=Ub.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(Gb(t))})}).catch(()=>{e&&c(Gb(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(Gb(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:Wb[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)(oh,{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 qb=e=>`loopx-sidebar-goal-order-v1:${encodeURIComponent(e)}`;function Jb(e){try{let t=JSON.parse(e??`null`);return Array.isArray(t)&&t.every(e=>typeof e==`string`)?[...new Set(t)]:[]}catch{return[]}}function Yb(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 Xb(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 Zb(e,t){let n=qb(t),[r,i]=(0,R.useState)(()=>{try{return Jb(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=Yb(e,r),m=p.map(e=>e.goalId);function h(t,a,s){let l=Xb(r,m,t,a,s);if(l===r)return;i(l);let u=Yb(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 Qb=`/ssh-hosts`,$b=/^[A-Za-z0-9][A-Za-z0-9._-]{0,254}$/;function ex(e){return typeof e==`string`&&$b.test(e.trim())}function tx(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!ex(t)||n.has(t)?[]:(n.add(t),[{alias:t}])}),schemaVersion:`ssh_host_catalog_v0`}}async function nx(e=fetch,t=Qb){let n=await e(t,{cache:`no-store`});if(!n.ok)throw Error(`无法读取本机 SSH Host(HTTP ${n.status})。`);return tx(await n.json())}function rx(e,t){let n=e.trim();if(!ex(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 ix=`/api/ssh-source/ensure`,ax=`/api/ssh-source/goal-lifecycle`;async function ox(e,t){let n=await fetch(ix,{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 sx(e,t,n,r,i=fetch){let a=await i(ax,{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 cx({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,ee]=(0,R.useState)(``),te=`configured:`,A=[...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:`${te}${e.alias}`}))],j=(0,R.useMemo)(()=>h.some(e=>e.alias===C)?rx(C,D):{error:c(`source.selectHost`)},[h,C,D,c]);(0,R.useEffect)(()=>{ne()},[]);async function ne(){b(!0),v(null);try{let e=await nx();g(e.hosts),i?.(e.hosts.map(e=>e.alias)),w(t=>t||e.hosts[0]?.alias||``),e.hosts.length||v(c(`source.hostEmpty`))}catch(e){v(e instanceof Error?e.message:c(`source.hostLoadError`))}finally{b(!1)}}function M(){u(!0),m(`configured`),f(null),ne()}function N(){u(!1),m(`configured`),v(null),S(!1),w(``),f(null),E(``),O(`8876`),ee(``)}function P(){let e=r({label:T,statusUrl:k});if(e.error){f(e.error);return}N()}function re(){if(`error`in j){f(j.error??c(`source.invalid`));return}let e=r({ensureTunnel:!0,hostAlias:j.hostAlias,label:j.label,statusUrl:j.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=rx(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 j){f(j.error??c(`source.invalid`));return}try{await navigator.clipboard.writeText(j.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:M,title:c(`source.add`),type:`button`,children:(0,z.jsx)(Vm,{size:14})})]}),(0,z.jsx)(cb,{ariaLabel:c(`source.select`),className:`personal-status-source-select`,icon:(0,z.jsx)(Ym,{size:15}),onChange:e=>{if(e.startsWith(te)){ie(e.slice(11));return}o(e)},options:A,value:e.id}),(0,z.jsxs)(`div`,{className:`personal-status-source-meta`,children:[(0,z.jsxs)(`span`,{className:`is-${t}`,children:[(0,z.jsx)(`i`,{}),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)(oh,{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 ne(),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 j?c(`source.tunnelCommandPending`):j.command}),(0,z.jsxs)(`button`,{"aria-label":c(`source.copyCommand`),disabled:`error`in j,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 j,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=>ee(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 lx={需修复:`is-danger`,等你:`is-warning`,等待条件:`is-info`,推进中:`is-success`,安静运行:`is-quiet`,已完成:`is-quiet`,已停止:`is-stopped`};function ux({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=Zb(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?``:lx[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)(cx,{...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)(Kb,{}),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 dx=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 fx({goal:e,agentId:t,seed:n,enabled:r,listView:i=!1,onSelect:a}){let{t:o}=Ji(),s=(0,R.useId)(),[c,l]=(0,R.useState)(!1),u=!i||c,d=i?96:148,[f,p]=(0,R.useState)(n),[m,h]=(0,R.useState)(t===`all`?e.doneTodoCount??n.length:n.length),[g,_]=(0,R.useState)(void 0),[v,y]=(0,R.useState)(!1),[b,x]=(0,R.useState)(!1),[S,C]=(0,R.useState)(!1),[w,T]=(0,R.useState)({top:0,height:600}),[E,D]=(0,R.useState)(null),O=(0,R.useRef)(null),k=(0,R.useRef)(null),[ee,te]=(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 A=g===void 0||w.top+w.height>=f.length*d-d*2;(0,R.useEffect)(()=>{if(!r||!u||!A||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=dx.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,A,g,b,ee,e.goalId,t,v]),(0,R.useEffect)(()=>{O.current&&(O.current.scrollTop=0),T({top:0,height:O.current?.clientHeight??600}),D(null)},[i]);let j=Math.max(0,Math.floor(w.top/d)-3),ne=Math.min(f.length,Math.ceil((w.top+w.height)/d)+3),M=Array.from({length:Math.max(0,ne-j)},(e,t)=>j+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:M.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),te(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 px({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 mx({historyEnabled:e=!1,goal:t,items:n,onDraftTaskFromMessage:r,onOpenChat:i,onQuickComplete:a,quickCompletingTodoIds:o,onSelect:s,selectedTodoId:c=null,userTodos:l}){let{t:u}=Ji(),[d,f]=(0,R.useState)(!1),[p,m]=(0,R.useState)({goalId:``,laneId:`all`}),h=(0,R.useRef)(null);(0,R.useEffect)(()=>{if(!c)return;let e=window.requestAnimationFrame(()=>h.current?.scrollIntoView({block:`nearest`,inline:`nearest`}));return()=>window.cancelAnimationFrame(e)},[c]);let g=l.filter(e=>e.goalId===t.goalId).map(e=>({...e,goalTitle:t.title})),_=e=>e.priority===`P0`?0:e.priority===`P1`?1:e.priority===`P2`?2:3,v=(0,R.useMemo)(()=>{let e=new Map((t.agentLanes??[]).map(e=>[e.agentId,e]));for(let n of t.agentTodos)n.claimedBy&&!e.has(n.claimedBy)&&e.set(n.claimedBy,{agentId:n.claimedBy,label:n.claimedBy});return[...e.values()]},[t.agentLanes,t.agentTodos]),y=p.goalId===t.goalId&&v.some(e=>e.agentId===p.laneId)?p.laneId:`all`,b=e=>y===`all`||e===y,x=t.agentTodos.filter(e=>e.taskClass!==`continuous_monitor`&&!e.done).filter(e=>b(e.claimedBy)).sort((e,t)=>_(e)-_(t)),S=t.agentTodos.filter(e=>e.taskClass!==`continuous_monitor`&&e.done).filter(e=>b(e.claimedBy)),C=n.filter(e=>e.kind===`schedule`&&b(e.schedule.agentId)),w=n.filter(e=>e.kind===`run`&&!!e.run.todoId&&b(e.run.agentId)),T=!g.length&&!x.length&&!S.length&&!C.length,E=n.filter(e=>e.kind===`message`&&(e.message.role===`user`||e.message.role===`assistant`)),D=E.reduce((e,t,n)=>t.message.role===`user`?n:e,-1),O=D>=0?E[D]?.message:null,k=D>=0?E.slice(D+1).reverse().find(e=>e.message.role===`assistant`)?.message:null,ee=D>=0&&E.slice(D+1).some(e=>e.message.role===`assistant`&&e.message.pending);return(0,z.jsxs)(`section`,{"aria-label":u(`header.tasks`),className:`personal-task-board${d?` is-list-view`:``}`,children:[(0,z.jsxs)(`header`,{className:`personal-task-view-toolbar`,children:[(0,z.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(ee?`tasks.chatPending`:k?`tasks.chatAgentReplied`:`tasks.chatRecent`)}),(0,z.jsx)(`small`,{children:k?.returnDelivery?u(`tasks.chatReturn`):k?.agentLabel})]}),(0,z.jsxs)(`p`,{className:`is-user`,children:[(0,z.jsx)(`b`,{children:u(`common.you`)}),O.text]}),k&&!k.pending?(0,z.jsxs)(`p`,{className:`is-assistant`,children:[(0,z.jsx)(`b`,{children:k.returnDelivery?u(`tasks.chatReturn`):k.agentLabel??u(`common.agent`)}),k.text]}):null,(0,z.jsx)(`small`,{children:u(ee?`tasks.chatPendingDescription`:`tasks.chatUnchangedDescription`)})]}),(0,z.jsxs)(`footer`,{children:[(0,z.jsxs)(`button`,{onClick:i,type:`button`,children:[(0,z.jsx)(Pm,{size:14}),u(`tasks.chatViewReply`)]}),k&&!ee&&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)(px,{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)(px,{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)(px,{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)(fx,{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 hx=yd(W(),q(W())),gx=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:hx,owner_agent:W().optional(),actor_agent:W().optional(),from_agent:W().optional(),to_agent:W().optional()}),_x=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:hx.optional()}),vx=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(gx),edges:q(_x)}).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`})}),yx=J({ok:X(!0),goal_id:W(),observed_at:W().datetime({offset:!0}),graph:vx.nullable(),acceptance:ef.nullable()});function bx(e,t){let n=yx.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 xx(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 bx(await r.json(),e)}function Sx(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 Cx(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 wx(e){return[`gate`,`gate_summary`,`lease`].includes(e.kind)?0:e.kind===`deliverable`?1:2}function Tx(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{Cx(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 Ex({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 Dx={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 可隐藏本区块。`}},Ox={en:{contract:Dx.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:Dx[`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 kx({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=>wx(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 Ax({goal:e,items:t,userTodos:n,onSelect:r,active:i}){let{locale:a}=Ji(),o=Ox[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(``),xx(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),ee=p===`related`&&!k?`all`:p,te=(0,R.useMemo)(()=>O?Sx(O,d,ee,h):[],[O,d,ee,h]),A=O?.edges.filter(e=>e.from_node_id===h||e.to_node_id===h)??[],j=new Map(O?.nodes.map(e=>[e.node_id,e])),ne=()=>{f(``),m(`all`)},M=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([Tx(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:[Cx(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,` `,te.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:ee,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:ne,children:o.reset})]}),te.length?_?(0,z.jsx)(kx,{graph:O,nodes:te,selected:h,onSelect:M,copy:o}):(0,z.jsx)(`ul`,{className:`delivery-node-list`,children:te.map(e=>(0,z.jsx)(`li`,{children:(0,z.jsxs)(`button`,{type:`button`,"aria-pressed":h===e.node_id,onClick:()=>M(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}),A.length?(0,z.jsx)(`ul`,{className:`delivery-relations`,children:A.map(e=>(0,z.jsxs)(`li`,{children:[(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`button`,{type:`button`,onClick:()=>M(e.from_node_id),children:j.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:()=>M(e.to_node_id),children:j.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)(Ex,{goalId:e.goalId,contract:T?.acceptance?.goal_acceptance_contract,copy:o.contract,current:D}),(0,z.jsx)(Tb,{goal:T?{...e,acceptanceObservation:T.acceptance}:e})]})}function jx({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:`查看任务`,outputs:`查看成果`,usage:`最近 24 小时`,execution:`执行记录`,remote:`此来源仅提供同步的状态与验收观察,交付链需要实时本机来源。`}:{progress:`Current progress`,attention:`Needs you`,none:`No pending decisions are loaded.`,details:`Goal information`,tasks:`View tasks`,outputs:`View outputs`,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`,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}),(0,z.jsx)(`p`,{children:t.agentSentence}),(0,z.jsxs)(`div`,{className:`goal-overview-links`,children:[(0,z.jsxs)(`button`,{type:`button`,onClick:()=>s(`tasks`),children:[u.tasks,(0,z.jsx)(Qp,{size:14})]}),(0,z.jsxs)(`button`,{type:`button`,onClick:()=>s(`files`),children:[u.outputs,(0,z.jsx)(Qp,{size:14})]})]}),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]}),(0,z.jsxs)(`section`,{children:[(0,z.jsxs)(`header`,{children:[(0,z.jsx)(`h3`,{children:u.attention}),(0,z.jsx)(`span`,{children:d.length})]}),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))}):(0,z.jsx)(`p`,{children:u.none}),d.length>3?(0,z.jsxs)(`button`,{type:`button`,onClick:()=>s(`tasks`),children:[u.tasks,` (`,d.length,`)`,(0,z.jsx)(Qp,{size:14})]}):null]})]}),(0,z.jsxs)(`dl`,{className:`goal-overview-usage`,"aria-label":u.usage,children:[(0,z.jsxs)(`div`,{children:[(0,z.jsxs)(`dt`,{children:[c(`drawer.tokensShort`),` · `,u.usage]}),(0,z.jsx)(`dd`,{children:ab(t.usage?.tokens24h,c(`drawer.usageNotMeasured`),nb)})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsxs)(`dt`,{children:[c(`drawer.costShort`),` · `,u.usage]}),(0,z.jsx)(`dd`,{children:ab(t.usage?.costUsd24h,c(`drawer.usageNotMeasured`),rb)})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsxs)(`dt`,{children:[c(`drawer.durationShort`),` · `,u.usage]}),(0,z.jsx)(`dd`,{children:ab(t.usage?.durationMs24h,c(`drawer.usageNotMeasured`),ib)})]})]}),i?(0,z.jsxs)(z.Fragment,{children:[(0,z.jsx)(`p`,{className:`goal-overview-source-note`,children:u.remote}),(0,z.jsx)(Tb,{goal:t})]}):(0,z.jsx)(Ax,{active:e,goal:t,items:n,userTodos:r,onSelect:o})]})}function Mx({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 Nx(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 Px(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 Fx(e){return e.history_permission_guidance?.api_document_url??null}function Ix(e,t,n){if(e instanceof Ih){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 Lx({embedded:e=!1,focusGoalConnection:t=!1,goals:n,initialGoalId:r,onChanged:i,onClose:a}){let{t:o}=Ji(),[s,c]=(0,R.useState)(`connections`),[l,u]=(0,R.useState)([]),[d,f]=(0,R.useState)([]),[p,m]=(0,R.useState)(!0),[h,g]=(0,R.useState)(null),[_,v]=(0,R.useState)(``),[y,b]=(0,R.useState)(t),[x,S]=(0,R.useState)(``),[C,w]=(0,R.useState)(r??n[0]?.goalId??``),[T,E]=(0,R.useState)(``),[D,O]=(0,R.useState)([]),[k,ee]=(0,R.useState)(``),[te,A]=(0,R.useState)(!1),[j,ne]=(0,R.useState)(null),[M,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([i_(),p_()]);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(Ix(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([]),ee(``),A(!1),ne(null);return}let e=!1;A(!0),ne(null);let t=window.setTimeout(()=>{d_(x,T).then(t=>{e||(O(t),ee(e=>t.some(t=>t.chat_id===e)?e:t[0]?.chat_id??``))}).catch(t=>{e||(O([]),ee(``),ne(Ix(t,o(`lark.error.groupLoad`),o)))}).finally(()=>{e||A(!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(()=>{s_(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(Ix(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=>Px(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??``),ee(``),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 o_({appRef:Ce,brand:Te});Oe(e)}catch(e){Ne.current?.close(),Me(Ix(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 c_(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`:M,goalId:C,incomingMode:M===`configured_chat_all`?`all`:`mentions`,ingressMode:P===`manager`?`session_queue`:ie,replyMode:F},t=await m_({...e,execute:!1});if(!t.ok)throw new Ih(t.public_summary??t.blocker??o(`lark.error.bindPreview`),{error_code:t.blocker??`provider_api_failed`});let n=await m_({...e,execute:!0});if(!n.ok)throw new Ih(n.public_summary??n.blocker??o(`lark.error.bind`),{error_code:n.blocker??`provider_api_failed`});b(!1),await Ie(),i?.()}catch(e){me(Ix(e,o(`lark.error.bind`),o))}finally{fe(!1)}}}async function $e(e,t){if(ye!==t){be(t);return}try{await h_(e,t),be(null),await Ie(),i?.()}catch(e){g(Ix(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)(oh,{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=Px(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,Fx(e)?(0,z.jsxs)(`a`,{href:Fx(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`):Nx(e.ingress_mode,o).label}),(0,z.jsx)(`small`,{children:e.conversation_kind===`manager`?o(`lark.managerConversationDescription`):e.agent_id??Nx(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)(oh,{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}),te?(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,!te&&j?(0,z.jsx)(`div`,{className:`personal-lark-group-state is-error`,role:`alert`,children:j}):null,!te&&!j&&D.length===0?(0,z.jsx)(`div`,{className:`personal-lark-group-state`,role:`status`,children:o(`lark.groupEmpty`)}):null,!te&&!j&&D.length>0?(0,z.jsx)(`select`,{"aria-label":o(`lark.groupChat`),onChange:e=>ee(e.target.value),value:k,children:D.map(e=>(0,z.jsx)(`option`,{value:e.chat_id,children:e.chat_name},e.chat_id))}):null]}),(0,z.jsxs)(`label`,{children:[(0,z.jsx)(`span`,{children:o(`lark.bindGoal`)}),(0,z.jsx)(`select`,{"aria-label":o(`lark.bindGoal`),onChange:e=>{let t=e.target.value;w(t),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:M,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=Nx(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)(oh,{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 Rx(e){return e&&typeof e==`object`&&!Array.isArray(e)?e:{}}function zx(e,t,n){let r=Rx(t),i=Rx(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 Bx(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 Vx(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 Hx({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 Ux({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)(Hx,{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 Wx({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)(Ux,{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 Gx={en:{manager_runtime:{displayName:`Manager runtime`,description:`Selects the persistent host-tool profile used by owner manager conversations.`},steward_executor:{displayName:`Steward executor`,description:`Selects the executor, model, and reasoning effort the steward channel answers on for this machine, ahead of the Chat service environment.`},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 绑定。`}}},Kx={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.`},executor_endpoint:{label:`Steward executor`,description:`The executor this machine's steward channel answers on. The choice outranks the Chat service environment and the shipped default.`},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 开放常规宿主工具,但受保护操作仍单独校验。`},executor_endpoint:{label:`管家执行器`,description:`本机管家通道使用的执行器;优先级高于 Chat 服务环境变量与出货默认值。`},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 qx(e,t){let n=Gx[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 Jx(e){return Kx[e]}Object.freeze(Object.keys(Gx.en).sort());function Yx(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 Xx({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 Zx({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 Qx({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 $x(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 eS(e,t){return[...e].sort((e,n)=>{let r=$x(e)-$x(n);if(r!==0)return r;let i=qx(e,t),a=qx(n,t);return i.display_name.localeCompare(a.display_name,t)||e.capability_id.localeCompare(n.capability_id)})}function tS({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:eS(e,t).map(e=>{let o=qx(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 nS({capability:e,locale:t,source:n}){let{t:r}=Ji(),i=qx(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)(Zx,{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:rS[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=Jx(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 rS={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 iS({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 aS({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?Bx(n.configuration_editor,u):null,[n,u]),p=c===`guided`||f!==null;(0,R.useEffect)(()=>{l(`guided`),d(``),a({busy:null,draft:zx(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 qg(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=zx(n.configuration_editor,i.draft,n.default),o=await Jg(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`?Vx(r.draft,e,t):{...r.draft,[e]:t},preview:null})),s(null)}function _(e){if(!n||i.busy)return;d(e);let t=Bx(n.configuration_editor,e);a(e=>({...e,preview:null,draft:t?zx(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 oS({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(`capabilities.partialWrite`)}),(0,z.jsx)(`p`,{children:i(`capabilities.partialWriteDescription`)}),(0,z.jsx)(`small`,{children:n.recommended_action})]}),(0,z.jsxs)(`button`,{onClick:t,type:`button`,children:[(0,z.jsx)(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}`)}),(0,z.jsx)(`small`,{children:i(`capabilities.previewLocked`)})]}):null]})}function sS({callbacks:e,catalog:t,goalId:n,notification:r,onApplied:i,onNotificationChanged:a}){let{locale:o,t:s}=Ji(),c=(0,R.useMemo)(()=>eS(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?qx(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}=aS({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=Yx(f,`goal`),k=f.configuration_editor.read_only_reason??s(D?`capabilities.previewOnly`:`capabilities.machineOnly`);async function ee(){if(!f||!O||C||!y)return;let e=zx(f.configuration_editor,w,f.default);await S(e)}async function te(){!O||C||await S(null)}return(0,z.jsxs)(`div`,{className:`personal-capability-layout`,children:[(0,z.jsx)(tS,{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)(nS,{capability:d,locale:o,source:f.effective_configuration?.source}),(0,z.jsx)(Qx,{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)(iS,{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)(Wx,{disabled:!!C,copy:Jx(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)(oS,{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 te(),type:`button`,children:s(`capabilities.restoreInheritance`)}):null,(0,z.jsx)(`button`,{disabled:!!C||!y,onClick:()=>void ee(),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)(Xx,{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 cS({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),Kg(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)(sS,{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 lS(e){return e&&typeof e==`object`&&!Array.isArray(e)?e:{}}function uS(e,t){let n=t?.machine_namespace;return n?e?.machine_configuration?.namespaces[n]:void 0}function dS(e,t,n){return{...lS(e.default),...lS(t),...n}}function fS(e,t){for(let n of e.configuration_editor.fields){let e=t[n.key];if(n.required&&(e==null||e===``))return!1}return e.capability_id===`periodic_report`&&t.enabled===!0?!!(String(t.profile_preset??``).trim()&&String(t.route_ref??``).trim()&&String(t.timezone??``).trim()):!0}function pS(e){try{let t=JSON.parse(e);return t&&typeof t==`object`&&!Array.isArray(t)?t:null}catch{return null}}function mS(e){return e?e===`absent`?e:e.replace(/^sha256:/,``).slice(0,12):`—`}function hS(){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)(()=>eS(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=>Yx(e,`machine`))??E[0],k=O?qx(O,e):void 0,ee=uS(n,k),te=!!(k?.machine_namespace&&ee),A=!!(k&&Yx(k,`machine`)),j=(0,R.useMemo)(()=>pS(c),[c]),ne=k?u===`json`?j:dS(k,ee,o):null,M=!!(k&&(u===`json`?j:fS(k,ne??{})));async function N(){r(await Gg())}(0,R.useEffect)(()=>{let e=!0;return Gg().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=uS(n,k),t=zx(k.configuration_editor,e??k.default,k.default),r=dS(k,e,t);s(t),l(JSON.stringify(r,null,2)),d(A?`guided`:`json`),p(null),h(`upsert`),y(null)},[n,i,e]);function P(e,t){s(n=>k?.capability_id===`periodic_report`?Vx(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(dS(k,ee,o),null,2));else if(j)s(zx(k.configuration_editor,j,k.default));else{C(t(`machine.jsonInvalid`));return}d(e),p(null),h(`upsert`),C(null)}}async function ie(){if(!(!A||!k?.machine_namespace||!ne||!M||b)){x(`preview`),C(null),T(null);try{h(`upsert`),p(await Yg(k.machine_namespace,ne))}catch(e){C(e instanceof Error?e.message:t(`machine.previewError`))}finally{x(null)}}}async function ae(){if(!(!A||!k?.machine_namespace||!te||b)){x(`preview`),C(null),T(null);try{h(`remove`),p(await Zg(k.machine_namespace))}catch(e){C(e instanceof Error?e.message:t(`machine.previewError`))}finally{x(null)}}}async function F(){if(!A||!k?.machine_namespace||!f||b||m===`upsert`&&!ne)return;x(`apply`),C(null);let e=m;try{let n=e===`remove`?await Qg(k.machine_namespace,f.plan_revision):await Xg(k.machine_namespace,ne,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 $g(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 e_(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)(tS,{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)(nS,{capability:O,locale:e,source:k.available_scopes.includes(`machine`)?te?`machine_default`:`capability_default`:void 0}),(0,z.jsx)(Qx,{available:A,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:ee?.schedule?e===`zh-CN`?`日历与阶段汇报`:`Calendar and stage reports`:t(`machine.periodicReportActivation`)}),(0,z.jsx)(`p`,{children:ee?.schedule?ee.enabled===!0?e===`zh-CN`?`已配置日历计划,由现有唤醒检查;是否送达请核对报告回执。`:`A calendar schedule is configured and checked by existing wakes. Verify delivery in the report receipt.`:e===`zh-CN`?`日历计划已保存;启用此能力后才会检查和投递。`:`The schedule is saved; enable this capability to check and deliver reports.`:t(`machine.periodicReportActivationDescription`)})]})]}):null,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,A?(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)(Wx,{copy:Jx(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`)]})}),M?null:(0,z.jsx)(`p`,{className:`personal-machine-validation`,role:`alert`,children:t(`machine.requiredFields`)})]}):(0,z.jsxs)(`label`,{className:`personal-capability-json-editor`,htmlFor:`machine-configuration-json`,children:[(0,z.jsx)(`span`,{children:t(`machine.jsonConfiguration`)}),(0,z.jsx)(`textarea`,{"aria-describedby":`machine-configuration-json-help`,disabled:!!b,id:`machine-configuration-json`,onChange:e=>{l(e.target.value),p(null),C(null)},rows:12,spellCheck:!1,value:c}),(0,z.jsx)(`small`,{id:`machine-configuration-json-help`,children:t(`machine.jsonConfigurationHelp`)}),j?null:(0,z.jsx)(`span`,{className:`personal-machine-validation`,role:`alert`,children:t(`machine.jsonInvalid`)})]})]}):null,S?(0,z.jsx)(`p`,{className:`personal-machine-error`,role:`alert`,children:S}):null,w?(0,z.jsxs)(`p`,{className:`personal-machine-notice`,role:`status`,"aria-live":`polite`,children:[(0,z.jsx)(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:mS(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:mS(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,A?(0,z.jsxs)(`footer`,{className:`personal-capability-actions`,children:[te?(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||!M,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)(Xx,{values:[{label:t(`machine.currentValue`),value:ee},{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 gS(e,t){return t(e===`invalid`?`machine.credentialInvalid`:e===`configured`?`machine.credentialConfigured`:`machine.credentialAbsent`)}function _S(e,t){return t(e===`machine_store`?`machine.credentialSourceMachine`:e===`service_environment`?`machine.credentialSourceEnvironment`:`machine.credentialSourceUnset`)}function vS(){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 Ug();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 Wg(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?`${gS(t.provider_key.configured?`configured`:`absent`,e)} · ${_S(t.provider_key.source,e)}`:``,g=t?`${t.base_url.value??e(`machine.credentialAbsent`)} · ${_S(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?gS(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 yS={appearance:Lm,capabilities:Qm,language:Dm,lark:Xm,machine:Jm,provider:Em};function bS({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=[...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`)}],g=[{label:f(`settings.languageEnglish`),value:`en`},{label:f(`settings.languageSimplifiedChinese`),value:`zh-CN`}],_={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.jsxs)(`div`,{className:`personal-settings-title`,children:[(0,z.jsx)(`small`,{children:f(`settings.eyebrow`)}),(0,z.jsx)(`strong`,{children:f(`settings.title`)})]}),(0,z.jsx)(`nav`,{"aria-label":f(`settings.categories`),className:`personal-settings-tabs`,children:h.map(e=>{let t=yS[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:_.title})})}),p===`lark`?(0,z.jsx)(Lx,{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)(vS,{})}):null,p===`machine`?(0,z.jsx)(hS,{}):null,p===`capabilities`?(0,z.jsx)(cS,{callbacks:e,goalId:r,notification:a.find(e=>e.goalId===r),onChanged:o}):null,p===`appearance`?(0,z.jsxs)(`section`,{className:`personal-detail-card personal-appearance-settings`,children:[(0,z.jsx)(`small`,{children:f(`settings.workspaceDisplay`)}),(0,z.jsx)(`h3`,{children:f(`settings.appearance`)}),(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.jsxs)(`section`,{className:`personal-settings-card`,children:[(0,z.jsxs)(`header`,{children:[(0,z.jsx)(`span`,{className:`personal-settings-icon`,children:(0,z.jsx)(Dm,{size:18})}),(0,z.jsx)(`div`,{children:(0,z.jsx)(`h2`,{children:f(`settings.language`)})})]}),(0,z.jsx)(`div`,{"aria-label":f(`settings.language`),className:`personal-language-options`,role:`radiogroup`,children:g.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 xS=`loopx-pw-theme`,SS=`loopx`;function CS(){try{let e=window.localStorage.getItem(xS);return e===`loopx`||e===`paper`||e===`brutal`?e:SS}catch{return SS}}function wS(e){try{window.localStorage.setItem(xS,e)}catch{}}function TS({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 ES(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 DS(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 OS(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 kS({goals:e,onSelectGoal:t,onRetry:n,systemHealth:r}){let{locale:i,t:a}=Ji(),o=e.filter(e=>e.activationState===`active`),s=o.filter(e=>e.loadState===`error`).length,c=[{key:`needs_you`,label:a(`home.lane.needsYou`)},{key:`running`,label:a(`home.lane.running`)},{key:`observing`,label:a(`home.lane.observing`)},{key:`scheduled`,label:a(`home.lane.scheduled`)}],l=Object.fromEntries(c.map(e=>[e.key,[]])),u=[],d=[];e.filter(e=>!e.loadState).forEach(e=>{let t=tb(e);t===`history`?u.push(e):t===`stopped`?d.push(e):l[t].push(e)});let f=e=>(0,z.jsxs)(`button`,{className:`personal-home-goal-card`,"data-goal-state":e.loadState??e.state,"data-load-error":e.loadError,onClick:()=>t(e.goalId),type:`button`,children:[(0,z.jsxs)(`span`,{className:`personal-home-goal-meta`,children:[(0,z.jsx)(`i`,{}),e.agentLaneCount&&e.agentLaneCount>1?a(`header.workAgentCount`,{count:e.agentLaneCount}):e.agentLabel??e.agentId]}),(0,z.jsx)(`strong`,{children:e.title}),(0,z.jsx)(`p`,{children:e.loadError?a(`startup.error.${e.loadError}`):e.needsYou??e.nextSentence}),(0,z.jsxs)(`footer`,{children:[(0,z.jsx)(`span`,{children:e.loadState?a(e.loadState===`error`?`startup.goalError`:`startup.goalLoading`):Yi(e.state,i)}),(0,z.jsx)(`small`,{title:e.latestActivity,children:e.loadState?``:e.latestActivity?OS(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(f)]}):null,(0,z.jsx)(`div`,{className:`personal-home-lanes`,children:c.map(e=>(0,z.jsxs)(`section`,{className:`personal-home-lane is-${e.key}`,"data-testid":`personal-home-lane-${e.key}`,children:[(0,z.jsxs)(`header`,{children:[(0,z.jsxs)(`span`,{children:[(0,z.jsx)(`i`,{}),e.label]}),(0,z.jsx)(`b`,{children:l[e.key].length})]}),(0,z.jsx)(`div`,{className:`personal-home-lane-list`,children:l[e.key].length?l[e.key].map(f):(0,z.jsx)(`span`,{className:`personal-home-empty`,children:a(`home.empty`)})})]},e.key))}),(0,z.jsxs)(`details`,{className:`personal-home-history`,children:[(0,z.jsxs)(`summary`,{children:[(0,z.jsx)(`span`,{children:a(`home.history`)}),(0,z.jsx)(`b`,{children:u.length}),(0,z.jsx)(`small`,{children:a(`home.completedGoals`)})]}),(0,z.jsx)(`div`,{children:u.length?u.map(f):(0,z.jsx)(`span`,{className:`personal-home-empty`,children:a(`home.noCompletedGoals`)})})]}),d.length?(0,z.jsxs)(`details`,{className:`personal-home-history is-stopped`,children:[(0,z.jsxs)(`summary`,{children:[(0,z.jsx)(`span`,{children:a(`home.stopped`)}),(0,z.jsx)(`b`,{children:d.length}),(0,z.jsx)(`small`,{children:a(`home.preservedState`)})]}),(0,z.jsx)(`div`,{children:d.map(f)})]}):null]})}function AS({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.goalTitle,e.output.kind===`report`?i(`files.verifiedReport`):null,e.output.todoId?`${i(`common.task`)} ${e.output.todoId}`:null,OS(e.output.createdAt,r,i)].filter(Boolean).join(` · `)})]},e.id))]})}function jS({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)(oh,{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)(vb,{text:t.text}),t.pending?(0,z.jsx)(`small`,{children:o(`conversation.agentPending`)}):null,(0,z.jsx)(jy,{request:t.collaboration}),(0,z.jsx)(Cb,{delivery:t.returnDelivery})]})]},t.id))})]})}function MS({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)(oh,{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 NS(e,t,n){let r=[];if(t===null)return e.userTodos.slice(0,4).forEach(t=>r.push({attention:{...t,goalTitle:t.goalTitle??eb(e,t.goalId)},id:`attention:${t.todoId}`,kind:`attention`})),e.goals.filter(e=>tb(e)===`running`).slice(0,4).forEach(e=>r.push({id:`run:${e.goalId}`,kind:`run`,run:{agentId:e.agentId,agentLabel:e.agentLabel??e.agentId,completedSteps:e.doneTodoCount??e.agentTodos.filter(e=>e.done).length,goalId:e.goalId,goalTitle:e.title,latestActivity:e.agentSentence,runId:`goal:${e.goalId}`,status:`running`,title:e.nextSentence,totalSteps:Math.max((e.doneTodoCount??0)+e.agentTodos.filter(e=>!e.done).length,1)}})),r;let i=e.goals.find(e=>e.goalId===t);if(!i)return r;if(i.needsYou){let t=e.userTodos.find(e=>e.goalId===i.goalId);r.push({attention:t?{...t,goalTitle:i.title}:{blocking:i.needsYouBlocking??!1,goalId:i.goalId,goalTitle:i.title,text:i.needsYou,todoId:`${i.goalId}:attention`},id:`attention:${i.goalId}`,kind:`attention`})}r.push({id:`run:${i.goalId}`,kind:`run`,run:{agentId:i.agentId,agentLabel:i.agentLabel??i.agentId,completedSteps:i.doneTodoCount??i.agentTodos.filter(e=>e.done).length,goalId:i.goalId,goalTitle:i.title,latestActivity:i.agentSentence,runId:`goal:${i.goalId}`,status:i.state===`推进中`?`running`:i.state===`需修复`?`failed`:`waiting`,title:i.nextSentence,totalSteps:Math.max((i.doneTodoCount??0)+i.agentTodos.filter(e=>!e.done).length,1)}}),i.agentTodos.filter(e=>e.taskClass===`continuous_monitor`).forEach(t=>{let a=e.timeline?.find(e=>e.kind===`run`&&e.run.goalId===i.goalId&&e.run.todoId===t.todoId&&!!e.run.sessionId);r.push({id:`schedule:${i.goalId}:${t.todoId}`,kind:`schedule`,schedule:{agentId:i.agentId,executionHistory:a?[{label:a.run.latestActivity||a.run.title,runId:a.run.runId,status:a.run.status===`waiting`||a.run.status===`queued`?`running`:a.run.status,timestamp:i.latestActivity||n(`common.recently`)}]:[],goalId:i.goalId,label:t.text,schedule:t.evidence??n(`schedule.summary`),scheduleId:t.todoId,scheduleKind:`monitor`,sessionId:a?.run.sessionId,status:t.done||t.status===`paused`?`paused`:`active`,stopCondition:n(`drawer.scheduleDefaultStop`),target:t.text,timezone:`Asia/Shanghai`}})});let a=e.timeline?.find(e=>e.kind===`proposal`&&e.proposal.actionKind===`heartbeat.bind`&&e.proposal.goalId===i.goalId);if(a){let e=e=>a.proposal.fields.find(t=>t.key===e)?.value;r.push({id:`schedule:${i.goalId}:heartbeat`,kind:`schedule`,schedule:{agentId:i.agentId,executionHistory:[],goalId:i.goalId,label:`${n(`schedule.heartbeat`)} · ${i.title}`,nextRunAt:n(`drawer.schedulePending`),notificationRule:n(`drawer.scheduleDefaultNotification`),schedule:e(`cadence`)??n(`schedule.summary`),scheduleId:`${i.goalId}:heartbeat`,scheduleKind:`heartbeat`,status:a.proposal.status===`applied`?`active`:`draft`,stopCondition:e(`stop_condition`)??n(`drawer.scheduleDefaultStop`),timezone:e(`timezone`)??`Asia/Shanghai`}})}return r}function PS(e){return e===`preview_ready`?`ready`:e===`cancelled`?`draft`:e===`failed`?`error`:e}function FS(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 IS(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 LS(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 RS(e,t){let n=LS(e),r=Vy(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`?Qy(Zy(e.receipt),t):t(`proposal.summary.teamPlan`,{goal:qy(e.normalized_parameters),count:Ky(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`?IS(e,r,t):e.action_kind===`team.plan`?Gy(e.normalized_parameters,t):FS(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`):t(`proposal.impact.default`),previewId:e.proposal_id,lifecycleOperation:n,gate:e.gate?{kind:String(e.gate.kind??`protected_action`),nextAction:typeof e.gate.next_action==`string`?e.gate.next_action:void 0,summary:String(e.gate.summary??t(`proposal.gate.default`))}:void 0,primaryLabel: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`:PS(e.status),teamPlanOutcome:e.action_kind===`team.plan`?Zy(e.receipt)??void 0:void 0,teamPlanAssignments:e.action_kind===`team.plan`?Jy(e.receipt,e.normalized_parameters):void 0,teamPlanGapLanes:e.action_kind===`team.plan`?Yy(e.receipt,e.normalized_parameters):void 0,title:c}}function zS(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 BS(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 VS(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 HS(e,t){let n=VS(e,[`目标`,`Objective`]),r=VS(e,[`完成标准`,`Completion criteria`]),i=VS(e,[`执行边界(可选)`,`执行边界`,`边界`,`Execution boundary (optional)`,`Execution boundary`,`Boundary`]),a=(n||BS(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 US(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 WS(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 GS(e,t){return VS(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 KS(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 qS(e,t){let n=e.toLowerCase();return t.find(e=>n.includes(e.agentId.toLowerCase())||n.includes(e.label.toLowerCase()))}function JS(e){let t=VS(e,[`标题`,`任务标题`,`Todo 标题`]),n=VS(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 YS=new Set([`image/png`,`image/jpeg`,`image/webp`,`image/gif`]),XS=5242880,ZS=4;function QS(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 $S({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,ee]=(0,R.useState)(!1),[te,A]=(0,R.useState)(!1),[j,ne]=(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{}}}),[M,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)(CS),[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=j[Be]??``;(0,R.useEffect)(()=>{se([]),ce(null)},[Be]);function He(e,t){ne(n=>{let r={...n};t?r[e]=t:delete r[e];try{window.sessionStorage.setItem(`loopx-pw-composer-drafts`,JSON.stringify(r))}catch{}return r})}function Ue(e){He(Be,e)}function We(e){return yh.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=>tb(e)===`needs_you`).length,[Ge]),qe=(0,R.useMemo)(()=>Ge.filter(e=>tb(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=[...NS(o,Ze,f),...o.timeline??[],...e,...DS(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)&&ee(!0)},[D,et,V]),(0,R.useEffect)(()=>{!V||T===`chat`||tt.some(e=>e.pending)&&A(!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([n_(),p_()]).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={attention:Ke,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?.attention===r.attention&&e.done===r.done&&e.failed===r.failed?e:r)},[Qe,Ke,B]),(0,R.useEffect)(()=>{if(s){w({});return}let e=!1;return Uh(B?{goalId:B}:{contextKind:`manager`}).then(t=>{if(e)return;let n=t.filter(e=>[`preview_ready`,`gated`,`deferred`,`applying`].includes(e.status)||Vy(e).retryOriginal===!0||e.action_kind===`operation.execute`&&e.status===`applied`).map(e=>RS(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):RS(await Vh(e),f)}catch(t){if(!(t instanceof Ih)||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:US(r),goal_id:t,stop_condition:KS(r),timezone:`Asia/Shanghai`}:{agent_id:ze,cadence:US(r),goal_id:t,stop_condition:KS(r),target:GS(r,f),target_key:`goal-${t}`,timezone:`Asia/Shanghai`},summary:e===`heartbeat`?f(`proposal.summary.heartbeat`):f(`proposal.summary.monitor`,{target:GS(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 Wh(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||LS(t.proposal)!==e.lifecycleOperation))throw new Ih(f(`actionReview.targetChanged`),{error_code:`action_response_mismatch`});let r=RS(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 Ih&&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 Ih&&Hy(t.payload),i=t instanceof Ih&&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),A(!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 Gh(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=RS(await Kh(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:()=>bg(),onSetupGoalChannel:e=>Sg(e),onToggleGoalAutoNotify:e=>Cg(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),ee(!1),A(!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),wS(e)}async function bt(r){let i=r?[]:I,a=(r??Ve).trim()||(i.length?f(`composer.imageAnalysisPrompt`):``);if(!(!a||M)){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 lg(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`&&A(!0):ee(!0);let e=await n.onSendMessage?.(a,ze,B,i);e&&await ot(e);return}let e=Nb(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=HS(a,f),n=zS(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:US(a),enabled:e.normalizedParameters.heartbeat_enabled===!0,timezone:`Asia/Shanghai`},initial_todos:t.initialTodos,objective:t.objective,permission:t.permission,stop_condition:KS(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=WS(a,f);if(e){Ue(a),ue(e);return}await ut(`monitor`,B,a);return}let r=qS(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:JS(a)},summary:`创建 Todo:${JS(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`&&A(!0):ee(!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`)),Ct=Qe.filter(e=>e.kind===`run`&&!!e.run.sessionId&&!!e.run.canInterrupt&&(e.run.status===`running`||e.run.status===`queued`)).length;async function wt(e){if(!e?.length)return;let t=ZS-I.length,n=Array.from(e).slice(0,Math.max(0,t)),r=n.find(e=>!YS.has(e.type)),i=n.find(e=>e.size>XS);if(t<=0){ce(f(`composer.imageCountError`,{count:ZS}));return}if(r){ce(f(`composer.imageTypeError`));return}if(i){ce(f(`composer.imageSizeError`,{size:XS/1024/1024}));return}try{let t=await Promise.all(n.map(e=>QS(e,f)));se(e=>[...e,...t].slice(0,ZS)),ce(e.length>n.length?f(`composer.imageCountError`,{count:ZS}):null)}catch(e){ce(e instanceof Error?e.message:f(`composer.imageReadGenericError`))}finally{Pe.current&&(Pe.current.value=``)}}function Tt(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(),wt(t))}async function Et(){let e=await p_();Oe(e)}async function Dt(){await Promise.all([Et(),n.onRefresh?.()])}async function Ot(){if(!(!n.onRefresh||he===`loading`)){ge(`loading`);try{await n.onRefresh(),ge(`done`)}catch{ge(`error`)}window.setTimeout(()=>ge(`idle`),1800)}}let kt=Xe?(0,z.jsx)(bS,{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 Dt(),onClose:Ye,onThemeChange:yt,theme:Ce}):null;return(0,z.jsxs)(z.Fragment,{children:[(0,z.jsx)(`div`,{hidden:Xe,children:(0,z.jsx)(TS,{drawer:at?(0,z.jsx)(Hb,{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)(lb,{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 Ot():void 0,onOpenNavigation:()=>Se(!0),onOpenManagerChat:()=>{ee(!1),O(!0)},onSelectGoalTab:e=>{e===`chat`?mt():E(e)},onSelectAgent:vt,onReturnManagerHome:()=>{O(!1),ee(!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}),(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+Le.attention>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:[(0,z.jsxs)(`span`,{children:[(0,z.jsx)(`b`,{children:Le.done}),f(`digest.completed`)]}),(0,z.jsxs)(`span`,{children:[(0,z.jsx)(`b`,{children:Le.failed}),f(`digest.failed`)]}),(0,z.jsxs)(`span`,{children:[(0,z.jsx)(`b`,{children:Le.attention}),f(`digest.needsYou`)]})]})]}):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}),` `,f(`home.blockingSummary`,{count:qe})]})})]})]}):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)(Mx,{activeTab:T,scrollRef:Me,panels:{overview:(0,z.jsx)(jx,{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)(mx,{historyEnabled:!s,goal:V,items:Qe,onDraftTaskFromMessage:s?void 0:e=>{Ue(`创建一个 Task:${ES(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)(AS,{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)(MS,{onClose:()=>S(null),onOpenDetails:()=>v({item:x,kind:`run`}),run:x}):null,(0,z.jsx)(wb,{items:$e,onSelect:v,selectedGoal:V})]})}},`${u?.activeSource.statusUrl??`/status.json`}:${V.goalId}`):D?(0,z.jsx)(wb,{items:nt,onSelect:v,selectedGoal:null}):(0,z.jsx)(kS,{goals:Ge,onRetry:()=>void n.onRefresh?.(),onSelectGoal:_t,systemHealth:o.systemHealth})]}),(0,z.jsxs)(`div`,{className:`personal-composer-wrap`,children:[B&&T===`chat`&&!s&&ze===`codex`&&n.onStartLoopX?(0,z.jsx)(db,{onPrepare:()=>n.onPrepareLoopX(ze,B),sessionId:e,onChange:re,onExecute:(e,t)=>n.onStartLoopX?.(e,ze,B,t)},`${B}:${ze}`):null,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)(jS,{messages:et,onClose:()=>ee(!1),onOpenConversation:()=>{ee(!1),O(!0)}}):null,V&&T!==`chat`&&te&&tt.length?(0,z.jsx)(jS,{agentLabel:xt,messages:tt,onClose:()=>A(!1),onDraftTask:T===`tasks`?e=>{Ue(`创建一个 Task:${ES(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)(oh,{size:14})})]}):null,(0,z.jsx)(`p`,{className:`personal-composer-hint`,children:V?Ct>0?f(`composer.goalRunningHint`,{agent:xt,count:Ct}):f(`composer.goalMessageHint`,{agent:xt}):f(`composer.managerMessageHint`)}),V?(0,z.jsxs)(`div`,{className:`personal-quick-prompts`,children:[(0,z.jsxs)(`button`,{"aria-label":f(`composer.nextAction`),disabled:M,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:M,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:M,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:M||!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:M||!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:M,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:M,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`)})]})]}),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)(oh,{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(),wt(t))},children:[(0,z.jsxs)(`span`,{children:[(0,z.jsx)(rm,{size:17}),t.find(e=>e.agentId===ze)?.label??ze]}),(0,z.jsx)(`button`,{"aria-label":f(`composer.addImage`),className:`personal-composer-attach`,disabled:M||I.length>=ZS,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:M||I.length>=ZS,multiple:!0,onChange:e=>void wt(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:Tt,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||M,onClick:()=>void bt(),title:f(St?`composer.createGoalHint`:`composer.sendMessageHint`),type:`button`,children:(0,z.jsx)(qm,{size:18})})]})]})]})]}),sidebar:(0,z.jsx)(ux,{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`)})}),kt]})}function eC(e){return(e??``).replace(/\s+/gu,` `).trim()}function tC(e,t=120){let n=Array.from(e);return n.length<=t?e:`${n.slice(0,t-1).join(``)}…`}function nC(e,t,n){let r=eC(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`):tC(r)}function rC(e,t){return t({advancing:`projection.agentAdvancingGoal`,idle:`projection.agentIdle`,needs_you:`projection.agentNeedsDecision`,stopped:`projection.agentStopped`,waiting_external:`projection.agentWaitingExternal`}[e])}function iC({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 aC=`/status.json`,oC=`loopx-status-source-catalog-v1`,sC={id:`local`,kind:`local`,label:`本机`,readOnly:!1,statusUrl:aC};function cC(e,t){let n=dh(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 lC(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 uC(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=cC(n.statusUrl,t);if(!r||r.length>48||!(`url`in i))return null;let a=ex(n.hostAlias)?n.hostAlias.trim():void 0;return{...a?{hostAlias:a}:{},id:lC(i.url),kind:`ssh_tunnel`,label:r,readOnly:!0,statusUrl:i.url}}function dC(){return{schemaVersion:1,sources:[sC]}}function fC(e,t){try{let n=e.getItem(oC);if(!n)return dC();let r=JSON.parse(n);if(r.schemaVersion!==1||!Array.isArray(r.sources))return dC();let i=new Set([sC.statusUrl]);return{schemaVersion:1,sources:[sC,...r.sources.flatMap(e=>{let n=uC(e,t);return!n||i.has(n.statusUrl)?[]:(i.add(n.statusUrl),[n])})]}}catch{return dC()}}function pC(e,t){e.setItem(oC,JSON.stringify({schemaVersion:1,sources:t.sources.filter(e=>e.kind===`ssh_tunnel`)}))}function mC(e,t){let n=new Set(t.filter(ex).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 hC(e,t,n){let r=t.label.trim();if(!r)return{error:`请填写来源名称。`};if(r.length>48)return{error:`来源名称不能超过 48 个字符。`};let i=cC(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&&!ex(t.hostAlias))return{error:`请选择有效的 SSH Host。`};let a=t.hostAlias?.trim(),o={...a?{hostAlias:a}:{},id:lC(i.url),kind:`ssh_tunnel`,label:r,readOnly:!0,statusUrl:i.url};return{catalog:{...e,sources:[...e.sources,o]},source:o}}function gC(e,t){return{...e,sources:e.sources.filter(e=>e.kind===`local`||e.id!==t)}}function _C(e,t,n){if(!t.trim()||dh(t,n).source?.isRelative)return sC;let r=t.trim();try{r=new URL(r,n).toString()}catch{return null}return e.sources.find(e=>e.statusUrl===r)??null}function vC(e,t,n){return _C(e,t,n)||(dh(t,n).source?.isRelative?sC:{id:`temporary`,kind:`ssh_tunnel`,label:`临时来源`,readOnly:!0,statusUrl:t.trim()})}function yC(e,t,n,r){return vC(e,t??n,r)}var bC={delete:`删除`,deploy:`部署`,merge:`合并`,payment:`付款`,release:`发布`};function xC(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:`请求受保护操作:${bC[n.operation]} · ${n.target}`}}var SC=aC;async function CC(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 wC(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 TC(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??wC(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 EC(e){return(e??``).replace(/\s+/g,` `).trim()}function DC(e,t=132){let n=EC(e);return n.length<=t?n:`${n.slice(0,Math.max(0,t-1))}…`}function OC(e){let t=new Map;for(let n of e?.goals??[])t.set(n.goal_id,n);return t}function kC(e,t){return e===void 0||t===void 0?void 0:e+t}function AC(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 jC(e){return e?.items.find(e=>!e.done)}function MC(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 NC(e){return e?.queueItem?.project_asset?.quota?.state??e?.queueItem?.quota?.state??e?.goal.quota?.state??`waiting`}function PC(e,t,n){let r=[];for(let t of e){let e=AC(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 FC(e){return e?.map(e=>({dataUrl:e.data_url,id:e.id,mimeType:e.mime_type,name:e.name,size:e.size}))}var IC=`loopx.personal-agent-selection.v1`;function LC(){if(typeof window>`u`)return{};try{let e=JSON.parse(window.localStorage.getItem(IC)??`{}`);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 RC={需修复:`danger`,等你:`warning`,等待条件:`info`,推进中:`success`,安静运行:`neutral`,已停止:`neutral`,已完成:`neutral`};function zC(e,t){return EC(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 BC(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 VC(e,t){return[`agent`,`assistant`].includes(e.trim().toLowerCase())&&t.trim().length>0}var HC=`已发现的项目 Agent`;function UC(e){switch(Oy(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 zC(e)}}function WC(e,t){switch(ky(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 HC}}function GC(e,t){let n=e.project_asset;return t===`user`?MC(n?.user_todos,e.user_todos,`project_asset.user_todos`):MC(n?.agent_todos,e.agent_todos,`project_asset.agent_todos`)}function KC(e){return DC(e.title??e.text,112)}function qC(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 JC(e,t){return{resumeWhen:e.resume_when??null,resumeReady:e.resume_ready??null,resumeReceiptId:qC(e),claimedBy:e.claimed_by??null,done:e.status!==`deferred`&&e.done,evidence:e.evidence?DC(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:KC(e),todoId:e.todo_id?.trim()||`${t.goal.id}:agent:${e.index}`}}function YC(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 XC(e){return YC(e).map(t=>JC(t,e))}function ZC(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=JC(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 QC(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:DC(e.title,112),todoId:e.todo_id?.trim()||`${t.goal.id}:agent:${e.claimed_by??`unknown`}:current`}}function $C(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=QC(t,n);r.has(i.todoId)||r.set(i.todoId,i)}return[...r.values()]}function ew(e){let t=e.queueItem?.project_asset?.agent_todos,n=e.queueItem?.agent_todos,r=YC(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=>JC(t,e)),l=r.find(e=>!e.done);return{doneTodoCount:o,nextTodoText:EC(t?.next??``)||(l?EC(l.title??``)||EC(l.text??``):``)||null,recentCompleted:c}}function tw(e,t){let n=EC(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`):nC(n,t,`projection.validationRecorded`):``}function nw(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 rw(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=[tw(r?.summary,n),nC(i?.health_check,n),nC(i?.recommended_action,n)].find(e=>e!==``&&e!==`暂无`)??n(`projection.runRecorded`),s=iC({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 iw(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 aw(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 ow(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 sw(e,t){let n=t.queueItem?.stale_latest_run_warning;return t.severity===`high`||!!aw(e,t)||!!(n?.requires_refresh_state||n?.severity===`high`)||ow(t)}function cw(e,t){let n=aw(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 lw(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 uw(e,t){let n=e.latestRun?.operator_gate;return nC(n?.operator_question??n?.reason_summary??n?.follow_up??e.queueItem?.recommended_action??e.latestRun?.recommended_action,t,`projection.confirmAgentDecision`)}function dw(e,t){if(t.goal.activation_state===`stopped`)return`已停止`;let n=AC(t,`user`),r=AC(t,`agent`),i=!!jC(n),a=!!jC(r);return[`user_or_controller`,`controller`].includes(t.waitingOn)||i||lw(t)?`等你`:sw(e,t)?`需修复`:t.waitingOn===`external_evidence`?`等待条件`:NC(t)===`eligible`||a?`推进中`:iw(t)?`已完成`:`安静运行`}function fw(e,t,n,r){if(n===`已停止`)return rC(`stopped`,r);if(n===`需修复`)return nC(cw(e,t),r,`projection.statusRefreshNeeded`);if(n===`等你`)return rC(`needs_you`,r);if(n===`推进中`){let e=[(AC(t,`agent`)?.items??[]).filter(e=>!e.done).flatMap(e=>[e.title,e.text]).map(e=>EC(e)).find(e=>e!==``&&e!==`暂无`),t.queueItem?.recommended_action,t.latestRun?.recommended_action].map(e=>EC(e)).find(e=>e!==``&&e!==`暂无`);return e?nC(e,r,`projection.agentAdvancingGoal`):rC(`advancing`,r)}return rC(n===`等待条件`?`waiting_external`:`idle`,r)}function pw(e,t){return t.some(t=>e.includes(t))}function mw(e,t,n){if(t.goals.some(e=>e.activationState===`active`&&e.loadState))return{text:`Goal 状态尚未全部加载,暂不能给出完整统计。可先打开已加载的 Goal,失败项可重试。`,lines:[]};if(pw(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(pw(n,[`现在`,`下一步`,`我该`,`该做什么`,`优先处理`])){let e=t.userTodos[0];if(e)return{text:e.blocking?`先处理「${zC(e.goalId)}」:${e.text}`:`当前最先处理「${zC(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(pw(n,[`等我`,`阻塞`,`需要我`,`全局待办`]))return t.userTodos.length===0?{text:`目前没有 Goal 在等你,开放用户待办为 0。`,lines:[]}:{text:`有 ${t.userTodos.length} 项开放用户待办,阻塞项优先:`,lines:t.userTodos.slice(0,3).map(e=>`${zC(e.goalId)} · ${e.blocking?`阻塞`:`待处理`} · ${e.text}`)};if(pw(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 hw(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=OC(e.usage_summary),s=PC(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(GC(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:KC(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)||!lw(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:uw(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=dw(e,a),l=f.find(e=>e.goalId===t.id),u=l?.text??null,d=ew(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=$C(XC(a),h,a),b=[d.nextTodoText,a.queueItem?.recommended_action,a.latestRun?.recommended_action,fw(e,a,c,n)].map(e=>nC(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:fw(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:rw(e,a,n),state:c,...r?{subagentExecution:{allowedDomains:t.spawn_policy?.allowed_domains??[],domainCandidates:ZC(e,a,y),enabled:t.spawn_policy?.mode===`multi_subagent`&&t.spawn_policy.spawn_allowed===!0&&t.spawn_policy.max_children>0,maxChildren:t.spawn_policy?.max_children??0,modelConfig:t.spawn_policy?.model_config}}:{},title:zC(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:kC(e.input_tokens_24h,e.output_tokens_24h),tokens7d:kC(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?DC(e.current_todo.title,96):null,lastActivityAt:e.last_activity_at??null,state:e.state??null}))}}function gw({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=hw(c,u,_,b);if(!l)return e;let t=Object.values(l.snapshots).map(e=>hw(e,TC(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,ee]=(0,R.useState)(null),[te,A]=(0,R.useState)(null),[j,ne]=(0,R.useState)(!1),M=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:WC(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:WC(`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)(LC),L=_h(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??[];nw(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=uh(f.activeSource.statusUrl,window.location.href),t=e.source?mh(O,e.source):null;if(!D||!t?.indexUrl||!t.detailUrl){ee(null),A(null),ne(!1);return}let{detailUrl:n,indexUrl:r}=t,i=!1;return ee(null),A(null),ne(!0),hh(r,D.goalId).then(async e=>{let t=e.items[0]?.detail_ref;return t?gh(n,t):null}).then(e=>{i||ee(e)}).catch(e=>{i||A(jp(e))}).finally(()=>{i||ne(!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 Zh(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:BC(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 Jh().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(IC,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 eg({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:FC(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:BC(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 Xh(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 fg(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(vh).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 Ih&&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 Ih&&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||M===`loading`)return;let e=!1;return Promise.all(E.goals.filter(e=>!e.loadState).map(async e=>{let t=await Qh({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,M,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 Qh({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=>Zh(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 Xh(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?_h(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=mw(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}),Yh({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 Xh(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 · ${zC(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 cg(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 fg(e,n.turn_id,s)}else u=await ug(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:BC(d.message||o.trim())||`${He(r,a.label)} 已完成分析。`});let f=d.proposals.filter(vh);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=xC(r,n,d.protected_action);if(e)return e}}catch(e){if(Ie.current.delete(r)||t?.loopxMode&&e instanceof Ih&&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 Ih?e.payload:null;n&&bh(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 ig(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 mg(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 pg(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&&RC[D.state],D&&(`${L.label}${D.state}`,We.length>0&&`${Ke}`,Ue.length>0&&`${Ue.length}`),D?.state===`需修复`||!D&&!c.ok?(D&&UC(D.agentId),D?.nextSentence,D?.agentSentence):D?.state===`等你`?(D.needsYouBlocking,D.needsYouBlocking,D.needsYou??D.nextSentence,D.needsYou):(D&&UC(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:UC(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=>VC(e.role,e.text))===!0;return{id:`run:task:${e.session_id}`,kind:`run`,run:{agentId:e.agent_id,agentLabel:UC(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`:VC(e.role,e.text)?`assistant`:`error`,text:e.role===`user`?e.text:BC(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?[{id:`run:${D.goalId}`,kind:`run`,run:{agentId:Se[D.goalId]?.agentId??D.agentId,agentLabel:UC(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:UC(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:UC(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={...$y(E),userTodos:E.userTodos.map(ct),attentionHistory:(E.attentionHistory??E.userTodos).map(ct),periodicReports:{error:te,loading:j},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)($S,{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 Wh((await Vh({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 fg(e.sessionId,r,{signal:t.signal,onDelta:t=>{n+=t,Ye(e.goalId,i,{text:n})}});Ye(e.goalId,i,{activity:[],pending:!1,text:BC(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 Zh(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:FC(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:BC(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 _g(e);return{changed:t.changed,configuration:{allowedDomains:t.after.orchestration.allowed_domains,enabled:t.feature_summary.multi_subagent===`enabled`,maxChildren:t.after.orchestration.max_children,modelConfig:t.after.orchestration.model_config},previewId:t.preview_id}},onApplyGoalSubagentConfiguration:async({previewId:e,...t})=>{let n=await vg(t,e);return{allowedDomains:n.after.orchestration.allowed_domains,enabled:n.feature_summary.multi_subagent===`enabled`,maxChildren:n.after.orchestration.max_children,modelConfig:n.after.orchestration.model_config}}}:{},...g?{onExecuteGoalLifecycle:async({goalId:e,operation:t,reason:n})=>{let r=await sx(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 _w({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)(Cy,{"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)(wy,{"data-testid":`initial-status-state`,children:(0,z.jsx)(Ty,{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)(Cy,{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 vw(){let e=hT.useSearch(),t=hT.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)(()=>fC(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)(g_(e.statusUrl.trim()||null)),k=!T&&u.kind===`example`?e.statusUrl.trim():``,ee=C??k,te=u.kind===`url`?u.label:SC,A=!!(_&&C),j=yC(f,C,te,window.location.href),ne=u.kind===`example`&&!T,M=c.attention_queue,N=c.run_history,P=(0,R.useMemo)(()=>TC(N.goals,M.items),[N.goals,M.items]);function re(e,t,n=0){S({error:null,phase:`loading`}),CC(fh(e,`stopped`,window.location.href)).then(r=>{if(!b_(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=>U_(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=>{b_(O.current,t)&&S({error:jp(e),phase:`error`})})}function ie(){let e=u.kind===`url`?u.label:h||SC,t=v_(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=>U_(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})}),y_(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=v_(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(!b_(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})},()=>b_(O.current,c),()=>s.current,d.signal),p&&(t.resyncAttempt??0)<1&&b_(O.current,c)){await F(n,{resyncAttempt:1});return}b_(O.current,c)&&S({error:null,phase:`ready`});return}let o=await CC(fh(n,`active`,window.location.href));if(!b_(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(!y_(O.current,c))return;r||v(jp(e))}finally{!r&&y_(O.current,c)&&b(!1)}}function oe(e,t={}){o.current?.abort();let n=__(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 ox(e.label,t)}catch{}}O.current.selectionRevision===n&&await F(e.statusUrl,{selectionRevision:n})})()}function I(e){m.current=e,p(e);try{pC(window.localStorage,e)}catch{}}let se={activeSource:j,connectionState:y?`loading`:A?`error`:`connected`,errorMessage:A?`未切换到 ${C??`所选来源`}:${_}`:null,onAdd:e=>{let t=hC(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=mC(t,e);n!==t&&I(n)},onRemove:e=>{I(gC(f,e)),j.id===e&&oe(sC)},onSelect:e=>{let t=f.sources.find(t=>t.id===e);t&&oe(t,{ensureTunnel:t.kind===`ssh_tunnel`})},sources:j.id===`temporary`?[...f.sources,j]:f.sources};(0,R.useEffect)(()=>{let t=e.statusUrl.trim();if(t){if(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(SC))},[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 ne?(0,z.jsx)(_w,{error:_,isLoading:y,onRetry:()=>void F(ee||SC),requestedUrl:ee||SC,theme:n,toggleTheme:()=>r(n===`dark`?`light`:`dark`)}):(0,z.jsx)(gw,{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||SC,{background:!0,invalidateGoalIds:e?.invalidateGoalIds,reuseSnapshots:!0}),onRetryGoalArchive:ie,onRefresh:()=>F(u.kind===`url`?u.label:h||SC,{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 yw=J_(`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 bw({className:e,variant:t,...n}){return(0,z.jsx)(`span`,{className:xy(yw({variant:t}),e),...n})}var xw=[{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`}],Sw=[{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`}],Cw=[{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.`}],ww=[`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`],Tw=[{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 Ew({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 Dw(){return(0,z.jsx)(Ew,{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:xw.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)(bw,{variant:`info`,children:e.label}),(0,z.jsx)(bw,{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 Ow(){return(0,z.jsx)(Ew,{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:Sw.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 kw(){return(0,z.jsx)(Ew,{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:Cw.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 Aw(){return(0,z.jsx)(Ew,{icon:fm,title:`Smoke Checklist`,children:(0,z.jsx)(`div`,{className:`space-y-2 p-4`,"data-testid":`developer-smoke-checklist`,children:ww.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 jw(){return(0,z.jsx)(Ew,{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:Tw.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)(bw,{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 Mw(){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://huangruiteng.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://huangruiteng.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)(bw,{variant:`success`,children:`read-only`}),(0,z.jsx)(bw,{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)(bw,{variant:`info`,children:`developers/projections`}),(0,z.jsx)(bw,{variant:`success`,children:`public-safe`}),(0,z.jsx)(bw,{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)(Dw,{}),(0,z.jsx)(Ow,{})]}),(0,z.jsxs)(`div`,{className:`grid gap-4 xl:grid-cols-[minmax(0,1fr)_420px]`,children:[(0,z.jsx)(kw,{}),(0,z.jsx)(Aw,{})]}),(0,z.jsx)(jw,{}),(0,z.jsx)(Ew,{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 Nw=J({value:G().finite(),total:G().finite().positive().optional(),unit:W().optional(),higher_is_better:K()}).passthrough(),Pw=yd(W(),G().finite()).default({}),Fw=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(),Iw=J({arm_id:W(),selected_run_id:W().nullable(),score_countable:K(),metrics:yd(W(),Nw),effort:Pw,insight:Fw.nullable().optional()}),Lw=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(),Nw),countability:J({integrity_qualified:K(),official_result_present:K(),score_countable:K()}).passthrough(),treatment_fidelity:W(),effort:Pw,redacted_insight:Fw.nullable().optional(),upload_provenance:J({producer_id:W(),producer_version:W(),observed_at:W(),source_revision:W()}).passthrough()}).passthrough(),Rw=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(),zw=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(),Rw),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(),Bw=J({baseline_value:G().finite(),candidate_value:G().finite(),delta:G().finite(),direction:Y([`improved`,`flat`,`regressed`]).optional()}).passthrough(),Vw=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(),Bw)}).passthrough(),Hw=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(zw),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(Iw),eligible_comparisons:q(Vw),largest_eligible_primary_contrast:Vw.nullable()})),runs:q(Lw),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 Uw(e){return Hw.parse(e)}function Ww(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 Gw=[{id:`campaign`,label:`Campaign`},{id:`arms`,label:`Arms`},{id:`cases`,label:`Cases`},{id:`runs`,label:`Runs`}];function Kw(e){return e==null?`—`:`${(e*100).toFixed(e>=.995?0:1)}%`}function qw(e){return e==null?`—`:new Intl.NumberFormat(`en`,{maximumFractionDigits:2,notation:`compact`}).format(e)}function Jw(e){if(e==null)return`—`;let t=e/6e4;return t>=120?`${(t/60).toFixed(1)} h`:`${qw(t)} min`}function Yw(e){let t=Object.entries(e);return t.length?t.map(([e,t])=>`${e} (${t})`).join(`, `):`—`}function Xw(e){if(!e)return`—`;let t=e.total==null?qw(e.value):`${qw(e.value)}/${qw(e.total)}`;return e.unit?`${t} ${e.unit}`:t}function Zw(e,t){let n=e.metrics[t];return!n||n.case_denominator===0?`—`:n.suite_micro_rate==null?`${qw(n.value_mean)} mean`:`${Kw(n.suite_micro_rate)} · ${qw(n.suite_micro_numerator)}/${qw(n.suite_micro_denominator)}`}function Qw(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}${qw(r.delta)}`}}function $w({children:e,tone:t=`neutral`}){return(0,z.jsx)(`span`,{className:`benchmark-state benchmark-state-${t}`,children:e})}function eT({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)($w,{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:Zw(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 tT({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)($w,{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:Zw(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:Jw(t.effort.duration_ms?.median)})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:`Protocols`}),(0,z.jsx)(`dd`,{children:Yw(t.protocol_counts)})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:`Runner revisions`}),(0,z.jsx)(`dd`,{children:Yw(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:Yw(t.failure_class_counts)})]})]})]},t.arm_id))})}function nT({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=Qw(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)($w,{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,`: `,Xw(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,`: `,Xw(r.metrics[e.metric_name])]},e.metric_name)),(0,z.jsxs)(`small`,{children:[`Countable · `,Jw(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 rT({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)($w,{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:[Jw(e.effort.duration_ms),` · `,qw(e.effort.agent_steps),` steps · `,qw(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:Xw(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 iT({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)(rT,{packet:e,run:r})]})}function aT(){let e=bT.useSearch(),t=bT.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:Ww(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 Uw(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)($w,{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:[Kw(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:[Gw.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)(eT,{packet:n,primaryMetric:l}),e.view===`arms`&&(0,z.jsx)(tT,{packet:n}),e.view===`cases`&&(0,z.jsx)(nT,{onOpenRun:e=>u(`runs`,e),packet:n,primaryMetric:l}),e.view===`runs`&&(0,z.jsx)(iT,{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 oT=J({goalId:W().optional().default(``),statusUrl:W().optional().default(``)}),sT=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(``)}),cT=sT.omit({mode:!0}),lT=J({dashboardUrl:W().optional().default(``),view:Y([`campaign`,`arms`,`cases`,`runs`]).optional().default(`campaign`),runId:W().optional().default(``)});function uT(){let e=`https://huangruiteng.github.io/loopx/docs/showcases/index.en.html`;return(0,R.useEffect)(()=>{window.location.replace(e)},[]),(0,z.jsx)(`a`,{href:e,children:`Open LoopX cases / 浏览案例`})}function dT({goalId:e,statusUrl:t}){let n=t?uh(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 fT(){let e=gT.useSearch();return e.mode===`ops`?(0,z.jsx)(dT,{...e}):e.mode===`developer`?(0,z.jsx)(ii,{replace:!0,to:`/developers/projections`}):(0,z.jsx)(uT,{})}function pT(){return(0,z.jsx)(dT,{..._T.useSearch()})}var mT=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`})]})}),hT=xi({getParentRoute:()=>mT,path:`/`,validateSearch:e=>oT.parse(e),component:vw}),gT=xi({getParentRoute:()=>mT,path:`/frontstage`,validateSearch:e=>sT.parse(e),component:fT}),_T=xi({getParentRoute:()=>mT,path:`/deprecated/frontstage/ops`,validateSearch:e=>cT.parse(e),component:pT}),vT=xi({getParentRoute:()=>mT,path:`/frontstage/developer`,component:()=>(0,z.jsx)(ii,{replace:!0,to:`/developers/projections`})}),yT=xi({getParentRoute:()=>mT,path:`/developers/projections`,component:Mw}),bT=xi({getParentRoute:()=>mT,path:`/benchmarks/study`,validateSearch:e=>lT.parse(e),component:aT}),xT=mT.addChildren([hT,gT,_T,vT,yT,bT]);function ST(e){return!e||e===`/`||e===`./`?`/`:(e.startsWith(`/`)?e:`/${e}`).replace(/\/+$/,``)||`/`}var CT=Li({routeTree:xT,basepath:ST(`/chat/`),trailingSlash:`preserve`}),wT=document.getElementById(`root`);if(!wT)throw Error(`Root element not found`);var TT=new je({defaultOptions:{queries:{refetchOnWindowFocus:!1,retry:1,staleTime:1e4}}});(0,Vi.createRoot)(wT).render((0,z.jsx)(Fe,{client:TT,children:(0,z.jsx)(qi,{children:(0,z.jsx)(Bi,{router:CT})})})); \ No newline at end of file diff --git a/loopx/web/chat/assets/index-ABpQAa1U.css b/loopx/web/chat/assets/index-ABpQAa1U.css new file mode 100644 index 0000000000..59f6dbacef --- /dev/null +++ b/loopx/web/chat/assets/index-ABpQAa1U.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);margin-bottom:10px;font-size:13px}.goal-loopx-mode-bar{justify-content:space-between;align-items:center;gap:16px;display:flex}.goal-loopx-mode strong{font-weight:500}.goal-loopx-mode p{color:var(--pw-muted,#666);margin:4px 0;font-size:12px}.goal-loopx-mode-actions{flex-shrink:0;gap:8px;display:flex}.goal-loopx-mode button{border:1px solid var(--pw-line,#ebebeb);background:var(--pw-surface,#fff);min-height:40px;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 button:disabled{opacity:.5;cursor:default}.goal-loopx-mode button:focus-visible,.goal-loopx-mode input:focus-visible,.goal-loopx-mode select:focus-visible{outline-offset:2px;outline:2px solid #0070f3}.goal-loopx-mode-settings{border:1px solid var(--pw-line,#ebebeb);background:var(--pw-surface,#fff);border-radius:12px;grid-template-columns:1fr 1fr;gap:12px;margin-top:12px;padding:16px;display:grid}.goal-loopx-mode-settings label{flex-direction:column;gap:6px;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;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-mode-members{flex-wrap:wrap;gap:8px;margin-top:8px;display:flex}.goal-loopx-mode-members span{border:1px solid var(--pw-line,#ebebeb);border-radius:6px;padding:4px 8px;font-size:12px}.goal-loopx-message-mode{align-items:center;gap:8px;margin:8px 0;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;padding:6px}@media (width<=640px){.goal-loopx-mode-bar{flex-wrap:wrap;align-items:flex-start;gap:8px}.goal-loopx-mode-actions{flex-wrap:wrap}.goal-loopx-mode-settings{grid-template-columns:1fr}.goal-loopx-mode button{min-height:44px}}.goal-team-work{margin-top:8px}.goal-team-work section{border:1px solid var(--pw-line,#ebebeb);border-radius:12px;margin-top:8px;padding:12px}.goal-team-work ul{margin:8px 0;padding:0;list-style:none}.goal-team-work li{border-bottom:1px solid var(--pw-line,#ebebeb);overflow-wrap:anywhere;padding:8px 0}.goal-team-work li>span{color:var(--pw-muted,#666);font-size:12px;display:block}.goal-team-bindings li>div,.goal-team-work-actions{flex-wrap:wrap;align-items:center;gap:8px;display:flex}.goal-team-bindings li>div>span{color:var(--pw-muted,#666);font-size:12px}.goal-team-work code{overflow-wrap:anywhere;white-space:normal;font-size:12px;display:block}.goal-team-work summary{cursor:pointer;padding:4px 0}.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{grid-template-columns:1fr 1fr;gap:20px;display:grid}.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-links{gap:8px;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);grid-template-columns:repeat(3,minmax(0,1fr));margin:0;padding-block:12px;display:grid}.goal-overview-usage>div{padding-inline:16px}.goal-overview-usage>div+div{border-left:1px solid var(--pw-line)}.goal-overview-usage dt{color:var(--pw-muted);font-size:11px}.goal-overview-usage dd{margin:8px 0 0;font-size:14px}@media (width<=640px){.goal-overview-summary{grid-template-columns:1fr}.goal-overview-usage>div{padding-inline:8px}}.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{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{color:var(--pw-amber)}.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-live-indicator{color:var(--pw-muted);white-space:nowrap;flex:none;align-items:center;gap:6px;padding:7px 4px;font-size:12px;display:inline-flex}.personal-live-indicator i{background:#3fbf82;border-radius:50%;width:7px;height:7px}.personal-composer-attach{cursor:pointer;border:0;flex:none;place-items:center;display:grid;position:relative;overflow:hidden}.personal-composer-attach:disabled{cursor:not-allowed;opacity:.45}.personal-composer-file-input{opacity:0;pointer-events:none;width:1px;height:1px;position:fixed;overflow:hidden}.personal-action-feedback{border:1px solid var(--pw-line);background:var(--pw-blue-soft);color:var(--pw-blue-ink);border-radius:10px;justify-content:space-between;align-items:center;gap:12px;margin:0 0 8px;padding:9px 12px;font-size:13px;font-weight:650;display:flex}.personal-action-feedback button{color:inherit;cursor:pointer;background:0 0;border:0;place-items:center;display:grid}.personal-refresh-control{flex:none;align-items:center;gap:6px;display:inline-flex}.personal-refresh-control small{color:var(--pw-muted);white-space:nowrap;font-size:11px}.personal-refresh-control.is-error small{color:var(--pw-danger)}.personal-icon-button{border:1px solid var(--pw-line);width:36px;min-width:36px;height:36px;min-height:36px;color:var(--pw-muted);cursor:pointer;background:#fff;border-radius:10px;flex:0 0 36px;place-items:center;padding:0;display:inline-grid}.personal-icon-button:hover{border-color:var(--pw-line-strong);color:var(--pw-text)}.personal-channel-scroll{min-width:0;min-height:0;padding:22px max(26px,50% - 410px);overflow:auto}.personal-channel-scroll[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-home-lanes{grid-template-columns:repeat(4,minmax(0,1fr));gap:14px;display:grid}.personal-system-health-banner{color:#991b1b;background:#fef2f2;border:1px solid #fecaca;border-radius:12px;margin-bottom:16px;padding:12px 16px}.personal-system-health-header{align-items:center;gap:8px;font-size:13px;font-weight:600;display:flex}.personal-system-health-header small{color:#b91c1c;font-size:11.5px;font-weight:400}.personal-system-health-issues{color:#b91c1c;margin:6px 0 0 24px;padding:0;font-size:12px;line-height:1.5}.personal-home-lane{border:1px solid var(--pw-line);background:#fff;border-radius:16px;flex-direction:column;min-width:0;min-height:100%;display:flex;box-shadow:0 1px 4px #1e1c140a}.personal-manager-greeting>span{background:var(--pw-blue-soft);width:38px;height:38px;color:var(--pw-blue);border-radius:12px;place-items:center;display:grid}.personal-manager-greeting div{gap:3px;display:grid}.personal-manager-greeting strong{letter-spacing:-.01em}.personal-manager-greeting p{color:var(--pw-muted);margin:0;font-size:13px}.personal-proposal-explainer{background:var(--pw-blue-soft);color:var(--pw-text);border-radius:10px;padding:10px 12px;font-size:12px;line-height:1.55}.personal-home-board{gap:12px;min-width:0;display:grid}.personal-home-lanes{grid-template-columns:repeat(4,minmax(170px,1fr));gap:10px;min-width:0;display:grid}.personal-home-lane{border:1px solid var(--pw-line);background:#ffffff85;border-radius:15px;align-content:start;min-width:0;min-height:260px;padding:12px;display:grid}.personal-home-lane>header{justify-content:space-between;align-items:center;gap:10px;display:flex}.personal-home-lane>header span{align-items:center;gap:7px;font-size:13px;font-weight:700;display:inline-flex}.personal-home-lane>header i,.personal-home-goal-meta i{background:var(--pw-faint);border-radius:50%;width:8px;height:8px}.personal-home-lane>header b{min-width:24px;color:var(--pw-muted);font-variant-numeric:tabular-nums;text-align:right;font-size:12px}.personal-home-lane>p{min-height:34px;color:var(--pw-muted);margin:7px 0 10px;font-size:10.5px;line-height:1.55}.personal-home-lane.is-needs_you>header i,.personal-home-lane.is-needs_you .personal-home-goal-meta i{background:var(--pw-amber)}.personal-home-lane.is-running>header i,.personal-home-lane.is-running .personal-home-goal-meta i{background:var(--pw-green)}.personal-home-lane.is-observing>header i,.personal-home-lane.is-observing .personal-home-goal-meta i{background:var(--pw-blue)}.personal-home-lane.is-scheduled>header i,.personal-home-lane.is-scheduled .personal-home-goal-meta i{background:#8b6bd8}.personal-home-lane-list{align-content:start;gap:9px;display:grid}.personal-home-goal-card{border:1px solid var(--pw-line);width:100%;min-width:0;color:inherit;cursor:pointer;text-align:left;background:#fff;border-radius:12px;gap:7px;padding:12px;transition:border-color .14s,transform .14s,box-shadow .14s;display:grid;box-shadow:0 1px 4px #1e1c140f}.personal-home-goal-card:hover{border-color:var(--pw-line-strong);transform:translateY(-1px);box-shadow:0 4px 12px #1e1c1414}.personal-home-goal-card:focus-visible{outline-offset:2px;outline:2px solid #7da2ff}.personal-home-goal-meta{min-width:0;color:var(--pw-muted);text-overflow:ellipsis;white-space:nowrap;align-items:center;gap:6px;font-size:10.5px;display:flex;overflow:hidden}.personal-home-goal-card>strong{text-overflow:ellipsis;font-size:13px;line-height:1.45;overflow:hidden}.personal-home-goal-card>p{color:var(--pw-muted);-webkit-line-clamp:2;-webkit-box-orient:vertical;margin:0;font-size:11px;line-height:1.55;display:-webkit-box;overflow:hidden}.personal-home-goal-card>footer{justify-content:space-between;align-items:center;gap:8px;padding-top:2px;display:flex}.personal-home-goal-card>footer span{color:var(--pw-muted);background:#f2f1ed;border-radius:99px;flex:none;padding:2px 7px;font-size:9.5px}.personal-home-goal-card>footer small{color:var(--pw-faint);text-overflow:ellipsis;white-space:nowrap;font-size:9.5px;overflow:hidden}.personal-home-empty{border:1px dashed var(--pw-line-strong);min-height:96px;color:var(--pw-faint);border-radius:11px;place-items:center;font-size:11px;display:grid}.personal-home-history{border:1px solid var(--pw-line);background:#fff9;border-radius:13px}.personal-home-history>summary{cursor:pointer;align-items:center;gap:9px;min-height:44px;padding:0 14px;list-style:none;display:flex}.personal-home-history>summary::-webkit-details-marker{display:none}.personal-home-history>summary span{font-size:12.5px;font-weight:700}.personal-home-history>summary b{color:var(--pw-muted);font-size:11px}.personal-home-history>summary small{color:var(--pw-faint);margin-left:auto;font-size:10.5px}.personal-home-history>div{grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:9px;padding:0 12px 12px;display:grid}.personal-session-record{background:var(--pw-blue-soft);border:1px solid #cfdcf9;border-radius:14px;grid-template-columns:minmax(0,1fr) auto;gap:10px 16px;margin-bottom:12px;padding:14px 16px;display:grid}.personal-session-record>header{grid-column:1/-1;justify-content:space-between;align-items:center;gap:12px;display:flex}.personal-session-record>header span{color:var(--pw-blue-ink);align-items:center;gap:7px;font-size:12px;font-weight:700;display:inline-flex}.personal-session-record>header button{width:28px;height:28px;color:var(--pw-muted);cursor:pointer;background:0 0;border:0;border-radius:8px;place-items:center;padding:0;display:grid}.personal-session-record>header button:hover{color:var(--pw-text);background:#ffffffb3}.personal-session-record>div{min-width:0}.personal-session-record>div strong{text-overflow:ellipsis;white-space:nowrap;font-size:13px;display:block;overflow:hidden}.personal-session-record>div p{color:var(--pw-muted);margin:4px 0 0;font-size:11px}.personal-session-record dl{grid-column:1/-1;grid-template-columns:repeat(3,minmax(0,1fr));gap:8px;margin:0;display:grid}.personal-session-record dl div{background:#ffffff9e;border-radius:9px;gap:2px;min-width:0;padding:8px 10px;display:grid}.personal-session-record dt{color:var(--pw-faint);font-size:9.5px}.personal-session-record dd{color:var(--pw-text);text-overflow:ellipsis;white-space:nowrap;margin:0;font:10.5px/1.4 SF Mono,ui-monospace,Menlo,Consolas,monospace;overflow:hidden}.personal-session-record>.personal-secondary-action{grid-area:2/2;align-self:center}.personal-channel-timeline{gap:10px;display:grid}.personal-live-region{clip:rect(0 0 0 0);clip-path:inset(50%);white-space:nowrap;border:0;width:1px;height:1px;margin:-1px;padding:0;position:fixed;overflow:hidden}.personal-timeline-row{border:1px solid var(--pw-line);background:var(--pw-card);width:100%;min-height:64px;color:inherit;cursor:pointer;text-align:left;border-radius:14px;grid-template-columns:38px minmax(0,1fr) auto auto 16px;align-items:center;gap:12px;padding:11px 15px;transition:border-color .14s,box-shadow .14s;display:grid}.personal-timeline-row:hover{border-color:var(--pw-line-strong);box-shadow:0 2px 8px #1e1c140f}.personal-timeline-row:focus-visible{outline-offset:2px;outline:2px solid #7da2ff}.personal-row-icon{border-radius:11px;place-items:center;width:34px;height:34px;display:grid}.personal-row-icon.is-attention{color:var(--pw-amber);background:var(--pw-amber-bg)}.personal-row-icon.is-run{color:var(--pw-blue-ink);background:var(--pw-blue-soft)}.personal-row-icon.is-output{color:var(--pw-green);background:var(--pw-green-bg)}.personal-row-copy,.personal-run-identity{gap:3px;min-width:0;display:grid}.personal-row-copy strong,.personal-row-copy small,.personal-row-copy span,.personal-run-identity strong,.personal-run-identity small{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.personal-row-copy strong{font-size:13.5px;font-weight:600}.personal-row-copy small,.personal-run-identity small,.personal-row-copy span{color:var(--pw-muted);font-size:11px}.personal-row-status{color:var(--pw-muted);white-space:nowrap;background:#f2f1ed;border-radius:99px;align-items:center;gap:5px;padding:2.5px 10px;font-size:11px;font-weight:600;display:inline-flex}.personal-row-status.is-running{background:var(--pw-green-bg);color:var(--pw-green)}.personal-run-row{grid-template-columns:38px minmax(90px,.65fr) minmax(160px,1.4fr) 90px auto auto 16px}.personal-run-open-label{color:var(--pw-blue-ink);white-space:nowrap;font-size:10.5px;font-weight:650}.personal-run-identity strong{font-size:12px}.personal-run-progress{gap:5px;display:grid}.personal-run-progress small{color:var(--pw-muted);font-variant-numeric:tabular-nums;font-size:10px}.personal-run-progress i{background:#f0efeb;border-radius:99px;height:4px;display:block;overflow:hidden}.personal-run-progress b{border-radius:inherit;background:var(--pw-blue);height:100%;display:block}.personal-output-row time{color:var(--pw-muted);font-size:11px}.personal-spin{animation:1.2s linear infinite pw-spin}@keyframes pw-spin{to{transform:rotate(360deg)}}.personal-message{gap:11px;max-width:84%;padding:6px 2px;display:flex}.personal-message.is-user{background:var(--pw-blue-soft);color:var(--pw-text);border:1px solid #dbe7fd;border-radius:16px 16px 4px;justify-self:end;padding:11px 15px}.personal-message-avatar{background:var(--pw-blue-soft);height:34px;color:var(--pw-blue-ink);border-radius:11px;flex:0 0 34px;place-items:center;display:grid}.personal-message header{align-items:baseline;gap:8px;display:flex}.personal-message header strong{font-size:12px}.personal-message time{color:var(--pw-faint);font-size:10px}.personal-message p{white-space:pre-wrap;margin:6px 0 0;font-size:13.5px;line-height:1.7}.personal-message-pending{color:var(--pw-muted);font-size:11px}.personal-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 p{color:var(--pw-text);text-overflow:ellipsis;white-space:nowrap;grid-template-columns:36px minmax(0,1fr);gap:5px;margin:3px 0;font-size:12px;line-height:1.4;display:grid;overflow:hidden}.personal-task-chat-receipt p b{color:var(--pw-faint);font-size:10px;font-weight:650}.personal-task-chat-receipt p.is-assistant{max-height:2.8em;color:var(--pw-muted);white-space:normal}.personal-task-chat-receipt>div>small{color:var(--pw-muted);font-size:10.5px;line-height:1.4}.personal-task-chat-receipt footer{gap:6px;display:flex}.personal-task-chat-receipt footer button{min-height:26px;color:var(--pw-blue-ink);cursor:pointer;white-space:nowrap;background:#fff;border:1px solid #b9c9ee;border-radius:7px;align-items:center;gap:4px;padding:3px 8px;font-size:10.5px;font-weight:650;display:inline-flex}.personal-task-chat-receipt footer button:hover{border-color:var(--pw-blue);background:var(--pw-blue-soft)}.personal-task-kanban .personal-object-list{background:#f6f4ee;flex-direction:column;min-height:0;padding:0;display:flex}.personal-task-kanban .personal-object-list>header{background:#f6f4ee;border-bottom:1px solid #e0ddd4b8;flex:none;align-items:center;gap:8px;min-height:38px;padding:10px 16px 7px;display:flex}.personal-task-kanban .personal-object-list>header>strong{align-items:center;gap:7px;min-width:0;font-size:12px;display:inline-flex}.personal-task-kanban .personal-object-list>header>span{margin-left:auto}.personal-task-lane-scroll{overscroll-behavior-y:contain;scrollbar-color:#bebbb2 transparent;scrollbar-gutter:stable;scrollbar-width:thin;-webkit-overflow-scrolling:touch;flex-direction:column;flex:auto;gap:8px;min-height:0;padding:8px;scroll-padding-block:8px;display:flex;overflow-y:auto}.personal-task-lane-scroll:focus-visible{outline:2px solid var(--pw-blue);outline-offset:-3px}.personal-task-lane-scroll.has-overflow-before{box-shadow:inset 0 12px 10px -13px #34312b94}.personal-task-lane-scroll.has-overflow-after{box-shadow:inset 0 -16px 12px -15px #34312bb3}.personal-task-lane-scroll.has-overflow-before.has-overflow-after{box-shadow:inset 0 12px 10px -13px #34312b94,inset 0 -16px 12px -15px #34312bb3}.personal-task-lane-scroll::-webkit-scrollbar{width:10px}.personal-task-lane-scroll::-webkit-scrollbar-track{background:0 0}.personal-task-lane-scroll::-webkit-scrollbar-thumb{background:#bebbb2 padding-box padding-box;border:3px solid #0000;border-radius:999px;min-height:40px}.personal-task-lane-scroll::-webkit-scrollbar-thumb:hover{background:#97938a padding-box padding-box}.personal-kanban-dot{background:var(--pw-faint);border-radius:50%;width:8px;height:8px}.personal-kanban-dot.tone-attention{background:var(--pw-amber)}.personal-kanban-dot.tone-progress{background:var(--pw-blue)}.personal-kanban-dot.tone-schedule{background:#8a6fd6}.personal-kanban-dot.tone-done{background:var(--pw-green)}.personal-task-kanban .personal-task-lane-scroll>button,.personal-task-kanban .personal-task-card>button{border:1px solid var(--pw-line);width:100%;min-height:0;color:inherit;text-align:left;cursor:pointer;background:#fff;border-radius:10px;grid-template-columns:18px minmax(0,1fr);align-items:center;gap:6px 8px;padding:10px 12px;display:grid;box-shadow:0 1px 3px #1e1c140f}.personal-task-kanban .personal-task-lane-scroll>button:hover,.personal-task-kanban .personal-task-card>button:hover{border-color:var(--pw-line-strong);background:#fff;box-shadow:0 2px 8px #1e1c1417}.personal-task-kanban .personal-task-lane-scroll>button>small,.personal-task-kanban .personal-task-card>button>small{white-space:normal;text-align:left;flex-wrap:wrap;grid-column:1/-1;justify-content:flex-start;align-items:center;gap:8px;display:inline-flex}.personal-task-kanban .personal-task-lane-scroll>button:last-child{border-bottom:1px solid var(--pw-line)}.personal-task-kanban .personal-task-lane-scroll>button:last-child:hover{border-color:var(--pw-line-strong)}.personal-task-lane-scroll>button,.personal-task-card{flex:none;min-width:0}.personal-task-lane-scroll>button>small,.personal-task-card>button>small{font-size:12px;line-height:16px}.personal-task-lane-scroll>button>strong,.personal-task-card>button>strong{-webkit-line-clamp:3;overflow-wrap:anywhere;-webkit-box-orient:vertical;font-size:14px;font-weight:500;line-height:20px;display:-webkit-box;overflow:hidden}.personal-task-card{position:relative}.personal-completed-window{flex-shrink:0;position:relative}.personal-completed-row{padding-bottom:8px;position:absolute;inset-inline:0}.personal-completed-row>button{width:100%;height:100%}.personal-completed-row>button>strong{-webkit-line-clamp:3;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.personal-completed-footer{color:var(--pw-muted);text-align:center;flex-shrink:0;padding:12px 4px;font-size:12px}.personal-completed-footer button{border:1px solid var(--pw-line);min-height:32px;color:inherit;cursor:pointer;background:0 0;border-radius:6px}.personal-task-card>button{width:100%;color:inherit;text-align:left;cursor:pointer;background:0 0;border:0;align-items:start;display:grid}.personal-task-card-actions{opacity:0;gap:4px;transition:opacity .12s;display:flex;position:absolute;top:6px;right:6px}.personal-task-card:hover .personal-task-card-actions,.personal-task-card:focus-within .personal-task-card-actions,.personal-task-card.has-session .personal-task-card-actions{opacity:1}.personal-task-card.is-selected>button,.personal-task-kanban .personal-task-lane-scroll>button.is-selected{background:#f5f8ff;border-color:#7c9df1;box-shadow:0 0 0 2px #2f66e91f,0 4px 14px #1e34681a}.personal-task-card.is-selected:before{z-index:2;background:var(--pw-blue);content:"";border-radius:0 3px 3px 0;width:3px;position:absolute;top:8px;bottom:8px;left:0}.personal-task-card-actions button{border:1px solid var(--pw-line-strong);width:28px;height:28px;color:var(--pw-muted);cursor:pointer;background:#fff;border-radius:7px;place-items:center;padding:0;display:grid;box-shadow:0 1px 3px #1e1c141f}.personal-task-card-actions button:hover{color:var(--pw-text);border-color:var(--pw-text)}.personal-task-card-actions button:disabled{cursor:wait;opacity:.72}.personal-task-card-actions .personal-task-session-link{width:auto;color:var(--pw-blue-ink);opacity:1;gap:5px;padding:0 8px;display:flex}.personal-task-session-link span{white-space:nowrap;font-size:10.5px;font-weight:650}.personal-task-session-status{color:var(--pw-blue-ink);font-weight:650}.personal-task-kanban .personal-task-empty{border:1px dashed var(--pw-line-strong);text-align:center;border-radius:10px;margin:2px 0 4px;padding:16px 10px;font-size:12px}.personal-workspace-shell.has-drawer .personal-task-kanban{grid-template-columns:repeat(2,minmax(0,1fr))}.personal-workspace-shell.has-task-inspector .personal-channel-scroll[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:auto 36px minmax(0,1fr) 40px;align-items:center;min-height:56px;padding:7px 7px 7px 14px;transition:border-color .15s,box-shadow .15s;display:grid;box-shadow:0 2px 10px #1e1c1412}.personal-channel-composer:focus-within{border-color:var(--pw-blue);box-shadow:0 0 0 3px #2f66e921,0 2px 10px #1e1c1412}.personal-channel-composer>span{color:#535b68;align-items:center;gap:7px;padding-right:12px;font-size:12.5px;font-weight:650;display:flex}.personal-channel-composer textarea{resize:none;border:0;border-left:1px solid var(--pw-line);width:100%;max-height:120px;color:inherit;font:inherit;background:0 0;outline:0;padding:9px 12px;line-height:1.4}.personal-channel-composer>button,.personal-correction-composer button{background:var(--pw-blue);color:#fff;cursor:pointer;border:0;border-radius:12px;place-items:center;width:40px;height:40px;display:grid;box-shadow:0 2px 6px #2f66e952}.personal-channel-composer>button:hover{background:var(--pw-blue-ink)}.personal-channel-composer>button:disabled,.personal-correction-composer button:disabled{opacity:.4;cursor:default;box-shadow:none}.personal-channel-composer>.personal-composer-attach{width:34px;height:34px;color:var(--pw-muted);box-shadow:none;background:0 0;border-radius:9px}.personal-channel-composer>.personal-composer-attach:hover{background:var(--pw-blue-soft);color:var(--pw-blue-ink)}.personal-composer-images{gap:8px;margin:0 0 8px;display:flex;overflow-x:auto}.personal-composer-images figure{flex:0 0 74px;height:58px;margin:0;position:relative}.personal-composer-images img{object-fit:cover;border:1px solid var(--pw-line-strong);background:#fff;border-radius:10px;width:100%;height:100%}.personal-composer-images button{border:1px solid var(--pw-line-strong);width:20px;height:20px;color:var(--pw-text);cursor:pointer;background:#fff;border-radius:50%;place-items:center;padding:0;display:grid;position:absolute;top:-5px;right:-5px;box-shadow:0 1px 4px #1e1c142e}.personal-composer-error{color:var(--pw-red);margin:0 0 7px;font-size:11.5px}.personal-context-drawer{grid-template-rows:auto minmax(0,1fr);height:100vh;display:grid}.personal-drawer-header{border-bottom:1px solid var(--pw-line);justify-content:space-between;align-items:flex-start;min-height:84px;padding:20px 18px 16px;display:flex}.personal-drawer-header h2{letter-spacing:-.01em;margin:0;font-size:15.5px;font-weight:700}.personal-drawer-header p{color:var(--pw-faint);letter-spacing:.07em;text-transform:uppercase;margin:4px 0 0;font-size:11px;font-weight:650}.personal-drawer-close{flex:0 0 44px;width:44px;height:44px;margin-top:2px}.personal-drawer-body{padding:18px;overflow:auto}.personal-context-drawer[data-context-kind=todo]{background:#fbfbfc}.personal-context-drawer[data-context-kind=todo] .personal-drawer-header{background:#fff;min-height:68px;padding:11px 22px}.personal-context-drawer[data-context-kind=todo] .personal-drawer-header h2{font-size:14px}.personal-context-drawer[data-context-kind=todo] .personal-drawer-header p{text-overflow:ellipsis;white-space:nowrap;max-width:330px;overflow:hidden}.personal-drawer-header-actions{align-items:center;gap:6px;display:flex}.personal-drawer-header-actions .personal-icon-button{flex:none}.personal-context-drawer[data-context-kind=todo] .personal-drawer-body{padding:0}.personal-task-inspector-summary{border-bottom:1px solid var(--pw-line);background:#fff;padding:24px 24px 20px}.personal-task-inspector-summary h3{letter-spacing:-.015em;overflow-wrap:anywhere;margin:14px 0 0;font-size:18px;font-weight:680;line-height:1.55}.personal-task-inspector-status{flex-wrap:wrap;align-items:center;gap:7px;display:flex}.personal-task-inspector-status>span{color:#62697a;background:#f1f2f5;border-radius:6px;align-items:center;gap:6px;min-height:24px;padding:2px 8px;font-size:11px;font-weight:650;display:inline-flex}.personal-task-inspector-status>span:first-child{padding-left:7px}.personal-task-inspector-status i{background:var(--pw-blue);border-radius:50%;width:7px;height:7px}.personal-task-inspector-status .is-done{background:var(--pw-green-bg);color:var(--pw-green)}.personal-task-inspector-status .is-done i{background:var(--pw-green)}.personal-task-inspector-status .is-blocked{background:var(--pw-red-bg);color:var(--pw-red)}.personal-task-inspector-status .is-blocked i{background:var(--pw-red)}.personal-task-inspector-fields{background:#fff;padding:20px 24px 22px}.personal-task-inspector-fields h4{color:var(--pw-text);margin:0 0 9px;font-size:12px;font-weight:700}.personal-task-inspector-fields dl{border-top:1px solid var(--pw-line);margin:0}.personal-task-inspector-fields dl div{border-bottom:1px solid var(--pw-line);grid-template-columns:92px minmax(0,1fr);gap:14px;min-height:44px;padding:11px 0;font-size:12px;line-height:1.55;display:grid}.personal-task-inspector-fields dt{color:var(--pw-muted)}.personal-task-inspector-fields dd{color:var(--pw-text);overflow-wrap:anywhere;margin:0}.personal-task-inspector-actions{border-top:1px solid var(--pw-line-strong);-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px);background:#fffffff5;grid-template-columns:auto minmax(170px,1fr);gap:10px;padding:13px 18px;display:grid;position:sticky;bottom:0;box-shadow:0 -8px 26px #1e284012}.personal-task-inspector-actions>.personal-primary-action{min-height:40px;margin:0}.personal-task-management{position:relative}.personal-task-management>summary{border:1px solid var(--pw-line-strong);min-width:128px;min-height:40px;color:var(--pw-text);cursor:pointer;background:#fff;border-radius:9px;justify-content:center;align-items:center;gap:7px;padding:0 14px;font-size:12px;font-weight:650;list-style:none;display:flex}.personal-task-management>summary::-webkit-details-marker{display:none}.personal-task-management[open]>summary{color:var(--pw-blue-ink);border-color:#9db3e9}.personal-task-management>div{border:1px solid var(--pw-line-strong);background:#fff;border-radius:12px;gap:9px;width:390px;padding:14px;display:grid;position:absolute;bottom:calc(100% + 9px);left:0;box-shadow:0 16px 38px #1e284029}.personal-task-management>div>strong{color:var(--pw-muted);font-size:10.5px;font-weight:650}.personal-task-management-secondary{border-top:1px solid var(--pw-line);grid-template-columns:1fr 1fr;gap:7px;padding-top:4px;display:grid}.personal-task-management-secondary button{border:1px solid var(--pw-line-strong);min-height:34px;color:var(--pw-text);cursor:pointer;background:#fff;border-radius:8px;font-size:11.5px}.personal-task-management-secondary button:hover{background:#f6f7fa}.personal-task-completed-note{background:var(--pw-green-bg);color:var(--pw-green);border:1px solid #cde4d8;border-radius:10px;align-items:center;gap:10px;margin:12px 24px 24px;padding:12px 14px;display:flex}.personal-task-completed-note>span{gap:2px;display:grid}.personal-task-completed-note strong{font-size:12px}.personal-task-completed-note small{color:#5d786c;font-size:10.5px}.personal-detail-card,.personal-correction-panel{border:1px solid var(--pw-line);background:#fff;border-radius:14px;padding:15px}.personal-proposal-card{background:#f5f8ff;border:1px solid #c3d3f9;border-radius:14px;padding:16px}.personal-proposal-card>small{color:#5270bd;letter-spacing:.05em;font-size:11px;font-weight:650}.personal-proposal-card h3{margin:8px 0;font-size:15.5px}.personal-proposal-card p{color:#5f6570;font-size:12px;line-height:1.55}.personal-proposal-card dl{gap:8px;margin:14px 0 0;display:grid}.personal-proposal-card dl div{grid-template-columns:82px minmax(0,1fr);gap:10px;font-size:11.5px;display:grid}.personal-proposal-card dt{color:var(--pw-faint)}.personal-proposal-card dd{overflow-wrap:anywhere;margin:0}.personal-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-live-indicator{display:none}.personal-workspace-shell.has-drawer .personal-channel-title p{max-width:260px}.personal-home-lanes{grid-template-columns:repeat(2,minmax(190px,1fr))}}@media (width<=1100px){.personal-machine-layout{grid-template-columns:1fr;gap:14px}.personal-machine-namespaces nav{overscroll-behavior-x:contain;scroll-snap-type:x proximity;display:flex;overflow-x:auto}.personal-machine-namespaces button{scroll-snap-align:start;flex:0 0 180px}.personal-machine-summary{flex-wrap:wrap;align-items:flex-start}.personal-machine-editor-bar{flex-direction:column;align-items:stretch}.personal-machine-editor-mode{width:100%}.personal-machine-editor-mode button{flex:1 1 0}.personal-machine-editor fieldset{grid-template-columns:1fr}.personal-machine-editor fieldset label:last-child{grid-column:auto}.personal-machine-preview dl{grid-template-columns:1fr}}@media (width<=1050px){.personal-workspace-shell,.personal-workspace-shell.has-drawer{grid-template-columns:minmax(0,1fr)}.personal-workspace-sidebar{z-index:40;width:min(310px,86vw);display:none;position:fixed;inset:0 auto 0 0;box-shadow:18px 0 50px #1e1c1429}.personal-workspace-shell.mobile-sidebar-open .personal-workspace-sidebar{display:block}.personal-sidebar-backdrop{z-index:35;cursor:default;background:#14182047;border:0;display:block;position:fixed;inset:0}.personal-icon-button.personal-mobile-menu{flex:0 0 36px;display:inline-grid}.personal-workspace-drawer{z-index:30;width:min(410px,90vw);position:fixed;inset:0 0 0 auto}.personal-workspace-drawer[data-drawer-mode=inspector],.personal-workspace-drawer[data-drawer-mode=inspector-full]{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}.personal-run-identity,.personal-run-progress{display:none}.personal-home-lanes{grid-template-columns:repeat(2,minmax(0,1fr))}}@media (width<=720px){.personal-workspace-shell,.personal-workspace-shell.has-drawer{grid-template-columns:1fr}.personal-workspace-shell,.personal-workspace-main,.personal-channel{width:100%;max-width:100vw;overflow-x:hidden}.personal-workspace-sidebar{z-index:40;width:min(310px,86vw);display:none;position:fixed;inset:0 auto 0 0;box-shadow:18px 0 50px #1e1c1429}.personal-workspace-shell.mobile-sidebar-open .personal-workspace-sidebar{display:block}.personal-icon-button.personal-mobile-menu{flex:0 0 36px;display:inline-grid}.personal-channel-header{grid-template-columns:36px minmax(0,1fr) auto;gap:10px;min-height:60px;padding:10px 14px;display:grid}.personal-channel-title p{display:none}.personal-channel-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-actions .personal-live-indicator{display:none}.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-channel-composer{grid-template-columns:40px 36px minmax(0,1fr) 40px}.personal-task-chat-receipt{grid-template-columns:32px minmax(0,1fr);padding:11px}.personal-task-lane-filter{flex-direction:column;align-items:stretch;gap:8px}.personal-task-lane-filter label,.personal-task-lane-filter select{width:100%;max-width:none}.personal-capability-layout,.personal-capability-value-grid,.personal-capability-fields,.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{grid-column:1/-1;justify-content:flex-end}.personal-channel-composer>span{justify-content:center;min-width:0;padding:0;font-size:0}.personal-composer-wrap{max-width:100vw}.personal-workspace-drawer,.personal-workspace-drawer[data-drawer-mode=inspector],.personal-workspace-drawer[data-drawer-mode=inspector-full]{width:100vw}.personal-inspector-size{display:none!important}.personal-context-drawer{height:100dvh}.personal-drawer-body{padding-bottom:max(18px, env(safe-area-inset-bottom))}.personal-composer-wrap{padding-bottom:max(16px, env(safe-area-inset-bottom))}.personal-mobile-back{display:block}.personal-desktop-close{display:none}.personal-goal-tabs button{min-height:34px}.personal-correction-composer{padding-bottom:2px}.personal-correction-composer textarea{min-height:84px;padding-right:56px;padding-bottom:max(14px, env(safe-area-inset-bottom))}.personal-correction-composer button{width:40px;height:40px}.personal-todo-actions{grid-template-columns:1fr}.personal-task-management>div{width:calc(100vw - 28px)}.personal-home-lanes{grid-template-columns:1fr}.personal-home-lane{min-height:0}.personal-session-record,.personal-session-record dl{grid-template-columns:1fr}.personal-session-record>.personal-secondary-action{grid-area:auto/1}.personal-settings-page{grid-template-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:260px;padding:16px}.personal-workspace-shell[data-pw-theme=loopx] .personal-home-lane:first-child{border-left:0}.personal-workspace-shell[data-pw-theme=loopx] .personal-home-goal-card{box-shadow:none;border-radius:12px;transform:none}.personal-workspace-shell[data-pw-theme=loopx] .personal-home-goal-card:hover{box-shadow:none;border-color:#a1a1a1;transform:none}.personal-workspace-shell[data-pw-theme=loopx] .personal-channel-timeline{gap:8px}.personal-workspace-shell[data-pw-theme=loopx] .personal-timeline-row,.personal-workspace-shell[data-pw-theme=loopx] .personal-schedule-row{box-shadow:none;border-radius:12px}.personal-workspace-shell[data-pw-theme=loopx] .personal-timeline-row:hover,.personal-workspace-shell[data-pw-theme=loopx] .personal-schedule-row:hover{box-shadow:none;border-color:#a1a1a1}.personal-workspace-shell[data-pw-theme=loopx] .personal-row-icon{color:#4d4d4d;background:#f2f2f2;border:1px solid #ebebeb;border-radius:6px}.personal-workspace-shell[data-pw-theme=loopx] .personal-run-open-label{color:#4d4d4d}.personal-workspace-shell[data-pw-theme=loopx] .personal-run-progress b{background:#171717}.personal-workspace-shell[data-pw-theme=loopx] .personal-message.is-user{background:#f2f2f2;border-color:#dedede;border-radius:12px 12px 4px;padding:10px 12px}.personal-workspace-shell[data-pw-theme=loopx] .personal-message-avatar{color:#171717;background:#fff;border:1px solid #ebebeb;border-radius:6px}.personal-workspace-shell[data-pw-theme=loopx] .personal-message:not(.is-user)>div{box-shadow:none;border-radius:4px 12px 12px}.personal-workspace-shell[data-pw-theme=loopx] .personal-message p,.personal-workspace-shell[data-pw-theme=loopx] .personal-md{font-size:13px;line-height:1.65}.personal-workspace-shell[data-pw-theme=loopx] .personal-timeline-empty>span{color:#171717;background:#fff;border:1px solid #ebebeb;border-radius:12px}.personal-workspace-shell[data-pw-theme=loopx] .personal-proposal-row{box-shadow:none;background:#fff;border-color:#dedede;border-radius:12px}.personal-workspace-shell[data-pw-theme=loopx] .personal-proposal-row:hover{box-shadow:none;border-color:#a1a1a1}.personal-workspace-shell[data-pw-theme=loopx] .personal-proposal-row>span:first-child{color:#171717;background:#f2f2f2;border:1px solid #ebebeb;border-radius:6px}.personal-workspace-shell[data-pw-theme=loopx] .personal-proposal-row small,.personal-workspace-shell[data-pw-theme=loopx] .personal-proposal-row>b{color:#4d4d4d}.personal-workspace-shell[data-pw-theme=loopx] .personal-session-record{background:#fff;border-color:#dedede;border-radius:12px}.personal-workspace-shell[data-pw-theme=loopx] .personal-session-record>header span{color:#171717}.personal-workspace-shell[data-pw-theme=loopx] .personal-session-record dl div{background:#fafafa;border:1px solid #ebebeb;border-radius:6px}.personal-workspace-shell[data-pw-theme=loopx] .personal-task-chat-receipt{box-shadow:none;background:#fff;border-color:#dedede;border-radius:12px}.personal-workspace-shell[data-pw-theme=loopx] .personal-task-chat-icon{color:#171717;background:#f2f2f2;border:1px solid #ebebeb;border-radius:6px}.personal-workspace-shell[data-pw-theme=loopx] .personal-task-chat-receipt footer button{color:#171717;border-color:#dedede;border-radius:6px}.personal-workspace-shell[data-pw-theme=loopx] .personal-task-chat-receipt footer button:hover{background:#f2f2f2;border-color:#a1a1a1}.personal-workspace-shell[data-pw-theme=loopx] .personal-task-kanban{border-block:1px solid #ebebeb;gap:0}.personal-workspace-shell[data-pw-theme=loopx] .personal-task-kanban .personal-object-list{border:0;background:0 0;border-left:1px solid #ebebeb;border-radius:0;gap:8px;padding:12px}.personal-workspace-shell[data-pw-theme=loopx] .personal-task-kanban .personal-object-list:first-child{border-left:0}.personal-workspace-shell[data-pw-theme=loopx] .personal-task-kanban .personal-object-list>header{padding:4px 2px 8px}.personal-workspace-shell[data-pw-theme=loopx] .personal-task-kanban .personal-object-list>header>strong{font-size:12px;font-weight:600}.personal-workspace-shell[data-pw-theme=loopx] .personal-task-kanban .personal-object-list>button,.personal-workspace-shell[data-pw-theme=loopx] .personal-task-kanban .personal-task-card>button{box-shadow:none;border-radius:12px}.personal-workspace-shell[data-pw-theme=loopx] .personal-task-kanban .personal-task-lane-scroll>button>strong,.personal-workspace-shell[data-pw-theme=loopx] .personal-task-kanban .personal-task-card>button>strong{overflow-wrap:anywhere;font-size:14px;font-weight:500;line-height:20px}.personal-workspace-shell[data-pw-theme=loopx] .personal-task-kanban .personal-object-list>button>small,.personal-workspace-shell[data-pw-theme=loopx] .personal-task-kanban .personal-task-card>button>small{color:#6b6b6b;font-size:12px;line-height:16px}.personal-workspace-shell[data-pw-theme=loopx] .personal-task-kanban .personal-object-list>button:hover,.personal-workspace-shell[data-pw-theme=loopx] .personal-task-kanban .personal-task-card>button:hover{box-shadow:none;border-color:#a1a1a1}.personal-workspace-shell[data-pw-theme=loopx] .personal-task-card.is-selected>button,.personal-workspace-shell[data-pw-theme=loopx] .personal-task-kanban .personal-object-list>button.is-selected{background:#fff;border-color:#171717;box-shadow:0 0 0 1px #171717}.personal-workspace-shell[data-pw-theme=loopx] .personal-task-card.is-selected:before{background:#171717}.personal-workspace-shell[data-pw-theme=loopx] .personal-task-card-actions button{box-shadow:none;border-radius:6px}.personal-workspace-shell[data-pw-theme=loopx] .personal-task-card-actions .personal-task-session-link,.personal-workspace-shell[data-pw-theme=loopx] .personal-task-session-status{color:#4d4d4d}.personal-workspace-shell[data-pw-theme=loopx] .personal-task-kanban .personal-task-empty{border-radius:12px}.personal-workspace-shell[data-pw-theme=loopx] .personal-files-list{box-shadow:none;border-radius:12px}.personal-workspace-shell[data-pw-theme=loopx] .personal-files-list>header{letter-spacing:0;min-height:44px;padding:8px 14px;font-weight:500}.personal-workspace-shell[data-pw-theme=loopx] .personal-files-list>button{min-height:58px;padding:10px 14px}.personal-workspace-shell[data-pw-theme=loopx] .personal-files-list>button:hover{background:#f2f2f2}.personal-workspace-shell[data-pw-theme=loopx] .personal-file-icon{color:#4d4d4d;background:#fafafa;border:1px solid #ebebeb;border-radius:6px;place-items:center;width:28px;height:28px;display:grid}.personal-workspace-shell[data-pw-theme=loopx] .personal-files-list>button>strong{font-size:13px;font-weight:600}.personal-workspace-shell[data-pw-theme=loopx] .personal-files-list>button>p,.personal-workspace-shell[data-pw-theme=loopx] .personal-files-list>button>small{font-size:12px;line-height:16px}.personal-workspace-shell[data-pw-theme=loopx] .personal-primary-action,.personal-settings-page[data-pw-theme=loopx] .personal-primary-action{box-shadow:none;background:#171717;border-color:#171717;border-radius:6px}.personal-workspace-shell[data-pw-theme=loopx] .personal-primary-action:hover,.personal-settings-page[data-pw-theme=loopx] .personal-primary-action:hover{background:#333;border-color:#333}.personal-workspace-shell[data-pw-theme=loopx] .personal-md-code,.personal-workspace-shell[data-pw-theme=loopx] .personal-safe-preview,.personal-workspace-shell[data-pw-theme=loopx] .personal-diagnostics{background:#f2f2f2}.personal-workspace-shell[data-pw-theme=loopx] .personal-md-pre{color:#fafafa;background:#171717;border:1px solid #242424}.personal-workspace-shell[data-pw-theme=loopx] .personal-digest-card{background:#fff;border-radius:12px}.personal-workspace-shell[data-pw-theme=loopx] .personal-action-feedback{color:#171717;background:#f2f2f2}.personal-workspace-shell[data-pw-theme=loopx] .personal-quick-prompts button{color:#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-live-indicator i{border:1.5px solid #141414}.personal-workspace-shell[data-pw-theme=brutal] .personal-message.is-user{background:#8fdcff;border:2px solid #141414;border-radius:8px 8px 2px;box-shadow:3px 3px #141414}.personal-workspace-shell[data-pw-theme=brutal] .personal-message-avatar{color:#141414;background:#ffe23f;border:2px solid #141414;border-radius:4px}.personal-workspace-shell[data-pw-theme=brutal] .personal-md-pre{color:#fdf8e7;background:#141414;border:2px solid #141414;border-radius:4px}.personal-workspace-shell[data-pw-theme=brutal] .personal-md-code{color:#141414;background:#ffe23f;border:1.5px solid #141414;border-radius:3px}.personal-workspace-shell[data-pw-theme=brutal] .personal-md-link{color:#141414;text-decoration-thickness:2px}.personal-workspace-shell[data-pw-theme=brutal] .personal-object-list{background:#fff;border:2px solid #141414;border-radius:4px;box-shadow:3px 3px #141414}.personal-workspace-shell[data-pw-theme=brutal] .personal-object-list>button:hover{background:#fff8d6}.personal-workspace-shell[data-pw-theme=brutal] .personal-row-status{border:2px solid #141414}.personal-workspace-shell[data-pw-theme=brutal] .personal-task-kanban .personal-object-list{background:#fff}.personal-workspace-shell[data-pw-theme=brutal] .personal-task-kanban .personal-object-list>header{background:#fff;border-bottom:2px solid #141414}.personal-workspace-shell[data-pw-theme=brutal] .personal-task-kanban .personal-task-lane-scroll>button,.personal-workspace-shell[data-pw-theme=brutal] .personal-task-kanban .personal-task-card>button{border:2px solid #141414;border-radius:4px;box-shadow:2px 2px #141414}.personal-workspace-shell[data-pw-theme=brutal] .personal-task-kanban .personal-task-lane-scroll>button:hover,.personal-workspace-shell[data-pw-theme=brutal] .personal-task-kanban .personal-task-card:hover>button{background:#fff;border-color:#141414;transform:translate(-1px,-1px);box-shadow:4px 4px #141414}.personal-workspace-shell[data-pw-theme=brutal] .personal-task-kanban .personal-object-list>header>span{color:#fff;background:#141414;border-radius:3px;padding:1px 7px}.personal-workspace-shell[data-pw-theme=brutal] .personal-kanban-dot{border:2px solid #141414;border-radius:2px;width:10px;height:10px}.personal-workspace-shell[data-pw-theme=brutal] .personal-kanban-dot.tone-attention{background:#ff9d5c}.personal-workspace-shell[data-pw-theme=brutal] .personal-kanban-dot.tone-progress{background:#35c5f0}.personal-workspace-shell[data-pw-theme=brutal] .personal-kanban-dot.tone-schedule{background:#b49bf0}.personal-workspace-shell[data-pw-theme=brutal] .personal-kanban-dot.tone-done{background:#7ddb8a}.personal-workspace-shell[data-pw-theme=brutal] .personal-task-kanban .personal-task-empty{border:2px dashed #141414;border-radius:4px}.personal-workspace-shell[data-pw-theme=brutal] .personal-task-card-actions button{color:#141414;border:2px solid #141414;border-radius:4px;box-shadow:2px 2px #141414}.personal-workspace-shell[data-pw-theme=brutal] .personal-composer-wrap{background:linear-gradient(transparent, var(--pw-bg) 22%)}.personal-workspace-shell[data-pw-theme=brutal] .personal-system-health-banner{color:#141414;background:#fee2e2;border:2px solid #141414;border-radius:6px;box-shadow:3px 3px #141414}.personal-workspace-shell[data-pw-theme=brutal] .personal-system-health-header{color:#141414}.personal-workspace-shell[data-pw-theme=brutal] .personal-system-health-header small{color:#555}.personal-workspace-shell[data-pw-theme=brutal] .personal-system-health-issues{color:#141414}.personal-workspace-shell[data-pw-theme=brutal] .personal-manager-conversation-tray{background:#fff;border:2px solid #141414;border-radius:6px;box-shadow:4px 4px #141414}.personal-workspace-shell[data-pw-theme=brutal] .personal-manager-conversation-tray:hover,.personal-workspace-shell[data-pw-theme=brutal] .personal-manager-conversation-tray:focus-within{border-color:#141414;box-shadow:5px 5px #141414}.personal-workspace-shell[data-pw-theme=brutal] .personal-manager-conversation-btn{color:#141414;background:#ffe23f;border:2px solid #141414;border-radius:4px;box-shadow:2px 2px #141414}.personal-workspace-shell[data-pw-theme=brutal] .personal-manager-conversation-btn:hover{background:#ffd91a}.personal-workspace-shell[data-pw-theme=brutal] .personal-manager-conversation-link{color:#141414;text-decoration:underline}.personal-workspace-shell[data-pw-theme=brutal] .personal-manager-conversation-close{color:#141414;border:1.5px solid #141414;border-radius:4px}.personal-workspace-shell[data-pw-theme=brutal] .personal-manager-conversation-messages article{background:#fdf8e7;border:1.5px solid #141414;border-radius:4px}.personal-workspace-shell[data-pw-theme=brutal] .personal-manager-conversation-messages article.is-user{background:#8fdcff}.personal-workspace-shell[data-pw-theme=brutal] .personal-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-composer-hint{color:var(--pw-faint);margin:0 0 8px;font-size:11.5px}.personal-priority-badge{color:var(--pw-muted);background:#f2f1ed;border-radius:6px;padding:1px 7px;font-size:10.5px;font-weight:700}.personal-priority-badge.is-p0{background:var(--pw-red-bg);color:var(--pw-red)}.personal-priority-badge.is-p1{background:var(--pw-amber-bg);color:var(--pw-amber)}.personal-priority-badge.is-blocked{background:var(--pw-red-bg);color:var(--pw-red)}.personal-workspace-shell[data-pw-theme=brutal] .personal-digest-card{background:#fff;border:2px solid #141414;border-radius:4px;box-shadow:3px 3px #141414}.personal-workspace-shell[data-pw-theme=brutal] .personal-digest-stats span{color:#141414;border:2px solid #141414;border-radius:99px;box-shadow:2px 2px #141414}.personal-workspace-shell[data-pw-theme=brutal] .personal-priority-badge{border:1.5px solid #141414;border-radius:3px}.personal-goal-notification code{border:1px solid var(--pw-line);background:var(--pw-bg,#f7f6f2);word-break:break-all;border-radius:5px;padding:1px 5px;font-size:11px}.personal-workspace-shell[data-pw-theme=brutal] .personal-goal-notification code{background:#fff;border:1.5px solid #141414;border-radius:3px}.personal-proposal-state.is-error:has(small){align-items:start;gap:4px;display:grid}.personal-proposal-state.is-error small{word-break:break-all;line-height:1.5}.personal-gate-cli-hint{gap:6px;margin-top:10px;display:grid}.personal-gate-cli-hint code{border:1px solid var(--pw-line);background:var(--pw-bg,#f7f6f2);-webkit-user-select:all;user-select:all;word-break:break-all;border-radius:7px;padding:8px 10px;font-size:11.5px;line-height:1.5;display:block}.personal-gate-cli-hint small{color:var(--pw-muted);line-height:1.5}.personal-notification-list{gap:0;margin:12px 0 0;padding:0;list-style:none;display:grid}.personal-notification-row{border-top:1px solid var(--pw-line);gap:8px;padding:12px 0;display:grid}.personal-notification-row:first-child{border-top:0;padding-top:4px}.personal-notification-row-head{justify-content:space-between;align-items:center;gap:10px;display:flex}.personal-notification-row-head strong{font-size:13px}.personal-notification-badge{border-radius:99px;flex:none;padding:2px 8px;font-size:11px;font-weight:650}.personal-notification-badge.is-on{background:var(--pw-green-bg);color:var(--pw-green)}.personal-notification-badge.is-off{background:var(--pw-bg,#f5f4ef);color:var(--pw-muted)}.personal-notification-meta{color:var(--pw-muted);flex-wrap:wrap;gap:4px 12px;font-size:11.5px;display:flex}.personal-notification-toggle{color:var(--pw-text);cursor:pointer;align-items:center;gap:8px;font-size:12.5px;display:flex}.personal-notification-toggle input{accent-color:var(--pw-blue);cursor:pointer;width:15px;height:15px}.personal-notification-bind{gap:8px;display:flex}.personal-notification-bind select{border:1px solid var(--pw-line-strong);min-width:0;height:34px;color:var(--pw-text);background:#fff;border-radius:8px;flex:1;padding:0 10px;font-size:12.5px}.personal-notification-bind .personal-secondary-action{flex:none}.personal-notification-confirm{border:1px solid var(--pw-line);background:var(--pw-bg,#faf9f5);border-radius:9px;gap:8px;padding:10px 12px;display:grid}.personal-notification-confirm p{color:var(--pw-muted);margin:0;font-size:12px;line-height:1.6}.personal-notification-actions{gap:8px;display:flex}.personal-notification-error{color:var(--pw-red);margin:0;font-size:12px;line-height:1.5}.personal-notification-hint{color:var(--pw-muted);margin:0;font-size:12px;line-height:1.6}.personal-notification-hint code{border:1px solid var(--pw-line);background:var(--pw-bg,#f7f6f2);-webkit-user-select:all;user-select:all;border-radius:5px;margin-top:4px;padding:2px 7px;font-size:11px;display:inline-block}.is-spinning{animation:.9s linear infinite personal-notification-spin}@keyframes personal-notification-spin{to{transform:rotate(360deg)}}.personal-workspace-shell[data-pw-theme=brutal] .personal-notification-badge{border:1.5px solid #141414;border-radius:3px}.personal-workspace-shell[data-pw-theme=brutal] .personal-notification-bind select{border:2px solid #141414;border-radius:4px;box-shadow:2px 2px #141414}.personal-workspace-shell[data-pw-theme=brutal] .personal-notification-confirm{background:#fff;border:2px solid #141414;border-radius:4px;box-shadow:2px 2px #141414}.personal-workspace-shell[data-pw-theme=brutal] .personal-settings-card{border:2px solid #141414;border-radius:4px;box-shadow:4px 4px #141414}.personal-workspace-shell[data-pw-theme=brutal] .personal-settings-icon{color:#141414;background:#ffe23f;border:2px solid #141414;border-radius:4px}.personal-workspace-shell[data-pw-theme=brutal] .personal-language-options>button{border:2px solid #141414;border-radius:4px;box-shadow:2px 2px #141414}.personal-workspace-shell[data-pw-theme=brutal] .personal-language-options>button.is-selected{color:#141414;background:#8fdcff}@media (width<=720px){.personal-lark-settings{padding:20px 16px calc(24px + env(safe-area-inset-bottom))}.personal-lark-header h1{font-size:24px}.personal-lark-tabs{gap:18px;margin-top:20px}.personal-settings-card>header,.personal-language-options{padding-left:15px;padding-right:15px}}.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}}.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/index.html b/loopx/web/chat/index.html index e535b377b9..16ae23b1b1 100644 --- a/loopx/web/chat/index.html +++ b/loopx/web/chat/index.html @@ -18,8 +18,8 @@ content="LoopX 个人 Agent 工作区:在同一个频道里查看、纠偏并推进 Goal。" /> LoopX 个人 Agent 工作区 - - + +
From 9c8b9777514d46d3990ed2b4d1f27f3ac1b6447a Mon Sep 17 00:00:00 2001 From: huangruiteng <14976749+huangruiteng@users.noreply.github.com> Date: Sat, 19 Sep 2026 18:22:13 +0800 Subject: [PATCH 02/10] docs(collaboration): explain on-demand team inspection and its boundaries Signed-off-by: huangruiteng <14976749+huangruiteng@users.noreply.github.com> --- .../rfcs/loopx-overall-roadmap-v0.md | 9 +++++ .../rfcs/loopx-overall-roadmap-v0.zh-CN.md | 6 +++ .../goal-team-execution-desktop.png | Bin 0 -> 155104 bytes .../goal-team-execution-mobile.png | Bin 0 -> 64452 bytes docs/reference/goal-chat-continuation.md | 15 ++++++++ docs/reference/local-delegation.md | 35 ++++++++++++++++++ docs/reference/protocols/loopx-turn-v0.md | 6 +++ 7 files changed, 71 insertions(+) create mode 100644 docs/assets/personal-workspace/goal-team-execution-desktop.png create mode 100644 docs/assets/personal-workspace/goal-team-execution-mobile.png diff --git a/docs/architecture/rfcs/loopx-overall-roadmap-v0.md b/docs/architecture/rfcs/loopx-overall-roadmap-v0.md index 2fdd00c015..21219ad3a4 100644 --- a/docs/architecture/rfcs/loopx-overall-roadmap-v0.md +++ b/docs/architecture/rfcs/loopx-overall-roadmap-v0.md @@ -286,6 +286,15 @@ companion work remain R2/R3/R4/R6 boundaries. Existing Goals are not promoted. An existing shell-capable coordinator uses `delegation list/operations/start/read/wait/resume` without replacing its session. Requester-scoped `operations` recovers durable work after context loss, independently rechecks accepted results and preserves unavailable branches and pagination; enabled MCP and newly tool-equipped Goal Chat use the same read model. Existing native threads retain their tool schema on resume. It starts no work and does not infer overall readiness from a display list. The example's `prepare` still only provisions isolated operator bindings. Next, feed actual execution/acceptance facts into existing R2 readiness, then extend existing registration/runtime configuration for approved identity/profile provisioning and qualify original-request return/lead continuation. Unattended wake, full cross-host inbox/queue/steer and Lark parity remain separate requirements; no G1/G3 promotion follows from this recovery entrypoint. +The local Goal conversation now exposes that inventory on demand, with per-binding +preflight through the actual Turn dry-run and selected executor/profile. Task +admission, current pinned acceptance and runtime availability remain distinct; +unprobed generic/cloud availability stays unknown. The same inspection is available +to CLI and enabled MCP/new Chat tools, without a new state store or launch effect. +This qualifies a local execution-facts readback, not the full R2 ladder: assignment +receipt integration, provisioning, remote probes, two-cycle continuation and Lark +qualification remain open under their existing owners. + ### R3: Semantic Requests and Automatic Return - **Owner:** manager RFC M2/M3; migrate existing `manager_context` request/tracking/return into one typed collaboration transaction, incorporating the #4094 adapter. 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 ff111653c7..810c686049 100644 --- a/docs/architecture/rfcs/loopx-overall-roadmap-v0.zh-CN.md +++ b/docs/architecture/rfcs/loopx-overall-roadmap-v0.zh-CN.md @@ -266,6 +266,12 @@ Todo 完成入口分别执行当前 pinned 检查,accepted 返回读 canonical 有 shell 能力的原 coordinator 可通过 `delegation list/operations/start/read/wait/resume` 调用已有执行 owner,无需替换会话。`operations` 从自身持久记录找回上下文丢失前的工作,重新核验 accepted,保留不可用分支与分页;已启用的 MCP 和新挂载工具的 Goal Chat 共用该读模型;已有原生线程恢复时保留原工具 schema。读取不启动工作,也不把展示列表当整体 readiness。合成示例 `prepare` 仍只准备隔离绑定。下一步先将实际执行/验收事实接入已有 R2 readiness,再沿现有注册及 runtime 配置扩展经授权的身份/profile 创建,并验证原请求返回与主力继续推进。无人值守唤醒、完整跨宿主 inbox/queue/steer 和 Lark 等价仍分别验收,不因新增恢复入口晋升 G1/G3。 +本地 Goal 对话现可按需读取该持久目录,并按绑定调用实际 Turn dry-run 与所选 +executor/profile 检查启动条件。任务准入、当前 pinned 验收绑定、运行时可用性分开 +表达;未探测的通用/云端运行时保留未知。CLI、已启用 MCP 和新 Chat 工具共用此 +检查,不新增状态账本,也不启动执行。这只验收本地执行事实的读回;计划分配回执 +整合、通用创建、远端探针、两轮持续协作及 Lark 等价仍由原 owner 继续推进。 + ### R3:语义请求与自动回报 - **Owner:** 管家 RFC M2/M3;从已有 `manager_context` request/tracking/return 迁移到单一 typed collaboration 事务,纳入 #4094 adapter。 diff --git a/docs/assets/personal-workspace/goal-team-execution-desktop.png b/docs/assets/personal-workspace/goal-team-execution-desktop.png new file mode 100644 index 0000000000000000000000000000000000000000..677cfe37f200aa6fdc3ba45c99b41d36206063e1 GIT binary patch literal 155104 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 Q!z+8PDXJ@!$e9NJ9~gLMm;e9( literal 0 HcmV?d00001 diff --git a/docs/assets/personal-workspace/goal-team-execution-mobile.png b/docs/assets/personal-workspace/goal-team-execution-mobile.png new file mode 100644 index 0000000000000000000000000000000000000000..6a51152e302e9be906a84785885fde9c4fb49b86 GIT binary patch literal 64452 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 Date: Sat, 19 Sep 2026 18:22:14 +0800 Subject: [PATCH 03/10] test(collaboration): qualify read-only team checks through real entrypoints Signed-off-by: huangruiteng <14976749+huangruiteng@users.noreply.github.com> --- .../personal-workspace-browser/fixture.mjs | 16 ++ .../personal-workspace-browser/loopx-mode.mjs | 17 +- tests/control_plane_ts/delegation.test.ts | 22 +- tests/test_chat_loopx_mode.py | 14 ++ tests/test_delegation_preflight.py | 203 ++++++++++++++++++ tests/test_local_delegation.py | 6 + 6 files changed, 276 insertions(+), 2 deletions(-) create mode 100644 tests/test_delegation_preflight.py diff --git a/examples/personal-workspace-browser/fixture.mjs b/examples/personal-workspace-browser/fixture.mjs index c77ce94ff4..b81e7dc5d9 100644 --- a/examples/personal-workspace-browser/fixture.mjs +++ b/examples/personal-workspace-browser/fixture.mjs @@ -1457,6 +1457,21 @@ export async function installApi(page, { goalSubagentConfigurationEnabled = true } const body = request.postDataJSON(); state.loopxModeRequests.push({ sessionId, ...body }); + if (body.operation === "operations") { + const items = body.cursor ? [{record_id: "c".repeat(64), operation_id: "needs-recovery", + agent_id: "cloud-reviewer", todo_id: "todo_review", status: "running", worker_active: false, recovery_required: true}] + : [{record_id: "a".repeat(64), operation_id: "accepted-analysis", agent_id: "local-analyst", + todo_id: "todo_analysis", status: "accepted", worker_active: false, recovery_required: false, + artifacts: [{ref: "report.json", sha256: "d".repeat(64)}]}, + {record_id: "b".repeat(64), operation_id: "stale-output", status: "unavailable", recovery_required: null}]; + await route.fulfill({json: {items, has_more: !body.cursor, next_cursor: body.cursor ? null : "b".repeat(64), page_readback_complete: Boolean(body.cursor)}}); + return; + } + if (body.operation === "inspect") { + await route.fulfill({json: {state: "runtime_unverified", turn_eligible: true, acceptance_ready: true, + turn_route: "ready_for_host", executor: {host: "generic-cli", available: null, reason: null, profile: null}}}); + return; + } if (body.operation !== "configure") { await route.fulfill({ contentType: "application/json", json: { ok: false, error: "unsupported fixture operation" }, status: 400 }); return; @@ -1467,6 +1482,7 @@ export async function installApi(page, { goalSubagentConfigurationEnabled = true ...body.settings, execution_config: current.settings.execution_config, }, + members: [{id: "analysis", agent_id: "local-analyst", todo_id: "todo_analysis"}], }; loopxModes.set(sessionId, configured); await route.fulfill({ contentType: "application/json", json: configured, status: 200 }); diff --git a/examples/personal-workspace-browser/loopx-mode.mjs b/examples/personal-workspace-browser/loopx-mode.mjs index 0117384c95..de0f3f9f60 100644 --- a/examples/personal-workspace-browser/loopx-mode.mjs +++ b/examples/personal-workspace-browser/loopx-mode.mjs @@ -55,9 +55,24 @@ export const loopxModeScenario = { await page.getByText("普通对话", { exact: true }).waitFor({ state: "visible" }); await page.screenshot({ path: resolve(outputDir, "goal-loopx-mode-configured.png"), fullPage: false, animations: "disabled" }); + if (api.loopxModeRequests.some(row => row.operation === "operations")) throw new Error("Team inspection ran during ordinary polling"); + await page.getByRole("button", {name: "团队执行情况", exact: true}).click(); + const team = page.getByRole("region", {name: "团队执行详情"}); + await team.getByText("local-analyst · 已通过当前验收", {exact: true}).waitFor(); + await team.getByText("本页有无法核验的工作,请检查原请求;不要直接重新派工。", {exact: true}).waitFor(); + await team.getByRole("button", {name: "检查启动条件", exact: true}).click(); + await team.getByText(/运行时可用性尚未验证/).waitFor(); + await page.screenshot({path: resolve(outputDir, "goal-team-execution-desktop.png"), fullPage: false, animations: "disabled"}); + await team.getByRole("button", {name: "下一页", exact: true}).click(); + await team.getByText("cloud-reviewer · 需要恢复原执行", {exact: true}).waitFor(); + if (await team.getByText("cloud-reviewer · 执行中", {exact: true}).count()) throw new Error("Stopped worker was labeled executing"); + await page.setViewportSize({width: 390, height: 844}); + await page.screenshot({path: resolve(outputDir, "goal-team-execution-mobile.png"), fullPage: false, animations: "disabled"}); + if (api.turnRequests.length) throw new Error("Inspecting the team started a model turn"); + return { coverageEntries: await context.close(), - note: "One enable click during a pending snapshot opens settings, reads Goal-owned bindings without resending them, and does not start work while configuring.", + note: "Pending-snapshot setup preserves Goal-owned bindings, while on-demand team inspection preserves scope, unknown runtime, pagination and recovery state without launching work.", }; } catch (error) { releaseSnapshot(); diff --git a/tests/control_plane_ts/delegation.test.ts b/tests/control_plane_ts/delegation.test.ts index a20ed89400..4fe7be671b 100644 --- a/tests/control_plane_ts/delegation.test.ts +++ b/tests/control_plane_ts/delegation.test.ts @@ -1,6 +1,6 @@ import test from "node:test"; import assert from "node:assert/strict"; -import {delegationInventoryItem, delegationInventoryQuery, selectDelegationBinding, transitionDelegationObservation} from "../../loopx/control_plane/collaboration/delegation.ts"; +import {delegationInventoryItem, delegationInventoryQuery, delegationPreflight, selectDelegationBinding, transitionDelegationObservation} from "../../loopx/control_plane/collaboration/delegation.ts"; const binding = {id: "review", agent_id: "reviewer", todo_id: "todo_review", workspace: "/fixture", requesters: ["coordinator", "analyst"], host_args: ["--host", "dsh"], timeout_seconds: 60, output_refs: ["output.json"]}; @@ -50,3 +50,23 @@ test("inventory paging is bounded and never interprets a missing result as accep assert.equal(unavailable.recovery_required, null); assert.equal(unavailable.artifacts, undefined); }); + +test("preflight separates task admission, acceptance binding and runtime availability", () => { + const effects = {host_invoked: false, state_written: false, quota_spent: false, scheduler_acknowledged: false}; + const preview = {dry_run: true, status: "preview", effects, + route: {kind: "ready_for_host", would_invoke_host: true, selected_todo_id: "todo_review"}, + managed_executor: {executor: "dsh", available: true, unavailable_reason: null, execution_profile: "explicit-profile"}}; + const params = {binding, preview, validation_files_current: true, acceptance: {todo_id: "todo_review", state: "ready"}}; + assert.equal(delegationPreflight(params).state, "launchable"); + for (const [available, expected] of [[null, "runtime_unverified"], [false, "runtime_unavailable"]] as const) { + assert.equal(delegationPreflight({...params, preview: {...preview, + managed_executor: {...preview.managed_executor, available}}}).state, expected); + } + assert.equal(delegationPreflight({...params, acceptance: null}).state, "acceptance_unavailable"); + assert.equal(delegationPreflight({...params, acceptance: {...params.acceptance, state: "stale"}}).state, "acceptance_unavailable"); + assert.equal(delegationPreflight({...params, preview: {...preview, route: {...preview.route, + selected_todo_id: "other"}}}).state, "turn_blocked"); + assert.equal(delegationPreflight({...params, preview: {...preview, route: {...preview.route, + would_invoke_host: false}}}).state, "turn_blocked"); + assert.throws(() => delegationPreflight({...params, preview: {...preview, effects: {...effects, host_invoked: true}}})); +}); diff --git a/tests/test_chat_loopx_mode.py b/tests/test_chat_loopx_mode.py index 68ad01491c..6cd23d3538 100644 --- a/tests/test_chat_loopx_mode.py +++ b/tests/test_chat_loopx_mode.py @@ -478,3 +478,17 @@ def test_pause_cannot_enable_mode_and_ordinary_turn_is_not_execution(mode): with pytest.raises(Exception): apply(mode, "resume") assert service.store.load_turn(sid, ordinary["turn_id"])["status"] == "queued" + + +def test_owner_team_readback_is_configured_scoped_and_does_not_start_a_turn(mode): + service, sid, _, settings, calls = mode + with pytest.raises(ValueError): + service.read_team(sid, {"operation": "operations"}) + apply(mode, "configure", settings=settings) + before = service.store.load_session(sid) + result = service.read_team(sid, {"operation": "operations"}) + assert result["items"] == [] and result["page_readback_complete"] + assert service.store.load_session(sid) == before + assert calls == [] + with pytest.raises(ValueError, match="invalid team readback"): + service.read_team(sid, {"operation": "operations", "agent_id": "other"}) diff --git a/tests/test_delegation_preflight.py b/tests/test_delegation_preflight.py new file mode 100644 index 0000000000..40df7f4ef7 --- /dev/null +++ b/tests/test_delegation_preflight.py @@ -0,0 +1,203 @@ +"""A binding inspection must use the actual Turn without launching or spending.""" + +import json + +import pytest + +from test_delegation_cli import cli +from test_local_delegation import service as delegation_service + +service = delegation_service + + +def test_real_cli_preflight_preserves_unknown_runtime_and_state(service): + root, runner = service + before = runner.registry.read_bytes() + status, result = cli(runner, "inspect", "--binding-id", "analysis") + assert status == 0, result + assert result["state"] == "runtime_unverified" + assert result["turn_eligible"] and result["acceptance_ready"] + assert result["executor"]["host"] == "generic-cli" + assert result["executor"]["available"] is None + assert not any(result["effects"].values()) + assert runner.registry.read_bytes() == before + assert not (root / "host-started").exists() + assert not list(runner.path("inventory").parent.glob("*.json")) + assert not list((root / "runtime" / "goals").glob("*/turns/*.json")) + + +def test_preflight_rejects_execution_and_retargeting_before_subprocess( + service, monkeypatch +): + _, runner = service + config = json.loads(runner.config.read_text()) + original = list(config["bindings"][0]["host_args"]) + calls = [] + monkeypatch.setattr(runner, "_cli", lambda *args: calls.append(args)) + for flags in ( + ["--execute"], + ["--exec"], + ["--todo-id", "other"], + ["--agent-id", "other"], + ["--resume-turn-key", "other"], + ): + config["bindings"][0]["host_args"] = [*original, *flags] + runner.config.write_text(json.dumps(config)) + with pytest.raises(ValueError): + runner.inspect("analysis") + assert calls == [] + + +def test_preflight_scope_and_incompatible_cli_arguments(service): + _, runner = service + for arguments in [ + (), + ("--binding-id", "analysis", "--execute"), + ("--binding-id", "analysis", "--operation-id", "wrong"), + ("--binding-id", "analysis", "--limit", "2"), + ]: + status, result = cli(runner, "inspect", *arguments) + assert status == 1 and not result["ok"] + status, result = cli( + runner, "inspect", "--binding-id", "analysis", actor="reviewer" + ) + assert status == 1 and not result["ok"] + + +def test_preflight_surfaces_actual_turn_rejection_without_launch(service): + root, runner = service + config = json.loads(runner.config.read_text()) + config["bindings"][0]["host_args"] = [ + "--host", "generic-cli", "--host-command-json", "[]", + ] + runner.config.write_text(json.dumps(config)) + status, result = cli(runner, "inspect", "--binding-id", "analysis") + assert status == 1 + assert "delegation Turn preflight unavailable" in result["error"] + assert not (root / "host-started").exists() + + +def test_selected_dsh_profile_is_not_replaced_by_the_default(service): + root, runner = service + config = json.loads(runner.config.read_text()) + config["bindings"][0]["host_args"] = [ + "--host", + "dsh", + "--dsh-provider", + "openai", + "--dsh-model", + "synthetic-model", + "--dsh-reasoning-effort", + "high", + ] + runner.config.write_text(json.dumps(config)) + status, result = cli(runner, "inspect", "--binding-id", "analysis") + assert status == 0, result + assert result["executor"]["host"] == "dsh" + assert "synthetic-model" in result["executor"]["profile"] + assert "high" in result["executor"]["profile"] + assert result["state"] in {"launchable", "runtime_unavailable"} + assert not any(result["effects"].values()) + assert not (root / "host-started").exists() + + +def test_preflight_does_not_call_an_invalidated_acceptance_ready(service): + root, runner = service + from loopx.agent_registry import load_goal_from_registry + from pathlib import Path + + workspace = Path(load_goal_from_registry(runner.registry, runner.goal_id)["repo"]) + pin = workspace / "validation" / "acceptance.py" + pin.write_text(pin.read_text() + "\n# revised validator\n") + status, result = cli(runner, "inspect", "--binding-id", "analysis") + assert status == 0, result + assert not result["acceptance_ready"] + assert result["state"] in {"turn_blocked", "acceptance_unavailable"} + + +def test_http_team_readback_uses_original_scope_without_a_new_turn(service): + import http.client + import threading + from loopx.chat_runtime import ChatRuntimeController + from loopx.chat_server import ChatHTTPServer, ChatRequestHandler + from loopx.chat_store import ChatSessionStore + + root, runner = service + from loopx.agent_registry import load_goal_from_registry + from pathlib import Path + + workspace = Path(load_goal_from_registry(runner.registry, runner.goal_id)["repo"]) + config = workspace / ".loopx" / "config" / "delegations.json" + config.parent.mkdir(parents=True, exist_ok=True) + config.write_bytes(runner.config.read_bytes()) + store = ChatSessionStore(root / "runtime") + controller = ChatRuntimeController( + store=store, codex_bin="codex", registry_path=runner.registry + ) + session = store.create_session( + goal_id=runner.goal_id, + agent_id="codex", + channel_id="goal." + runner.goal_id, + upstream_thread_id="fixture", + upstream_mode="chat", + adapter_kind="codex_app_server", + ) + # Existing settings owner, with no native Goal or new executor. + controller.loopx_mode.apply( + session["session_id"], + { + "operation": "configure", + "settings": { + "agent_id": "lead", + "token_budget": 1000, + "execution_config": ".loopx/config/delegations.json", + }, + }, + work_dir=root, + objective="Inspect existing work", + ) + server = ChatHTTPServer(("127.0.0.1", 0), ChatRequestHandler) + server.verbose = False + server.registry_path, server.chat_store, server.runtime_controller = ( + runner.registry, + store, + controller, + ) + server.runtime_root_override, server.scan_roots, server.limit = ( + str(runner.root), + [], + 20, + ) + thread = threading.Thread(target=server.serve_forever, daemon=True) + thread.start() + try: + for body, expected in [ + ({"operation": "inspect", "binding_id": "analysis"}, 200), + ({"operation": "operations"}, 200), + ({"operation": "operations", "agent_id": "other"}, 409), + ]: + conn = http.client.HTTPConnection( + "127.0.0.1", server.server_port, timeout=45 + ) + conn.request( + "POST", + f"/api/chat/sessions/{session['session_id']}/loopx", + json.dumps(body), + { + "Content-Type": "application/json", + "Origin": f"http://127.0.0.1:{server.server_port}", + }, + ) + response = conn.getresponse() + result = json.loads(response.read()) + conn.close() + assert response.status == expected, result + if body["operation"] == "inspect": + assert result["state"] == "runtime_unverified" + assert store.load_session(session["session_id"]).get("active_turn_id") is None + assert not (root / "host-started").exists() + finally: + server.shutdown() + thread.join(timeout=5) + server.server_close() + controller.close() diff --git a/tests/test_local_delegation.py b/tests/test_local_delegation.py index 8b81939b4d..90166ef191 100644 --- a/tests/test_local_delegation.py +++ b/tests/test_local_delegation.py @@ -137,6 +137,12 @@ async def disconnect_requester(): async with stdio_client(params) as (reader, writer): async with ClientSession(reader, writer) as session: await session.initialize() + inspection = await session.call_tool("inspect_execution_binding", {"binding_id": "analysis"}) + assert not inspection.isError + preflight = json.loads(inspection.content[0].text) + assert preflight["state"] == "runtime_unverified" + assert not any(preflight["effects"].values()) + assert not (root / "host-started").exists() inventory = await session.call_tool("list_delegations", {}) assert not inventory.isError and json.loads(inventory.content[0].text)["items"] == [] result = await session.call_tool("start_delegation", { From 3619bd8876cfac86598c94622ea3d927d2c16852 Mon Sep 17 00:00:00 2001 From: huangruiteng <14976749+huangruiteng@users.noreply.github.com> Date: Sat, 19 Sep 2026 18:23:49 +0800 Subject: [PATCH 04/10] refactor(turn): keep execution readback in one focused projection Signed-off-by: huangruiteng <14976749+huangruiteng@users.noreply.github.com> --- .../turn_driver/execution_readback.py | 84 ++++++++++++++ loopx/control_plane/turn_driver/executor.py | 103 +++--------------- .../control_plane/turn_driver/managed_step.py | 2 +- 3 files changed, 99 insertions(+), 90 deletions(-) create mode 100644 loopx/control_plane/turn_driver/execution_readback.py diff --git a/loopx/control_plane/turn_driver/execution_readback.py b/loopx/control_plane/turn_driver/execution_readback.py new file mode 100644 index 0000000000..9e19ab8742 --- /dev/null +++ b/loopx/control_plane/turn_driver/execution_readback.py @@ -0,0 +1,84 @@ +"""Public execution readback shared by preview, settlement and recovery paths.""" +from __future__ import annotations + +from collections.abc import Mapping +from typing import Any + +from . import subagent_execution_topology as subagent +from .host_binding import managed_executor_payload_entry, managed_executor_remediation_projection +from .host_failure import project_host_failure +from .lane_fence import turn_lane_in_flight_projection +from .transaction import LOOPX_TURN_EXECUTION_SCHEMA_VERSION + + +def _mapping(value: Any) -> dict[str, Any]: + return dict(value) if isinstance(value, Mapping) else {} + + +def execution_payload( + plan: Mapping[str, Any], + journal: Mapping[str, Any], + *, + execute: bool, + replayed: bool, + effects: Mapping[str, bool], +) -> dict[str, Any]: + transaction = ( + plan.get("transaction") if isinstance(plan.get("transaction"), dict) else {} + ) + turn_key = str(transaction.get("turn_key") or "") + planned_host = plan.get("host") if isinstance(plan.get("host"), dict) else {} + writeback = _mapping(journal.get("writeback")) + todo_completion = _mapping(writeback.get("completion")) + quota_spent = effects.get("quota_spent") is True or "quota_spend" in list( + journal.get("completed_phases") or [] + ) + recovery = journal.get("recovery_audit") + return { + "ok": journal.get("status") + in { + "preview", + "committed", + "stopped", + "scheduler_action_required", + }, + "schema_version": LOOPX_TURN_EXECUTION_SCHEMA_VERSION, + "mode": "run_once", + "dry_run": not execute, + "replayed": replayed, + "resume_turn_key": turn_key, + "journal_ref": f"turn:{turn_key.removeprefix('sha256:')[:16]}", + "status": journal.get("status"), + "execution_mode": planned_host.get("execution_mode"), + "host": journal.get("host"), + **managed_executor_payload_entry(plan), + # Preview admission is an observation; execution receipts stay unchanged. + **({"route": { + "kind": plan["route"]["kind"], + "selected_todo_id": (plan["route"].get("selected_todo") or {}).get("todo_id"), + "would_invoke_host": plan["route"]["would_invoke_host"], + }} if not execute else {}), + "result_kind": journal.get("result_kind"), + "validation": journal.get("task_validation"), + "receipt": journal.get("receipt"), + "scheduler": journal.get("scheduler"), + **subagent.subagent_execution_payload_projection(journal), + "effects": dict(effects), + "quota_slot_spend_count": 1 if quota_spent else 0, + **( + {"settlement_result": journal["settlement_result"]} + if isinstance(journal.get("settlement_result"), Mapping) + else {} + ), + **( + {"post_settlement": journal["post_settlement"]} + if isinstance(journal.get("post_settlement"), Mapping) + else {} + ), + **({"todo_completion": todo_completion} if todo_completion else {}), + **({"reason": journal.get("reason")} if journal.get("reason") else {}), + **turn_lane_in_flight_projection(journal), + **managed_executor_remediation_projection(journal), + **project_host_failure(journal), + **({"recovery": dict(recovery)} if isinstance(recovery, Mapping) else {}), + } diff --git a/loopx/control_plane/turn_driver/executor.py b/loopx/control_plane/turn_driver/executor.py index d1edbfc575..d8e72b049d 100644 --- a/loopx/control_plane/turn_driver/executor.py +++ b/loopx/control_plane/turn_driver/executor.py @@ -28,12 +28,11 @@ reward_memory_reflection_digest, ) from .driver import selected_turn_todo +from .execution_readback import execution_payload from .host_binding import ( - managed_executor_payload_entry, - managed_executor_remediation_projection, managed_executor_unavailable_payload, ) -from .host_failure import BuiltInHostError, project_host_failure, record_host_failure +from .host_failure import BuiltInHostError, record_host_failure from .journal_store import ( LOOPX_TURN_JOURNAL_SCHEMA_VERSION, TURN_KEY_RE, @@ -42,7 +41,7 @@ turn_journal_path, write_turn_journal_checkpoint as _write_journal, ) -from .lane_fence import single_executor_per_turn_lane, turn_lane_in_flight_projection +from .lane_fence import single_executor_per_turn_lane from .recovery import ( assess_existing_turn_recovery, build_turn_recovery_audit, @@ -66,7 +65,6 @@ verified_terminal_closeout_effect, ) from .transaction import ( - LOOPX_TURN_EXECUTION_SCHEMA_VERSION, LOOPX_TURN_RESULT_SCHEMA_VERSION, STOP_RESULT_KINDS as STOP_HOST_RESULT_KINDS, TRANSACTION_PHASES, @@ -744,79 +742,6 @@ def _compact_callback(payload: Mapping[str, Any]) -> dict[str, Any]: } -def _mapping(value: Any) -> dict[str, Any]: - return dict(value) if isinstance(value, Mapping) else {} - - -def _execution_payload( - plan: Mapping[str, Any], - journal: Mapping[str, Any], - *, - execute: bool, - replayed: bool, - effects: Mapping[str, bool], -) -> dict[str, Any]: - transaction = ( - plan.get("transaction") if isinstance(plan.get("transaction"), dict) else {} - ) - turn_key = str(transaction.get("turn_key") or "") - planned_host = plan.get("host") if isinstance(plan.get("host"), dict) else {} - writeback = _mapping(journal.get("writeback")) - todo_completion = _mapping(writeback.get("completion")) - quota_spent = effects.get("quota_spent") is True or "quota_spend" in list( - journal.get("completed_phases") or [] - ) - recovery = journal.get("recovery_audit") - return { - "ok": journal.get("status") - in { - "preview", - "committed", - "stopped", - "scheduler_action_required", - }, - "schema_version": LOOPX_TURN_EXECUTION_SCHEMA_VERSION, - "mode": "run_once", - "dry_run": not execute, - "replayed": replayed, - "resume_turn_key": turn_key, - "journal_ref": f"turn:{turn_key.removeprefix('sha256:')[:16]}", - "status": journal.get("status"), - "execution_mode": planned_host.get("execution_mode"), - "host": journal.get("host"), - **managed_executor_payload_entry(plan), - # Preview admission is an observation; execution receipts stay unchanged. - **({"route": { - "kind": plan["route"]["kind"], - "selected_todo_id": (plan["route"].get("selected_todo") or {}).get("todo_id"), - "would_invoke_host": plan["route"]["would_invoke_host"], - }} if not execute else {}), - "result_kind": journal.get("result_kind"), - "validation": journal.get("task_validation"), - "receipt": journal.get("receipt"), - "scheduler": journal.get("scheduler"), - **subagent.subagent_execution_payload_projection(journal), - "effects": dict(effects), - "quota_slot_spend_count": 1 if quota_spent else 0, - **( - {"settlement_result": journal["settlement_result"]} - if isinstance(journal.get("settlement_result"), Mapping) - else {} - ), - **( - {"post_settlement": journal["post_settlement"]} - if isinstance(journal.get("post_settlement"), Mapping) - else {} - ), - **({"todo_completion": todo_completion} if todo_completion else {}), - **({"reason": journal.get("reason")} if journal.get("reason") else {}), - **turn_lane_in_flight_projection(journal), - **managed_executor_remediation_projection(journal), - **project_host_failure(journal), - **({"recovery": dict(recovery)} if isinstance(recovery, Mapping) else {}), - } - - def _host_result_stage( plan: Mapping[str, Any], request: Mapping[str, Any], @@ -878,7 +803,7 @@ def _host_result_stage( return ( None, [], - _execution_payload( + execution_payload( plan, journal, execute=True, @@ -916,7 +841,7 @@ def _host_result_stage( return ( None, list(TRANSACTION_PHASES[:2]), - _execution_payload( + execution_payload( plan, journal, execute=True, @@ -963,7 +888,7 @@ def _task_validation_stage( scheduler={"disposition": "not_applicable"}, ) _write_journal(journal_path, journal) - return completed_phases, _execution_payload( + return completed_phases, execution_payload( plan, journal, execute=True, @@ -1008,7 +933,7 @@ def _task_validation_stage( validation_stage="task_postcondition", ) _write_journal(journal_path, journal) - return list(TRANSACTION_PHASES[:2]), _execution_payload( + return list(TRANSACTION_PHASES[:2]), execution_payload( plan, journal, execute=True, @@ -1213,7 +1138,7 @@ def writeback_effect(effect_ref: str) -> Mapping[str, Any]: receipt=failure["receipt"], ) _write_journal(journal_path, journal) - return _execution_payload( + return execution_payload( plan, journal, execute=True, @@ -1249,7 +1174,7 @@ def writeback_effect(effect_ref: str) -> Mapping[str, Any]: receipt=_receipt(plan, result, completed_phases=completed_phases), ) _write_journal(journal_path, journal) - return _execution_payload( + return execution_payload( plan, journal, execute=True, @@ -1265,7 +1190,7 @@ def writeback_effect(effect_ref: str) -> Mapping[str, Any]: receipt=_receipt(plan, result, completed_phases=completed_phases), ) _write_journal(journal_path, journal) - return _execution_payload( + return execution_payload( plan, journal, execute=True, @@ -1274,7 +1199,7 @@ def writeback_effect(effect_ref: str) -> Mapping[str, Any]: ) -@single_executor_per_turn_lane(_execution_payload) +@single_executor_per_turn_lane(execution_payload) def run_loopx_turn_once( plan: Mapping[str, Any], *, @@ -1327,7 +1252,7 @@ def run_loopx_turn_once( ) if fail_closed is not None: # Refuse before journal/host/quota when the planned executor cannot launch. - return _execution_payload( + return execution_payload( plan, fail_closed, execute=True, replayed=False, effects=empty_effects ) if not execute: @@ -1339,7 +1264,7 @@ def run_loopx_turn_once( "receipt": None, "scheduler": {"disposition": "not_evaluated"}, } - return _execution_payload( + return execution_payload( plan, preview, execute=False, @@ -1375,7 +1300,7 @@ def run_loopx_turn_once( recovery_decision = assessment.decision action = recovery_decision.get("action") if action == "return_existing": - payload = _execution_payload( + payload = execution_payload( plan, journal, execute=True, diff --git a/loopx/control_plane/turn_driver/managed_step.py b/loopx/control_plane/turn_driver/managed_step.py index 5f2770a0be..03750a6420 100644 --- a/loopx/control_plane/turn_driver/managed_step.py +++ b/loopx/control_plane/turn_driver/managed_step.py @@ -26,7 +26,6 @@ from collections.abc import Mapping from typing import Any, cast -from .executor import LOOPX_TURN_EXECUTION_SCHEMA_VERSION from .host_failure import normalize_host_failure_record, project_host_failure from .loop_controller import ( LOOP_CONTROLLER_DISPOSITION_SCHEMA_VERSION, @@ -35,6 +34,7 @@ ) from .turn_journal_runtime import interpret_turn_journal_projection from .transaction import ( + LOOPX_TURN_EXECUTION_SCHEMA_VERSION, LOOPX_TURN_RECEIPT_VALIDATION_SCHEMA_VERSION, LoopXTurnResultKind, ) From 4580c249045c116cf3a2e609374a327eeae95310 Mon Sep 17 00:00:00 2001 From: huangruiteng <14976749+huangruiteng@users.noreply.github.com> Date: Sat, 19 Sep 2026 19:30:03 +0800 Subject: [PATCH 05/10] feat(workspace): focus first screens on decisions and useful activity Signed-off-by: huangruiteng <14976749+huangruiteng@users.noreply.github.com> --- .../personal-workspace/cards/run-row.tsx | 10 +- .../personal-workspace/channel-header.tsx | 46 +++--- .../personal-workspace/channel-timeline.tsx | 24 ++- .../personal-workspace/goal-loopx-mode.css | 43 +++++- .../personal-workspace/goal-loopx-mode.tsx | 68 +++++---- .../personal-workspace/goal-overview.css | 17 ++- .../personal-workspace/goal-overview.tsx | 30 ++-- .../personal-workspace/goal-tasks-view.tsx | 7 +- .../personal-workspace/goal-team-work.tsx | 21 ++- .../src/features/personal-workspace/i18n.tsx | 4 +- .../personal-workspace-model.ts | 7 +- .../personal-workspace-page.tsx | 65 ++++----- .../personal-workspace/personal-workspace.css | 81 +++++------ .../workspace-settings-page.tsx | 32 ++-- .../dashboard/src/views/dashboard-page.tsx | 6 +- loopx/web/chat/asset-retention.json | 8 +- loopx/web/chat/assets/index-CR3OZ4-1.js | 137 ++++++++++++++++++ loopx/web/chat/assets/index-ChTajs73.css | 1 + loopx/web/chat/assets/index-DY3jV5HH.js | 137 ------------------ loopx/web/chat/index.html | 4 +- 20 files changed, 404 insertions(+), 344 deletions(-) create mode 100644 loopx/web/chat/assets/index-CR3OZ4-1.js create mode 100644 loopx/web/chat/assets/index-ChTajs73.css delete mode 100644 loopx/web/chat/assets/index-DY3jV5HH.js diff --git a/apps/presentation/dashboard/src/features/personal-workspace/cards/run-row.tsx b/apps/presentation/dashboard/src/features/personal-workspace/cards/run-row.tsx index 1a399b0cf5..6c1a4b591c 100644 --- a/apps/presentation/dashboard/src/features/personal-workspace/cards/run-row.tsx +++ b/apps/presentation/dashboard/src/features/personal-workspace/cards/run-row.tsx @@ -12,22 +12,16 @@ const runStatusKey: Record = { waiting: "runs.waiting", }; -export function RunRow({ onSelect, run }: { onSelect: () => void; run: WorkspaceRun }) { +export function RunRow({ onSelect, run, showGoal = true }: { onSelect: () => void; run: WorkspaceRun; showGoal?: boolean }) { const { t } = useWorkspaceI18n(); - const progress = run.totalSteps > 0 ? Math.min(100, (run.completedSteps / run.totalSteps) * 100) : 0; return ( ); diff --git a/apps/presentation/dashboard/src/features/personal-workspace/channel-header.tsx b/apps/presentation/dashboard/src/features/personal-workspace/channel-header.tsx index 5f877de98f..06d74dd06f 100644 --- a/apps/presentation/dashboard/src/features/personal-workspace/channel-header.tsx +++ b/apps/presentation/dashboard/src/features/personal-workspace/channel-header.tsx @@ -3,7 +3,6 @@ import { Bot, Eye, Menu, RefreshCw, SlidersHorizontal } from "lucide-react"; import { localizedGoalState, useWorkspaceI18n } from "./i18n"; import type { ManagerChannelBinding, ManagerRuntimeSessionReadback } from "../../data/chat"; import type { WorkspaceAgentOption, WorkspaceGoal, WorkspaceGoalTab } from "./personal-workspace-model"; -import { goalUsageLabel } from "./personal-workspace-model"; import { WorkspaceSelect } from "./workspace-select"; export function ChannelHeader({ @@ -44,15 +43,6 @@ export function ChannelHeader({ selectedGoalTab: WorkspaceGoalTab; }) { const { locale, t } = useWorkspaceI18n(); - const selectedGoalUsageLabel = selectedGoal - ? goalUsageLabel(selectedGoal.usage, { - cost: t("drawer.costShort"), - duration: t("drawer.durationShort"), - period24h: t("drawer.period24h"), - period7d: t("drawer.period7d"), - tokens: t("drawer.tokensShort"), - }) - : null; // The chip reports the selected executor, whose credential pays for it, and // the resolved model, so an executor and a model that disagree are visible // instead of arriving as one silent configuration. @@ -121,17 +111,7 @@ export function ChannelHeader({

{selectedGoal?.title ?? t("header.manager")}

- {!selectedGoal && managerRuntime ? ( -

{managerRuntime.status === "ready" - ? t("header.managerRuntime", { - profile: managerRuntime.runtime_profile, - sandbox: managerRuntime.sandbox, - }) - : t("header.managerRuntimeFallback", { - profile: managerRuntime.runtime_profile, - sandbox: managerRuntime.sandbox, - })}

- ) : null} + {selectedGoal && !selectedGoal.loadState && !["安静运行", "推进中"].includes(selectedGoal.state) ?

{localizedGoalState(selectedGoal.state, locale)}

: null} {!selectedGoal && managerChannelBinding ? (

@@ -148,16 +128,27 @@ export function ChannelHeader({ })} ) : null} - {managerExecutionDefaultReason ? ( +

+ ) : null} + {!selectedGoal && (managerRuntime || managerExecutionDefaultReason) ?
{locale === "zh-CN" ? "运行环境" : "Execution environment"} + {!selectedGoal && managerRuntime ? ( +

{managerRuntime.status === "ready" + ? t("header.managerRuntime", { + profile: managerRuntime.runtime_profile, + sandbox: managerRuntime.sandbox, + }) + : t("header.managerRuntimeFallback", { + profile: managerRuntime.runtime_profile, + sandbox: managerRuntime.sandbox, + })}

+ ) : null} + {managerExecutionDefaultReason && managerChannelBinding ? ( {t(managerExecutionDefaultReason, { executor: managerChannelBinding.executor_endpoint })} ) : null} -

- ) : null} - {selectedGoal ?

{selectedGoal.loadState ? t(selectedGoal.loadState === "error" ? "startup.goalError" : "startup.goalLoading") : `${selectedGoal.agentLaneCount && selectedGoal.agentLaneCount > 1 - ? t("header.workAgentCount", { count: selectedGoal.agentLaneCount }) - : selectedGoal.agentLabel ?? selectedGoal.agentId} · ${(selectedGoal.loadState ? t(selectedGoal.loadState === "error" ? "startup.goalError" : "startup.goalLoading") : localizedGoalState(selectedGoal.state, locale))}${selectedGoalUsageLabel ? ` · ${selectedGoalUsageLabel}` : ""} · ${selectedGoal.nextSentence}`}

: null} +
: null} + {selectedGoal?.loadState ?

{t(selectedGoal.loadState === "error" ? "startup.goalError" : "startup.goalLoading")}

: null}
{selectedGoal ? (
@@ -180,7 +171,6 @@ export function ChannelHeader({ ) : null} {!selectedGoal ? runtimeControl : null} - {t("header.live")} {onRefresh ? ( {refreshState === "loading" ? {t("header.refreshing")} : refreshState === "done" ? {t("header.refreshDone")} : refreshState === "error" ? {t("header.refreshFailed")} : null} diff --git a/apps/presentation/dashboard/src/features/personal-workspace/channel-timeline.tsx b/apps/presentation/dashboard/src/features/personal-workspace/channel-timeline.tsx index c9bffe2a6e..111385b894 100644 --- a/apps/presentation/dashboard/src/features/personal-workspace/channel-timeline.tsx +++ b/apps/presentation/dashboard/src/features/personal-workspace/channel-timeline.tsx @@ -1,5 +1,5 @@ import { CollaborationCard } from "./collaboration-card"; -import { Bot, Sparkles } from "lucide-react"; +import { Activity, Bot, Sparkles } from "lucide-react"; import { AttentionRow } from "./cards/attention-row"; import { MarkdownText } from "./markdown"; @@ -19,7 +19,7 @@ export function ChannelTimeline({ onSelect: (selection: WorkspaceDrawerSelection) => void; selectedGoal: WorkspaceGoal | null; }) { - const { t } = useWorkspaceI18n(); + const { locale, t } = useWorkspaceI18n(); if (items.length === 0) { return (
@@ -44,7 +44,19 @@ export function ChannelTimeline({ const gatedItems = items.filter((item): item is Extract => item.kind === "proposal" && item.proposal.status === "gated"); - const primaryItems = items.filter((item) => item.kind !== "proposal"); + // Only routine execution is folded. Waiting, interruption, and failures stay + // visible; no prose-based inference that a waiting run is safe to ignore. + const routineRuns = items.filter((item): item is Extract => + item.kind === "run" && ["queued", "running", "completed"].includes(item.run.status)); + const routineIds = new Set(routineRuns.map(item => item.id)); + const primaryItems = items.filter(item => item.kind !== "proposal" && !routineIds.has(item.id)); + const workingCount = routineRuns.filter(item => item.run.status === "running" && Boolean(item.run.sessionId) && Boolean(item.run.canInterrupt)).length; + const queuedCount = routineRuns.filter(item => item.run.status === "queued").length; + const completedCount = routineRuns.filter(item => item.run.status === "completed").length; + const progressCount = routineRuns.length - workingCount - queuedCount - completedCount; + const activitySummary = locale === "zh-CN" + ? [workingCount && `${workingCount} 个执行中`, queuedCount && `${queuedCount} 个排队中`, completedCount && `${completedCount} 次执行已结束`, progressCount && `${progressCount} 项进展更新`].filter(Boolean).join(" · ") + : [workingCount && `${workingCount} running`, queuedCount && `${queuedCount} queued`, completedCount && `${completedCount} runs finished`, progressCount && `${progressCount} progress updates`].filter(Boolean).join(" · "); const activeProposalItems = items.filter((item): item is Extract => item.kind === "proposal" && item.proposal.status !== "gated"); @@ -53,7 +65,7 @@ export function ChannelTimeline({ return onSelect({ item: item.attention, kind: "attention" })} />; } if (item.kind === "run") { - return onSelect({ item: item.run, kind: "run" })} run={item.run} />; + return onSelect({ item: item.run, kind: "run" })} run={item.run} />; } if (item.kind === "output") { return onSelect({ item: item.output, kind: "output" })} output={item.output} />; @@ -89,6 +101,10 @@ export function ChannelTimeline({ <>

{liveAnnouncement}

+ {routineRuns.length ?
+ +
{routineRuns.map(renderItem)}
+
: null} {primaryItems.map(renderItem)} {gatedItems.length ? (
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 f79a2e2037..31769aa96d 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 @@ -1,2 +1,41 @@ -.goal-loopx-mode{color:var(--pw-text,#171717);font-size:13px;margin-bottom:10px}.goal-loopx-mode-bar{display:flex;align-items:center;justify-content:space-between;gap:16px}.goal-loopx-mode strong{font-weight:500}.goal-loopx-mode p{font-size:12px;color:var(--pw-muted,#666);margin:4px 0}.goal-loopx-mode-actions{display:flex;gap:8px;flex-shrink:0}.goal-loopx-mode button{display:inline-flex;align-items:center;justify-content:center;gap:6px;min-height:40px;border:1px solid var(--pw-line,#ebebeb);background:var(--pw-surface,#fff);color:inherit;border-radius:6px;padding:8px 12px;font:inherit;cursor:pointer}.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{outline:2px solid #0070f3;outline-offset:2px}.goal-loopx-mode-settings{display:grid;grid-template-columns:1fr 1fr;gap:12px;margin-top:12px;padding:16px;border:1px solid var(--pw-line,#ebebeb);border-radius:12px;background:var(--pw-surface,#fff)}.goal-loopx-mode-settings label{display:flex;flex-direction:column;gap:6px}.goal-loopx-mode-settings input,.goal-loopx-mode-settings select{min-width:0;width:100%;padding:8px;border:1px solid var(--pw-line,#ddd);border-radius:6px;background:var(--pw-surface,#fff);color:inherit;font:inherit}.goal-loopx-mode-settings label:nth-child(3),.goal-loopx-mode-settings p{grid-column:1/-1}.goal-loopx-mode-members{display:flex;flex-wrap:wrap;gap:8px;margin-top:8px}.goal-loopx-mode-members span{padding:4px 8px;border:1px solid var(--pw-line,#ebebeb);border-radius:6px;font-size:12px}.goal-loopx-message-mode{display:flex;align-items:center;gap:8px;margin:8px 0;font-size:12px}.goal-loopx-message-mode select{font:inherit;color:inherit;border:1px solid var(--pw-line,#ebebeb);border-radius:6px;background:var(--pw-surface,#fff);padding:6px}@media(max-width:640px){.goal-loopx-mode-bar{align-items:flex-start;flex-wrap:wrap;gap:8px}.goal-loopx-mode-actions{flex-wrap:wrap}.goal-loopx-mode-settings{grid-template-columns:1fr}.goal-loopx-mode button{min-height:44px}} -.goal-team-work{margin-top:8px}.goal-team-work section{margin-top:8px;padding:12px;border:1px solid var(--pw-line,#ebebeb);border-radius:12px}.goal-team-work ul{list-style:none;padding:0;margin:8px 0}.goal-team-work li{padding:8px 0;border-bottom:1px solid var(--pw-line,#ebebeb);overflow-wrap:anywhere}.goal-team-work li>span{display:block;font-size:12px;color:var(--pw-muted,#666)}.goal-team-bindings li>div,.goal-team-work-actions{display:flex;align-items:center;gap:8px;flex-wrap:wrap}.goal-team-bindings li>div>span{font-size:12px;color:var(--pw-muted,#666)}.goal-team-work code{display:block;font-size:12px;overflow-wrap:anywhere;white-space:normal}.goal-team-work summary{cursor:pointer;padding:4px 0} +.goal-loopx-mode { color: var(--pw-text, #171717); font-size: 13px; padding: 8px 26px; border-bottom: 1px solid var(--pw-line, #ebebeb); } +.goal-loopx-mode-bar, .goal-loopx-mode-actions { display: flex; align-items: center; gap: 8px; } +.goal-loopx-mode-bar { justify-content: space-between; gap: 16px; } +.goal-loopx-mode-status { display: inline-flex; align-items: center; gap: 8px; min-width: 0; font-weight: 500; } +.goal-loopx-mode-status > i { width: 7px; height: 7px; flex: 0 0 7px; border-radius: 50%; background: var(--pw-muted, #666); } +.goal-loopx-mode-status[data-active="true"] > i { background: var(--pw-green, #13804a); } +.goal-loopx-mode p { font-size: 12px; color: var(--pw-muted, #666); margin: 8px 0; line-height: 1.6; } +.goal-loopx-mode .personal-composer-error { color: var(--pw-red, #b42318); } +.goal-loopx-mode button { display: inline-flex; align-items: center; justify-content: center; gap: 6px; min-width: 44px; min-height: 44px; border: 1px solid var(--pw-line, #ebebeb); background: var(--pw-surface, #fff); color: inherit; border-radius: 6px; padding: 8px 12px; font: inherit; cursor: pointer; } +.goal-loopx-mode .goal-loopx-primary { font-weight: 500; border-color: var(--pw-line-strong, #ddd); } +.goal-loopx-mode .goal-loopx-team-trigger { border-color: transparent; background: transparent; } +.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: 2px solid #0070f3; outline-offset: 2px; } +.goal-loopx-alert-dot { width: 7px; height: 7px; border-radius: 50%; background: var(--pw-amber, #a66b00); } +.goal-loopx-mode .goal-loopx-review-notice { color: var(--pw-amber, #a66b00); border: 0; padding-inline: 0; background: transparent; text-align: left; } +.goal-loopx-dialog { margin: auto; padding: 0; width: min(680px, calc(100vw - 32px)); max-height: calc(100dvh - 48px); border: 1px solid var(--pw-line, #ebebeb); border-radius: 16px; background: var(--pw-bg, #fafafa); color: var(--pw-text, #171717); overflow: auto; overscroll-behavior: contain; } +.goal-loopx-dialog::backdrop { background: rgb(0 0 0 / 28%); } +.goal-loopx-dialog-content { padding: 24px; } +.goal-loopx-dialog header { display: flex; align-items: center; justify-content: space-between; gap: 16px; } +.goal-loopx-dialog h2 { margin: 0; font-size: 20px; font-weight: 600; letter-spacing: -.02em; } +.goal-loopx-dialog h3 { margin: 24px 0 8px; font-size: 13px; font-weight: 600; } +.goal-loopx-mode-settings { display: grid; grid-template-columns: 1fr 1fr; gap: 16px; margin-block: 24px; } +.goal-loopx-mode-settings label { display: flex; flex-direction: column; gap: 8px; } +.goal-loopx-mode-settings input, .goal-loopx-mode-settings select { min-width: 0; width: 100%; min-height: 44px; padding: 8px; border: 1px solid var(--pw-line, #ddd); border-radius: 6px; background: var(--pw-surface, #fff); color: inherit; font: inherit; } +.goal-loopx-mode-settings label:nth-child(3), .goal-loopx-mode-settings p { grid-column: 1 / -1; } +.goal-loopx-message-mode { display: flex; align-items: center; gap: 8px; margin: 0 0 8px; font-size: 12px; flex-wrap: wrap; } +.goal-loopx-message-mode select { font: inherit; color: inherit; min-height: 44px; border: 1px solid var(--pw-line, #ebebeb); border-radius: 6px; background: var(--pw-surface, #fff); padding: 6px; } +.goal-team-work ul { list-style: none; padding: 0; margin: 8px 0 24px; } +.goal-team-work li { padding: 12px 0; border-bottom: 1px solid var(--pw-line, #ebebeb); overflow-wrap: anywhere; } +.goal-team-bindings li > div, .goal-team-work-actions { display: flex; align-items: center; justify-content: space-between; gap: 8px; flex-wrap: wrap; } +.goal-team-work code { display: block; font-size: 12px; overflow-wrap: anywhere; white-space: normal; padding-bottom: 8px; } +.goal-team-work summary { cursor: pointer; padding: 12px 0; min-height: 44px; font-size: 12px; color: var(--pw-muted, #666); } +@media (max-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 { margin-left: auto; gap: 2px; } + .goal-loopx-mode-actions button { padding-inline: 8px; } + .goal-loopx-mode-settings { grid-template-columns: 1fr; } + .goal-loopx-dialog-content { padding: 16px; } +} diff --git a/apps/presentation/dashboard/src/features/personal-workspace/goal-loopx-mode.tsx b/apps/presentation/dashboard/src/features/personal-workspace/goal-loopx-mode.tsx index 2e35468d6c..088e20212d 100644 --- a/apps/presentation/dashboard/src/features/personal-workspace/goal-loopx-mode.tsx +++ b/apps/presentation/dashboard/src/features/personal-workspace/goal-loopx-mode.tsx @@ -1,5 +1,5 @@ -import {useEffect, useState} from "react"; -import {Pause, Play, Settings2} from "lucide-react"; +import {useEffect, useRef, useState} from "react"; +import {Pause, Play, Settings2, Users, X} from "lucide-react"; import {fetchLoopXMode, updateLoopXMode, type LoopXModeSnapshot, type LoopXModeSettings} from "../../data/chat"; import {useWorkspaceI18n} from "./i18n"; import {GoalTeamWork} from "./goal-team-work"; @@ -14,22 +14,30 @@ export function GoalLoopXMode({sessionId, onPrepare, onExecute, onChange}: { const {locale} = useWorkspaceI18n(); const zh = locale === "zh-CN"; const [snapshot, setSnapshot] = useState(null); - const [editing, setEditing] = useState(false); + const [panel, setPanel] = useState<"settings" | "team" | null>(null); + const editing = panel === "settings"; + const setEditing = (value: boolean) => setPanel(value ? "settings" : null); + const dialog = useRef(null); + useEffect(() => { + if (panel && !dialog.current?.open) dialog.current?.showModal(); + else if (!panel && dialog.current?.open) dialog.current.close(); + }, [panel]); const [busy, setBusy] = useState(false); const [error, setError] = useState(""); + const [readError, setReadError] = useState(""); const [settings, setSettings] = useState({agent_id: "", token_budget: 0}); useEffect(() => { let alive = true; let refreshing = false; - setSnapshot(null); onChange(null); setError(""); setEditing(false); + setSnapshot(null); onChange(null); setError(""); setReadError(""); setEditing(false); if (!sessionId || sessionId === "new-session-pending") return; async function refresh() { if (refreshing) return; refreshing = true; try { const result = await fetchLoopXMode(sessionId!); - if (alive) {setSnapshot(result); onChange(result);} - } catch (failure) {if (alive) setError(failure instanceof Error ? failure.message : String(failure));} + if (alive) {setSnapshot(result); onChange(result); setReadError("");} + } catch (failure) {if (alive) setReadError(failure instanceof Error ? failure.message : String(failure));} finally {refreshing = false;} } void refresh(); @@ -73,33 +81,41 @@ export function GoalLoopXMode({sessionId, onPrepare, onExecute, onChange}: { } catch (failure) {setError(failure instanceof Error ? failure.message : String(failure));} finally {setBusy(false);} } + const needsReadback = snapshot?.deliveries.some(row => ["rejected", "unavailable"].includes(row.status)); + const pendingMessages = snapshot?.ingress.filter(row => row.status !== "delivered") ?? []; return
-
{status}

{active - ? (zh ? "协调员持续工作;成员保持独立执行与验收。" : "The coordinator continues; members execute and qualify independently.") - : snapshot?.enabled && native === "complete" ? (zh ? "本次执行已结束;整个 Goal 仍按原标准验收。" : "This run ended; canonical Goal acceptance remains separate.") - : snapshot?.enabled ? (zh ? "暂停不会停止已派发成员;整个 Goal 仍按原标准验收。" : "Pausing retains delegated work; Goal acceptance remains separate.") - : (zh ? "开启后,当前协调员持续推进本 Goal。" : "Enable continued work on this Goal in this conversation.")}

-
-