diff --git a/tests/web/app-render.spec.ts b/tests/web/app-render.spec.ts
index 025eb652..5b270093 100644
--- a/tests/web/app-render.spec.ts
+++ b/tests/web/app-render.spec.ts
@@ -130,6 +130,161 @@ describe("OpenPI React transcript", () => {
expect(container.querySelector("br")).toBeTruthy();
});
+ it("shows unavailable image evidence instead of calling an image-only result empty", () => {
+ const snapshot = activeSnapshot();
+ snapshot.runtime.status = "idle";
+ snapshot.selectedSession!.entries = [
+ {
+ type: "message",
+ id: "image-result",
+ timestamp: "2026-09-01T10:00:00Z",
+ message: {
+ role: "toolResult",
+ toolName: "future_tool",
+ toolCallId: "image-call",
+ content: "",
+ isError: false,
+ images: [{ mimeType: "image/png", bytes: 1 }],
+ imageCount: 1,
+ },
+ },
+ ];
+
+ const { container } = renderWithI18n(
+ createElement(Transcript, {
+ snapshot,
+ liveMessages: [],
+ liveRunning: false,
+ livePhase: "idle",
+ liveRetry: null,
+ thinkingStarts: {},
+ thinkingDurations: {},
+ scrollToBottom: 0,
+ onResend: async () => true,
+ }),
+ );
+
+ expect(screen.queryByText(i18n.t("noOutput"))).toBeNull();
+ expect(screen.getByText(i18n.t("toolImageUnavailable"))).toBeTruthy();
+ expect(screen.getByText(/image\/png/u)).toBeTruthy();
+ expect(container.querySelector("[aria-label=completed]")).toBeTruthy();
+ });
+
+ it("labels clipped image content without claiming unseen image counts", () => {
+ const snapshot = activeSnapshot();
+ snapshot.runtime.status = "idle";
+ snapshot.selectedSession!.entries = [
+ {
+ type: "message",
+ id: "clipped-result",
+ timestamp: "2026-09-01T10:00:00Z",
+ message: {
+ role: "toolResult",
+ toolName: "future_tool",
+ toolCallId: "clipped-call",
+ content: "",
+ isError: false,
+ truncation: { truncated: true, partsOmitted: 1 },
+ },
+ },
+ ];
+
+ const { container } = renderWithI18n(
+ createElement(Transcript, {
+ snapshot,
+ liveMessages: [],
+ liveRunning: false,
+ livePhase: "idle",
+ liveRetry: null,
+ thinkingStarts: {},
+ thinkingDurations: {},
+ scrollToBottom: 0,
+ onResend: async () => true,
+ }),
+ );
+
+ expect(screen.queryByText(i18n.t("noOutput"))).toBeNull();
+ expect(
+ screen.getByText(i18n.t("toolContentPartsOmitted", { count: 1 })),
+ ).toBeTruthy();
+ expect(container.querySelector("[aria-label=completed]")).toBeTruthy();
+ });
+
+ it("keeps image evidence in an unpaired activity result", () => {
+ const snapshot = activeSnapshot();
+ snapshot.runtime.status = "idle";
+ snapshot.selectedSession!.entries = [
+ {
+ type: "message",
+ id: "activity-image-result",
+ timestamp: "2026-09-01T10:00:00Z",
+ message: {
+ role: "toolResult",
+ toolName: "workflow_run",
+ content: "",
+ isError: false,
+ images: [{ mimeType: "image/png", bytes: 1 }],
+ imageCount: 1,
+ },
+ },
+ ];
+
+ renderWithI18n(
+ createElement(Transcript, {
+ snapshot,
+ liveMessages: [],
+ liveRunning: false,
+ livePhase: "idle",
+ liveRetry: null,
+ thinkingStarts: {},
+ thinkingDurations: {},
+ scrollToBottom: 0,
+ onResend: async () => true,
+ }),
+ );
+
+ expect(screen.getByText(i18n.t("toolImageUnavailable"))).toBeTruthy();
+ expect(screen.queryByText(i18n.t("noOutput"))).toBeNull();
+ });
+
+ it("keeps image evidence when the tool result is an error", () => {
+ const snapshot = activeSnapshot();
+ snapshot.runtime.status = "idle";
+ snapshot.selectedSession!.entries = [
+ {
+ type: "message",
+ id: "failed-image-result",
+ timestamp: "2026-09-01T10:00:00Z",
+ message: {
+ role: "toolResult",
+ toolName: "future_tool",
+ content: "",
+ isError: true,
+ images: [{ mimeType: "image/png", bytes: 1 }],
+ imageCount: 1,
+ },
+ },
+ ];
+
+ const { container } = renderWithI18n(
+ createElement(Transcript, {
+ snapshot,
+ liveMessages: [],
+ liveRunning: false,
+ livePhase: "idle",
+ liveRetry: null,
+ thinkingStarts: {},
+ thinkingDurations: {},
+ scrollToBottom: 0,
+ onResend: async () => true,
+ }),
+ );
+
+ expect(screen.getByText(i18n.t("toolImageUnavailable"))).toBeTruthy();
+ expect(screen.queryByText(i18n.t("noOutput"))).toBeNull();
+ expect(container.querySelector("[aria-label=failed]")).toBeTruthy();
+ });
+
it("matches Session searches after preserving a trailing input space", () => {
const store = createWebStore();
store.getState().actions.setQuery("foo ");
diff --git a/tests/web/evidence-view.spec.ts b/tests/web/evidence-view.spec.ts
index f77e63ce..2d0270d5 100644
--- a/tests/web/evidence-view.spec.ts
+++ b/tests/web/evidence-view.spec.ts
@@ -86,6 +86,58 @@ it("renders file context, exact diffs, TAP failures, terminal cancellation and s
).toHaveLength(4);
});
+it("keeps image metadata visible in specialized read evidence", () => {
+ render(
+ createElement(ToolEvidence, {
+ call: {
+ type: "toolCall",
+ name: "read",
+ arguments: JSON.stringify({ path: "image.png" }),
+ },
+ result: {
+ content: "",
+ isError: false,
+ images: [{ mimeType: "image/png", bytes: 1 }],
+ imageCount: 1,
+ },
+ }),
+ );
+
+ expect(
+ screen.getByText("1 image included; preview unavailable in Web.", {
+ exact: true,
+ }),
+ ).toBeTruthy();
+ expect(screen.getByText(/image\/png/u)).toBeTruthy();
+});
+
+it("keeps text output alongside image metadata in specialized read evidence", () => {
+ render(
+ createElement(ToolEvidence, {
+ call: {
+ type: "toolCall",
+ name: "read",
+ arguments: JSON.stringify({ path: "image.png" }),
+ },
+ result: {
+ content: "caption",
+ isError: false,
+ images: [{ mimeType: "image/png", bytes: 1 }],
+ imageCount: 1,
+ },
+ }),
+ );
+
+ expect(
+ screen.getByRole("figure", { name: "File content" }).textContent,
+ ).toContain("caption");
+ expect(
+ screen.getByText("1 image included; preview unavailable in Web.", {
+ exact: true,
+ }),
+ ).toBeTruthy();
+});
+
it("opens local links using authenticated API and stops preview reads on close", async () => {
const resolve = vi
.spyOn(WebClient.prototype, "resolveArtifact")
diff --git a/tests/web/evidence.test.ts b/tests/web/evidence.test.ts
index c1e55f8e..c83fee99 100644
--- a/tests/web/evidence.test.ts
+++ b/tests/web/evidence.test.ts
@@ -181,11 +181,21 @@ test("tool updates replace snapshots, final results resist replay, caches are bo
result: { content: "ab" },
});
assert.equal(tools[0]?.result?.content, "ab");
+ const imageResult = projectMessage({
+ role: "toolResult",
+ content: [{ type: "image", data: "AA==", mimeType: "image/png" }],
+ isError: false,
+ });
tools = reduceLiveTools(tools, "tool_execution_end", {
toolCallId: "call",
- result: { content: "final", isError: false },
+ result: imageResult,
isError: false,
});
+ assert.equal(tools[0]?.result?.content, "");
+ assert.equal(tools[0]?.result?.imageCount, 1);
+ assert.deepEqual(tools[0]?.result?.images, [
+ { mimeType: "image/png", bytes: 1 },
+ ]);
const replayed = reduceLiveTools(tools, "tool_execution_update", {
call: bash,
toolCallId: "call",
diff --git a/tests/web/openpi-web.e2e.ts b/tests/web/openpi-web.e2e.ts
index c332091e..2c6b7f4f 100644
--- a/tests/web/openpi-web.e2e.ts
+++ b/tests/web/openpi-web.e2e.ts
@@ -123,6 +123,92 @@ test("production workbench is local, keyboard-operable, and accessible", async (
);
});
+test("keeps an image-only tool result visible across snapshot reload", async ({
+ page,
+}, testInfo) => {
+ await page.route("**/api/snapshot**", async (route) => {
+ const response = await route.fetch();
+ const snapshot = await response.json();
+ snapshot.currentSessionId = "image-result-session";
+ snapshot.selectedSession = {
+ id: "image-result-session",
+ path: "/image-result/session.jsonl",
+ cwd: "/image-result",
+ entries: [
+ {
+ id: "image-assistant",
+ type: "message",
+ timestamp: "2026-09-13T00:00:00Z",
+ message: {
+ role: "assistant",
+ content: "",
+ parts: [
+ {
+ type: "toolCall",
+ id: "image-call",
+ name: "read",
+ arguments: JSON.stringify({ path: "image.png" }),
+ },
+ ],
+ },
+ },
+ {
+ id: "image-tool-result",
+ type: "message",
+ timestamp: "2026-09-13T00:00:01Z",
+ message: {
+ role: "toolResult",
+ toolName: "read",
+ toolCallId: "image-call",
+ content: "",
+ isError: false,
+ images: [{ mimeType: "image/png", bytes: 1 }],
+ imageCount: 1,
+ },
+ },
+ ],
+ bytes: 300,
+ truncation: {
+ truncated: false,
+ maxBytes: 2_097_152,
+ entriesOmitted: 0,
+ messagesTruncated: 0,
+ messagePartsOmitted: 0,
+ },
+ };
+ snapshot.runtime = { status: "idle", capabilities: {} };
+ await route.fulfill({ response, json: snapshot });
+ });
+ await page.route("**/events?**", (route) =>
+ route.fulfill({
+ status: 200,
+ contentType: "text/event-stream",
+ body: ": image fixture idle\n\n",
+ }),
+ );
+
+ const openResultEvidence = async () => {
+ await expect(page.locator(".tool-evidence-card")).toHaveCount(1);
+ await page.locator(".tool-evidence-card > summary").click();
+ await expect(
+ page.getByText("结果包含 1 张图片,Web 暂不提供图片预览。", {
+ exact: true,
+ }),
+ ).toBeVisible();
+ await expect(page.getByText("无输出", { exact: true })).toHaveCount(0);
+ };
+
+ await openWorkbench(page);
+ await openResultEvidence();
+ await page.screenshot({
+ path: testInfo.outputPath("image-only-result.png"),
+ fullPage: true,
+ });
+ await page.reload();
+ await openWorkbench(page);
+ await openResultEvidence();
+});
+
test("discovers and completes Pi commands without submitting unsupported commands", async ({
page,
}) => {
diff --git a/tests/web/protocol.test.ts b/tests/web/protocol.test.ts
index 8a1e6bfc..61b479ba 100644
--- a/tests/web/protocol.test.ts
+++ b/tests/web/protocol.test.ts
@@ -3,6 +3,7 @@ import test from "node:test";
import {
projectEntries,
projectMessage,
+ WEB_MAX_IMAGE_METADATA,
WEB_MAX_MESSAGE_PARTS,
WEB_MAX_SELECTED_TRANSCRIPT_BYTES,
} from "../../web/protocol/types.ts";
@@ -59,6 +60,65 @@ test("message projection keeps tool result correlation and details", () => {
});
});
+test("message projection retains bounded image metadata and unsupported block counts", () => {
+ const projected = projectMessage({
+ role: "toolResult",
+ toolName: "read",
+ toolCallId: "read-image",
+ content: [
+ { type: "text", text: "caption" },
+ { type: "image", data: "AA==", mimeType: "image/png" },
+ { type: "image", data: "AQID", mimeType: "image/jpeg" },
+ { type: "future", secret: "must not cross the wire" },
+ ],
+ isError: false,
+ });
+
+ assert.equal(projected.content, "caption");
+ assert.deepEqual(projected.images, [
+ { mimeType: "image/png", bytes: 1 },
+ { mimeType: "image/jpeg", bytes: 3 },
+ ]);
+ assert.equal(projected.imageCount, 2);
+ assert.equal(projected.unsupportedContentBlocks, 1);
+ assert.equal(JSON.stringify(projected).includes("AQID"), false);
+ assert.equal(JSON.stringify(projected).includes("must not cross"), false);
+});
+
+test("message projection caps image metadata and keeps image bytes out of the wire", () => {
+ const projected = projectMessage({
+ role: "toolResult",
+ content: Array.from({ length: WEB_MAX_IMAGE_METADATA + 4 }, () => ({
+ type: "image",
+ data: "AA==",
+ mimeType: "image/png",
+ })),
+ });
+
+ assert.equal(projected.imageCount, WEB_MAX_IMAGE_METADATA + 4);
+ assert.equal(projected.images?.length, WEB_MAX_IMAGE_METADATA);
+ assert.equal(projected.truncation?.imagesOmitted, 4);
+ assert.equal(JSON.stringify(projected).includes('"data"'), false);
+});
+
+test("message projection does not inspect an image hidden beyond the part budget", () => {
+ const content: Array> = Array.from(
+ { length: WEB_MAX_MESSAGE_PARTS + 1 },
+ () => ({ type: "text", text: "safe" }),
+ );
+ content[WEB_MAX_MESSAGE_PARTS] = {
+ type: "image",
+ data: "AA==",
+ mimeType: "image/png",
+ };
+
+ const projected = projectMessage({ role: "toolResult", content });
+
+ assert.equal(projected.imageCount, undefined);
+ assert.equal(projected.images, undefined);
+ assert.equal(projected.truncation?.partsOmitted, 1);
+});
+
test("message projection drops oversized details", () => {
const projected = projectMessage({
role: "toolResult",
diff --git a/web/dist/app.js b/web/dist/app.js
index 89523e67..a0ce329a 100644
--- a/web/dist/app.js
+++ b/web/dist/app.js
@@ -52,7 +52,7 @@ Try polyfilling it using "@formatjs/intl-pluralrules"
`),a=new TextEncoder().encode(i),o=t?Math.max(0,a.length-Hu):0,s=t?a.length:Math.min(a.length,Hu);for(;oo&&(a[s]&192)==128;)s--;return{text:new TextDecoder().decode(a.subarray(o,s)),truncated:e.length>n.length||r.length>300||a.length>12288}}function Gu(e){if(e.evidenceArguments)return e.evidenceArguments;try{return Uu(JSON.parse(e.arguments))}catch{return{}}}function Ku(e){return[`read`,`write`,`edit`,`bash`,`bg_start`,`bg_status`].includes(e)}function qu(e,t){if(e===`bash`&&t?.terminalReceipt)return t.terminalReceipt;let n=Uu(t?.details);if(e.startsWith(`bg_`)){let e=n.status;if(e===`running`)return{state:`running`};if([`done`,`failed`,`killed`,`timed_out`].includes(String(e)))return{state:e===`killed`?`cancelled`:e===`timed_out`?`timed_out`:e===`failed`?`failed`:`returned`,exitCode:typeof n.exitCode==`number`?n.exitCode:void 0,signal:typeof n.signal==`string`?Wu(n.signal).text:void 0}}if(e===`bash`&&t?.isError===!0&&!t.truncation){let e=t.content.trimEnd().split(`
`).at(-1);if(e===`Command aborted`)return{state:`cancelled`};if(/^Command timed out after \d+(?:\.\d+)? seconds$/u.test(e??``))return{state:`timed_out`};let n=/^Command exited with code (-?\d+)$/u.exec(e??``);if(n)return{state:`failed`,exitCode:Number(n[1])}}}function Ju(e){let t=/^\s*Tests\s+((?:\d+ (?:passed|failed|skipped|todo)(?:\s*\|\s*)?)+)\s*\((\d+)\)\s*$/mu.exec(e);if(t){let n=Number(/(\d+) passed/u.exec(t[1])?.[1]??0),r=Number(/(\d+) failed/u.exec(t[1])?.[1]??0),i=Number(t[2]);if(Number.isSafeInteger(i)&&n+r<=i)return{format:`Vitest`,tests:i,passed:n,failed:r,cancelled:0,failures:Yu(e,/^\s*(?:FAIL\s|×\s)/u)}}let n=/^Ran (\d+) tests? across \d+ files?\./mu.exec(e),r=/^\s*(\d+) pass\s*$/mu.exec(e),i=/^\s*(\d+) fail\s*$/mu.exec(e);if(n&&r&&i){let t=Number(n[1]),a=Number(r[1]),o=Number(i[1]);if(Number.isSafeInteger(t)&&a+o<=t)return{format:`Bun`,tests:t,passed:a,failed:o,cancelled:0,failures:Yu(e,/^\s*\(fail\) /u)}}let a=t=>{let n=RegExp(`^[#ℹ] ${t} (\\d+)$`,`mu`).exec(e),r=n?Number(n[1]):void 0;return r!==void 0&&Number.isSafeInteger(r)?r:void 0},o=a(`tests`),s=a(`pass`),c=a(`fail`),l=a(`cancelled`)??0;if(o===void 0||s===void 0||c===void 0||s+c+l>o)return;let u=Yu(e,/^(?:\s*not ok \d+\b|✖ )/u);return{format:/^ℹ tests /mu.test(e)?`Node`:`TAP`,tests:o,passed:s,failed:c,cancelled:l,failures:u}}function Yu(e,t){return e.split(`
`).flatMap((e,n,r)=>t.test(e)?[r.slice(n,n+8).join(`
-`)]:[]).slice(0,20)}function Xu(e,t,n){let r=Gu(e),i=Uu(t?.details),a=qu(e.name,t),o=a?.state??(n===`running`?`running`:t?.isError===!0?`failed`:t?.isError===!1?`returned`:`unknown`),s=[`bash`,`bg_start`,`bg_status`].includes(e.name),c=Wu(t?.content??``,s),l=e.name===`read`?/\n\n(\[(?:\d+ more lines in file\. Use offset=\d+ to continue\.|Showing lines [^\n]+)\])$/u.exec(c.text):null,u=c.truncated||!!t?.truncation||Uu(i.truncation).truncated===!0||e.evidenceTruncated===!0,d=s?Ju(c.text):void 0,f=e.name===`read`?`file`:[`write`,`edit`].includes(e.name)?`change`:d?`test`:`terminal`,p=[`write`,`edit`].includes(e.name)&&t?.isError===!1&&typeof i.diff==`string`?Wu(i.diff):void 0,m=typeof r.offset==`number`&&Number.isSafeInteger(r.offset)&&r.offset>0?r.offset:1;return{kind:f,state:o,processState:a?.state??(e.name===`bash`&&t?.isError===!1?`returned`:e.name===`bash`&&n===`running`?`running`:`unknown`),output:l?c.text.slice(0,l.index):c.text,truncated:u||p?.truncated===!0,readRecovery:l?.[1],numberLines:e.name===`read`&&t?.isError===!1&&Uu(i.truncation).firstLineExceedsLimit!==!0&&!!c.text,path:typeof r.path==`string`?Wu(r.path).text:void 0,resolvedPath:typeof r.resolvedPath==`string`?Wu(r.resolvedPath).text:void 0,command:typeof r.command==`string`?Wu(r.command).text:void 0,offset:m,diff:p?.text,tests:d,change:t?.isError===!1&&[`created`,`overwritten`,`unchanged`].includes(String(i.change))?String(i.change):void 0,evidenceUnavailable:typeof i.evidenceUnavailable==`string`?Wu(i.evidenceUnavailable).text:void 0,exitCode:a&&`exitCode`in a?a.exitCode:void 0,signal:a&&`signal`in a?a.signal:void 0,recovery:typeof i.fullOutputPath==`string`?Wu(i.fullOutputPath).text:void 0,rawArguments:Wu(e.arguments).text,rawResult:Wu(JSON.stringify({content:t?.content,details:t?.details,isError:t?.isError})).text}}new TextEncoder;var Zu=`openpi.web.token`,Qu=class extends Error{status;code;constructor(e,t,n){super(e),this.status=t,this.code=n,this.name=`WebApiError`}};function $u(){let e=document.querySelector(`meta[name="openpi-web-token"]`)?.content,t=new URLSearchParams(location.hash.slice(1)).get(`token`),n=e&&/^[a-f0-9]{64}$/i.test(e)?e:t;if(t&&history.replaceState(null,``,`${location.pathname}${location.search}`),n){try{window.sessionStorage.setItem(Zu,n)}catch{}return n}try{return window.sessionStorage.getItem(Zu)}catch{return null}}var ed=class{token=$u();headers(e=!1){return{Authorization:`Bearer ${this.token??``}`,...e?{"Content-Type":`application/json`}:{}}}async request(e,t={}){let{timeoutMs:n=15e3,timeoutMessage:r=`Request timed out. Please try again.`,...i}=t,a=new AbortController,o=!1,s=()=>a.abort();t.signal?.aborted&&s(),t.signal?.addEventListener(`abort`,s,{once:!0});let c=window.setTimeout(()=>{o=!0,a.abort()},n);try{let n=await fetch(e,{...i,signal:a.signal,headers:{...this.headers(!!t.body),...t.headers}}),r=await n.json();if(a.signal.aborted)throw Error(`Request aborted`);if(!n.ok)throw new Qu(r.error||`Request failed (${n.status})`,n.status,r.code);return r}catch(e){throw o?Error(r):e}finally{window.clearTimeout(c),t.signal?.removeEventListener(`abort`,s)}}snapshot(e){let t=e?`?path=${encodeURIComponent(e)}`:``;return this.request(`/api/snapshot${t}`)}resolveArtifact(e,t,n,r){return this.request(`/api/artifacts/resolve`,{method:`POST`,body:JSON.stringify({sessionId:e,reference:t,parent:n,access:`read-file`}),signal:r})}artifactMetadata(e,t,n){return this.request(`/api/artifacts/content?${new URLSearchParams({sessionId:e,handle:t,metadata:`1`})}`,{signal:n})}artifactPreview(e,t,n){return this.request(`/api/artifacts/content?${new URLSearchParams({sessionId:e,handle:t})}`,{signal:n})}releaseArtifact(e,t){return this.request(`/api/artifacts/content?`+new URLSearchParams({sessionId:e,handle:t}),{method:`DELETE`})}async downloadArtifact(e,t){let n=new AbortController,r=()=>n.abort();t.addEventListener(`abort`,r,{once:!0}),t.aborted&&r();let i=window.setTimeout(r,15e3);try{let t=await fetch(`/api/artifacts/content?${new URLSearchParams({sessionId:e.sessionId,handle:e.handle,revision:e.revision,download:`1`})}`,{headers:this.headers(),signal:n.signal});if(!t.ok){let e=await t.json();throw new Qu(e.error||`Download failed`,t.status,e.code)}let r=t.body?.getReader();if(!r)throw Error(`Download body unavailable`);let i=[],a=0;try{for(;;){let{value:e,done:t}=await r.read();if(t)break;if(a+=e.byteLength,a>20971520)throw Error(`Download exceeds the 20 MiB limit`);i.push(new Uint8Array(e))}}finally{await r.cancel()}return new Blob(i,{type:`application/octet-stream`})}finally{window.clearTimeout(i),t.removeEventListener(`abort`,r)}}chooseWorkspace(){return this.request(`/api/workspaces/select`,{method:`POST`})}renameWorkspace(e,t){return this.request(`/api/workspaces`,{method:`PATCH`,body:JSON.stringify({path:e,name:t})})}removeWorkspace(e){return this.request(`/api/workspaces?path=${encodeURIComponent(e)}`,{method:`DELETE`})}createSession(e,t){return this.request(`/api/sessions`,{method:`POST`,body:JSON.stringify({workspacePath:e,commandId:t})})}selectSession(e){return this.request(`/api/sessions/select`,{method:`POST`,body:JSON.stringify({path:e})})}renameSession(e,t){return this.request(`/api/sessions`,{method:`PATCH`,body:JSON.stringify({path:e,name:t})})}archiveSession(e){return this.request(`/api/sessions/archive?path=${encodeURIComponent(e)}`,{method:`POST`})}unarchiveSession(e){return this.request(`/api/sessions/unarchive?path=${encodeURIComponent(e)}`,{method:`POST`})}thinking(e,t){return this.request(`/api/thinking?sessionId=${encodeURIComponent(e)}`,{signal:t})}setThinkingLevel(e,t){return this.request(`/api/thinking`,{method:`POST`,body:JSON.stringify({sessionId:e,level:t})})}trust(e,t){return this.request(`/api/trust?sessionId=${encodeURIComponent(e)}`,{signal:t})}providerAuth(e,t){return this.request(`/api/providers/auth-status?sessionId=${encodeURIComponent(e)}`,{signal:t})}commands(e,t){return this.request(`/api/commands?sessionId=${encodeURIComponent(e)}`,{signal:t})}terminalDetail(e,t,n){return this.request(`/api/capabilities/detail?kind=background-terminals&id=${encodeURIComponent(t)}&sessionId=${encodeURIComponent(e)}`,{signal:n})}selectModel(e,t,n){return this.request(`/api/model`,{method:`POST`,body:JSON.stringify({provider:e,modelId:t,sessionId:n})})}searchModels(e,t,n){let r=new URLSearchParams({query:e,limit:`50`});return t&&r.set(`sessionId`,t),this.request(`/api/models?${r}`,{signal:n})}cancelActiveTurn(e){return this.request(`/api/turns/cancel`,{method:`POST`,body:JSON.stringify(e)})}async prompt(e,t,n,r=!1){let i=await this.request(`/api/prompt`,{method:`POST`,body:JSON.stringify({sessionId:e,content:t,commandId:n,retry:r}),timeoutMs:3e4,timeoutMessage:`Request timed out; admission may still be pending. Retry the same message to recover its receipt.`});if(typeof i.id!=`string`||!i.id||i.accepted!==!0)throw Error(`Invalid prompt receipt; retry the same message to recover its admission.`);return i}};function td({target:e,onClose:t}){let{t:n}=sn(),r=(0,w.useMemo)(()=>new ed,[]),[i,a]=(0,w.useState)(0),[o,s]=(0,w.useState)(null),[c,l]=(0,w.useState)(null);(0,w.useEffect)(()=>{let t=new AbortController;return s(null),l(null),(async()=>{let i={errors:[]};if(e.terminalId)try{let a=await r.terminalDetail(e.sessionId,e.terminalId,t.signal);if(a.sessionId!==e.sessionId||a.detail.id!==e.terminalId)throw Error(n(`inspectionChanged`));i.terminal=a.detail}catch(e){i.errors.push(e instanceof Error?e.message:n(`inspectionUnavailable`))}else{let[a,o,s]=await Promise.allSettled([r.thinking(e.sessionId,t.signal),r.trust(e.sessionId,t.signal),r.providerAuth(e.sessionId,t.signal)]);a.status===`fulfilled`&&a.value.sessionId===e.sessionId?i.thinking=a.value:i.errors.push(n(`thinkingUnavailable`)),o.status===`fulfilled`&&(o.value.workspace===void 0||o.value.workspace===e.cwd)?i.trust=o.value:i.errors.push(n(`trustUnavailable`)),s.status===`fulfilled`?i.auth=s.value:i.errors.push(n(`authUnavailable`))}t.signal.aborted||(s(i),l(new Date().toLocaleTimeString()))})(),()=>t.abort()},[r,e,i,n]);let u=e.terminalId?n(`terminalDetails`):n(`runtimeStatus`),d=o?.terminal;return(0,V.jsx)(Bu,{isOpen:!0,onOpenChange:e=>!e&&t(),width:640,"aria-label":u,children:(0,V.jsxs)(`section`,{className:`inspection-panel`,children:[(0,V.jsxs)(`header`,{className:`inspection-heading`,children:[(0,V.jsxs)(`div`,{children:[(0,V.jsx)(`h2`,{children:u}),(0,V.jsx)(`p`,{className:`inspection-subtitle`,children:e.cwd})]}),(0,V.jsxs)(`div`,{className:`inspection-actions`,children:[(0,V.jsx)(`button`,{type:`button`,className:`icon-button`,"aria-label":n(`refreshStatus`),disabled:!o,onClick:()=>a(e=>e+1),children:(0,V.jsx)(Ee,{})}),(0,V.jsx)(`button`,{type:`button`,className:`icon-button`,"aria-label":n(`close`),onClick:t,children:(0,V.jsx)(Re,{})})]})]}),o?(0,V.jsxs)(V.Fragment,{children:[o.errors.map(e=>(0,V.jsx)(`p`,{className:`inspection-warning`,role:`alert`,children:e},e)),d?(0,V.jsxs)(V.Fragment,{children:[(0,V.jsxs)(`div`,{className:`inspection-section`,children:[(0,V.jsx)(`h3`,{children:d.title||d.id}),(0,V.jsxs)(`dl`,{children:[(0,V.jsx)(`dt`,{children:n(`executionState`)}),(0,V.jsx)(`dd`,{children:n(`execution_${d.status}`,{defaultValue:d.status})}),(0,V.jsx)(`dt`,{children:n(`terminalCommand`)}),(0,V.jsx)(`dd`,{children:(0,V.jsx)(`code`,{children:d.command})}),(0,V.jsx)(`dt`,{children:n(`terminalDirectory`)}),(0,V.jsx)(`dd`,{children:d.cwd}),(0,V.jsx)(`dt`,{children:n(`startedAt`)}),(0,V.jsx)(`dd`,{children:new Date(d.createdAt).toLocaleString()}),d.exitCode!==void 0&&(0,V.jsxs)(V.Fragment,{children:[(0,V.jsx)(`dt`,{children:n(`exitCode`)}),(0,V.jsx)(`dd`,{children:d.exitCode})]})]}),d.errorText&&(0,V.jsx)(`p`,{className:`inspection-warning`,children:d.errorText}),d.truncated&&(0,V.jsx)(`p`,{className:`inspection-note`,children:n(`detailTruncated`)})]}),[`stdout`,`stderr`].map(e=>(0,V.jsxs)(`section`,{className:`inspection-section`,children:[(0,V.jsx)(`h3`,{children:n(e===`stdout`?`standardOutput`:`standardError`)}),(0,V.jsx)(`pre`,{className:`terminal-evidence`,children:d[e].text||n(`noOutput`)}),d[e].truncated&&(0,V.jsx)(`p`,{className:`inspection-note`,children:n(`outputTruncated`,{count:d[e].omittedBytes})}),d[e].recoveryAvailable&&(0,V.jsx)(`p`,{className:`inspection-note`,children:n(`outputRecovery`)})]},e))]}):!e.terminalId&&(0,V.jsxs)(V.Fragment,{children:[(0,V.jsxs)(`section`,{className:`inspection-section`,children:[(0,V.jsx)(`h3`,{children:n(`modelAndThinking`)}),(0,V.jsxs)(`dl`,{children:[(0,V.jsx)(`dt`,{children:n(`selectedModel`)}),(0,V.jsx)(`dd`,{children:e.model||n(`noModels`)}),(0,V.jsx)(`dt`,{children:n(`thinkingLevel`)}),(0,V.jsx)(`dd`,{children:o.thinking?.supported===!1?n(`thinkingUnsupported`):o.thinking?.level??n(`unknownState`)}),!!o.thinking?.available.length&&(0,V.jsxs)(V.Fragment,{children:[(0,V.jsx)(`dt`,{children:n(`availableThinking`)}),(0,V.jsx)(`dd`,{children:o.thinking?.available.join(` · `)})]})]}),o.thinking?.supported===!1&&(0,V.jsx)(`p`,{className:`inspection-note`,children:n(`thinkingUnsupportedHint`)}),o.thinking&&o.thinking.supported!==!1&&!o.thinking.available.includes(o.thinking.level)&&(0,V.jsx)(`p`,{className:`inspection-warning`,role:`status`,children:n(`thinkingLevelMismatch`)})]}),(0,V.jsxs)(`section`,{className:`inspection-section`,children:[(0,V.jsx)(`h3`,{children:n(`projectTrust`)}),(0,V.jsx)(`p`,{children:n(`trust_${o.trust?.state??`unknown`}`)}),o.trust?.refreshRequired===!0&&(0,V.jsx)(`p`,{className:`inspection-warning`,children:n(`trustRefreshNeeded`)})]}),(0,V.jsxs)(`section`,{className:`inspection-section`,children:[(0,V.jsx)(`h3`,{children:n(`providerAvailability`)}),o.auth?.providers.map(e=>(0,V.jsxs)(`div`,{className:`provider-status`,children:[(0,V.jsx)(`span`,{children:e.name||e.id}),(0,V.jsx)(`span`,{children:e.configured?n(`credentialConfigured`):n(`credentialMissing`)})]},e.id)),o.auth&&!o.auth.providers.length&&(0,V.jsx)(`p`,{children:n(`noProviders`)}),o.auth?.truncation.truncated&&(0,V.jsx)(`p`,{className:`inspection-note`,children:n(`providersBounded`)}),(0,V.jsx)(`p`,{className:`inspection-note`,children:n(`authNotVerified`)})]}),(0,V.jsx)(`p`,{className:`inspection-note`,children:n(`configurationViaPi`)})]}),(0,V.jsx)(`p`,{className:`inspection-updated`,children:n(`statusCaptured`,{time:c})})]}):(0,V.jsx)(`p`,{role:`status`,children:n(`inspectionLoading`)})]})})}function nd({items:e,label:t}){return(0,V.jsx)(`span`,{className:`astryx-menu-trigger`,children:(0,V.jsx)(il,{button:{label:t,icon:(0,V.jsx)(ue,{}),isIconOnly:!0,size:`sm`,variant:`ghost`,className:`menu-action-button`},items:e,menuWidth:190,placement:`below`,alignment:`end`,hasChevron:!1})})}function rd(e){let{t}=sn(),[n,r]=(0,w.useState)(null),[i,a]=(0,w.useState)(null),[o,s]=(0,w.useState)(``),c=(0,w.useRef)(null),l=(0,w.useRef)(null),u=(0,w.useRef)(null),d=(0,w.useRef)(null),f=(0,w.useRef)(null),p=e.snapshot,[m,h]=(0,w.useState)(!1),[g,_]=(0,w.useState)(new Set),[v,y]=(0,w.useState)(new Set),b=(0,w.useRef)(new Set),[x,S]=(0,w.useState)(!1),C=async t=>{if(!b.current.has(t)){b.current.add(t),y(new Set(b.current)),S(!1);try{await e.actions.unarchiveSession(t)||S(!0)}finally{b.current.delete(t),y(new Set(b.current))}}};(0,w.useEffect)(()=>{if(e.searchOpen)return c.current?.focus(),()=>l.current?.focus()},[e.searchOpen]),(0,w.useEffect)(()=>{if(e.mobileOpen)return f.current?.focus(),()=>{let t=e.returnFocusRef?.current;t?.checkVisibility()&&t.focus()}},[e.mobileOpen,e.returnFocusRef]),(0,w.useEffect)(()=>{e.mobileOpen&&document.activeElement===document.body&&!document.querySelector(`dialog:modal`)&&f.current?.focus()}),(0,w.useEffect)(()=>{n&&(u.current?.focus(),u.current?.select())},[n]);let T=(0,w.useMemo)(()=>{let n=e.query.trim().toLowerCase(),r=e=>(p?.sessions??[]).filter(r=>!!r.archived===m&&(e===`__ungrouped__`?r.ungrouped:r.cwd===e&&!r.ungrouped)&&(!n||`${ll(r,t(`untitledSession`))} ${r.cwd}`.toLowerCase().includes(n))),i=[...p?.workspaces??[]];for(let e of p?.sessions??[])!e.ungrouped&&!i.some(t=>t.path===e.cwd)&&i.push({path:e.cwd,name:e.cwd,current:!1});return[...i.map(e=>({...e,sessions:r(e.path),ungrouped:!1})),{path:`__ungrouped__`,name:t(`ungrouped`),current:!1,sessions:r(`__ungrouped__`),ungrouped:!0}].filter(e=>e.sessions.length>0||!m&&!e.ungrouped&&!n)},[m,e.query,p,t]),E=e=>{s(e.name),r(e)},D=async()=>{let t=o.trim();!n||!t||(n.kind===`workspace`?await e.actions.renameWorkspace(n.path,t):await e.actions.renameSession(n.path,t),r(null))};return(0,V.jsxs)(`div`,{ref:d,id:`session-sidebar`,className:`session-sidebar`,role:e.mobileOpen?`dialog`:`complementary`,"aria-modal":e.mobileOpen||void 0,"aria-label":`Session navigation`,tabIndex:e.mobileOpen?-1:void 0,onKeyDown:t=>{if(!e.mobileOpen||t.defaultPrevented||t.target instanceof Element&&(t.target.closest(`dialog`)||t.key!==`Tab`&&t.target.closest(`[role="menu"]`))||(t.key===`Escape`&&!t.nativeEvent.isComposing&&(t.preventDefault(),e.actions.closeMobileSidebar()),t.key!==`Tab`))return;let n=Array.from(d.current?.querySelectorAll(`button, input, select, textarea, a[href], [tabindex]`)??[]).filter(e=>e.tabIndex>=0&&!e.matches(`:disabled`)&&e.checkVisibility({visibilityProperty:!0})),r=t.shiftKey?n.at(-1):n[0],i=t.shiftKey?n[0]:n.at(-1);(document.activeElement===d.current||document.activeElement===i)&&(t.preventDefault(),r?.focus())},children:[(0,V.jsxs)(`div`,{className:`sidebar-brand`,children:[(0,V.jsx)(hn,{compact:!0}),(0,V.jsx)(cl,{content:t(`collapseSidebar`),placement:`end`,children:(0,V.jsx)(`button`,{ref:f,className:`collapse-button`,type:`button`,"aria-label":t(`collapseSidebar`),onClick:()=>e.mobileOpen?e.actions.closeMobileSidebar():e.actions.toggleSidebar(!1),children:(0,V.jsx)(R,{})})})]}),(0,V.jsxs)(`button`,{className:`new-session-button`,type:`button`,onClick:()=>e.selectedWorkspace?void e.actions.createSession(e.selectedWorkspace):void e.actions.chooseWorkspace(),children:[(0,V.jsx)(je,{}),(0,V.jsx)(`span`,{children:t(`newSession`)})]}),(0,V.jsxs)(`div`,{className:`workspace-heading ${e.searchOpen?`is-searching`:``}`,children:[(0,V.jsx)(`span`,{className:`workspace-heading-label`,children:t(`workspaces`)}),(0,V.jsxs)(`div`,{className:`session-search`,children:[(0,V.jsx)(De,{}),(0,V.jsx)(`input`,{ref:c,type:`search`,value:e.query,placeholder:t(`searchPlaceholder`),"aria-label":t(`searchConversations`),onChange:t=>e.actions.setQuery(t.target.value)}),(0,V.jsx)(`button`,{type:`button`,"aria-label":t(`closeSearch`),onClick:()=>e.actions.setSearchOpen(!1),children:(0,V.jsx)(Re,{})})]}),(0,V.jsxs)(`div`,{className:`workspace-actions`,children:[(0,V.jsx)(cl,{content:t(`searchConversations`),children:(0,V.jsx)(`button`,{ref:l,className:`icon-button`,type:`button`,"aria-label":t(`searchConversations`),onClick:()=>e.actions.setSearchOpen(!0),children:(0,V.jsx)(De,{})})}),(0,V.jsx)(cl,{content:t(`addWorkspace`),children:(0,V.jsx)(`button`,{className:`icon-button`,type:`button`,"aria-label":t(`addWorkspace`),onClick:()=>void e.actions.chooseWorkspace(),children:(0,V.jsx)(we,{})})})]})]}),(0,V.jsxs)(`fieldset`,{className:`session-view-switch`,"aria-label":t(`conversationViews`),children:[(0,V.jsx)(`button`,{type:`button`,"aria-pressed":!m,onClick:()=>h(!1),children:t(`currentConversations`)}),(0,V.jsx)(`button`,{type:`button`,"aria-pressed":m,onClick:()=>h(!0),children:t(`archivedConversations`)})]}),m&&(0,V.jsx)(`p`,{className:`sidebar-scope-note`,children:t(`loadedArchives`)}),!!(p?.truncation.sessionsOmitted||p?.truncation.workspacesOmitted)&&(0,V.jsx)(`p`,{className:`sidebar-scope-note`,children:t(`loadedHistoryBounded`,{sessions:p?.truncation.sessionsOmitted,workspaces:p?.truncation.workspacesOmitted})}),x&&(0,V.jsx)(`p`,{className:`sidebar-scope-note`,role:`alert`,children:t(`restoreFailed`)}),(0,V.jsx)(`div`,{className:`workspace-tree`,children:T.length?T.map(n=>{let r=(m?g:e.collapsed).has(n.path);return(0,V.jsxs)(`section`,{className:`workspace-group ${r?`collapsed`:``}`,children:[(0,V.jsxs)(`div`,{className:`workspace-button`,children:[(0,V.jsxs)(`button`,{className:`workspace-label`,type:`button`,"aria-expanded":!r,title:n.path===`__ungrouped__`?void 0:n.path,onClick:()=>{m?_(e=>{let t=new Set(e);return t.has(n.path)?t.delete(n.path):t.add(n.path),t}):e.actions.toggleWorkspace(n.path)},children:[(0,V.jsx)(`span`,{className:`workspace-toggle`,"aria-hidden":`true`,children:(0,V.jsx)(`span`,{className:`workspace-chevron`,children:`⌄`})}),(0,V.jsx)(`strong`,{children:n.name})]}),!n.ungrouped&&(0,V.jsxs)(`span`,{className:`workspace-row-actions`,children:[(0,V.jsx)(nd,{label:`Workspace options`,items:[{id:`rename`,label:t(`renameWorkspace`),icon:(0,V.jsx)(je,{}),onClick:()=>E({kind:`workspace`,path:n.path,name:n.name})},{id:`remove`,label:t(`removeWorkspace`),icon:(0,V.jsx)(Pe,{}),variant:`destructive`,onClick:()=>a({path:n.path,name:n.name})}]}),(0,V.jsx)(cl,{content:t(`newSession`),children:(0,V.jsx)(`button`,{className:`workspace-action`,type:`button`,"aria-label":`${t(`newSession`)} ${n.name}`,onClick:t=>{t.stopPropagation(),e.actions.createSession(n.path)},children:(0,V.jsx)(we,{})})})]})]}),(0,V.jsx)(`div`,{className:`workspace-sessions`,children:n.sessions.length?n.sessions.map(n=>(0,V.jsxs)(`div`,{className:`session-row`,children:[(0,V.jsxs)(`button`,{className:`session ${n.path===e.selectedPath?`active`:``}`,type:`button`,"aria-current":n.path===e.selectedPath?`page`:void 0,title:ll(n,t(`untitledSession`)),onClick:()=>void e.actions.selectSession(n.path),children:[(0,V.jsx)(`span`,{className:`session-title`,children:ll(n,t(`untitledSession`))}),(0,V.jsx)(`span`,{className:`session-time`,children:fl(n.modified)})]}),(0,V.jsx)(nd,{label:t(`conversationOptions`),items:[{id:`rename`,label:t(`renameConversation`),icon:(0,V.jsx)(je,{}),onClick:()=>E({kind:`session`,path:n.path,name:ll(n,t(`untitledSession`))})},{id:m?`restore`:`archive`,label:v.has(n.path)?t(`restoringConversation`):t(m?`restoreConversation`:`archiveConversation`),icon:m?(0,V.jsx)(k,{}):(0,V.jsx)(A,{}),onClick:()=>m?void C(n.path):void e.actions.archiveSession(n.path)}]})]},n.path)):(0,V.jsx)(`div`,{className:`empty`,children:t(`noConversations`)})})]},n.path)}):(0,V.jsx)(`div`,{className:`empty`,children:e.query?t(`noMatching`):t(m?`noLoadedArchives`:`noSessions`)})}),(0,V.jsx)(Bu,{isOpen:!!n,onOpenChange:e=>!e&&r(null),purpose:`form`,width:400,"aria-label":n?.kind===`workspace`?t(`renameWorkspace`):t(`renameConversation`),children:(0,V.jsxs)(`form`,{className:`openpi-dialog`,onSubmit:e=>{e.preventDefault(),D()},children:[(0,V.jsx)(`strong`,{children:n?.kind===`workspace`?t(`renameWorkspace`):t(`renameConversation`)}),(0,V.jsx)(`input`,{ref:u,value:o,maxLength:80,"aria-label":n?.kind===`workspace`?t(`workspaceName`):t(`conversationName`),onChange:e=>s(e.target.value)}),(0,V.jsxs)(`div`,{className:`dialog-actions`,children:[(0,V.jsx)(`button`,{type:`button`,onClick:()=>r(null),children:t(`cancel`)}),(0,V.jsx)(`button`,{type:`submit`,className:`primary`,children:t(`save`)})]})]})}),(0,V.jsx)(Bu,{isOpen:!!i,onOpenChange:e=>!e&&a(null),purpose:`form`,width:440,"aria-label":t(`deleteWorkspace`),children:(0,V.jsxs)(`div`,{className:`openpi-dialog`,children:[(0,V.jsx)(`strong`,{children:t(`deleteWorkspace`)}),(0,V.jsxs)(`p`,{children:[i?.name,`:`,t(`workspaceDeleteConfirm`)]}),(0,V.jsxs)(`div`,{className:`dialog-actions`,children:[(0,V.jsx)(`button`,{type:`button`,onClick:()=>a(null),children:t(`cancel`)}),(0,V.jsx)(`button`,{type:`button`,className:`danger`,onClick:()=>{i&&(e.actions.removeWorkspace(i.path),a(null))},children:t(`deleteWorkspace`)})]})]})})]})}function id(e){let t=new Map(e.map((e,t)=>[e.id,t])),n=new Map,r=new Map,i=new Map;for(let a of e){let e=`message`in a?a.message:void 0;for(let t of e?.parts??[])t.type===`toolCall`&&t.id&&r.set(t.id,(r.get(t.id)??0)+1);if(e?.role===`toolResult`&&e.toolCallId){let r=i.get(e.toolCallId)??[];r.push(e),n.set(e,t.get(a.id)??-1),i.set(e.toolCallId,r)}}let a=new Set,o=[];for(let s of e){let e=`message`in s?s.message:void 0;if(!e){o.push({key:s.id,kind:`event`,title:s.type,timestamp:s.timestamp});continue}if(e.role!==`toolResult`){(e.role!==`assistant`||e.content||!e.parts?.length||e.parts?.some(e=>e.type!==`toolCall`))&&o.push({key:s.id,kind:e.role===`user`?`user`:e.role===`assistant`?`assistant`:`event`,title:e.customType||e.role||s.type,timestamp:s.timestamp,message:e});for(let[c,l]of(e.parts??[]).entries()){if(l.type!==`toolCall`)continue;let u=l.id?i.get(l.id):void 0,d=l.id&&r.get(l.id)===1&&u?.length===1&&u[0]?.toolName===l.name&&!l.id.includes(`[truncated]`)&&(n.get(u[0])??-1)>(t.get(s.id)??-1)?u[0]:void 0;d&&a.add(d),o.push({key:`${s.id}:call:${c}`,kind:`call`,title:l.name,timestamp:s.timestamp,callId:l.id,input:l.arguments,message:e,result:d,outcome:d?.isError===!0?`error`:d?.isError===!1?`returned`:`unknown`})}}}let s=new Map(o.map(e=>[e.key,t.get(e.key)??-1]));for(let n of e){let e=`message`in n?n.message:void 0;e?.role===`toolResult`&&!a.has(e)&&(o.push({key:n.id,kind:`result`,title:e.toolName||`toolResult`,timestamp:n.timestamp,callId:e.toolCallId,result:e,outcome:e.isError===!0?`error`:e.isError===!1?`returned`:`unknown`}),s.set(n.id,t.get(n.id)??0));for(let[r,i]of(e?.parts??[]).entries())i.type===`toolCall`&&s.set(`${n.id}:call:${r}`,t.get(n.id)??0)}return o.sort((e,t)=>(s.get(e.key)??0)-(s.get(t.key)??0)),o}var ad=[],od=(0,w.memo)(function({snapshot:e,running:t}){let{t:n}=sn(),r=e.selectedSession?.entries??ad,i=(0,w.useMemo)(()=>id(r),[r]),[a,o]=(0,w.useState)(null),[s,c]=(0,w.useState)(50),l=i.findIndex(e=>e.key===a),u=Math.min(Math.max(0,i.length-s),l<0?i.length:l),d=i.slice(u),f=d.find(e=>e.key===a)??d.at(-1),p=e.selectedSession?.truncation,m=f?.result,h=f?.message;return(0,V.jsxs)(`section`,{className:`conversation trajectory`,"aria-label":n(`trajectory`),children:[(0,V.jsxs)(`header`,{className:`trajectory-heading`,children:[(0,V.jsx)(`h2`,{children:n(`trajectory`)}),(0,V.jsx)(`p`,{children:n(`trajectoryScope`)}),t&&(0,V.jsx)(`p`,{role:`status`,children:n(`trajectoryRunning`)}),p?.truncated&&(0,V.jsx)(`p`,{className:`trajectory-warning`,children:n(`trajectoryTruncated`,{entries:p.entriesOmitted,parts:p.messagePartsOmitted,messages:p.messagesTruncated})})]}),i.length?(0,V.jsxs)(V.Fragment,{children:[(0,V.jsx)(`nav`,{className:`trajectory-overview`,"aria-label":n(`trajectoryOverview`),children:d.map((e,t)=>(0,V.jsx)(`button`,{type:`button`,"aria-label":`${n(`trajectory_${e.kind}`)} ${i.length-d.length+t+1}: ${e.title}`,"aria-pressed":e.key===f?.key,onClick:()=>o(e.key),className:`trajectory-point ${e.kind} ${e.outcome??``}`,children:(0,V.jsx)(`span`,{children:i.length-d.length+t+1})},e.key))}),(0,V.jsxs)(`div`,{className:`trajectory-body`,children:[(0,V.jsxs)(`div`,{className:`trajectory-ledger`,children:[u>0&&(0,V.jsx)(`button`,{type:`button`,className:`trajectory-load`,onClick:()=>c(e=>e+50),children:n(`trajectoryEarlier`,{count:u})}),(0,V.jsx)(`ol`,{start:i.length-d.length+1,children:d.map(e=>(0,V.jsx)(`li`,{children:(0,V.jsxs)(`button`,{type:`button`,"aria-pressed":e.key===f?.key,onClick:()=>o(e.key),className:`trajectory-record ${e.kind}`,children:[(0,V.jsx)(`span`,{className:`trajectory-kind`,children:n(`trajectory_${e.kind}`)}),(0,V.jsx)(`strong`,{children:e.title}),(0,V.jsx)(`span`,{className:`trajectory-preview`,children:(e.input??e.message?.content??e.result?.content??``).slice(0,110)}),e.outcome&&(0,V.jsx)(`span`,{children:n(`trajectory_${e.outcome}`)})]})},e.key))})]}),f&&(0,V.jsxs)(`section`,{className:`trajectory-inspector`,"aria-label":n(`trajectoryDetails`),children:[(0,V.jsx)(`h3`,{children:f.title}),f.timestamp&&(0,V.jsxs)(`p`,{className:`trajectory-metadata`,children:[n(`trajectoryRecordedAt`),`:`,` `,(0,V.jsx)(`time`,{children:f.timestamp})]}),f.callId&&(0,V.jsxs)(`p`,{className:`trajectory-metadata`,children:[`Tool call ID: `,f.callId]}),(h?.truncation||m?.truncation)&&(0,V.jsx)(`p`,{className:`trajectory-warning`,children:n(`trajectoryEvidenceTruncated`)}),f.input!==void 0&&(0,V.jsxs)(V.Fragment,{children:[(0,V.jsx)(`h4`,{children:n(`trajectoryArguments`)}),(0,V.jsx)(`pre`,{children:f.input})]}),h&&f.kind!==`call`&&(0,V.jsxs)(V.Fragment,{children:[(0,V.jsx)(`h4`,{children:n(`trajectoryRecordedContent`)}),(0,V.jsx)(`pre`,{children:h.content||n(`noOutput`)}),h.parts?.some(e=>e.type===`thinking`)&&(0,V.jsxs)(`details`,{children:[(0,V.jsx)(`summary`,{children:n(`trajectoryThinking`)}),(0,V.jsx)(`pre`,{children:h.parts.filter(e=>e.type===`thinking`).map(e=>e.text).join(`
+`)]:[]).slice(0,20)}function Xu(e,t,n){let r=Gu(e),i=Uu(t?.details),a=qu(e.name,t),o=a?.state??(n===`running`?`running`:t?.isError===!0?`failed`:t?.isError===!1?`returned`:`unknown`),s=[`bash`,`bg_start`,`bg_status`].includes(e.name),c=Wu(t?.content??``,s),l=e.name===`read`?/\n\n(\[(?:\d+ more lines in file\. Use offset=\d+ to continue\.|Showing lines [^\n]+)\])$/u.exec(c.text):null,u=c.truncated||!!t?.truncation||Uu(i.truncation).truncated===!0||e.evidenceTruncated===!0,d=s?Ju(c.text):void 0,f=e.name===`read`?`file`:[`write`,`edit`].includes(e.name)?`change`:d?`test`:`terminal`,p=[`write`,`edit`].includes(e.name)&&t?.isError===!1&&typeof i.diff==`string`?Wu(i.diff):void 0,m=typeof r.offset==`number`&&Number.isSafeInteger(r.offset)&&r.offset>0?r.offset:1;return{kind:f,state:o,processState:a?.state??(e.name===`bash`&&t?.isError===!1?`returned`:e.name===`bash`&&n===`running`?`running`:`unknown`),output:l?c.text.slice(0,l.index):c.text,truncated:u||p?.truncated===!0,images:t?.images,imageCount:t?.imageCount??t?.images?.length??0,unsupportedContentBlocks:t?.unsupportedContentBlocks??0,partsOmitted:t?.truncation?.partsOmitted??0,readRecovery:l?.[1],numberLines:e.name===`read`&&t?.isError===!1&&Uu(i.truncation).firstLineExceedsLimit!==!0&&!!c.text,path:typeof r.path==`string`?Wu(r.path).text:void 0,resolvedPath:typeof r.resolvedPath==`string`?Wu(r.resolvedPath).text:void 0,command:typeof r.command==`string`?Wu(r.command).text:void 0,offset:m,diff:p?.text,tests:d,change:t?.isError===!1&&[`created`,`overwritten`,`unchanged`].includes(String(i.change))?String(i.change):void 0,evidenceUnavailable:typeof i.evidenceUnavailable==`string`?Wu(i.evidenceUnavailable).text:void 0,exitCode:a&&`exitCode`in a?a.exitCode:void 0,signal:a&&`signal`in a?a.signal:void 0,recovery:typeof i.fullOutputPath==`string`?Wu(i.fullOutputPath).text:void 0,rawArguments:Wu(e.arguments).text,rawResult:Wu(JSON.stringify({content:t?.content,details:t?.details,isError:t?.isError})).text}}new TextEncoder;var Zu=`openpi.web.token`,Qu=class extends Error{status;code;constructor(e,t,n){super(e),this.status=t,this.code=n,this.name=`WebApiError`}};function $u(){let e=document.querySelector(`meta[name="openpi-web-token"]`)?.content,t=new URLSearchParams(location.hash.slice(1)).get(`token`),n=e&&/^[a-f0-9]{64}$/i.test(e)?e:t;if(t&&history.replaceState(null,``,`${location.pathname}${location.search}`),n){try{window.sessionStorage.setItem(Zu,n)}catch{}return n}try{return window.sessionStorage.getItem(Zu)}catch{return null}}var ed=class{token=$u();headers(e=!1){return{Authorization:`Bearer ${this.token??``}`,...e?{"Content-Type":`application/json`}:{}}}async request(e,t={}){let{timeoutMs:n=15e3,timeoutMessage:r=`Request timed out. Please try again.`,...i}=t,a=new AbortController,o=!1,s=()=>a.abort();t.signal?.aborted&&s(),t.signal?.addEventListener(`abort`,s,{once:!0});let c=window.setTimeout(()=>{o=!0,a.abort()},n);try{let n=await fetch(e,{...i,signal:a.signal,headers:{...this.headers(!!t.body),...t.headers}}),r=await n.json();if(a.signal.aborted)throw Error(`Request aborted`);if(!n.ok)throw new Qu(r.error||`Request failed (${n.status})`,n.status,r.code);return r}catch(e){throw o?Error(r):e}finally{window.clearTimeout(c),t.signal?.removeEventListener(`abort`,s)}}snapshot(e){let t=e?`?path=${encodeURIComponent(e)}`:``;return this.request(`/api/snapshot${t}`)}resolveArtifact(e,t,n,r){return this.request(`/api/artifacts/resolve`,{method:`POST`,body:JSON.stringify({sessionId:e,reference:t,parent:n,access:`read-file`}),signal:r})}artifactMetadata(e,t,n){return this.request(`/api/artifacts/content?${new URLSearchParams({sessionId:e,handle:t,metadata:`1`})}`,{signal:n})}artifactPreview(e,t,n){return this.request(`/api/artifacts/content?${new URLSearchParams({sessionId:e,handle:t})}`,{signal:n})}releaseArtifact(e,t){return this.request(`/api/artifacts/content?`+new URLSearchParams({sessionId:e,handle:t}),{method:`DELETE`})}async downloadArtifact(e,t){let n=new AbortController,r=()=>n.abort();t.addEventListener(`abort`,r,{once:!0}),t.aborted&&r();let i=window.setTimeout(r,15e3);try{let t=await fetch(`/api/artifacts/content?${new URLSearchParams({sessionId:e.sessionId,handle:e.handle,revision:e.revision,download:`1`})}`,{headers:this.headers(),signal:n.signal});if(!t.ok){let e=await t.json();throw new Qu(e.error||`Download failed`,t.status,e.code)}let r=t.body?.getReader();if(!r)throw Error(`Download body unavailable`);let i=[],a=0;try{for(;;){let{value:e,done:t}=await r.read();if(t)break;if(a+=e.byteLength,a>20971520)throw Error(`Download exceeds the 20 MiB limit`);i.push(new Uint8Array(e))}}finally{await r.cancel()}return new Blob(i,{type:`application/octet-stream`})}finally{window.clearTimeout(i),t.removeEventListener(`abort`,r)}}chooseWorkspace(){return this.request(`/api/workspaces/select`,{method:`POST`})}renameWorkspace(e,t){return this.request(`/api/workspaces`,{method:`PATCH`,body:JSON.stringify({path:e,name:t})})}removeWorkspace(e){return this.request(`/api/workspaces?path=${encodeURIComponent(e)}`,{method:`DELETE`})}createSession(e,t){return this.request(`/api/sessions`,{method:`POST`,body:JSON.stringify({workspacePath:e,commandId:t})})}selectSession(e){return this.request(`/api/sessions/select`,{method:`POST`,body:JSON.stringify({path:e})})}renameSession(e,t){return this.request(`/api/sessions`,{method:`PATCH`,body:JSON.stringify({path:e,name:t})})}archiveSession(e){return this.request(`/api/sessions/archive?path=${encodeURIComponent(e)}`,{method:`POST`})}unarchiveSession(e){return this.request(`/api/sessions/unarchive?path=${encodeURIComponent(e)}`,{method:`POST`})}thinking(e,t){return this.request(`/api/thinking?sessionId=${encodeURIComponent(e)}`,{signal:t})}setThinkingLevel(e,t){return this.request(`/api/thinking`,{method:`POST`,body:JSON.stringify({sessionId:e,level:t})})}trust(e,t){return this.request(`/api/trust?sessionId=${encodeURIComponent(e)}`,{signal:t})}providerAuth(e,t){return this.request(`/api/providers/auth-status?sessionId=${encodeURIComponent(e)}`,{signal:t})}commands(e,t){return this.request(`/api/commands?sessionId=${encodeURIComponent(e)}`,{signal:t})}terminalDetail(e,t,n){return this.request(`/api/capabilities/detail?kind=background-terminals&id=${encodeURIComponent(t)}&sessionId=${encodeURIComponent(e)}`,{signal:n})}selectModel(e,t,n){return this.request(`/api/model`,{method:`POST`,body:JSON.stringify({provider:e,modelId:t,sessionId:n})})}searchModels(e,t,n){let r=new URLSearchParams({query:e,limit:`50`});return t&&r.set(`sessionId`,t),this.request(`/api/models?${r}`,{signal:n})}cancelActiveTurn(e){return this.request(`/api/turns/cancel`,{method:`POST`,body:JSON.stringify(e)})}async prompt(e,t,n,r=!1){let i=await this.request(`/api/prompt`,{method:`POST`,body:JSON.stringify({sessionId:e,content:t,commandId:n,retry:r}),timeoutMs:3e4,timeoutMessage:`Request timed out; admission may still be pending. Retry the same message to recover its receipt.`});if(typeof i.id!=`string`||!i.id||i.accepted!==!0)throw Error(`Invalid prompt receipt; retry the same message to recover its admission.`);return i}};function td({target:e,onClose:t}){let{t:n}=sn(),r=(0,w.useMemo)(()=>new ed,[]),[i,a]=(0,w.useState)(0),[o,s]=(0,w.useState)(null),[c,l]=(0,w.useState)(null);(0,w.useEffect)(()=>{let t=new AbortController;return s(null),l(null),(async()=>{let i={errors:[]};if(e.terminalId)try{let a=await r.terminalDetail(e.sessionId,e.terminalId,t.signal);if(a.sessionId!==e.sessionId||a.detail.id!==e.terminalId)throw Error(n(`inspectionChanged`));i.terminal=a.detail}catch(e){i.errors.push(e instanceof Error?e.message:n(`inspectionUnavailable`))}else{let[a,o,s]=await Promise.allSettled([r.thinking(e.sessionId,t.signal),r.trust(e.sessionId,t.signal),r.providerAuth(e.sessionId,t.signal)]);a.status===`fulfilled`&&a.value.sessionId===e.sessionId?i.thinking=a.value:i.errors.push(n(`thinkingUnavailable`)),o.status===`fulfilled`&&(o.value.workspace===void 0||o.value.workspace===e.cwd)?i.trust=o.value:i.errors.push(n(`trustUnavailable`)),s.status===`fulfilled`?i.auth=s.value:i.errors.push(n(`authUnavailable`))}t.signal.aborted||(s(i),l(new Date().toLocaleTimeString()))})(),()=>t.abort()},[r,e,i,n]);let u=e.terminalId?n(`terminalDetails`):n(`runtimeStatus`),d=o?.terminal;return(0,V.jsx)(Bu,{isOpen:!0,onOpenChange:e=>!e&&t(),width:640,"aria-label":u,children:(0,V.jsxs)(`section`,{className:`inspection-panel`,children:[(0,V.jsxs)(`header`,{className:`inspection-heading`,children:[(0,V.jsxs)(`div`,{children:[(0,V.jsx)(`h2`,{children:u}),(0,V.jsx)(`p`,{className:`inspection-subtitle`,children:e.cwd})]}),(0,V.jsxs)(`div`,{className:`inspection-actions`,children:[(0,V.jsx)(`button`,{type:`button`,className:`icon-button`,"aria-label":n(`refreshStatus`),disabled:!o,onClick:()=>a(e=>e+1),children:(0,V.jsx)(Ee,{})}),(0,V.jsx)(`button`,{type:`button`,className:`icon-button`,"aria-label":n(`close`),onClick:t,children:(0,V.jsx)(Re,{})})]})]}),o?(0,V.jsxs)(V.Fragment,{children:[o.errors.map(e=>(0,V.jsx)(`p`,{className:`inspection-warning`,role:`alert`,children:e},e)),d?(0,V.jsxs)(V.Fragment,{children:[(0,V.jsxs)(`div`,{className:`inspection-section`,children:[(0,V.jsx)(`h3`,{children:d.title||d.id}),(0,V.jsxs)(`dl`,{children:[(0,V.jsx)(`dt`,{children:n(`executionState`)}),(0,V.jsx)(`dd`,{children:n(`execution_${d.status}`,{defaultValue:d.status})}),(0,V.jsx)(`dt`,{children:n(`terminalCommand`)}),(0,V.jsx)(`dd`,{children:(0,V.jsx)(`code`,{children:d.command})}),(0,V.jsx)(`dt`,{children:n(`terminalDirectory`)}),(0,V.jsx)(`dd`,{children:d.cwd}),(0,V.jsx)(`dt`,{children:n(`startedAt`)}),(0,V.jsx)(`dd`,{children:new Date(d.createdAt).toLocaleString()}),d.exitCode!==void 0&&(0,V.jsxs)(V.Fragment,{children:[(0,V.jsx)(`dt`,{children:n(`exitCode`)}),(0,V.jsx)(`dd`,{children:d.exitCode})]})]}),d.errorText&&(0,V.jsx)(`p`,{className:`inspection-warning`,children:d.errorText}),d.truncated&&(0,V.jsx)(`p`,{className:`inspection-note`,children:n(`detailTruncated`)})]}),[`stdout`,`stderr`].map(e=>(0,V.jsxs)(`section`,{className:`inspection-section`,children:[(0,V.jsx)(`h3`,{children:n(e===`stdout`?`standardOutput`:`standardError`)}),(0,V.jsx)(`pre`,{className:`terminal-evidence`,children:d[e].text||n(`noOutput`)}),d[e].truncated&&(0,V.jsx)(`p`,{className:`inspection-note`,children:n(`outputTruncated`,{count:d[e].omittedBytes})}),d[e].recoveryAvailable&&(0,V.jsx)(`p`,{className:`inspection-note`,children:n(`outputRecovery`)})]},e))]}):!e.terminalId&&(0,V.jsxs)(V.Fragment,{children:[(0,V.jsxs)(`section`,{className:`inspection-section`,children:[(0,V.jsx)(`h3`,{children:n(`modelAndThinking`)}),(0,V.jsxs)(`dl`,{children:[(0,V.jsx)(`dt`,{children:n(`selectedModel`)}),(0,V.jsx)(`dd`,{children:e.model||n(`noModels`)}),(0,V.jsx)(`dt`,{children:n(`thinkingLevel`)}),(0,V.jsx)(`dd`,{children:o.thinking?.supported===!1?n(`thinkingUnsupported`):o.thinking?.level??n(`unknownState`)}),!!o.thinking?.available.length&&(0,V.jsxs)(V.Fragment,{children:[(0,V.jsx)(`dt`,{children:n(`availableThinking`)}),(0,V.jsx)(`dd`,{children:o.thinking?.available.join(` · `)})]})]}),o.thinking?.supported===!1&&(0,V.jsx)(`p`,{className:`inspection-note`,children:n(`thinkingUnsupportedHint`)}),o.thinking&&o.thinking.supported!==!1&&!o.thinking.available.includes(o.thinking.level)&&(0,V.jsx)(`p`,{className:`inspection-warning`,role:`status`,children:n(`thinkingLevelMismatch`)})]}),(0,V.jsxs)(`section`,{className:`inspection-section`,children:[(0,V.jsx)(`h3`,{children:n(`projectTrust`)}),(0,V.jsx)(`p`,{children:n(`trust_${o.trust?.state??`unknown`}`)}),o.trust?.refreshRequired===!0&&(0,V.jsx)(`p`,{className:`inspection-warning`,children:n(`trustRefreshNeeded`)})]}),(0,V.jsxs)(`section`,{className:`inspection-section`,children:[(0,V.jsx)(`h3`,{children:n(`providerAvailability`)}),o.auth?.providers.map(e=>(0,V.jsxs)(`div`,{className:`provider-status`,children:[(0,V.jsx)(`span`,{children:e.name||e.id}),(0,V.jsx)(`span`,{children:e.configured?n(`credentialConfigured`):n(`credentialMissing`)})]},e.id)),o.auth&&!o.auth.providers.length&&(0,V.jsx)(`p`,{children:n(`noProviders`)}),o.auth?.truncation.truncated&&(0,V.jsx)(`p`,{className:`inspection-note`,children:n(`providersBounded`)}),(0,V.jsx)(`p`,{className:`inspection-note`,children:n(`authNotVerified`)})]}),(0,V.jsx)(`p`,{className:`inspection-note`,children:n(`configurationViaPi`)})]}),(0,V.jsx)(`p`,{className:`inspection-updated`,children:n(`statusCaptured`,{time:c})})]}):(0,V.jsx)(`p`,{role:`status`,children:n(`inspectionLoading`)})]})})}function nd({items:e,label:t}){return(0,V.jsx)(`span`,{className:`astryx-menu-trigger`,children:(0,V.jsx)(il,{button:{label:t,icon:(0,V.jsx)(ue,{}),isIconOnly:!0,size:`sm`,variant:`ghost`,className:`menu-action-button`},items:e,menuWidth:190,placement:`below`,alignment:`end`,hasChevron:!1})})}function rd(e){let{t}=sn(),[n,r]=(0,w.useState)(null),[i,a]=(0,w.useState)(null),[o,s]=(0,w.useState)(``),c=(0,w.useRef)(null),l=(0,w.useRef)(null),u=(0,w.useRef)(null),d=(0,w.useRef)(null),f=(0,w.useRef)(null),p=e.snapshot,[m,h]=(0,w.useState)(!1),[g,_]=(0,w.useState)(new Set),[v,y]=(0,w.useState)(new Set),b=(0,w.useRef)(new Set),[x,S]=(0,w.useState)(!1),C=async t=>{if(!b.current.has(t)){b.current.add(t),y(new Set(b.current)),S(!1);try{await e.actions.unarchiveSession(t)||S(!0)}finally{b.current.delete(t),y(new Set(b.current))}}};(0,w.useEffect)(()=>{if(e.searchOpen)return c.current?.focus(),()=>l.current?.focus()},[e.searchOpen]),(0,w.useEffect)(()=>{if(e.mobileOpen)return f.current?.focus(),()=>{let t=e.returnFocusRef?.current;t?.checkVisibility()&&t.focus()}},[e.mobileOpen,e.returnFocusRef]),(0,w.useEffect)(()=>{e.mobileOpen&&document.activeElement===document.body&&!document.querySelector(`dialog:modal`)&&f.current?.focus()}),(0,w.useEffect)(()=>{n&&(u.current?.focus(),u.current?.select())},[n]);let T=(0,w.useMemo)(()=>{let n=e.query.trim().toLowerCase(),r=e=>(p?.sessions??[]).filter(r=>!!r.archived===m&&(e===`__ungrouped__`?r.ungrouped:r.cwd===e&&!r.ungrouped)&&(!n||`${ll(r,t(`untitledSession`))} ${r.cwd}`.toLowerCase().includes(n))),i=[...p?.workspaces??[]];for(let e of p?.sessions??[])!e.ungrouped&&!i.some(t=>t.path===e.cwd)&&i.push({path:e.cwd,name:e.cwd,current:!1});return[...i.map(e=>({...e,sessions:r(e.path),ungrouped:!1})),{path:`__ungrouped__`,name:t(`ungrouped`),current:!1,sessions:r(`__ungrouped__`),ungrouped:!0}].filter(e=>e.sessions.length>0||!m&&!e.ungrouped&&!n)},[m,e.query,p,t]),E=e=>{s(e.name),r(e)},D=async()=>{let t=o.trim();!n||!t||(n.kind===`workspace`?await e.actions.renameWorkspace(n.path,t):await e.actions.renameSession(n.path,t),r(null))};return(0,V.jsxs)(`div`,{ref:d,id:`session-sidebar`,className:`session-sidebar`,role:e.mobileOpen?`dialog`:`complementary`,"aria-modal":e.mobileOpen||void 0,"aria-label":`Session navigation`,tabIndex:e.mobileOpen?-1:void 0,onKeyDown:t=>{if(!e.mobileOpen||t.defaultPrevented||t.target instanceof Element&&(t.target.closest(`dialog`)||t.key!==`Tab`&&t.target.closest(`[role="menu"]`))||(t.key===`Escape`&&!t.nativeEvent.isComposing&&(t.preventDefault(),e.actions.closeMobileSidebar()),t.key!==`Tab`))return;let n=Array.from(d.current?.querySelectorAll(`button, input, select, textarea, a[href], [tabindex]`)??[]).filter(e=>e.tabIndex>=0&&!e.matches(`:disabled`)&&e.checkVisibility({visibilityProperty:!0})),r=t.shiftKey?n.at(-1):n[0],i=t.shiftKey?n[0]:n.at(-1);(document.activeElement===d.current||document.activeElement===i)&&(t.preventDefault(),r?.focus())},children:[(0,V.jsxs)(`div`,{className:`sidebar-brand`,children:[(0,V.jsx)(hn,{compact:!0}),(0,V.jsx)(cl,{content:t(`collapseSidebar`),placement:`end`,children:(0,V.jsx)(`button`,{ref:f,className:`collapse-button`,type:`button`,"aria-label":t(`collapseSidebar`),onClick:()=>e.mobileOpen?e.actions.closeMobileSidebar():e.actions.toggleSidebar(!1),children:(0,V.jsx)(R,{})})})]}),(0,V.jsxs)(`button`,{className:`new-session-button`,type:`button`,onClick:()=>e.selectedWorkspace?void e.actions.createSession(e.selectedWorkspace):void e.actions.chooseWorkspace(),children:[(0,V.jsx)(je,{}),(0,V.jsx)(`span`,{children:t(`newSession`)})]}),(0,V.jsxs)(`div`,{className:`workspace-heading ${e.searchOpen?`is-searching`:``}`,children:[(0,V.jsx)(`span`,{className:`workspace-heading-label`,children:t(`workspaces`)}),(0,V.jsxs)(`div`,{className:`session-search`,children:[(0,V.jsx)(De,{}),(0,V.jsx)(`input`,{ref:c,type:`search`,value:e.query,placeholder:t(`searchPlaceholder`),"aria-label":t(`searchConversations`),onChange:t=>e.actions.setQuery(t.target.value)}),(0,V.jsx)(`button`,{type:`button`,"aria-label":t(`closeSearch`),onClick:()=>e.actions.setSearchOpen(!1),children:(0,V.jsx)(Re,{})})]}),(0,V.jsxs)(`div`,{className:`workspace-actions`,children:[(0,V.jsx)(cl,{content:t(`searchConversations`),children:(0,V.jsx)(`button`,{ref:l,className:`icon-button`,type:`button`,"aria-label":t(`searchConversations`),onClick:()=>e.actions.setSearchOpen(!0),children:(0,V.jsx)(De,{})})}),(0,V.jsx)(cl,{content:t(`addWorkspace`),children:(0,V.jsx)(`button`,{className:`icon-button`,type:`button`,"aria-label":t(`addWorkspace`),onClick:()=>void e.actions.chooseWorkspace(),children:(0,V.jsx)(we,{})})})]})]}),(0,V.jsxs)(`fieldset`,{className:`session-view-switch`,"aria-label":t(`conversationViews`),children:[(0,V.jsx)(`button`,{type:`button`,"aria-pressed":!m,onClick:()=>h(!1),children:t(`currentConversations`)}),(0,V.jsx)(`button`,{type:`button`,"aria-pressed":m,onClick:()=>h(!0),children:t(`archivedConversations`)})]}),m&&(0,V.jsx)(`p`,{className:`sidebar-scope-note`,children:t(`loadedArchives`)}),!!(p?.truncation.sessionsOmitted||p?.truncation.workspacesOmitted)&&(0,V.jsx)(`p`,{className:`sidebar-scope-note`,children:t(`loadedHistoryBounded`,{sessions:p?.truncation.sessionsOmitted,workspaces:p?.truncation.workspacesOmitted})}),x&&(0,V.jsx)(`p`,{className:`sidebar-scope-note`,role:`alert`,children:t(`restoreFailed`)}),(0,V.jsx)(`div`,{className:`workspace-tree`,children:T.length?T.map(n=>{let r=(m?g:e.collapsed).has(n.path);return(0,V.jsxs)(`section`,{className:`workspace-group ${r?`collapsed`:``}`,children:[(0,V.jsxs)(`div`,{className:`workspace-button`,children:[(0,V.jsxs)(`button`,{className:`workspace-label`,type:`button`,"aria-expanded":!r,title:n.path===`__ungrouped__`?void 0:n.path,onClick:()=>{m?_(e=>{let t=new Set(e);return t.has(n.path)?t.delete(n.path):t.add(n.path),t}):e.actions.toggleWorkspace(n.path)},children:[(0,V.jsx)(`span`,{className:`workspace-toggle`,"aria-hidden":`true`,children:(0,V.jsx)(`span`,{className:`workspace-chevron`,children:`⌄`})}),(0,V.jsx)(`strong`,{children:n.name})]}),!n.ungrouped&&(0,V.jsxs)(`span`,{className:`workspace-row-actions`,children:[(0,V.jsx)(nd,{label:`Workspace options`,items:[{id:`rename`,label:t(`renameWorkspace`),icon:(0,V.jsx)(je,{}),onClick:()=>E({kind:`workspace`,path:n.path,name:n.name})},{id:`remove`,label:t(`removeWorkspace`),icon:(0,V.jsx)(Pe,{}),variant:`destructive`,onClick:()=>a({path:n.path,name:n.name})}]}),(0,V.jsx)(cl,{content:t(`newSession`),children:(0,V.jsx)(`button`,{className:`workspace-action`,type:`button`,"aria-label":`${t(`newSession`)} ${n.name}`,onClick:t=>{t.stopPropagation(),e.actions.createSession(n.path)},children:(0,V.jsx)(we,{})})})]})]}),(0,V.jsx)(`div`,{className:`workspace-sessions`,children:n.sessions.length?n.sessions.map(n=>(0,V.jsxs)(`div`,{className:`session-row`,children:[(0,V.jsxs)(`button`,{className:`session ${n.path===e.selectedPath?`active`:``}`,type:`button`,"aria-current":n.path===e.selectedPath?`page`:void 0,title:ll(n,t(`untitledSession`)),onClick:()=>void e.actions.selectSession(n.path),children:[(0,V.jsx)(`span`,{className:`session-title`,children:ll(n,t(`untitledSession`))}),(0,V.jsx)(`span`,{className:`session-time`,children:fl(n.modified)})]}),(0,V.jsx)(nd,{label:t(`conversationOptions`),items:[{id:`rename`,label:t(`renameConversation`),icon:(0,V.jsx)(je,{}),onClick:()=>E({kind:`session`,path:n.path,name:ll(n,t(`untitledSession`))})},{id:m?`restore`:`archive`,label:v.has(n.path)?t(`restoringConversation`):t(m?`restoreConversation`:`archiveConversation`),icon:m?(0,V.jsx)(k,{}):(0,V.jsx)(A,{}),onClick:()=>m?void C(n.path):void e.actions.archiveSession(n.path)}]})]},n.path)):(0,V.jsx)(`div`,{className:`empty`,children:t(`noConversations`)})})]},n.path)}):(0,V.jsx)(`div`,{className:`empty`,children:e.query?t(`noMatching`):t(m?`noLoadedArchives`:`noSessions`)})}),(0,V.jsx)(Bu,{isOpen:!!n,onOpenChange:e=>!e&&r(null),purpose:`form`,width:400,"aria-label":n?.kind===`workspace`?t(`renameWorkspace`):t(`renameConversation`),children:(0,V.jsxs)(`form`,{className:`openpi-dialog`,onSubmit:e=>{e.preventDefault(),D()},children:[(0,V.jsx)(`strong`,{children:n?.kind===`workspace`?t(`renameWorkspace`):t(`renameConversation`)}),(0,V.jsx)(`input`,{ref:u,value:o,maxLength:80,"aria-label":n?.kind===`workspace`?t(`workspaceName`):t(`conversationName`),onChange:e=>s(e.target.value)}),(0,V.jsxs)(`div`,{className:`dialog-actions`,children:[(0,V.jsx)(`button`,{type:`button`,onClick:()=>r(null),children:t(`cancel`)}),(0,V.jsx)(`button`,{type:`submit`,className:`primary`,children:t(`save`)})]})]})}),(0,V.jsx)(Bu,{isOpen:!!i,onOpenChange:e=>!e&&a(null),purpose:`form`,width:440,"aria-label":t(`deleteWorkspace`),children:(0,V.jsxs)(`div`,{className:`openpi-dialog`,children:[(0,V.jsx)(`strong`,{children:t(`deleteWorkspace`)}),(0,V.jsxs)(`p`,{children:[i?.name,`:`,t(`workspaceDeleteConfirm`)]}),(0,V.jsxs)(`div`,{className:`dialog-actions`,children:[(0,V.jsx)(`button`,{type:`button`,onClick:()=>a(null),children:t(`cancel`)}),(0,V.jsx)(`button`,{type:`button`,className:`danger`,onClick:()=>{i&&(e.actions.removeWorkspace(i.path),a(null))},children:t(`deleteWorkspace`)})]})]})})]})}function id(e){let t=new Map(e.map((e,t)=>[e.id,t])),n=new Map,r=new Map,i=new Map;for(let a of e){let e=`message`in a?a.message:void 0;for(let t of e?.parts??[])t.type===`toolCall`&&t.id&&r.set(t.id,(r.get(t.id)??0)+1);if(e?.role===`toolResult`&&e.toolCallId){let r=i.get(e.toolCallId)??[];r.push(e),n.set(e,t.get(a.id)??-1),i.set(e.toolCallId,r)}}let a=new Set,o=[];for(let s of e){let e=`message`in s?s.message:void 0;if(!e){o.push({key:s.id,kind:`event`,title:s.type,timestamp:s.timestamp});continue}if(e.role!==`toolResult`){(e.role!==`assistant`||e.content||!e.parts?.length||e.parts?.some(e=>e.type!==`toolCall`))&&o.push({key:s.id,kind:e.role===`user`?`user`:e.role===`assistant`?`assistant`:`event`,title:e.customType||e.role||s.type,timestamp:s.timestamp,message:e});for(let[c,l]of(e.parts??[]).entries()){if(l.type!==`toolCall`)continue;let u=l.id?i.get(l.id):void 0,d=l.id&&r.get(l.id)===1&&u?.length===1&&u[0]?.toolName===l.name&&!l.id.includes(`[truncated]`)&&(n.get(u[0])??-1)>(t.get(s.id)??-1)?u[0]:void 0;d&&a.add(d),o.push({key:`${s.id}:call:${c}`,kind:`call`,title:l.name,timestamp:s.timestamp,callId:l.id,input:l.arguments,message:e,result:d,outcome:d?.isError===!0?`error`:d?.isError===!1?`returned`:`unknown`})}}}let s=new Map(o.map(e=>[e.key,t.get(e.key)??-1]));for(let n of e){let e=`message`in n?n.message:void 0;e?.role===`toolResult`&&!a.has(e)&&(o.push({key:n.id,kind:`result`,title:e.toolName||`toolResult`,timestamp:n.timestamp,callId:e.toolCallId,result:e,outcome:e.isError===!0?`error`:e.isError===!1?`returned`:`unknown`}),s.set(n.id,t.get(n.id)??0));for(let[r,i]of(e?.parts??[]).entries())i.type===`toolCall`&&s.set(`${n.id}:call:${r}`,t.get(n.id)??0)}return o.sort((e,t)=>(s.get(e.key)??0)-(s.get(t.key)??0)),o}var ad=[],od=(0,w.memo)(function({snapshot:e,running:t}){let{t:n}=sn(),r=e.selectedSession?.entries??ad,i=(0,w.useMemo)(()=>id(r),[r]),[a,o]=(0,w.useState)(null),[s,c]=(0,w.useState)(50),l=i.findIndex(e=>e.key===a),u=Math.min(Math.max(0,i.length-s),l<0?i.length:l),d=i.slice(u),f=d.find(e=>e.key===a)??d.at(-1),p=e.selectedSession?.truncation,m=f?.result,h=f?.message;return(0,V.jsxs)(`section`,{className:`conversation trajectory`,"aria-label":n(`trajectory`),children:[(0,V.jsxs)(`header`,{className:`trajectory-heading`,children:[(0,V.jsx)(`h2`,{children:n(`trajectory`)}),(0,V.jsx)(`p`,{children:n(`trajectoryScope`)}),t&&(0,V.jsx)(`p`,{role:`status`,children:n(`trajectoryRunning`)}),p?.truncated&&(0,V.jsx)(`p`,{className:`trajectory-warning`,children:n(`trajectoryTruncated`,{entries:p.entriesOmitted,parts:p.messagePartsOmitted,messages:p.messagesTruncated})})]}),i.length?(0,V.jsxs)(V.Fragment,{children:[(0,V.jsx)(`nav`,{className:`trajectory-overview`,"aria-label":n(`trajectoryOverview`),children:d.map((e,t)=>(0,V.jsx)(`button`,{type:`button`,"aria-label":`${n(`trajectory_${e.kind}`)} ${i.length-d.length+t+1}: ${e.title}`,"aria-pressed":e.key===f?.key,onClick:()=>o(e.key),className:`trajectory-point ${e.kind} ${e.outcome??``}`,children:(0,V.jsx)(`span`,{children:i.length-d.length+t+1})},e.key))}),(0,V.jsxs)(`div`,{className:`trajectory-body`,children:[(0,V.jsxs)(`div`,{className:`trajectory-ledger`,children:[u>0&&(0,V.jsx)(`button`,{type:`button`,className:`trajectory-load`,onClick:()=>c(e=>e+50),children:n(`trajectoryEarlier`,{count:u})}),(0,V.jsx)(`ol`,{start:i.length-d.length+1,children:d.map(e=>(0,V.jsx)(`li`,{children:(0,V.jsxs)(`button`,{type:`button`,"aria-pressed":e.key===f?.key,onClick:()=>o(e.key),className:`trajectory-record ${e.kind}`,children:[(0,V.jsx)(`span`,{className:`trajectory-kind`,children:n(`trajectory_${e.kind}`)}),(0,V.jsx)(`strong`,{children:e.title}),(0,V.jsx)(`span`,{className:`trajectory-preview`,children:(e.input??e.message?.content??e.result?.content??``).slice(0,110)}),e.outcome&&(0,V.jsx)(`span`,{children:n(`trajectory_${e.outcome}`)})]})},e.key))})]}),f&&(0,V.jsxs)(`section`,{className:`trajectory-inspector`,"aria-label":n(`trajectoryDetails`),children:[(0,V.jsx)(`h3`,{children:f.title}),f.timestamp&&(0,V.jsxs)(`p`,{className:`trajectory-metadata`,children:[n(`trajectoryRecordedAt`),`:`,` `,(0,V.jsx)(`time`,{children:f.timestamp})]}),f.callId&&(0,V.jsxs)(`p`,{className:`trajectory-metadata`,children:[`Tool call ID: `,f.callId]}),(h?.truncation||m?.truncation)&&(0,V.jsx)(`p`,{className:`trajectory-warning`,children:n(`trajectoryEvidenceTruncated`)}),f.input!==void 0&&(0,V.jsxs)(V.Fragment,{children:[(0,V.jsx)(`h4`,{children:n(`trajectoryArguments`)}),(0,V.jsx)(`pre`,{children:f.input})]}),h&&f.kind!==`call`&&(0,V.jsxs)(V.Fragment,{children:[(0,V.jsx)(`h4`,{children:n(`trajectoryRecordedContent`)}),(0,V.jsx)(`pre`,{children:h.content||n(`noOutput`)}),h.parts?.some(e=>e.type===`thinking`)&&(0,V.jsxs)(`details`,{children:[(0,V.jsx)(`summary`,{children:n(`trajectoryThinking`)}),(0,V.jsx)(`pre`,{children:h.parts.filter(e=>e.type===`thinking`).map(e=>e.text).join(`
`)})]},f.key)]}),(f.kind===`call`||f.kind===`result`)&&(0,V.jsxs)(V.Fragment,{children:[(0,V.jsx)(`h4`,{children:n(`trajectoryOutput`)}),(0,V.jsx)(`p`,{children:n(`trajectory_${f.outcome??`unknown`}`)}),m?(0,V.jsx)(`pre`,{children:m.content||n(`noOutput`)}):(0,V.jsx)(`p`,{children:n(`trajectoryMissingResult`)}),m?.details!==void 0&&(0,V.jsxs)(`details`,{children:[(0,V.jsx)(`summary`,{children:n(`trajectoryStructured`)}),(0,V.jsx)(`pre`,{children:JSON.stringify(m.details,null,2)})]})]}),f.kind===`event`&&!h&&(0,V.jsx)(`p`,{children:n(`trajectoryEventOnly`)})]})]})]}):(0,V.jsx)(`p`,{children:n(`trajectoryEmpty`)})]})}),sd=(0,w.createContext)(null);function cd(e,t){let n=t||{};return(e[e.length-1]===``?[...e,``]:e).join((n.padRight?` `:``)+`,`+(n.padLeft===!1?``:` `)).trim()}var ld=/^[$_\p{ID_Start}][$_\u{200C}\u{200D}\p{ID_Continue}]*$/u,ud=/^[$_\p{ID_Start}][-$_\u{200C}\u{200D}\p{ID_Continue}]*$/u,dd={};function fd(e,t){return((t||dd).jsx?ud:ld).test(e)}var pd=/[ \t\n\f\r]/g;function md(e){return typeof e==`object`?e.type===`text`&&hd(e.value):hd(e)}function hd(e){return e.replace(pd,``)===``}var gd=class{constructor(e,t,n){this.normal=t,this.property=e,n&&(this.space=n)}};gd.prototype.normal={},gd.prototype.property={},gd.prototype.space=void 0;function _d(e,t){let n={},r={};for(let t of e)Object.assign(n,t.property),Object.assign(r,t.normal);return new gd(n,r,t)}function vd(e){return e.toLowerCase()}var yd=class{constructor(e,t){this.attribute=t,this.property=e}};yd.prototype.attribute=``,yd.prototype.booleanish=!1,yd.prototype.boolean=!1,yd.prototype.commaOrSpaceSeparated=!1,yd.prototype.commaSeparated=!1,yd.prototype.defined=!1,yd.prototype.mustUseProperty=!1,yd.prototype.number=!1,yd.prototype.overloadedBoolean=!1,yd.prototype.property=``,yd.prototype.spaceSeparated=!1,yd.prototype.space=void 0;var bd=s({boolean:()=>J,booleanish:()=>Sd,commaOrSpaceSeparated:()=>Td,commaSeparated:()=>wd,number:()=>X,overloadedBoolean:()=>Y,spaceSeparated:()=>Cd}),xd=0,J=Ed(),Sd=Ed(),Y=Ed(),X=Ed(),Cd=Ed(),wd=Ed(),Td=Ed();function Ed(){return 2**++xd}var Dd=Object.keys(bd),Od=class extends yd{constructor(e,t,n,r){let i=-1;if(super(e,t),kd(this,`space`,r),typeof n==`number`)for(;++i4&&n.slice(0,4)===`data`&&Hd.test(t)){if(t.charAt(4)===`-`){let e=t.slice(5).replace(Vd,Gd);r=`data`+e.charAt(0).toUpperCase()+e.slice(1)}else{let e=t.slice(4);if(!Vd.test(e)){let n=e.replace(Bd,Wd);n.charAt(0)!==`-`&&(n=`-`+n),t=`data`+n}}i=Od}return new i(r,t)}function Wd(e){return`-`+e.toLowerCase()}function Gd(e){return e.charAt(1).toUpperCase()}var Kd=_d([jd,Pd,Id,Ld,Rd],`html`),qd=_d([jd,Fd,Id,Ld,Rd],`svg`);function Jd(e){return e.join(` `).trim()}var Yd=o(((e,t)=>{var n=/\/\*[^*]*\*+([^/*][^*]*\*+)*\//g,r=/\n/g,i=/^\s*/,a=/^(\*?[-#/*\\\w]+(\[[0-9a-z_-]+\])?)\s*/,o=/^:\s*/,s=/^((?:'(?:\\'|.)*?'|"(?:\\"|.)*?"|\([^)]*?\)|[^};])+)/,c=/^[;\s]*/,l=/^\s+|\s+$/g;function u(e,t){if(typeof e!=`string`)throw TypeError(`First argument must be a string`);if(!e)return[];t||={};var l=1,u=1;function f(e){var t=e.match(r);t&&(l+=t.length);var n=e.lastIndexOf(`
`);u=~n?e.length-n:u+e.length}function p(){var e={line:l,column:u};return function(t){return t.position=new m(e),_(),t}}function m(e){this.start=e,this.end={line:l,column:u},this.source=t.source}m.prototype.content=e;function h(n){var r=Error(t.source+`:`+l+`:`+u+`: `+n);if(r.reason=n,r.filename=t.source,r.line=l,r.column=u,r.source=e,!t.silent)throw r}function g(t){var n=t.exec(e);if(n){var r=n[0];return f(r),e=e.slice(r.length),n}}function _(){g(i)}function v(e){var t;for(e||=[];t=y();)t!==!1&&e.push(t);return e}function y(){var t=p();if(e.charAt(0)==`/`&&e.charAt(1)==`*`){for(var n=2;e.charAt(n)!=``&&(e.charAt(n)!=`*`||e.charAt(n+1)!=`/`);)++n;if(n+=2,e.charAt(n-1)===``)return h(`End of comment missing`);var r=e.slice(2,n-2);return u+=2,f(r),e=e.slice(n),u+=2,t({type:`comment`,comment:r})}}function b(){var e=p(),t=g(a);if(t){if(y(),!g(o))return h(`property missing ':'`);var r=g(s),i=e({type:`declaration`,property:d(t[0].replace(n,``)),value:r?d(r[0].replace(n,``)):``});return g(c),i}}function x(){var e=[];v(e);for(var t;t=b();)t!==!1&&(e.push(t),v(e));return e}return _(),x()}function d(e){return e?e.replace(l,``):``}t.exports=u})),Xd=o((e=>{var t=e&&e.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(e,"__esModule",{value:!0}),e.default=r;var n=t(Yd());function r(e,t){let r=null;if(!e||typeof e!=`string`)return r;let i=(0,n.default)(e),a=typeof t==`function`;return i.forEach(e=>{if(e.type!==`declaration`)return;let{property:n,value:i}=e;a?t(n,i,e):i&&(r||={},r[n]=i)}),r}})),Zd=o((e=>{Object.defineProperty(e,"__esModule",{value:!0}),e.camelCase=void 0;var t=/^--[a-zA-Z0-9_-]+$/,n=/-([a-z])/g,r=/^[^-]+$/,i=/^-(webkit|moz|ms|o|khtml)-/,a=/^-(ms)-/,o=function(e){return!e||r.test(e)||t.test(e)},s=function(e,t){return t.toUpperCase()},c=function(e,t){return`${t}-`};e.camelCase=function(e,t){return t===void 0&&(t={}),o(e)?e:(e=e.toLowerCase(),e=t.reactCompat?e.replace(a,c):e.replace(i,c),e.replace(n,s))}})),Qd=o(((e,t)=>{var n=(e&&e.__importDefault||function(e){return e&&e.__esModule?e:{default:e}})(Xd()),r=Zd();function i(e,t){var i={};return!e||typeof e!=`string`||(0,n.default)(e,function(e,n){e&&n&&(i[(0,r.camelCase)(e,t)]=n)}),i}i.default=i,t.exports=i})),$d=tf(`end`),ef=tf(`start`);function tf(e){return t;function t(t){let n=t&&t.position&&t.position[e]||{};if(typeof n.line==`number`&&n.line>0&&typeof n.column==`number`&&n.column>0)return{line:n.line,column:n.column,offset:typeof n.offset==`number`&&n.offset>-1?n.offset:void 0}}}function nf(e){let t=ef(e),n=$d(e);if(t&&n)return{start:t,end:n}}function rf(e){return!e||typeof e!=`object`?``:`position`in e||`type`in e?of(e.position):`start`in e||`end`in e?of(e):`line`in e||`column`in e?af(e):``}function af(e){return sf(e&&e.line)+`:`+sf(e&&e.column)}function of(e){return af(e&&e.start)+`-`+af(e&&e.end)}function sf(e){return e&&typeof e==`number`?e:1}var cf=class extends Error{constructor(e,t,n){super(),typeof t==`string`&&(n=t,t=void 0);let r=``,i={},a=!1;if(t&&(i=`line`in t&&`column`in t||`start`in t&&`end`in t?{place:t}:`type`in t?{ancestors:[t],place:t.position}:{...t}),typeof e==`string`?r=e:!i.cause&&e&&(a=!0,r=e.message,i.cause=e),!i.ruleId&&!i.source&&typeof n==`string`){let e=n.indexOf(`:`);e===-1?i.ruleId=n:(i.source=n.slice(0,e),i.ruleId=n.slice(e+1))}if(!i.place&&i.ancestors&&i.ancestors){let e=i.ancestors[i.ancestors.length-1];e&&(i.place=e.position)}let o=i.place&&`start`in i.place?i.place.start:i.place;this.ancestors=i.ancestors||void 0,this.cause=i.cause||void 0,this.column=o?o.column:void 0,this.fatal=void 0,this.file=``,this.message=r,this.line=o?o.line:void 0,this.name=rf(i.place)||`1:1`,this.place=i.place||void 0,this.reason=this.message,this.ruleId=i.ruleId||void 0,this.source=i.source||void 0,this.stack=a&&i.cause&&typeof i.cause.stack==`string`?i.cause.stack:``,this.actual=void 0,this.expected=void 0,this.note=void 0,this.url=void 0}};cf.prototype.file=``,cf.prototype.name=``,cf.prototype.reason=``,cf.prototype.message=``,cf.prototype.stack=``,cf.prototype.column=void 0,cf.prototype.line=void 0,cf.prototype.ancestors=void 0,cf.prototype.cause=void 0,cf.prototype.fatal=void 0,cf.prototype.place=void 0,cf.prototype.ruleId=void 0,cf.prototype.source=void 0;var lf=l(Qd(),1),uf={}.hasOwnProperty,df=new Map,ff=/[A-Z]/g,pf=new Set([`table`,`tbody`,`thead`,`tfoot`,`tr`]),mf=new Set([`td`,`th`]);function hf(e,t){if(!t||t.Fragment===void 0)throw TypeError("Expected `Fragment` in options");let n=t.filePath||void 0,r;if(t.development){if(typeof t.jsxDEV!=`function`)throw TypeError("Expected `jsxDEV` in options when `development: true`");r=Ef(n,t.jsxDEV)}else{if(typeof t.jsx!=`function`)throw TypeError("Expected `jsx` in production options");if(typeof t.jsxs!=`function`)throw TypeError("Expected `jsxs` in production options");r=Tf(n,t.jsx,t.jsxs)}let i={Fragment:t.Fragment,ancestors:[],components:t.components||{},create:r,elementAttributeNameCase:t.elementAttributeNameCase||`react`,evaluater:t.createEvaluater?t.createEvaluater():void 0,filePath:n,ignoreInvalidStyle:t.ignoreInvalidStyle||!1,passKeys:t.passKeys!==!1,passNode:t.passNode||!1,schema:t.space===`svg`?qd:Kd,stylePropertyNameCase:t.stylePropertyNameCase||`dom`,tableCellAlignToStyle:t.tableCellAlignToStyle!==!1},a=gf(i,e,void 0);return a&&typeof a!=`string`?a:i.create(e,i.Fragment,{children:a||void 0},void 0)}function gf(e,t,n){if(t.type===`element`)return _f(e,t,n);if(t.type===`mdxFlowExpression`||t.type===`mdxTextExpression`)return vf(e,t);if(t.type===`mdxJsxFlowElement`||t.type===`mdxJsxTextElement`)return bf(e,t,n);if(t.type===`mdxjsEsm`)return yf(e,t);if(t.type===`root`)return xf(e,t,n);if(t.type===`text`)return Sf(e,t)}function _f(e,t,n){let r=e.schema,i=r;t.tagName.toLowerCase()===`svg`&&r.space===`html`&&(i=qd,e.schema=i),e.ancestors.push(t);let a=Mf(e,t.tagName,!1),o=Df(e,t),s=kf(e,t);return pf.has(t.tagName)&&(s=s.filter(function(e){return typeof e!=`string`||!md(e)})),Cf(e,o,a,t),wf(o,s),e.ancestors.pop(),e.schema=r,e.create(t,a,o,n)}function vf(e,t){if(t.data&&t.data.estree&&e.evaluater){let n=t.data.estree.body[0];return n.type,e.evaluater.evaluateExpression(n.expression)}Nf(e,t.position)}function yf(e,t){if(t.data&&t.data.estree&&e.evaluater)return e.evaluater.evaluateProgram(t.data.estree);Nf(e,t.position)}function bf(e,t,n){let r=e.schema,i=r;t.name===`svg`&&r.space===`html`&&(i=qd,e.schema=i),e.ancestors.push(t);let a=t.name===null?e.Fragment:Mf(e,t.name,!0),o=Of(e,t),s=kf(e,t);return Cf(e,o,a,t),wf(o,s),e.ancestors.pop(),e.schema=r,e.create(t,a,o,n)}function xf(e,t,n){let r={};return wf(r,kf(e,t)),e.create(t,e.Fragment,r,n)}function Sf(e,t){return t.value}function Cf(e,t,n,r){typeof n!=`string`&&n!==e.Fragment&&e.passNode&&(t.node=r)}function wf(e,t){if(t.length>0){let n=t.length>1?t:t[0];n&&(e.children=n)}}function Tf(e,t,n){return r;function r(e,r,i,a){let o=Array.isArray(i.children)?n:t;return a?o(r,i,a):o(r,i)}}function Ef(e,t){return n;function n(n,r,i,a){let o=Array.isArray(i.children),s=ef(n);return t(r,i,a,o,{columnNumber:s?s.column-1:void 0,fileName:e,lineNumber:s?s.line:void 0},void 0)}}function Df(e,t){let n={},r,i;for(i in t.properties)if(i!==`children`&&uf.call(t.properties,i)){let a=Af(e,i,t.properties[i]);if(a){let[i,o]=a;e.tableCellAlignToStyle&&i===`align`&&typeof o==`string`&&mf.has(t.tagName)?r=o:n[i]=o}}if(r){let t=n.style||={};t[e.stylePropertyNameCase===`css`?`text-align`:`textAlign`]=r}return n}function Of(e,t){let n={};for(let r of t.attributes)if(r.type===`mdxJsxExpressionAttribute`)if(r.data&&r.data.estree&&e.evaluater){let t=r.data.estree.body[0];t.type;let i=t.expression;i.type;let a=i.properties[0];a.type,Object.assign(n,e.evaluater.evaluateExpression(a.argument))}else Nf(e,t.position);else{let i=r.name,a;if(r.value&&typeof r.value==`object`)if(r.value.data&&r.value.data.estree&&e.evaluater){let t=r.value.data.estree.body[0];t.type,a=e.evaluater.evaluateExpression(t.expression)}else Nf(e,t.position);else a=r.value===null||r.value;n[i]=a}return n}function kf(e,t){let n=[],r=-1,i=e.passKeys?new Map:df;for(;++ri?0:i+t:t>i?i:t,n=n>0?n:0,r.length<1e4)o=Array.from(r),o.unshift(t,n),e.splice(...o);else for(n&&e.splice(t,n);a0?(Gf(e,e.length,0,t),e):t}var qf={}.hasOwnProperty;function Jf(e){let t={},n=-1;for(;++n13&&n<32||n>126&&n<160||n>55295&&n<57344||n>64975&&n<65008||(n&65535)==65535||(n&65535)==65534||n>1114111?`�`:String.fromCodePoint(n)}function Qf(e){return e.replace(/[\t\n\r ]+/g,` `).replace(/^ | $/g,``).toLowerCase().toUpperCase()}var $f=lp(/[A-Za-z]/),ep=lp(/[\dA-Za-z]/),tp=lp(/[#-'*+\--9=?A-Z^-~]/);function np(e){return e!==null&&(e<32||e===127)}var rp=lp(/\d/),ip=lp(/[\dA-Fa-f]/),ap=lp(/[!-/:-@[-`{-~]/);function Z(e){return e!==null&&e<-2}function op(e){return e!==null&&(e<0||e===32)}function Q(e){return e===-2||e===-1||e===32}var sp=lp(/\p{P}|\p{S}/u),cp=lp(/\s/);function lp(e){return t;function t(t){return t!==null&&t>-1&&e.test(String.fromCharCode(t))}}function up(e){let t=[],n=-1,r=0,i=0;for(;++n55295&&a<57344){let t=e.charCodeAt(n+1);a<56320&&t>56319&&t<57344?(o=String.fromCharCode(a,t),i=1):o=`�`}else o=String.fromCharCode(a);o&&=(t.push(e.slice(r,n),encodeURIComponent(o)),r=n+i+1,``),i&&=(n+=i,0)}return t.join(``)+e.slice(r)}function $(e,t,n,r){let i=r?r-1:1/0,a=0;return o;function o(r){return Q(r)?(e.enter(n),s(r)):t(r)}function s(r){return Q(r)&&a++o))return;let n=t.events.length,a=n,s,c;for(;a--;)if(t.events[a][0]===`exit`&&t.events[a][1].type===`chunkFlow`){if(s){c=t.events[a][1].end;break}s=!0}for(_(r),e=n;er;){let r=n[i];t.containerState=r[1],r[0].exit.call(t,e)}n.length=r}function v(){i.write([null]),a=void 0,i=void 0,t.containerState._closeFlow=void 0}}function gp(e,t,n){return $(e,e.attempt(this.parser.constructs.document,t,n),`linePrefix`,this.parser.constructs.disable.null.includes(`codeIndented`)?void 0:4)}function _p(e){if(e===null||op(e)||cp(e))return 1;if(sp(e))return 2}function vp(e,t,n){let r=[],i=-1;for(;++i1&&e[n][1].end.offset-e[n][1].start.offset>1?2:1;let d={...e[r][1].end},f={...e[n][1].start};Sp(d,-c),Sp(f,c),o={type:c>1?`strongSequence`:`emphasisSequence`,start:d,end:{...e[r][1].end}},s={type:c>1?`strongSequence`:`emphasisSequence`,start:{...e[n][1].start},end:f},a={type:c>1?`strongText`:`emphasisText`,start:{...e[r][1].end},end:{...e[n][1].start}},i={type:c>1?`strong`:`emphasis`,start:{...o.start},end:{...s.end}},e[r][1].end={...o.start},e[n][1].start={...s.end},l=[],e[r][1].end.offset-e[r][1].start.offset&&(l=Kf(l,[[`enter`,e[r][1],t],[`exit`,e[r][1],t]])),l=Kf(l,[[`enter`,i,t],[`enter`,o,t],[`exit`,o,t],[`enter`,a,t]]),l=Kf(l,vp(t.parser.constructs.insideSpan.null,e.slice(r+1,n),t)),l=Kf(l,[[`exit`,a,t],[`enter`,s,t],[`exit`,s,t],[`exit`,i,t]]),e[n][1].end.offset-e[n][1].start.offset?(u=2,l=Kf(l,[[`enter`,e[n][1],t],[`exit`,e[n][1],t]])):u=0,Gf(e,r-1,n-r+3,l),n=r+l.length-u-2;break}}for(n=-1;++n0&&Q(t)?$(e,v,`linePrefix`,a+1)(t):v(t)}function v(t){return t===null||Z(t)?e.check(Fp,h,b)(t):(e.enter(`codeFlowValue`),y(t))}function y(t){return t===null||Z(t)?(e.exit(`codeFlowValue`),v(t)):(e.consume(t),y)}function b(n){return e.exit(`codeFenced`),t(n)}function x(e,t,n){let i=0;return a;function a(t){return e.enter(`lineEnding`),e.consume(t),e.exit(`lineEnding`),c}function c(t){return e.enter(`codeFencedFence`),Q(t)?$(e,l,`linePrefix`,r.parser.constructs.disable.null.includes(`codeIndented`)?void 0:4)(t):l(t)}function l(t){return t===s?(e.enter(`codeFencedFenceSequence`),u(t)):n(t)}function u(t){return t===s?(i++,e.consume(t),u):i>=o?(e.exit(`codeFencedFenceSequence`),Q(t)?$(e,d,`whitespace`)(t):d(t)):n(t)}function d(r){return r===null||Z(r)?(e.exit(`codeFencedFence`),t(r)):n(r)}}}function Rp(e,t,n){let r=this;return i;function i(t){return t===null?n(t):(e.enter(`lineEnding`),e.consume(t),e.exit(`lineEnding`),a)}function a(e){return r.parser.lazy[r.now().line]?n(e):t(e)}}var zp={name:`codeIndented`,tokenize:Vp},Bp={partial:!0,tokenize:Hp};function Vp(e,t,n){let r=this;return i;function i(t){return e.enter(`codeIndented`),$(e,a,`linePrefix`,5)(t)}function a(e){let t=r.events[r.events.length-1];return t&&t[1].type===`linePrefix`&&t[2].sliceSerialize(t[1],!0).length>=4?o(e):n(e)}function o(t){return t===null?c(t):Z(t)?e.attempt(Bp,o,c)(t):(e.enter(`codeFlowValue`),s(t))}function s(t){return t===null||Z(t)?(e.exit(`codeFlowValue`),o(t)):(e.consume(t),s)}function c(n){return e.exit(`codeIndented`),t(n)}}function Hp(e,t,n){let r=this;return i;function i(t){return r.parser.lazy[r.now().line]?n(t):Z(t)?(e.enter(`lineEnding`),e.consume(t),e.exit(`lineEnding`),i):$(e,a,`linePrefix`,5)(t)}function a(e){let a=r.events[r.events.length-1];return a&&a[1].type===`linePrefix`&&a[2].sliceSerialize(a[1],!0).length>=4?t(e):Z(e)?i(e):n(e)}}var Up={name:`codeText`,previous:Gp,resolve:Wp,tokenize:Kp};function Wp(e){let t=e.length-4,n=3,r,i;if((e[n][1].type===`lineEnding`||e[n][1].type===`space`)&&(e[t][1].type===`lineEnding`||e[t][1].type===`space`)){for(r=n;++r=this.left.length+this.right.length)throw RangeError("Cannot access index `"+e+"` in a splice buffer of size `"+(this.left.length+this.right.length)+"`");return ethis.left.length?this.right.slice(this.right.length-n+this.left.length,this.right.length-e+this.left.length).reverse():this.left.slice(e).concat(this.right.slice(this.right.length-n+this.left.length).reverse())}splice(e,t,n){let r=t||0;this.setCursor(Math.trunc(e));let i=this.right.splice(this.right.length-r,1/0);return n&&Jp(this.left,n),i.reverse()}pop(){return this.setCursor(1/0),this.left.pop()}push(e){this.setCursor(1/0),this.left.push(e)}pushMany(e){this.setCursor(1/0),Jp(this.left,e)}unshift(e){this.setCursor(0),this.right.push(e)}unshiftMany(e){this.setCursor(0),Jp(this.right,e.reverse())}setCursor(e){if(!(e===this.left.length||e>this.left.length&&this.right.length===0||e<0&&this.left.length===0))if(e=4?t(i):e.interrupt(r.parser.constructs.flow,n,t)(i)}}function nm(e,t,n,r,i,a,o,s,c){let l=c||1/0,u=0;return d;function d(t){return t===60?(e.enter(r),e.enter(i),e.enter(a),e.consume(t),e.exit(a),f):t===null||t===32||t===41||np(t)?n(t):(e.enter(r),e.enter(o),e.enter(s),e.enter(`chunkString`,{contentType:`string`}),h(t))}function f(n){return n===62?(e.enter(a),e.consume(n),e.exit(a),e.exit(i),e.exit(r),t):(e.enter(s),e.enter(`chunkString`,{contentType:`string`}),p(n))}function p(t){return t===62?(e.exit(`chunkString`),e.exit(s),f(t)):t===null||t===60||Z(t)?n(t):(e.consume(t),t===92?m:p)}function m(t){return t===60||t===62||t===92?(e.consume(t),p):p(t)}function h(i){return!u&&(i===null||i===41||op(i))?(e.exit(`chunkString`),e.exit(s),e.exit(o),e.exit(r),t(i)):u999||l===null||l===91||l===93&&!c||l===94&&!s&&`_hiddenFootnoteSupport`in o.parser.constructs?n(l):l===93?(e.exit(a),e.enter(i),e.consume(l),e.exit(i),e.exit(r),t):Z(l)?(e.enter(`lineEnding`),e.consume(l),e.exit(`lineEnding`),u):(e.enter(`chunkString`,{contentType:`string`}),d(l))}function d(t){return t===null||t===91||t===93||Z(t)||s++>999?(e.exit(`chunkString`),u(t)):(e.consume(t),c||=!Q(t),t===92?f:d)}function f(t){return t===91||t===92||t===93?(e.consume(t),s++,d):d(t)}}function im(e,t,n,r,i,a){let o;return s;function s(t){return t===34||t===39||t===40?(e.enter(r),e.enter(i),e.consume(t),e.exit(i),o=t===40?41:t,c):n(t)}function c(n){return n===o?(e.enter(i),e.consume(n),e.exit(i),e.exit(r),t):(e.enter(a),l(n))}function l(t){return t===o?(e.exit(a),c(o)):t===null?n(t):Z(t)?(e.enter(`lineEnding`),e.consume(t),e.exit(`lineEnding`),$(e,l,`linePrefix`)):(e.enter(`chunkString`,{contentType:`string`}),u(t))}function u(t){return t===o||t===null||Z(t)?(e.exit(`chunkString`),l(t)):(e.consume(t),t===92?d:u)}function d(t){return t===o||t===92?(e.consume(t),u):u(t)}}function am(e,t){let n;return r;function r(i){return Z(i)?(e.enter(`lineEnding`),e.consume(i),e.exit(`lineEnding`),n=!0,r):Q(i)?$(e,r,n?`linePrefix`:`lineSuffix`)(i):t(i)}}var om={name:`definition`,tokenize:cm},sm={partial:!0,tokenize:lm};function cm(e,t,n){let r=this,i;return a;function a(t){return e.enter(`definition`),o(t)}function o(t){return rm.call(r,e,s,n,`definitionLabel`,`definitionLabelMarker`,`definitionLabelString`)(t)}function s(t){return i=Qf(r.sliceSerialize(r.events[r.events.length-1][1]).slice(1,-1)),t===58?(e.enter(`definitionMarker`),e.consume(t),e.exit(`definitionMarker`),c):n(t)}function c(t){return op(t)?am(e,l)(t):l(t)}function l(t){return nm(e,u,n,`definitionDestination`,`definitionDestinationLiteral`,`definitionDestinationLiteralMarker`,`definitionDestinationRaw`,`definitionDestinationString`)(t)}function u(t){return e.attempt(sm,d,d)(t)}function d(t){return Q(t)?$(e,f,`whitespace`)(t):f(t)}function f(a){return a===null||Z(a)?(e.exit(`definition`),r.parser.defined.push(i),t(a)):n(a)}}function lm(e,t,n){return r;function r(t){return op(t)?am(e,i)(t):n(t)}function i(t){return im(e,a,n,`definitionTitle`,`definitionTitleMarker`,`definitionTitleString`)(t)}function a(t){return Q(t)?$(e,o,`whitespace`)(t):o(t)}function o(e){return e===null||Z(e)?t(e):n(e)}}var um={name:`hardBreakEscape`,tokenize:dm};function dm(e,t,n){return r;function r(t){return e.enter(`hardBreakEscape`),e.consume(t),i}function i(r){return Z(r)?(e.exit(`hardBreakEscape`),t(r)):n(r)}}var fm={name:`headingAtx`,resolve:pm,tokenize:mm};function pm(e,t){let n=e.length-2,r=3,i,a;return e[r][1].type===`whitespace`&&(r+=2),n-2>r&&e[n][1].type===`whitespace`&&(n-=2),e[n][1].type===`atxHeadingSequence`&&(r===n-1||n-4>r&&e[n-2][1].type===`whitespace`)&&(n-=r+1===n?2:4),n>r&&(i={type:`atxHeadingText`,start:e[r][1].start,end:e[n][1].end},a={type:`chunkText`,start:e[r][1].start,end:e[n][1].end,contentType:`text`},Gf(e,r,n-r+1,[[`enter`,i,t],[`enter`,a,t],[`exit`,a,t],[`exit`,i,t]])),e}function mm(e,t,n){let r=0;return i;function i(t){return e.enter(`atxHeading`),a(t)}function a(t){return e.enter(`atxHeadingSequence`),o(t)}function o(t){return t===35&&r++<6?(e.consume(t),o):t===null||op(t)?(e.exit(`atxHeadingSequence`),s(t)):n(t)}function s(n){return n===35?(e.enter(`atxHeadingSequence`),c(n)):n===null||Z(n)?(e.exit(`atxHeading`),t(n)):Q(n)?$(e,s,`whitespace`)(n):(e.enter(`atxHeadingText`),l(n))}function c(t){return t===35?(e.consume(t),c):(e.exit(`atxHeadingSequence`),s(t))}function l(t){return t===null||t===35||op(t)?(e.exit(`atxHeadingText`),s(t)):(e.consume(t),l)}}var hm=`address.article.aside.base.basefont.blockquote.body.caption.center.col.colgroup.dd.details.dialog.dir.div.dl.dt.fieldset.figcaption.figure.footer.form.frame.frameset.h1.h2.h3.h4.h5.h6.head.header.hr.html.iframe.legend.li.link.main.menu.menuitem.nav.noframes.ol.optgroup.option.p.param.search.section.summary.table.tbody.td.tfoot.th.thead.title.tr.track.ul`.split(`.`),gm=[`pre`,`script`,`style`,`textarea`],_m={concrete:!0,name:`htmlFlow`,resolveTo:bm,tokenize:xm},vm={partial:!0,tokenize:Cm},ym={partial:!0,tokenize:Sm};function bm(e){let t=e.length;for(;t--&&(e[t][0]!==`enter`||e[t][1].type!==`htmlFlow`););return t>1&&e[t-2][1].type===`linePrefix`&&(e[t][1].start=e[t-2][1].start,e[t+1][1].start=e[t-2][1].start,e.splice(t-2,2)),e}function xm(e,t,n){let r=this,i,a,o,s,c;return l;function l(e){return u(e)}function u(t){return e.enter(`htmlFlow`),e.enter(`htmlFlowData`),e.consume(t),d}function d(s){return s===33?(e.consume(s),f):s===47?(e.consume(s),a=!0,h):s===63?(e.consume(s),i=3,r.interrupt?t:F):$f(s)?(e.consume(s),o=String.fromCharCode(s),g):n(s)}function f(a){return a===45?(e.consume(a),i=2,p):a===91?(e.consume(a),i=5,s=0,m):$f(a)?(e.consume(a),i=4,r.interrupt?t:F):n(a)}function p(i){return i===45?(e.consume(i),r.interrupt?t:F):n(i)}function m(i){return i===`CDATA[`.charCodeAt(s++)?(e.consume(i),s===6?r.interrupt?t:O:m):n(i)}function h(t){return $f(t)?(e.consume(t),o=String.fromCharCode(t),g):n(t)}function g(s){if(s===null||s===47||s===62||op(s)){let c=s===47,l=o.toLowerCase();return!c&&!a&&gm.includes(l)?(i=1,r.interrupt?t(s):O(s)):hm.includes(o.toLowerCase())?(i=6,c?(e.consume(s),_):r.interrupt?t(s):O(s)):(i=7,r.interrupt&&!r.parser.lazy[r.now().line]?n(s):a?v(s):y(s))}return s===45||ep(s)?(e.consume(s),o+=String.fromCharCode(s),g):n(s)}function _(i){return i===62?(e.consume(i),r.interrupt?t:O):n(i)}function v(t){return Q(t)?(e.consume(t),v):E(t)}function y(t){return t===47?(e.consume(t),E):t===58||t===95||$f(t)?(e.consume(t),b):Q(t)?(e.consume(t),y):E(t)}function b(t){return t===45||t===46||t===58||t===95||ep(t)?(e.consume(t),b):x(t)}function x(t){return t===61?(e.consume(t),S):Q(t)?(e.consume(t),x):y(t)}function S(t){return t===null||t===60||t===61||t===62||t===96?n(t):t===34||t===39?(e.consume(t),c=t,C):Q(t)?(e.consume(t),S):w(t)}function C(t){return t===c?(e.consume(t),c=null,T):t===null||Z(t)?n(t):(e.consume(t),C)}function w(t){return t===null||t===34||t===39||t===47||t===60||t===61||t===62||t===96||op(t)?x(t):(e.consume(t),w)}function T(e){return e===47||e===62||Q(e)?y(e):n(e)}function E(t){return t===62?(e.consume(t),D):n(t)}function D(t){return t===null||Z(t)?O(t):Q(t)?(e.consume(t),D):n(t)}function O(t){return t===45&&i===2?(e.consume(t),M):t===60&&i===1?(e.consume(t),N):t===62&&i===4?(e.consume(t),I):t===63&&i===3?(e.consume(t),F):t===93&&i===5?(e.consume(t),ee):Z(t)&&(i===6||i===7)?(e.exit(`htmlFlowData`),e.check(vm,L,k)(t)):t===null||Z(t)?(e.exit(`htmlFlowData`),k(t)):(e.consume(t),O)}function k(t){return e.check(ym,A,L)(t)}function A(t){return e.enter(`lineEnding`),e.consume(t),e.exit(`lineEnding`),j}function j(t){return t===null||Z(t)?k(t):(e.enter(`htmlFlowData`),O(t))}function M(t){return t===45?(e.consume(t),F):O(t)}function N(t){return t===47?(e.consume(t),o=``,P):O(t)}function P(t){if(t===62){let n=o.toLowerCase();return gm.includes(n)?(e.consume(t),I):O(t)}return $f(t)&&o.length<8?(e.consume(t),o+=String.fromCharCode(t),P):O(t)}function ee(t){return t===93?(e.consume(t),F):O(t)}function F(t){return t===62?(e.consume(t),I):t===45&&i===2?(e.consume(t),F):O(t)}function I(t){return t===null||Z(t)?(e.exit(`htmlFlowData`),L(t)):(e.consume(t),I)}function L(n){return e.exit(`htmlFlow`),t(n)}}function Sm(e,t,n){let r=this;return i;function i(t){return Z(t)?(e.enter(`lineEnding`),e.consume(t),e.exit(`lineEnding`),a):n(t)}function a(e){return r.parser.lazy[r.now().line]?n(e):t(e)}}function Cm(e,t,n){return r;function r(r){return e.enter(`lineEnding`),e.consume(r),e.exit(`lineEnding`),e.attempt(Tp,t,n)}}var wm={name:`htmlText`,tokenize:Tm};function Tm(e,t,n){let r=this,i,a,o;return s;function s(t){return e.enter(`htmlText`),e.enter(`htmlTextData`),e.consume(t),c}function c(t){return t===33?(e.consume(t),l):t===47?(e.consume(t),x):t===63?(e.consume(t),y):$f(t)?(e.consume(t),w):n(t)}function l(t){return t===45?(e.consume(t),u):t===91?(e.consume(t),a=0,m):$f(t)?(e.consume(t),v):n(t)}function u(t){return t===45?(e.consume(t),p):n(t)}function d(t){return t===null?n(t):t===45?(e.consume(t),f):Z(t)?(o=d,N(t)):(e.consume(t),d)}function f(t){return t===45?(e.consume(t),p):d(t)}function p(e){return e===62?M(e):e===45?f(e):d(e)}function m(t){return t===`CDATA[`.charCodeAt(a++)?(e.consume(t),a===6?h:m):n(t)}function h(t){return t===null?n(t):t===93?(e.consume(t),g):Z(t)?(o=h,N(t)):(e.consume(t),h)}function g(t){return t===93?(e.consume(t),_):h(t)}function _(t){return t===62?M(t):t===93?(e.consume(t),_):h(t)}function v(t){return t===null||t===62?M(t):Z(t)?(o=v,N(t)):(e.consume(t),v)}function y(t){return t===null?n(t):t===63?(e.consume(t),b):Z(t)?(o=y,N(t)):(e.consume(t),y)}function b(e){return e===62?M(e):y(e)}function x(t){return $f(t)?(e.consume(t),S):n(t)}function S(t){return t===45||ep(t)?(e.consume(t),S):C(t)}function C(t){return Z(t)?(o=C,N(t)):Q(t)?(e.consume(t),C):M(t)}function w(t){return t===45||ep(t)?(e.consume(t),w):t===47||t===62||op(t)?T(t):n(t)}function T(t){return t===47?(e.consume(t),M):t===58||t===95||$f(t)?(e.consume(t),E):Z(t)?(o=T,N(t)):Q(t)?(e.consume(t),T):M(t)}function E(t){return t===45||t===46||t===58||t===95||ep(t)?(e.consume(t),E):D(t)}function D(t){return t===61?(e.consume(t),O):Z(t)?(o=D,N(t)):Q(t)?(e.consume(t),D):T(t)}function O(t){return t===null||t===60||t===61||t===62||t===96?n(t):t===34||t===39?(e.consume(t),i=t,k):Z(t)?(o=O,N(t)):Q(t)?(e.consume(t),O):(e.consume(t),A)}function k(t){return t===i?(e.consume(t),i=void 0,j):t===null?n(t):Z(t)?(o=k,N(t)):(e.consume(t),k)}function A(t){return t===null||t===34||t===39||t===60||t===61||t===96?n(t):t===47||t===62||op(t)?T(t):(e.consume(t),A)}function j(e){return e===47||e===62||op(e)?T(e):n(e)}function M(r){return r===62?(e.consume(r),e.exit(`htmlTextData`),e.exit(`htmlText`),t):n(r)}function N(t){return e.exit(`htmlTextData`),e.enter(`lineEnding`),e.consume(t),e.exit(`lineEnding`),P}function P(t){return Q(t)?$(e,ee,`linePrefix`,r.parser.constructs.disable.null.includes(`codeIndented`)?void 0:4)(t):ee(t)}function ee(t){return e.enter(`htmlTextData`),o(t)}}var Em={name:`labelEnd`,resolveAll:Am,resolveTo:jm,tokenize:Mm},Dm={tokenize:Nm},Om={tokenize:Pm},km={tokenize:Fm};function Am(e){let t=-1,n=[];for(;++t=3&&(a===null||Z(a))?(e.exit(`thematicBreak`),t(a)):n(a)}function c(t){return t===i?(e.consume(t),r++,c):(e.exit(`thematicBreakSequence`),Q(t)?$(e,s,`whitespace`)(t):s(t))}}var Wm={continuation:{tokenize:Jm},exit:Xm,name:`list`,tokenize:qm},Gm={partial:!0,tokenize:Zm},Km={partial:!0,tokenize:Ym};function qm(e,t,n){let r=this,i=r.events[r.events.length-1],a=i&&i[1].type===`linePrefix`?i[2].sliceSerialize(i[1],!0).length:0,o=0;return s;function s(t){let i=r.containerState.type||(t===42||t===43||t===45?`listUnordered`:`listOrdered`);if(i===`listUnordered`?!r.containerState.marker||t===r.containerState.marker:rp(t)){if(r.containerState.type||(r.containerState.type=i,e.enter(i,{_container:!0})),i===`listUnordered`)return e.enter(`listItemPrefix`),t===42||t===45?e.check(Hm,n,l)(t):l(t);if(!r.interrupt||t===49)return e.enter(`listItemPrefix`),e.enter(`listItemValue`),c(t)}return n(t)}function c(t){return rp(t)&&++o<10?(e.consume(t),c):(!r.interrupt||o<2)&&(r.containerState.marker?t===r.containerState.marker:t===41||t===46)?(e.exit(`listItemValue`),l(t)):n(t)}function l(t){return e.enter(`listItemMarker`),e.consume(t),e.exit(`listItemMarker`),r.containerState.marker=r.containerState.marker||t,e.check(Tp,r.interrupt?n:u,e.attempt(Gm,f,d))}function u(e){return r.containerState.initialBlankLine=!0,a++,f(e)}function d(t){return Q(t)?(e.enter(`listItemPrefixWhitespace`),e.consume(t),e.exit(`listItemPrefixWhitespace`),f):n(t)}function f(n){return r.containerState.size=a+r.sliceSerialize(e.exit(`listItemPrefix`),!0).length,t(n)}}function Jm(e,t,n){let r=this;return r.containerState._closeFlow=void 0,e.check(Tp,i,a);function i(n){return r.containerState.furtherBlankLines=r.containerState.furtherBlankLines||r.containerState.initialBlankLine,$(e,t,`listItemIndent`,r.containerState.size+1)(n)}function a(n){return r.containerState.furtherBlankLines||!Q(n)?(r.containerState.furtherBlankLines=void 0,r.containerState.initialBlankLine=void 0,o(n)):(r.containerState.furtherBlankLines=void 0,r.containerState.initialBlankLine=void 0,e.attempt(Km,t,o)(n))}function o(i){return r.containerState._closeFlow=!0,r.interrupt=void 0,$(e,e.attempt(Wm,t,n),`linePrefix`,r.parser.constructs.disable.null.includes(`codeIndented`)?void 0:4)(i)}}function Ym(e,t,n){let r=this;return $(e,i,`listItemIndent`,r.containerState.size+1);function i(e){let i=r.events[r.events.length-1];return i&&i[1].type===`listItemIndent`&&i[2].sliceSerialize(i[1],!0).length===r.containerState.size?t(e):n(e)}}function Xm(e){e.exit(this.containerState.type)}function Zm(e,t,n){let r=this;return $(e,i,`listItemPrefixWhitespace`,r.parser.constructs.disable.null.includes(`codeIndented`)?void 0:5);function i(e){let i=r.events[r.events.length-1];return!Q(e)&&i&&i[1].type===`listItemPrefixWhitespace`?t(e):n(e)}}var Qm={name:`setextUnderline`,resolveTo:$m,tokenize:eh};function $m(e,t){let n=e.length,r,i,a;for(;n--;)if(e[n][0]===`enter`){if(e[n][1].type===`content`){r=n;break}e[n][1].type===`paragraph`&&(i=n)}else e[n][1].type===`content`&&e.splice(n,1),!a&&e[n][1].type===`definition`&&(a=n);let o={type:`setextHeading`,start:{...e[r][1].start},end:{...e[e.length-1][1].end}};return e[i][1].type=`setextHeadingText`,a?(e.splice(i,0,[`enter`,o,t]),e.splice(a+1,0,[`exit`,e[r][1],t]),e[r][1].end={...e[a][1].end}):e[r][1]=o,e.push([`exit`,o,t]),e}function eh(e,t,n){let r=this,i;return a;function a(t){let a=r.events.length,s;for(;a--;)if(r.events[a][1].type!==`lineEnding`&&r.events[a][1].type!==`linePrefix`&&r.events[a][1].type!==`content`){s=r.events[a][1].type===`paragraph`;break}return!r.parser.lazy[r.now().line]&&(r.interrupt||s)?(e.enter(`setextHeadingLine`),i=t,o(t)):n(t)}function o(t){return e.enter(`setextHeadingLineSequence`),s(t)}function s(t){return t===i?(e.consume(t),s):(e.exit(`setextHeadingLineSequence`),Q(t)?$(e,c,`lineSuffix`)(t):c(t))}function c(r){return r===null||Z(r)?(e.exit(`setextHeadingLine`),t(r)):n(r)}}var th={tokenize:nh};function nh(e){let t=this,n=e.attempt(Tp,r,e.attempt(this.parser.constructs.flowInitial,i,$(e,e.attempt(this.parser.constructs.flow,i,e.attempt(Zp,i)),`linePrefix`)));return n;function r(r){if(r===null){e.consume(r);return}return e.enter(`lineEndingBlank`),e.consume(r),e.exit(`lineEndingBlank`),t.currentConstruct=void 0,n}function i(r){if(r===null){e.consume(r);return}return e.enter(`lineEnding`),e.consume(r),e.exit(`lineEnding`),t.currentConstruct=void 0,n}}var rh={resolveAll:sh()},ih=oh(`string`),ah=oh(`text`);function oh(e){return{resolveAll:sh(e===`text`?ch:void 0),tokenize:t};function t(t){let n=this,r=this.parser.constructs[e],i=t.attempt(r,a,o);return a;function a(e){return c(e)?i(e):o(e)}function o(e){if(e===null){t.consume(e);return}return t.enter(`data`),t.consume(e),s}function s(e){return c(e)?(t.exit(`data`),i(e)):(t.consume(e),s)}function c(e){if(e===null)return!0;let t=r[e],i=-1;if(t)for(;++i_h,contentInitial:()=>dh,disable:()=>vh,document:()=>uh,flow:()=>ph,flowInitial:()=>fh,insideSpan:()=>gh,string:()=>mh,text:()=>hh}),uh={42:Wm,43:Wm,45:Wm,48:Wm,49:Wm,50:Wm,51:Wm,52:Wm,53:Wm,54:Wm,55:Wm,56:Wm,57:Wm,62:Dp},dh={91:om},fh={[-2]:zp,[-1]:zp,32:zp},ph={35:fm,42:Hm,45:[Qm,Hm],60:_m,61:Qm,95:Hm,96:Ip,126:Ip},mh={38:Np,92:jp},hh={[-5]:Bm,[-4]:Bm,[-3]:Bm,33:Im,38:Np,42:yp,60:[Cp,wm],91:Rm,92:[um,jp],93:Em,95:yp,96:Up},gh={null:[yp,rh]},_h={null:[42,95]},vh={null:[]};function yh(e,t,n){let r={_bufferIndex:-1,_index:0,line:n&&n.line||1,column:n&&n.column||1,offset:n&&n.offset||0},i={},a=[],o=[],s=[],c={attempt:C(x),check:C(S),consume:v,enter:y,exit:b,interrupt:C(S,{interrupt:!0})},l={code:null,containerState:{},defineSkip:h,events:[],now:m,parser:e,previous:null,sliceSerialize:f,sliceStream:p,write:d},u=t.tokenize.call(l,c);return t.resolveAll&&a.push(t),l;function d(e){return o=Kf(o,e),g(),o[o.length-1]===null?(w(t,0),l.events=vp(a,l.events,l),l.events):[]}function f(e,t){return xh(p(e),t)}function p(e){return bh(o,e)}function m(){let{_bufferIndex:e,_index:t,line:n,column:i,offset:a}=r;return{_bufferIndex:e,_index:t,line:n,column:i,offset:a}}function h(e){i[e.line]=e.column,E()}function g(){let e;for(;r._index-1){let e=o[0];typeof e==`string`?o[0]=e.slice(r):o.shift()}a>0&&o.push(e[i].slice(0,a))}return o}function xh(e,t){let n=-1,r=[],i;for(;++n`,...c.current()})),l+=c.move(`>`)):(s=n.enter(`destinationRaw`),l+=c.move(n.safe(e.url,{before:l,after:e.title?` `:`)`,...c.current()}))),s(),e.title&&(s=n.enter(`title${a}`),l+=c.move(` `+i),l+=c.move(n.safe(e.title,{before:l,after:i,...c.current()})),l+=c.move(i),s()),l+=c.move(`)`),o(),l}function ky(){return`!`}Ay.peek=jy;function Ay(e,t,n,r){let i=e.referenceType,a=n.enter(`imageReference`),o=n.enter(`label`),s=n.createTracker(r),c=s.move(`![`),l=n.safe(e.alt,{before:c,after:`]`,...s.current()});c+=s.move(l+`][`),o();let u=n.stack;n.stack=[],o=n.enter(`reference`);let d=n.safe(n.associationId(e),{before:c,after:`]`,...s.current()});return o(),n.stack=u,a(),i===`full`||!l||l!==d?c+=s.move(d+`]`):i===`shortcut`?c=c.slice(0,-1):c+=s.move(`]`),c}function jy(){return`!`}My.peek=Ny;function My(e,t,n){let r=e.value||``,i="`",a=-1;for(;RegExp("(^|[^`])"+i+"([^`]|$)").test(r);)i+="`";for(/[^ \r\n]/.test(r)&&(/^[ \r\n]/.test(r)&&/[ \r\n]$/.test(r)||/^`|`$/.test(r))&&(r=` `+r+` `);++a\u007F]/.test(e.url))}Fy.peek=Iy;function Fy(e,t,n,r){let i=_y(n),a=i===`"`?`Quote`:`Apostrophe`,o=n.createTracker(r),s,c;if(Py(e,n)){let t=n.stack;n.stack=[],s=n.enter(`autolink`);let r=o.move(`<`);return r+=o.move(n.containerPhrasing(e,{before:r,after:`>`,...o.current()})),r+=o.move(`>`),s(),n.stack=t,r}s=n.enter(`link`),c=n.enter(`label`);let l=o.move(`[`);return l+=o.move(n.containerPhrasing(e,{before:l,after:`](`,...o.current()})),l+=o.move(`](`),c(),!e.url&&e.title||/[\0- \u007F]/.test(e.url)?(c=n.enter(`destinationLiteral`),l+=o.move(`<`),l+=o.move(n.safe(e.url,{before:l,after:`>`,...o.current()})),l+=o.move(`>`)):(c=n.enter(`destinationRaw`),l+=o.move(n.safe(e.url,{before:l,after:e.title?` `:`)`,...o.current()}))),c(),e.title&&(c=n.enter(`title${a}`),l+=o.move(` `+i),l+=o.move(n.safe(e.title,{before:l,after:i,...o.current()})),l+=o.move(i),c()),l+=o.move(`)`),s(),l}function Iy(e,t,n){return Py(e,n)?`<`:`[`}Ly.peek=Ry;function Ly(e,t,n,r){let i=e.referenceType,a=n.enter(`linkReference`),o=n.enter(`label`),s=n.createTracker(r),c=s.move(`[`),l=n.containerPhrasing(e,{before:c,after:`]`,...s.current()});c+=s.move(l+`][`),o();let u=n.stack;n.stack=[],o=n.enter(`reference`);let d=n.safe(n.associationId(e),{before:c,after:`]`,...s.current()});return o(),n.stack=u,a(),i===`full`||!l||l!==d?c+=s.move(d+`]`):i===`shortcut`?c=c.slice(0,-1):c+=s.move(`]`),c}function Ry(){return`[`}function zy(e){let t=e.options.bullet||`*`;if(t!==`*`&&t!==`+`&&t!==`-`)throw Error("Cannot serialize items with `"+t+"` for `options.bullet`, expected `*`, `+`, or `-`");return t}function By(e){let t=zy(e),n=e.options.bulletOther;if(!n)return t===`*`?`-`:`*`;if(n!==`*`&&n!==`+`&&n!==`-`)throw Error("Cannot serialize items with `"+n+"` for `options.bulletOther`, expected `*`, `+`, or `-`");if(n===t)throw Error("Expected `bullet` (`"+t+"`) and `bulletOther` (`"+n+"`) to be different");return n}function Vy(e){let t=e.options.bulletOrdered||`.`;if(t!==`.`&&t!==`)`)throw Error("Cannot serialize items with `"+t+"` for `options.bulletOrdered`, expected `.` or `)`");return t}function Hy(e){let t=e.options.rule||`*`;if(t!==`*`&&t!==`-`&&t!==`_`)throw Error("Cannot serialize rules with `"+t+"` for `options.rule`, expected `*`, `-`, or `_`");return t}function Uy(e,t,n,r){let i=n.enter(`list`),a=n.bulletCurrent,o=e.ordered?Vy(n):zy(n),s=e.ordered?o===`.`?`)`:`.`:By(n),c=t&&n.bulletLastUsed?o===n.bulletLastUsed:!1;if(!e.ordered){let t=e.children?e.children[0]:void 0;if((o===`*`||o===`-`)&&t&&(!t.children||!t.children[0])&&n.stack[n.stack.length-1]===`list`&&n.stack[n.stack.length-2]===`listItem`&&n.stack[n.stack.length-3]===`list`&&n.stack[n.stack.length-4]===`listItem`&&n.indexStack[n.indexStack.length-1]===0&&n.indexStack[n.indexStack.length-2]===0&&n.indexStack[n.indexStack.length-3]===0&&(c=!0),Hy(n)===o&&t){let t=-1;for(;++t-1?t.start:1)+(n.options.incrementListMarker===!1?0:t.children.indexOf(e))+a);let o=a.length+1;(i===`tab`||i===`mixed`&&(t&&t.type===`list`&&t.spread||e.spread))&&(o=Math.ceil(o/4)*4);let s=n.createTracker(r);s.move(a+` `.repeat(o-a.length)),s.shift(o);let c=n.enter(`listItem`),l=n.indentLines(n.containerFlow(e,s.current()),u);return c(),l;function u(e,t,n){return t?(n?``:` `.repeat(o))+e:(n?a:a+` `.repeat(o-a.length))+e}}function Ky(e,t,n,r){let i=n.enter(`paragraph`),a=n.enter(`phrasing`),o=n.containerPhrasing(e,r);return a(),i(),o}var qy=Mg([`break`,`delete`,`emphasis`,`footnote`,`footnoteReference`,`image`,`imageReference`,`inlineCode`,`inlineMath`,`link`,`linkReference`,`mdxJsxTextElement`,`mdxTextExpression`,`strong`,`text`,`textDirective`]);function Jy(e,t,n,r){return(e.children.some(function(e){return qy(e)})?n.containerPhrasing:n.containerFlow).call(n,e,r)}function Yy(e){let t=e.options.strong||`*`;if(t!==`*`&&t!==`_`)throw Error("Cannot serialize strong with `"+t+"` for `options.strong`, expected `*`, or `_`");return t}Xy.peek=Zy;function Xy(e,t,n,r){let i=Yy(n),a=n.enter(`strong`),o=n.createTracker(r),s=o.move(i+i),c=o.move(n.containerPhrasing(e,{after:i,before:s,...o.current()})),l=c.charCodeAt(0),u=xy(r.before.charCodeAt(r.before.length-1),l,i);u.inside&&(c=by(l)+c.slice(1));let d=c.charCodeAt(c.length-1),f=xy(r.after.charCodeAt(0),d,i);f.inside&&(c=c.slice(0,-1)+by(d));let p=o.move(i+i);return a(),n.attentionEncodeSurroundingInfo={after:f.outside,before:u.outside},s+c+p}function Zy(e,t,n){return n.options.strong||`*`}function Qy(e,t,n,r){return n.safe(e.value,r)}function $y(e){let t=e.options.ruleRepetition||3;if(t<3)throw Error("Cannot serialize rules with repetition `"+t+"` for `options.ruleRepetition`, expected `3` or more");return t}function eb(e,t,n){let r=(Hy(n)+(n.options.ruleSpaces?` `:``)).repeat($y(n));return n.options.ruleSpaces?r.slice(0,-1):r}var tb={blockquote:sy,break:dy,code:hy,definition:vy,emphasis:Sy,hardBreak:dy,heading:Ty,html:Ey,image:Oy,imageReference:Ay,inlineCode:My,link:Fy,linkReference:Ly,list:Uy,listItem:Gy,paragraph:Ky,root:Jy,strong:Xy,text:Qy,thematicBreak:eb};function nb(){return{enter:{table:rb,tableData:sb,tableHeader:sb,tableRow:ab},exit:{codeText:cb,table:ib,tableData:ob,tableHeader:ob,tableRow:ob}}}function rb(e){let t=e._align;this.enter({type:`table`,align:t.map(function(e){return e===`none`?null:e}),children:[]},e),this.data.inTable=!0}function ib(e){this.exit(e),this.data.inTable=void 0}function ab(e){this.enter({type:`tableRow`,children:[]},e)}function ob(e){this.exit(e)}function sb(e){this.enter({type:`tableCell`,children:[]},e)}function cb(e){let t=this.resume();this.data.inTable&&(t=t.replace(/\\([\\|])/g,lb));let n=this.stack[this.stack.length-1];n.type,n.value=t,this.exit(e)}function lb(e,t){return t===`|`?t:e}function ub(e){let t=e||{},n=t.tableCellPadding,r=t.tablePipeAlign,i=t.stringLength,a=n?` `:`|`;return{unsafe:[{character:`\r`,inConstruct:`tableCell`},{character:`
`,inConstruct:`tableCell`},{atBreak:!0,character:`|`,after:`[ :-]`},{character:`|`,inConstruct:`tableCell`},{atBreak:!0,character:`:`,after:`-`},{atBreak:!0,character:`-`,after:`[:|-]`}],handlers:{inlineCode:f,table:o,tableCell:c,tableRow:s}};function o(e,t,n,r){return l(u(e,n,r),e.align)}function s(e,t,n,r){let i=l([d(e,n,r)]);return i.slice(0,i.indexOf(`
-`))}function c(e,t,n,r){let i=n.enter(`tableCell`),o=n.enter(`phrasing`),s=n.containerPhrasing(e,{...r,before:a,after:a});return o(),i(),s}function l(e,t){return iy(e,{align:t,alignDelimiters:r,padding:n,stringLength:i})}function u(e,t,n){let r=e.children,i=-1,a=[],o=t.enter(`table`);for(;++i0&&!n&&(e[e.length-1][1]._gfmAutolinkLiteralWalkedInto=!0),n}var Hb={tokenize:Xb,partial:!0};function Ub(){return{document:{91:{name:`gfmFootnoteDefinition`,tokenize:qb,continuation:{tokenize:Jb},exit:Yb}},text:{91:{name:`gfmFootnoteCall`,tokenize:Kb},93:{name:`gfmPotentialFootnoteCall`,add:`after`,tokenize:Wb,resolveTo:Gb}}}}function Wb(e,t,n){let r=this,i=r.events.length,a=r.parser.gfmFootnotes||(r.parser.gfmFootnotes=[]),o;for(;i--;){let e=r.events[i][1];if(e.type===`labelImage`){o=e;break}if(e.type===`gfmFootnoteCall`||e.type===`labelLink`||e.type===`label`||e.type===`image`||e.type===`link`)break}return s;function s(i){if(!o||!o._balanced)return n(i);let s=Qf(r.sliceSerialize({start:o.end,end:r.now()}));return s.codePointAt(0)!==94||!a.includes(s.slice(1))?n(i):(e.enter(`gfmFootnoteCallLabelMarker`),e.consume(i),e.exit(`gfmFootnoteCallLabelMarker`),t(i))}}function Gb(e,t){let n=e.length;for(;n--;)if(e[n][1].type===`labelImage`&&e[n][0]===`enter`){e[n][1];break}e[n+1][1].type=`data`,e[n+3][1].type=`gfmFootnoteCallLabelMarker`;let r={type:`gfmFootnoteCall`,start:Object.assign({},e[n+3][1].start),end:Object.assign({},e[e.length-1][1].end)},i={type:`gfmFootnoteCallMarker`,start:Object.assign({},e[n+3][1].end),end:Object.assign({},e[n+3][1].end)};i.end.column++,i.end.offset++,i.end._bufferIndex++;let a={type:`gfmFootnoteCallString`,start:Object.assign({},i.end),end:Object.assign({},e[e.length-1][1].start)},o={type:`chunkString`,contentType:`string`,start:Object.assign({},a.start),end:Object.assign({},a.end)},s=[e[n+1],e[n+2],[`enter`,r,t],e[n+3],e[n+4],[`enter`,i,t],[`exit`,i,t],[`enter`,a,t],[`enter`,o,t],[`exit`,o,t],[`exit`,a,t],e[e.length-2],e[e.length-1],[`exit`,r,t]];return e.splice(n,e.length-n+1,...s),e}function Kb(e,t,n){let r=this,i=r.parser.gfmFootnotes||(r.parser.gfmFootnotes=[]),a=0,o;return s;function s(t){return e.enter(`gfmFootnoteCall`),e.enter(`gfmFootnoteCallLabelMarker`),e.consume(t),e.exit(`gfmFootnoteCallLabelMarker`),c}function c(t){return t===94?(e.enter(`gfmFootnoteCallMarker`),e.consume(t),e.exit(`gfmFootnoteCallMarker`),e.enter(`gfmFootnoteCallString`),e.enter(`chunkString`).contentType=`string`,l):n(t)}function l(s){if(a>999||s===93&&!o||s===null||s===91||op(s))return n(s);if(s===93){e.exit(`chunkString`);let a=e.exit(`gfmFootnoteCallString`);return i.includes(Qf(r.sliceSerialize(a)))?(e.enter(`gfmFootnoteCallLabelMarker`),e.consume(s),e.exit(`gfmFootnoteCallLabelMarker`),e.exit(`gfmFootnoteCall`),t):n(s)}return op(s)||(o=!0),a++,e.consume(s),s===92?u:l}function u(t){return t===91||t===92||t===93?(e.consume(t),a++,l):l(t)}}function qb(e,t,n){let r=this,i=r.parser.gfmFootnotes||(r.parser.gfmFootnotes=[]),a,o=0,s;return c;function c(t){return e.enter(`gfmFootnoteDefinition`)._container=!0,e.enter(`gfmFootnoteDefinitionLabel`),e.enter(`gfmFootnoteDefinitionLabelMarker`),e.consume(t),e.exit(`gfmFootnoteDefinitionLabelMarker`),l}function l(t){return t===94?(e.enter(`gfmFootnoteDefinitionMarker`),e.consume(t),e.exit(`gfmFootnoteDefinitionMarker`),e.enter(`gfmFootnoteDefinitionLabelString`),e.enter(`chunkString`).contentType=`string`,u):n(t)}function u(t){if(o>999||t===93&&!s||t===null||t===91||op(t))return n(t);if(t===93){e.exit(`chunkString`);let n=e.exit(`gfmFootnoteDefinitionLabelString`);return a=Qf(r.sliceSerialize(n)),e.enter(`gfmFootnoteDefinitionLabelMarker`),e.consume(t),e.exit(`gfmFootnoteDefinitionLabelMarker`),e.exit(`gfmFootnoteDefinitionLabel`),f}return op(t)||(s=!0),o++,e.consume(t),t===92?d:u}function d(t){return t===91||t===92||t===93?(e.consume(t),o++,u):u(t)}function f(t){return t===58?(e.enter(`definitionMarker`),e.consume(t),e.exit(`definitionMarker`),i.includes(a)||i.push(a),$(e,p,`gfmFootnoteDefinitionWhitespace`)):n(t)}function p(e){return t(e)}}function Jb(e,t,n){return e.check(Tp,t,e.attempt(Hb,t,n))}function Yb(e){e.exit(`gfmFootnoteDefinition`)}function Xb(e,t,n){let r=this;return $(e,i,`gfmFootnoteDefinitionIndent`,5);function i(e){let i=r.events[r.events.length-1];return i&&i[1].type===`gfmFootnoteDefinitionIndent`&&i[2].sliceSerialize(i[1],!0).length===4?t(e):n(e)}}function Zb(e){let t=(e||{}).singleTilde,n={name:`strikethrough`,tokenize:i,resolveAll:r};return t??=!0,{text:{126:n},insideSpan:{null:[n]},attentionMarkers:{null:[126]}};function r(e,t){let n=-1;for(;++n1?r(a):(e.consume(a),o++,c);if(o<2&&!t)return r(a);let l=e.exit(`strikethroughSequenceTemporary`),u=_p(a);return l._open=!u||u===2&&!!s,l._close=!s||s===2&&!!u,n(a)}}}var Qb=class{constructor(){this.map=[]}add(e,t,n){$b(this,e,t,n)}consume(e){if(this.map.sort(function(e,t){return e[0]-t[0]}),this.map.length===0)return;let t=this.map.length,n=[];for(;t>0;)--t,n.push(e.slice(this.map[t][0]+this.map[t][1]),this.map[t][2]),e.length=this.map[t][0];n.push(e.slice()),e.length=0;let r=n.pop();for(;r;){for(let t of r)e.push(t);r=n.pop()}this.map.length=0}};function $b(e,t,n,r){let i=0;if(n!==0||r.length!==0){for(;i-1;){let e=r.events[t][1].type;if(e===`lineEnding`||e===`linePrefix`)t--;else break}let i=t>-1?r.events[t][1].type:null,a=i===`tableHead`||i===`tableRow`?S:c;return a===S&&r.parser.lazy[r.now().line]?n(e):a(e)}function c(t){return e.enter(`tableHead`),e.enter(`tableRow`),l(t)}function l(e){return e===124?u(e):(o=!0,a+=1,u(e))}function u(t){return t===null?n(t):Z(t)?a>1?(a=0,r.interrupt=!0,e.exit(`tableRow`),e.enter(`lineEnding`),e.consume(t),e.exit(`lineEnding`),p):n(t):Q(t)?$(e,u,`whitespace`)(t):(a+=1,o&&(o=!1,i+=1),t===124?(e.enter(`tableCellDivider`),e.consume(t),e.exit(`tableCellDivider`),o=!0,u):(e.enter(`data`),d(t)))}function d(t){return t===null||t===124||op(t)?(e.exit(`data`),u(t)):(e.consume(t),t===92?f:d)}function f(t){return t===92||t===124?(e.consume(t),d):d(t)}function p(t){return r.interrupt=!1,r.parser.lazy[r.now().line]?n(t):(e.enter(`tableDelimiterRow`),o=!1,Q(t)?$(e,m,`linePrefix`,r.parser.constructs.disable.null.includes(`codeIndented`)?void 0:4)(t):m(t))}function m(t){return t===45||t===58?g(t):t===124?(o=!0,e.enter(`tableCellDivider`),e.consume(t),e.exit(`tableCellDivider`),h):x(t)}function h(t){return Q(t)?$(e,g,`whitespace`)(t):g(t)}function g(t){return t===58?(a+=1,o=!0,e.enter(`tableDelimiterMarker`),e.consume(t),e.exit(`tableDelimiterMarker`),_):t===45?(a+=1,_(t)):t===null||Z(t)?b(t):x(t)}function _(t){return t===45?(e.enter(`tableDelimiterFiller`),v(t)):x(t)}function v(t){return t===45?(e.consume(t),v):t===58?(o=!0,e.exit(`tableDelimiterFiller`),e.enter(`tableDelimiterMarker`),e.consume(t),e.exit(`tableDelimiterMarker`),y):(e.exit(`tableDelimiterFiller`),y(t))}function y(t){return Q(t)?$(e,b,`whitespace`)(t):b(t)}function b(n){return n===124?m(n):n===null||Z(n)?!o||i!==a?x(n):(e.exit(`tableDelimiterRow`),e.exit(`tableHead`),t(n)):x(n)}function x(e){return n(e)}function S(t){return e.enter(`tableRow`),C(t)}function C(n){return n===124?(e.enter(`tableCellDivider`),e.consume(n),e.exit(`tableCellDivider`),C):n===null||Z(n)?(e.exit(`tableRow`),t(n)):Q(n)?$(e,C,`whitespace`)(n):(e.enter(`data`),w(n))}function w(t){return t===null||t===124||op(t)?(e.exit(`data`),C(t)):(e.consume(t),t===92?T:w)}function T(t){return t===92||t===124?(e.consume(t),w):w(t)}}function rx(e,t){let n=-1,r=!0,i=0,a=[0,0,0,0],o=[0,0,0,0],s=!1,c=0,l,u,d,f=new Qb;for(;++nn[2]+1){let t=n[2]+1,r=n[3]-n[2]-1;e.add(t,r,[])}}e.add(n[3]+1,0,[[`exit`,o,t]])}return i!==void 0&&(a.end=Object.assign({},ox(t.events,i)),e.add(i,0,[[`exit`,a,t]]),a=void 0),a}function ax(e,t,n,r,i){let a=[],o=ox(t.events,n);i&&(i.end=Object.assign({},o),a.push([`exit`,i,t])),r.end=Object.assign({},o),a.push([`exit`,r,t]),e.add(n+1,0,a)}function ox(e,t){let n=e[t],r=n[0]===`enter`?`start`:`end`;return n[1][r]}var sx={name:`tasklistCheck`,tokenize:lx};function cx(){return{text:{91:sx}}}function lx(e,t,n){let r=this;return i;function i(t){return r.previous!==null||!r._gfmTasklistFirstContentOfListItem?n(t):(e.enter(`taskListCheck`),e.enter(`taskListCheckMarker`),e.consume(t),e.exit(`taskListCheckMarker`),a)}function a(t){return op(t)?(e.enter(`taskListCheckValueUnchecked`),e.consume(t),e.exit(`taskListCheckValueUnchecked`),o):t===88||t===120?(e.enter(`taskListCheckValueChecked`),e.consume(t),e.exit(`taskListCheckValueChecked`),o):n(t)}function o(t){return t===93?(e.enter(`taskListCheckMarker`),e.consume(t),e.exit(`taskListCheckMarker`),e.exit(`taskListCheck`),s):n(t)}function s(r){return Z(r)?t(r):Q(r)?e.check({tokenize:ux},t,n)(r):n(r)}}function ux(e,t,n){return $(e,r,`whitespace`);function r(e){return e===null?n(e):t(e)}}function dx(e){return Jf([Db(),Ub(),Zb(e),tx(),cx()])}var fx={};function px(e){let t=this,n=e||fx,r=t.data(),i=r.micromarkExtensions||=[],a=r.fromMarkdownExtensions||=[],o=r.toMarkdownExtensions||=[];i.push(dx(n)),a.push(gb()),o.push(_b(n))}function mx(){return e=>{let t=e=>{if(e.type===`element`){let t=e.tagName===`a`?`href`:e.tagName===`img`?`src`:void 0,n=t?e.properties[t]:void 0,r=typeof n==`string`?n.replace(/%5c/giu,`\\`):n;t&&typeof r==`string`&&/^[a-z]:[\\/]/iu.test(r)&&!/[\x00-\x1f\x7f]/u.test(r)&&(e.data={...e.data,openpiWindowsPath:r},e.properties[t]=`./`)}for(let n of e.children)n.type===`element`&&t(n)};t(e)}}function hx(e){let t=e?.data?.openpiWindowsPath;return typeof t==`string`?t:void 0}function gx(e){if(!e.trim())return``;try{let t=new URL(e,document.baseURI);return[`http:`,`https:`,`mailto:`,`tel:`].includes(t.protocol)?t.href:``}catch{return``}}var _x=(0,w.memo)(function({children:e}){let t=(0,w.useContext)(sd);return(0,V.jsx)(`div`,{className:`markdown`,children:(0,V.jsx)(V_,{remarkPlugins:[px,vv],rehypePlugins:[mx,uv],urlTransform:e=>Vu(e)?e:gx(e),components:{a({href:e,node:n,children:r,...i}){if(e=hx(n)??e,Vu(e??``))return t?(0,V.jsxs)(`button`,{type:`button`,className:`artifact-link`,title:`Open read-only file: ${e}`,onClick:()=>t.open(e??``,t.parent),children:[r,(0,V.jsxs)(`small`,{className:`artifact-link-path`,"aria-hidden":`true`,children:[` `,`(`,e,`)`]})]}):(0,V.jsx)(`span`,{title:`Open this file from its Session`,children:r});let a=gx(e??``);return a?(0,V.jsx)(`a`,{...i,href:a,target:`_blank`,rel:`noreferrer`,children:r}):r},img({src:e,node:n,alt:r,title:i}){if(e=hx(n)??e,Vu(e??``))return t?(0,V.jsxs)(`button`,{type:`button`,className:`artifact-link`,title:`Open read-only file: ${e}`,onClick:()=>t.open(e??``,t.parent),children:[`[image: `,r||`image`,`]`,(0,V.jsxs)(`small`,{className:`artifact-link-path`,"aria-hidden":`true`,children:[` `,`(`,e,`)`]})]}):(0,V.jsxs)(`span`,{children:[`[image: `,r||`image`,`]`]});let a=gx(e??``),o=r||`image`;return a?(0,V.jsxs)(`a`,{href:a,title:i,target:`_blank`,rel:`noreferrer`,children:[`[image: `,o,`]`]}):(0,V.jsx)(`span`,{children:o})}},children:e})})});async function vx(e){try{return await navigator.clipboard.writeText(e),!0}catch{}let t=document.activeElement,n=window.getSelection(),r=n?Array.from({length:n.rangeCount},(e,t)=>n.getRangeAt(t).cloneRange()):[],i=t instanceof HTMLInputElement||t instanceof HTMLTextAreaElement?{start:t.selectionStart,end:t.selectionEnd,direction:t.selectionDirection}:null,a=document.createElement(`textarea`);a.value=e,a.readOnly=!0,a.style.cssText=`position:fixed;opacity:0;pointer-events:none`;try{return document.body.append(a),a.focus({preventScroll:!0}),a.select(),document.execCommand(`copy`)}catch{return!1}finally{if(a.remove(),t instanceof HTMLElement&&t.isConnected&&(t.focus({preventScroll:!0}),i&&i.start!==null&&i.end!==null&&(t instanceof HTMLInputElement||t instanceof HTMLTextAreaElement)&&t.setSelectionRange(i.start,i.end,i.direction??void 0)),n){n.removeAllRanges();for(let e of r)e.startContainer.isConnected&&e.endContainer.isConnected&&n.addRange(e)}}}function yx({children:e,className:t,"aria-label":n}){return(0,V.jsx)(`figure`,{"aria-label":n,children:(0,V.jsx)(`pre`,{className:t,children:e})})}function bx({call:e,result:t,liveState:n,cwd:r}){let i=Xu(e,t,n),a=(i.diff??i.output).split(`
-`).map((e,t)=>({text:e,number:i.offset+t})),o=i.tests?.failures.map((e,t)=>({text:e,number:t+1}))??[];return(0,V.jsxs)(`details`,{className:`tool-evidence-card evidence-${i.kind}`,children:[(0,V.jsxs)(`summary`,{children:[(0,V.jsx)(`strong`,{children:e.name}),(0,V.jsx)(`span`,{children:i.path||i.command||i.kind}),(0,V.jsx)(`span`,{className:`evidence-status`,children:i.state})]}),(0,V.jsxs)(`div`,{className:`evidence-content`,children:[i.path&&(0,V.jsxs)(`p`,{children:[(0,V.jsx)(`strong`,{children:`Requested file:`}),` `,(0,V.jsx)(`code`,{children:i.resolvedPath??i.path}),r&&(0,V.jsxs)(V.Fragment,{children:[(0,V.jsx)(`br`,{}),(0,V.jsxs)(`small`,{children:[`Workspace: `,r]})]})]}),i.command&&(0,V.jsx)(yx,{"aria-label":`Command`,children:i.command}),(i.kind===`terminal`||i.kind===`test`)&&(0,V.jsxs)(`p`,{children:[`Process: `,i.processState,` ·`,` `,i.exitCode===void 0?i.signal?`signal ${i.signal}`:`exit code unavailable`:`exit ${i.exitCode}`]}),i.truncated&&(0,V.jsx)(`p`,{className:`evidence-warning`,children:`Partial evidence — byte, line or item limit reached. Raw evidence below may also be truncated.`}),i.change&&(0,V.jsx)(`p`,{children:i.change===`created`?`File created`:i.change===`unchanged`?`No content changes`:`File overwritten`}),i.kind===`change`&&!i.diff&&!i.change&&(0,V.jsx)(`p`,{children:i.evidenceUnavailable??`The tool result does not include a change comparison.`}),i.tests&&(0,V.jsxs)(`figure`,{"aria-label":`Test evidence`,children:[(0,V.jsx)(`figcaption`,{children:(0,V.jsxs)(`strong`,{children:[`Reported test results (`,i.tests.format,`)`]})}),(0,V.jsxs)(`p`,{children:[i.tests.tests,` tests · `,i.tests.passed,` passed ·`,` `,i.tests.failed,` failed · `,i.tests.cancelled,` cancelled`]}),(0,V.jsx)(`p`,{children:`Reported counts are output evidence; execution status is shown separately.`}),o.map(e=>(0,V.jsx)(yx,{"aria-label":`Failure excerpt ${e.number}`,children:e.text},e.number))]}),i.diff?(0,V.jsx)(yx,{className:`evidence-lines`,"aria-label":`Change diff`,children:a.map(e=>(0,V.jsxs)(`span`,{className:/^\+/u.test(e.text.trimStart())?`diff-added`:/^-/u.test(e.text.trimStart())?`diff-removed`:``,children:[e.text,`
-`]},e.number))}):i.numberLines?(0,V.jsx)(yx,{className:`evidence-lines`,"aria-label":`File content`,children:a.map(e=>(0,V.jsxs)(`span`,{children:[(0,V.jsx)(`span`,{className:`evidence-line-number`,"aria-hidden":`true`,children:e.number}),e.text,`
-`]},e.number))}):(0,V.jsx)(yx,{className:`evidence-log`,"aria-label":`Tool output`,children:i.output||`No output received`}),i.kind===`file`&&i.truncated&&(0,V.jsx)(`p`,{children:`Read another range using the file path and offset. Consult the original result for the tool's recovery instructions.`}),i.recovery&&(0,V.jsxs)(`p`,{children:[`Full output reference: `,(0,V.jsx)(`code`,{children:i.recovery})]}),i.readRecovery&&(0,V.jsx)(`p`,{className:`evidence-warning`,children:i.readRecovery}),(0,V.jsxs)(`details`,{children:[(0,V.jsx)(`summary`,{children:`Raw arguments and result (sanitized)`}),(0,V.jsx)(`p`,{children:(0,V.jsx)(`strong`,{children:`Arguments`})}),(0,V.jsx)(`pre`,{children:i.rawArguments}),(0,V.jsx)(`p`,{children:(0,V.jsx)(`strong`,{children:`Result`})}),(0,V.jsx)(`pre`,{children:i.rawResult})]})]})]})}function xx({sessionId:e,children:t}){let n=(0,w.useMemo)(()=>new ed,[]),[r,i]=(0,w.useState)(null),[a,o]=(0,w.useState)(null),[s,c]=(0,w.useState)(null),[l,u]=(0,w.useState)(!1),d=(0,w.useRef)(null),f=(0,w.useRef)(null),p=(0,w.useRef)(null),m=(0,w.useRef)(new Set),h=(0,w.useRef)(void 0),g=(0,w.useCallback)((t,n)=>{d.current=document.activeElement instanceof HTMLElement?document.activeElement:null,o(null),c(null),h.current=n,i({reference:t,parent:n,sessionId:e})},[e]),_=(0,w.useCallback)(()=>{i(null),o(null),d.current?.focus()},[]);(0,w.useEffect)(()=>{r&&r.sessionId!==e&&(i(null),o(null))},[e,r]),(0,w.useEffect)(()=>{if(!r||!e||r.sessionId!==e)return;let t=new AbortController,i,a=r.parent,s,l=!1,d,g=2e3;f.current?.focus();let _=async()=>{if(document.visibilityState===`hidden`){s=setTimeout(_,2e3);return}try{if(i||=(await n.resolveArtifact(e,r.reference,a,t.signal)).handle,a&&=(n.releaseArtifact(e,a).catch(()=>void 0),void 0),l){n.releaseArtifact(e,i).catch(()=>void 0);return}if(d&&(await n.artifactMetadata(e,i,t.signal)).identity===d){l||c(null),g=Math.min(g*2,3e4);return}let s=await n.artifactPreview(e,i,t.signal);l||(d=s.identity,g=2e3,o(s),c(null))}catch(e){g=Math.min(g*2,3e4),l||c(e instanceof Error?e.message:`Unable to read file`)}finally{l||(s=setTimeout(_,g))}};return _(),()=>{l=!0,t.abort(),clearTimeout(s),p.current?.abort(),u(!1),i&&i!==h.current&&n.releaseArtifact(e,i).catch(()=>void 0),a&&n.releaseArtifact(e,a).catch(()=>void 0);for(let e of m.current)URL.revokeObjectURL(e);m.current.clear()}},[n,r,e]);let v=(0,w.useMemo)(()=>({open:g}),[g]),y=async()=>{if(!a||l)return;let e=new AbortController;p.current=e,u(!0);try{let t=await n.downloadArtifact(a.artifact,e.signal);if(e.signal.aborted)return;let r=URL.createObjectURL(t);m.current.add(r);let i=document.createElement(`a`);i.href=r,i.download=a.artifact.name,i.click(),setTimeout(()=>{URL.revokeObjectURL(r),m.current.delete(r)},1e3)}catch(t){e.signal.aborted||c(t instanceof Error?t.message:`Download failed`)}finally{e.signal.aborted||u(!1)}};return(0,V.jsxs)(sd.Provider,{value:v,children:[t,r&&(0,V.jsxs)(`dialog`,{open:!0,className:`artifact-panel`,"aria-label":`File preview`,onKeyDown:e=>{e.key===`Escape`&&(e.stopPropagation(),_())},children:[(0,V.jsxs)(`header`,{children:[(0,V.jsx)(`h2`,{children:`File preview`}),(0,V.jsx)(`button`,{ref:f,type:`button`,onClick:_,children:`Close preview`})]}),(0,V.jsx)(`p`,{className:`artifact-source`,children:a?.artifact.path??r.reference}),(0,V.jsxs)(`p`,{children:[`Read-only access · Session `,e]}),(0,V.jsxs)(`div`,{className:`artifact-actions`,children:[(0,V.jsx)(`button`,{type:`button`,onClick:()=>{h.current=void 0,i(t=>t?{sessionId:e,reference:a?.artifact.path??t.reference,...a?{}:{parent:t.parent}}:null)},children:`Refresh`}),(0,V.jsx)(`button`,{type:`button`,disabled:!a||l,onClick:()=>void y(),children:l?`Downloading…`:`Download`})]}),s&&(0,V.jsxs)(`p`,{role:`status`,className:`evidence-warning`,children:[a?`Showing an older preview. `:``,s]}),!a&&!s&&(0,V.jsx)(`p`,{role:`status`,children:`Reading file…`}),a&&(0,V.jsxs)(V.Fragment,{children:[(0,V.jsxs)(`p`,{className:`artifact-revision`,children:[`Version: `,(0,V.jsx)(`code`,{children:a.artifact.revision}),` ·`,` `,a.artifact.bytes,` bytes`]}),a.truncated&&(0,V.jsx)(`p`,{className:`evidence-warning`,children:`Preview truncated. Download the file for the complete content.`}),a.text===void 0?(0,V.jsx)(`p`,{children:`This file type cannot be previewed. Use Download.`}):/\.(?:md|markdown)$/iu.test(a.artifact.name)?(0,V.jsx)(sd.Provider,{value:{open:g,parent:a.artifact.handle},children:(0,V.jsx)(_x,{children:a.text})}):(0,V.jsx)(`section`,{"aria-label":`File preview content`,children:(0,V.jsx)(`pre`,{children:a.text})})]})]})]})}function Sx(e){return e&&typeof e==`object`?e:{}}function Cx(e){try{return Sx(JSON.parse(e))}catch{return{}}}function wx(e){return e===`running`?`running`:e===`done`||e===`completed`?`done`:[`error`,`failed`,`aborted`,`killed`,`timed_out`].includes(String(e))?`error`:e===`uncertain`?`warn`:`unknown`}function Tx(e){if(!e)return`running`;if(e.isError)return`error`;let t=wx(Sx(e.details).status);return t===`unknown`?e.isError===!1?`done`:`unknown`:t}function Ex({status:e}){return e===`running`?(0,V.jsx)(`span`,{className:`status-mark running`,role:`img`,"aria-label":`running`,children:(0,V.jsx)(`i`,{})}):e===`done`?(0,V.jsx)(L,{className:`status-mark done`,"aria-label":`completed`}):e===`error`?(0,V.jsx)(Re,{className:`status-mark error`,"aria-label":`failed`}):e===`warn`?(0,V.jsx)(`span`,{className:`status-mark warn`,role:`img`,"aria-label":`uncertain`,children:`?`}):null}function Dx(e){let t=e.toLowerCase();return t===`bash`?(0,V.jsx)(Ne,{}):t===`read`?(0,V.jsx)(me,{}):t===`write`||t===`edit`?(0,V.jsx)(pe,{}):t===`grep`?(0,V.jsx)(De,{}):t===`glob`||t===`ls`?(0,V.jsx)(he,{}):t===`webfetch`||t===`websearch`?(0,V.jsx)(_e,{}):(0,V.jsx)(Le,{})}function Ox(e,t){let n=e===`bash`?t.command:[`read`,`write`,`edit`,`ls`].includes(e)?t.path:[`grep`,`glob`].includes(e)?t.pattern:e===`webfetch`?t.url:e===`websearch`?t.query:``;return typeof n==`string`?dl(n.split(`
-`).find(Boolean),90):``}function kx({body:e,icon:t,name:n,status:r,summary:i,thinking:a=!1}){return(0,V.jsxs)(`details`,{className:`message-details tool-line ${r===`error`?`error`:``} ${a?`thinking-line`:``}`,children:[(0,V.jsxs)(`summary`,{children:[(0,V.jsx)(`span`,{className:`details-mark`,"aria-hidden":`true`}),(0,V.jsx)(`span`,{className:`tool-icon`,"aria-hidden":`true`,children:t}),(0,V.jsxs)(`span`,{className:`details-title`,children:[(0,V.jsx)(`span`,{className:`tool-name`,children:n}),i&&(0,V.jsx)(`span`,{className:`tool-summary`,children:i})]}),(0,V.jsx)(Ex,{status:r})]}),(0,V.jsx)(`pre`,{className:`details-body tool-evidence`,children:Wu(e).text})]})}function Ax({body:e,family:t,meta:n,status:r,title:i}){return(0,V.jsxs)(`details`,{className:`message-details activity-card ${t}`,children:[(0,V.jsxs)(`summary`,{children:[(0,V.jsx)(`span`,{className:`activity-icon`,"aria-hidden":`true`,children:t===`subagent`?(0,V.jsx)(P,{}):(0,V.jsx)(Ie,{})}),(0,V.jsxs)(`span`,{className:`activity-main`,children:[(0,V.jsx)(`span`,{className:`activity-title`,children:i}),n&&(0,V.jsx)(`span`,{className:`activity-meta`,children:n})]}),(0,V.jsx)(Ex,{status:r}),(0,V.jsx)(`span`,{className:`details-mark`,"aria-hidden":`true`})]}),(0,V.jsx)(`pre`,{className:`details-body tool-evidence`,children:e})]})}function jx(e,t){let n=e.name||``,r=Cx(e.arguments),i=Sx(t?.details),a=Tx(t);if(n===`subagent_spawn`){let n=[r.agent_type,r.model,r.working_dir].filter(Boolean).join(` · `);return(0,V.jsx)(Ax,{family:`subagent`,title:`Spawn Subagent · ${String(i.title||r.name||`subagent`)}`,meta:n||String(i.cwd||``),body:t?.content||String(r.prompt||e.arguments),status:a})}if(n.startsWith(`subagent`)){let i=n.replaceAll(`_`,` `).replace(/^subagent /u,``);return(0,V.jsx)(Ax,{family:`subagent`,title:`${i[0]?.toUpperCase()||``}${i.slice(1)} Subagent`,meta:String(r.id||``),body:t?.content||e.arguments,status:a})}if(n===`workflow`){let n=typeof r.script==`string`?r.script:e.arguments,o=String(i.name||n.match(/\bname:\s*["'`]([^"'`]+)["'`]/u)?.[1]||`unnamed`),s=Sx(i.agents),c=[i.runId,i.status,s.total?`${Number(s.total)-Number(s.running||0)}/${s.total} agents`:``].filter(Boolean).join(` · `);return(0,V.jsx)(Ax,{family:`workflow`,title:`Workflow · ${o}`,meta:c,body:t?.content||n,status:a})}return n.startsWith(`workflow`)?(0,V.jsx)(Ax,{family:`workflow`,title:n.replaceAll(`_`,` `),meta:String(r.runId||``),body:t?.content||e.arguments,status:a}):null}function Mx(e,t){let[n,r]=(0,w.useState)(Date.now());return(0,w.useEffect)(()=>{if(!t)return;let e=window.setInterval(()=>r(Date.now()),1e3);return()=>window.clearInterval(e)},[t]),e?ml(e,t?n:Date.now()):``}function Nx({body:e,start:t,duration:n,active:r,level:i}){let{t:a}=sn(),o=Mx(t,r),s=n?ml(0,n):o;return(0,V.jsx)(kx,{body:e,icon:(0,V.jsx)(ye,{}),name:r?i?a(`thinkingActiveLevel`,{level:i}):a(`thinkingActive`):a(`thinkingDone`),status:r?`running`:`done`,summary:s?`· ${s}`:void 0,thinking:!0})}function Px({content:e,editable:t,timestamp:n,onResend:r}){let{t:i}=sn(),[a,o]=(0,w.useState)(!1),[s,c]=(0,w.useState)(!1),[l,u]=(0,w.useState)(!1),d=(0,w.useRef)(0),f=(0,w.useRef)(void 0);(0,w.useEffect)(()=>()=>{d.current+=1,window.clearTimeout(f.current)},[]);let[p,m]=(0,w.useState)(!1),[h,g]=(0,w.useState)(e),_=(0,w.useRef)(null);if((0,w.useEffect)(()=>{p&&_.current?.focus()},[p]),p)return(0,V.jsxs)(`div`,{className:`message-editor`,children:[(0,V.jsx)(`textarea`,{ref:_,value:h,onChange:e=>g(e.target.value),onKeyDown:e=>{e.key===`Escape`&&m(!1),e.key===`Enter`&&!e.shiftKey&&!e.nativeEvent.isComposing&&(e.preventDefault(),r(h.trim()).then(e=>e&&m(!1)))}}),(0,V.jsxs)(`div`,{className:`message-edit-actions`,children:[(0,V.jsx)(`button`,{type:`button`,onClick:()=>m(!1),children:i(`cancel`)}),(0,V.jsx)(`button`,{type:`button`,className:`confirm`,onClick:()=>void r(h.trim()).then(e=>e&&m(!1)),children:i(`confirmEdit`)})]})]});let v=pl(n);return(0,V.jsxs)(`div`,{className:`message-actions${s?` copy-failed`:``}`,children:[v&&(0,V.jsx)(`time`,{dateTime:n,children:v}),t&&(0,V.jsx)(`button`,{type:`button`,"aria-label":i(`editMessage`),title:i(`editMessage`),onClick:()=>m(!0),children:(0,V.jsx)(Ce,{})}),(0,V.jsx)(`button`,{type:`button`,"aria-label":i(a?`copiedMessage`:`copyMessage`),title:i(a?`copiedMessage`:`copyMessage`),disabled:l,onClick:()=>{let t=++d.current;window.clearTimeout(f.current),u(!0),o(!1),c(!1),vx(e).then(e=>{t===d.current&&(u(!1),o(e),c(!e),e&&(f.current=window.setTimeout(()=>o(!1),1200)))})},children:a?(0,V.jsx)(L,{}):(0,V.jsx)(oe,{})}),s&&(0,V.jsx)(`span`,{className:`copy-error`,role:`status`,children:i(`copyFailed`)})]})}function Fx({message:e}){let t=Sx(e.details);if(e.customType===`subagent-result`)return(0,V.jsx)(Ax,{family:`subagent`,title:`Subagent ${String(t.id||``)} · ${String(t.title||`result`)}`,meta:[t.outcome,t.elapsed].filter(Boolean).join(` · `),body:e.content,status:wx(t.status)});if(e.customType===`workflow-result`){let n=Array.isArray(t.entries)?t.entries.map(Sx):[],r=n.map(e=>wx(e.status)),i=r.includes(`error`)?`error`:r.includes(`warn`)?`warn`:r.length>0&&r.every(e=>e===`done`)?`done`:r.includes(`running`)?`running`:`unknown`,a=n.length?n.map(e=>`${e.status===`completed`?`✓`:`✗`} ${String(e.summary||e.runId||`run`)}${e.resultPreview?`\nResult: ${e.resultPreview}`:``}`).join(`
-`):e.content;return(0,V.jsx)(Ax,{family:`workflow`,title:n.length>1?`Workflow results · ${n.length} runs`:`Workflow ${String(n[0]?.runId||`result`)}`,body:a,status:i})}return null}function Ix(e){return[``,`[]`,`{}`,`null`].includes(e.trim())}function Lx(e,t){let n=(e.selectedSession?.entries??[]).flatMap(e=>e.type===`message`&&e.message?[{key:e.id,timestamp:e.timestamp,message:e.message}]:[]),r=new Set(n.map(e=>`${e.message.role||``}:${e.message.content}`)),i=new Set(n.flatMap(e=>e.message.role===`toolResult`&&e.message.toolCallId?[e.message.toolCallId]:[]));for(let e of t)(e.message.role===`toolResult`&&e.message.toolCallId?i.has(e.message.toolCallId):r.has(`${e.message.role||``}:${e.message.content}`))||n.push({key:e.key,timestamp:new Date().toISOString(),message:e.message});return n}function Rx(e,t){let n=[];for(let t of e){let e=n.at(-1);t.groupable&&e?.grouped?e.rows.push(t):n.push({grouped:!!t.groupable,rows:[t]})}return n.map(e=>{let n=`${e.grouped?`group`:`rows`}-${e.rows[0]?.key}`;return!e.grouped||e.rows.length<4?(0,V.jsx)(w.Fragment,{children:e.rows.map(e=>(0,V.jsx)(w.Fragment,{children:e.content},e.key))},n):(0,V.jsxs)(`details`,{className:`tool-group ${e.rows.some(e=>e.error)?`error`:``}`,children:[(0,V.jsxs)(`summary`,{children:[(0,V.jsx)(`span`,{className:`details-mark`,"aria-hidden":`true`}),(0,V.jsx)(`span`,{className:`tool-group-icons`,"aria-hidden":`true`,children:e.rows.slice(0,4).map(e=>(0,V.jsx)(w.Fragment,{children:e.icon},e.key))}),(0,V.jsxs)(`span`,{children:[e.rows.length,` `,t]})]}),(0,V.jsx)(`div`,{className:`tool-group-body`,children:e.rows.map(e=>(0,V.jsx)(w.Fragment,{children:e.content},e.key))})]},n)})}function zx(e){let{t}=sn(),n=(0,w.useRef)(null),r=(0,w.useRef)(!0),i=(0,w.useRef)(void 0),a=(0,w.useRef)(e.scrollToBottom),o=(0,w.useMemo)(()=>Lx(e.snapshot,e.liveMessages),[e.snapshot,e.liveMessages]),s=e.snapshot.selectedSession,c=s?.id===e.snapshot.currentSessionId,{rows:l,turns:u}=(0,w.useMemo)(()=>{let n=new Map,r=new Set,i=new Set,a=e.snapshot.runtime.liveTools??[];o.forEach(({message:e})=>{e.role===`toolResult`&&e.toolCallId&&n.set(e.toolCallId,e),e.parts?.forEach(e=>{e.type===`toolCall`&&e.id&&Ku(e.name)&&i.add(e.id),e.type===`toolCall`&&e.id&&/^(subagent|workflow)/u.test(e.name)&&r.add(e.id)})});let l=[],u=0,d=-1;for(let e=o.length-1;e>=0;e--)if(o[e]?.message.role===`user`){d=e;break}let f=new Set,p=-1;return o.forEach(({message:e},t)=>{e.role===`user`?(p>=0&&f.add(p),p=-1):e.role===`assistant`&&e.content.trim()&&(p=t)}),p>=0&&f.add(p),{rows:o.flatMap((p,m)=>{let h=p.message;if(h.role===`custom`)return[{key:p.key,content:(0,V.jsx)(`article`,{className:`message-row assistant detail-only`,children:(0,V.jsx)(`div`,{className:`message-content`,children:(0,V.jsx)(Fx,{message:h})})})}];if(h.role===`user`)return u++,l.push({id:u,title:hl(h.content)}),[{key:p.key,content:(0,V.jsxs)(`article`,{className:`message-row user`,id:`turn-${u}`,children:[(0,V.jsx)(`div`,{className:`message-content`,children:(0,V.jsx)(`div`,{className:`message-body`,children:h.content})}),(0,V.jsx)(Px,{content:h.content,editable:c&&m===d,timestamp:p.timestamp,onResend:e.onResend})]})}];if(h.role===`assistant`){let t=[];return h.parts?.forEach((r,i)=>{if(r.type===`thinking`){let n=c&&e.liveRunning&&m===o.length-1;t.push({key:`${p.key}-thinking-${i}`,icon:(0,V.jsx)(ye,{}),content:(0,V.jsx)(`article`,{className:`message-row assistant detail-only`,children:(0,V.jsx)(`div`,{className:`message-content`,children:(0,V.jsx)(Nx,{body:r.text,active:n,level:n?e.snapshot.thinking?.level:void 0,start:e.thinkingStarts[p.key],duration:e.thinkingDurations[p.key]})})})})}if(r.type===`toolCall`){let e=r.id?a.find(e=>e.call.id===r.id):void 0,o=r.id?n.get(r.id):void 0,c=o??e?.result,l=Ku(r.name)?(0,V.jsx)(bx,{call:r,result:c,liveState:o?void 0:e?.state,cwd:s?.cwd},`${p.key}-${r.id||i}-evidence`):jx(r,c),u=Cx(r.arguments),d=Dx(r.name);t.push({key:`${p.key}-tool-${r.id||i}`,groupable:!l||Ku(r.name),error:!!c?.isError,icon:d,content:(0,V.jsx)(`article`,{className:`message-row assistant detail-only`,children:(0,V.jsx)(`div`,{className:`message-content`,children:l||(0,V.jsx)(kx,{body:r.name===`bash`&&typeof u.command==`string`?u.command:r.arguments,icon:d,name:r.name||`tool`,summary:Ox(r.name,u),status:Tx(c)})})})})}}),h.content.trim()&&t.push({key:`${p.key}-answer`,content:(0,V.jsxs)(`article`,{className:`message-row assistant`,children:[(0,V.jsx)(`div`,{className:`message-content`,children:(0,V.jsx)(_x,{children:h.content})}),f.has(m)&&(0,V.jsx)(Px,{content:h.content,editable:!1,timestamp:p.timestamp,onResend:e.onResend})]})}),t}if(h.role===`toolResult`){if(h.toolCallId&&i.has(h.toolCallId)||h.toolCallId&&r.has(h.toolCallId))return[];let e=h.toolName?.startsWith(`subagent`)?`subagent`:h.toolName?.startsWith(`workflow`)?`workflow`:null,n=Tx(h),a=h.toolName||`tool`,o=e===`subagent`?(0,V.jsx)(P,{},`${p.key}-icon`):e===`workflow`?(0,V.jsx)(Ie,{},`${p.key}-icon`):Dx(a),s=e?(0,V.jsx)(Ax,{family:e,title:`${a.replaceAll(`_`,` `)} · ${dl(h.content)}`,body:h.content,status:n},`${p.key}-card`):Ix(h.content)?(0,V.jsxs)(`div`,{className:`tool-line-empty`,children:[(0,V.jsx)(`span`,{className:`tool-icon`,children:o}),(0,V.jsx)(`span`,{className:`tool-name`,children:a}),(0,V.jsx)(`span`,{className:`tool-summary`,children:t(`noOutput`)}),(0,V.jsx)(Ex,{status:n})]},`${p.key}-empty`):(0,V.jsx)(kx,{body:h.content,icon:o,name:a,summary:dl(h.content),status:n},`${p.key}-evidence`);return[{key:p.key,groupable:!e,error:n===`error`,icon:o,content:(0,V.jsx)(`article`,{className:`message-row assistant detail-only`,children:(0,V.jsx)(`div`,{className:`message-content`,children:s})})}]}return[]}),turns:l}},[c,o,e.liveRunning,e.onResend,e.snapshot.thinking?.level,e.thinkingDurations,e.thinkingStarts,e.snapshot.runtime.liveTools,s?.cwd,t]);(0,w.useLayoutEffect)(()=>{let t=n.current;if(!t||!s)return;let o=i.current!==s.path,c=a.current!==e.scrollToBottom;a.current=e.scrollToBottom,(o||c||r.current)&&(r.current=!0,typeof t.scrollTo==`function`?t.scrollTo({top:t.scrollHeight,behavior:`instant`}):t.scrollTop=t.scrollHeight),i.current=s.path},[s,o,e.scrollToBottom]);let d=c&&(e.snapshot.runtime.status===`running`||e.liveRunning),f=e.liveRetry?`${t(`modelRetrying`)} (${e.liveRetry.attempt}/${e.liveRetry.maxAttempts})`:e.livePhase===`preparing`?t(`modelPreparing`):t(`modelRunning`);return(0,V.jsxs)(xx,{sessionId:s?.id,children:[(0,V.jsxs)(`div`,{ref:n,className:`conversation`,role:`log`,"aria-label":`Conversation`,onScroll:e=>{let t=e.currentTarget;r.current=t.scrollTop+t.clientHeight>=t.scrollHeight-48},children:[Rx(l,t(`stepsLabel`)),d&&(0,V.jsxs)(`div`,{className:`conversation-running`,role:`status`,"aria-live":`polite`,children:[(0,V.jsx)(`span`,{className:`conversation-running-dot`}),(0,V.jsx)(`span`,{children:f})]})]}),u.length>1&&(0,V.jsx)(`nav`,{className:`turn-rail`,"aria-label":t(`conversationTurns`),children:u.map(e=>(0,V.jsxs)(`button`,{className:`turn-tick`,type:`button`,title:e.title,onClick:()=>document.getElementById(`turn-${e.id}`)?.scrollIntoView({block:`start`,behavior:`smooth`}),children:[(0,V.jsx)(`span`,{className:`turn-tick-mark`}),(0,V.jsx)(`span`,{className:`turn-tick-label`,children:e.title})]},e.id))})]})}var Bx={en:{translation:{conversationView:`Conversation view`,chatView:`Chat`,trajectory:`Trajectory`,trajectoryScope:`Recorded Session messages in order, not execution durations or the complete model request.`,trajectoryRunning:`Work is active. This view updates as saved records arrive; in-flight text is available in Chat.`,trajectoryTruncated:`Loaded history is partial: {{entries}} entries omitted, {{parts}} parts omitted, {{messages}} messages truncated.`,trajectoryEmpty:`No saved records yet.`,trajectoryOverview:`Record sequence overview`,trajectoryEarlier:`Show earlier records ({{count}} remaining in loaded history)`,trajectoryDetails:`Record details`,trajectoryRecordedAt:`Record timestamp`,trajectoryEvidenceTruncated:`This evidence was truncated in the Session projection.`,trajectoryArguments:`Tool arguments`,trajectoryRecordedContent:`Recorded content`,trajectoryThinking:`Recorded model reasoning`,trajectoryOutput:`Tool result`,trajectoryMissingResult:`No unambiguous result is included in the loaded records. This does not imply the tool is still running.`,trajectoryStructured:`Structured result`,trajectoryEventOnly:`Only this event’s type and timestamp are available.`,trajectory_user:`User prompt`,trajectory_assistant:`Assistant`,trajectory_call:`Tool call`,trajectory_result:`Unpaired result`,trajectory_event:`Session event`,trajectory_returned:`Tool returned successfully; background work may still be active.`,trajectory_error:`Tool returned an error`,trajectory_unknown:`Outcome not established`,runtimeStatus:`Runtime status`,refreshStatus:`Refresh status`,terminalDetails:`Terminal details`,inspectionChanged:`The active session changed. Reopen this panel.`,inspectionUnavailable:`Details are unavailable.`,inspectionLoading:`Loading status…`,thinkingUnavailable:`Thinking state is unavailable.`,trustUnavailable:`Project trust status is unavailable.`,authUnavailable:`Provider status is unavailable.`,executionState:`State`,terminalCommand:`Command`,terminalDirectory:`Directory`,startedAt:`Started`,exitCode:`Exit code`,detailTruncated:`Some details are shortened to keep this view bounded.`,standardOutput:`Standard output`,standardError:`Standard error`,outputTruncated:`{{count}} bytes omitted from this output view.`,outputRecovery:`The runtime reports a retained log. This view shows only a bounded excerpt.`,modelAndThinking:`Model and reasoning`,selectedModel:`Current model`,thinkingLevel:`Thinking level`,availableThinking:`Available levels`,unknownState:`Unknown`,projectTrust:`Project trust`,trust_trusted:`This session trusts the workspace.`,trust_untrusted:`Trust for this workspace has been denied.`,trust_restricted:`Project resources are restricted pending a trust decision.`,trust_unknown:`Trust state is not available.`,trustRefreshNeeded:`The saved decision and active session differ. Refresh the session through Pi to apply it.`,providerAvailability:`Provider credentials`,credentialConfigured:`Configured`,credentialMissing:`Not configured`,noProviders:`No providers reported.`,providersBounded:`This provider list is truncated.`,authNotVerified:`Configured credentials do not guarantee a successful model request.`,configurationViaPi:`Read-only status. Manage model credentials and trust through Pi; manage OpenPI options with /openpi-setup.`,statusCaptured:`Snapshot at {{time}} · refresh for the latest state`,conversationViews:`Conversation views`,currentConversations:`Current`,archivedConversations:`Archived`,restoreConversation:`Restore conversation`,restoringConversation:`Restoring…`,loadedArchives:`Archived conversations in the loaded history`,loadedHistoryBounded:`{{sessions}} more sessions and {{workspaces}} workspace summaries are not loaded. Search covers the loaded list only.`,noLoadedArchives:`No archived conversations in this loaded list.`,restoreFailed:`Could not confirm restoration. Refresh and try again.`,execution_running:`Running`,execution_done:`Completed`,execution_killed:`Stopped`,execution_timed_out:`Timed out`,execution_failed:`Failed`,execution_uncertain:`Uncertain`,activeOnlyHint:`Only the active Web session accepts messages.`,acceptedHint:`Message accepted by OpenPI Web.`,promptAdmissionUnknown:`It is unclear whether the last message was received.`,promptAdmissionUnknownDetail:`Review the refreshed Session history and runtime status before deciding. Sending as a new message may create a duplicate message.`,promptAdmissionCheckingDetail:`Checking the latest Session history and runtime status before resend options are enabled.`,promptAdmissionVerificationFailedDetail:`Could not refresh the latest Session history and runtime status. Check again before sending as a new message.`,abandonAdmission:`Don't resend for now`,retryAdmissionCheck:`Check again`,sendAsNew:`Send as new message`,sendingAsNew:`Sending…`,stopTurn:`Stop current turn`,stoppingTurn:`Stopping current turn…`,stoppedTurn:`Current turn stopped.`,pendingFollowUpsHint:`{{count}} messages queued`,addWorkspace:`Add workspace`,addWorkspaceMenu:`Add workspace...`,archiveConversation:`Archive conversation`,cancel:`Cancel`,chooseWorkspaceHint:`Choose a workspace and describe the work`,close:`Close`,closeSearch:`Close search`,collapseSidebar:`Collapse sidebar`,confirmEdit:`OK`,connected:`Connected`,connecting:`Connecting`,conversationName:`Conversation name`,conversationOptions:`Conversation options`,conversationTurns:`Conversation turns`,commands:`Slash commands`,commandsLoading:`Loading commands...`,commandsUnavailable:`Commands are temporarily unavailable.`,commandsNoMatch:`No matching commands.`,commandsBounded:`{{count}} more commands are not shown.`,commandSessionRequired:`Commands require an active Web session.`,commandUnsupported:`Not supported in Web`,commandAcceptsArguments:`Accepts arguments`,commandSource_extension:`Extension`,commandSource_prompt:`Prompt template`,commandSource_skill:`Skill`,copiedMessage:`Copied`,copyMessage:`Copy message`,copyFailed:`Copy failed. Please select and copy the message manually.`,deleteWorkspace:`Delete workspace`,describeTask:`Describe a task`,editMessage:`Edit message`,enterHint:`Enter to send, Shift+Enter for a new line.`,expandSidebar:`Expand sidebar`,importWorkspace:`Import workspace`,loadingModels:`Loading models...`,modelsTruncated:`Showing {{shown}} models. {{omitted}} more are available; search to find them.`,searchModels:`Search available models`,searchModelsPlaceholder:`Search provider, model name, or ID...`,searchingModels:`Searching models...`,noMatchingModels:`No matching models`,modelSearchFailed:`Could not search models. Try again.`,modelSearchTruncated:`{{omitted}} matching models are not shown.`,modelPreparing:`Preparing task...`,modelRetrying:`Retrying model request...`,modelRunning:`Working...`,newSession:`New session`,noConversations:`No conversations yet`,noMatching:`No matching conversations`,noModels:`No models available`,noOutput:`no output`,noSessions:`No sessions`,openSidebar:`Open sidebar`,promptMessage:`Send a message to the active Web session`,promptReadonly:`A non-active session cannot receive prompts`,promptStart:`Choose a workspace to begin.`,promptTask:`Describe what you want to build.`,queuedHint:`The message will be queued after the current turn.`,reconnecting:`Reconnecting`,removeWorkspace:`Remove from sidebar`,renameConversation:`Rename conversation`,renameWorkspace:`Rename workspace`,save:`Save`,searchConversations:`Search conversations`,searchPlaceholder:`Search conversations...`,selectModel:`Select model`,selectThinking:`Select thinking level`,selectWorkspace:`Select workspace`,send:`Send`,stepsLabel:`steps`,switchingSession:`Switching session...`,thinkingActive:`Thinking...`,thinkingActiveLevel:`Thinking ({{level}})...`,thinkingDone:`Thinking`,thinkingDraftHint:`Choose a workspace and create a session first.`,thinkingInactiveHint:`Only the active session can change its thinking level.`,thinkingLevelMismatch:`The confirmed thinking level is not offered by the current model. Choosing another level will correct it.`,thinkingLockedRunning:`Stop the current turn before changing the thinking level.`,thinkingModelPendingHint:`Wait for the model change to finish.`,thinkingNotConfirmed:`Thinking level was not confirmed. Please try again.`,thinkingPendingHint:`Applying the thinking level...`,thinkingUnsupported:`Thinking is unavailable`,thinkingUnsupportedHint:`No model is selected, or the current model does not support thinking.`,unavailable:`Unavailable`,ungrouped:`Ungrouped`,untitledSession:`New session`,workspaceDeleteConfirm:`The folder and conversation records will be kept. Its conversations will move to Ungrouped.`,workspaceName:`Workspace name`,workspaces:`Workspaces`}},zh:{translation:{conversationView:`会话视图`,chatView:`对话`,trajectory:`执行轨迹`,trajectoryScope:`按记录顺序展示会话消息,不表示执行耗时,也不是完整模型请求。`,trajectoryRunning:`任务仍在进行。已保存记录到达后自动更新;实时生成内容可在“对话”中查看。`,trajectoryTruncated:`当前历史不完整:省略 {{entries}} 条记录、{{parts}} 个内容片段,{{messages}} 条消息被截断。`,trajectoryEmpty:`尚无已保存记录。`,trajectoryOverview:`记录顺序总览`,trajectoryEarlier:`显示更早记录(已加载历史中还有 {{count}} 条)`,trajectoryDetails:`记录详情`,trajectoryRecordedAt:`记录时间`,trajectoryEvidenceTruncated:`此证据在会话投影中已被截断。`,trajectoryArguments:`工具参数`,trajectoryRecordedContent:`已记录内容`,trajectoryThinking:`模型返回的推理内容`,trajectoryOutput:`工具结果`,trajectoryMissingResult:`当前记录中没有可明确配对的结果。这不表示工具仍在运行。`,trajectoryStructured:`结构化结果`,trajectoryEventOnly:`当前仅提供此事件的类型和记录时间。`,trajectory_user:`用户 Prompt`,trajectory_assistant:`模型消息`,trajectory_call:`工具调用`,trajectory_result:`未配对结果`,trajectory_event:`会话事件`,trajectory_returned:`工具已成功返回;其启动的后台任务可能仍在进行。`,trajectory_error:`工具返回错误`,trajectory_unknown:`尚无法确定结果`,runtimeStatus:`运行状态`,refreshStatus:`刷新状态`,terminalDetails:`终端详情`,inspectionChanged:`当前会话已切换,请重新打开详情。`,inspectionUnavailable:`暂时无法读取详情。`,inspectionLoading:`正在读取状态…`,thinkingUnavailable:`暂时无法读取思考等级。`,trustUnavailable:`暂时无法读取项目信任状态。`,authUnavailable:`暂时无法读取服务商状态。`,executionState:`状态`,terminalCommand:`命令`,terminalDirectory:`目录`,startedAt:`启动时间`,exitCode:`退出码`,detailTruncated:`部分详情已截断,以限制页面加载量。`,standardOutput:`标准输出`,standardError:`错误输出`,outputTruncated:`此输出视图省略了 {{count}} 字节。`,outputRecovery:`运行时报告已保留日志;此处仅显示有大小限制的片段。`,modelAndThinking:`模型与思考`,selectedModel:`当前模型`,thinkingLevel:`思考等级`,availableThinking:`支持的等级`,unknownState:`未知`,projectTrust:`项目信任`,trust_trusted:`当前会话信任此工作区。`,trust_untrusted:`此工作区的信任已被拒绝。`,trust_restricted:`项目资源受到限制,等待信任决定。`,trust_unknown:`尚无法确定信任状态。`,trustRefreshNeeded:`保存的信任决定与当前会话不同,请通过 Pi 刷新会话后生效。`,providerAvailability:`服务商凭据`,credentialConfigured:`已配置`,credentialMissing:`未配置`,noProviders:`未发现服务商。`,providersBounded:`服务商列表已截断。`,authNotVerified:`凭据已配置不代表模型请求一定成功。`,configurationViaPi:`此处为只读状态。模型凭据与信任由 Pi 管理,OpenPI 选项通过 /openpi-setup 配置。`,statusCaptured:`采集于 {{time}} · 刷新查看最新状态`,conversationViews:`会话视图`,currentConversations:`当前`,archivedConversations:`已归档`,restoreConversation:`恢复会话`,restoringConversation:`正在恢复…`,loadedArchives:`已加载历史中的归档会话`,loadedHistoryBounded:`另有 {{sessions}} 个会话和 {{workspaces}} 个工作区摘要未加载。搜索仅覆盖已加载列表。`,noLoadedArchives:`已加载列表中没有归档会话。`,restoreFailed:`暂时无法确认恢复结果,请刷新后重试。`,execution_running:`运行中`,execution_done:`已完成`,execution_killed:`已停止`,execution_timed_out:`已超时`,execution_failed:`失败`,execution_uncertain:`状态不确定`,activeOnlyHint:`只有当前 Web 会话可以接收消息。`,stopTurn:`停止当前轮次`,stoppingTurn:`正在停止当前轮次…`,stoppedTurn:`当前轮次已停止。`,pendingFollowUpsHint:`{{count}} 条消息正在排队`,acceptedHint:`OpenPI Web 已接收消息。`,promptAdmissionUnknown:`无法确认上次发送的消息是否已被接收。`,promptAdmissionUnknownDetail:`请先核对已刷新的会话历史和运行状态,再决定下一步。作为新消息发送可能产生重复消息。`,promptAdmissionCheckingDetail:`正在核对最新的会话历史和运行状态,核对完成前不能作为新消息发送。`,promptAdmissionVerificationFailedDetail:`暂时无法刷新最新的会话历史和运行状态。请重新核对后再决定是否作为新消息发送。`,abandonAdmission:`暂不重新发送`,retryAdmissionCheck:`重新核对`,sendAsNew:`作为新消息发送`,sendingAsNew:`正在发送…`,addWorkspace:`添加工作区`,addWorkspaceMenu:`添加工作区...`,archiveConversation:`归档会话`,cancel:`取消`,chooseWorkspaceHint:`选择工作区并描述任务`,close:`关闭`,closeSearch:`关闭搜索`,collapseSidebar:`收起侧边栏`,confirmEdit:`确定`,connected:`已连接`,connecting:`正在连接`,conversationName:`会话名称`,conversationOptions:`会话选项`,conversationTurns:`会话轮次`,commands:`斜杠命令`,commandsLoading:`正在加载命令…`,commandsUnavailable:`暂时无法读取命令。`,commandsNoMatch:`没有匹配的命令。`,commandsBounded:`另有 {{count}} 个命令未显示。`,commandSessionRequired:`命令仅在已创建的 Web 会话中可用。`,commandUnsupported:`当前 Web 不支持`,commandAcceptsArguments:`可输入参数`,commandSource_extension:`扩展命令`,commandSource_prompt:`提示词模板`,commandSource_skill:`技能`,copiedMessage:`已复制`,copyMessage:`复制消息`,copyFailed:`复制失败,请选中消息后手动复制。`,deleteWorkspace:`删除工作区`,describeTask:`描述任务`,editMessage:`编辑消息`,enterHint:`按 Enter 发送,Shift+Enter 换行。`,expandSidebar:`展开侧边栏`,importWorkspace:`导入工作区`,loadingModels:`正在加载模型...`,modelsTruncated:`当前显示 {{shown}} 个模型,还有 {{omitted}} 个可用;搜索即可查找。`,searchModels:`搜索可用模型`,searchModelsPlaceholder:`搜索服务商、模型名称或 ID...`,searchingModels:`正在搜索模型...`,noMatchingModels:`没有匹配的模型`,modelSearchFailed:`模型搜索失败,请重试。`,modelSearchTruncated:`还有 {{omitted}} 个匹配模型未显示。`,modelPreparing:`正在准备任务...`,modelRetrying:`模型请求重试中...`,modelRunning:`正在运行...`,newSession:`新建会话`,noConversations:`暂无对话`,noMatching:`没有匹配的会话`,noModels:`没有可用模型`,noOutput:`无输出`,noSessions:`暂无会话`,openSidebar:`打开侧边栏`,promptMessage:`向当前 Web 会话发送消息`,promptReadonly:`非当前会话不能接收消息`,promptStart:`选择一个工作区开始`,promptTask:`描述你想要构建的任务`,queuedHint:`当前回合结束后将发送消息。`,reconnecting:`正在重连`,removeWorkspace:`从侧边栏移除`,renameConversation:`重命名会话`,renameWorkspace:`重命名工作区`,save:`保存`,searchConversations:`搜索会话`,searchPlaceholder:`搜索会话...`,selectModel:`选择模型`,selectThinking:`选择思考等级`,selectWorkspace:`选择工作区`,send:`发送`,stepsLabel:`个步骤`,switchingSession:`正在切换会话...`,thinkingActive:`思考中...`,thinkingActiveLevel:`思考中({{level}})...`,thinkingDone:`思考过程`,thinkingDraftHint:`请先选择工作区并创建会话。`,thinkingInactiveHint:`只有当前会话可以更改思考等级。`,thinkingLevelMismatch:`当前确认的思考等级不在此模型支持范围内;选择其它等级即可修正。`,thinkingLockedRunning:`请先停止当前轮次,再更改思考等级。`,thinkingModelPendingHint:`请等待模型切换完成。`,thinkingNotConfirmed:`思考等级未获确认,请重试。`,thinkingPendingHint:`正在应用思考等级...`,thinkingUnsupported:`暂不支持思考`,thinkingUnsupportedHint:`尚未选择模型,或当前模型不支持思考。`,unavailable:`不可用`,ungrouped:`未分组`,untitledSession:`新会话`,workspaceDeleteConfirm:`文件夹与会话记录会保留,其中的会话会被放到“未分组”;再次打开此目录时将是一个干净的工作区。`,workspaceName:`工作区名称`,workspaces:`工作区`}}},Vx=navigator.language?.toLowerCase().startsWith(`zh`)?`zh`:`en`;Pt.use($t).init({fallbackLng:`en`,initAsync:!1,interpolation:{escapeValue:!1},lng:Vx,resources:Bx}),document.documentElement.lang=Vx===`zh`?`zh-CN`:`en`;var Hx=class extends Error{constructor(e,t){super(e),this.name=`ParseError`,this.type=t.type,this.field=t.field,this.value=t.value,this.line=t.line}},Ux=10,Wx=13,Gx=32,Kx=6;function qx(e){if(typeof e==`function`)throw TypeError("`config` must be an object, got a function instead. Did you mean `createParser({onEvent: fn})`?");let{maxBufferSize:t,onComment:n,onError:r,onEvent:i,onId:a,onRetry:o}=e,s=[],c=0,l=!0,u,d=``,f=0,p,m=!1,h=!1,g=!1;function _(e){if(m)throw Error("Cannot feed parser: it was terminated after exceeding the configured max buffer size. Call `reset()` to resume parsing.");if(l&&(l=!1,e.charCodeAt(0)===65279?e=e.slice(1):e.charCodeAt(0)===239&&e.charCodeAt(1)===187&&e.charCodeAt(2)===191&&(e=e.slice(3))),(h||g)&&(e=v(e),!e))return;if(!s.length){let t=S(e);t!==``&&y(t),x();return}if(e.indexOf(`
-`)===-1&&e.indexOf(`\r`)===-1){if(c0&&!n&&(e[e.length-1][1]._gfmAutolinkLiteralWalkedInto=!0),n}var Hb={tokenize:Xb,partial:!0};function Ub(){return{document:{91:{name:`gfmFootnoteDefinition`,tokenize:qb,continuation:{tokenize:Jb},exit:Yb}},text:{91:{name:`gfmFootnoteCall`,tokenize:Kb},93:{name:`gfmPotentialFootnoteCall`,add:`after`,tokenize:Wb,resolveTo:Gb}}}}function Wb(e,t,n){let r=this,i=r.events.length,a=r.parser.gfmFootnotes||(r.parser.gfmFootnotes=[]),o;for(;i--;){let e=r.events[i][1];if(e.type===`labelImage`){o=e;break}if(e.type===`gfmFootnoteCall`||e.type===`labelLink`||e.type===`label`||e.type===`image`||e.type===`link`)break}return s;function s(i){if(!o||!o._balanced)return n(i);let s=Qf(r.sliceSerialize({start:o.end,end:r.now()}));return s.codePointAt(0)!==94||!a.includes(s.slice(1))?n(i):(e.enter(`gfmFootnoteCallLabelMarker`),e.consume(i),e.exit(`gfmFootnoteCallLabelMarker`),t(i))}}function Gb(e,t){let n=e.length;for(;n--;)if(e[n][1].type===`labelImage`&&e[n][0]===`enter`){e[n][1];break}e[n+1][1].type=`data`,e[n+3][1].type=`gfmFootnoteCallLabelMarker`;let r={type:`gfmFootnoteCall`,start:Object.assign({},e[n+3][1].start),end:Object.assign({},e[e.length-1][1].end)},i={type:`gfmFootnoteCallMarker`,start:Object.assign({},e[n+3][1].end),end:Object.assign({},e[n+3][1].end)};i.end.column++,i.end.offset++,i.end._bufferIndex++;let a={type:`gfmFootnoteCallString`,start:Object.assign({},i.end),end:Object.assign({},e[e.length-1][1].start)},o={type:`chunkString`,contentType:`string`,start:Object.assign({},a.start),end:Object.assign({},a.end)},s=[e[n+1],e[n+2],[`enter`,r,t],e[n+3],e[n+4],[`enter`,i,t],[`exit`,i,t],[`enter`,a,t],[`enter`,o,t],[`exit`,o,t],[`exit`,a,t],e[e.length-2],e[e.length-1],[`exit`,r,t]];return e.splice(n,e.length-n+1,...s),e}function Kb(e,t,n){let r=this,i=r.parser.gfmFootnotes||(r.parser.gfmFootnotes=[]),a=0,o;return s;function s(t){return e.enter(`gfmFootnoteCall`),e.enter(`gfmFootnoteCallLabelMarker`),e.consume(t),e.exit(`gfmFootnoteCallLabelMarker`),c}function c(t){return t===94?(e.enter(`gfmFootnoteCallMarker`),e.consume(t),e.exit(`gfmFootnoteCallMarker`),e.enter(`gfmFootnoteCallString`),e.enter(`chunkString`).contentType=`string`,l):n(t)}function l(s){if(a>999||s===93&&!o||s===null||s===91||op(s))return n(s);if(s===93){e.exit(`chunkString`);let a=e.exit(`gfmFootnoteCallString`);return i.includes(Qf(r.sliceSerialize(a)))?(e.enter(`gfmFootnoteCallLabelMarker`),e.consume(s),e.exit(`gfmFootnoteCallLabelMarker`),e.exit(`gfmFootnoteCall`),t):n(s)}return op(s)||(o=!0),a++,e.consume(s),s===92?u:l}function u(t){return t===91||t===92||t===93?(e.consume(t),a++,l):l(t)}}function qb(e,t,n){let r=this,i=r.parser.gfmFootnotes||(r.parser.gfmFootnotes=[]),a,o=0,s;return c;function c(t){return e.enter(`gfmFootnoteDefinition`)._container=!0,e.enter(`gfmFootnoteDefinitionLabel`),e.enter(`gfmFootnoteDefinitionLabelMarker`),e.consume(t),e.exit(`gfmFootnoteDefinitionLabelMarker`),l}function l(t){return t===94?(e.enter(`gfmFootnoteDefinitionMarker`),e.consume(t),e.exit(`gfmFootnoteDefinitionMarker`),e.enter(`gfmFootnoteDefinitionLabelString`),e.enter(`chunkString`).contentType=`string`,u):n(t)}function u(t){if(o>999||t===93&&!s||t===null||t===91||op(t))return n(t);if(t===93){e.exit(`chunkString`);let n=e.exit(`gfmFootnoteDefinitionLabelString`);return a=Qf(r.sliceSerialize(n)),e.enter(`gfmFootnoteDefinitionLabelMarker`),e.consume(t),e.exit(`gfmFootnoteDefinitionLabelMarker`),e.exit(`gfmFootnoteDefinitionLabel`),f}return op(t)||(s=!0),o++,e.consume(t),t===92?d:u}function d(t){return t===91||t===92||t===93?(e.consume(t),o++,u):u(t)}function f(t){return t===58?(e.enter(`definitionMarker`),e.consume(t),e.exit(`definitionMarker`),i.includes(a)||i.push(a),$(e,p,`gfmFootnoteDefinitionWhitespace`)):n(t)}function p(e){return t(e)}}function Jb(e,t,n){return e.check(Tp,t,e.attempt(Hb,t,n))}function Yb(e){e.exit(`gfmFootnoteDefinition`)}function Xb(e,t,n){let r=this;return $(e,i,`gfmFootnoteDefinitionIndent`,5);function i(e){let i=r.events[r.events.length-1];return i&&i[1].type===`gfmFootnoteDefinitionIndent`&&i[2].sliceSerialize(i[1],!0).length===4?t(e):n(e)}}function Zb(e){let t=(e||{}).singleTilde,n={name:`strikethrough`,tokenize:i,resolveAll:r};return t??=!0,{text:{126:n},insideSpan:{null:[n]},attentionMarkers:{null:[126]}};function r(e,t){let n=-1;for(;++n1?r(a):(e.consume(a),o++,c);if(o<2&&!t)return r(a);let l=e.exit(`strikethroughSequenceTemporary`),u=_p(a);return l._open=!u||u===2&&!!s,l._close=!s||s===2&&!!u,n(a)}}}var Qb=class{constructor(){this.map=[]}add(e,t,n){$b(this,e,t,n)}consume(e){if(this.map.sort(function(e,t){return e[0]-t[0]}),this.map.length===0)return;let t=this.map.length,n=[];for(;t>0;)--t,n.push(e.slice(this.map[t][0]+this.map[t][1]),this.map[t][2]),e.length=this.map[t][0];n.push(e.slice()),e.length=0;let r=n.pop();for(;r;){for(let t of r)e.push(t);r=n.pop()}this.map.length=0}};function $b(e,t,n,r){let i=0;if(n!==0||r.length!==0){for(;i-1;){let e=r.events[t][1].type;if(e===`lineEnding`||e===`linePrefix`)t--;else break}let i=t>-1?r.events[t][1].type:null,a=i===`tableHead`||i===`tableRow`?S:c;return a===S&&r.parser.lazy[r.now().line]?n(e):a(e)}function c(t){return e.enter(`tableHead`),e.enter(`tableRow`),l(t)}function l(e){return e===124?u(e):(o=!0,a+=1,u(e))}function u(t){return t===null?n(t):Z(t)?a>1?(a=0,r.interrupt=!0,e.exit(`tableRow`),e.enter(`lineEnding`),e.consume(t),e.exit(`lineEnding`),p):n(t):Q(t)?$(e,u,`whitespace`)(t):(a+=1,o&&(o=!1,i+=1),t===124?(e.enter(`tableCellDivider`),e.consume(t),e.exit(`tableCellDivider`),o=!0,u):(e.enter(`data`),d(t)))}function d(t){return t===null||t===124||op(t)?(e.exit(`data`),u(t)):(e.consume(t),t===92?f:d)}function f(t){return t===92||t===124?(e.consume(t),d):d(t)}function p(t){return r.interrupt=!1,r.parser.lazy[r.now().line]?n(t):(e.enter(`tableDelimiterRow`),o=!1,Q(t)?$(e,m,`linePrefix`,r.parser.constructs.disable.null.includes(`codeIndented`)?void 0:4)(t):m(t))}function m(t){return t===45||t===58?g(t):t===124?(o=!0,e.enter(`tableCellDivider`),e.consume(t),e.exit(`tableCellDivider`),h):x(t)}function h(t){return Q(t)?$(e,g,`whitespace`)(t):g(t)}function g(t){return t===58?(a+=1,o=!0,e.enter(`tableDelimiterMarker`),e.consume(t),e.exit(`tableDelimiterMarker`),_):t===45?(a+=1,_(t)):t===null||Z(t)?b(t):x(t)}function _(t){return t===45?(e.enter(`tableDelimiterFiller`),v(t)):x(t)}function v(t){return t===45?(e.consume(t),v):t===58?(o=!0,e.exit(`tableDelimiterFiller`),e.enter(`tableDelimiterMarker`),e.consume(t),e.exit(`tableDelimiterMarker`),y):(e.exit(`tableDelimiterFiller`),y(t))}function y(t){return Q(t)?$(e,b,`whitespace`)(t):b(t)}function b(n){return n===124?m(n):n===null||Z(n)?!o||i!==a?x(n):(e.exit(`tableDelimiterRow`),e.exit(`tableHead`),t(n)):x(n)}function x(e){return n(e)}function S(t){return e.enter(`tableRow`),C(t)}function C(n){return n===124?(e.enter(`tableCellDivider`),e.consume(n),e.exit(`tableCellDivider`),C):n===null||Z(n)?(e.exit(`tableRow`),t(n)):Q(n)?$(e,C,`whitespace`)(n):(e.enter(`data`),w(n))}function w(t){return t===null||t===124||op(t)?(e.exit(`data`),C(t)):(e.consume(t),t===92?T:w)}function T(t){return t===92||t===124?(e.consume(t),w):w(t)}}function rx(e,t){let n=-1,r=!0,i=0,a=[0,0,0,0],o=[0,0,0,0],s=!1,c=0,l,u,d,f=new Qb;for(;++nn[2]+1){let t=n[2]+1,r=n[3]-n[2]-1;e.add(t,r,[])}}e.add(n[3]+1,0,[[`exit`,o,t]])}return i!==void 0&&(a.end=Object.assign({},ox(t.events,i)),e.add(i,0,[[`exit`,a,t]]),a=void 0),a}function ax(e,t,n,r,i){let a=[],o=ox(t.events,n);i&&(i.end=Object.assign({},o),a.push([`exit`,i,t])),r.end=Object.assign({},o),a.push([`exit`,r,t]),e.add(n+1,0,a)}function ox(e,t){let n=e[t],r=n[0]===`enter`?`start`:`end`;return n[1][r]}var sx={name:`tasklistCheck`,tokenize:lx};function cx(){return{text:{91:sx}}}function lx(e,t,n){let r=this;return i;function i(t){return r.previous!==null||!r._gfmTasklistFirstContentOfListItem?n(t):(e.enter(`taskListCheck`),e.enter(`taskListCheckMarker`),e.consume(t),e.exit(`taskListCheckMarker`),a)}function a(t){return op(t)?(e.enter(`taskListCheckValueUnchecked`),e.consume(t),e.exit(`taskListCheckValueUnchecked`),o):t===88||t===120?(e.enter(`taskListCheckValueChecked`),e.consume(t),e.exit(`taskListCheckValueChecked`),o):n(t)}function o(t){return t===93?(e.enter(`taskListCheckMarker`),e.consume(t),e.exit(`taskListCheckMarker`),e.exit(`taskListCheck`),s):n(t)}function s(r){return Z(r)?t(r):Q(r)?e.check({tokenize:ux},t,n)(r):n(r)}}function ux(e,t,n){return $(e,r,`whitespace`);function r(e){return e===null?n(e):t(e)}}function dx(e){return Jf([Db(),Ub(),Zb(e),tx(),cx()])}var fx={};function px(e){let t=this,n=e||fx,r=t.data(),i=r.micromarkExtensions||=[],a=r.fromMarkdownExtensions||=[],o=r.toMarkdownExtensions||=[];i.push(dx(n)),a.push(gb()),o.push(_b(n))}function mx(){return e=>{let t=e=>{if(e.type===`element`){let t=e.tagName===`a`?`href`:e.tagName===`img`?`src`:void 0,n=t?e.properties[t]:void 0,r=typeof n==`string`?n.replace(/%5c/giu,`\\`):n;t&&typeof r==`string`&&/^[a-z]:[\\/]/iu.test(r)&&!/[\x00-\x1f\x7f]/u.test(r)&&(e.data={...e.data,openpiWindowsPath:r},e.properties[t]=`./`)}for(let n of e.children)n.type===`element`&&t(n)};t(e)}}function hx(e){let t=e?.data?.openpiWindowsPath;return typeof t==`string`?t:void 0}function gx(e){if(!e.trim())return``;try{let t=new URL(e,document.baseURI);return[`http:`,`https:`,`mailto:`,`tel:`].includes(t.protocol)?t.href:``}catch{return``}}var _x=(0,w.memo)(function({children:e}){let t=(0,w.useContext)(sd);return(0,V.jsx)(`div`,{className:`markdown`,children:(0,V.jsx)(V_,{remarkPlugins:[px,vv],rehypePlugins:[mx,uv],urlTransform:e=>Vu(e)?e:gx(e),components:{a({href:e,node:n,children:r,...i}){if(e=hx(n)??e,Vu(e??``))return t?(0,V.jsxs)(`button`,{type:`button`,className:`artifact-link`,title:`Open read-only file: ${e}`,onClick:()=>t.open(e??``,t.parent),children:[r,(0,V.jsxs)(`small`,{className:`artifact-link-path`,"aria-hidden":`true`,children:[` `,`(`,e,`)`]})]}):(0,V.jsx)(`span`,{title:`Open this file from its Session`,children:r});let a=gx(e??``);return a?(0,V.jsx)(`a`,{...i,href:a,target:`_blank`,rel:`noreferrer`,children:r}):r},img({src:e,node:n,alt:r,title:i}){if(e=hx(n)??e,Vu(e??``))return t?(0,V.jsxs)(`button`,{type:`button`,className:`artifact-link`,title:`Open read-only file: ${e}`,onClick:()=>t.open(e??``,t.parent),children:[`[image: `,r||`image`,`]`,(0,V.jsxs)(`small`,{className:`artifact-link-path`,"aria-hidden":`true`,children:[` `,`(`,e,`)`]})]}):(0,V.jsxs)(`span`,{children:[`[image: `,r||`image`,`]`]});let a=gx(e??``),o=r||`image`;return a?(0,V.jsxs)(`a`,{href:a,title:i,target:`_blank`,rel:`noreferrer`,children:[`[image: `,o,`]`]}):(0,V.jsx)(`span`,{children:o})}},children:e})})});async function vx(e){try{return await navigator.clipboard.writeText(e),!0}catch{}let t=document.activeElement,n=window.getSelection(),r=n?Array.from({length:n.rangeCount},(e,t)=>n.getRangeAt(t).cloneRange()):[],i=t instanceof HTMLInputElement||t instanceof HTMLTextAreaElement?{start:t.selectionStart,end:t.selectionEnd,direction:t.selectionDirection}:null,a=document.createElement(`textarea`);a.value=e,a.readOnly=!0,a.style.cssText=`position:fixed;opacity:0;pointer-events:none`;try{return document.body.append(a),a.focus({preventScroll:!0}),a.select(),document.execCommand(`copy`)}catch{return!1}finally{if(a.remove(),t instanceof HTMLElement&&t.isConnected&&(t.focus({preventScroll:!0}),i&&i.start!==null&&i.end!==null&&(t instanceof HTMLInputElement||t instanceof HTMLTextAreaElement)&&t.setSelectionRange(i.start,i.end,i.direction??void 0)),n){n.removeAllRanges();for(let e of r)e.startContainer.isConnected&&e.endContainer.isConnected&&n.addRange(e)}}}var yx={en:{translation:{conversationView:`Conversation view`,chatView:`Chat`,trajectory:`Trajectory`,trajectoryScope:`Recorded Session messages in order, not execution durations or the complete model request.`,trajectoryRunning:`Work is active. This view updates as saved records arrive; in-flight text is available in Chat.`,trajectoryTruncated:`Loaded history is partial: {{entries}} entries omitted, {{parts}} parts omitted, {{messages}} messages truncated.`,trajectoryEmpty:`No saved records yet.`,trajectoryOverview:`Record sequence overview`,trajectoryEarlier:`Show earlier records ({{count}} remaining in loaded history)`,trajectoryDetails:`Record details`,trajectoryRecordedAt:`Record timestamp`,trajectoryEvidenceTruncated:`This evidence was truncated in the Session projection.`,trajectoryArguments:`Tool arguments`,trajectoryRecordedContent:`Recorded content`,trajectoryThinking:`Recorded model reasoning`,trajectoryOutput:`Tool result`,trajectoryMissingResult:`No unambiguous result is included in the loaded records. This does not imply the tool is still running.`,trajectoryStructured:`Structured result`,trajectoryEventOnly:`Only this event’s type and timestamp are available.`,trajectory_user:`User prompt`,trajectory_assistant:`Assistant`,trajectory_call:`Tool call`,trajectory_result:`Unpaired result`,trajectory_event:`Session event`,trajectory_returned:`Tool returned successfully; background work may still be active.`,trajectory_error:`Tool returned an error`,trajectory_unknown:`Outcome not established`,runtimeStatus:`Runtime status`,refreshStatus:`Refresh status`,terminalDetails:`Terminal details`,inspectionChanged:`The active session changed. Reopen this panel.`,inspectionUnavailable:`Details are unavailable.`,inspectionLoading:`Loading status…`,thinkingUnavailable:`Thinking state is unavailable.`,trustUnavailable:`Project trust status is unavailable.`,authUnavailable:`Provider status is unavailable.`,executionState:`State`,terminalCommand:`Command`,terminalDirectory:`Directory`,startedAt:`Started`,exitCode:`Exit code`,detailTruncated:`Some details are shortened to keep this view bounded.`,standardOutput:`Standard output`,standardError:`Standard error`,outputTruncated:`{{count}} bytes omitted from this output view.`,outputRecovery:`The runtime reports a retained log. This view shows only a bounded excerpt.`,modelAndThinking:`Model and reasoning`,selectedModel:`Current model`,thinkingLevel:`Thinking level`,availableThinking:`Available levels`,unknownState:`Unknown`,projectTrust:`Project trust`,trust_trusted:`This session trusts the workspace.`,trust_untrusted:`Trust for this workspace has been denied.`,trust_restricted:`Project resources are restricted pending a trust decision.`,trust_unknown:`Trust state is not available.`,trustRefreshNeeded:`The saved decision and active session differ. Refresh the session through Pi to apply it.`,providerAvailability:`Provider credentials`,credentialConfigured:`Configured`,credentialMissing:`Not configured`,noProviders:`No providers reported.`,providersBounded:`This provider list is truncated.`,authNotVerified:`Configured credentials do not guarantee a successful model request.`,configurationViaPi:`Read-only status. Manage model credentials and trust through Pi; manage OpenPI options with /openpi-setup.`,statusCaptured:`Snapshot at {{time}} · refresh for the latest state`,conversationViews:`Conversation views`,currentConversations:`Current`,archivedConversations:`Archived`,restoreConversation:`Restore conversation`,restoringConversation:`Restoring…`,loadedArchives:`Archived conversations in the loaded history`,loadedHistoryBounded:`{{sessions}} more sessions and {{workspaces}} workspace summaries are not loaded. Search covers the loaded list only.`,noLoadedArchives:`No archived conversations in this loaded list.`,restoreFailed:`Could not confirm restoration. Refresh and try again.`,execution_running:`Running`,execution_done:`Completed`,execution_killed:`Stopped`,execution_timed_out:`Timed out`,execution_failed:`Failed`,execution_uncertain:`Uncertain`,activeOnlyHint:`Only the active Web session accepts messages.`,acceptedHint:`Message accepted by OpenPI Web.`,promptAdmissionUnknown:`It is unclear whether the last message was received.`,promptAdmissionUnknownDetail:`Review the refreshed Session history and runtime status before deciding. Sending as a new message may create a duplicate message.`,promptAdmissionCheckingDetail:`Checking the latest Session history and runtime status before resend options are enabled.`,promptAdmissionVerificationFailedDetail:`Could not refresh the latest Session history and runtime status. Check again before sending as a new message.`,abandonAdmission:`Don't resend for now`,retryAdmissionCheck:`Check again`,sendAsNew:`Send as new message`,sendingAsNew:`Sending…`,stopTurn:`Stop current turn`,stoppingTurn:`Stopping current turn…`,stoppedTurn:`Current turn stopped.`,pendingFollowUpsHint:`{{count}} messages queued`,addWorkspace:`Add workspace`,addWorkspaceMenu:`Add workspace...`,archiveConversation:`Archive conversation`,cancel:`Cancel`,chooseWorkspaceHint:`Choose a workspace and describe the work`,close:`Close`,closeSearch:`Close search`,collapseSidebar:`Collapse sidebar`,confirmEdit:`OK`,connected:`Connected`,connecting:`Connecting`,conversationName:`Conversation name`,conversationOptions:`Conversation options`,conversationTurns:`Conversation turns`,commands:`Slash commands`,commandsLoading:`Loading commands...`,commandsUnavailable:`Commands are temporarily unavailable.`,commandsNoMatch:`No matching commands.`,commandsBounded:`{{count}} more commands are not shown.`,commandSessionRequired:`Commands require an active Web session.`,commandUnsupported:`Not supported in Web`,commandAcceptsArguments:`Accepts arguments`,commandSource_extension:`Extension`,commandSource_prompt:`Prompt template`,commandSource_skill:`Skill`,copiedMessage:`Copied`,copyMessage:`Copy message`,copyFailed:`Copy failed. Please select and copy the message manually.`,deleteWorkspace:`Delete workspace`,describeTask:`Describe a task`,editMessage:`Edit message`,enterHint:`Enter to send, Shift+Enter for a new line.`,expandSidebar:`Expand sidebar`,importWorkspace:`Import workspace`,loadingModels:`Loading models...`,modelsTruncated:`Showing {{shown}} models. {{omitted}} more are available; search to find them.`,searchModels:`Search available models`,searchModelsPlaceholder:`Search provider, model name, or ID...`,searchingModels:`Searching models...`,noMatchingModels:`No matching models`,modelSearchFailed:`Could not search models. Try again.`,modelSearchTruncated:`{{omitted}} matching models are not shown.`,toolImageUnavailable:`1 image included; preview unavailable in Web.`,toolImagesUnavailable:`{{count}} images included; previews unavailable in Web.`,toolImageUnknownType:`image (type unavailable)`,toolImagesMetadataOmitted:`{{count}} image metadata item(s) are not shown.`,toolUnsupportedContentBlocks:`{{count}} unsupported content block(s) are not shown.`,toolContentPartsOmitted:`{{count}} additional content block(s) are not shown.`,modelPreparing:`Preparing task...`,modelRetrying:`Retrying model request...`,modelRunning:`Working...`,newSession:`New session`,noConversations:`No conversations yet`,noMatching:`No matching conversations`,noModels:`No models available`,noOutput:`no output`,noSessions:`No sessions`,openSidebar:`Open sidebar`,promptMessage:`Send a message to the active Web session`,promptReadonly:`A non-active session cannot receive prompts`,promptStart:`Choose a workspace to begin.`,promptTask:`Describe what you want to build.`,queuedHint:`The message will be queued after the current turn.`,reconnecting:`Reconnecting`,removeWorkspace:`Remove from sidebar`,renameConversation:`Rename conversation`,renameWorkspace:`Rename workspace`,save:`Save`,searchConversations:`Search conversations`,searchPlaceholder:`Search conversations...`,selectModel:`Select model`,selectThinking:`Select thinking level`,selectWorkspace:`Select workspace`,send:`Send`,stepsLabel:`steps`,switchingSession:`Switching session...`,thinkingActive:`Thinking...`,thinkingActiveLevel:`Thinking ({{level}})...`,thinkingDone:`Thinking`,thinkingDraftHint:`Choose a workspace and create a session first.`,thinkingInactiveHint:`Only the active session can change its thinking level.`,thinkingLevelMismatch:`The confirmed thinking level is not offered by the current model. Choosing another level will correct it.`,thinkingLockedRunning:`Stop the current turn before changing the thinking level.`,thinkingModelPendingHint:`Wait for the model change to finish.`,thinkingNotConfirmed:`Thinking level was not confirmed. Please try again.`,thinkingPendingHint:`Applying the thinking level...`,thinkingUnsupported:`Thinking is unavailable`,thinkingUnsupportedHint:`No model is selected, or the current model does not support thinking.`,unavailable:`Unavailable`,ungrouped:`Ungrouped`,untitledSession:`New session`,workspaceDeleteConfirm:`The folder and conversation records will be kept. Its conversations will move to Ungrouped.`,workspaceName:`Workspace name`,workspaces:`Workspaces`}},zh:{translation:{conversationView:`会话视图`,chatView:`对话`,trajectory:`执行轨迹`,trajectoryScope:`按记录顺序展示会话消息,不表示执行耗时,也不是完整模型请求。`,trajectoryRunning:`任务仍在进行。已保存记录到达后自动更新;实时生成内容可在“对话”中查看。`,trajectoryTruncated:`当前历史不完整:省略 {{entries}} 条记录、{{parts}} 个内容片段,{{messages}} 条消息被截断。`,trajectoryEmpty:`尚无已保存记录。`,trajectoryOverview:`记录顺序总览`,trajectoryEarlier:`显示更早记录(已加载历史中还有 {{count}} 条)`,trajectoryDetails:`记录详情`,trajectoryRecordedAt:`记录时间`,trajectoryEvidenceTruncated:`此证据在会话投影中已被截断。`,trajectoryArguments:`工具参数`,trajectoryRecordedContent:`已记录内容`,trajectoryThinking:`模型返回的推理内容`,trajectoryOutput:`工具结果`,trajectoryMissingResult:`当前记录中没有可明确配对的结果。这不表示工具仍在运行。`,trajectoryStructured:`结构化结果`,trajectoryEventOnly:`当前仅提供此事件的类型和记录时间。`,trajectory_user:`用户 Prompt`,trajectory_assistant:`模型消息`,trajectory_call:`工具调用`,trajectory_result:`未配对结果`,trajectory_event:`会话事件`,trajectory_returned:`工具已成功返回;其启动的后台任务可能仍在进行。`,trajectory_error:`工具返回错误`,trajectory_unknown:`尚无法确定结果`,runtimeStatus:`运行状态`,refreshStatus:`刷新状态`,terminalDetails:`终端详情`,inspectionChanged:`当前会话已切换,请重新打开详情。`,inspectionUnavailable:`暂时无法读取详情。`,inspectionLoading:`正在读取状态…`,thinkingUnavailable:`暂时无法读取思考等级。`,trustUnavailable:`暂时无法读取项目信任状态。`,authUnavailable:`暂时无法读取服务商状态。`,executionState:`状态`,terminalCommand:`命令`,terminalDirectory:`目录`,startedAt:`启动时间`,exitCode:`退出码`,detailTruncated:`部分详情已截断,以限制页面加载量。`,standardOutput:`标准输出`,standardError:`错误输出`,outputTruncated:`此输出视图省略了 {{count}} 字节。`,outputRecovery:`运行时报告已保留日志;此处仅显示有大小限制的片段。`,modelAndThinking:`模型与思考`,selectedModel:`当前模型`,thinkingLevel:`思考等级`,availableThinking:`支持的等级`,unknownState:`未知`,projectTrust:`项目信任`,trust_trusted:`当前会话信任此工作区。`,trust_untrusted:`此工作区的信任已被拒绝。`,trust_restricted:`项目资源受到限制,等待信任决定。`,trust_unknown:`尚无法确定信任状态。`,trustRefreshNeeded:`保存的信任决定与当前会话不同,请通过 Pi 刷新会话后生效。`,providerAvailability:`服务商凭据`,credentialConfigured:`已配置`,credentialMissing:`未配置`,noProviders:`未发现服务商。`,providersBounded:`服务商列表已截断。`,authNotVerified:`凭据已配置不代表模型请求一定成功。`,configurationViaPi:`此处为只读状态。模型凭据与信任由 Pi 管理,OpenPI 选项通过 /openpi-setup 配置。`,statusCaptured:`采集于 {{time}} · 刷新查看最新状态`,conversationViews:`会话视图`,currentConversations:`当前`,archivedConversations:`已归档`,restoreConversation:`恢复会话`,restoringConversation:`正在恢复…`,loadedArchives:`已加载历史中的归档会话`,loadedHistoryBounded:`另有 {{sessions}} 个会话和 {{workspaces}} 个工作区摘要未加载。搜索仅覆盖已加载列表。`,noLoadedArchives:`已加载列表中没有归档会话。`,restoreFailed:`暂时无法确认恢复结果,请刷新后重试。`,execution_running:`运行中`,execution_done:`已完成`,execution_killed:`已停止`,execution_timed_out:`已超时`,execution_failed:`失败`,execution_uncertain:`状态不确定`,activeOnlyHint:`只有当前 Web 会话可以接收消息。`,stopTurn:`停止当前轮次`,stoppingTurn:`正在停止当前轮次…`,stoppedTurn:`当前轮次已停止。`,pendingFollowUpsHint:`{{count}} 条消息正在排队`,acceptedHint:`OpenPI Web 已接收消息。`,promptAdmissionUnknown:`无法确认上次发送的消息是否已被接收。`,promptAdmissionUnknownDetail:`请先核对已刷新的会话历史和运行状态,再决定下一步。作为新消息发送可能产生重复消息。`,promptAdmissionCheckingDetail:`正在核对最新的会话历史和运行状态,核对完成前不能作为新消息发送。`,promptAdmissionVerificationFailedDetail:`暂时无法刷新最新的会话历史和运行状态。请重新核对后再决定是否作为新消息发送。`,abandonAdmission:`暂不重新发送`,retryAdmissionCheck:`重新核对`,sendAsNew:`作为新消息发送`,sendingAsNew:`正在发送…`,addWorkspace:`添加工作区`,addWorkspaceMenu:`添加工作区...`,archiveConversation:`归档会话`,cancel:`取消`,chooseWorkspaceHint:`选择工作区并描述任务`,close:`关闭`,closeSearch:`关闭搜索`,collapseSidebar:`收起侧边栏`,confirmEdit:`确定`,connected:`已连接`,connecting:`正在连接`,conversationName:`会话名称`,conversationOptions:`会话选项`,conversationTurns:`会话轮次`,commands:`斜杠命令`,commandsLoading:`正在加载命令…`,commandsUnavailable:`暂时无法读取命令。`,commandsNoMatch:`没有匹配的命令。`,commandsBounded:`另有 {{count}} 个命令未显示。`,commandSessionRequired:`命令仅在已创建的 Web 会话中可用。`,commandUnsupported:`当前 Web 不支持`,commandAcceptsArguments:`可输入参数`,commandSource_extension:`扩展命令`,commandSource_prompt:`提示词模板`,commandSource_skill:`技能`,copiedMessage:`已复制`,copyMessage:`复制消息`,copyFailed:`复制失败,请选中消息后手动复制。`,deleteWorkspace:`删除工作区`,describeTask:`描述任务`,editMessage:`编辑消息`,enterHint:`按 Enter 发送,Shift+Enter 换行。`,expandSidebar:`展开侧边栏`,importWorkspace:`导入工作区`,loadingModels:`正在加载模型...`,modelsTruncated:`当前显示 {{shown}} 个模型,还有 {{omitted}} 个可用;搜索即可查找。`,searchModels:`搜索可用模型`,searchModelsPlaceholder:`搜索服务商、模型名称或 ID...`,searchingModels:`正在搜索模型...`,noMatchingModels:`没有匹配的模型`,modelSearchFailed:`模型搜索失败,请重试。`,modelSearchTruncated:`还有 {{omitted}} 个匹配模型未显示。`,toolImageUnavailable:`结果包含 1 张图片,Web 暂不提供图片预览。`,toolImagesUnavailable:`结果包含 {{count}} 张图片,Web 暂不提供图片预览。`,toolImageUnknownType:`图片(类型不可用)`,toolImagesMetadataOmitted:`还有 {{count}} 项图片元数据未显示。`,toolUnsupportedContentBlocks:`还有 {{count}} 个不支持的内容块未显示。`,toolContentPartsOmitted:`还有 {{count}} 个内容块未显示。`,modelPreparing:`正在准备任务...`,modelRetrying:`模型请求重试中...`,modelRunning:`正在运行...`,newSession:`新建会话`,noConversations:`暂无对话`,noMatching:`没有匹配的会话`,noModels:`没有可用模型`,noOutput:`无输出`,noSessions:`暂无会话`,openSidebar:`打开侧边栏`,promptMessage:`向当前 Web 会话发送消息`,promptReadonly:`非当前会话不能接收消息`,promptStart:`选择一个工作区开始`,promptTask:`描述你想要构建的任务`,queuedHint:`当前回合结束后将发送消息。`,reconnecting:`正在重连`,removeWorkspace:`从侧边栏移除`,renameConversation:`重命名会话`,renameWorkspace:`重命名工作区`,save:`保存`,searchConversations:`搜索会话`,searchPlaceholder:`搜索会话...`,selectModel:`选择模型`,selectThinking:`选择思考等级`,selectWorkspace:`选择工作区`,send:`发送`,stepsLabel:`个步骤`,switchingSession:`正在切换会话...`,thinkingActive:`思考中...`,thinkingActiveLevel:`思考中({{level}})...`,thinkingDone:`思考过程`,thinkingDraftHint:`请先选择工作区并创建会话。`,thinkingInactiveHint:`只有当前会话可以更改思考等级。`,thinkingLevelMismatch:`当前确认的思考等级不在此模型支持范围内;选择其它等级即可修正。`,thinkingLockedRunning:`请先停止当前轮次,再更改思考等级。`,thinkingModelPendingHint:`请等待模型切换完成。`,thinkingNotConfirmed:`思考等级未获确认,请重试。`,thinkingPendingHint:`正在应用思考等级...`,thinkingUnsupported:`暂不支持思考`,thinkingUnsupportedHint:`尚未选择模型,或当前模型不支持思考。`,unavailable:`不可用`,ungrouped:`未分组`,untitledSession:`新会话`,workspaceDeleteConfirm:`文件夹与会话记录会保留,其中的会话会被放到“未分组”;再次打开此目录时将是一个干净的工作区。`,workspaceName:`工作区名称`,workspaces:`工作区`}}},bx=navigator.language?.toLowerCase().startsWith(`zh`)?`zh`:`en`;Pt.use($t).init({fallbackLng:`en`,initAsync:!1,interpolation:{escapeValue:!1},lng:bx,resources:yx}),document.documentElement.lang=bx===`zh`?`zh-CN`:`en`;function xx(e){if(!(e===void 0||!Number.isSafeInteger(e)||e<0))return e<1024?`${e} bytes`:e<1048576?`${Math.round(e/1024)} KiB`:`${(e/1048576).toFixed(1)} MiB`}function Sx({images:e,imageCount:t,partsOmitted:n=0,unsupportedContentBlocks:r=0}){let{t:i}=sn(void 0,{i18n:Pt}),a=e??[],o=t??a.length,s=Math.max(0,o-a.length),c=new Map;return o<=0&&r<=0&&n<=0?null:(0,V.jsxs)(`div`,{className:`evidence-warning image-evidence`,role:`status`,children:[o>0&&(0,V.jsx)(`p`,{children:i(o===1?`toolImageUnavailable`:`toolImagesUnavailable`,{count:o})}),a.map(e=>{let t=xx(e.bytes),n=`${e.mimeType||`unknown`}-${e.bytes??`unknown`}`,r=c.get(n)??0;return c.set(n,r+1),(0,V.jsxs)(`p`,{children:[e.mimeType||i(`toolImageUnknownType`),t?` · ${t}`:``]},`${n}-${r}`)}),s>0&&(0,V.jsx)(`p`,{children:i(`toolImagesMetadataOmitted`,{count:s})}),r>0&&(0,V.jsx)(`p`,{children:i(`toolUnsupportedContentBlocks`,{count:r})}),n>0&&(0,V.jsx)(`p`,{children:i(`toolContentPartsOmitted`,{count:n})})]})}function Cx({children:e,className:t,"aria-label":n}){return(0,V.jsx)(`figure`,{"aria-label":n,children:(0,V.jsx)(`pre`,{className:t,children:e})})}function wx({call:e,result:t,liveState:n,cwd:r}){let i=Xu(e,t,n),a=(i.diff??i.output).split(`
+`).map((e,t)=>({text:e,number:i.offset+t})),o=i.tests?.failures.map((e,t)=>({text:e,number:t+1}))??[];return(0,V.jsxs)(`details`,{className:`tool-evidence-card evidence-${i.kind}`,children:[(0,V.jsxs)(`summary`,{children:[(0,V.jsx)(`strong`,{children:e.name}),(0,V.jsx)(`span`,{children:i.path||i.command||i.kind}),(0,V.jsx)(`span`,{className:`evidence-status`,children:i.state})]}),(0,V.jsxs)(`div`,{className:`evidence-content`,children:[i.path&&(0,V.jsxs)(`p`,{children:[(0,V.jsx)(`strong`,{children:`Requested file:`}),` `,(0,V.jsx)(`code`,{children:i.resolvedPath??i.path}),r&&(0,V.jsxs)(V.Fragment,{children:[(0,V.jsx)(`br`,{}),(0,V.jsxs)(`small`,{children:[`Workspace: `,r]})]})]}),i.command&&(0,V.jsx)(Cx,{"aria-label":`Command`,children:i.command}),(i.kind===`terminal`||i.kind===`test`)&&(0,V.jsxs)(`p`,{children:[`Process: `,i.processState,` ·`,` `,i.exitCode===void 0?i.signal?`signal ${i.signal}`:`exit code unavailable`:`exit ${i.exitCode}`]}),i.truncated&&(0,V.jsx)(`p`,{className:`evidence-warning`,children:`Partial evidence — byte, line or item limit reached. Raw evidence below may also be truncated.`}),(0,V.jsx)(Sx,{images:i.images,imageCount:i.imageCount,partsOmitted:i.partsOmitted,unsupportedContentBlocks:i.unsupportedContentBlocks}),i.change&&(0,V.jsx)(`p`,{children:i.change===`created`?`File created`:i.change===`unchanged`?`No content changes`:`File overwritten`}),i.kind===`change`&&!i.diff&&!i.change&&(0,V.jsx)(`p`,{children:i.evidenceUnavailable??`The tool result does not include a change comparison.`}),i.tests&&(0,V.jsxs)(`figure`,{"aria-label":`Test evidence`,children:[(0,V.jsx)(`figcaption`,{children:(0,V.jsxs)(`strong`,{children:[`Reported test results (`,i.tests.format,`)`]})}),(0,V.jsxs)(`p`,{children:[i.tests.tests,` tests · `,i.tests.passed,` passed ·`,` `,i.tests.failed,` failed · `,i.tests.cancelled,` cancelled`]}),(0,V.jsx)(`p`,{children:`Reported counts are output evidence; execution status is shown separately.`}),o.map(e=>(0,V.jsx)(Cx,{"aria-label":`Failure excerpt ${e.number}`,children:e.text},e.number))]}),i.diff?(0,V.jsx)(Cx,{className:`evidence-lines`,"aria-label":`Change diff`,children:a.map(e=>(0,V.jsxs)(`span`,{className:/^\+/u.test(e.text.trimStart())?`diff-added`:/^-/u.test(e.text.trimStart())?`diff-removed`:``,children:[e.text,`
+`]},e.number))}):i.numberLines?(0,V.jsx)(Cx,{className:`evidence-lines`,"aria-label":`File content`,children:a.map(e=>(0,V.jsxs)(`span`,{children:[(0,V.jsx)(`span`,{className:`evidence-line-number`,"aria-hidden":`true`,children:e.number}),e.text,`
+`]},e.number))}):i.output?(0,V.jsx)(Cx,{className:`evidence-log`,"aria-label":`Tool output`,children:i.output}):i.imageCount>0||i.partsOmitted>0||i.unsupportedContentBlocks>0?null:(0,V.jsx)(Cx,{className:`evidence-log`,"aria-label":`Tool output`,children:`No output received`}),i.kind===`file`&&i.truncated&&(0,V.jsx)(`p`,{children:`Read another range using the file path and offset. Consult the original result for the tool's recovery instructions.`}),i.recovery&&(0,V.jsxs)(`p`,{children:[`Full output reference: `,(0,V.jsx)(`code`,{children:i.recovery})]}),i.readRecovery&&(0,V.jsx)(`p`,{className:`evidence-warning`,children:i.readRecovery}),(0,V.jsxs)(`details`,{children:[(0,V.jsx)(`summary`,{children:`Raw arguments and result (sanitized)`}),(0,V.jsx)(`p`,{children:(0,V.jsx)(`strong`,{children:`Arguments`})}),(0,V.jsx)(`pre`,{children:i.rawArguments}),(0,V.jsx)(`p`,{children:(0,V.jsx)(`strong`,{children:`Result`})}),(0,V.jsx)(`pre`,{children:i.rawResult})]})]})]})}function Tx({sessionId:e,children:t}){let n=(0,w.useMemo)(()=>new ed,[]),[r,i]=(0,w.useState)(null),[a,o]=(0,w.useState)(null),[s,c]=(0,w.useState)(null),[l,u]=(0,w.useState)(!1),d=(0,w.useRef)(null),f=(0,w.useRef)(null),p=(0,w.useRef)(null),m=(0,w.useRef)(new Set),h=(0,w.useRef)(void 0),g=(0,w.useCallback)((t,n)=>{d.current=document.activeElement instanceof HTMLElement?document.activeElement:null,o(null),c(null),h.current=n,i({reference:t,parent:n,sessionId:e})},[e]),_=(0,w.useCallback)(()=>{i(null),o(null),d.current?.focus()},[]);(0,w.useEffect)(()=>{r&&r.sessionId!==e&&(i(null),o(null))},[e,r]),(0,w.useEffect)(()=>{if(!r||!e||r.sessionId!==e)return;let t=new AbortController,i,a=r.parent,s,l=!1,d,g=2e3;f.current?.focus();let _=async()=>{if(document.visibilityState===`hidden`){s=setTimeout(_,2e3);return}try{if(i||=(await n.resolveArtifact(e,r.reference,a,t.signal)).handle,a&&=(n.releaseArtifact(e,a).catch(()=>void 0),void 0),l){n.releaseArtifact(e,i).catch(()=>void 0);return}if(d&&(await n.artifactMetadata(e,i,t.signal)).identity===d){l||c(null),g=Math.min(g*2,3e4);return}let s=await n.artifactPreview(e,i,t.signal);l||(d=s.identity,g=2e3,o(s),c(null))}catch(e){g=Math.min(g*2,3e4),l||c(e instanceof Error?e.message:`Unable to read file`)}finally{l||(s=setTimeout(_,g))}};return _(),()=>{l=!0,t.abort(),clearTimeout(s),p.current?.abort(),u(!1),i&&i!==h.current&&n.releaseArtifact(e,i).catch(()=>void 0),a&&n.releaseArtifact(e,a).catch(()=>void 0);for(let e of m.current)URL.revokeObjectURL(e);m.current.clear()}},[n,r,e]);let v=(0,w.useMemo)(()=>({open:g}),[g]),y=async()=>{if(!a||l)return;let e=new AbortController;p.current=e,u(!0);try{let t=await n.downloadArtifact(a.artifact,e.signal);if(e.signal.aborted)return;let r=URL.createObjectURL(t);m.current.add(r);let i=document.createElement(`a`);i.href=r,i.download=a.artifact.name,i.click(),setTimeout(()=>{URL.revokeObjectURL(r),m.current.delete(r)},1e3)}catch(t){e.signal.aborted||c(t instanceof Error?t.message:`Download failed`)}finally{e.signal.aborted||u(!1)}};return(0,V.jsxs)(sd.Provider,{value:v,children:[t,r&&(0,V.jsxs)(`dialog`,{open:!0,className:`artifact-panel`,"aria-label":`File preview`,onKeyDown:e=>{e.key===`Escape`&&(e.stopPropagation(),_())},children:[(0,V.jsxs)(`header`,{children:[(0,V.jsx)(`h2`,{children:`File preview`}),(0,V.jsx)(`button`,{ref:f,type:`button`,onClick:_,children:`Close preview`})]}),(0,V.jsx)(`p`,{className:`artifact-source`,children:a?.artifact.path??r.reference}),(0,V.jsxs)(`p`,{children:[`Read-only access · Session `,e]}),(0,V.jsxs)(`div`,{className:`artifact-actions`,children:[(0,V.jsx)(`button`,{type:`button`,onClick:()=>{h.current=void 0,i(t=>t?{sessionId:e,reference:a?.artifact.path??t.reference,...a?{}:{parent:t.parent}}:null)},children:`Refresh`}),(0,V.jsx)(`button`,{type:`button`,disabled:!a||l,onClick:()=>void y(),children:l?`Downloading…`:`Download`})]}),s&&(0,V.jsxs)(`p`,{role:`status`,className:`evidence-warning`,children:[a?`Showing an older preview. `:``,s]}),!a&&!s&&(0,V.jsx)(`p`,{role:`status`,children:`Reading file…`}),a&&(0,V.jsxs)(V.Fragment,{children:[(0,V.jsxs)(`p`,{className:`artifact-revision`,children:[`Version: `,(0,V.jsx)(`code`,{children:a.artifact.revision}),` ·`,` `,a.artifact.bytes,` bytes`]}),a.truncated&&(0,V.jsx)(`p`,{className:`evidence-warning`,children:`Preview truncated. Download the file for the complete content.`}),a.text===void 0?(0,V.jsx)(`p`,{children:`This file type cannot be previewed. Use Download.`}):/\.(?:md|markdown)$/iu.test(a.artifact.name)?(0,V.jsx)(sd.Provider,{value:{open:g,parent:a.artifact.handle},children:(0,V.jsx)(_x,{children:a.text})}):(0,V.jsx)(`section`,{"aria-label":`File preview content`,children:(0,V.jsx)(`pre`,{children:a.text})})]})]})]})}function Ex(e){return e&&typeof e==`object`?e:{}}function Dx(e){try{return Ex(JSON.parse(e))}catch{return{}}}function Ox(e){return e===`running`?`running`:e===`done`||e===`completed`?`done`:[`error`,`failed`,`aborted`,`killed`,`timed_out`].includes(String(e))?`error`:e===`uncertain`?`warn`:`unknown`}function kx(e){if(!e)return`running`;if(e.isError)return`error`;let t=Ox(Ex(e.details).status);return t===`unknown`?e.isError===!1?`done`:`unknown`:t}function Ax({status:e}){return e===`running`?(0,V.jsx)(`span`,{className:`status-mark running`,role:`img`,"aria-label":`running`,children:(0,V.jsx)(`i`,{})}):e===`done`?(0,V.jsx)(L,{className:`status-mark done`,"aria-label":`completed`}):e===`error`?(0,V.jsx)(Re,{className:`status-mark error`,"aria-label":`failed`}):e===`warn`?(0,V.jsx)(`span`,{className:`status-mark warn`,role:`img`,"aria-label":`uncertain`,children:`?`}):null}function jx(e){let t=e.toLowerCase();return t===`bash`?(0,V.jsx)(Ne,{}):t===`read`?(0,V.jsx)(me,{}):t===`write`||t===`edit`?(0,V.jsx)(pe,{}):t===`grep`?(0,V.jsx)(De,{}):t===`glob`||t===`ls`?(0,V.jsx)(he,{}):t===`webfetch`||t===`websearch`?(0,V.jsx)(_e,{}):(0,V.jsx)(Le,{})}function Mx(e,t){let n=e===`bash`?t.command:[`read`,`write`,`edit`,`ls`].includes(e)?t.path:[`grep`,`glob`].includes(e)?t.pattern:e===`webfetch`?t.url:e===`websearch`?t.query:``;return typeof n==`string`?dl(n.split(`
+`).find(Boolean),90):``}function Nx({body:e,icon:t,name:n,status:r,summary:i,thinking:a=!1,images:o,imageCount:s,partsOmitted:c,unsupportedContentBlocks:l}){return(0,V.jsxs)(`details`,{className:`message-details tool-line ${r===`error`?`error`:``} ${a?`thinking-line`:``}`,children:[(0,V.jsxs)(`summary`,{children:[(0,V.jsx)(`span`,{className:`details-mark`,"aria-hidden":`true`}),(0,V.jsx)(`span`,{className:`tool-icon`,"aria-hidden":`true`,children:t}),(0,V.jsxs)(`span`,{className:`details-title`,children:[(0,V.jsx)(`span`,{className:`tool-name`,children:n}),i&&(0,V.jsx)(`span`,{className:`tool-summary`,children:i})]}),(0,V.jsx)(Ax,{status:r})]}),(0,V.jsx)(Sx,{images:o,imageCount:s,partsOmitted:c,unsupportedContentBlocks:l}),(0,V.jsx)(`pre`,{className:`details-body tool-evidence`,children:Wu(e).text})]})}function Px({body:e,family:t,meta:n,status:r,title:i,images:a,imageCount:o,partsOmitted:s,unsupportedContentBlocks:c}){return(0,V.jsxs)(`details`,{className:`message-details activity-card ${t}`,children:[(0,V.jsxs)(`summary`,{children:[(0,V.jsx)(`span`,{className:`activity-icon`,"aria-hidden":`true`,children:t===`subagent`?(0,V.jsx)(P,{}):(0,V.jsx)(Ie,{})}),(0,V.jsxs)(`span`,{className:`activity-main`,children:[(0,V.jsx)(`span`,{className:`activity-title`,children:i}),n&&(0,V.jsx)(`span`,{className:`activity-meta`,children:n})]}),(0,V.jsx)(Ax,{status:r}),(0,V.jsx)(`span`,{className:`details-mark`,"aria-hidden":`true`})]}),(0,V.jsx)(`pre`,{className:`details-body tool-evidence`,children:e}),(0,V.jsx)(Sx,{images:a,imageCount:o,partsOmitted:s,unsupportedContentBlocks:c})]})}function Fx(e,t){let n=e.name||``,r=Dx(e.arguments),i=Ex(t?.details),a=kx(t),o={images:t?.images,imageCount:t?.imageCount,partsOmitted:t?.truncation?.partsOmitted,unsupportedContentBlocks:t?.unsupportedContentBlocks};if(n===`subagent_spawn`){let n=[r.agent_type,r.model,r.working_dir].filter(Boolean).join(` · `);return(0,V.jsx)(Px,{family:`subagent`,title:`Spawn Subagent · ${String(i.title||r.name||`subagent`)}`,meta:n||String(i.cwd||``),body:t?.content||String(r.prompt||e.arguments),status:a,...o})}if(n.startsWith(`subagent`)){let i=n.replaceAll(`_`,` `).replace(/^subagent /u,``);return(0,V.jsx)(Px,{family:`subagent`,title:`${i[0]?.toUpperCase()||``}${i.slice(1)} Subagent`,meta:String(r.id||``),body:t?.content||e.arguments,status:a,...o})}if(n===`workflow`){let n=typeof r.script==`string`?r.script:e.arguments,s=String(i.name||n.match(/\bname:\s*["'`]([^"'`]+)["'`]/u)?.[1]||`unnamed`),c=Ex(i.agents),l=[i.runId,i.status,c.total?`${Number(c.total)-Number(c.running||0)}/${c.total} agents`:``].filter(Boolean).join(` · `);return(0,V.jsx)(Px,{family:`workflow`,title:`Workflow · ${s}`,meta:l,body:t?.content||n,status:a,...o})}return n.startsWith(`workflow`)?(0,V.jsx)(Px,{family:`workflow`,title:n.replaceAll(`_`,` `),meta:String(r.runId||``),body:t?.content||e.arguments,status:a,...o}):null}function Ix(e,t){let[n,r]=(0,w.useState)(Date.now());return(0,w.useEffect)(()=>{if(!t)return;let e=window.setInterval(()=>r(Date.now()),1e3);return()=>window.clearInterval(e)},[t]),e?ml(e,t?n:Date.now()):``}function Lx({body:e,start:t,duration:n,active:r,level:i}){let{t:a}=sn(),o=Ix(t,r),s=n?ml(0,n):o;return(0,V.jsx)(Nx,{body:e,icon:(0,V.jsx)(ye,{}),name:r?i?a(`thinkingActiveLevel`,{level:i}):a(`thinkingActive`):a(`thinkingDone`),status:r?`running`:`done`,summary:s?`· ${s}`:void 0,thinking:!0})}function Rx({content:e,editable:t,timestamp:n,onResend:r}){let{t:i}=sn(),[a,o]=(0,w.useState)(!1),[s,c]=(0,w.useState)(!1),[l,u]=(0,w.useState)(!1),d=(0,w.useRef)(0),f=(0,w.useRef)(void 0);(0,w.useEffect)(()=>()=>{d.current+=1,window.clearTimeout(f.current)},[]);let[p,m]=(0,w.useState)(!1),[h,g]=(0,w.useState)(e),_=(0,w.useRef)(null);if((0,w.useEffect)(()=>{p&&_.current?.focus()},[p]),p)return(0,V.jsxs)(`div`,{className:`message-editor`,children:[(0,V.jsx)(`textarea`,{ref:_,value:h,onChange:e=>g(e.target.value),onKeyDown:e=>{e.key===`Escape`&&m(!1),e.key===`Enter`&&!e.shiftKey&&!e.nativeEvent.isComposing&&(e.preventDefault(),r(h.trim()).then(e=>e&&m(!1)))}}),(0,V.jsxs)(`div`,{className:`message-edit-actions`,children:[(0,V.jsx)(`button`,{type:`button`,onClick:()=>m(!1),children:i(`cancel`)}),(0,V.jsx)(`button`,{type:`button`,className:`confirm`,onClick:()=>void r(h.trim()).then(e=>e&&m(!1)),children:i(`confirmEdit`)})]})]});let v=pl(n);return(0,V.jsxs)(`div`,{className:`message-actions${s?` copy-failed`:``}`,children:[v&&(0,V.jsx)(`time`,{dateTime:n,children:v}),t&&(0,V.jsx)(`button`,{type:`button`,"aria-label":i(`editMessage`),title:i(`editMessage`),onClick:()=>m(!0),children:(0,V.jsx)(Ce,{})}),(0,V.jsx)(`button`,{type:`button`,"aria-label":i(a?`copiedMessage`:`copyMessage`),title:i(a?`copiedMessage`:`copyMessage`),disabled:l,onClick:()=>{let t=++d.current;window.clearTimeout(f.current),u(!0),o(!1),c(!1),vx(e).then(e=>{t===d.current&&(u(!1),o(e),c(!e),e&&(f.current=window.setTimeout(()=>o(!1),1200)))})},children:a?(0,V.jsx)(L,{}):(0,V.jsx)(oe,{})}),s&&(0,V.jsx)(`span`,{className:`copy-error`,role:`status`,children:i(`copyFailed`)})]})}function zx({message:e}){let t=Ex(e.details);if(e.customType===`subagent-result`)return(0,V.jsx)(Px,{family:`subagent`,title:`Subagent ${String(t.id||``)} · ${String(t.title||`result`)}`,meta:[t.outcome,t.elapsed].filter(Boolean).join(` · `),body:e.content,status:Ox(t.status),images:e.images,imageCount:e.imageCount,partsOmitted:e.truncation?.partsOmitted,unsupportedContentBlocks:e.unsupportedContentBlocks});if(e.customType===`workflow-result`){let n=Array.isArray(t.entries)?t.entries.map(Ex):[],r=n.map(e=>Ox(e.status)),i=r.includes(`error`)?`error`:r.includes(`warn`)?`warn`:r.length>0&&r.every(e=>e===`done`)?`done`:r.includes(`running`)?`running`:`unknown`,a=n.length?n.map(e=>`${e.status===`completed`?`✓`:`✗`} ${String(e.summary||e.runId||`run`)}${e.resultPreview?`\nResult: ${e.resultPreview}`:``}`).join(`
+`):e.content;return(0,V.jsx)(Px,{family:`workflow`,title:n.length>1?`Workflow results · ${n.length} runs`:`Workflow ${String(n[0]?.runId||`result`)}`,body:a,status:i,images:e.images,imageCount:e.imageCount,partsOmitted:e.truncation?.partsOmitted,unsupportedContentBlocks:e.unsupportedContentBlocks})}return null}function Bx(e){return[``,`[]`,`{}`,`null`].includes(e.trim())}function Vx(e,t){let n=(e.selectedSession?.entries??[]).flatMap(e=>e.type===`message`&&e.message?[{key:e.id,timestamp:e.timestamp,message:e.message}]:[]),r=new Set(n.map(e=>`${e.message.role||``}:${e.message.content}`)),i=new Set(n.flatMap(e=>e.message.role===`toolResult`&&e.message.toolCallId?[e.message.toolCallId]:[]));for(let e of t)(e.message.role===`toolResult`&&e.message.toolCallId?i.has(e.message.toolCallId):r.has(`${e.message.role||``}:${e.message.content}`))||n.push({key:e.key,timestamp:new Date().toISOString(),message:e.message});return n}function Hx(e,t){let n=[];for(let t of e){let e=n.at(-1);t.groupable&&e?.grouped?e.rows.push(t):n.push({grouped:!!t.groupable,rows:[t]})}return n.map(e=>{let n=`${e.grouped?`group`:`rows`}-${e.rows[0]?.key}`;return!e.grouped||e.rows.length<4?(0,V.jsx)(w.Fragment,{children:e.rows.map(e=>(0,V.jsx)(w.Fragment,{children:e.content},e.key))},n):(0,V.jsxs)(`details`,{className:`tool-group ${e.rows.some(e=>e.error)?`error`:``}`,children:[(0,V.jsxs)(`summary`,{children:[(0,V.jsx)(`span`,{className:`details-mark`,"aria-hidden":`true`}),(0,V.jsx)(`span`,{className:`tool-group-icons`,"aria-hidden":`true`,children:e.rows.slice(0,4).map(e=>(0,V.jsx)(w.Fragment,{children:e.icon},e.key))}),(0,V.jsxs)(`span`,{children:[e.rows.length,` `,t]})]}),(0,V.jsx)(`div`,{className:`tool-group-body`,children:e.rows.map(e=>(0,V.jsx)(w.Fragment,{children:e.content},e.key))})]},n)})}function Ux(e){let{t}=sn(),n=(0,w.useRef)(null),r=(0,w.useRef)(!0),i=(0,w.useRef)(void 0),a=(0,w.useRef)(e.scrollToBottom),o=(0,w.useMemo)(()=>Vx(e.snapshot,e.liveMessages),[e.snapshot,e.liveMessages]),s=e.snapshot.selectedSession,c=s?.id===e.snapshot.currentSessionId,{rows:l,turns:u}=(0,w.useMemo)(()=>{let n=new Map,r=new Set,i=new Set,a=e.snapshot.runtime.liveTools??[];o.forEach(({message:e})=>{e.role===`toolResult`&&e.toolCallId&&n.set(e.toolCallId,e),e.parts?.forEach(e=>{e.type===`toolCall`&&e.id&&Ku(e.name)&&i.add(e.id),e.type===`toolCall`&&e.id&&/^(subagent|workflow)/u.test(e.name)&&r.add(e.id)})});let l=[],u=0,d=-1;for(let e=o.length-1;e>=0;e--)if(o[e]?.message.role===`user`){d=e;break}let f=new Set,p=-1;return o.forEach(({message:e},t)=>{e.role===`user`?(p>=0&&f.add(p),p=-1):e.role===`assistant`&&e.content.trim()&&(p=t)}),p>=0&&f.add(p),{rows:o.flatMap((p,m)=>{let h=p.message;if(h.role===`custom`)return[{key:p.key,content:(0,V.jsx)(`article`,{className:`message-row assistant detail-only`,children:(0,V.jsx)(`div`,{className:`message-content`,children:(0,V.jsx)(zx,{message:h})})})}];if(h.role===`user`)return u++,l.push({id:u,title:hl(h.content)}),[{key:p.key,content:(0,V.jsxs)(`article`,{className:`message-row user`,id:`turn-${u}`,children:[(0,V.jsx)(`div`,{className:`message-content`,children:(0,V.jsx)(`div`,{className:`message-body`,children:h.content})}),(0,V.jsx)(Rx,{content:h.content,editable:c&&m===d,timestamp:p.timestamp,onResend:e.onResend})]})}];if(h.role===`assistant`){let t=[];return h.parts?.forEach((r,i)=>{if(r.type===`thinking`){let n=c&&e.liveRunning&&m===o.length-1;t.push({key:`${p.key}-thinking-${i}`,icon:(0,V.jsx)(ye,{}),content:(0,V.jsx)(`article`,{className:`message-row assistant detail-only`,children:(0,V.jsx)(`div`,{className:`message-content`,children:(0,V.jsx)(Lx,{body:r.text,active:n,level:n?e.snapshot.thinking?.level:void 0,start:e.thinkingStarts[p.key],duration:e.thinkingDurations[p.key]})})})})}if(r.type===`toolCall`){let e=r.id?a.find(e=>e.call.id===r.id):void 0,o=r.id?n.get(r.id):void 0,c=o??e?.result,l=Ku(r.name)?(0,V.jsx)(wx,{call:r,result:c,liveState:o?void 0:e?.state,cwd:s?.cwd},`${p.key}-${r.id||i}-evidence`):Fx(r,c),u=Dx(r.arguments),d=jx(r.name);t.push({key:`${p.key}-tool-${r.id||i}`,groupable:!l||Ku(r.name),error:!!c?.isError,icon:d,content:(0,V.jsx)(`article`,{className:`message-row assistant detail-only`,children:(0,V.jsx)(`div`,{className:`message-content`,children:l||(0,V.jsx)(Nx,{body:r.name===`bash`&&typeof u.command==`string`?u.command:r.arguments,icon:d,name:r.name||`tool`,summary:Mx(r.name,u),status:kx(c)})})})})}}),((h.imageCount??h.images?.length??0)>0||(h.unsupportedContentBlocks??0)>0)&&t.push({key:`${p.key}-image-evidence`,content:(0,V.jsx)(`article`,{className:`message-row assistant detail-only`,children:(0,V.jsx)(`div`,{className:`message-content`,children:(0,V.jsx)(Sx,{images:h.images,imageCount:h.imageCount,partsOmitted:h.truncation?.partsOmitted,unsupportedContentBlocks:h.unsupportedContentBlocks})})})}),h.content.trim()&&t.push({key:`${p.key}-answer`,content:(0,V.jsxs)(`article`,{className:`message-row assistant`,children:[(0,V.jsx)(`div`,{className:`message-content`,children:(0,V.jsx)(_x,{children:h.content})}),f.has(m)&&(0,V.jsx)(Rx,{content:h.content,editable:!1,timestamp:p.timestamp,onResend:e.onResend})]})}),t}if(h.role===`toolResult`){if(h.toolCallId&&i.has(h.toolCallId)||h.toolCallId&&r.has(h.toolCallId))return[];let e=h.toolName?.startsWith(`subagent`)?`subagent`:h.toolName?.startsWith(`workflow`)?`workflow`:null,n=kx(h),a=h.toolName||`tool`,o=(h.imageCount??h.images?.length??0)>0||(h.unsupportedContentBlocks??0)>0||(h.truncation?.partsOmitted??0)>0,s=e===`subagent`?(0,V.jsx)(P,{},`${p.key}-icon`):e===`workflow`?(0,V.jsx)(Ie,{},`${p.key}-icon`):jx(a),c=e?(0,V.jsx)(Px,{family:e,title:`${a.replaceAll(`_`,` `)} · ${dl(h.content)}`,body:h.content,status:n,images:h.images,imageCount:h.imageCount,partsOmitted:h.truncation?.partsOmitted,unsupportedContentBlocks:h.unsupportedContentBlocks},`${p.key}-card`):Bx(h.content)&&!o?(0,V.jsxs)(`div`,{className:`tool-line-empty`,children:[(0,V.jsx)(`span`,{className:`tool-icon`,children:s}),(0,V.jsx)(`span`,{className:`tool-name`,children:a}),(0,V.jsx)(`span`,{className:`tool-summary`,children:t(`noOutput`)}),(0,V.jsx)(Ax,{status:n})]},`${p.key}-empty`):(0,V.jsx)(Nx,{body:h.content,icon:s,name:a,summary:dl(h.content),status:n,images:h.images,imageCount:h.imageCount,partsOmitted:h.truncation?.partsOmitted,unsupportedContentBlocks:h.unsupportedContentBlocks},`${p.key}-evidence`);return[{key:p.key,groupable:!e,error:n===`error`,icon:s,content:(0,V.jsx)(`article`,{className:`message-row assistant detail-only`,children:(0,V.jsx)(`div`,{className:`message-content`,children:c})})}]}return[]}),turns:l}},[c,o,e.liveRunning,e.onResend,e.snapshot.thinking?.level,e.thinkingDurations,e.thinkingStarts,e.snapshot.runtime.liveTools,s?.cwd,t]);(0,w.useLayoutEffect)(()=>{let t=n.current;if(!t||!s)return;let o=i.current!==s.path,c=a.current!==e.scrollToBottom;a.current=e.scrollToBottom,(o||c||r.current)&&(r.current=!0,typeof t.scrollTo==`function`?t.scrollTo({top:t.scrollHeight,behavior:`instant`}):t.scrollTop=t.scrollHeight),i.current=s.path},[s,o,e.scrollToBottom]);let d=c&&(e.snapshot.runtime.status===`running`||e.liveRunning),f=e.liveRetry?`${t(`modelRetrying`)} (${e.liveRetry.attempt}/${e.liveRetry.maxAttempts})`:e.livePhase===`preparing`?t(`modelPreparing`):t(`modelRunning`);return(0,V.jsxs)(Tx,{sessionId:s?.id,children:[(0,V.jsxs)(`div`,{ref:n,className:`conversation`,role:`log`,"aria-label":`Conversation`,onScroll:e=>{let t=e.currentTarget;r.current=t.scrollTop+t.clientHeight>=t.scrollHeight-48},children:[Hx(l,t(`stepsLabel`)),d&&(0,V.jsxs)(`div`,{className:`conversation-running`,role:`status`,"aria-live":`polite`,children:[(0,V.jsx)(`span`,{className:`conversation-running-dot`}),(0,V.jsx)(`span`,{children:f})]})]}),u.length>1&&(0,V.jsx)(`nav`,{className:`turn-rail`,"aria-label":t(`conversationTurns`),children:u.map(e=>(0,V.jsxs)(`button`,{className:`turn-tick`,type:`button`,title:e.title,onClick:()=>document.getElementById(`turn-${e.id}`)?.scrollIntoView({block:`start`,behavior:`smooth`}),children:[(0,V.jsx)(`span`,{className:`turn-tick-mark`}),(0,V.jsx)(`span`,{className:`turn-tick-label`,children:e.title})]},e.id))})]})}var Wx=class extends Error{constructor(e,t){super(e),this.name=`ParseError`,this.type=t.type,this.field=t.field,this.value=t.value,this.line=t.line}},Gx=10,Kx=13,qx=32,Jx=6;function Yx(e){if(typeof e==`function`)throw TypeError("`config` must be an object, got a function instead. Did you mean `createParser({onEvent: fn})`?");let{maxBufferSize:t,onComment:n,onError:r,onEvent:i,onId:a,onRetry:o}=e,s=[],c=0,l=!0,u,d=``,f=0,p,m=!1,h=!1,g=!1;function _(e){if(m)throw Error("Cannot feed parser: it was terminated after exceeding the configured max buffer size. Call `reset()` to resume parsing.");if(l&&(l=!1,e.charCodeAt(0)===65279?e=e.slice(1):e.charCodeAt(0)===239&&e.charCodeAt(1)===187&&e.charCodeAt(2)===191&&(e=e.slice(3))),(h||g)&&(e=v(e),!e))return;if(!s.length){let t=S(e);t!==``&&y(t),x();return}if(e.indexOf(`
+`)===-1&&e.indexOf(`\r`)===-1){if(c0&&i?.({id:u,event:p,data:d}),u=void 0,d=``,f=0,p=void 0,t=n+1,n=e.indexOf(`
-`,t);continue}let r=e.charCodeAt(t);if(Jx(e,t,r)){let r=e.charCodeAt(t+5)===Gx?t+6:t+5,o=e.slice(r,n);if(f===0&&e.charCodeAt(n+1)===Ux){u!==void 0&&a?.(u),i?.({id:u,event:p,data:o}),u=void 0,d=``,p=void 0,t=n+2,n=e.indexOf(`
-`,t);continue}d=f===0?o:`${d}\n${o}`,f++}else Yx(e,t,r)?p=e.slice(e.charCodeAt(t+6)===Gx?t+7:t+6,n)||void 0:C(e,t,n);t=n+1,n=e.indexOf(`
+`,t);continue}let r=e.charCodeAt(t);if(Xx(e,t,r)){let r=e.charCodeAt(t+5)===qx?t+6:t+5,o=e.slice(r,n);if(f===0&&e.charCodeAt(n+1)===Gx){u!==void 0&&a?.(u),i?.({id:u,event:p,data:o}),u=void 0,d=``,p=void 0,t=n+2,n=e.indexOf(`
+`,t);continue}d=f===0?o:`${d}\n${o}`,f++}else Zx(e,t,r)?p=e.slice(e.charCodeAt(t+6)===qx?t+7:t+6,n)||void 0:C(e,t,n);t=n+1,n=e.indexOf(`
`,t)}return e.slice(t)}for(;t20?`${e.slice(0,20)}…`:e}"`,{type:`unknown-field`,field:e,value:t,line:n}))}}function T(){u!==void 0&&a?.(u),f>0&&i?.({id:u,event:p,data:d}),u=void 0,d=``,f=0,p=void 0}function E(e={}){if(e.consume&&s.length>0){let e=s.join(``);C(e,0,e.length)}l=!0,u=void 0,d=``,f=0,p=void 0,s.length=0,c=0,m=!1,h=!1,g=!1}return{feed:_,reset:E}}function Jx(e,t,n){return n===100&&e.charCodeAt(t+1)===97&&e.charCodeAt(t+2)===116&&e.charCodeAt(t+3)===97&&e.charCodeAt(t+4)===58}function Yx(e,t,n){return n===101&&e.charCodeAt(t+1)===118&&e.charCodeAt(t+2)===101&&e.charCodeAt(t+3)===110&&e.charCodeAt(t+4)===116&&e.charCodeAt(t+5)===58}function Xx(e,t){let n=1;for(;nt.abort();e.signal.addEventListener(`abort`,n,{once:!0}),e.signal.aborted&&n();let r=window.setTimeout(n,45e3),i=await fetch(`/events?cursor=${e.cursor}`,{headers:e.client.headers(),signal:t.signal}).finally(()=>{window.clearTimeout(r),e.signal.removeEventListener(`abort`,n)});if(i.status===409)throw new Zx(`event replay expired`);if(!i.ok||!i.body)throw Error(`event connection failed`);e.onConnected();let a=e.cursor,o=0,s=qx({onComment(t){t.trim()===`heartbeat`&&++o>=4&&(o=0,e.onHeartbeat?.())},onEvent(t){let n=JSON.parse(t.data);if(!Number.isSafeInteger(n.sequence))throw new Zx(`invalid event cursor`);if(!(n.sequence<=a)){if(n.sequence!==a+1)throw new Zx(`event cursor gap`);if(a=n.sequence,n.type===`state_invalidated`)throw new Zx(`state invalidated`);e.onEvent(n)}}}),c=i.body.getReader(),l=new TextDecoder;try{for(;!e.signal.aborted;){let t,n,r=c.read(),i=new Promise((r,i)=>{n=()=>i(Error(`event stream aborted`)),e.signal.addEventListener(`abort`,n,{once:!0}),e.signal.aborted&&n(),t=window.setTimeout(()=>i(Error(`event stream stalled`)),45e3)}),{done:a,value:o}=await Promise.race([r,i]).finally(()=>{window.clearTimeout(t),n&&e.signal.removeEventListener(`abort`,n)});if(a)throw Error(`event connection closed`);s.feed(l.decode(o,{stream:!0}))}}finally{await c.cancel().catch(()=>void 0)}}function $x(e,t,n){if([`session_start`,`session_switched`,`session_created`].includes(t))return[];if([`agent_settled`,`turn_settled`].includes(t))return e.map(e=>e.state===`running`?{...e,state:`unknown`}:e);if(!t.startsWith(`tool_execution_`))return e;let r=n.toolCallId;if(typeof r!=`string`||r.length>500)return e;let i=e.find(e=>e.call.id===r);if(i&&i.state!==`running`&&(i.state!==`unknown`||t!==`tool_execution_end`))return e;let a=Uu(n.call),o=a.type===`toolCall`&&typeof a.name==`string`&&typeof a.arguments==`string`?a:i?.call;if(!o||o.evidenceTruncated&&o.id?.includes(`[truncated]`))return e;let s=Uu(n.result),c={call:o,result:typeof s.content==`string`?s:i?.result,state:t===`tool_execution_end`?n.isError===!0?`failed`:`returned`:`running`},l=[...e.filter(e=>e.call.id!==r),c].slice(-32);for(;l.length>0&&new TextEncoder().encode(JSON.stringify(l)).byteLength>524288;)l.shift();return l}var eS=`openpi.collapsed-workspaces`,tS=`openpi.sidebar-collapsed`,nS=new Set([`agent_start`,`turn_started`,`turn_settled`,`agent_settled`,`prompt_settled`,`message_end`,`tool_execution_end`,`session_start`,`session_switched`,`session_progress`,`prompt_failed`,`model_select`,`workspace_imported`,`workspace_removed`,`workspace_renamed`,`session_renamed`,`session_archived`,`session_unarchived`,`session_created`,`prompt_accepted`,`runtime_changed`]);function rS(e){try{let t=JSON.parse(window.sessionStorage.getItem(e)||`[]`);return new Set(Array.isArray(t)?t.filter(e=>typeof e==`string`):[])}catch{return new Set}}function iS(e){try{return window.sessionStorage.getItem(e)===`true`}catch{return!1}}function aS(e,t){try{window.sessionStorage.setItem(e,JSON.stringify(t))}catch{}}function oS(e,t){return t.aborted?Promise.resolve():new Promise(n=>{let r=()=>{window.clearTimeout(i),t.removeEventListener(`abort`,r),n()},i=window.setTimeout(r,e);t.addEventListener(`abort`,r,{once:!0})})}function sS(e=new ed,t={}){let n=t.consumeEvents??Qx,r=0,i=0,a=0,o=null,s=null,c=null,l=null,u=Promise.resolve(),d=null,f=!1,p=!1,m=null,h=null,g=0,_=null,v=0,y=!1,b=0,x=0,S=null,C=-1,w=null,T=0,E=new Set,D=new Set,O=(e,t)=>{if(typeof t==`string`)for(e.add(t);e.size>32;){let t=e.values().next().value;t&&e.delete(t)}},k=()=>({activeTurn:null,turnCancellationPending:!1,turnTerminalStatus:null,pendingFollowUpsReceipt:null,liveMessages:[],liveRunning:!1,livePhase:`idle`,liveRetry:null,thinkingStarts:{},thinkingDurations:{}}),A=()=>(g++,h?.abort(),h=null,{modelSearch:{query:``,status:`idle`,models:[],totalMatches:0,matchesOmitted:0,error:null}}),j=()=>({sessionId:null,status:`idle`,commands:[],totalAvailable:0,commandsOmitted:0,error:null}),M=(e,t)=>({liveRunning:t===`running`||!e,livePhase:t===`running`?`running`:e?`idle`:`preparing`});return un((t,N)=>{let P=e=>{t({notice:e instanceof Error?e.message:String(e)})},ee=e=>{let t=N().snapshot;return e.epoch===r&&N().selectedWorkspace===e.workspacePath&&t?.currentSessionId===e.sessionId&&t.selectedSession?.id===e.sessionId&&t.selectedSession.cwd===e.workspacePath&&(!e.sessionPath||t.selectedSession.path===e.sessionPath)},F=()=>{T++,w?.abort(),w=null,t({commandDiscovery:j()})},I=async(n,i,a)=>{if(N().modelSelectionPending)return!1;t({modelSelectionPending:!0});try{let o=await e.selectModel(n.provider,n.id,a);if(i!==r||a!==N().snapshot?.selectedSession?.id)return!1;if(o.provider!==n.provider||o.id!==n.id||!o.current)throw Error(`Model selection was not confirmed. Please select a model again.`);if(!await N().actions.refreshSnapshot({epoch:i})||i!==r||a!==N().snapshot?.selectedSession?.id)return!1;let s=N().snapshot?.models.find(e=>e.current);if(s?.provider!==n.provider||s.id!==n.id)throw Error(`The Session model changed. Please select a model again.`);return t({draftModel:null,notice:null}),!0}catch(e){return i===r&&a===N().snapshot?.selectedSession?.id&&P(e),!1}finally{i===r&&t({modelSelectionPending:!1})}},L=(e=160)=>{if(f){p=!0;return}d===null&&(d=window.setTimeout(async()=>{d=null,f=!0;try{await N().actions.refreshSnapshot()}finally{f=!1,p&&(p=!1,L())}},e))},te=()=>{S=null,x=0,C=-1},ne=()=>{let e=N().snapshot;if(!e)return;S&&C!==r&&te();let n=e.thinking;if(n){if(!S||n.revision>=x){S=n,x=n.revision,C=r;return}n!==S&&t({snapshot:{...e,thinking:S}})}},re=e=>{S&&C!==r&&te(),e&&e.revision>=x&&(S=e,x=e.revision,C=r),ne()},R=()=>{_=null,v++,y=!1,t({thinkingPendingLevel:null})},z=async()=>{let t=r,n=N().snapshot?.selectedSession?.id;if(n)try{let i=await e.thinking(n,new AbortController().signal);if(t!==r||n!==N().snapshot?.selectedSession?.id)return;re(i)}catch{}},ie=async()=>{if(y)return;y=!0;let n=++b;try{for(;_!==null;){let n=_,i=v,a=r,o=N().snapshot?.selectedSession?.id;if(!o||N().modelSelectionPending){R();return}if(N().snapshot?.thinking?.level===n){i===v&&(_=null,t({thinkingPendingLevel:null}));continue}let s;try{s=await e.setThinkingLevel(o,n)}catch(e){if(a!==r)return;if(i!==v)continue;R(),P(e),z();return}if(a!==r||o!==N().snapshot?.selectedSession?.id)return;if(i===v){if(s.level!==n){R(),P(Error(Pt.t(`thinkingNotConfirmed`)));return}re(s),_=null,t({thinkingPendingLevel:null}),L();return}}}finally{n===b&&(y=!1)}},ae=e=>{let n=N(),i=e.detail??{},a=i.sessionId,l=[`session_start`,`session_switched`,`session_created`].includes(e.type);if(n.cursor!==null&&e.sequence<=n.cursor)return;t({cursor:e.sequence});let u=n.promptAdmissionRecovery,d=u?.commandId;if(typeof i.commandId==`string`&&i.commandId===d&&[`prompt_accepted`,`prompt_failed`,`prompt_settled`,`turn_started`,`turn_settled`].includes(e.type)){let r=e.type!==`prompt_failed`;t({promptAdmissionRecovery:null,promptAdmissionResolution:r&&u?{commandId:u.commandId,content:u.content}:n.promptAdmissionResolution,liveMessages:r&&u&&!n.liveMessages.some(e=>e.key===u.optimisticKey)?[...n.liveMessages,{key:u.optimisticKey,message:{role:`user`,content:u.content}}].slice(-8):n.liveMessages})}if(e.type===`runtime_changed`&&t(A()),e.type===`runtime_changed`&&F(),n.sessionSwitching&&!l){L();return}if(typeof a==`string`&&a!==n.snapshot?.currentSessionId&&!l){L();return}if(n.snapshot){let r=$x(n.snapshot.runtime.liveTools??[],e.type,i);t({snapshot:{...n.snapshot,runtime:{...n.snapshot.runtime,liveTools:r}}})}if(l){let l=i.commandId;if(typeof l==`string`&&D.has(l)){L();return}let d=i.sessionPath,f=n.snapshot?.sessions.some(e=>e.path===d),p=!1;if(c?.kind===`select`?p=c.expectedPath===d:(c?.kind===`create`&&c.commandId===l&&e.type===`session_switched`&&typeof a==`string`&&(!c.expectedSessionId||c.expectedSessionId===a)&&(typeof d!=`string`||!f)||c?.kind===`create`&&c.commandId===l&&e.type===`session_created`&&typeof a==`string`&&(!c.expectedSessionId||a===c.expectedSessionId))&&(p=!0),p&&c?.epoch!==r)return;if(p)t(k());else{F();let e=++r;R(),o=null,s=null,t({...k(),promptAdmissionPending:!1,promptAdmissionRecovery:null,promptAdmissionResolution:u?{commandId:u.commandId,content:u.content}:n.promptAdmissionResolution,selectedPath:typeof d==`string`?d:null,draftModel:n.workspaceDraft?n.draftModel:null,modelSelectionPending:!1,sessionSwitching:!0}),N().actions.refreshSnapshot({epoch:e}).then(n=>{e===r&&t({selectedPath:n?N().selectedPath:null,sessionSwitching:!1})})}}else if(e.type===`prompt_accepted`){let e=E.has(String(i.commandId??``));t({...M(e,n.livePhase),liveRetry:null,pendingFollowUpsReceipt:Number.isInteger(i.pendingFollowUps)?Number(i.pendingFollowUps):n.pendingFollowUpsReceipt})}else if(e.type===`turn_started`)t({activeTurn:{sessionId:String(i.sessionId),commandId:String(i.commandId),epoch:Number(i.epoch)},liveRunning:!0,livePhase:`running`,liveRetry:null,turnTerminalStatus:null});else if(e.type===`agent_start`)t({...i.activeTurn?{activeTurn:i.activeTurn}:{},liveRunning:!0,livePhase:`running`,liveRetry:null});else if(e.type===`turn_settled`){O(E,i.commandId);let e=n.activeTurn;e?.sessionId===i.sessionId&&e?.commandId===i.commandId&&e?.epoch===i.epoch&&t({activeTurn:null,liveRunning:!1,livePhase:`idle`,liveRetry:null,turnTerminalStatus:typeof i.outcome==`string`?i.outcome:null})}else if(e.type===`agent_settled`)t({pendingFollowUpsReceipt:null,...n.activeTurn?{}:{liveRunning:!1,livePhase:`idle`,liveRetry:null}});else if(e.type===`prompt_settled`)O(E,i.commandId),n.livePhase!==`running`&&t({liveRunning:!1,livePhase:`idle`,liveRetry:null});else if(i.message&&typeof i.message==`object`){let r=i.message,a=n.liveMessages;r.role===`user`&&(a=a.filter(e=>!e.key.startsWith(`optimistic-`)||e.message.content!==r.content));let o=typeof i.messageKey==`string`?i.messageKey:`${r.role||`message`}-${e.sequence}`,s={key:o,message:r},c=a.findIndex(e=>e.key===o);a=c>=0?a.map((e,t)=>t===c?s:e):[...a,s].slice(-8);let l={...n.thinkingStarts},u={...n.thinkingDurations};r.parts?.some(e=>e.type===`thinking`)&&(l[o]??=Date.now(),e.type===`message_end`&&(u[o]=Date.now()-l[o])),t({liveMessages:a,thinkingDurations:u,thinkingStarts:l})}if(e.type===`prompt_failed`&&(O(E,i.commandId),t({liveMessages:N().liveMessages.filter(e=>!e.key.startsWith(`optimistic-`)),liveRunning:!1,livePhase:`idle`,liveRetry:null,notice:typeof i.error==`string`?i.error:`Prompt failed`})),e.type===`auto_retry_start`&&t({liveRunning:!0,livePhase:`running`,liveRetry:{attempt:Number(i.attempt)||0,maxAttempts:Number(i.maxAttempts)||0}}),e.type===`thinking_level_changed`){let t=N().snapshot?.thinking;t&&typeof i.level==`string`&&re({...t,level:i.level,revision:e.sequence})}nS.has(e.type)&&L()},oe=async r=>{let i=500;for(;!r.aborted;){let a=!1;try{if(N().cursor===null){if(a=!0,!await N().actions.refreshSnapshot({resetCursor:!0}))throw Error(`snapshot unavailable`);a=!1}if(r.aborted)return;await n({client:e,cursor:N().cursor??0,onConnected:()=>{i=500,t({connection:`connected`})},onEvent:ae,onHeartbeat:()=>L(0),signal:r})}catch(e){if(r.aborted)return;t({connection:`reconnecting`}),!a&&await N().actions.refreshSnapshot({resetCursor:!0})||t(k()),await oS(i,r),i=Math.min(i*2,5e3),e instanceof SyntaxError&&t({notice:`Invalid event data`})}}},se={start(){m||(m=new AbortController,oe(m.signal))},stop(){m?.abort(),m=null,d!==null&&window.clearTimeout(d),d=null,R(),F()},async refreshSnapshot(n={}){let a=n.epoch??r,o=++i,c=N().selectedPath;try{let l=await e.snapshot(c);if(a!==r||o!==i)return!1;let u=typeof l.currentSessionId==`string`,d=u?l.sessions.find(e=>e.id===l.currentSessionId):void 0,f=u?l.selectedSession?.id===l.currentSessionId:l.selectedSession===void 0,p=!c||l.sessions.some(e=>e.path===c),m=!c||l.selectedSession?.path===c;if(!p||!m||!f)return t({selectedPath:null}),!n.canonicalRetry&&se.refreshSnapshot({...n,canonicalRetry:!0,epoch:a});let h=l.selectedSession?.cwd,g=l.workspaces.find(e=>e.current)?.path,_=l.workspaces.some(e=>e.path===N().selectedWorkspace)?N().selectedWorkspace:void 0,v=N().workspaceDraft?N().selectedWorkspace:l.workspaces.some(e=>e.path===h)?h:g??_??null,y=n.resetCursor;return y&&te(),N().snapshot?.currentSessionId!==l.currentSessionId&&F(),t({...y?k():{},connection:N().connection===`connecting`?`connecting`:N().connection,cursor:y||N().cursor===null?l.cursor:Math.max(N().cursor??0,l.cursor),activeTurn:l.runtime.activeTurn??null,livePhase:l.runtime.status===`running`?`running`:!N().promptAdmissionPending&&!s?`idle`:N().livePhase,liveRetry:l.runtime.status!==`running`&&!N().promptAdmissionPending&&!s?null:N().liveRetry,liveRunning:l.runtime.status===`running`?!0:!N().promptAdmissionPending&&!s?!1:N().liveRunning,selectedPath:d?.path??l.selectedSession?.path??null,selectedWorkspace:v,snapshot:l,...A()}),re(),!0}catch(e){return a!==r||o!==i?!1:(t({connection:`unavailable`}),P(e),!1)}},async chooseWorkspace(){let t=r;try{let n=await e.chooseWorkspace();if(t!==r||n.cancelled||!n.path)return;se.setWorkspace(n.path),await se.refreshSnapshot()}catch(e){t===r&&P(e)}},setWorkspace(e){let n=N();e===n.selectedWorkspace&&!n.sessionSwitching||(++r,l=null,R(),F(),o=null,s=null,t({...k(),...A(),selectedWorkspace:e,workspaceDraft:!0,sessionSwitching:!1,modelSelectionPending:!1,promptAdmissionPending:!1,promptAdmissionRecovery:null,promptAdmissionResolution:n.promptAdmissionRecovery?{commandId:n.promptAdmissionRecovery.commandId,content:n.promptAdmissionRecovery.content}:n.promptAdmissionResolution,notice:null}))},async renameWorkspace(t,n){try{await e.renameWorkspace(t,n),await se.refreshSnapshot()}catch(e){throw P(e),e}},async removeWorkspace(n){try{await e.removeWorkspace(n),N().selectedWorkspace===n&&F(),t({selectedPath:null,selectedWorkspace:N().selectedWorkspace===n?null:N().selectedWorkspace}),await se.refreshSnapshot()}catch(e){P(e)}},async createSession(n){if(!n||N().modelSelectionPending)return null;let i=N(),a=++r;R(),F();let d=(l?.workspacePath===n?l.commandId:void 0)??globalThis.crypto?.randomUUID?.()??`web-create-${Date.now()}-${a}`;l={workspacePath:n,commandId:d},o=null,s=null,t({...k(),...A(),mobileSidebarOpen:!1,promptAdmissionPending:!1,promptAdmissionRecovery:null,promptAdmissionResolution:i.promptAdmissionRecovery?{commandId:i.promptAdmissionRecovery.commandId,content:i.promptAdmissionRecovery.content}:i.promptAdmissionResolution,selectedPath:null,selectedWorkspace:n,workspaceDraft:!0,sessionSwitching:!0});let f=null,p=u.then(async()=>{if(a===r){c={commandId:d,epoch:a,expectedPath:null,kind:`create`};try{let i=await e.createSession(n,d);if(a!==r)return;if(i.cancelled||i.commandId!==d||typeof i.sessionId!=`string`||!i.sessionId||i.sessionId.length>128||i.sessionPath!==void 0&&!i.sessionPath)throw Error(`Session creation did not return a valid target identity.`);let o={epoch:a,sessionId:i.sessionId,sessionPath:i.sessionPath??null,workspacePath:n};c?.epoch===a&&(c.expectedSessionId=o.sessionId,c.expectedPath=o.sessionPath),t({selectedPath:o.sessionPath});let s=await se.refreshSnapshot({epoch:a});if(!s&&a===r&&(s=await se.refreshSnapshot({epoch:a})),a!==r)return;if(!s)throw Error(`The created Session could not be confirmed. Please try again.`);if(!ee(o)){l=null,P(Error(`The created Session is no longer active in the selected workspace. Please try again.`));return}t({workspaceDraft:!1,notice:null});let u=N().draftModel;if(u&&!await I(u,a,o.sessionId))return;if(N().workspaceDraft||!ee(o)){l=null,P(Error(`The created Session is no longer active in the selected workspace. Please try again.`));return}f=o,l=null}catch(e){if(a!==r)return;t({selectedPath:null}),P(e),await se.refreshSnapshot({epoch:a})}finally{O(D,d),c?.epoch===a&&(c=null),a===r&&t({sessionSwitching:!1})}}});return u=p.catch(()=>void 0),await p,a===r?f:null},async selectSession(n){if(!n)return;l=null;let i=N();F(),t({...A(),workspaceDraft:!1,draftModel:null,modelSelectionPending:!1});let a=++r;R(),o=null,s=null,t({...k(),mobileSidebarOpen:!1,promptAdmissionPending:!1,promptAdmissionRecovery:null,promptAdmissionResolution:i.promptAdmissionRecovery?{commandId:i.promptAdmissionRecovery.commandId,content:i.promptAdmissionRecovery.content}:i.promptAdmissionResolution,selectedPath:n,sessionSwitching:!0});let d=u.then(async()=>{if(a===r){c={epoch:a,expectedPath:n,kind:`select`};try{if(await e.selectSession(n),a!==r)return;await se.refreshSnapshot({epoch:a})||t({selectedPath:null})}catch(e){if(a!==r)return;t({selectedPath:null}),P(e),await se.refreshSnapshot({epoch:a})}finally{c?.epoch===a&&(c=null),a===r&&t({sessionSwitching:!1})}}});u=d.catch(()=>void 0),await d},async renameSession(t,n){try{await e.renameSession(t,n),await se.refreshSnapshot()}catch(e){throw P(e),e}},async archiveSession(t){try{await e.archiveSession(t),await se.refreshSnapshot()}catch(e){P(e)}},async unarchiveSession(t){let n=r;try{return await e.unarchiveSession(t),n!==r||await se.refreshSnapshot({epoch:n})}catch(e){return n===r&&P(e),!1}},async selectModel(e){let[n,...i]=e.split(`/`),a=i.join(`/`),o=N();if(!n||!a||o.sessionSwitching||o.modelSelectionPending||o.promptAdmissionPending||!o.workspaceDraft&&(o.liveRunning||o.snapshot?.runtime.status===`running`))return;let s=o.snapshot?.selectedSession?.id;if(o.workspaceDraft||!s&&!o.snapshot?.currentSessionId){let e=[...o.snapshot?.models??[],...o.modelSearch.models].find(e=>e.provider===n&&e.id===a);e&&t({draftModel:e,notice:null});return}!s||s!==o.snapshot?.currentSessionId||(R(),await I({provider:n,id:a},r,s))},async searchModels(n){let a=n.trim();if(!a){t(A());return}h?.abort();let o=new AbortController;h=o;let s=++g,c=r,l=i,u=N().snapshot?.currentSessionId;t({modelSearch:{query:a,status:`loading`,models:[],totalMatches:0,matchesOmitted:0,error:null}});try{let n=await e.searchModels(a,u,o.signal);if(o.signal.aborted||c!==r||l!==i||s!==g)return;t({modelSearch:{query:a,status:`ready`,models:n.models,totalMatches:n.totalMatches,matchesOmitted:n.truncation.matchesOmitted,error:null}})}catch(e){if(o.signal.aborted||c!==r||l!==i||s!==g)return;t({modelSearch:{query:a,status:`error`,models:[],totalMatches:0,matchesOmitted:0,error:e instanceof Error?e.message:String(e)}})}finally{h===o&&(h=null)}},clearModelSearch(){t(A())},selectThinking(e){let n=N(),r=n.snapshot?.thinking,i=n.snapshot?.selectedSession?.id;!e||!r?.supported||n.sessionSwitching||n.modelSelectionPending||n.workspaceDraft||!i||i!==n.snapshot?.currentSessionId||n.liveRunning||n.snapshot?.runtime.status===`running`||e!==(n.thinkingPendingLevel??r.level)&&(_=e,v++,t({thinkingPendingLevel:e}),ie())},async cancelActiveTurn(){let n=N().activeTurn??N().snapshot?.runtime.activeTurn;if(!n||N().turnCancellationPending||N().sessionSwitching)return;let i=r;t({turnCancellationPending:!0});try{await e.cancelActiveTurn(n)}catch(e){if(i!==r)return;await se.refreshSnapshot({epoch:i}),i===r&&P(e)}finally{i===r&&t({turnCancellationPending:!1})}},async sendPrompt(n){let i=n.trim(),c=N(),l=c.promptAdmissionRecovery,u=l?.phase===`submitting`?l:null,d=c.selectedWorkspace;if(!d||!i||c.sessionSwitching||c.promptAdmissionPending||l&&!u||c.promptAdmissionResolution||c.modelSelectionPending||c.thinkingPendingLevel!==null)return!1;let f=N().workspaceDraft||!N().snapshot?.selectedSession?.id,p=f?await se.createSession(d):null;if(f&&!p)return N().notice||t({notice:`The active Session changed before the first message was sent. Your message was not sent.`}),!1;if(f&&N().draftModel)return!1;let m=N().snapshot?.selectedSession,h=p??(m?{epoch:r,sessionId:m.id,sessionPath:m.path,workspacePath:d}:null);if(!h||N().workspaceDraft||!ee(h)||N().sessionSwitching||N().promptAdmissionPending||u&&(N().promptAdmissionRecovery?.commandId!==u.commandId||N().promptAdmissionRecovery?.phase!==`submitting`))return!1;let{epoch:g,sessionId:_}=h,v=N().draftModel;if(v&&!await I(v,g,_)||N().workspaceDraft||!ee(h)||u&&(N().promptAdmissionRecovery?.commandId!==u.commandId||N().promptAdmissionRecovery?.phase!==`submitting`))return!1;let y=++a,b=s?.sessionId===_&&s.content===i,x=b?s.commandId:globalThis.crypto?.randomUUID?.()??`web-prompt-${Date.now()}-${y}`,S=b?s.optimisticKey:`optimistic-${x}`;s={sessionId:_,content:i,commandId:x,optimisticKey:S},o=y,t({liveMessages:b?N().liveMessages:[...N().liveMessages,{key:S,message:{role:`user`,content:i}}].slice(-8),notice:null,pendingFollowUpsReceipt:null,turnTerminalStatus:null,promptAdmissionPending:!0,scrollToBottom:N().scrollToBottom+1});try{let n=await e.prompt(_,i,x,b);if(g!==r||o!==y)return!1;let a=E.has(n.id);return s?.commandId===x&&(s=null),t({...M(a,N().livePhase),pendingFollowUpsReceipt:n.pendingFollowUps??null,...u&&N().promptAdmissionRecovery?.commandId===u.commandId?{promptAdmissionRecovery:null}:{}}),L(120),!0}catch(e){if(g!==r||o!==y)return!1;if(e instanceof Qu&&e.code===`COMMAND_ADMISSION_UNKNOWN`&&s?.commandId===x){let e=s;s=null,t({liveRunning:!1,livePhase:`idle`,liveRetry:null,notice:null,promptAdmissionPending:!1,promptAdmissionRecovery:{...e,phase:`checking`}});let n=await se.refreshSnapshot({resetCursor:!0,epoch:g}),r=N().promptAdmissionRecovery;return r?.commandId===x&&t({promptAdmissionRecovery:{...r,phase:n?`ready`:`verification-failed`}}),!1}return e instanceof Qu&&[`WORKSPACE_REQUIRED`,`SESSION_CONFLICT`,`PROMPT_REJECTED`,`COMMAND_CONFLICT`,`PROMPT_ADMISSION_CAPACITY`].includes(e.code??``)?(s?.commandId===x&&(s=null),t({liveMessages:N().liveMessages.filter(e=>e.key!==S),livePhase:`idle`,liveRetry:null,liveRunning:!1}),P(e),!1):(t({liveRunning:!0,livePhase:N().livePhase===`running`?`running`:`preparing`,liveRetry:null}),P(e),!1)}finally{g===r&&o===y&&(o=null,t({promptAdmissionPending:!1}))}},async checkPromptAdmissionRecovery(){let e=N().promptAdmissionRecovery;if(!e||e.phase!==`verification-failed`)return;let n=r;t({notice:null,promptAdmissionRecovery:{...e,phase:`checking`}});let i=await se.refreshSnapshot({resetCursor:!0,epoch:n}),a=N().promptAdmissionRecovery;a?.commandId===e.commandId&&a.phase===`checking`&&t({promptAdmissionRecovery:{...a,phase:i?`ready`:`verification-failed`}})},async sendPromptAsNew(e){let n=N().promptAdmissionRecovery;if(!n||n.phase!==`ready`||n.sessionId!==N().snapshot?.selectedSession?.id)return!1;let r=e.trim();if(!r)return!1;t({promptAdmissionRecovery:{...n,phase:`submitting`},notice:null});let i=!1;try{return i=await se.sendPrompt(r),i}finally{let e=N().promptAdmissionRecovery;e?.commandId===n.commandId&&e.phase===`submitting`&&t({promptAdmissionRecovery:i?null:{...e,phase:`ready`}})}},abandonPromptAdmission(){let e=N().promptAdmissionRecovery;!e||e.phase===`submitting`||t({liveMessages:N().liveMessages.filter(t=>t.key!==e.optimisticKey),notice:null,promptAdmissionRecovery:null})},acknowledgePromptAdmissionResolution(e){N().promptAdmissionResolution?.commandId===e&&t({promptAdmissionResolution:null})},async discoverCommands(){let n=N(),i=n.snapshot?.selectedSession?.id;if(n.workspaceDraft||!i||i!==n.snapshot?.currentSessionId||n.sessionSwitching){F();return}if(n.commandDiscovery.sessionId===i&&(n.commandDiscovery.status===`loading`||n.commandDiscovery.status===`ready`))return;let a=r,o=++T;w?.abort();let s=new AbortController;w=s,t({commandDiscovery:{sessionId:i,status:`loading`,commands:[],totalAvailable:0,commandsOmitted:0,error:null}});try{let n=await e.commands(i,s.signal);if(s.signal.aborted||a!==r||o!==T||i!==N().snapshot?.currentSessionId)return;t({commandDiscovery:{sessionId:i,status:`ready`,commands:n.commands,totalAvailable:n.totalAvailable,commandsOmitted:n.truncation.commandsOmitted,error:null}})}catch(e){if(s.signal.aborted||a!==r||o!==T)return;t({commandDiscovery:{sessionId:i,status:`error`,commands:[],totalAvailable:0,commandsOmitted:0,error:e instanceof Error?e.message:String(e)}})}finally{w===s&&(w=null)}},clearCommandDiscovery:F,setQuery(e){t({query:e})},setSearchOpen(e){t({searchOpen:e,...e?{}:{query:``}})},toggleWorkspace(e){let n=new Set(N().collapsed);n.has(e)?n.delete(e):n.add(e),aS(eS,[...n]),t({collapsed:n})},toggleSidebar(e){if(e){t({mobileSidebarOpen:!N().mobileSidebarOpen});return}let n=!N().sidebarCollapsed;try{window.sessionStorage.setItem(tS,String(n))}catch{}t({sidebarCollapsed:n})},closeMobileSidebar(){t({mobileSidebarOpen:!1})},clearNotice(){t({notice:null})}};return{activeTurn:null,turnCancellationPending:!1,turnTerminalStatus:null,pendingFollowUpsReceipt:null,snapshot:null,cursor:null,selectedPath:null,selectedWorkspace:null,workspaceDraft:!1,draftModel:null,modelSelectionPending:!1,modelSearch:{query:``,status:`idle`,models:[],totalMatches:0,matchesOmitted:0,error:null},collapsed:rS(eS),sidebarCollapsed:iS(tS),mobileSidebarOpen:!1,query:``,searchOpen:!1,connection:`connecting`,notice:null,liveMessages:[],liveRunning:!1,livePhase:`idle`,liveRetry:null,thinkingStarts:{},thinkingDurations:{},promptAdmissionPending:!1,promptAdmissionRecovery:null,promptAdmissionResolution:null,sessionSwitching:!1,scrollToBottom:0,thinkingPendingLevel:null,commandDiscovery:j(),actions:se}})}var cS=sS();function lS(){let e=fn(cS),{t}=sn(),{actions:n}=e,r=(0,w.useRef)(null),[i,a]=(0,w.useState)(()=>window.matchMedia?.(`(max-width: 760px)`).matches??!1),o=i&&e.mobileSidebarOpen;(0,w.useEffect)(()=>{let e=window.matchMedia?.(`(max-width: 760px)`);if(!e)return;let t=()=>{a(e.matches),e.matches||n.closeMobileSidebar()};return t(),e.addEventListener(`change`,t),()=>e.removeEventListener(`change`,t)},[n]);let[s,c]=(0,w.useState)(`chat`),[l,u]=(0,w.useState)(null),d=e.snapshot?.models.find(e=>e.current),f=JSON.stringify([d?.provider,d?.id]),p=t=>{let n=e.snapshot,r=n?.selectedSession;e.workspaceDraft||!n||!r||e.sessionSwitching||r.id!==n.currentSessionId||u({sessionId:r.id,sessionPath:r.path,cwd:r.cwd,model:d?.label??``,modelKey:f,terminalId:t})},m=l&&!e.workspaceDraft&&!e.sessionSwitching&&l.sessionId===e.snapshot?.currentSessionId&&l.sessionPath===e.snapshot?.selectedSession?.path&&l.modelKey===f;(0,w.useEffect)(()=>{l&&!m&&u(null)},[l,m]),(0,w.useEffect)(()=>(n.start(),n.stop),[n]);let h=e.workspaceDraft?void 0:e.snapshot?.selectedSession,g=h?.entries.some(e=>e.type===`message`&&e.message)||e.liveMessages.length>0,_=!h||!g,v=(0,w.useCallback)(e=>n.sendPrompt(e),[n]);return(0,V.jsxs)(`div`,{className:`app-shell ${e.sidebarCollapsed?`sidebar-collapsed`:``} ${e.mobileSidebarOpen?`sidebar-open`:``}`,children:[(0,V.jsx)(rd,{snapshot:e.snapshot,selectedPath:e.workspaceDraft?null:e.selectedPath,selectedWorkspace:e.selectedWorkspace,collapsed:e.collapsed,query:e.query,searchOpen:e.searchOpen,mobileOpen:o,returnFocusRef:r,actions:n}),e.sidebarCollapsed&&(0,V.jsx)(`button`,{className:`sidebar-expand`,type:`button`,"aria-label":t(`expandSidebar`),title:t(`expandSidebar`),onClick:()=>n.toggleSidebar(!1),children:(0,V.jsx)(Se,{})}),(0,V.jsxs)(`main`,{inert:o,className:`conversation-shell ${h?`has-view`:``} ${_&&(e.workspaceDraft||s===`chat`)?`landing`:``}`,children:[(0,V.jsx)(`h1`,{className:`sr-only`,children:`OpenPI`}),(0,V.jsxs)(`header`,{className:`mobile-header`,children:[(0,V.jsx)(`button`,{ref:r,type:`button`,"aria-label":t(`openSidebar`),"aria-controls":`session-sidebar`,"aria-expanded":o,onClick:()=>n.toggleSidebar(!0),children:(0,V.jsx)(be,{})}),(0,V.jsx)(`span`,{className:`connection-state ${e.connection}`,children:t(e.connection)})]}),h&&(0,V.jsxs)(`fieldset`,{className:`conversation-view-switch`,"aria-label":t(`conversationView`),children:[(0,V.jsx)(`button`,{type:`button`,"aria-pressed":s===`chat`,onClick:()=>c(`chat`),children:t(`chatView`)}),(0,V.jsx)(`button`,{type:`button`,"aria-pressed":s===`trajectory`,onClick:()=>c(`trajectory`),children:t(`trajectory`)})]}),e.sessionSwitching?(0,V.jsx)(`div`,{className:`conversation switching`,role:`status`,children:(0,V.jsxs)(`div`,{className:`conversation-running`,children:[(0,V.jsx)(`span`,{className:`conversation-running-dot`}),(0,V.jsx)(`span`,{children:t(`switchingSession`)})]})}):s===`trajectory`&&h&&e.snapshot?(0,V.jsx)(od,{snapshot:e.snapshot,running:e.liveRunning},h.path):_?(0,V.jsx)(`section`,{className:`conversation landing-conversation`,"aria-label":`Conversation`,children:(0,V.jsx)(`div`,{className:`landing-welcome`,children:(0,V.jsx)(hn,{animated:!0})})}):e.snapshot?(0,V.jsx)(zx,{snapshot:e.snapshot,liveMessages:e.liveMessages,liveRunning:e.liveRunning,livePhase:e.livePhase,liveRetry:e.liveRetry,thinkingStarts:e.thinkingStarts,thinkingDurations:e.thinkingDurations,scrollToBottom:e.scrollToBottom,onResend:v}):null,(0,V.jsx)(lu,{workspaceDraft:e.workspaceDraft,draftModel:e.draftModel,modelSelectionPending:e.modelSelectionPending,modelSearch:e.modelSearch,thinkingPendingLevel:e.thinkingPendingLevel,onInspect:p,activeTurn:e.activeTurn,turnCancellationPending:e.turnCancellationPending,turnTerminalStatus:e.turnTerminalStatus,pendingFollowUpsReceipt:e.pendingFollowUpsReceipt,commandDiscovery:e.commandDiscovery,snapshot:e.snapshot,selectedPath:e.selectedPath,selectedWorkspace:e.selectedWorkspace,sessionSwitching:e.sessionSwitching,promptAdmissionPending:e.promptAdmissionPending,promptAdmissionRecovery:e.promptAdmissionRecovery,promptAdmissionResolution:e.promptAdmissionResolution,liveRunning:e.liveRunning,landing:_,actions:n}),e.notice&&(0,V.jsxs)(`div`,{className:`notice`,role:`alert`,children:[(0,V.jsx)(`span`,{children:e.notice}),(0,V.jsx)(`button`,{type:`button`,"aria-label":t(`close`),onClick:n.clearNotice,children:(0,V.jsx)(Re,{})})]})]}),m&&(0,V.jsx)(td,{target:l,onClose:()=>u(null)},`${l.sessionId}:${l.sessionPath}:${l.terminalId??`status`}`),(0,V.jsx)(`button`,{className:`sidebar-scrim`,type:`button`,tabIndex:-1,"aria-hidden":`true`,"aria-label":t(`close`),onClick:n.closeMobileSidebar})]})}var uS={base:{k1xSpc:`xjp7ctv`,kMwMTN:`x1tgivj0`,kMv6JI:`x9ynric`,$$css:!0},light:{kQNsl9:`x19aimcq`,$$css:!0},dark:{kQNsl9:`xntwwlm`,$$css:!0},system:{kQNsl9:`x108lcm5`,$$css:!0}},dS=w.createContext(!1);dS.displayName=`ThemeNestingContext`;var fS=new Set,pS=0;function mS(e){let t=(0,w.useId)();(0,w.useInsertionEffect)(()=>{if(e.__built)return;let n=`astryx-theme-${e.name}`;if(fS.has(n))return;`${e.name}`,`${e.name}${e.name}${e.name}${e.name}`;let{prose:r,component:i}=Fs(e),a=Ps();fS.add(n);let o=[()=>fS.delete(n)];if(a){if(pS++===0){let e=document.createElement(`style`);e.setAttribute(Zr(`theme-base`),``),e.textContent=`@layer astryx-base {\n${a}\n}`,document.head.appendChild(e)}o.push(()=>{--pS===0&&document.querySelector(`style[${Zr(`theme-base`)}]`)?.remove()})}if(r){let n=document.createElement(`style`);n.setAttribute(Zr(`theme-prose`),e.name),n.setAttribute(Zr(`id`),t),n.textContent=`@layer reset {\n${r}\n}`,document.head.appendChild(n)}if(i){let n=document.createElement(`style`);n.setAttribute(Zr(`theme`),e.name),n.setAttribute(Zr(`id`),t),n.textContent=`@layer astryx-theme {\n${i}\n}`,document.head.appendChild(n)}return(r||i)&&o.push(()=>{let n=document.querySelector(`style[${Zr(`theme-prose`)}="${e.name}"][${Zr(`id`)}="${t}"]`),r=document.querySelector(`style[${Zr(`theme`)}="${e.name}"][${Zr(`id`)}="${t}"]`);n?.remove(),r?.remove()}),()=>{for(let e of o)e()}},[e,t])}function hS(e,t,n){Fc(()=>{if(!e&&!(typeof document>`u`))return t===`light`||t===`dark`?document.documentElement.setAttribute(`data-theme`,t):document.documentElement.removeAttribute(`data-theme`),document.documentElement.setAttribute(Zr(`theme`),n),()=>{document.documentElement.removeAttribute(`data-theme`),document.documentElement.removeAttribute(Zr(`theme`))}},[e,t,n])}function gS({theme:e,mode:t=`system`,children:n}){let r=(0,w.use)(dS);cs(e),mS(e),hS(r,t,e.name);let i=t===`dark`?uS.dark:t===`light`?uS.light:uS.system,a=(0,w.useMemo)(()=>({theme:e,mode:t}),[e,t]);return(0,V.jsx)(Ls,{value:a,children:(0,V.jsx)(dS,{value:!0,children:(0,V.jsx)(`div`,{...bn(uS.base,i),"data-astryx-theme":e.name,"data-theme":t===`system`?void 0:t,children:n})})})}gS.displayName=`Theme`;var _S={size:`1em`,"aria-hidden":!0},vS={name:`neutral`,__built:!0,tokens:{"--font-size-4xs":`0.375rem`,"--font-size-3xs":`0.4375rem`,"--font-size-2xs":`0.5rem`,"--font-size-xs":`0.625rem`,"--font-size-sm":`0.75rem`,"--font-size-base":`0.875rem`,"--font-size-lg":`1.0625rem`,"--font-size-xl":`1.25rem`,"--font-size-2xl":`1.5rem`,"--font-size-3xl":`1.8125rem`,"--font-size-4xl":`2.1875rem`,"--font-size-5xl":`2.625rem`,"--text-heading-1-size":`var(--font-size-2xl)`,"--text-heading-1-weight":`var(--font-weight-semibold)`,"--text-heading-1-leading":`1.3333`,"--text-heading-2-size":`var(--font-size-xl)`,"--text-heading-2-weight":`var(--font-weight-semibold)`,"--text-heading-2-leading":`1.4`,"--text-heading-3-size":`var(--font-size-lg)`,"--text-heading-3-weight":`var(--font-weight-bold)`,"--text-heading-3-leading":`1.4118`,"--text-heading-4-size":`var(--font-size-base)`,"--text-heading-4-weight":`var(--font-weight-bold)`,"--text-heading-4-leading":`1.4286`,"--text-heading-5-size":`var(--font-size-sm)`,"--text-heading-5-weight":`var(--font-weight-semibold)`,"--text-heading-5-leading":`1.6667`,"--text-heading-6-size":`var(--font-size-xs)`,"--text-heading-6-weight":`var(--font-weight-semibold)`,"--text-heading-6-leading":`1.6`,"--text-body-size":`var(--font-size-base)`,"--text-body-weight":`var(--font-weight-normal)`,"--text-body-leading":`1.4286`,"--text-large-size":`var(--font-size-lg)`,"--text-large-weight":`var(--font-weight-semibold)`,"--text-large-leading":`1.4118`,"--text-label-size":`var(--font-size-base)`,"--text-label-weight":`var(--font-weight-medium)`,"--text-label-leading":`1.4286`,"--text-code-size":`var(--font-size-base)`,"--text-code-weight":`var(--font-weight-normal)`,"--text-code-leading":`1.4286`,"--text-supporting-size":`var(--font-size-sm)`,"--text-supporting-weight":`var(--font-weight-normal)`,"--text-supporting-leading":`1.6667`,"--text-display-1-size":`var(--font-size-5xl)`,"--text-display-1-weight":`var(--font-weight-normal)`,"--text-display-1-leading":`1.2381`,"--text-display-2-size":`var(--font-size-4xl)`,"--text-display-2-weight":`var(--font-weight-normal)`,"--text-display-2-leading":`1.2571`,"--text-display-3-size":`var(--font-size-3xl)`,"--text-display-3-weight":`var(--font-weight-normal)`,"--text-display-3-leading":`1.3793`,"--duration-fast-min":`95ms`,"--duration-fast":`125ms`,"--duration-fast-max":`165ms`,"--duration-medium-min":`225ms`,"--duration-medium":`300ms`,"--duration-medium-max":`400ms`,"--duration-slow-min":`525ms`,"--duration-slow":`700ms`,"--duration-slow-max":`935ms`,"--font-family-body":`Figtree, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif`,"--font-family-heading":`Figtree, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif`,"--font-family-code":`ui-monospace, "SF Mono", Monaco, Consolas, "Liberation Mono", "Courier New", monospace`,"--color-syntax-keyword":`light-dark(#700084, #efa8ff)`,"--color-syntax-string":`light-dark(#005600, #a6d2a2)`,"--color-syntax-comment":`light-dark(#737373, #a3a3a3)`,"--color-syntax-number":`light-dark(#6e3500, #ffb37f)`,"--color-syntax-function":`light-dark(#00458c, #a0caff)`,"--color-syntax-type":`light-dark(#700084, #efa8ff)`,"--color-syntax-variable":`light-dark(#171717, #e5e5e5)`,"--color-syntax-operator":`light-dark(#737373, #a3a3a3)`,"--color-syntax-constant":`light-dark(#6e3500, #ffb37f)`,"--color-syntax-tag":`light-dark(#89001a, #ffaeaa)`,"--color-syntax-attribute":`light-dark(#584400, #eec12f)`,"--color-syntax-property":`light-dark(#005348, #83dac9)`,"--color-syntax-punctuation":`light-dark(#6e6e6e, #a0a0a0)`,"--color-syntax-background":`light-dark(#fafafa, #0a0a0a)`,"--color-background-surface":`light-dark(#ffffff, #262626)`,"--color-background-body":`light-dark(#f1f1f1, #1b1b1b)`,"--color-background-card":`light-dark(#ffffff, #1b1b1b)`,"--color-background-popover":`light-dark(#ffffff, #1b1b1b)`,"--color-background-muted":`light-dark(#f1f1f1, #1b1b1b)`,"--color-accent":`light-dark(#262626, #ebebeb)`,"--color-accent-muted":`light-dark(#f1f1f1, #262626)`,"--color-neutral":`light-dark(#0000000F, #FFFFFF1A)`,"--color-overlay":`light-dark(#00000080, #000000CC)`,"--color-overlay-hover":`light-dark(#0000000D, #FFFFFF0D)`,"--color-overlay-pressed":`light-dark(#0000001A, #FFFFFF1A)`,"--color-text-primary":`light-dark(#171717, #fafafa)`,"--color-text-secondary":`light-dark(#525252, #a3a3a3)`,"--color-text-disabled":`light-dark(#a3a3a3, #525252)`,"--color-text-accent":`light-dark(#262626, #ebebeb)`,"--color-on-dark":`#ffffff`,"--color-on-light":`#171717`,"--color-on-accent":`light-dark(#ffffff, #171717)`,"--color-on-success":`light-dark(#ffffff, #171717)`,"--color-on-error":`light-dark(#ffffff, #171717)`,"--color-on-warning":`#171717`,"--color-icon-accent":`light-dark(#262626, #ebebeb)`,"--color-icon-primary":`light-dark(#171717, #fafafa)`,"--color-icon-secondary":`light-dark(#737373, #a3a3a3)`,"--color-icon-disabled":`light-dark(#a3a3a3, #525252)`,"--color-success":`light-dark(#007004, #9fe59b)`,"--color-error":`light-dark(#a50c25, #ffc6c1)`,"--color-warning":`light-dark(#745b00, #fdcf4f)`,"--color-success-muted":`light-dark(#c5e5c0, #84c9803D)`,"--color-error-muted":`light-dark(#facecb, #ff9e973D)`,"--color-warning-muted":`light-dark(#f8da9d, #deb4333D)`,"--color-border":`light-dark(#00000014, #FFFFFF1A)`,"--color-border-emphasized":`light-dark(#d4d4d4, #525252)`,"--color-skeleton":`light-dark(#ebebeb, #525252)`,"--color-shadow":`light-dark(#0000001A, #0000004D)`,"--color-tint-hover":`light-dark(black, white)`,"--color-background-red":`light-dark(#facecb, #ff9e973D)`,"--color-border-red":`light-dark(#e6bab8, #ff6f6c)`,"--color-icon-red":`light-dark(#89001a, #ff9e97)`,"--color-text-red":`light-dark(#89001a, #ffc6c1)`,"--color-background-orange":`light-dark(#fad0b5, #ffa2583D)`,"--color-border-orange":`light-dark(#e6bda2, #e2883e)`,"--color-icon-orange":`light-dark(#6e3500, #ffa258)`,"--color-text-orange":`light-dark(#6e3500, #ffc9a2)`,"--color-background-yellow":`light-dark(#f8da9d, #deb4333D)`,"--color-border-yellow":`light-dark(#e4c279, #c0990e)`,"--color-icon-yellow":`light-dark(#584400, #deb433)`,"--color-text-yellow":`light-dark(#584400, #fdcf4f)`,"--color-background-green":`light-dark(#c5e5c0, #84c9803D)`,"--color-border-green":`light-dark(#b2d1ac, #69ad67)`,"--color-icon-green":`light-dark(#0c5700, #84c980)`,"--color-text-green":`light-dark(#0c5700, #9fe59b)`,"--color-background-teal":`light-dark(#a5e3d6, #7ec6b83D)`,"--color-border-teal":`light-dark(#94d6c8, #63ab9d)`,"--color-icon-teal":`light-dark(#005348, #7ec6b8)`,"--color-text-teal":`light-dark(#005348, #99e2d3)`,"--color-background-cyan":`light-dark(#a3e0ef, #83c2d43D)`,"--color-border-cyan":`light-dark(#91d3e3, #67a7b8)`,"--color-icon-cyan":`light-dark(#00505f, #83c2d4)`,"--color-text-cyan":`light-dark(#00505f, #9edef0)`,"--color-background-blue":`light-dark(#c4ddfb, #9eb7ff3D)`,"--color-border-blue":`light-dark(#b1c9e7, #6d9cfe)`,"--color-icon-blue":`light-dark(#00458c, #9eb7ff)`,"--color-text-blue":`light-dark(#00458c, #c7d3ff)`,"--color-background-purple":`light-dark(#eccef3, #f297ff3D)`,"--color-border-purple":`light-dark(#d8bbdf, #dd74f0)`,"--color-icon-purple":`light-dark(#700084, #f297ff)`,"--color-text-purple":`light-dark(#700084, #fac1ff)`,"--color-background-pink":`light-dark(#fccadc, #ff99c33D)`,"--color-border-pink":`light-dark(#e7b7c8, #f273aa)`,"--color-icon-pink":`light-dark(#83004b, #ff99c3)`,"--color-text-pink":`light-dark(#83004b, #ffc3da)`,"--color-background-gray":`light-dark(#e5e5e5, var(--color-neutral))`,"--color-border-gray":`light-dark(#d4d4d4, #262626)`,"--color-icon-gray":`light-dark(#525252, #a3a3a3)`,"--color-text-gray":`light-dark(#262626, #e5e5e5)`,"--radius-none":`0px`,"--radius-inner":`0.375rem`,"--radius-element":`0.625rem`,"--radius-container":`0.75rem`,"--radius-page":`1.75rem`,"--radius-full":`9999px`,"--shadow-low":`0 2px 4px light-dark(oklch(0 0 0 / 5%), oklch(0 0 0 / 25%)), 0 4px 8px light-dark(oklch(0 0 0 / 10%), oklch(0 0 0 / 40%)), inset 0 0 0 1px light-dark(transparent, oklch(1 0 0 / 8%))`,"--shadow-med":`0 2px 4px light-dark(oklch(0 0 0 / 5%), oklch(0 0 0 / 35%)), 0 4px 12px light-dark(oklch(0 0 0 / 10%), oklch(0 0 0 / 50%)), inset 0 0 0 1px light-dark(transparent, oklch(1 0 0 / 12%))`,"--shadow-high":`0 4px 6px light-dark(oklch(0 0 0 / 10%), oklch(0 0 0 / 50%)), 0 12px 24px light-dark(oklch(0 0 0 / 15%), oklch(0 0 0 / 70%)), inset 0 0 0 1px light-dark(transparent, oklch(1 0 0 / 15%))`,"--shadow-inset-hover":`inset 0px 0px 0px 2px #0074e24D`,"--shadow-inset-selected":`inset 0px 0px 0px 2px #0074e280`,"--shadow-inset-success":`inset 0px 0px 0px 2px #1981004D`,"--shadow-inset-warning":`inset 0px 0px 0px 2px #ffce2f4D`,"--shadow-inset-error":`inset 0px 0px 0px 2px #e33f4a4D`},components:{heading:{"level:1":{fontFamily:`var(--font-family-heading)`,fontSize:`var(--text-heading-1-size)`,fontWeight:`var(--text-heading-1-weight)`,lineHeight:`var(--text-heading-1-leading)`},"level:2":{fontFamily:`var(--font-family-heading)`,fontSize:`var(--text-heading-2-size)`,fontWeight:`var(--text-heading-2-weight)`,lineHeight:`var(--text-heading-2-leading)`},"level:3":{fontFamily:`var(--font-family-heading)`,fontSize:`var(--text-heading-3-size)`,fontWeight:`var(--text-heading-3-weight)`,lineHeight:`var(--text-heading-3-leading)`},"level:4":{fontFamily:`var(--font-family-heading)`,fontSize:`var(--text-heading-4-size)`,fontWeight:`var(--text-heading-4-weight)`,lineHeight:`var(--text-heading-4-leading)`},"level:5":{fontFamily:`var(--font-family-heading)`,fontSize:`var(--text-heading-5-size)`,fontWeight:`var(--text-heading-5-weight)`,lineHeight:`var(--text-heading-5-leading)`},"level:6":{fontFamily:`var(--font-family-heading)`,fontSize:`var(--text-heading-6-size)`,fontWeight:`var(--text-heading-6-weight)`,lineHeight:`var(--text-heading-6-leading)`},"type:display-1":{fontFamily:`var(--font-family-heading)`,fontSize:`var(--text-display-1-size)`,lineHeight:`var(--text-display-1-leading)`},"type:display-2":{fontFamily:`var(--font-family-heading)`,fontSize:`var(--text-display-2-size)`,lineHeight:`var(--text-display-2-leading)`},"type:display-3":{fontFamily:`var(--font-family-heading)`,fontSize:`var(--text-display-3-size)`,lineHeight:`var(--text-display-3-leading)`}},text:{"type:body":{fontFamily:`var(--font-family-body)`,fontSize:`var(--text-body-size)`,lineHeight:`var(--text-body-leading)`},"type:large":{fontFamily:`var(--font-family-body)`,fontSize:`var(--text-large-size)`,lineHeight:`var(--text-large-leading)`},"type:label":{fontFamily:`var(--font-family-body)`,fontSize:`var(--text-label-size)`,lineHeight:`var(--text-label-leading)`},"type:code":{fontFamily:`var(--font-family-code)`,fontSize:`var(--text-code-size)`,lineHeight:`var(--text-code-leading)`},"type:supporting":{fontFamily:`var(--font-family-body)`,fontSize:`var(--text-supporting-size)`,lineHeight:`var(--text-supporting-leading)`},"type:display-1":{fontFamily:`var(--font-family-heading)`,fontSize:`var(--text-display-1-size)`,lineHeight:`var(--text-display-1-leading)`},"type:display-2":{fontFamily:`var(--font-family-heading)`,fontSize:`var(--text-display-2-size)`,lineHeight:`var(--text-display-2-leading)`},"type:display-3":{fontFamily:`var(--font-family-heading)`,fontSize:`var(--text-display-3-size)`,lineHeight:`var(--text-display-3-leading)`}},button:{"variant:destructive":{backgroundColor:`var(--color-error-muted)`,color:`var(--color-error)`}},badge:{"variant:info":{backgroundColor:`light-dark(#0074e2, #6d9cfe)`,color:`light-dark(#ffffff, #171717)`},"variant:neutral":{backgroundColor:`var(--color-background-gray)`,color:`var(--color-text-gray)`},"variant:success":{backgroundColor:`light-dark(#198100, #64af4c)`,color:`light-dark(#ffffff, #171717)`},"variant:warning":{backgroundColor:`#ffce2f`,color:`#171717`},"variant:error":{backgroundColor:`light-dark(#c9303a, #ff705d)`,color:`light-dark(#ffffff, #171717)`},"variant:red":{backgroundColor:`var(--color-background-red)`,color:`var(--color-text-red)`},"variant:orange":{backgroundColor:`var(--color-background-orange)`,color:`var(--color-text-orange)`},"variant:yellow":{backgroundColor:`var(--color-background-yellow)`,color:`var(--color-text-yellow)`},"variant:green":{backgroundColor:`var(--color-background-green)`,color:`var(--color-text-green)`},"variant:teal":{backgroundColor:`var(--color-background-teal)`,color:`var(--color-text-teal)`},"variant:cyan":{backgroundColor:`var(--color-background-cyan)`,color:`var(--color-text-cyan)`},"variant:blue":{backgroundColor:`var(--color-background-blue)`,color:`var(--color-text-blue)`},"variant:purple":{backgroundColor:`var(--color-background-purple)`,color:`var(--color-text-purple)`},"variant:pink":{backgroundColor:`var(--color-background-pink)`,color:`var(--color-text-pink)`},"variant:gray":{backgroundColor:`var(--color-background-gray)`,color:`var(--color-text-gray)`}},statusdot:{"variant:success":{backgroundColor:`light-dark(#198100, #64af4c)`},"variant:warning":{backgroundColor:`#ffce2f`},"variant:error":{backgroundColor:`light-dark(#c9303a, #ff705d)`},"variant:accent":{backgroundColor:`light-dark(#0074e2, #6d9cfe)`}},banner:{"status:info":{"--color-accent-muted":`var(--color-background-blue)`,"--color-text-primary":`var(--color-text-blue)`,"--color-text-secondary":`var(--color-text-blue)`,"--color-accent":`var(--color-text-blue)`},"status:success":{"--color-text-primary":`var(--color-text-green)`,"--color-text-secondary":`var(--color-text-green)`,"--color-success":`var(--color-text-green)`},"status:warning":{"--color-text-primary":`var(--color-text-yellow)`,"--color-text-secondary":`var(--color-text-yellow)`,"--color-warning":`var(--color-text-yellow)`},"status:error":{"--color-text-primary":`var(--color-text-red)`,"--color-text-secondary":`var(--color-text-red)`,"--color-error":`var(--color-text-red)`}},switch:{base:{"--color-background-gray":`var(--color-border-emphasized)`}},progressbar:{base:{"--color-background-muted":`var(--color-border-emphasized)`},"variant:accent":{"--color-accent":`#0074e2`},"variant:success":{"--color-success":`#198100`},"variant:warning":{"--color-warning":`#ffce2f`},"variant:error":{"--color-error":`#c9303a`}},card:{base:{padding:`var(--spacing-3)`}},section:{base:{padding:`var(--spacing-3)`}}},__onDark:{tokens:{"color-scheme":`dark`,"--color-text-primary":`var(--color-on-dark)`,"--color-icon-primary":`var(--color-on-dark)`,"--color-accent":`var(--color-on-dark)`}},__onLight:{tokens:{"color-scheme":`light`,"--color-text-primary":`var(--color-on-light)`,"--color-icon-primary":`var(--color-on-light)`,"--color-accent":`var(--color-on-light)`}},icons:{close:(0,V.jsx)(Re,{..._S}),chevronDown:(0,V.jsx)(te,{..._S}),chevronLeft:(0,V.jsx)(ne,{..._S}),chevronRight:(0,V.jsx)(re,{..._S}),chevronsLeft:(0,V.jsx)(R,{..._S}),chevronsRight:(0,V.jsx)(z,{..._S}),check:(0,V.jsx)(L,{..._S}),success:(0,V.jsx)(ie,{..._S}),error:(0,V.jsx)(ae,{..._S}),warning:(0,V.jsx)(Fe,{..._S}),info:(0,V.jsx)(ve,{..._S}),calendar:(0,V.jsx)(F,{..._S}),clock:(0,V.jsx)(se,{..._S}),externalLink:(0,V.jsx)(de,{..._S}),menu:(0,V.jsx)(be,{..._S}),moreHorizontal:(0,V.jsx)(ue,{..._S}),search:(0,V.jsx)(De,{..._S}),arrowUp:(0,V.jsx)(N,{..._S}),arrowDown:(0,V.jsx)(j,{..._S}),arrowsUpDown:(0,V.jsx)(M,{..._S}),funnel:(0,V.jsx)(ge,{..._S}),eyeSlash:(0,V.jsx)(fe,{..._S}),viewColumns:(0,V.jsx)(ce,{..._S}),copy:(0,V.jsx)(le,{..._S}),checkDouble:(0,V.jsx)(I,{..._S}),wrench:(0,V.jsx)(Le,{..._S}),stop:(0,V.jsx)(Me,{..._S}),microphone:(0,V.jsx)(xe,{..._S})}};function yS({children:e}){let t=fn(cS,e=>e.snapshot?.preferences?.theme)??`system`,[n,r]=(0,w.useState)(()=>window.matchMedia?.(`(prefers-color-scheme: dark)`).matches??!1);(0,w.useEffect)(()=>{let e=window.matchMedia?.(`(prefers-color-scheme: dark)`);if(!e)return;let t=()=>r(e.matches);return t(),e.addEventListener(`change`,t),()=>e.removeEventListener(`change`,t)},[]);let i=t===`dark`||t===`system`&&n?`dark`:`light`;return(0,w.useEffect)(()=>{document.documentElement.dataset.theme=i},[i]),(0,V.jsx)(cn,{i18n:Pt,children:(0,V.jsx)(gS,{theme:vS,mode:i,children:e})})}var bS=document.getElementById(`root`);if(!bS)throw Error(`OpenPI Web root is missing`);(0,ze.createRoot)(bS).render((0,V.jsx)(w.StrictMode,{children:(0,V.jsx)(yS,{children:(0,V.jsx)(lS,{})})}));
\ No newline at end of file
+`,t),i=-1;if(n!==-1&&r!==-1?i=n20?`${e.slice(0,20)}…`:e}"`,{type:`unknown-field`,field:e,value:t,line:n}))}}function T(){u!==void 0&&a?.(u),f>0&&i?.({id:u,event:p,data:d}),u=void 0,d=``,f=0,p=void 0}function E(e={}){if(e.consume&&s.length>0){let e=s.join(``);C(e,0,e.length)}l=!0,u=void 0,d=``,f=0,p=void 0,s.length=0,c=0,m=!1,h=!1,g=!1}return{feed:_,reset:E}}function Xx(e,t,n){return n===100&&e.charCodeAt(t+1)===97&&e.charCodeAt(t+2)===116&&e.charCodeAt(t+3)===97&&e.charCodeAt(t+4)===58}function Zx(e,t,n){return n===101&&e.charCodeAt(t+1)===118&&e.charCodeAt(t+2)===101&&e.charCodeAt(t+3)===110&&e.charCodeAt(t+4)===116&&e.charCodeAt(t+5)===58}function Qx(e,t){let n=1;for(;nt.abort();e.signal.addEventListener(`abort`,n,{once:!0}),e.signal.aborted&&n();let r=window.setTimeout(n,45e3),i=await fetch(`/events?cursor=${e.cursor}`,{headers:e.client.headers(),signal:t.signal}).finally(()=>{window.clearTimeout(r),e.signal.removeEventListener(`abort`,n)});if(i.status===409)throw new $x(`event replay expired`);if(!i.ok||!i.body)throw Error(`event connection failed`);e.onConnected();let a=e.cursor,o=0,s=Yx({onComment(t){t.trim()===`heartbeat`&&++o>=4&&(o=0,e.onHeartbeat?.())},onEvent(t){let n=JSON.parse(t.data);if(!Number.isSafeInteger(n.sequence))throw new $x(`invalid event cursor`);if(!(n.sequence<=a)){if(n.sequence!==a+1)throw new $x(`event cursor gap`);if(a=n.sequence,n.type===`state_invalidated`)throw new $x(`state invalidated`);e.onEvent(n)}}}),c=i.body.getReader(),l=new TextDecoder;try{for(;!e.signal.aborted;){let t,n,r=c.read(),i=new Promise((r,i)=>{n=()=>i(Error(`event stream aborted`)),e.signal.addEventListener(`abort`,n,{once:!0}),e.signal.aborted&&n(),t=window.setTimeout(()=>i(Error(`event stream stalled`)),45e3)}),{done:a,value:o}=await Promise.race([r,i]).finally(()=>{window.clearTimeout(t),n&&e.signal.removeEventListener(`abort`,n)});if(a)throw Error(`event connection closed`);s.feed(l.decode(o,{stream:!0}))}}finally{await c.cancel().catch(()=>void 0)}}function tS(e,t,n){if([`session_start`,`session_switched`,`session_created`].includes(t))return[];if([`agent_settled`,`turn_settled`].includes(t))return e.map(e=>e.state===`running`?{...e,state:`unknown`}:e);if(!t.startsWith(`tool_execution_`))return e;let r=n.toolCallId;if(typeof r!=`string`||r.length>500)return e;let i=e.find(e=>e.call.id===r);if(i&&i.state!==`running`&&(i.state!==`unknown`||t!==`tool_execution_end`))return e;let a=Uu(n.call),o=a.type===`toolCall`&&typeof a.name==`string`&&typeof a.arguments==`string`?a:i?.call;if(!o||o.evidenceTruncated&&o.id?.includes(`[truncated]`))return e;let s=Uu(n.result),c={call:o,result:typeof s.content==`string`?s:i?.result,state:t===`tool_execution_end`?n.isError===!0?`failed`:`returned`:`running`},l=[...e.filter(e=>e.call.id!==r),c].slice(-32);for(;l.length>0&&new TextEncoder().encode(JSON.stringify(l)).byteLength>524288;)l.shift();return l}var nS=`openpi.collapsed-workspaces`,rS=`openpi.sidebar-collapsed`,iS=new Set([`agent_start`,`turn_started`,`turn_settled`,`agent_settled`,`prompt_settled`,`message_end`,`tool_execution_end`,`session_start`,`session_switched`,`session_progress`,`prompt_failed`,`model_select`,`workspace_imported`,`workspace_removed`,`workspace_renamed`,`session_renamed`,`session_archived`,`session_unarchived`,`session_created`,`prompt_accepted`,`runtime_changed`]);function aS(e){try{let t=JSON.parse(window.sessionStorage.getItem(e)||`[]`);return new Set(Array.isArray(t)?t.filter(e=>typeof e==`string`):[])}catch{return new Set}}function oS(e){try{return window.sessionStorage.getItem(e)===`true`}catch{return!1}}function sS(e,t){try{window.sessionStorage.setItem(e,JSON.stringify(t))}catch{}}function cS(e,t){return t.aborted?Promise.resolve():new Promise(n=>{let r=()=>{window.clearTimeout(i),t.removeEventListener(`abort`,r),n()},i=window.setTimeout(r,e);t.addEventListener(`abort`,r,{once:!0})})}function lS(e=new ed,t={}){let n=t.consumeEvents??eS,r=0,i=0,a=0,o=null,s=null,c=null,l=null,u=Promise.resolve(),d=null,f=!1,p=!1,m=null,h=null,g=0,_=null,v=0,y=!1,b=0,x=0,S=null,C=-1,w=null,T=0,E=new Set,D=new Set,O=(e,t)=>{if(typeof t==`string`)for(e.add(t);e.size>32;){let t=e.values().next().value;t&&e.delete(t)}},k=()=>({activeTurn:null,turnCancellationPending:!1,turnTerminalStatus:null,pendingFollowUpsReceipt:null,liveMessages:[],liveRunning:!1,livePhase:`idle`,liveRetry:null,thinkingStarts:{},thinkingDurations:{}}),A=()=>(g++,h?.abort(),h=null,{modelSearch:{query:``,status:`idle`,models:[],totalMatches:0,matchesOmitted:0,error:null}}),j=()=>({sessionId:null,status:`idle`,commands:[],totalAvailable:0,commandsOmitted:0,error:null}),M=(e,t)=>({liveRunning:t===`running`||!e,livePhase:t===`running`?`running`:e?`idle`:`preparing`});return un((t,N)=>{let P=e=>{t({notice:e instanceof Error?e.message:String(e)})},ee=e=>{let t=N().snapshot;return e.epoch===r&&N().selectedWorkspace===e.workspacePath&&t?.currentSessionId===e.sessionId&&t.selectedSession?.id===e.sessionId&&t.selectedSession.cwd===e.workspacePath&&(!e.sessionPath||t.selectedSession.path===e.sessionPath)},F=()=>{T++,w?.abort(),w=null,t({commandDiscovery:j()})},I=async(n,i,a)=>{if(N().modelSelectionPending)return!1;t({modelSelectionPending:!0});try{let o=await e.selectModel(n.provider,n.id,a);if(i!==r||a!==N().snapshot?.selectedSession?.id)return!1;if(o.provider!==n.provider||o.id!==n.id||!o.current)throw Error(`Model selection was not confirmed. Please select a model again.`);if(!await N().actions.refreshSnapshot({epoch:i})||i!==r||a!==N().snapshot?.selectedSession?.id)return!1;let s=N().snapshot?.models.find(e=>e.current);if(s?.provider!==n.provider||s.id!==n.id)throw Error(`The Session model changed. Please select a model again.`);return t({draftModel:null,notice:null}),!0}catch(e){return i===r&&a===N().snapshot?.selectedSession?.id&&P(e),!1}finally{i===r&&t({modelSelectionPending:!1})}},L=(e=160)=>{if(f){p=!0;return}d===null&&(d=window.setTimeout(async()=>{d=null,f=!0;try{await N().actions.refreshSnapshot()}finally{f=!1,p&&(p=!1,L())}},e))},te=()=>{S=null,x=0,C=-1},ne=()=>{let e=N().snapshot;if(!e)return;S&&C!==r&&te();let n=e.thinking;if(n){if(!S||n.revision>=x){S=n,x=n.revision,C=r;return}n!==S&&t({snapshot:{...e,thinking:S}})}},re=e=>{S&&C!==r&&te(),e&&e.revision>=x&&(S=e,x=e.revision,C=r),ne()},R=()=>{_=null,v++,y=!1,t({thinkingPendingLevel:null})},z=async()=>{let t=r,n=N().snapshot?.selectedSession?.id;if(n)try{let i=await e.thinking(n,new AbortController().signal);if(t!==r||n!==N().snapshot?.selectedSession?.id)return;re(i)}catch{}},ie=async()=>{if(y)return;y=!0;let n=++b;try{for(;_!==null;){let n=_,i=v,a=r,o=N().snapshot?.selectedSession?.id;if(!o||N().modelSelectionPending){R();return}if(N().snapshot?.thinking?.level===n){i===v&&(_=null,t({thinkingPendingLevel:null}));continue}let s;try{s=await e.setThinkingLevel(o,n)}catch(e){if(a!==r)return;if(i!==v)continue;R(),P(e),z();return}if(a!==r||o!==N().snapshot?.selectedSession?.id)return;if(i===v){if(s.level!==n){R(),P(Error(Pt.t(`thinkingNotConfirmed`)));return}re(s),_=null,t({thinkingPendingLevel:null}),L();return}}}finally{n===b&&(y=!1)}},ae=e=>{let n=N(),i=e.detail??{},a=i.sessionId,l=[`session_start`,`session_switched`,`session_created`].includes(e.type);if(n.cursor!==null&&e.sequence<=n.cursor)return;t({cursor:e.sequence});let u=n.promptAdmissionRecovery,d=u?.commandId;if(typeof i.commandId==`string`&&i.commandId===d&&[`prompt_accepted`,`prompt_failed`,`prompt_settled`,`turn_started`,`turn_settled`].includes(e.type)){let r=e.type!==`prompt_failed`;t({promptAdmissionRecovery:null,promptAdmissionResolution:r&&u?{commandId:u.commandId,content:u.content}:n.promptAdmissionResolution,liveMessages:r&&u&&!n.liveMessages.some(e=>e.key===u.optimisticKey)?[...n.liveMessages,{key:u.optimisticKey,message:{role:`user`,content:u.content}}].slice(-8):n.liveMessages})}if(e.type===`runtime_changed`&&t(A()),e.type===`runtime_changed`&&F(),n.sessionSwitching&&!l){L();return}if(typeof a==`string`&&a!==n.snapshot?.currentSessionId&&!l){L();return}if(n.snapshot){let r=tS(n.snapshot.runtime.liveTools??[],e.type,i);t({snapshot:{...n.snapshot,runtime:{...n.snapshot.runtime,liveTools:r}}})}if(l){let l=i.commandId;if(typeof l==`string`&&D.has(l)){L();return}let d=i.sessionPath,f=n.snapshot?.sessions.some(e=>e.path===d),p=!1;if(c?.kind===`select`?p=c.expectedPath===d:(c?.kind===`create`&&c.commandId===l&&e.type===`session_switched`&&typeof a==`string`&&(!c.expectedSessionId||c.expectedSessionId===a)&&(typeof d!=`string`||!f)||c?.kind===`create`&&c.commandId===l&&e.type===`session_created`&&typeof a==`string`&&(!c.expectedSessionId||a===c.expectedSessionId))&&(p=!0),p&&c?.epoch!==r)return;if(p)t(k());else{F();let e=++r;R(),o=null,s=null,t({...k(),promptAdmissionPending:!1,promptAdmissionRecovery:null,promptAdmissionResolution:u?{commandId:u.commandId,content:u.content}:n.promptAdmissionResolution,selectedPath:typeof d==`string`?d:null,draftModel:n.workspaceDraft?n.draftModel:null,modelSelectionPending:!1,sessionSwitching:!0}),N().actions.refreshSnapshot({epoch:e}).then(n=>{e===r&&t({selectedPath:n?N().selectedPath:null,sessionSwitching:!1})})}}else if(e.type===`prompt_accepted`){let e=E.has(String(i.commandId??``));t({...M(e,n.livePhase),liveRetry:null,pendingFollowUpsReceipt:Number.isInteger(i.pendingFollowUps)?Number(i.pendingFollowUps):n.pendingFollowUpsReceipt})}else if(e.type===`turn_started`)t({activeTurn:{sessionId:String(i.sessionId),commandId:String(i.commandId),epoch:Number(i.epoch)},liveRunning:!0,livePhase:`running`,liveRetry:null,turnTerminalStatus:null});else if(e.type===`agent_start`)t({...i.activeTurn?{activeTurn:i.activeTurn}:{},liveRunning:!0,livePhase:`running`,liveRetry:null});else if(e.type===`turn_settled`){O(E,i.commandId);let e=n.activeTurn;e?.sessionId===i.sessionId&&e?.commandId===i.commandId&&e?.epoch===i.epoch&&t({activeTurn:null,liveRunning:!1,livePhase:`idle`,liveRetry:null,turnTerminalStatus:typeof i.outcome==`string`?i.outcome:null})}else if(e.type===`agent_settled`)t({pendingFollowUpsReceipt:null,...n.activeTurn?{}:{liveRunning:!1,livePhase:`idle`,liveRetry:null}});else if(e.type===`prompt_settled`)O(E,i.commandId),n.livePhase!==`running`&&t({liveRunning:!1,livePhase:`idle`,liveRetry:null});else if(i.message&&typeof i.message==`object`){let r=i.message,a=n.liveMessages;r.role===`user`&&(a=a.filter(e=>!e.key.startsWith(`optimistic-`)||e.message.content!==r.content));let o=typeof i.messageKey==`string`?i.messageKey:`${r.role||`message`}-${e.sequence}`,s={key:o,message:r},c=a.findIndex(e=>e.key===o);a=c>=0?a.map((e,t)=>t===c?s:e):[...a,s].slice(-8);let l={...n.thinkingStarts},u={...n.thinkingDurations};r.parts?.some(e=>e.type===`thinking`)&&(l[o]??=Date.now(),e.type===`message_end`&&(u[o]=Date.now()-l[o])),t({liveMessages:a,thinkingDurations:u,thinkingStarts:l})}if(e.type===`prompt_failed`&&(O(E,i.commandId),t({liveMessages:N().liveMessages.filter(e=>!e.key.startsWith(`optimistic-`)),liveRunning:!1,livePhase:`idle`,liveRetry:null,notice:typeof i.error==`string`?i.error:`Prompt failed`})),e.type===`auto_retry_start`&&t({liveRunning:!0,livePhase:`running`,liveRetry:{attempt:Number(i.attempt)||0,maxAttempts:Number(i.maxAttempts)||0}}),e.type===`thinking_level_changed`){let t=N().snapshot?.thinking;t&&typeof i.level==`string`&&re({...t,level:i.level,revision:e.sequence})}iS.has(e.type)&&L()},oe=async r=>{let i=500;for(;!r.aborted;){let a=!1;try{if(N().cursor===null){if(a=!0,!await N().actions.refreshSnapshot({resetCursor:!0}))throw Error(`snapshot unavailable`);a=!1}if(r.aborted)return;await n({client:e,cursor:N().cursor??0,onConnected:()=>{i=500,t({connection:`connected`})},onEvent:ae,onHeartbeat:()=>L(0),signal:r})}catch(e){if(r.aborted)return;t({connection:`reconnecting`}),!a&&await N().actions.refreshSnapshot({resetCursor:!0})||t(k()),await cS(i,r),i=Math.min(i*2,5e3),e instanceof SyntaxError&&t({notice:`Invalid event data`})}}},se={start(){m||(m=new AbortController,oe(m.signal))},stop(){m?.abort(),m=null,d!==null&&window.clearTimeout(d),d=null,R(),F()},async refreshSnapshot(n={}){let a=n.epoch??r,o=++i,c=N().selectedPath;try{let l=await e.snapshot(c);if(a!==r||o!==i)return!1;let u=typeof l.currentSessionId==`string`,d=u?l.sessions.find(e=>e.id===l.currentSessionId):void 0,f=u?l.selectedSession?.id===l.currentSessionId:l.selectedSession===void 0,p=!c||l.sessions.some(e=>e.path===c),m=!c||l.selectedSession?.path===c;if(!p||!m||!f)return t({selectedPath:null}),!n.canonicalRetry&&se.refreshSnapshot({...n,canonicalRetry:!0,epoch:a});let h=l.selectedSession?.cwd,g=l.workspaces.find(e=>e.current)?.path,_=l.workspaces.some(e=>e.path===N().selectedWorkspace)?N().selectedWorkspace:void 0,v=N().workspaceDraft?N().selectedWorkspace:l.workspaces.some(e=>e.path===h)?h:g??_??null,y=n.resetCursor;return y&&te(),N().snapshot?.currentSessionId!==l.currentSessionId&&F(),t({...y?k():{},connection:N().connection===`connecting`?`connecting`:N().connection,cursor:y||N().cursor===null?l.cursor:Math.max(N().cursor??0,l.cursor),activeTurn:l.runtime.activeTurn??null,livePhase:l.runtime.status===`running`?`running`:!N().promptAdmissionPending&&!s?`idle`:N().livePhase,liveRetry:l.runtime.status!==`running`&&!N().promptAdmissionPending&&!s?null:N().liveRetry,liveRunning:l.runtime.status===`running`?!0:!N().promptAdmissionPending&&!s?!1:N().liveRunning,selectedPath:d?.path??l.selectedSession?.path??null,selectedWorkspace:v,snapshot:l,...A()}),re(),!0}catch(e){return a!==r||o!==i?!1:(t({connection:`unavailable`}),P(e),!1)}},async chooseWorkspace(){let t=r;try{let n=await e.chooseWorkspace();if(t!==r||n.cancelled||!n.path)return;se.setWorkspace(n.path),await se.refreshSnapshot()}catch(e){t===r&&P(e)}},setWorkspace(e){let n=N();e===n.selectedWorkspace&&!n.sessionSwitching||(++r,l=null,R(),F(),o=null,s=null,t({...k(),...A(),selectedWorkspace:e,workspaceDraft:!0,sessionSwitching:!1,modelSelectionPending:!1,promptAdmissionPending:!1,promptAdmissionRecovery:null,promptAdmissionResolution:n.promptAdmissionRecovery?{commandId:n.promptAdmissionRecovery.commandId,content:n.promptAdmissionRecovery.content}:n.promptAdmissionResolution,notice:null}))},async renameWorkspace(t,n){try{await e.renameWorkspace(t,n),await se.refreshSnapshot()}catch(e){throw P(e),e}},async removeWorkspace(n){try{await e.removeWorkspace(n),N().selectedWorkspace===n&&F(),t({selectedPath:null,selectedWorkspace:N().selectedWorkspace===n?null:N().selectedWorkspace}),await se.refreshSnapshot()}catch(e){P(e)}},async createSession(n){if(!n||N().modelSelectionPending)return null;let i=N(),a=++r;R(),F();let d=(l?.workspacePath===n?l.commandId:void 0)??globalThis.crypto?.randomUUID?.()??`web-create-${Date.now()}-${a}`;l={workspacePath:n,commandId:d},o=null,s=null,t({...k(),...A(),mobileSidebarOpen:!1,promptAdmissionPending:!1,promptAdmissionRecovery:null,promptAdmissionResolution:i.promptAdmissionRecovery?{commandId:i.promptAdmissionRecovery.commandId,content:i.promptAdmissionRecovery.content}:i.promptAdmissionResolution,selectedPath:null,selectedWorkspace:n,workspaceDraft:!0,sessionSwitching:!0});let f=null,p=u.then(async()=>{if(a===r){c={commandId:d,epoch:a,expectedPath:null,kind:`create`};try{let i=await e.createSession(n,d);if(a!==r)return;if(i.cancelled||i.commandId!==d||typeof i.sessionId!=`string`||!i.sessionId||i.sessionId.length>128||i.sessionPath!==void 0&&!i.sessionPath)throw Error(`Session creation did not return a valid target identity.`);let o={epoch:a,sessionId:i.sessionId,sessionPath:i.sessionPath??null,workspacePath:n};c?.epoch===a&&(c.expectedSessionId=o.sessionId,c.expectedPath=o.sessionPath),t({selectedPath:o.sessionPath});let s=await se.refreshSnapshot({epoch:a});if(!s&&a===r&&(s=await se.refreshSnapshot({epoch:a})),a!==r)return;if(!s)throw Error(`The created Session could not be confirmed. Please try again.`);if(!ee(o)){l=null,P(Error(`The created Session is no longer active in the selected workspace. Please try again.`));return}t({workspaceDraft:!1,notice:null});let u=N().draftModel;if(u&&!await I(u,a,o.sessionId))return;if(N().workspaceDraft||!ee(o)){l=null,P(Error(`The created Session is no longer active in the selected workspace. Please try again.`));return}f=o,l=null}catch(e){if(a!==r)return;t({selectedPath:null}),P(e),await se.refreshSnapshot({epoch:a})}finally{O(D,d),c?.epoch===a&&(c=null),a===r&&t({sessionSwitching:!1})}}});return u=p.catch(()=>void 0),await p,a===r?f:null},async selectSession(n){if(!n)return;l=null;let i=N();F(),t({...A(),workspaceDraft:!1,draftModel:null,modelSelectionPending:!1});let a=++r;R(),o=null,s=null,t({...k(),mobileSidebarOpen:!1,promptAdmissionPending:!1,promptAdmissionRecovery:null,promptAdmissionResolution:i.promptAdmissionRecovery?{commandId:i.promptAdmissionRecovery.commandId,content:i.promptAdmissionRecovery.content}:i.promptAdmissionResolution,selectedPath:n,sessionSwitching:!0});let d=u.then(async()=>{if(a===r){c={epoch:a,expectedPath:n,kind:`select`};try{if(await e.selectSession(n),a!==r)return;await se.refreshSnapshot({epoch:a})||t({selectedPath:null})}catch(e){if(a!==r)return;t({selectedPath:null}),P(e),await se.refreshSnapshot({epoch:a})}finally{c?.epoch===a&&(c=null),a===r&&t({sessionSwitching:!1})}}});u=d.catch(()=>void 0),await d},async renameSession(t,n){try{await e.renameSession(t,n),await se.refreshSnapshot()}catch(e){throw P(e),e}},async archiveSession(t){try{await e.archiveSession(t),await se.refreshSnapshot()}catch(e){P(e)}},async unarchiveSession(t){let n=r;try{return await e.unarchiveSession(t),n!==r||await se.refreshSnapshot({epoch:n})}catch(e){return n===r&&P(e),!1}},async selectModel(e){let[n,...i]=e.split(`/`),a=i.join(`/`),o=N();if(!n||!a||o.sessionSwitching||o.modelSelectionPending||o.promptAdmissionPending||!o.workspaceDraft&&(o.liveRunning||o.snapshot?.runtime.status===`running`))return;let s=o.snapshot?.selectedSession?.id;if(o.workspaceDraft||!s&&!o.snapshot?.currentSessionId){let e=[...o.snapshot?.models??[],...o.modelSearch.models].find(e=>e.provider===n&&e.id===a);e&&t({draftModel:e,notice:null});return}!s||s!==o.snapshot?.currentSessionId||(R(),await I({provider:n,id:a},r,s))},async searchModels(n){let a=n.trim();if(!a){t(A());return}h?.abort();let o=new AbortController;h=o;let s=++g,c=r,l=i,u=N().snapshot?.currentSessionId;t({modelSearch:{query:a,status:`loading`,models:[],totalMatches:0,matchesOmitted:0,error:null}});try{let n=await e.searchModels(a,u,o.signal);if(o.signal.aborted||c!==r||l!==i||s!==g)return;t({modelSearch:{query:a,status:`ready`,models:n.models,totalMatches:n.totalMatches,matchesOmitted:n.truncation.matchesOmitted,error:null}})}catch(e){if(o.signal.aborted||c!==r||l!==i||s!==g)return;t({modelSearch:{query:a,status:`error`,models:[],totalMatches:0,matchesOmitted:0,error:e instanceof Error?e.message:String(e)}})}finally{h===o&&(h=null)}},clearModelSearch(){t(A())},selectThinking(e){let n=N(),r=n.snapshot?.thinking,i=n.snapshot?.selectedSession?.id;!e||!r?.supported||n.sessionSwitching||n.modelSelectionPending||n.workspaceDraft||!i||i!==n.snapshot?.currentSessionId||n.liveRunning||n.snapshot?.runtime.status===`running`||e!==(n.thinkingPendingLevel??r.level)&&(_=e,v++,t({thinkingPendingLevel:e}),ie())},async cancelActiveTurn(){let n=N().activeTurn??N().snapshot?.runtime.activeTurn;if(!n||N().turnCancellationPending||N().sessionSwitching)return;let i=r;t({turnCancellationPending:!0});try{await e.cancelActiveTurn(n)}catch(e){if(i!==r)return;await se.refreshSnapshot({epoch:i}),i===r&&P(e)}finally{i===r&&t({turnCancellationPending:!1})}},async sendPrompt(n){let i=n.trim(),c=N(),l=c.promptAdmissionRecovery,u=l?.phase===`submitting`?l:null,d=c.selectedWorkspace;if(!d||!i||c.sessionSwitching||c.promptAdmissionPending||l&&!u||c.promptAdmissionResolution||c.modelSelectionPending||c.thinkingPendingLevel!==null)return!1;let f=N().workspaceDraft||!N().snapshot?.selectedSession?.id,p=f?await se.createSession(d):null;if(f&&!p)return N().notice||t({notice:`The active Session changed before the first message was sent. Your message was not sent.`}),!1;if(f&&N().draftModel)return!1;let m=N().snapshot?.selectedSession,h=p??(m?{epoch:r,sessionId:m.id,sessionPath:m.path,workspacePath:d}:null);if(!h||N().workspaceDraft||!ee(h)||N().sessionSwitching||N().promptAdmissionPending||u&&(N().promptAdmissionRecovery?.commandId!==u.commandId||N().promptAdmissionRecovery?.phase!==`submitting`))return!1;let{epoch:g,sessionId:_}=h,v=N().draftModel;if(v&&!await I(v,g,_)||N().workspaceDraft||!ee(h)||u&&(N().promptAdmissionRecovery?.commandId!==u.commandId||N().promptAdmissionRecovery?.phase!==`submitting`))return!1;let y=++a,b=s?.sessionId===_&&s.content===i,x=b?s.commandId:globalThis.crypto?.randomUUID?.()??`web-prompt-${Date.now()}-${y}`,S=b?s.optimisticKey:`optimistic-${x}`;s={sessionId:_,content:i,commandId:x,optimisticKey:S},o=y,t({liveMessages:b?N().liveMessages:[...N().liveMessages,{key:S,message:{role:`user`,content:i}}].slice(-8),notice:null,pendingFollowUpsReceipt:null,turnTerminalStatus:null,promptAdmissionPending:!0,scrollToBottom:N().scrollToBottom+1});try{let n=await e.prompt(_,i,x,b);if(g!==r||o!==y)return!1;let a=E.has(n.id);return s?.commandId===x&&(s=null),t({...M(a,N().livePhase),pendingFollowUpsReceipt:n.pendingFollowUps??null,...u&&N().promptAdmissionRecovery?.commandId===u.commandId?{promptAdmissionRecovery:null}:{}}),L(120),!0}catch(e){if(g!==r||o!==y)return!1;if(e instanceof Qu&&e.code===`COMMAND_ADMISSION_UNKNOWN`&&s?.commandId===x){let e=s;s=null,t({liveRunning:!1,livePhase:`idle`,liveRetry:null,notice:null,promptAdmissionPending:!1,promptAdmissionRecovery:{...e,phase:`checking`}});let n=await se.refreshSnapshot({resetCursor:!0,epoch:g}),r=N().promptAdmissionRecovery;return r?.commandId===x&&t({promptAdmissionRecovery:{...r,phase:n?`ready`:`verification-failed`}}),!1}return e instanceof Qu&&[`WORKSPACE_REQUIRED`,`SESSION_CONFLICT`,`PROMPT_REJECTED`,`COMMAND_CONFLICT`,`PROMPT_ADMISSION_CAPACITY`].includes(e.code??``)?(s?.commandId===x&&(s=null),t({liveMessages:N().liveMessages.filter(e=>e.key!==S),livePhase:`idle`,liveRetry:null,liveRunning:!1}),P(e),!1):(t({liveRunning:!0,livePhase:N().livePhase===`running`?`running`:`preparing`,liveRetry:null}),P(e),!1)}finally{g===r&&o===y&&(o=null,t({promptAdmissionPending:!1}))}},async checkPromptAdmissionRecovery(){let e=N().promptAdmissionRecovery;if(!e||e.phase!==`verification-failed`)return;let n=r;t({notice:null,promptAdmissionRecovery:{...e,phase:`checking`}});let i=await se.refreshSnapshot({resetCursor:!0,epoch:n}),a=N().promptAdmissionRecovery;a?.commandId===e.commandId&&a.phase===`checking`&&t({promptAdmissionRecovery:{...a,phase:i?`ready`:`verification-failed`}})},async sendPromptAsNew(e){let n=N().promptAdmissionRecovery;if(!n||n.phase!==`ready`||n.sessionId!==N().snapshot?.selectedSession?.id)return!1;let r=e.trim();if(!r)return!1;t({promptAdmissionRecovery:{...n,phase:`submitting`},notice:null});let i=!1;try{return i=await se.sendPrompt(r),i}finally{let e=N().promptAdmissionRecovery;e?.commandId===n.commandId&&e.phase===`submitting`&&t({promptAdmissionRecovery:i?null:{...e,phase:`ready`}})}},abandonPromptAdmission(){let e=N().promptAdmissionRecovery;!e||e.phase===`submitting`||t({liveMessages:N().liveMessages.filter(t=>t.key!==e.optimisticKey),notice:null,promptAdmissionRecovery:null})},acknowledgePromptAdmissionResolution(e){N().promptAdmissionResolution?.commandId===e&&t({promptAdmissionResolution:null})},async discoverCommands(){let n=N(),i=n.snapshot?.selectedSession?.id;if(n.workspaceDraft||!i||i!==n.snapshot?.currentSessionId||n.sessionSwitching){F();return}if(n.commandDiscovery.sessionId===i&&(n.commandDiscovery.status===`loading`||n.commandDiscovery.status===`ready`))return;let a=r,o=++T;w?.abort();let s=new AbortController;w=s,t({commandDiscovery:{sessionId:i,status:`loading`,commands:[],totalAvailable:0,commandsOmitted:0,error:null}});try{let n=await e.commands(i,s.signal);if(s.signal.aborted||a!==r||o!==T||i!==N().snapshot?.currentSessionId)return;t({commandDiscovery:{sessionId:i,status:`ready`,commands:n.commands,totalAvailable:n.totalAvailable,commandsOmitted:n.truncation.commandsOmitted,error:null}})}catch(e){if(s.signal.aborted||a!==r||o!==T)return;t({commandDiscovery:{sessionId:i,status:`error`,commands:[],totalAvailable:0,commandsOmitted:0,error:e instanceof Error?e.message:String(e)}})}finally{w===s&&(w=null)}},clearCommandDiscovery:F,setQuery(e){t({query:e})},setSearchOpen(e){t({searchOpen:e,...e?{}:{query:``}})},toggleWorkspace(e){let n=new Set(N().collapsed);n.has(e)?n.delete(e):n.add(e),sS(nS,[...n]),t({collapsed:n})},toggleSidebar(e){if(e){t({mobileSidebarOpen:!N().mobileSidebarOpen});return}let n=!N().sidebarCollapsed;try{window.sessionStorage.setItem(rS,String(n))}catch{}t({sidebarCollapsed:n})},closeMobileSidebar(){t({mobileSidebarOpen:!1})},clearNotice(){t({notice:null})}};return{activeTurn:null,turnCancellationPending:!1,turnTerminalStatus:null,pendingFollowUpsReceipt:null,snapshot:null,cursor:null,selectedPath:null,selectedWorkspace:null,workspaceDraft:!1,draftModel:null,modelSelectionPending:!1,modelSearch:{query:``,status:`idle`,models:[],totalMatches:0,matchesOmitted:0,error:null},collapsed:aS(nS),sidebarCollapsed:oS(rS),mobileSidebarOpen:!1,query:``,searchOpen:!1,connection:`connecting`,notice:null,liveMessages:[],liveRunning:!1,livePhase:`idle`,liveRetry:null,thinkingStarts:{},thinkingDurations:{},promptAdmissionPending:!1,promptAdmissionRecovery:null,promptAdmissionResolution:null,sessionSwitching:!1,scrollToBottom:0,thinkingPendingLevel:null,commandDiscovery:j(),actions:se}})}var uS=lS();function dS(){let e=fn(uS),{t}=sn(),{actions:n}=e,r=(0,w.useRef)(null),[i,a]=(0,w.useState)(()=>window.matchMedia?.(`(max-width: 760px)`).matches??!1),o=i&&e.mobileSidebarOpen;(0,w.useEffect)(()=>{let e=window.matchMedia?.(`(max-width: 760px)`);if(!e)return;let t=()=>{a(e.matches),e.matches||n.closeMobileSidebar()};return t(),e.addEventListener(`change`,t),()=>e.removeEventListener(`change`,t)},[n]);let[s,c]=(0,w.useState)(`chat`),[l,u]=(0,w.useState)(null),d=e.snapshot?.models.find(e=>e.current),f=JSON.stringify([d?.provider,d?.id]),p=t=>{let n=e.snapshot,r=n?.selectedSession;e.workspaceDraft||!n||!r||e.sessionSwitching||r.id!==n.currentSessionId||u({sessionId:r.id,sessionPath:r.path,cwd:r.cwd,model:d?.label??``,modelKey:f,terminalId:t})},m=l&&!e.workspaceDraft&&!e.sessionSwitching&&l.sessionId===e.snapshot?.currentSessionId&&l.sessionPath===e.snapshot?.selectedSession?.path&&l.modelKey===f;(0,w.useEffect)(()=>{l&&!m&&u(null)},[l,m]),(0,w.useEffect)(()=>(n.start(),n.stop),[n]);let h=e.workspaceDraft?void 0:e.snapshot?.selectedSession,g=h?.entries.some(e=>e.type===`message`&&e.message)||e.liveMessages.length>0,_=!h||!g,v=(0,w.useCallback)(e=>n.sendPrompt(e),[n]);return(0,V.jsxs)(`div`,{className:`app-shell ${e.sidebarCollapsed?`sidebar-collapsed`:``} ${e.mobileSidebarOpen?`sidebar-open`:``}`,children:[(0,V.jsx)(rd,{snapshot:e.snapshot,selectedPath:e.workspaceDraft?null:e.selectedPath,selectedWorkspace:e.selectedWorkspace,collapsed:e.collapsed,query:e.query,searchOpen:e.searchOpen,mobileOpen:o,returnFocusRef:r,actions:n}),e.sidebarCollapsed&&(0,V.jsx)(`button`,{className:`sidebar-expand`,type:`button`,"aria-label":t(`expandSidebar`),title:t(`expandSidebar`),onClick:()=>n.toggleSidebar(!1),children:(0,V.jsx)(Se,{})}),(0,V.jsxs)(`main`,{inert:o,className:`conversation-shell ${h?`has-view`:``} ${_&&(e.workspaceDraft||s===`chat`)?`landing`:``}`,children:[(0,V.jsx)(`h1`,{className:`sr-only`,children:`OpenPI`}),(0,V.jsxs)(`header`,{className:`mobile-header`,children:[(0,V.jsx)(`button`,{ref:r,type:`button`,"aria-label":t(`openSidebar`),"aria-controls":`session-sidebar`,"aria-expanded":o,onClick:()=>n.toggleSidebar(!0),children:(0,V.jsx)(be,{})}),(0,V.jsx)(`span`,{className:`connection-state ${e.connection}`,children:t(e.connection)})]}),h&&(0,V.jsxs)(`fieldset`,{className:`conversation-view-switch`,"aria-label":t(`conversationView`),children:[(0,V.jsx)(`button`,{type:`button`,"aria-pressed":s===`chat`,onClick:()=>c(`chat`),children:t(`chatView`)}),(0,V.jsx)(`button`,{type:`button`,"aria-pressed":s===`trajectory`,onClick:()=>c(`trajectory`),children:t(`trajectory`)})]}),e.sessionSwitching?(0,V.jsx)(`div`,{className:`conversation switching`,role:`status`,children:(0,V.jsxs)(`div`,{className:`conversation-running`,children:[(0,V.jsx)(`span`,{className:`conversation-running-dot`}),(0,V.jsx)(`span`,{children:t(`switchingSession`)})]})}):s===`trajectory`&&h&&e.snapshot?(0,V.jsx)(od,{snapshot:e.snapshot,running:e.liveRunning},h.path):_?(0,V.jsx)(`section`,{className:`conversation landing-conversation`,"aria-label":`Conversation`,children:(0,V.jsx)(`div`,{className:`landing-welcome`,children:(0,V.jsx)(hn,{animated:!0})})}):e.snapshot?(0,V.jsx)(Ux,{snapshot:e.snapshot,liveMessages:e.liveMessages,liveRunning:e.liveRunning,livePhase:e.livePhase,liveRetry:e.liveRetry,thinkingStarts:e.thinkingStarts,thinkingDurations:e.thinkingDurations,scrollToBottom:e.scrollToBottom,onResend:v}):null,(0,V.jsx)(lu,{workspaceDraft:e.workspaceDraft,draftModel:e.draftModel,modelSelectionPending:e.modelSelectionPending,modelSearch:e.modelSearch,thinkingPendingLevel:e.thinkingPendingLevel,onInspect:p,activeTurn:e.activeTurn,turnCancellationPending:e.turnCancellationPending,turnTerminalStatus:e.turnTerminalStatus,pendingFollowUpsReceipt:e.pendingFollowUpsReceipt,commandDiscovery:e.commandDiscovery,snapshot:e.snapshot,selectedPath:e.selectedPath,selectedWorkspace:e.selectedWorkspace,sessionSwitching:e.sessionSwitching,promptAdmissionPending:e.promptAdmissionPending,promptAdmissionRecovery:e.promptAdmissionRecovery,promptAdmissionResolution:e.promptAdmissionResolution,liveRunning:e.liveRunning,landing:_,actions:n}),e.notice&&(0,V.jsxs)(`div`,{className:`notice`,role:`alert`,children:[(0,V.jsx)(`span`,{children:e.notice}),(0,V.jsx)(`button`,{type:`button`,"aria-label":t(`close`),onClick:n.clearNotice,children:(0,V.jsx)(Re,{})})]})]}),m&&(0,V.jsx)(td,{target:l,onClose:()=>u(null)},`${l.sessionId}:${l.sessionPath}:${l.terminalId??`status`}`),(0,V.jsx)(`button`,{className:`sidebar-scrim`,type:`button`,tabIndex:-1,"aria-hidden":`true`,"aria-label":t(`close`),onClick:n.closeMobileSidebar})]})}var fS={base:{k1xSpc:`xjp7ctv`,kMwMTN:`x1tgivj0`,kMv6JI:`x9ynric`,$$css:!0},light:{kQNsl9:`x19aimcq`,$$css:!0},dark:{kQNsl9:`xntwwlm`,$$css:!0},system:{kQNsl9:`x108lcm5`,$$css:!0}},pS=w.createContext(!1);pS.displayName=`ThemeNestingContext`;var mS=new Set,hS=0;function gS(e){let t=(0,w.useId)();(0,w.useInsertionEffect)(()=>{if(e.__built)return;let n=`astryx-theme-${e.name}`;if(mS.has(n))return;`${e.name}`,`${e.name}${e.name}${e.name}${e.name}`;let{prose:r,component:i}=Fs(e),a=Ps();mS.add(n);let o=[()=>mS.delete(n)];if(a){if(hS++===0){let e=document.createElement(`style`);e.setAttribute(Zr(`theme-base`),``),e.textContent=`@layer astryx-base {\n${a}\n}`,document.head.appendChild(e)}o.push(()=>{--hS===0&&document.querySelector(`style[${Zr(`theme-base`)}]`)?.remove()})}if(r){let n=document.createElement(`style`);n.setAttribute(Zr(`theme-prose`),e.name),n.setAttribute(Zr(`id`),t),n.textContent=`@layer reset {\n${r}\n}`,document.head.appendChild(n)}if(i){let n=document.createElement(`style`);n.setAttribute(Zr(`theme`),e.name),n.setAttribute(Zr(`id`),t),n.textContent=`@layer astryx-theme {\n${i}\n}`,document.head.appendChild(n)}return(r||i)&&o.push(()=>{let n=document.querySelector(`style[${Zr(`theme-prose`)}="${e.name}"][${Zr(`id`)}="${t}"]`),r=document.querySelector(`style[${Zr(`theme`)}="${e.name}"][${Zr(`id`)}="${t}"]`);n?.remove(),r?.remove()}),()=>{for(let e of o)e()}},[e,t])}function _S(e,t,n){Fc(()=>{if(!e&&!(typeof document>`u`))return t===`light`||t===`dark`?document.documentElement.setAttribute(`data-theme`,t):document.documentElement.removeAttribute(`data-theme`),document.documentElement.setAttribute(Zr(`theme`),n),()=>{document.documentElement.removeAttribute(`data-theme`),document.documentElement.removeAttribute(Zr(`theme`))}},[e,t,n])}function vS({theme:e,mode:t=`system`,children:n}){let r=(0,w.use)(pS);cs(e),gS(e),_S(r,t,e.name);let i=t===`dark`?fS.dark:t===`light`?fS.light:fS.system,a=(0,w.useMemo)(()=>({theme:e,mode:t}),[e,t]);return(0,V.jsx)(Ls,{value:a,children:(0,V.jsx)(pS,{value:!0,children:(0,V.jsx)(`div`,{...bn(fS.base,i),"data-astryx-theme":e.name,"data-theme":t===`system`?void 0:t,children:n})})})}vS.displayName=`Theme`;var yS={size:`1em`,"aria-hidden":!0},bS={name:`neutral`,__built:!0,tokens:{"--font-size-4xs":`0.375rem`,"--font-size-3xs":`0.4375rem`,"--font-size-2xs":`0.5rem`,"--font-size-xs":`0.625rem`,"--font-size-sm":`0.75rem`,"--font-size-base":`0.875rem`,"--font-size-lg":`1.0625rem`,"--font-size-xl":`1.25rem`,"--font-size-2xl":`1.5rem`,"--font-size-3xl":`1.8125rem`,"--font-size-4xl":`2.1875rem`,"--font-size-5xl":`2.625rem`,"--text-heading-1-size":`var(--font-size-2xl)`,"--text-heading-1-weight":`var(--font-weight-semibold)`,"--text-heading-1-leading":`1.3333`,"--text-heading-2-size":`var(--font-size-xl)`,"--text-heading-2-weight":`var(--font-weight-semibold)`,"--text-heading-2-leading":`1.4`,"--text-heading-3-size":`var(--font-size-lg)`,"--text-heading-3-weight":`var(--font-weight-bold)`,"--text-heading-3-leading":`1.4118`,"--text-heading-4-size":`var(--font-size-base)`,"--text-heading-4-weight":`var(--font-weight-bold)`,"--text-heading-4-leading":`1.4286`,"--text-heading-5-size":`var(--font-size-sm)`,"--text-heading-5-weight":`var(--font-weight-semibold)`,"--text-heading-5-leading":`1.6667`,"--text-heading-6-size":`var(--font-size-xs)`,"--text-heading-6-weight":`var(--font-weight-semibold)`,"--text-heading-6-leading":`1.6`,"--text-body-size":`var(--font-size-base)`,"--text-body-weight":`var(--font-weight-normal)`,"--text-body-leading":`1.4286`,"--text-large-size":`var(--font-size-lg)`,"--text-large-weight":`var(--font-weight-semibold)`,"--text-large-leading":`1.4118`,"--text-label-size":`var(--font-size-base)`,"--text-label-weight":`var(--font-weight-medium)`,"--text-label-leading":`1.4286`,"--text-code-size":`var(--font-size-base)`,"--text-code-weight":`var(--font-weight-normal)`,"--text-code-leading":`1.4286`,"--text-supporting-size":`var(--font-size-sm)`,"--text-supporting-weight":`var(--font-weight-normal)`,"--text-supporting-leading":`1.6667`,"--text-display-1-size":`var(--font-size-5xl)`,"--text-display-1-weight":`var(--font-weight-normal)`,"--text-display-1-leading":`1.2381`,"--text-display-2-size":`var(--font-size-4xl)`,"--text-display-2-weight":`var(--font-weight-normal)`,"--text-display-2-leading":`1.2571`,"--text-display-3-size":`var(--font-size-3xl)`,"--text-display-3-weight":`var(--font-weight-normal)`,"--text-display-3-leading":`1.3793`,"--duration-fast-min":`95ms`,"--duration-fast":`125ms`,"--duration-fast-max":`165ms`,"--duration-medium-min":`225ms`,"--duration-medium":`300ms`,"--duration-medium-max":`400ms`,"--duration-slow-min":`525ms`,"--duration-slow":`700ms`,"--duration-slow-max":`935ms`,"--font-family-body":`Figtree, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif`,"--font-family-heading":`Figtree, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif`,"--font-family-code":`ui-monospace, "SF Mono", Monaco, Consolas, "Liberation Mono", "Courier New", monospace`,"--color-syntax-keyword":`light-dark(#700084, #efa8ff)`,"--color-syntax-string":`light-dark(#005600, #a6d2a2)`,"--color-syntax-comment":`light-dark(#737373, #a3a3a3)`,"--color-syntax-number":`light-dark(#6e3500, #ffb37f)`,"--color-syntax-function":`light-dark(#00458c, #a0caff)`,"--color-syntax-type":`light-dark(#700084, #efa8ff)`,"--color-syntax-variable":`light-dark(#171717, #e5e5e5)`,"--color-syntax-operator":`light-dark(#737373, #a3a3a3)`,"--color-syntax-constant":`light-dark(#6e3500, #ffb37f)`,"--color-syntax-tag":`light-dark(#89001a, #ffaeaa)`,"--color-syntax-attribute":`light-dark(#584400, #eec12f)`,"--color-syntax-property":`light-dark(#005348, #83dac9)`,"--color-syntax-punctuation":`light-dark(#6e6e6e, #a0a0a0)`,"--color-syntax-background":`light-dark(#fafafa, #0a0a0a)`,"--color-background-surface":`light-dark(#ffffff, #262626)`,"--color-background-body":`light-dark(#f1f1f1, #1b1b1b)`,"--color-background-card":`light-dark(#ffffff, #1b1b1b)`,"--color-background-popover":`light-dark(#ffffff, #1b1b1b)`,"--color-background-muted":`light-dark(#f1f1f1, #1b1b1b)`,"--color-accent":`light-dark(#262626, #ebebeb)`,"--color-accent-muted":`light-dark(#f1f1f1, #262626)`,"--color-neutral":`light-dark(#0000000F, #FFFFFF1A)`,"--color-overlay":`light-dark(#00000080, #000000CC)`,"--color-overlay-hover":`light-dark(#0000000D, #FFFFFF0D)`,"--color-overlay-pressed":`light-dark(#0000001A, #FFFFFF1A)`,"--color-text-primary":`light-dark(#171717, #fafafa)`,"--color-text-secondary":`light-dark(#525252, #a3a3a3)`,"--color-text-disabled":`light-dark(#a3a3a3, #525252)`,"--color-text-accent":`light-dark(#262626, #ebebeb)`,"--color-on-dark":`#ffffff`,"--color-on-light":`#171717`,"--color-on-accent":`light-dark(#ffffff, #171717)`,"--color-on-success":`light-dark(#ffffff, #171717)`,"--color-on-error":`light-dark(#ffffff, #171717)`,"--color-on-warning":`#171717`,"--color-icon-accent":`light-dark(#262626, #ebebeb)`,"--color-icon-primary":`light-dark(#171717, #fafafa)`,"--color-icon-secondary":`light-dark(#737373, #a3a3a3)`,"--color-icon-disabled":`light-dark(#a3a3a3, #525252)`,"--color-success":`light-dark(#007004, #9fe59b)`,"--color-error":`light-dark(#a50c25, #ffc6c1)`,"--color-warning":`light-dark(#745b00, #fdcf4f)`,"--color-success-muted":`light-dark(#c5e5c0, #84c9803D)`,"--color-error-muted":`light-dark(#facecb, #ff9e973D)`,"--color-warning-muted":`light-dark(#f8da9d, #deb4333D)`,"--color-border":`light-dark(#00000014, #FFFFFF1A)`,"--color-border-emphasized":`light-dark(#d4d4d4, #525252)`,"--color-skeleton":`light-dark(#ebebeb, #525252)`,"--color-shadow":`light-dark(#0000001A, #0000004D)`,"--color-tint-hover":`light-dark(black, white)`,"--color-background-red":`light-dark(#facecb, #ff9e973D)`,"--color-border-red":`light-dark(#e6bab8, #ff6f6c)`,"--color-icon-red":`light-dark(#89001a, #ff9e97)`,"--color-text-red":`light-dark(#89001a, #ffc6c1)`,"--color-background-orange":`light-dark(#fad0b5, #ffa2583D)`,"--color-border-orange":`light-dark(#e6bda2, #e2883e)`,"--color-icon-orange":`light-dark(#6e3500, #ffa258)`,"--color-text-orange":`light-dark(#6e3500, #ffc9a2)`,"--color-background-yellow":`light-dark(#f8da9d, #deb4333D)`,"--color-border-yellow":`light-dark(#e4c279, #c0990e)`,"--color-icon-yellow":`light-dark(#584400, #deb433)`,"--color-text-yellow":`light-dark(#584400, #fdcf4f)`,"--color-background-green":`light-dark(#c5e5c0, #84c9803D)`,"--color-border-green":`light-dark(#b2d1ac, #69ad67)`,"--color-icon-green":`light-dark(#0c5700, #84c980)`,"--color-text-green":`light-dark(#0c5700, #9fe59b)`,"--color-background-teal":`light-dark(#a5e3d6, #7ec6b83D)`,"--color-border-teal":`light-dark(#94d6c8, #63ab9d)`,"--color-icon-teal":`light-dark(#005348, #7ec6b8)`,"--color-text-teal":`light-dark(#005348, #99e2d3)`,"--color-background-cyan":`light-dark(#a3e0ef, #83c2d43D)`,"--color-border-cyan":`light-dark(#91d3e3, #67a7b8)`,"--color-icon-cyan":`light-dark(#00505f, #83c2d4)`,"--color-text-cyan":`light-dark(#00505f, #9edef0)`,"--color-background-blue":`light-dark(#c4ddfb, #9eb7ff3D)`,"--color-border-blue":`light-dark(#b1c9e7, #6d9cfe)`,"--color-icon-blue":`light-dark(#00458c, #9eb7ff)`,"--color-text-blue":`light-dark(#00458c, #c7d3ff)`,"--color-background-purple":`light-dark(#eccef3, #f297ff3D)`,"--color-border-purple":`light-dark(#d8bbdf, #dd74f0)`,"--color-icon-purple":`light-dark(#700084, #f297ff)`,"--color-text-purple":`light-dark(#700084, #fac1ff)`,"--color-background-pink":`light-dark(#fccadc, #ff99c33D)`,"--color-border-pink":`light-dark(#e7b7c8, #f273aa)`,"--color-icon-pink":`light-dark(#83004b, #ff99c3)`,"--color-text-pink":`light-dark(#83004b, #ffc3da)`,"--color-background-gray":`light-dark(#e5e5e5, var(--color-neutral))`,"--color-border-gray":`light-dark(#d4d4d4, #262626)`,"--color-icon-gray":`light-dark(#525252, #a3a3a3)`,"--color-text-gray":`light-dark(#262626, #e5e5e5)`,"--radius-none":`0px`,"--radius-inner":`0.375rem`,"--radius-element":`0.625rem`,"--radius-container":`0.75rem`,"--radius-page":`1.75rem`,"--radius-full":`9999px`,"--shadow-low":`0 2px 4px light-dark(oklch(0 0 0 / 5%), oklch(0 0 0 / 25%)), 0 4px 8px light-dark(oklch(0 0 0 / 10%), oklch(0 0 0 / 40%)), inset 0 0 0 1px light-dark(transparent, oklch(1 0 0 / 8%))`,"--shadow-med":`0 2px 4px light-dark(oklch(0 0 0 / 5%), oklch(0 0 0 / 35%)), 0 4px 12px light-dark(oklch(0 0 0 / 10%), oklch(0 0 0 / 50%)), inset 0 0 0 1px light-dark(transparent, oklch(1 0 0 / 12%))`,"--shadow-high":`0 4px 6px light-dark(oklch(0 0 0 / 10%), oklch(0 0 0 / 50%)), 0 12px 24px light-dark(oklch(0 0 0 / 15%), oklch(0 0 0 / 70%)), inset 0 0 0 1px light-dark(transparent, oklch(1 0 0 / 15%))`,"--shadow-inset-hover":`inset 0px 0px 0px 2px #0074e24D`,"--shadow-inset-selected":`inset 0px 0px 0px 2px #0074e280`,"--shadow-inset-success":`inset 0px 0px 0px 2px #1981004D`,"--shadow-inset-warning":`inset 0px 0px 0px 2px #ffce2f4D`,"--shadow-inset-error":`inset 0px 0px 0px 2px #e33f4a4D`},components:{heading:{"level:1":{fontFamily:`var(--font-family-heading)`,fontSize:`var(--text-heading-1-size)`,fontWeight:`var(--text-heading-1-weight)`,lineHeight:`var(--text-heading-1-leading)`},"level:2":{fontFamily:`var(--font-family-heading)`,fontSize:`var(--text-heading-2-size)`,fontWeight:`var(--text-heading-2-weight)`,lineHeight:`var(--text-heading-2-leading)`},"level:3":{fontFamily:`var(--font-family-heading)`,fontSize:`var(--text-heading-3-size)`,fontWeight:`var(--text-heading-3-weight)`,lineHeight:`var(--text-heading-3-leading)`},"level:4":{fontFamily:`var(--font-family-heading)`,fontSize:`var(--text-heading-4-size)`,fontWeight:`var(--text-heading-4-weight)`,lineHeight:`var(--text-heading-4-leading)`},"level:5":{fontFamily:`var(--font-family-heading)`,fontSize:`var(--text-heading-5-size)`,fontWeight:`var(--text-heading-5-weight)`,lineHeight:`var(--text-heading-5-leading)`},"level:6":{fontFamily:`var(--font-family-heading)`,fontSize:`var(--text-heading-6-size)`,fontWeight:`var(--text-heading-6-weight)`,lineHeight:`var(--text-heading-6-leading)`},"type:display-1":{fontFamily:`var(--font-family-heading)`,fontSize:`var(--text-display-1-size)`,lineHeight:`var(--text-display-1-leading)`},"type:display-2":{fontFamily:`var(--font-family-heading)`,fontSize:`var(--text-display-2-size)`,lineHeight:`var(--text-display-2-leading)`},"type:display-3":{fontFamily:`var(--font-family-heading)`,fontSize:`var(--text-display-3-size)`,lineHeight:`var(--text-display-3-leading)`}},text:{"type:body":{fontFamily:`var(--font-family-body)`,fontSize:`var(--text-body-size)`,lineHeight:`var(--text-body-leading)`},"type:large":{fontFamily:`var(--font-family-body)`,fontSize:`var(--text-large-size)`,lineHeight:`var(--text-large-leading)`},"type:label":{fontFamily:`var(--font-family-body)`,fontSize:`var(--text-label-size)`,lineHeight:`var(--text-label-leading)`},"type:code":{fontFamily:`var(--font-family-code)`,fontSize:`var(--text-code-size)`,lineHeight:`var(--text-code-leading)`},"type:supporting":{fontFamily:`var(--font-family-body)`,fontSize:`var(--text-supporting-size)`,lineHeight:`var(--text-supporting-leading)`},"type:display-1":{fontFamily:`var(--font-family-heading)`,fontSize:`var(--text-display-1-size)`,lineHeight:`var(--text-display-1-leading)`},"type:display-2":{fontFamily:`var(--font-family-heading)`,fontSize:`var(--text-display-2-size)`,lineHeight:`var(--text-display-2-leading)`},"type:display-3":{fontFamily:`var(--font-family-heading)`,fontSize:`var(--text-display-3-size)`,lineHeight:`var(--text-display-3-leading)`}},button:{"variant:destructive":{backgroundColor:`var(--color-error-muted)`,color:`var(--color-error)`}},badge:{"variant:info":{backgroundColor:`light-dark(#0074e2, #6d9cfe)`,color:`light-dark(#ffffff, #171717)`},"variant:neutral":{backgroundColor:`var(--color-background-gray)`,color:`var(--color-text-gray)`},"variant:success":{backgroundColor:`light-dark(#198100, #64af4c)`,color:`light-dark(#ffffff, #171717)`},"variant:warning":{backgroundColor:`#ffce2f`,color:`#171717`},"variant:error":{backgroundColor:`light-dark(#c9303a, #ff705d)`,color:`light-dark(#ffffff, #171717)`},"variant:red":{backgroundColor:`var(--color-background-red)`,color:`var(--color-text-red)`},"variant:orange":{backgroundColor:`var(--color-background-orange)`,color:`var(--color-text-orange)`},"variant:yellow":{backgroundColor:`var(--color-background-yellow)`,color:`var(--color-text-yellow)`},"variant:green":{backgroundColor:`var(--color-background-green)`,color:`var(--color-text-green)`},"variant:teal":{backgroundColor:`var(--color-background-teal)`,color:`var(--color-text-teal)`},"variant:cyan":{backgroundColor:`var(--color-background-cyan)`,color:`var(--color-text-cyan)`},"variant:blue":{backgroundColor:`var(--color-background-blue)`,color:`var(--color-text-blue)`},"variant:purple":{backgroundColor:`var(--color-background-purple)`,color:`var(--color-text-purple)`},"variant:pink":{backgroundColor:`var(--color-background-pink)`,color:`var(--color-text-pink)`},"variant:gray":{backgroundColor:`var(--color-background-gray)`,color:`var(--color-text-gray)`}},statusdot:{"variant:success":{backgroundColor:`light-dark(#198100, #64af4c)`},"variant:warning":{backgroundColor:`#ffce2f`},"variant:error":{backgroundColor:`light-dark(#c9303a, #ff705d)`},"variant:accent":{backgroundColor:`light-dark(#0074e2, #6d9cfe)`}},banner:{"status:info":{"--color-accent-muted":`var(--color-background-blue)`,"--color-text-primary":`var(--color-text-blue)`,"--color-text-secondary":`var(--color-text-blue)`,"--color-accent":`var(--color-text-blue)`},"status:success":{"--color-text-primary":`var(--color-text-green)`,"--color-text-secondary":`var(--color-text-green)`,"--color-success":`var(--color-text-green)`},"status:warning":{"--color-text-primary":`var(--color-text-yellow)`,"--color-text-secondary":`var(--color-text-yellow)`,"--color-warning":`var(--color-text-yellow)`},"status:error":{"--color-text-primary":`var(--color-text-red)`,"--color-text-secondary":`var(--color-text-red)`,"--color-error":`var(--color-text-red)`}},switch:{base:{"--color-background-gray":`var(--color-border-emphasized)`}},progressbar:{base:{"--color-background-muted":`var(--color-border-emphasized)`},"variant:accent":{"--color-accent":`#0074e2`},"variant:success":{"--color-success":`#198100`},"variant:warning":{"--color-warning":`#ffce2f`},"variant:error":{"--color-error":`#c9303a`}},card:{base:{padding:`var(--spacing-3)`}},section:{base:{padding:`var(--spacing-3)`}}},__onDark:{tokens:{"color-scheme":`dark`,"--color-text-primary":`var(--color-on-dark)`,"--color-icon-primary":`var(--color-on-dark)`,"--color-accent":`var(--color-on-dark)`}},__onLight:{tokens:{"color-scheme":`light`,"--color-text-primary":`var(--color-on-light)`,"--color-icon-primary":`var(--color-on-light)`,"--color-accent":`var(--color-on-light)`}},icons:{close:(0,V.jsx)(Re,{...yS}),chevronDown:(0,V.jsx)(te,{...yS}),chevronLeft:(0,V.jsx)(ne,{...yS}),chevronRight:(0,V.jsx)(re,{...yS}),chevronsLeft:(0,V.jsx)(R,{...yS}),chevronsRight:(0,V.jsx)(z,{...yS}),check:(0,V.jsx)(L,{...yS}),success:(0,V.jsx)(ie,{...yS}),error:(0,V.jsx)(ae,{...yS}),warning:(0,V.jsx)(Fe,{...yS}),info:(0,V.jsx)(ve,{...yS}),calendar:(0,V.jsx)(F,{...yS}),clock:(0,V.jsx)(se,{...yS}),externalLink:(0,V.jsx)(de,{...yS}),menu:(0,V.jsx)(be,{...yS}),moreHorizontal:(0,V.jsx)(ue,{...yS}),search:(0,V.jsx)(De,{...yS}),arrowUp:(0,V.jsx)(N,{...yS}),arrowDown:(0,V.jsx)(j,{...yS}),arrowsUpDown:(0,V.jsx)(M,{...yS}),funnel:(0,V.jsx)(ge,{...yS}),eyeSlash:(0,V.jsx)(fe,{...yS}),viewColumns:(0,V.jsx)(ce,{...yS}),copy:(0,V.jsx)(le,{...yS}),checkDouble:(0,V.jsx)(I,{...yS}),wrench:(0,V.jsx)(Le,{...yS}),stop:(0,V.jsx)(Me,{...yS}),microphone:(0,V.jsx)(xe,{...yS})}};function xS({children:e}){let t=fn(uS,e=>e.snapshot?.preferences?.theme)??`system`,[n,r]=(0,w.useState)(()=>window.matchMedia?.(`(prefers-color-scheme: dark)`).matches??!1);(0,w.useEffect)(()=>{let e=window.matchMedia?.(`(prefers-color-scheme: dark)`);if(!e)return;let t=()=>r(e.matches);return t(),e.addEventListener(`change`,t),()=>e.removeEventListener(`change`,t)},[]);let i=t===`dark`||t===`system`&&n?`dark`:`light`;return(0,w.useEffect)(()=>{document.documentElement.dataset.theme=i},[i]),(0,V.jsx)(cn,{i18n:Pt,children:(0,V.jsx)(vS,{theme:bS,mode:i,children:e})})}var SS=document.getElementById(`root`);if(!SS)throw Error(`OpenPI Web root is missing`);(0,ze.createRoot)(SS).render((0,V.jsx)(w.StrictMode,{children:(0,V.jsx)(xS,{children:(0,V.jsx)(dS,{})})}));
\ No newline at end of file
diff --git a/web/protocol/evidence.ts b/web/protocol/evidence.ts
index 1df42a76..5c31e611 100644
--- a/web/protocol/evidence.ts
+++ b/web/protocol/evidence.ts
@@ -145,6 +145,10 @@ export function projectToolEvidence(call: Extract 0 ? args.offset : 1;
return {
kind, state, processState: terminal?.state ?? (call.name === "bash" && result?.isError === false ? "returned" : call.name === "bash" && liveState === "running" ? "running" : "unknown"), output: readFooter ? output.text.slice(0, readFooter.index) : output.text, truncated: truncated || diff?.truncated === true,
+ images: result?.images,
+ imageCount: result?.imageCount ?? result?.images?.length ?? 0,
+ unsupportedContentBlocks: result?.unsupportedContentBlocks ?? 0,
+ partsOmitted: result?.truncation?.partsOmitted ?? 0,
readRecovery: readFooter?.[1],
numberLines: call.name === "read" && result?.isError === false && evidenceRecord(details.truncation).firstLineExceedsLimit !== true && Boolean(output.text),
path: typeof args.path === "string" ? evidenceText(args.path).text : undefined,
diff --git a/web/protocol/types.ts b/web/protocol/types.ts
index 725ababb..550397ab 100644
--- a/web/protocol/types.ts
+++ b/web/protocol/types.ts
@@ -11,6 +11,7 @@ export const WEB_MAX_SESSION_PREVIEW = 500;
const WEB_MAX_METADATA_TEXT = 500;
export const WEB_MAX_ENTRIES = 250;
export const WEB_MAX_MESSAGE_PARTS = 64;
+export const WEB_MAX_IMAGE_METADATA = 16;
export const WEB_MAX_SESSIONS = 500;
export const WEB_MAX_WORKSPACES = 250;
export const WEB_MAX_MODELS = 250;
@@ -126,15 +127,25 @@ export interface WebMessageTruncation {
readonly truncated: true;
readonly text?: true;
readonly partsOmitted?: number;
+ readonly imagesOmitted?: number;
+ readonly unsupportedContentBlocks?: number;
readonly details?: true;
}
+export interface WebImageMetadata {
+ readonly mimeType?: string;
+ readonly bytes?: number;
+}
+
export interface WebLiveMessage {
terminalReceipt?: ReturnType;
role?: string;
toolName?: string;
content: string;
parts?: WebMessagePart[];
+ images?: WebImageMetadata[];
+ imageCount?: number;
+ unsupportedContentBlocks?: number;
toolCallId?: string;
isError?: boolean;
customType?: string;
@@ -340,6 +351,10 @@ function projectContent(message: Record, resolvePath?: (path: s
return {
content: text.value,
parts: [] as WebMessagePart[],
+ images: [] as WebImageMetadata[],
+ imageCount: 0,
+ imagesOmitted: 0,
+ unsupportedContentBlocks: 0,
partsOmitted: 0,
textTruncated: text.truncated,
};
@@ -358,18 +373,28 @@ function projectContent(message: Record, resolvePath?: (path: s
return {
content: text.value,
parts: [] as WebMessagePart[],
+ images: [] as WebImageMetadata[],
+ imageCount: 0,
+ imagesOmitted: 0,
+ unsupportedContentBlocks: 0,
partsOmitted: 0,
textTruncated: text.truncated,
};
}
const parts: WebMessagePart[] = [];
+ const images: WebImageMetadata[] = [];
+ let imageCount = 0;
+ let unsupportedContentBlocks = 0;
let visibleText = "";
let textTruncated = false;
const retainedParts = Math.min(content.length, WEB_MAX_MESSAGE_PARTS);
for (let index = 0; index < retainedParts; index++) {
const part = content[index];
- if (typeof part !== "object" || part === null) continue;
+ if (typeof part !== "object" || part === null) {
+ unsupportedContentBlocks++;
+ continue;
+ }
const typed = part as Record;
let projected: WebMessagePart | undefined;
if (typed.type === "text" && typeof typed.text === "string") {
@@ -433,6 +458,31 @@ function projectContent(message: Record, resolvePath?: (path: s
argumentsBudget.truncated ||
id?.truncated === true ||
name.truncated;
+ } else if (typed.type === "image") {
+ imageCount++;
+ if (images.length < WEB_MAX_IMAGE_METADATA) {
+ const mimeType =
+ typeof typed.mimeType === "string"
+ ? boundedTextProjection(typed.mimeType, WEB_MAX_METADATA_TEXT)
+ : undefined;
+ // Pi's ImageContent data is base64. Only inspect its length and final
+ // padding characters; never scan or retain the potentially large body.
+ const data = typeof typed.data === "string" ? typed.data : "";
+ const padding = data.endsWith("==") ? 2 : data.endsWith("=") ? 1 : 0;
+ const bytes =
+ data.length > 0 &&
+ data.length % 4 === 0 &&
+ Number.isSafeInteger((data.length * 3) / 4 - padding)
+ ? (data.length * 3) / 4 - padding
+ : undefined;
+ images.push({
+ ...(mimeType?.value ? { mimeType: mimeType.value } : {}),
+ ...(bytes !== undefined ? { bytes } : {}),
+ });
+ textTruncated ||= mimeType?.truncated === true;
+ }
+ } else {
+ unsupportedContentBlocks++;
}
if (!projected) continue;
parts.push(projected);
@@ -441,6 +491,10 @@ function projectContent(message: Record, resolvePath?: (path: s
return {
content: contentText.value,
parts,
+ images,
+ imageCount,
+ imagesOmitted: Math.max(0, imageCount - images.length),
+ unsupportedContentBlocks,
partsOmitted: Math.max(0, content.length - retainedParts),
textTruncated: textTruncated || contentText.truncated,
};
@@ -477,6 +531,8 @@ export function projectMessage(message: unknown, resolvePath?: (path: string) =>
const truncated =
content.textTruncated ||
content.partsOmitted > 0 ||
+ content.imagesOmitted > 0 ||
+ content.unsupportedContentBlocks > 0 ||
details.truncated ||
metadataTruncated;
return {
@@ -485,6 +541,11 @@ export function projectMessage(message: unknown, resolvePath?: (path: string) =>
toolName: toolName?.value,
content: content.content,
...(content.parts.length > 0 ? { parts: content.parts } : {}),
+ ...(content.imageCount > 0 ? { imageCount: content.imageCount } : {}),
+ ...(content.images.length > 0 ? { images: content.images } : {}),
+ ...(content.unsupportedContentBlocks > 0
+ ? { unsupportedContentBlocks: content.unsupportedContentBlocks }
+ : {}),
...(toolCallId ? { toolCallId: toolCallId.value } : {}),
...(typeof value.isError === "boolean" ? { isError: value.isError } : {}),
...(customType ? { customType: customType.value } : {}),
@@ -500,6 +561,12 @@ export function projectMessage(message: unknown, resolvePath?: (path: string) =>
...(content.partsOmitted > 0
? { partsOmitted: content.partsOmitted }
: {}),
+ ...(content.imagesOmitted > 0
+ ? { imagesOmitted: content.imagesOmitted }
+ : {}),
+ ...(content.unsupportedContentBlocks > 0
+ ? { unsupportedContentBlocks: content.unsupportedContentBlocks }
+ : {}),
...(details.truncated ? { details: true as const } : {}),
},
}
diff --git a/web/ui/src/features/transcript/ImageEvidence.tsx b/web/ui/src/features/transcript/ImageEvidence.tsx
new file mode 100644
index 00000000..f89326ea
--- /dev/null
+++ b/web/ui/src/features/transcript/ImageEvidence.tsx
@@ -0,0 +1,67 @@
+import type { WebImageMetadata } from "../../../../protocol/types.ts";
+import { useTranslation } from "react-i18next";
+import { i18n } from "../../i18n.ts";
+
+function imageBytes(value: number | undefined) {
+ if (value === undefined || !Number.isSafeInteger(value) || value < 0)
+ return undefined;
+ if (value < 1_024) return `${value} bytes`;
+ if (value < 1_024 * 1_024) return `${Math.round(value / 1_024)} KiB`;
+ return `${(value / (1_024 * 1_024)).toFixed(1)} MiB`;
+}
+
+export function ImageEvidence({
+ images,
+ imageCount,
+ partsOmitted = 0,
+ unsupportedContentBlocks = 0,
+}: {
+ images?: readonly WebImageMetadata[];
+ imageCount?: number;
+ partsOmitted?: number;
+ unsupportedContentBlocks?: number;
+}) {
+ const { t } = useTranslation(undefined, { i18n });
+ const imageMetadata = images ?? [];
+ const count = imageCount ?? imageMetadata.length;
+ const omitted = Math.max(0, count - imageMetadata.length);
+ const imageKeys = new Map();
+ if (count <= 0 && unsupportedContentBlocks <= 0 && partsOmitted <= 0)
+ return null;
+ return (
+
+ {count > 0 && (
+
+ {t(count === 1 ? "toolImageUnavailable" : "toolImagesUnavailable", {
+ count,
+ })}
+
+ )}
+ {imageMetadata.map((image) => {
+ const size = imageBytes(image.bytes);
+ const identity = `${image.mimeType || "unknown"}-${image.bytes ?? "unknown"}`;
+ const occurrence = imageKeys.get(identity) ?? 0;
+ imageKeys.set(identity, occurrence + 1);
+ return (
+
+ {image.mimeType || t("toolImageUnknownType")}
+ {size ? ` · ${size}` : ""}
+
+ );
+ })}
+ {omitted > 0 && (
+
{t("toolImagesMetadataOmitted", { count: omitted })}
+ )}
+ {unsupportedContentBlocks > 0 && (
+
+ {t("toolUnsupportedContentBlocks", {
+ count: unsupportedContentBlocks,
+ })}
+
+ )}
+ {partsOmitted > 0 && (
+
{t("toolContentPartsOmitted", { count: partsOmitted })}
+ )}
+
+ );
+}
diff --git a/web/ui/src/features/transcript/ToolEvidence.tsx b/web/ui/src/features/transcript/ToolEvidence.tsx
index 67a59c83..effc76e4 100644
--- a/web/ui/src/features/transcript/ToolEvidence.tsx
+++ b/web/ui/src/features/transcript/ToolEvidence.tsx
@@ -7,6 +7,7 @@ import {
projectToolEvidence,
type EvidenceState,
} from "../../../../protocol/evidence.ts";
+import { ImageEvidence } from "./ImageEvidence.tsx";
function EvidenceBlock({
children,
@@ -80,6 +81,12 @@ export function ToolEvidence({
below may also be truncated.
)}
+
{view.change && (
{view.change === "created"
@@ -148,9 +155,15 @@ export function ToolEvidence({
))}
- ) : (
+ ) : view.output ? (
- {view.output || "No output received"}
+ {view.output}
+
+ ) : view.imageCount > 0 ||
+ view.partsOmitted > 0 ||
+ view.unsupportedContentBlocks > 0 ? null : (
+
+ No output received
)}
{view.kind === "file" && view.truncated && (
diff --git a/web/ui/src/features/transcript/Transcript.tsx b/web/ui/src/features/transcript/Transcript.tsx
index 676057c6..5eceab7a 100644
--- a/web/ui/src/features/transcript/Transcript.tsx
+++ b/web/ui/src/features/transcript/Transcript.tsx
@@ -25,6 +25,7 @@ import {
} from "react";
import { useTranslation } from "react-i18next";
import type {
+ WebImageMetadata,
WebLiveMessage,
WebMessagePart,
WebSnapshot,
@@ -41,6 +42,7 @@ import type { LiveEntry } from "../../store/web-store.ts";
import { ToolEvidence } from "./ToolEvidence.tsx";
import { evidenceText, isEvidenceTool } from "../../../../protocol/evidence.ts";
import { ArtifactProvider } from "../artifacts/Artifacts.tsx";
+import { ImageEvidence } from "./ImageEvidence.tsx";
type PersistedEntry = NonNullable<
WebSnapshot["selectedSession"]
@@ -165,6 +167,10 @@ function EvidenceDetails({
status,
summary,
thinking = false,
+ images,
+ imageCount,
+ partsOmitted,
+ unsupportedContentBlocks,
}: {
body: string;
icon: ReactNode;
@@ -172,6 +178,10 @@ function EvidenceDetails({
status: Status;
summary?: string;
thinking?: boolean;
+ images?: readonly WebImageMetadata[];
+ imageCount?: number;
+ partsOmitted?: number;
+ unsupportedContentBlocks?: number;
}) {
return (
+
{evidenceText(body).text}
@@ -201,12 +217,20 @@ function ActivityCard({
meta,
status,
title,
+ images,
+ imageCount,
+ partsOmitted,
+ unsupportedContentBlocks,
}: {
body: string;
family: "subagent" | "workflow";
meta?: string;
status: Status;
title: string;
+ images?: readonly WebImageMetadata[];
+ imageCount?: number;
+ partsOmitted?: number;
+ unsupportedContentBlocks?: number;
}) {
return (
@@ -222,6 +246,12 @@ function ActivityCard({
{body}
+
);
}
@@ -234,6 +264,12 @@ function familyCard(
const args = parseArguments(part.arguments);
const details = record(result?.details);
const status = resultStatus(result);
+ const imageProps = {
+ images: result?.images,
+ imageCount: result?.imageCount,
+ partsOmitted: result?.truncation?.partsOmitted,
+ unsupportedContentBlocks: result?.unsupportedContentBlocks,
+ };
if (name === "subagent_spawn") {
const meta = [args.agent_type, args.model, args.working_dir]
.filter(Boolean)
@@ -245,6 +281,7 @@ function familyCard(
meta={meta || String(details.cwd || "")}
body={result?.content || String(args.prompt || part.arguments)}
status={status}
+ {...imageProps}
/>
);
}
@@ -257,6 +294,7 @@ function familyCard(
meta={String(args.id || "")}
body={result?.content || part.arguments}
status={status}
+ {...imageProps}
/>
);
}
@@ -285,6 +323,7 @@ function familyCard(
meta={meta}
body={result?.content || script}
status={status}
+ {...imageProps}
/>
);
}
@@ -296,6 +335,7 @@ function familyCard(
meta={String(args.runId || "")}
body={result?.content || part.arguments}
status={status}
+ {...imageProps}
/>
);
}
@@ -475,6 +515,10 @@ function CustomResult({ message }: { message: WebLiveMessage }) {
meta={[details.outcome, details.elapsed].filter(Boolean).join(" · ")}
body={message.content}
status={canonicalStatus(details.status)}
+ images={message.images}
+ imageCount={message.imageCount}
+ partsOmitted={message.truncation?.partsOmitted}
+ unsupportedContentBlocks={message.unsupportedContentBlocks}
/>
);
}
@@ -510,6 +554,10 @@ function CustomResult({ message }: { message: WebLiveMessage }) {
}
body={body}
status={status}
+ images={message.images}
+ imageCount={message.imageCount}
+ partsOmitted={message.truncation?.partsOmitted}
+ unsupportedContentBlocks={message.unsupportedContentBlocks}
/>
);
}
@@ -766,6 +814,26 @@ export function Transcript(props: TranscriptProps) {
});
}
});
+ if (
+ (message.imageCount ?? message.images?.length ?? 0) > 0 ||
+ (message.unsupportedContentBlocks ?? 0) > 0
+ ) {
+ detailRows.push({
+ key: `${entry.key}-image-evidence`,
+ content: (
+
+
+
+
+
+ ),
+ });
+ }
if (message.content.trim())
detailRows.push({
key: `${entry.key}-answer`,
@@ -798,6 +866,11 @@ export function Transcript(props: TranscriptProps) {
: null;
const status = resultStatus(message);
const toolName = message.toolName || "tool";
+ const imageCount = message.imageCount ?? message.images?.length ?? 0;
+ const hasUnavailableContent =
+ imageCount > 0 ||
+ (message.unsupportedContentBlocks ?? 0) > 0 ||
+ (message.truncation?.partsOmitted ?? 0) > 0;
const icon =
family === "subagent" ? (
@@ -813,8 +886,12 @@ export function Transcript(props: TranscriptProps) {
title={`${toolName.replaceAll("_", " ")} · ${compactSummary(message.content)}`}
body={message.content}
status={status}
+ images={message.images}
+ imageCount={message.imageCount}
+ partsOmitted={message.truncation?.partsOmitted}
+ unsupportedContentBlocks={message.unsupportedContentBlocks}
/>
- ) : isEmptyToolOutput(message.content) ? (
+ ) : isEmptyToolOutput(message.content) && !hasUnavailableContent ? (
{icon}
{toolName}
@@ -829,6 +906,10 @@ export function Transcript(props: TranscriptProps) {
name={toolName}
summary={compactSummary(message.content)}
status={status}
+ images={message.images}
+ imageCount={message.imageCount}
+ partsOmitted={message.truncation?.partsOmitted}
+ unsupportedContentBlocks={message.unsupportedContentBlocks}
/>
);
return [
diff --git a/web/ui/src/i18n.ts b/web/ui/src/i18n.ts
index 3b015df4..77638fb2 100644
--- a/web/ui/src/i18n.ts
+++ b/web/ui/src/i18n.ts
@@ -159,6 +159,16 @@ const resources = {
noMatchingModels: "No matching models",
modelSearchFailed: "Could not search models. Try again.",
modelSearchTruncated: "{{omitted}} matching models are not shown.",
+ toolImageUnavailable: "1 image included; preview unavailable in Web.",
+ toolImagesUnavailable:
+ "{{count}} images included; previews unavailable in Web.",
+ toolImageUnknownType: "image (type unavailable)",
+ toolImagesMetadataOmitted:
+ "{{count}} image metadata item(s) are not shown.",
+ toolUnsupportedContentBlocks:
+ "{{count}} unsupported content block(s) are not shown.",
+ toolContentPartsOmitted:
+ "{{count}} additional content block(s) are not shown.",
modelPreparing: "Preparing task...",
modelRetrying: "Retrying model request...",
modelRunning: "Working...",
@@ -362,6 +372,13 @@ const resources = {
noMatchingModels: "没有匹配的模型",
modelSearchFailed: "模型搜索失败,请重试。",
modelSearchTruncated: "还有 {{omitted}} 个匹配模型未显示。",
+ toolImageUnavailable: "结果包含 1 张图片,Web 暂不提供图片预览。",
+ toolImagesUnavailable:
+ "结果包含 {{count}} 张图片,Web 暂不提供图片预览。",
+ toolImageUnknownType: "图片(类型不可用)",
+ toolImagesMetadataOmitted: "还有 {{count}} 项图片元数据未显示。",
+ toolUnsupportedContentBlocks: "还有 {{count}} 个不支持的内容块未显示。",
+ toolContentPartsOmitted: "还有 {{count}} 个内容块未显示。",
modelPreparing: "正在准备任务...",
modelRetrying: "模型请求重试中...",
modelRunning: "正在运行...",