diff --git a/Resources/Localizable.xcstrings b/Resources/Localizable.xcstrings index dfd0cba0542e..9f0b176d9892 100644 --- a/Resources/Localizable.xcstrings +++ b/Resources/Localizable.xcstrings @@ -102475,6 +102475,69 @@ } } }, + "feed.examples.load": { + "extractionState": "manual", + "localizations": { + "en": { "stringUnit": { "state": "translated", "value": "Load examples" } }, + "ja": { "stringUnit": { "state": "translated", "value": "例を読み込む" } } + } + }, + "feed.examples.permission.body": { + "extractionState": "manual", + "localizations": { + "en": { "stringUnit": { "state": "translated", "value": "bun run db:migrate" } }, + "ja": { "stringUnit": { "state": "translated", "value": "bun run db:migrate" } } + } + }, + "feed.examples.permission.title": { + "extractionState": "manual", + "localizations": { + "en": { "stringUnit": { "state": "translated", "value": "Run database migration" } }, + "ja": { "stringUnit": { "state": "translated", "value": "データベース移行を実行" } } + } + }, + "feed.examples.plan.body": { + "extractionState": "manual", + "localizations": { + "en": { "stringUnit": { "state": "translated", "value": "Update the bridge, add focused tests, then build the tagged app." } }, + "ja": { "stringUnit": { "state": "translated", "value": "ブリッジを更新し、対象テストを追加して、タグ付きアプリをビルドします。" } } + } + }, + "feed.examples.plan.title": { + "extractionState": "manual", + "localizations": { + "en": { "stringUnit": { "state": "translated", "value": "Plan ready for review" } }, + "ja": { "stringUnit": { "state": "translated", "value": "レビュー待ちの計画" } } + } + }, + "feed.examples.question.focused": { + "extractionState": "manual", + "localizations": { + "en": { "stringUnit": { "state": "translated", "value": "Focused tests" } }, + "ja": { "stringUnit": { "state": "translated", "value": "対象テスト" } } + } + }, + "feed.examples.question.full": { + "extractionState": "manual", + "localizations": { + "en": { "stringUnit": { "state": "translated", "value": "Full test suite" } }, + "ja": { "stringUnit": { "state": "translated", "value": "全テストスイート" } } + } + }, + "feed.examples.question.prompt": { + "extractionState": "manual", + "localizations": { + "en": { "stringUnit": { "state": "translated", "value": "Which verification should run?" } }, + "ja": { "stringUnit": { "state": "translated", "value": "どの検証を実行しますか?" } } + } + }, + "feed.examples.question.title": { + "extractionState": "manual", + "localizations": { + "en": { "stringUnit": { "state": "translated", "value": "Verification scope" } }, + "ja": { "stringUnit": { "state": "translated", "value": "検証範囲" } } + } + }, "feed.exitplan.allowedPrompts": { "extractionState": "manual", "localizations": { @@ -102815,6 +102878,55 @@ } } }, + "feed.integrations.hint": { + "extractionState": "manual", + "localizations": { + "en": { "stringUnit": { "state": "translated", "value": "Claude Code and Codex use Settings. Other agents need `cmux hooks setup`." } }, + "ja": { "stringUnit": { "state": "translated", "value": "Claude Code と Codex は設定を使用します。その他のエージェントでは `cmux hooks setup` が必要です。" } } + } + }, + "feed.integrations.status.checking": { + "extractionState": "manual", + "localizations": { + "en": { "stringUnit": { "state": "translated", "value": "Checking..." } }, + "ja": { "stringUnit": { "state": "translated", "value": "確認中..." } } + } + }, + "feed.integrations.status.disabled": { + "extractionState": "manual", + "localizations": { + "en": { "stringUnit": { "state": "translated", "value": "Disabled in Settings" } }, + "ja": { "stringUnit": { "state": "translated", "value": "設定で無効" } } + } + }, + "feed.integrations.status.needsSetup": { + "extractionState": "manual", + "localizations": { + "en": { "stringUnit": { "state": "translated", "value": "Setup needed" } }, + "ja": { "stringUnit": { "state": "translated", "value": "セットアップが必要" } } + } + }, + "feed.integrations.status.ready": { + "extractionState": "manual", + "localizations": { + "en": { "stringUnit": { "state": "translated", "value": "Ready" } }, + "ja": { "stringUnit": { "state": "translated", "value": "準備完了" } } + } + }, + "feed.integrations.title": { + "extractionState": "manual", + "localizations": { + "en": { "stringUnit": { "state": "translated", "value": "Agent integrations" } }, + "ja": { "stringUnit": { "state": "translated", "value": "エージェント連携" } } + } + }, + "feed.keyboard.help": { + "extractionState": "manual", + "localizations": { + "en": { "stringUnit": { "state": "translated", "value": "Navigate with ↑/↓, J/K, or Control-N/Control-P. Press Tab to reach actions." } }, + "ja": { "stringUnit": { "state": "translated", "value": "↑/↓、J/K、または Control-N/Control-P で移動します。Tab で操作ボタンに移動します。" } } + } + }, "feed.kind.exitPlan": { "extractionState": "manual", "localizations": { @@ -103881,6 +103993,90 @@ } } }, + "feed.source.amp": { + "extractionState": "manual", + "localizations": { + "en": { "stringUnit": { "state": "translated", "value": "Amp" } }, + "ja": { "stringUnit": { "state": "translated", "value": "Amp" } } + } + }, + "feed.source.claude": { + "extractionState": "manual", + "localizations": { + "en": { "stringUnit": { "state": "translated", "value": "Claude Code" } }, + "ja": { "stringUnit": { "state": "translated", "value": "Claude Code" } } + } + }, + "feed.source.codebuddy": { + "extractionState": "manual", + "localizations": { + "en": { "stringUnit": { "state": "translated", "value": "CodeBuddy" } }, + "ja": { "stringUnit": { "state": "translated", "value": "CodeBuddy" } } + } + }, + "feed.source.codex": { + "extractionState": "manual", + "localizations": { + "en": { "stringUnit": { "state": "translated", "value": "Codex" } }, + "ja": { "stringUnit": { "state": "translated", "value": "Codex" } } + } + }, + "feed.source.copilot": { + "extractionState": "manual", + "localizations": { + "en": { "stringUnit": { "state": "translated", "value": "Copilot" } }, + "ja": { "stringUnit": { "state": "translated", "value": "Copilot" } } + } + }, + "feed.source.cursor": { + "extractionState": "manual", + "localizations": { + "en": { "stringUnit": { "state": "translated", "value": "Cursor" } }, + "ja": { "stringUnit": { "state": "translated", "value": "Cursor" } } + } + }, + "feed.source.factory": { + "extractionState": "manual", + "localizations": { + "en": { "stringUnit": { "state": "translated", "value": "Factory" } }, + "ja": { "stringUnit": { "state": "translated", "value": "Factory" } } + } + }, + "feed.source.gemini": { + "extractionState": "manual", + "localizations": { + "en": { "stringUnit": { "state": "translated", "value": "Gemini" } }, + "ja": { "stringUnit": { "state": "translated", "value": "Gemini" } } + } + }, + "feed.source.hermes": { + "extractionState": "manual", + "localizations": { + "en": { "stringUnit": { "state": "translated", "value": "Hermes Agent" } }, + "ja": { "stringUnit": { "state": "translated", "value": "Hermes Agent" } } + } + }, + "feed.source.opencode": { + "extractionState": "manual", + "localizations": { + "en": { "stringUnit": { "state": "translated", "value": "OpenCode" } }, + "ja": { "stringUnit": { "state": "translated", "value": "OpenCode" } } + } + }, + "feed.source.pi": { + "extractionState": "manual", + "localizations": { + "en": { "stringUnit": { "state": "translated", "value": "Pi" } }, + "ja": { "stringUnit": { "state": "translated", "value": "Pi" } } + } + }, + "feed.source.qoder": { + "extractionState": "manual", + "localizations": { + "en": { "stringUnit": { "state": "translated", "value": "Qoder" } }, + "ja": { "stringUnit": { "state": "translated", "value": "Qoder" } } + } + }, "feed.status.expired": { "extractionState": "manual", "localizations": { diff --git a/Resources/markdown-viewer/webviews-app/assets/feedSurface.css b/Resources/markdown-viewer/webviews-app/assets/feedSurface.css new file mode 100644 index 000000000000..5eee0bb1f276 --- /dev/null +++ b/Resources/markdown-viewer/webviews-app/assets/feedSurface.css @@ -0,0 +1 @@ +:root{color-scheme:light dark;font:12px/1.4 -apple-system,BlinkMacSystemFont,SF Pro Text,sans-serif;--feed-background: transparent;--feed-foreground: CanvasText;--feed-border: color-mix(in srgb, var(--feed-foreground) 14%, transparent);--feed-border-strong: color-mix(in srgb, var(--feed-foreground) 38%, transparent);--feed-fill: color-mix(in srgb, var(--feed-foreground) 5%, transparent);--feed-fill-hover: color-mix(in srgb, var(--feed-foreground) 9%, transparent);--feed-muted: color-mix(in srgb, var(--feed-foreground) 56%, transparent)}*{box-sizing:border-box}html{scrollbar-gutter:stable}html,body,#root{margin:0;min-height:100%;width:100%}body{background:transparent;color:var(--feed-foreground)}button,input{font:inherit}.feed-shell{background:var(--feed-background);color:var(--feed-foreground);min-height:100vh;padding:14px clamp(12px,3vw,28px) 28px}.feed-loading{opacity:.5}.feed-header{align-items:center;border-bottom:1px solid var(--feed-border);display:flex;justify-content:space-between;margin:0 auto 8px;max-width:760px;padding-bottom:10px}.feed-header h1,.feed-card-heading h2,.feed-question-prompt{font-size:inherit;font-weight:600;margin:0}.feed-filter{border:1px solid var(--feed-border);display:flex;gap:1px;padding:2px}.feed-filter button{background:transparent;border:0;color:var(--feed-muted);cursor:pointer;padding:3px 7px}.feed-filter button:hover{background:var(--feed-fill)}.feed-filter button[aria-selected=true]{background:var(--feed-foreground);color:var(--feed-background)}.feed-list{display:grid;gap:6px;margin:0 auto;max-width:760px}.feed-card{background:color-mix(in srgb,var(--feed-background) 96%,var(--feed-foreground) 4%);border:1px solid var(--feed-border);padding:10px}.feed-card:focus-visible{border-color:var(--feed-foreground);outline:1px solid var(--feed-foreground);outline-offset:2px}.feed-card-pending{border-color:var(--feed-border-strong)}.feed-card-heading{align-items:center;display:flex;gap:10px;justify-content:space-between}.feed-card-title{align-items:center;display:flex;gap:8px;min-width:0}.feed-card-heading h2{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.feed-source{align-items:center;color:var(--feed-muted);display:inline-flex;flex:none;gap:5px}.feed-source-logo{display:inline-grid;height:15px;line-height:15px;object-fit:contain;place-items:center;width:15px}.feed-source-logo-mask{background:currentColor;-webkit-mask-image:var(--feed-source-icon);mask-image:var(--feed-source-icon);-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain}.feed-source-logo-mask[data-fallback]{background:transparent;border:1px solid currentColor;-webkit-mask-image:none;mask-image:none}.feed-card-heading time,.feed-cwd{color:var(--feed-muted);flex:none}.feed-cwd{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;margin-top:6px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.feed-body{background:var(--feed-fill);border:1px solid var(--feed-border);font:inherit;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;margin:8px 0 0;max-height:240px;overflow:auto;padding:7px 8px;white-space:pre-wrap;word-break:break-word}.feed-actions{display:flex;flex-wrap:wrap;gap:5px;margin-top:8px}.feed-actions button,.feed-question-actions>button,.feed-options button,.feed-load-examples,.feed-load-more{background:transparent;border:1px solid var(--feed-border-strong);color:var(--feed-foreground);cursor:pointer;padding:4px 7px}.feed-actions button:hover,.feed-question-actions>button:hover,.feed-options button:hover,.feed-load-examples:hover,.feed-load-more:hover{background:var(--feed-fill-hover)}.feed-actions .primary,.feed-question-actions .primary{background:var(--feed-foreground);border-color:var(--feed-foreground);color:var(--feed-background)}.feed-actions .primary:hover,.feed-question-actions .primary:hover{opacity:.82}.feed-actions .danger{border-style:dashed}.feed-question-actions{display:grid;gap:7px;margin-top:8px}.feed-question{display:grid;gap:6px}.feed-question input{background:var(--feed-fill);border:1px solid var(--feed-border-strong);color:var(--feed-foreground);padding:5px 7px;width:100%}.feed-options{display:grid;gap:4px}.feed-options button{display:grid;gap:1px;text-align:left}.feed-options button[aria-pressed=true]{background:var(--feed-foreground);color:var(--feed-background)}.feed-options span{color:var(--feed-muted)}.feed-options button[aria-pressed=true] span{color:color-mix(in srgb,var(--feed-background) 70%,transparent)}.feed-empty{color:var(--feed-muted);display:grid;gap:6px;padding:36px 0}.feed-empty>h2{color:var(--feed-foreground);font-size:14px;margin:0;text-align:center}.feed-empty>p{margin:0 auto;max-width:520px;text-align:center}.feed-load-examples{justify-self:center;margin-top:6px}.feed-integrations{border:1px solid var(--feed-border);margin-top:16px;padding:12px}.feed-integrations h3{color:var(--feed-foreground);font-size:inherit;margin:0 0 8px}.feed-integration-grid{display:grid;gap:1px 16px;grid-template-columns:repeat(2,minmax(0,1fr))}.feed-integration{align-items:center;border-top:1px solid var(--feed-border);display:flex;gap:8px;justify-content:space-between;min-width:0;padding:7px 0}.feed-integration-status{flex:none;font-size:11px}.feed-integration[data-status=ready] .feed-integration-status{color:var(--feed-foreground)}.feed-integration[data-status=disabled] .feed-integration-status,.feed-integration[data-status=needsSetup] .feed-integration-status{color:color-mix(in srgb,#ff9f0a 80%,var(--feed-foreground))}.feed-integration-hint{border-top:1px solid var(--feed-border);margin:1px 0 0;padding-top:9px}.feed-empty>.feed-keyboard-help{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:11px;margin-top:10px}.feed-error{border:1px solid var(--feed-border-strong);margin:0 auto 6px;max-width:760px;padding:6px 8px}.feed-load-more{justify-self:center;margin-top:2px}button:disabled{cursor:default;opacity:.4}button:focus-visible,.feed-question input:focus-visible{outline:1px solid var(--feed-foreground);outline-offset:2px}@media(max-width:540px){.feed-header{align-items:stretch;flex-direction:column;gap:8px}.feed-filter{align-self:flex-start}.feed-card-title{align-items:flex-start;flex-direction:column;gap:3px}.feed-integration-grid{grid-template-columns:1fr}} diff --git a/Resources/markdown-viewer/webviews-app/chunks/agentSessionSurface.mjs b/Resources/markdown-viewer/webviews-app/chunks/agentSessionSurface.mjs index 5ec667e582f0..7f6ae595a272 100644 --- a/Resources/markdown-viewer/webviews-app/chunks/agentSessionSurface.mjs +++ b/Resources/markdown-viewer/webviews-app/chunks/agentSessionSurface.mjs @@ -1,4 +1,4 @@ -import{R as rt,i as b,b as Et,c as Ys,j as Pr,a as Gs}from"./vendor.mjs";import{m as lt,i as Xs,c as Qs}from"./installWebviewStyles.mjs";function ea(n){if(n.activityStatus==="stopped"||n.activityStatus==="failed")return"!";switch(n.activityKind){case"command":return"$";case"fileChange":return"+";default:return"*"}}const ta={isDark:null,pageBackground:"--agent-page-bg",surfaceBackground:"--agent-surface",surfaceElevatedBackground:"--agent-surface-elevated",inputBackground:"--agent-input-bg",border:"--agent-border",borderStrong:"--agent-border-strong",text:"--agent-text",mutedText:"--agent-muted",softText:"--agent-soft",accent:"--agent-accent",accentSoft:"--agent-accent-soft",danger:"--agent-danger",shadow:"--agent-shadow"};function Wn(n){if(typeof document>"u")return;const e=document.documentElement;e.dataset.theme=n.isDark?"dark":"light",jo(),e.classList.toggle("dark",n.isDark),e.classList.toggle("electron-dark",n.isDark),e.classList.toggle("light",!n.isDark),e.style.colorScheme=n.isDark?"dark":"light";for(const[t,r]of Object.entries(ta))r&&e.style.setProperty(r,String(n[t]))}function jo(){if(typeof document>"u")return;const n=document.documentElement;n.dataset.codexWindowType="electron",n.dataset.windowType="electron",n.dataset.codexOs=na(),document.body&&(document.body.dataset.codexWindowType="electron")}function na(){if(typeof navigator>"u")return"unknown";const n=navigator,e=(n.userAgentData?.platform??n.platform??n.userAgent).toLowerCase();return e.includes("win")?"win32":e.includes("mac")||e.includes("darwin")?"darwin":e.includes("linux")?"linux":"unknown"}const Hn=new Set;class Ko extends Error{code;constructor(e,t){super(e),this.name="NativeBridgeError",this.code=t}}typeof window<"u"&&(window.cmuxAgentBridge={applyTheme(n){Wn(n)},receive(n){n.type==="app.theme"&&Wn(n.theme);for(const e of Hn)e(n)}});function ra(n){return Hn.add(n),()=>{Hn.delete(n)}}async function qe(n,e={}){if(typeof window>"u")throw new Error("Native bridge is unavailable.");const t=window.webkit?.messageHandlers?.agentSession;if(!t||typeof t.postMessage!="function")throw new Error("Native bridge is unavailable.");const r=await t.postMessage({id:lt(),method:n,params:e});if(!r.ok)throw new Ko(r.error?.userMessage||"Native bridge request failed.",r.error?.code);return r.value}const ee="border-token-border user-select-none no-drag cursor-interaction flex items-center gap-1 border whitespace-nowrap focus:outline-none disabled:cursor-not-allowed disabled:opacity-40",te="text-token-text-tertiary enabled:hover:bg-token-list-hover-background data-[state=open]:bg-token-list-hover-background border-transparent",Oe="h-token-button-composer px-2 py-0 text-sm leading-[18px]",oa="h-token-button-composer-sm px-1.5 py-0 text-sm leading-[18px]",ln="electron:p-1 electron:[&>svg]:icon-sm flex items-center justify-center p-0.5",Kt="aspect-square items-center justify-center !px-0",ia="focus-visible:outline-token-button-background cursor-interaction size-token-button-composer flex items-center justify-center rounded-full p-0.5 transition-opacity focus-visible:outline-2 bg-token-foreground",sa="agent-composer-stack",aa="codex-composer-frame relative",la="codex-composer-inner relative z-10 flex min-h-0 flex-1 flex-col",ca="codex-composer-surface relative flex flex-col bg-token-input-background/90 backdrop-blur-lg extension:border extension:border-token-border/50 electron:ring electron:ring-black/10 electron:shadow-[0_4px_16px_0_rgba(0,0,0,0.05)] electron:dark:bg-token-dropdown-background",da="composer-footer grid grid-cols-[auto_minmax(0,1fr)_auto] items-center gap-2 px-2 py-1",ua="composer-footer grid grid-cols-[minmax(0,auto)_auto_minmax(0,1fr)] items-center gap-[5px] mb-2 px-2",Zo="M16.6182 9.33203H3.38184V12.7002C3.38184 13.3753 3.38238 13.8438 3.41211 14.208C3.44124 14.5646 3.49494 14.766 3.57129 14.916L3.63867 15.0361C3.80618 15.3094 4.04683 15.5324 4.33399 15.6787L4.45703 15.7314C4.59362 15.7803 4.77411 15.816 5.04199 15.8379C5.40624 15.8676 5.87469 15.8682 6.54981 15.8682H13.4502C14.1253 15.8682 14.5938 15.8676 14.958 15.8379C15.3146 15.8088 15.516 15.7551 15.666 15.6787L15.7861 15.6113C16.0594 15.4438 16.2824 15.2032 16.4287 14.916L16.4814 14.793C16.5303 14.6564 16.566 14.4759 16.5879 14.208C16.6176 13.8438 16.6182 13.3753 16.6182 12.7002V9.33203ZM17.8818 12.7002C17.8818 13.3547 17.8826 13.8838 17.8477 14.3115C17.8165 14.6922 17.7543 15.0349 17.6172 15.3545L17.5537 15.4902C17.3015 15.9852 16.9182 16.3996 16.4473 16.6885L16.2402 16.8037C15.8824 16.9861 15.4966 17.0621 15.0615 17.0977C14.6338 17.1326 14.1047 17.1318 13.4502 17.1318H6.54981C5.89526 17.1318 5.36616 17.1326 4.93848 17.0977C4.55777 17.0665 4.21506 17.0043 3.89551 16.8672L3.75977 16.8037C3.26483 16.5515 2.85036 16.1682 2.56152 15.6973L2.44629 15.4902C2.26394 15.1324 2.1879 14.7466 2.15235 14.3115C2.1174 13.8838 2.11817 13.3547 2.11817 12.7002V7.29981C2.11817 6.64526 2.1174 6.11616 2.15235 5.68848C2.1879 5.25344 2.26394 4.86765 2.44629 4.50977L2.56152 4.30274C2.85036 3.83179 3.26483 3.44854 3.75977 3.19629L3.89551 3.13281C4.21506 2.99571 4.55777 2.93346 4.93848 2.90235C5.36616 2.8674 5.89526 2.86817 6.54981 2.86817H7.24512C7.38876 2.86816 7.48717 2.86807 7.58399 2.87402L7.83496 2.90039C8.41501 2.98537 8.96006 3.23832 9.40039 3.63086L9.64356 3.86817C9.75546 3.98103 9.79343 4.0181 9.83008 4.05078L9.94238 4.14356C10.2142 4.34787 10.5413 4.46917 10.8828 4.49024L11.1445 4.49317H13.4502C14.1047 4.49317 14.6338 4.4924 15.0615 4.52735C15.4966 4.5629 15.8824 4.63894 16.2402 4.82129L16.4473 4.93652C16.9182 5.22536 17.3015 5.63983 17.5537 6.13477L17.6172 6.27051C17.7543 6.59006 17.8165 6.93277 17.8477 7.31348C17.8826 7.74116 17.8818 8.27026 17.8818 8.92481V12.7002ZM3.38184 8.06836H16.6143C16.6105 7.81516 16.603 7.60256 16.5879 7.41699C16.566 7.14911 16.5303 6.96862 16.4814 6.83203L16.4287 6.70899C16.2824 6.42183 16.0594 6.18118 15.7861 6.01367L15.666 5.94629C15.516 5.86994 15.3146 5.81624 14.958 5.78711C14.5938 5.75738 14.1253 5.75684 13.4502 5.75684H11.1445L10.8047 5.75098C10.2158 5.71466 9.65236 5.50645 9.1836 5.1543L8.98926 4.99414C8.91673 4.92948 8.84746 4.85908 8.7461 4.75684L8.55957 4.57422C8.30416 4.34653 7.98784 4.19959 7.65137 4.15039L7.50684 4.13477C7.45779 4.13174 7.4043 4.13184 7.24512 4.13184H6.54981C5.87469 4.13184 5.40624 4.13238 5.04199 4.16211C4.77411 4.184 4.59362 4.21966 4.45703 4.26856L4.33399 4.32129C4.04683 4.4676 3.80618 4.69061 3.63867 4.96387L3.57129 5.08399C3.49494 5.23405 3.44124 5.43543 3.41211 5.79199C3.38238 6.15624 3.38184 6.62469 3.38184 7.29981V8.06836Z",pa=32;function fa(n){return n.hasVisibleAttachments||n.isEditorMultiline||n.isVoiceLayoutActive?!1:n.singleLineInputWidth==null?!0:n.singleLineTextWidth+pa<=n.singleLineInputWidth}function Yo(n){const e={};for(const t of n)e[t.id]={hideControl:!1,hideLabel:!1};return e}function ha(n){const e=n.items.filter(s=>s.enabled),t=Yo(n.items);if(e.length===0||n.availableWidth<=0)return t;const r=e.reduce((s,a)=>s+a.expandedWidth,0)+n.gap*Math.max(0,e.length-1);if(r<=0)return t;let o=r;for(const s of e)!s.canHideLabel||n.availableWidth>=o||(t[s.id].hideLabel=!0,o-=s.expandedWidth-s.compactWidth);if(ga(t,n.previousState,"hideLabel"))return t;let i=e.length;for(const s of e){const a=t[s.id],l=a.hideLabel?s.compactWidth:s.expandedWidth;(a.hideLabel&&!s.hasMeasuredCompactWidth||n.availableWidth1?n.gap:0),i-=1)}return t}function ma(n,e){const t=Object.keys(n),r=Object.keys(e);if(t.length!==r.length)return!1;for(const o of t)if(n[o]?.hideControl!==e[o]?.hideControl||n[o]?.hideLabel!==e[o]?.hideLabel)return!1;return!0}function ga(n,e,t){const r=Object.keys(n);return r.length!==Object.keys(e).length?!0:r.some(o=>n[o]?.[t]!==e[o]?.[t])}const xa=new Set(["base","embed","form","iframe","link","meta","object","script","style"]),ba=new Set(["poster","src","srcset","xlink:href"]);function ya(n){const e=typeof window>"u"?void 0:window.marked;if(e?.parse)try{const t=e.parse(ka(n),{async:!1,breaks:!0,gfm:!0});if(typeof t=="string")return Ma(t)}catch{return Be(n)}return Be(n)}function ka(n){let e="",t=null;const r=n.match(/[^\r\n]*(?:\r\n|\n|\r|$)/g)??[];for(const o of r){if(o==="")continue;const i=o.match(/(\r\n|\n|\r)$/)?.[0]??"",s=i?o.slice(0,-i.length):o;if(t){e+=s+i,Ca(s,t)&&(t=null);continue}const a=va(s);if(a){t=a,e+=s+i;continue}e+=Sa(s)+i}return e}function Be(n){return wa(n).replace(/\n/g,"
")}function wa(n){return n.replace(/&/g,"&").replace(//g,">").replace(/"/g,""").replace(/'/g,"'")}function va(n){const e=/^( {0,3})(`{3,}|~{3,})/.exec(n);if(!e)return null;const t=e[2];return{character:t[0],length:t.length}}function Ca(n,e){const t=/^( {0,3})(`{3,}|~{3,})\s*$/.exec(n);if(!t)return!1;const r=t[2];return r[0]===e.character&&r.length>=e.length}function Sa(n){let e="",t=0,r=0;for(;r"u")return n;const e=document.createElement("template");e.innerHTML=n;for(const t of Array.from(e.content.querySelectorAll("*"))){if(xa.has(t.localName)){t.remove();continue}for(const r of Array.from(t.attributes)){const o=r.name.toLowerCase();if(o.startsWith("on")||o==="srcdoc"||o==="style"){t.removeAttribute(r.name);continue}const i=Na(t.localName,o,r.value);i===null?t.removeAttribute(r.name):typeof i=="string"&&i!==r.value&&t.setAttribute(r.name,i)}t.localName==="a"&&t.setAttribute("rel","noreferrer")}return e.innerHTML}function Na(n,e,t){const r=e.toLowerCase();if(ba.has(r))return null;if(r==="href")return n.toLowerCase()!=="a"?null:Oa(t)?t:null}function Oa(n){const e=n.trim();if(e.startsWith("#"))return!0;if(e.startsWith("/")||!/^[a-zA-Z][a-zA-Z0-9+.-]*:/.test(e))return!1;try{const t=new URL(e);return t.protocol==="http:"||t.protocol==="https:"||t.protocol==="mailto:"}catch{return!1}}function Go(n){return n.replace(/([\\[\]])/g,"\\$1")}function Xo(n){return encodeURI(n).replace(/([\\()])/g,"\\$1")}function Ta(n,e){const t=e.map(r=>`[${Go(r.label)}](${Xo(r.path)})`).join(" ");return t?n.trim().length>0?`${t} +import{R as rt,i as b,b as Et,c as Ys,j as Pr,a as Gs}from"./vendor.mjs";import{m as lt,i as Xs}from"./installWebviewStyles.mjs";import{c as Qs}from"./router.mjs";function ea(n){if(n.activityStatus==="stopped"||n.activityStatus==="failed")return"!";switch(n.activityKind){case"command":return"$";case"fileChange":return"+";default:return"*"}}const ta={isDark:null,pageBackground:"--agent-page-bg",surfaceBackground:"--agent-surface",surfaceElevatedBackground:"--agent-surface-elevated",inputBackground:"--agent-input-bg",border:"--agent-border",borderStrong:"--agent-border-strong",text:"--agent-text",mutedText:"--agent-muted",softText:"--agent-soft",accent:"--agent-accent",accentSoft:"--agent-accent-soft",danger:"--agent-danger",shadow:"--agent-shadow"};function Wn(n){if(typeof document>"u")return;const e=document.documentElement;e.dataset.theme=n.isDark?"dark":"light",jo(),e.classList.toggle("dark",n.isDark),e.classList.toggle("electron-dark",n.isDark),e.classList.toggle("light",!n.isDark),e.style.colorScheme=n.isDark?"dark":"light";for(const[t,r]of Object.entries(ta))r&&e.style.setProperty(r,String(n[t]))}function jo(){if(typeof document>"u")return;const n=document.documentElement;n.dataset.codexWindowType="electron",n.dataset.windowType="electron",n.dataset.codexOs=na(),document.body&&(document.body.dataset.codexWindowType="electron")}function na(){if(typeof navigator>"u")return"unknown";const n=navigator,e=(n.userAgentData?.platform??n.platform??n.userAgent).toLowerCase();return e.includes("win")?"win32":e.includes("mac")||e.includes("darwin")?"darwin":e.includes("linux")?"linux":"unknown"}const Hn=new Set;class Ko extends Error{code;constructor(e,t){super(e),this.name="NativeBridgeError",this.code=t}}typeof window<"u"&&(window.cmuxAgentBridge={applyTheme(n){Wn(n)},receive(n){n.type==="app.theme"&&Wn(n.theme);for(const e of Hn)e(n)}});function ra(n){return Hn.add(n),()=>{Hn.delete(n)}}async function qe(n,e={}){if(typeof window>"u")throw new Error("Native bridge is unavailable.");const t=window.webkit?.messageHandlers?.agentSession;if(!t||typeof t.postMessage!="function")throw new Error("Native bridge is unavailable.");const r=await t.postMessage({id:lt(),method:n,params:e});if(!r.ok)throw new Ko(r.error?.userMessage||"Native bridge request failed.",r.error?.code);return r.value}const ee="border-token-border user-select-none no-drag cursor-interaction flex items-center gap-1 border whitespace-nowrap focus:outline-none disabled:cursor-not-allowed disabled:opacity-40",te="text-token-text-tertiary enabled:hover:bg-token-list-hover-background data-[state=open]:bg-token-list-hover-background border-transparent",Oe="h-token-button-composer px-2 py-0 text-sm leading-[18px]",oa="h-token-button-composer-sm px-1.5 py-0 text-sm leading-[18px]",ln="electron:p-1 electron:[&>svg]:icon-sm flex items-center justify-center p-0.5",Kt="aspect-square items-center justify-center !px-0",ia="focus-visible:outline-token-button-background cursor-interaction size-token-button-composer flex items-center justify-center rounded-full p-0.5 transition-opacity focus-visible:outline-2 bg-token-foreground",sa="agent-composer-stack",aa="codex-composer-frame relative",la="codex-composer-inner relative z-10 flex min-h-0 flex-1 flex-col",ca="codex-composer-surface relative flex flex-col bg-token-input-background/90 backdrop-blur-lg extension:border extension:border-token-border/50 electron:ring electron:ring-black/10 electron:shadow-[0_4px_16px_0_rgba(0,0,0,0.05)] electron:dark:bg-token-dropdown-background",da="composer-footer grid grid-cols-[auto_minmax(0,1fr)_auto] items-center gap-2 px-2 py-1",ua="composer-footer grid grid-cols-[minmax(0,auto)_auto_minmax(0,1fr)] items-center gap-[5px] mb-2 px-2",Zo="M16.6182 9.33203H3.38184V12.7002C3.38184 13.3753 3.38238 13.8438 3.41211 14.208C3.44124 14.5646 3.49494 14.766 3.57129 14.916L3.63867 15.0361C3.80618 15.3094 4.04683 15.5324 4.33399 15.6787L4.45703 15.7314C4.59362 15.7803 4.77411 15.816 5.04199 15.8379C5.40624 15.8676 5.87469 15.8682 6.54981 15.8682H13.4502C14.1253 15.8682 14.5938 15.8676 14.958 15.8379C15.3146 15.8088 15.516 15.7551 15.666 15.6787L15.7861 15.6113C16.0594 15.4438 16.2824 15.2032 16.4287 14.916L16.4814 14.793C16.5303 14.6564 16.566 14.4759 16.5879 14.208C16.6176 13.8438 16.6182 13.3753 16.6182 12.7002V9.33203ZM17.8818 12.7002C17.8818 13.3547 17.8826 13.8838 17.8477 14.3115C17.8165 14.6922 17.7543 15.0349 17.6172 15.3545L17.5537 15.4902C17.3015 15.9852 16.9182 16.3996 16.4473 16.6885L16.2402 16.8037C15.8824 16.9861 15.4966 17.0621 15.0615 17.0977C14.6338 17.1326 14.1047 17.1318 13.4502 17.1318H6.54981C5.89526 17.1318 5.36616 17.1326 4.93848 17.0977C4.55777 17.0665 4.21506 17.0043 3.89551 16.8672L3.75977 16.8037C3.26483 16.5515 2.85036 16.1682 2.56152 15.6973L2.44629 15.4902C2.26394 15.1324 2.1879 14.7466 2.15235 14.3115C2.1174 13.8838 2.11817 13.3547 2.11817 12.7002V7.29981C2.11817 6.64526 2.1174 6.11616 2.15235 5.68848C2.1879 5.25344 2.26394 4.86765 2.44629 4.50977L2.56152 4.30274C2.85036 3.83179 3.26483 3.44854 3.75977 3.19629L3.89551 3.13281C4.21506 2.99571 4.55777 2.93346 4.93848 2.90235C5.36616 2.8674 5.89526 2.86817 6.54981 2.86817H7.24512C7.38876 2.86816 7.48717 2.86807 7.58399 2.87402L7.83496 2.90039C8.41501 2.98537 8.96006 3.23832 9.40039 3.63086L9.64356 3.86817C9.75546 3.98103 9.79343 4.0181 9.83008 4.05078L9.94238 4.14356C10.2142 4.34787 10.5413 4.46917 10.8828 4.49024L11.1445 4.49317H13.4502C14.1047 4.49317 14.6338 4.4924 15.0615 4.52735C15.4966 4.5629 15.8824 4.63894 16.2402 4.82129L16.4473 4.93652C16.9182 5.22536 17.3015 5.63983 17.5537 6.13477L17.6172 6.27051C17.7543 6.59006 17.8165 6.93277 17.8477 7.31348C17.8826 7.74116 17.8818 8.27026 17.8818 8.92481V12.7002ZM3.38184 8.06836H16.6143C16.6105 7.81516 16.603 7.60256 16.5879 7.41699C16.566 7.14911 16.5303 6.96862 16.4814 6.83203L16.4287 6.70899C16.2824 6.42183 16.0594 6.18118 15.7861 6.01367L15.666 5.94629C15.516 5.86994 15.3146 5.81624 14.958 5.78711C14.5938 5.75738 14.1253 5.75684 13.4502 5.75684H11.1445L10.8047 5.75098C10.2158 5.71466 9.65236 5.50645 9.1836 5.1543L8.98926 4.99414C8.91673 4.92948 8.84746 4.85908 8.7461 4.75684L8.55957 4.57422C8.30416 4.34653 7.98784 4.19959 7.65137 4.15039L7.50684 4.13477C7.45779 4.13174 7.4043 4.13184 7.24512 4.13184H6.54981C5.87469 4.13184 5.40624 4.13238 5.04199 4.16211C4.77411 4.184 4.59362 4.21966 4.45703 4.26856L4.33399 4.32129C4.04683 4.4676 3.80618 4.69061 3.63867 4.96387L3.57129 5.08399C3.49494 5.23405 3.44124 5.43543 3.41211 5.79199C3.38238 6.15624 3.38184 6.62469 3.38184 7.29981V8.06836Z",pa=32;function fa(n){return n.hasVisibleAttachments||n.isEditorMultiline||n.isVoiceLayoutActive?!1:n.singleLineInputWidth==null?!0:n.singleLineTextWidth+pa<=n.singleLineInputWidth}function Yo(n){const e={};for(const t of n)e[t.id]={hideControl:!1,hideLabel:!1};return e}function ha(n){const e=n.items.filter(s=>s.enabled),t=Yo(n.items);if(e.length===0||n.availableWidth<=0)return t;const r=e.reduce((s,a)=>s+a.expandedWidth,0)+n.gap*Math.max(0,e.length-1);if(r<=0)return t;let o=r;for(const s of e)!s.canHideLabel||n.availableWidth>=o||(t[s.id].hideLabel=!0,o-=s.expandedWidth-s.compactWidth);if(ga(t,n.previousState,"hideLabel"))return t;let i=e.length;for(const s of e){const a=t[s.id],l=a.hideLabel?s.compactWidth:s.expandedWidth;(a.hideLabel&&!s.hasMeasuredCompactWidth||n.availableWidth1?n.gap:0),i-=1)}return t}function ma(n,e){const t=Object.keys(n),r=Object.keys(e);if(t.length!==r.length)return!1;for(const o of t)if(n[o]?.hideControl!==e[o]?.hideControl||n[o]?.hideLabel!==e[o]?.hideLabel)return!1;return!0}function ga(n,e,t){const r=Object.keys(n);return r.length!==Object.keys(e).length?!0:r.some(o=>n[o]?.[t]!==e[o]?.[t])}const xa=new Set(["base","embed","form","iframe","link","meta","object","script","style"]),ba=new Set(["poster","src","srcset","xlink:href"]);function ya(n){const e=typeof window>"u"?void 0:window.marked;if(e?.parse)try{const t=e.parse(ka(n),{async:!1,breaks:!0,gfm:!0});if(typeof t=="string")return Ma(t)}catch{return Be(n)}return Be(n)}function ka(n){let e="",t=null;const r=n.match(/[^\r\n]*(?:\r\n|\n|\r|$)/g)??[];for(const o of r){if(o==="")continue;const i=o.match(/(\r\n|\n|\r)$/)?.[0]??"",s=i?o.slice(0,-i.length):o;if(t){e+=s+i,Ca(s,t)&&(t=null);continue}const a=va(s);if(a){t=a,e+=s+i;continue}e+=Sa(s)+i}return e}function Be(n){return wa(n).replace(/\n/g,"
")}function wa(n){return n.replace(/&/g,"&").replace(//g,">").replace(/"/g,""").replace(/'/g,"'")}function va(n){const e=/^( {0,3})(`{3,}|~{3,})/.exec(n);if(!e)return null;const t=e[2];return{character:t[0],length:t.length}}function Ca(n,e){const t=/^( {0,3})(`{3,}|~{3,})\s*$/.exec(n);if(!t)return!1;const r=t[2];return r[0]===e.character&&r.length>=e.length}function Sa(n){let e="",t=0,r=0;for(;r"u")return n;const e=document.createElement("template");e.innerHTML=n;for(const t of Array.from(e.content.querySelectorAll("*"))){if(xa.has(t.localName)){t.remove();continue}for(const r of Array.from(t.attributes)){const o=r.name.toLowerCase();if(o.startsWith("on")||o==="srcdoc"||o==="style"){t.removeAttribute(r.name);continue}const i=Na(t.localName,o,r.value);i===null?t.removeAttribute(r.name):typeof i=="string"&&i!==r.value&&t.setAttribute(r.name,i)}t.localName==="a"&&t.setAttribute("rel","noreferrer")}return e.innerHTML}function Na(n,e,t){const r=e.toLowerCase();if(ba.has(r))return null;if(r==="href")return n.toLowerCase()!=="a"?null:Oa(t)?t:null}function Oa(n){const e=n.trim();if(e.startsWith("#"))return!0;if(e.startsWith("/")||!/^[a-zA-Z][a-zA-Z0-9+.-]*:/.test(e))return!1;try{const t=new URL(e);return t.protocol==="http:"||t.protocol==="https:"||t.protocol==="mailto:"}catch{return!1}}function Go(n){return n.replace(/([\\[\]])/g,"\\$1")}function Xo(n){return encodeURI(n).replace(/([\\()])/g,"\\$1")}function Ta(n,e){const t=e.map(r=>`[${Go(r.label)}](${Xo(r.path)})`).join(" ");return t?n.trim().length>0?`${t} ${n}`:t:n}function $t(n){switch(n.kind){case"at":return Sn(n.label??n.name,n.path);case"agent":return Sn(`@${n.displayName||n.name}`,n.path);case"skill":return Sn(`$${n.name}`,n.path)}}function Da(n,e,t){if(!t||e==null)return n;const r=$t(e);return n.includes(r)||n.includes(e.path)?n:n.trim().length>0?`${r} @@ -39,4 +39,4 @@ ${Fr}`:Fr}function Aa(n){return n.includes("skill://plan")||/(?:^|\s)\$plan(?:\s `),i=/(^|\s)([@$][^\s@$]*)$/.exec(o);if(!i)return null;const s=i[2]??"",a=s.charAt(0),l=s.slice(1);return{anchorPos:t-s.length,kind:a==="$"?"skill":"mention",query:l}}function cu(n){return n==="ArrowDown"||n==="ArrowUp"||n==="Enter"||n==="Tab"||n==="Escape"}function Vn({dataAttributes:n,icon:e,iconNode:t,text:r,title:o}){const i=document.createElement("span");i.className="prompt-editor-mention group/inline-mention cursor-pointer inline-mention-brand-aware font-medium px-0.5 cursor-interaction",o&&(i.title=o);for(const[a,l]of Object.entries(n))i.setAttribute(a,l);if(e||t){const a=document.createElement("span");if(a.className="prompt-editor-mention-icon relative mr-[3px] inline-block h-[1lh] w-4 align-bottom",t)a.append(t);else if(e){const l=document.createElement("span");l.className="icon-xs absolute top-1/2 -translate-y-1/2",l.textContent=e,a.append(l)}i.append(a)}const s=document.createElement("span");return s.className="min-w-0 break-words",s.textContent=r,i.append(s),i}function du(){const n=document.createElementNS("http://www.w3.org/2000/svg","svg");n.setAttribute("class","icon-xs absolute top-1/2 -translate-y-1/2"),n.setAttribute("width","20"),n.setAttribute("height","20"),n.setAttribute("viewBox","0 0 20 20"),n.setAttribute("fill","none"),n.setAttribute("aria-hidden","true");const e=document.createElementNS("http://www.w3.org/2000/svg","path");return e.setAttribute("d",Zo),e.setAttribute("fill","currentColor"),n.append(e),n}const f=rt.createElement,uu=20,pu={background:"linear-gradient(to bottom, var(--color-token-editor-background), transparent)"},fu={background:"linear-gradient(to top, var(--color-token-editor-background), transparent)"};function hu(n,e){"use no memo";const[t,r]=b.useState(null),[o,i]=b.useState(0),[s,a]=b.useState(null),l=b.useRef(null),c=b.useCallback(d=>{a(d)},[]);return b.useLayoutEffect(()=>{const d=s;if(!d)return;const u=()=>r(d.getBoundingClientRect().width);if(u(),typeof ResizeObserver>"u")return;const p=new ResizeObserver(u);return p.observe(d),()=>p.disconnect()},[s]),b.useLayoutEffect(()=>{const d=l.current;d&&i(d.getBoundingClientRect().width)},[n]),{inputMeasureRef:c,isSingleLine:fa({hasVisibleAttachments:e,isEditorMultiline:n.includes(` `),isVoiceLayoutActive:!1,singleLineInputWidth:t,singleLineTextWidth:o}),textMeasureRef:l}}function mu(n){"use no memo";const[e,t]=b.useState(()=>Yo(n)),r=b.useRef(null),o=b.useRef(new Map),i=b.useRef(new Map),s=b.useRef(new Map),a=b.useRef(n),l=b.useRef(e);a.current=n,l.current=e;const c=b.useCallback(()=>{const p=r.current;if(!p)return;const h=a.current.map(g=>{const k=(o.current.get(g.id)??null)?.offsetWidth??0;k>0&&(l.current[g.id]?.hideLabel===!0?s.current.set(g.id,k):i.current.set(g.id,k));const T=i.current.get(g.id)??s.current.get(g.id)??k,N=s.current.get(g.id),F=g.canHideLabel?Math.min(T,N??T):T;return{...g,compactWidth:F,expandedWidth:T,hasMeasuredCompactWidth:N!=null}}),m=ha({availableWidth:p.getBoundingClientRect().width,gap:$o(window.getComputedStyle(p).columnGap)??$o(window.getComputedStyle(p).gap)??0,items:h,previousState:l.current});ma(m,l.current)||t(m)},[]),d=b.useCallback(p=>{r.current=p,p&&c()},[c]),u=b.useCallback((p,h)=>{h?(o.current.set(p,h),c()):o.current.delete(p)},[c]);return b.useLayoutEffect(()=>{c()},[c,n,e]),b.useLayoutEffect(()=>{if(typeof ResizeObserver>"u")return;const p=new ResizeObserver(c);r.current&&p.observe(r.current);for(const h of o.current.values())p.observe(h);return()=>p.disconnect()},[c,n,e]),{state:e,setContainerRef:d,setItemRef:u}}function $o(n){const e=Number.parseFloat(n);return Number.isFinite(e)?e:null}function gu(n){const e=Et.c(3);let t,r;e[0]!==n?(t=()=>{_a(n)},r=[n],e[0]=n,e[1]=t,e[2]=r):(t=e[1],r=e[2]),b.useEffect(t,r)}function xu(n){const e=Et.c(3);let t,r;e[0]!==n?(t=()=>ra(o=>n({type:"event",event:o})),r=[n],e[0]=n,e[1]=t,e[2]=r):(t=e[1],r=e[2]),b.useEffect(t,r)}function bu(n,e){const t=Et.c(4);let r,o;t[0]!==e||t[1]!==n?(r=()=>{Ha(n,e)},o=[n,e],t[0]=e,t[1]=n,t[2]=r,t[3]=o):(r=t[2],o=t[3]),b.useEffect(r,o)}function yu(){const n=Et.c(3);let e;n[0]===Symbol.for("react.memo_cache_sentinel")?(e=Ba(),n[0]=e):e=n[0];const[t,r]=b.useReducer(Va,e);gu(r),xu(r),bu(t,r);let o;return n[1]!==t?(o=f(ku,{state:t,dispatch:r,renderer:"React"}),n[1]=t,n[2]=o):o=n[2],o}function ku({state:n,dispatch:e,renderer:t}){"use no memo";const r=n.providers.find(v=>v.id===n.selectedProviderId),o=ar(n),i=sr(n),s=Ka(n),[a,l]=b.useState([]),c=n.status==="running"&&(n.input.length>0||a.length>0),d=r?n.autoStartAttemptedProviderIds.includes(r.id):!1,u=i&&(r?.autoStart!==!0||d),p=r?.id==="codex",h=Ra(r),m=r?.id==="codex"?n.context?.copy.reasoningEffortHigh??"High":null,[g,x]=b.useState("default"),[k,T]=b.useState(null),N=Zu(n),F=k??N!=null,X=N!=null&&F,$=hu(n.input,a.length>0),S=$.isSingleLine,A=mu([{canHideLabel:m!=null,enabled:r!=null,id:"intelligence"},{canHideLabel:!0,enabled:X,id:"ide-context"}]),C=S?{hideControl:!1,hideLabel:!1}:A.state.intelligence??{hideControl:!1,hideLabel:!1},O=S?{hideControl:!1,hideLabel:!1}:A.state["ide-context"]??{hideControl:!1,hideLabel:!1},L=b.useRef(null),[I,B]=b.useState(null),[dt,pe]=b.useState(""),[As,xe]=b.useState(0),[yn,ce]=b.useState(!1),[Rs,fe]=b.useState(!1),[Mr,Nr]=b.useState(!1),[ut,Pt]=b.useState(!1),[Is,Or]=b.useState(!1),[Ls,be]=b.useState(!1),Ce=I?Cr(I,n,dt):[],kn=Ce.length===0?-1:Math.min(As,Ce.length-1),wn=()=>{const v=L.current?.getText()??n.input;if(!(n.status==="running"&&(v.length>0||a.length>0)))return;v!==n.input&&e({type:"setInput",input:v}),B(null),pe(""),ce(!1),fe(!1),be(!1);const pt=Da(Ea(v,ut),N?.mention??null,F),V=Ta(pt,a),vn=new Set(a.map(Cn=>Cn.id));Ja(n,e,{attachments:a,clearInput:v,displayText:v,permissionMode:p?g:"default",text:V}).then(Cn=>{Cn&&l(Ks=>Ks.filter(Zs=>!vn.has(Zs.id)))})},Tr=v=>{L.current?.insertMention(v.mention),B(null),pe(""),xe(0),fe(!1)},Dr=()=>{Pt(v=>!v),fe(!1),be(!1),ce(!1),B(null),L.current?.focus()},Ps=()=>{T(v=>!(v??N!=null)),fe(!1),be(!1),ce(!1),B(null),L.current?.focus()},zs=()=>{T(!1),fe(!1),be(!1),ce(!1),B(null),L.current?.focus()},Fs=()=>{Pt(!0),Or(!0),fe(!1),be(!1),ce(!1),B(null),L.current?.focus()},Bs=async()=>{if(Mr)return;const v=n.runningSessionId;Nr(!0),B(null),pe(""),xe(0),fe(!1),be(!1);try{const pt=((await qe("app.pickFiles")).files??[]).filter(V=>V.path.trim().length>0).map(V=>{const vn=V.label&&V.label.trim().length>0?V.label:jt(V.path);return{dataUrl:V.dataUrl,fsPath:V.fsPath??V.path,id:`${V.path}-${Date.now()}-${Math.random().toString(36).slice(2)}`,kind:V.isImage||V.dataUrl?.startsWith("data:image/")?"image":"file",label:vn,mimeType:V.mimeType,path:V.path}});l(V=>ap([...V,...pt])),L.current?.focus()}catch(W){v||e({type:"failed",message:At(W,n)})}finally{Nr(!1)}},Vs=v=>{if(!v){B(null),pe(""),xe(0);return}B(v.kind),pe(v.query),xe(0)},_s=v=>{if(!I)return!1;if(v==="Escape")return B(null),pe(""),xe(0),!0;if(Ce.length===0)return v==="Enter"||v==="Tab";if(v==="ArrowDown")return xe(W=>(W+1)%Ce.length),!0;if(v==="ArrowUp")return xe(W=>(W-1+Ce.length)%Ce.length),!0;if(v==="Enter"||v==="Tab"){const W=Ce[kn>=0?kn:0];return W&&Tr(W),!0}return!1},$s=v=>{qa(v,n,e),ce(!1)},Ws=C.hideControl?null:f("div",{className:"model-picker-root relative min-w-0",ref:v=>A.setItemRef("intelligence",v),onBlur:v=>{v.currentTarget.contains(v.relatedTarget)||ce(!1)}},f("button",{className:`model-picker ${ee} ${te} ${Oe} min-w-0 rounded-full`,type:"button",disabled:!o,"aria-haspopup":"menu","aria-expanded":yn,"data-state":yn?"open":"closed","data-codex-intelligence-trigger":!0,"data-selected-reasoning-effort":"high",onClick:()=>{o&&(fe(!1),be(!1),ce(v=>!v))},onKeyDown:v=>{v.key==="ArrowDown"&&(v.preventDefault(),ce(o))}},C.hideLabel?up("icon-2xs"):f("span",{className:"model-picker-content flex max-w-40 min-w-0 items-center gap-1.5"},f("span",{className:"model-display flex min-w-0 items-center gap-1 tabular-nums"},f("span",{className:"model-label truncate whitespace-nowrap text-token-foreground"},h)),m?f("span",{className:"composer-footer__label--sm shrink-0 text-token-description-foreground"},m):null),f("span",{className:"model-chevron composer-footer__secondary-chevron icon-2xs text-token-input-placeholder-foreground","aria-hidden":!0},gn())),yn?f("div",{className:"provider-dropdown _content_1hiti_1 no-drag bg-token-dropdown-background/90 text-token-foreground ring-token-border z-50 m-px flex select-none flex-col overflow-y-auto rounded-xl ring-[0.5px] px-1 py-1 shadow-xl-spread backdrop-blur-sm w-52",role:"menu","aria-label":n.context?.copy.provider??"","data-state":"open","data-side":"top",style:{"--radix-dropdown-menu-content-transform-origin":"left bottom"}},f("div",{className:"provider-dropdown-title"},n.context?.copy.provider??"Provider"),n.providers.map(v=>f("button",{key:v.id,className:"provider-dropdown-item no-drag group hover:bg-token-list-hover-background focus:bg-token-list-hover-background cursor-interaction text-token-foreground outline-hidden rounded-lg px-[var(--padding-row-x)] py-[var(--padding-row-y)] text-sm",type:"button",role:"menuitem","data-selected":v.id===n.selectedProviderId?"true":void 0,onMouseDown:W=>W.preventDefault(),onClick:()=>$s(v.id)},f("span",{className:"provider-dropdown-item-content flex w-full items-center gap-1.5"},f("span",{className:"min-w-0 flex-1 truncate"},v.displayName),v.id===n.selectedProviderId?f("span",{className:"provider-dropdown-check icon-xs shrink-0","aria-hidden":!0},Ze()):null)))):null),Hs=f(eu,{ref:L,className:S?"text-base":"text-base [&_.ProseMirror]:leading-5",minHeight:S?"1.25rem":"2.75rem",singleLine:S,value:n.input,ariaLabel:n.context?.copy.promptPlaceholder??"",placeholder:n.context?.copy.promptPlaceholder??"",onAutocompleteChange:Vs,onAutocompleteKeyDown:_s,onPlanModeShortcut:Dr,onTextChange:v=>e({type:"setInput",input:v}),onSubmit:wn,onTriggerToken:v=>{B(v==="@"?"mention":"skill"),pe(""),xe(0)}}),Er=(v=!1)=>p?f(qu,{copy:n.context?.copy,hideLabel:v,isEnabled:!0,isOpen:Ls,mode:g,onModeChange:x,onOpenChange:W=>{be(W),W&&(fe(!1),ce(!1),B(null))}}):null,Ar=f("div",{className:"codex-left-rail flex min-w-0 items-center gap-[5px]"},f(Uu,{hasIdeContext:N!=null,isAutoContextOn:F,isOpen:Rs,isPickingFiles:Mr,onOpenChange:v=>{fe(v),v&&(be(!1),ce(!1),B(null))},onPickFiles:()=>{Bs()},onToggleAutoContext:Ps,onTogglePlanMode:Dr,isPlanMode:ut,state:n}),S?null:Er(!1),!S&&ut?f(Wo,{icon:an("icon-xs"),label:n.context?.copy.skillPlan??"Plan",onClear:()=>Pt(!1)}):null),Rr=f("div",{className:"codex-secondary-controls flex min-w-0 items-center gap-1",ref:A.setContainerRef},Ws,X&&!O.hideControl?f("span",{className:"composer-context-indicator flex min-w-0 items-center gap-1",ref:v=>A.setItemRef("ide-context",v)},f("div",{className:"composer-context-divider h-4 w-px bg-token-border/70","aria-hidden":!0}),f(Hu,{hideLabel:O.hideLabel,label:n.context?.copy.ideContext??"IDE context",onClear:zs})):null),Ir=f("div",{className:"codex-action-cluster flex shrink-0 items-center gap-2"},u?f("button",{className:`codex-action codex-start ${ee} ${te} ${Oe} rounded-full`,type:"button",disabled:!i,onClick:()=>{$a(n,e)}},n.context?.copy.start??"Start"):null,s?f("button",{className:`codex-action codex-stop ${ee} ${te} ${Oe} ${Kt} rounded-full`,type:"button","aria-label":n.context?.copy.stop??"Stop",onClick:()=>{Ua(n,e)}},cp()):null,f("button",{className:`codex-action codex-mic ${ee} ${te} ${Oe} ${Kt} rounded-full`,type:"button",disabled:!0,"aria-label":n.context?.copy.voiceInput??""},dp()),f("button",{className:`codex-action send-button ${ia}${c?"":" cursor-default opacity-50"}`,type:"button",disabled:!c,"aria-label":n.context?.copy.send??"Send",onClick:wn},lp("icon-sm text-token-dropdown-background"))),qs=f("div",{className:"flex min-w-0 shrink-0 items-center justify-end gap-2"},Rr,Er(!0),S&&ut?f(Wo,{icon:an("icon-xs"),label:n.context?.copy.skillPlan??"Plan",onClear:()=>Pt(!1)}):null,Ir),Lr=f("div",{key:"composer-input",ref:$.inputMeasureRef,className:S?"min-w-0":"mb-1 flex-grow overflow-y-auto px-3"},Hs),Js=S?f("div",{className:da},Ar,Lr,qs):f("div",{className:"contents"},a.length>0?f("div",{className:"px-2 py-1.5"},f(zu,{attachments:a,copy:n.context?.copy,onRemove:v=>{l(W=>W.filter(pt=>pt.id!==v))}})):null,Lr,f("div",{className:ua},Ar,f("div",{className:"flex items-center"}),f("div",{className:"flex w-full min-w-0 items-center justify-end gap-2"},f("div",{className:"flex min-w-0 flex-1 justify-end"},Rr),f("div",{className:"flex shrink-0 items-center gap-2"},Ir)))),Us=f("div",{className:la},Js),js=!ut&&!Is&&/\bplan\b/i.test(n.input);return f("section",{className:"agent-shell","data-codex-window-type":"electron"},f(vu,{entries:n.transcript,copy:n.context?.copy}),f("div",{className:sa},f("div",{className:"relative flex w-full flex-col gap-2"},f("form",{className:"w-full min-w-0",onSubmit:v=>{v.preventDefault(),wn()}},f("div",{className:aa},f("span",{ref:$.textMeasureRef,className:"composer-single-line-measure text-size-chat pointer-events-none invisible absolute h-0 w-max max-w-none overflow-hidden whitespace-pre","aria-hidden":!0},n.input),js?f(wu,{copy:n.context?.copy,onAction:Fs,onDismiss:()=>Or(!0)}):null,I?f(Wu,{emptyLabel:n.context?.copy?.composerNoResults??"No results",highlightedIndex:kn,items:Ce,onChoose:Tr,onHighlight:xe,query:dt}):null,f("div",{className:ca+" "+(S?"overflow-visible rounded-full":"overflow-y-auto rounded-3xl")},Us)))),f(Bu,{state:n,providerDisplayName:r?.displayName??t})))}function wu({copy:n,onAction:e,onDismiss:t}){return f("div",{className:"above-composer-suggestion-shell pointer-events-none absolute inset-x-0 bottom-full z-20 mb-2 flex justify-center"},f("div",{className:"pointer-events-auto flex w-full max-w-full justify-center"},f("div",{className:"relative inline-flex max-w-full min-w-0 items-center justify-between gap-4 overflow-hidden rounded-3xl border border-token-border/80 bg-token-dropdown-background/90 py-1.5 pr-2 pl-3 text-token-foreground shadow-md backdrop-blur-sm","data-codex-above-composer-suggestion":"keyword-plan-mode"},f("div",{className:"flex min-w-0 flex-1 items-center gap-2"},f("span",{className:"flex items-center justify-center text-token-foreground","aria-hidden":!0},an("icon-xs shrink-0")),f("div",{className:"min-w-0 flex-1 flex items-center gap-2"},f("span",{className:"truncate text-sm font-medium leading-[18px] text-token-foreground"},n?.planSuggestionTitle??"Create a plan"),f("span",{className:"hidden leading-none text-sm text-token-description-foreground @[500px]:inline","aria-hidden":!0},f("span",{className:"pointer-events-none !h-auto rounded-md border border-token-border/80 px-1 py-0.5 text-xs !leading-none text-token-description-foreground"},n?.planSuggestionShortcut??"Shift + Tab")))),f("div",{className:"flex shrink-0 items-center gap-1"},f("button",{className:"user-select-none no-drag cursor-interaction flex h-8 items-center justify-center rounded-full border border-transparent bg-token-button-secondary-background px-2.5 text-sm text-token-button-secondary-foreground hover:bg-token-button-secondary-hover-background focus:outline-none",type:"button",onClick:r=>{r.stopPropagation(),e()}},n?.planSuggestionAction??"Use plan mode"),f("button",{className:"user-select-none no-drag flex size-[22px] shrink-0 cursor-interaction items-center justify-center rounded-full border border-transparent text-token-description-foreground hover:bg-token-list-hover-background focus:outline-none",type:"button","aria-label":n?.planSuggestionDismiss??"Dismiss suggestion",onClick:r=>{r.stopPropagation(),t()}},bn("icon-xs"))))))}const vu=rt.memo(function({entries:e,copy:t}){return f("div",{className:"agent-thread","data-empty":e.length===0?"true":void 0},e.map(r=>f(Cu,{copy:t,entry:r,key:r.id})))}),Cu=rt.memo(function({copy:e,entry:t}){switch(t.role){case"user":{const r=t.attachments??[],o=t.text.trim().length>0;return f("div",{className:"codex-user-turn group flex w-full flex-col items-end justify-end gap-1"},r.length>0?f(Lu,{attachments:r}):null,o?f("div",{className:"codex-user-bubble bg-token-foreground/5 max-w-[77%] min-w-0 overflow-hidden break-words rounded-2xl px-3 py-2 [&_.contain-inline-size]:[contain:initial]"},f(Ru,{copy:e,text:t.text})):null,o?f(Du,{copy:e,sentAtMs:t.sentAtMs,text:t.text}):null)}case"assistant":return t.isComplete===!1?f("div",{className:"codex-assistant-turn group flex min-w-0 flex-col"},f("div",{className:"codex-assistant-message codex-assistant-message-streaming text-size-chat leading-[calc(var(--codex-chat-font-size)+8px)]"},t.text)):f("div",{className:"codex-assistant-turn group flex min-w-0 flex-col"},f("div",{className:"codex-assistant-message text-size-chat leading-[calc(var(--codex-chat-font-size)+8px)] [&>*:last-child]:mb-0 [&>ol:first-child]:mt-0 [&>ul:first-child]:mt-0",dangerouslySetInnerHTML:{__html:ya(t.text)}}),t.text.trim().length>0?f(Eu,{copy:e,sentAtMs:t.sentAtMs,text:t.text}):null);case"notice":return f("div",{className:`codex-notice-turn ${t.tone??"warning"}`},f("div",{className:"codex-notice-content text-size-chat-sm",dangerouslySetInnerHTML:{__html:Be(t.text)}}));case"activity":return f(Su,{copy:e,entry:t})}});function Su({copy:n,entry:e}){"use no memo";const[t,r]=b.useState(!1),[o,i]=b.useState({bottom:!1,top:!1}),s=b.useRef(null),a=n?.copyOutput??"Copy output",l=n?.shellLabel??"",c=n?.copyShellContents??a,d=n?.copiedShellContents??c,u=n?.collapseShell??"",p=n?.shellSuccess??"",h=n?.stopped??"",m=n?.failedStatus??"",g=!!e.output,x=b.useCallback(()=>{r(C=>!C)},[]),k=b.useCallback(()=>{r(!1)},[]),T=b.useCallback(C=>{const O=C===null?{bottom:!1,top:!1}:{bottom:C.scrollTop+C.clientHeight1};i(L=>L.bottom===O.bottom&&L.top===O.top?L:O)},[]),N=b.useCallback(()=>{s.current?.mutation?.disconnect(),s.current?.resize?.disconnect(),s.current=null},[]),F=b.useCallback(C=>{if(N(),C===null){T(null);return}const O=()=>T(C);O();const L=typeof ResizeObserver>"u"?void 0:new ResizeObserver(O);L?.observe(C);const I=typeof MutationObserver>"u"?void 0:new MutationObserver(O);I?.observe(C,{characterData:!0,childList:!0,subtree:!0}),s.current={mutation:I,resize:L}},[N,T]),X=b.useCallback(C=>{T(C.currentTarget)},[T]),$=Nu(e),S=f(rt.Fragment,null,f("span",{className:"codex-tool-activity-icon icon-xs shrink-0","aria-hidden":!0},ea(e)),f("span",{className:"codex-tool-activity-text shrink overflow-hidden [mask-image:linear-gradient(to_right,black_calc(100%_-_0.25rem),transparent)] [mask-repeat:no-repeat] pr-1 group-hover/collapsed-tool-activity:text-token-foreground"},f("span",{className:"codex-tool-activity-action",dangerouslySetInnerHTML:{__html:Be(e.text)}}),e.detail?f("span",{className:"codex-tool-activity-detail",dangerouslySetInnerHTML:{__html:` ${Be(e.detail)}`}}):null)),A=g?f("button",{type:"button",className:"codex-tool-activity-summary group/collapsed-tool-activity group/summary inline-flex w-fit max-w-full cursor-interaction items-center gap-1 self-start text-left","aria-expanded":t,onClick:x},S,f("span",{className:`codex-tool-activity-chevron inline-chevron flex-shrink-0 text-token-input-placeholder-foreground opacity-0 group-hover/summary:opacity-100${t?" opacity-100":""}`},pp(`icon-2xs text-current transition-transform duration-300${t?" rotate-90":""}`))):f("div",{className:"codex-tool-activity-summary group/collapsed-tool-activity group/summary inline-flex w-fit max-w-full items-center gap-1 self-start text-left"},S);return f("div",{className:`codex-tool-activity-turn ${e.activityKind??"other"} ${e.activityStatus??"completed"}`},A,e.output?f("div",{"aria-hidden":!t,className:"codex-tool-activity-output-shell relative overflow-hidden","data-expanded":t?"true":"false"},f("div",{className:"codex-tool-activity-output-shell-inner"},f("div",{className:"codex-tool-activity-output-frame group/output relative pr-0 min-h-[1.25rem] flex flex-col overflow-clip rounded-lg border border-token-border"},f("div",{className:"codex-shell-header flex items-center justify-between bg-token-side-bar-background pl-2 text-sm font-medium text-ellipsis hover:bg-token-editor-background/40"},f("div",{className:"flex min-w-0 items-center"},f("span",{className:"truncate"},l)),f("div",{className:"flex items-center"},f(Ou,{copiedLabel:d,copyLabel:c,text:$}),f("button",{type:"button",className:`codex-shell-collapse ${ee} ${te} ${ln} rounded-full electron:rounded-md hover:bg-transparent hover:text-token-button-foreground`,"aria-label":u,title:u,onClick:k},gn("icon-2xs rotate-180")))),f("div",{className:"relative overflow-hidden"},f("div",{className:"codex-tool-activity-output vertical-scroll-fade-mask [--edge-fade-distance:2rem] box-border flex flex-col gap-1.5 overflow-x-auto overflow-y-auto whitespace-pre p-2 font-vscode-editor font-medium text-size-code-sm text-token-description-foreground max-h-[140px]",onScroll:X,ref:F,dangerouslySetInnerHTML:{__html:Be(e.output)}}),o.top?f("div",{"aria-hidden":!0,className:"pointer-events-none absolute inset-x-0 top-0 h-6",style:pu}):null,o.bottom?f("div",{"aria-hidden":!0,className:"pointer-events-none absolute inset-x-0 bottom-0 h-6",style:fu}):null),f(Mu,{failedLabel:m,status:e.activityStatus??"completed",stoppedLabel:h,successLabel:p}),f(Tu,{label:a,output:e.output})))):null)}function Mu({failedLabel:n,status:e,stoppedLabel:t,successLabel:r}){return e==="inProgress"?f("div",{className:"codex-shell-footer text-size-chat px-2.5 pt-0.5 pb-1"}):e==="stopped"?f("div",{className:"codex-shell-footer text-size-chat flex items-center gap-2 px-2.5 pt-0.5 pb-1 text-token-input-placeholder-foreground"},f("span",{className:"ml-auto"},t)):e==="failed"?f("div",{className:"codex-shell-footer text-size-chat flex items-center gap-2 px-2.5 pt-0.5 pb-1 text-token-input-placeholder-foreground"},f("span",{className:"ml-auto"},n)):f("div",{className:"codex-shell-footer text-size-chat flex items-center gap-2 px-2.5 pt-0.5 pb-1 text-token-input-placeholder-foreground"},f("span",{className:"ml-auto flex items-center gap-1"},Ze("icon-xxs"),r))}function Nu(n){const e=(n.detail??n.text).trim(),t=n.output?.trimEnd()??"";return[e,t].filter(r=>r.length>0).join(` -`)}function Ou({copiedLabel:n,copyLabel:e,text:t}){"use no memo";const[r,o]=b.useState(!1),i=b.useRef(null),s=r?n:e,a=b.useCallback(c=>{c!==null||i.current===null||(window.clearTimeout(i.current),i.current=null)},[]),l=b.useCallback(c=>{c.stopPropagation(),navigator.clipboard?.writeText(t)?.catch(()=>{}),o(!0),i.current!==null&&window.clearTimeout(i.current),i.current=window.setTimeout(()=>{o(!1),i.current=null},2e3)},[t]);return f("button",{ref:a,type:"button",className:`codex-shell-copy ${ee} ${te} ${ln} rounded-full electron:rounded-md hover:bg-transparent hover:text-token-button-foreground`,"aria-label":s,title:s,onClick:l},r?Ze("icon-xxs"):xn("icon-xxs"))}function Tu({label:n,output:e}){"use no memo";const[t,r]=b.useState(!1),o=b.useRef(null),i=b.useCallback(a=>{a!==null||o.current===null||(window.clearTimeout(o.current),o.current=null)},[]),s=b.useCallback(a=>{a.stopPropagation(),navigator.clipboard?.writeText(e)?.catch(()=>{}),r(!0),o.current!==null&&window.clearTimeout(o.current),o.current=window.setTimeout(()=>{r(!1),o.current=null},2e3)},[e]);return f("button",{ref:i,type:"button",className:`codex-tool-output-copy ${ee} ${te} rounded-full electron:rounded-md electron:p-1 electron:[&>svg]:icon-sm flex items-center justify-center p-0.5 absolute top-0 right-2.5 opacity-0 transition-opacity duration-200 group-hover/output:opacity-100${t?" text-token-foreground opacity-100":""}`,"aria-label":n,title:n,onClick:s},t?Ze("icon-2xs"):xn("icon-2xs"))}function Du({copy:n,sentAtMs:e,text:t}){"use no memo";const[r,o]=b.useState(!1),i=b.useRef(null),s=n?.copyUserMessage??"",a=n?.copiedUserMessage??"",l=r?a:s,c=e==null?null:Os(e),d=b.useCallback(p=>{p!==null||i.current===null||(window.clearTimeout(i.current),i.current=null)},[]),u=b.useCallback(()=>{const p=t.trim();if(!p)return;navigator.clipboard?.writeText(p)?.catch(()=>{}),o(!0),i.current!==null&&window.clearTimeout(i.current),i.current=window.setTimeout(()=>{o(!1),i.current=null},1500)},[t]);return f("div",{className:"codex-user-message-actions flex flex-row-reverse items-center gap-1"},f("div",{className:"mr-1 ms-1 flex items-center gap-2 opacity-0 group-focus-within:opacity-100 group-hover:opacity-100"},c==null?null:f("span",{className:"text-xs text-token-text-tertiary"},c),f("button",{ref:d,type:"button",className:`codex-user-message-action-button ${ee} ${te} ${ln} rounded-full electron:rounded-md`,"aria-label":l,title:l,onClick:u},r?Ze("icon-xs"):xn("icon-xs"))))}function Eu({copy:n,sentAtMs:e,text:t}){"use no memo";const[r,o]=b.useState(!1),i=b.useRef(null),s=n?.copyAssistantMessage??"",a=n?.copiedAssistantMessage??s,l=r?a:s,c=e==null?null:Os(e),d=b.useCallback(p=>{p!==null||i.current===null||(window.clearTimeout(i.current),i.current=null)},[]),u=b.useCallback(()=>{const p=t.trim();if(!p)return;navigator.clipboard?.writeText(p)?.catch(()=>{}),o(!0),i.current!==null&&window.clearTimeout(i.current),i.current=window.setTimeout(()=>{o(!1),i.current=null},2e3)},[t]);return f("div",{className:"codex-assistant-message-actions mt-1.5 flex h-5 items-center justify-start gap-0.5 opacity-0 group-focus-within:opacity-100 group-hover:opacity-100"},f("button",{ref:d,type:"button",className:`codex-assistant-message-action-button ${ee} ${te} ${ln} rounded-full electron:rounded-md`,"aria-label":l,title:l,onClick:u},r?Ze("icon-xs"):xn("icon-xs")),c==null?null:f("span",{className:"ml-1.5 flex h-full items-center text-size-chat leading-5 text-token-input-placeholder-foreground"},c))}function Os(n,e=new Date){const t=new Date(n),r=Au(t,e);return r===0?new Intl.DateTimeFormat(void 0,{hour:"numeric",minute:"2-digit"}).format(t):r<0&&r>-7?new Intl.DateTimeFormat(void 0,{hour:"numeric",minute:"2-digit",weekday:"long"}).format(t):new Intl.DateTimeFormat(void 0,{day:"numeric",hour:"numeric",minute:"2-digit",month:"short"}).format(t)}function Au(n,e){const t=new Date(n.getFullYear(),n.getMonth(),n.getDate()),r=new Date(e.getFullYear(),e.getMonth(),e.getDate());return Math.round((t.getTime()-r.getTime())/864e5)}function Ru({copy:n,text:e}){"use no memo";const[t,r]=b.useState(!1),o=Iu(e),i=o&&!t,s=n?.showMore??"",a=n?.showLess??"",l=b.useCallback(()=>{r(c=>!c)},[]);return f("div",{className:"flex flex-col items-end gap-1"},f("div",{className:"codex-user-message-content text-size-chat relative w-full min-w-0 mb-px","data-collapsed":i?"true":void 0,dangerouslySetInnerHTML:{__html:Be(e)}}),o?f("button",{type:"button","aria-expanded":t,className:"codex-user-message-toggle text-size-chat mt-1.5 inline-flex cursor-interaction items-center gap-1 self-start text-token-description-foreground hover:text-token-foreground",onClick:l},f("span",null,t?a:s),gn(`icon-2xs${t?" rotate-180":""}`)):null)}function Iu(n){return n.split(/\r\n|\r|\n/).length>uu||n.length>1600}function Lu({attachments:n}){return f("div",{className:"codex-user-message-attachments flex max-w-[77%] flex-row-reverse flex-wrap items-center gap-1"},n.map(e=>f(Pu,{attachment:e,key:e.id})))}function Pu({attachment:n}){return n.kind==="image"&&n.dataUrl?f("div",{className:"user-message-image-attachment flex size-16 items-center justify-center rounded-lg border border-token-border",title:n.label},f("img",{alt:n.label,className:"h-full w-full rounded-md object-cover",referrerPolicy:"no-referrer",src:n.dataUrl})):f("div",{className:"user-message-file-attachment bg-token-dropdown-background border-token-border inline-flex max-w-[320px] items-center gap-1 rounded-full border px-2 py-1.5 text-sm",title:n.path},f("span",{className:"text-token-input-placeholder-foreground flex-shrink-0","aria-hidden":!0},Sr("icon-2xs")),f("span",{className:"flex max-w-full min-w-0 items-center gap-1"},f("span",{className:"truncate"},n.label)))}function zu({attachments:n,className:e,copy:t,onRemove:r}){return f("div",{className:`codex-attachment-tray w-full overflow-x-auto${e?` ${e}`:""}`,"data-composer-attachments-row":!0},f("div",{className:"codex-attachment-row flex min-w-max items-end gap-2"},n.map(o=>f(Fu,{attachment:o,copy:t,key:o.id,onRemove:r}))))}function Fu({attachment:n,copy:e,onRemove:t}){const r=`${e?.removeAttachment??"Remove attachment"} ${n.label}`,o=t?f("button",{className:"composer-attachment-remove",type:"button","aria-label":r,onClick:()=>t(n.id),onMouseDown:i=>i.preventDefault()},bn("icon-2xs")):null;return n.kind==="image"&&n.dataUrl?f("div",{className:"composer-attachment-image",title:n.label},f("img",{alt:"","aria-hidden":!0,src:n.dataUrl}),o):f("div",{className:"composer-attachment-file",title:n.path},f("span",{className:"composer-attachment-file-icon","aria-hidden":!0},Sr("icon-xs")),f("span",{className:"composer-attachment-file-label"},n.label),o)}function Bu(n){const e=Et.c(6),{state:t,providerDisplayName:r}=n,i=(t.context?.rateLimitRows??[]).map(La),s=t.context?.copy,[a,l]=b.useState(!1);if(i.length===0)return null;const c=s?.rateLimits??"Rate limits";let d;e[0]!==t?(d=ja(t),e[0]=t,e[1]=d):d=e[1];let u;e[2]===Symbol.for("react.memo_cache_sentinel")?(u=m=>{m.currentTarget.contains(m.relatedTarget)||l(!1)},e[2]=u):u=e[2];let p;e[3]===Symbol.for("react.memo_cache_sentinel")?(p=()=>l(Vu),e[3]=p):p=e[3];let h;return e[4]!==t?(h=(m,g)=>[g>0?f("span",{key:`${m.role}-separator`,className:"rate-limit-inline-separator","aria-hidden":!0},"•"):null,f(_u,{key:m.role,row:m,state:t})],e[4]=t,e[5]=h):h=e[5],f("div",{className:"rate-line codex-rate-limit-summary relative",role:"status","aria-label":`${r} ${d}`.trim(),onBlur:u},f("button",{className:"rate-limit-trigger rate-limit-trigger-inline flex min-w-0 items-center gap-1",type:"button","aria-expanded":a,onClick:p},f("span",{className:"rate-line-heading"},c),i.flatMap(h)),a?f("div",{className:"rate-limit-popover absolute bottom-[calc(100%+6px)] left-0 z-50 flex min-w-56 flex-col gap-1 rounded-xl border border-token-border bg-token-dropdown-background/95 px-3 py-2 text-sm shadow-xl-spread backdrop-blur-sm"},f("div",{className:"rate-limit-popover-title"},c),i.map(m=>f($u,{key:m.role,row:m,state:t}))):null)}function Vu(n){return!n}function _u({row:n,state:e}){const t=n,r=e.context?.copy,o=t.role==="primary"?r?.rateLimitPrimary??"Primary":r?.rateLimitSecondary??"Secondary",i=ti(t.windowDurationMins,o,{weekly:r?.rateLimitWeekly??"Weekly",monthly:r?.rateLimitMonthly??"Monthly",daysFormat:r?.rateLimitDaysFormat??"",hoursFormat:r?.rateLimitHoursFormat??"",minutesFormat:r?.rateLimitMinutesFormat??""}),s=ei(t.resetsAt);return f("span",{className:"rate-limit-inline-segment"},f("span",{className:"rate-limit-window"},i),f("span",{className:"rate-limit-percent"},Qo(t.remainingPercent)),s?f("span",{className:"rate-limit-reset"},`${r?.rateLimitResets??"resets"} ${s}`):null)}function $u({row:n,state:e}){const t=n,r=e.context?.copy,o=t.role==="primary"?r?.rateLimitPrimary??"Primary":r?.rateLimitSecondary??"Secondary",i=ti(t.windowDurationMins,o,{weekly:r?.rateLimitWeekly??"Weekly",monthly:r?.rateLimitMonthly??"Monthly",daysFormat:r?.rateLimitDaysFormat??"",hoursFormat:r?.rateLimitHoursFormat??"",minutesFormat:r?.rateLimitMinutesFormat??""}),s=ei(t.resetsAt);return f("div",{className:"rate-limit-popover-row"},f("span",{className:"rate-limit-window"},i),f("span",{className:"rate-limit-row-value"},f("span",{className:"rate-limit-percent"},Qo(t.remainingPercent)),s?f("span",{className:"rate-limit-reset"},`${r?.rateLimitResets??"resets"} ${s}`):null))}function Wu({emptyLabel:n,highlightedIndex:e,items:t,onChoose:r,onHighlight:o,query:i}){return f("div",{className:"codex-top-tray-shell absolute z-20"},f("div",{className:"codex-top-tray-panel","cmdk-root":"","data-cmdk-root":!0},f("div",{className:"codex-top-tray-list","cmdk-list":"","data-cmdk-list":!0},t.length===0?f("div",{className:"codex-top-tray-empty","cmdk-empty":"","data-cmdk-empty":!0,"data-command-menu-empty-state":"true"},n):t.map((s,a)=>{const l=s.detail?"codex-top-tray-label max-w-[60%] flex-none truncate":"codex-top-tray-label min-w-0 flex-1 truncate",c=sp(s.label,i),d=c.some(u=>!u.isMatch);return f("button",{key:s.id,className:"codex-top-tray-item",type:"button","aria-selected":a===e?"true":void 0,"cmdk-item":"","data-selected":a===e?"true":void 0,"data-list-navigation-item":!0,onMouseEnter:()=>o(a),onMouseDown:u=>u.preventDefault(),onClick:()=>r(s)},f("div",{className:"codex-top-tray-copy flex w-full items-center gap-2"},f("span",{className:"codex-top-tray-icon icon-xs shrink-0","aria-hidden":!0},s.icon),f("div",{className:l},c.map((u,p)=>f("span",{key:`${u.text}-${p}`,className:!u.isMatch&&d?"text-token-description-foreground":void 0},u.text))),s.detail?f("span",{className:"codex-top-tray-detail min-w-0 flex-1 truncate text-sm text-token-description-foreground"},s.detail):null))}))))}function Wo({icon:n,label:e,onClear:t}){return f("div",{className:"composer-mode-indicator flex min-w-0 items-center gap-1"},f("div",{className:"composer-mode-divider","aria-hidden":!0}),f("button",{className:`composer-mode-button group ${ee} ${te} ${Oe} rounded-full`,type:"button","aria-label":e,onClick:t},f("span",{className:"composer-mode-icon composer-mode-icon-default icon-xs shrink-0","aria-hidden":!0},n),f("span",{className:"composer-mode-icon composer-mode-icon-hover icon-xs shrink-0","aria-hidden":!0},bn("icon-xs")),f("span",{className:"composer-footer__label--sm composer-mode-label max-w-16 truncate"},e)))}function Hu({hideLabel:n,label:e,onClear:t}){return f("button",{className:`composer-context-button group ${ee} ${te} ${Oe} min-w-0 rounded-full`,type:"button","aria-label":e,title:e,onClick:t},f("span",{className:"composer-context-icon composer-context-icon-default icon-xs shrink-0","aria-hidden":!0},Es("icon-xs")),f("span",{className:"composer-context-icon composer-context-icon-hover icon-xs shrink-0","aria-hidden":!0},bn("icon-xs")),n?null:f("span",{className:"composer-footer__label--sm composer-context-label max-w-20 truncate"},e))}function qu({copy:n,hideLabel:e=!1,isEnabled:t,isOpen:r,mode:o,onModeChange:i,onOpenChange:s}){const a=n?.changePermissions??"Change permissions",l=Uo(n,o),c=t?["default","auto-review","full-access","custom"]:[],d=e?oa:Oe,u=h=>{i(h),s(!1)},p=t&&r;return f("div",{className:"permissions-root relative inline-flex",onBlur:h=>{t&&!h.currentTarget.contains(h.relatedTarget)&&s(!1)}},f("button",{className:`permissions-trigger ${ee} ${te} ${d} ${e?Kt:"min-w-0"} rounded-full`,type:"button","aria-label":a,"aria-haspopup":t?"menu":void 0,"aria-expanded":t?p:void 0,"aria-disabled":t?void 0:!0,"data-permission-mode":o,"data-state":p?"open":"closed",disabled:!t,onClick:()=>{t&&s(!p)},onKeyDown:h=>{t&&(h.key==="ArrowDown"&&(h.preventDefault(),s(!0)),h.key==="Escape"&&(h.preventDefault(),s(!1)))}},Ds(o,"icon-xs shrink-0"),e?null:f("span",{className:"permissions-trigger-label composer-footer__label--xs max-w-40 truncate whitespace-nowrap text-left"},l),t?f("span",{className:"permissions-trigger-chevron icon-2xs shrink-0","aria-hidden":!0},gn()):null),p?f("div",{className:"permissions-dropdown _content_1hiti_1 no-drag bg-token-dropdown-background/90 text-token-foreground ring-token-border z-50 m-px flex select-none flex-col overflow-y-auto rounded-xl ring-[0.5px] px-1 py-1 shadow-xl-spread backdrop-blur-sm",role:"menu","aria-label":a,"data-state":"open","data-side":"top",style:{"--radix-dropdown-menu-content-transform-origin":"left bottom"}},c.map(h=>f(Ju,{isSelected:h===o,key:h,label:Uo(n,h),mode:h,onSelect:()=>u(h)}))):null)}function Ju({isSelected:n,label:e,mode:t,onSelect:r}){return f("button",{className:"permissions-item no-drag group hover:bg-token-list-hover-background focus:bg-token-list-hover-background cursor-interaction text-token-foreground outline-hidden rounded-lg px-[var(--padding-row-x)] py-[var(--padding-row-y)] text-sm",type:"button",role:"menuitemradio","aria-checked":n,"data-permission-mode":t,"data-selected":n?"true":void 0,onMouseDown:o=>o.preventDefault(),onClick:r},f("span",{className:"permissions-item-icon icon-xs shrink-0","aria-hidden":!0},Ds(t,"icon-xs shrink-0")),f("span",{className:"permissions-item-label min-w-0 flex-1 truncate"},e),n?f("span",{className:"permissions-item-check icon-xs shrink-0","aria-hidden":!0},Ze()):null)}function Uu({hasIdeContext:n,isAutoContextOn:e,isOpen:t,isPickingFiles:r,isPlanMode:o,onOpenChange:i,onPickFiles:s,onToggleAutoContext:a,onTogglePlanMode:l,state:c}){const d=c.context?.copy,u=d?.addFilesAndMore??"Add files and more",p=d?.addPhotosAndFiles??"Add photos & files",m=Cr("skill",c,"").find(g=>g.id==="plan")??null;return f("div",{className:"add-context-root relative inline-flex",onBlur:g=>{g.currentTarget.contains(g.relatedTarget)||i(!1)}},f("button",{className:`codex-tool codex-tool-plus ${ee} ${te} ${Oe} ${Kt} rounded-full`,type:"button","aria-label":u,"aria-haspopup":"menu","aria-expanded":t,"data-state":t?"open":"closed",onClick:()=>i(!t),onKeyDown:g=>{g.key==="ArrowDown"&&(g.preventDefault(),i(!0)),g.key==="Escape"&&(g.preventDefault(),i(!1))}},fp()),t?f("div",{className:"add-context-dropdown _content_1hiti_1 no-drag bg-token-dropdown-background/90 text-token-foreground ring-token-border z-50 m-px flex select-none flex-col overflow-y-auto rounded-xl ring-[0.5px] px-1 py-1 shadow-xl-spread backdrop-blur-sm",role:"menu","aria-label":u,"data-state":"open","data-side":"top",style:{"--radix-dropdown-menu-content-transform-origin":"left bottom"}},f(ju,{disabled:r,icon:Sr("icon-xs"),label:p,onSelect:s}),n||m?f(Ku):null,n?f(Ho,{checked:e,icon:Es("icon-sm"),label:d?.includeIdeContext??"Include IDE context",onSelect:a}):null,m?f(Ho,{checked:o,icon:an(),label:d?.planMode??"Plan mode",onSelect:l}):null):null)}function ju({detail:n,disabled:e=!1,icon:t,label:r,onSelect:o}){return f("button",{className:"add-context-item group no-drag hover:bg-token-list-hover-background focus:bg-token-list-hover-background cursor-interaction text-token-foreground outline-hidden rounded-lg px-[var(--padding-row-x)] py-[var(--padding-row-y)] text-sm",disabled:e,type:"button",role:"menuitem",onMouseDown:i=>i.preventDefault(),onClick:e?void 0:o},f("span",{className:"add-context-item-icon icon-xs shrink-0","aria-hidden":!0},t),f("span",{className:"add-context-item-copy flex min-w-0 flex-1 items-center gap-2"},f("span",{className:"add-context-item-label min-w-0 truncate"},r),n?f("span",{className:"add-context-item-detail min-w-0 flex-1 truncate text-token-description-foreground"},n):null))}function Ho({checked:n,icon:e,label:t,onSelect:r}){const o=n?"checked":"unchecked",i=n?"relative inline-flex h-4 w-7 shrink-0 items-center rounded-full bg-token-charts-blue transition-colors duration-200 ease-out":"relative inline-flex h-4 w-7 shrink-0 items-center rounded-full bg-token-foreground/10 transition-colors duration-200 ease-out";return f("button",{className:"add-context-item group no-drag hover:bg-token-list-hover-background focus:bg-token-list-hover-background cursor-interaction text-token-foreground outline-hidden rounded-lg px-[var(--padding-row-x)] py-[var(--padding-row-y)] text-sm",type:"button",role:"menuitemcheckbox","aria-checked":n,onMouseDown:s=>s.preventDefault(),onClick:r},f("span",{className:"add-context-item-icon icon-xs shrink-0","aria-hidden":!0},e),f("span",{className:"add-context-switch-row flex w-full min-w-0 items-center justify-between gap-2"},f("span",{className:"flex min-w-0 items-center gap-2"},f("span",{className:"add-context-item-label min-w-0 truncate"},t)),f("span",{className:i,"data-state":o,"aria-hidden":!0},f("span",{className:"h-3 w-3 rounded-full border border-[color:var(--gray-0)] bg-[color:var(--gray-0)] shadow-sm transition-transform duration-200 ease-out data-[state=unchecked]:translate-x-[2px] data-[state=checked]:translate-x-[14px]","data-state":o}))))}function Ku(){return f("div",{className:"add-context-separator w-full px-[var(--padding-row-x)] py-1",role:"separator"},f("div",{className:"add-context-separator-line h-[1px] w-full bg-token-menu-border"}))}function Zu(n){return Cr("mention",n,"").find(e=>e.id==="workspace")??null}function Cr(n,e,t){const r=e.context?.copy,o=n==="mention"?[...e.context?.workingDirectory?[{id:"workspace",icon:hp("icon-xs"),label:r?.mentionCurrentWorkspace??"Current workspace",detail:jt(e.context.workingDirectory),mention:{kind:"at",label:jt(e.context.workingDirectory),name:jt(e.context.workingDirectory),path:e.context.workingDirectory,fsPath:e.context.workingDirectory}}]:[],...e.providers.map(i=>({id:i.id,icon:Ia(i),label:i.displayName,detail:i.executableName,mention:{kind:"agent",label:i.displayName,name:i.id,displayName:i.displayName,path:`provider://${i.id}`,description:i.executableName}}))]:[{id:"plan",icon:"$",label:r?.skillPlan??"Plan",detail:"$plan",mention:{kind:"skill",label:"Plan",name:"plan",displayName:"Plan",path:"skill://plan"}},{id:"review",icon:"$",label:r?.skillCodeReview??"Code review",detail:"$codex-review",mention:{kind:"skill",label:"Code review",name:"codex-review",displayName:"Code review",path:"skill://codex-review"}},{id:"research",icon:"$",label:r?.skillResearch??"Research",detail:"$research",mention:{kind:"skill",label:"Research",name:"research",displayName:"Research",path:"skill://research"}}];return Yu(o,t)}function Yu(n,e){const t=e.trim();return t?n.map(r=>({item:r,score:ip(r.label,t,[r.detail,r.mention.name])})).filter(({score:r})=>r>0).sort((r,o)=>o.score-r.score).map(({item:r})=>r):n}const qo=1,Gu=.9,Xu=.8,Qu=.17,_n=.1,$n=.999,ep=.9999,tp=.99,np=/[\\/_+.#"@[({&]/,rp=/[\\/_+.#"@[({&]/g,op=/[\s-]/,Ts=/[\s-]/g;function ip(n,e,t){const r=t.length>0?`${n} ${t.join(" ")}`:n;return ir(r,e,Jo(r),Jo(e),0,0,{})}function Jo(n){return n.toLowerCase().replace(Ts," ")}function ir(n,e,t,r,o,i,s){if(i===e.length)return o===n.length?qo:tp;const a=`${o},${i}`;if(s[a]!==void 0)return s[a];const l=r.charAt(i);let c=t.indexOf(l,o),d=0;for(;c>=0;){let u=ir(n,e,t,r,c+1,i+1,s);if(u>d){if(c===o)u*=qo;else if(np.test(n.charAt(c-1))){u*=Xu;const p=n.slice(o,c-1).match(rp);p&&o>0&&(u*=$n**p.length)}else if(op.test(n.charAt(c-1))){u*=Gu;const p=n.slice(o,c-1).match(Ts);p&&o>0&&(u*=$n**p.length)}else u*=Qu,o>0&&(u*=$n**(c-o));n.charAt(c)!==e.charAt(i)&&(u*=ep)}if(u<_n&&t.charAt(c-1)===r.charAt(i+1)||r.charAt(i+1)===r.charAt(i)&&t.charAt(c-1)!==r.charAt(i)){const p=ir(n,e,t,r,c+1,i+2,s);p*_n>u&&(u=p*_n)}u>d&&(d=u),c=t.indexOf(l,c+1)}return s[a]=d,d}function sp(n,e){const t=Array.from(n),r=e.trim();if(!r)return t.map(l=>({isMatch:!0,text:l}));const o=t.map(l=>l.toLowerCase()),i=Array.from(r.toLowerCase());let s=-1;for(let l=0;l<=o.length-i.length;l+=1)if(i.every((c,d)=>o[l+d]===c)){s=l;break}if(s>=0){const l=s+i.length;return t.map((c,d)=>({isMatch:d>=s&&d{const c=a{const r=`${t.kind}:${t.path}`;return e.has(r)?!1:(e.add(r),!0)})}function lp(n="icon-sm"){return f("svg",{className:n,width:"20",height:"20",viewBox:"0 0 20 20",fill:"none","aria-hidden":!0},f("path",{d:"M9.33467 16.6663V4.93978L4.6374 9.63704L4.1667 9.16634L3.69599 8.69661L9.52998 2.86263L9.63447 2.77767C9.8925 2.60753 10.2433 2.63564 10.4704 2.86263L16.3034 8.69661L16.3884 8.80111C16.5588 9.05922 16.5306 9.40982 16.3034 9.63704C16.0762 9.86414 15.7255 9.89242 15.4675 9.722L15.363 9.63704L10.6647 4.9388V16.6663C10.6647 17.0336 10.367 17.3314 9.99971 17.3314C9.63259 17.3312 9.33467 17.0335 9.33467 16.6663ZM4.6374 9.63704C4.3777 9.89674 3.95569 9.89674 3.69599 9.63704C3.43657 9.37744 3.43668 8.95628 3.69599 8.69661L4.6374 9.63704Z",fill:"currentColor"}))}function cp(){return f("svg",{width:"16",height:"16",viewBox:"0 0 16 16",fill:"none","aria-hidden":!0},f("rect",{x:"4.75",y:"4.75",width:"6.5",height:"6.5",rx:"1",fill:"currentColor"}))}function dp(){return f("svg",{width:"16",height:"16",viewBox:"0 0 16 16",fill:"none","aria-hidden":!0},f("path",{d:"M8 2.25a2 2 0 0 0-2 2v3.25a2 2 0 1 0 4 0V4.25a2 2 0 0 0-2-2ZM4 7.5a4 4 0 0 0 8 0M8 11.5v2.25",stroke:"currentColor",strokeWidth:"1.4",strokeLinecap:"round"}))}function up(n="icon-sm"){return f("svg",{className:n,width:"20",height:"20",viewBox:"0 0 20 20",fill:"none","aria-hidden":!0},f("path",{d:"M10 5.14295V14.8441M10 5.14295C10 1.98209 14.8475 1.94468 14.8475 5.07797L14.8473 5.1067C17.1367 5.43539 18.0436 7.54498 16.4225 9.14006C17.8633 10.5577 17.3503 13.9054 15.4449 14.6301C14.8475 17.6527 10.8056 18.4821 10 14.8441M10 5.14295C10 1.98209 5.15249 1.94468 5.15249 5.07797L5.15265 5.1067C2.86325 5.43539 1.95642 7.54498 3.57746 9.14006C2.13674 10.5577 2.64974 13.9054 4.5551 14.6301C5.15249 17.6527 9.19444 18.4821 10 14.8441",stroke:"currentColor",strokeLinejoin:"round",strokeWidth:"1.33"}))}function gn(n="icon-2xs"){return f("svg",{className:n,width:"20",height:"21",viewBox:"0 0 20 21",fill:"none","aria-hidden":!0},f("path",{d:"M15.2793 7.71101C15.539 7.45131 15.961 7.45131 16.2207 7.71101C16.4804 7.97071 16.4804 8.39272 16.2207 8.65242L10.4707 14.4024C10.211 14.6621 9.78902 14.6621 9.52932 14.4024L3.77932 8.65242L3.69436 8.54792C3.52385 8.28979 3.55205 7.93828 3.77932 7.71101C4.00659 7.48374 4.3581 7.45554 4.61623 7.62605L4.72073 7.71101L10 12.9903L15.2793 7.71101Z",fill:"currentColor",stroke:"currentColor",strokeWidth:"0.6"}))}function pp(n="icon-2xs"){return f("svg",{className:n,width:"20",height:"20",viewBox:"0 0 20 20",fill:"none","aria-hidden":!0},f("path",{d:"M7.52925 3.7793C7.75652 3.55203 8.10803 3.52383 8.36616 3.69434L8.47065 3.7793L14.2207 9.5293C14.4804 9.789 14.4804 10.211 14.2207 10.4707L8.47065 16.2207C8.21095 16.4804 7.78895 16.4804 7.52925 16.2207C7.26955 15.961 7.26955 15.539 7.52925 15.2793L12.8085 10L7.52925 4.7207L7.44429 4.61621C7.27378 4.35808 7.30198 4.00657 7.52925 3.7793Z",fill:"currentColor"}))}function xn(n="icon-sm"){return f("svg",{className:n,width:"21",height:"21",viewBox:"0 0 21 21",fill:"none","aria-hidden":!0},f("path",{d:"M13.468 11.1216C13.468 10.4107 13.468 9.91717 13.4367 9.53369C13.4137 9.25191 13.3758 9.0622 13.3244 8.91846L13.2687 8.78858C13.1148 8.48652 12.8803 8.23344 12.593 8.05713L12.466 7.98584C12.308 7.90546 12.0963 7.84854 11.7209 7.81787C11.3374 7.78656 10.8439 7.78662 10.133 7.78662H7.29999C6.58895 7.78662 6.09562 7.78654 5.7121 7.81787C5.43015 7.84091 5.24064 7.87872 5.09686 7.93018L4.96698 7.98584C4.66487 8.13977 4.41184 8.37419 4.23554 8.66162L4.16522 8.78858C4.08477 8.94657 4.02794 9.15811 3.99725 9.53369C3.96594 9.91718 3.96503 10.4107 3.96503 11.1216V13.9546C3.96503 14.6656 3.96592 15.159 3.99725 15.5425C4.02796 15.9182 4.08471 16.1296 4.16522 16.2876L4.23554 16.4136C4.41185 16.7012 4.66472 16.9353 4.96698 17.0894L5.09686 17.146C5.24061 17.1974 5.43024 17.2343 5.7121 17.2573C6.09562 17.2887 6.58895 17.2896 7.29999 17.2896H10.133C10.8439 17.2896 11.3374 17.2886 11.7209 17.2573C12.0965 17.2266 12.308 17.1698 12.466 17.0894L12.593 17.019C12.8804 16.8427 13.1148 16.5897 13.2687 16.2876L13.3244 16.1577C13.3759 16.0139 13.4137 15.8244 13.4367 15.5425C13.468 15.159 13.468 14.6656 13.468 13.9546V11.1216ZM14.798 13.1196C15.2528 13.118 15.6011 13.1147 15.8879 13.0913C16.2634 13.0606 16.475 13.0038 16.633 12.9233L16.759 12.8521C17.0466 12.6757 17.2808 12.4228 17.4348 12.1206L17.4914 11.9907C17.5428 11.847 17.5797 11.6572 17.6027 11.3755C17.634 10.992 17.6349 10.4985 17.6349 9.7876V6.95459C17.6349 6.24355 17.6341 5.75022 17.6027 5.3667C17.5797 5.08484 17.5428 4.89522 17.4914 4.75147L17.4348 4.62158C17.2807 4.31933 17.0466 4.06645 16.759 3.89014L16.633 3.81982C16.475 3.73932 16.2636 3.68256 15.8879 3.65186C15.5044 3.62052 15.011 3.61963 14.3 3.61963H11.467C10.7561 3.61963 10.2626 3.62054 9.87909 3.65186C9.59738 3.67487 9.40759 3.71179 9.26386 3.76318L9.13397 3.81982C8.83175 3.97382 8.57885 4.20802 8.40253 4.49561L8.33124 4.62158C8.25079 4.77957 8.19396 4.99114 8.16327 5.3667C8.13984 5.65352 8.13561 6.00178 8.13397 6.45654H10.133C10.822 6.45654 11.3791 6.4559 11.8293 6.49268C12.2873 6.5301 12.6937 6.6093 13.0705 6.80127L13.2883 6.92334C13.7839 7.22739 14.1878 7.66313 14.4533 8.18408L14.5197 8.32666C14.6642 8.66318 14.7291 9.02433 14.7619 9.42529C14.7987 9.8755 14.798 10.4326 14.798 11.1216V13.1196ZM18.965 9.7876C18.965 10.4766 18.9657 11.0337 18.9289 11.4839C18.8961 11.8848 18.8311 12.246 18.6867 12.5825L18.6203 12.7251C18.3548 13.246 17.9509 13.6818 17.4553 13.9858L17.2365 14.1079C16.8599 14.2998 16.4541 14.3791 15.9963 14.4165C15.6592 14.444 15.2624 14.4481 14.7951 14.4497C14.7935 14.917 14.7894 15.3138 14.7619 15.6509C14.7292 16.0516 14.664 16.4122 14.5197 16.7485L14.4533 16.8911C14.1878 17.4122 13.7841 17.8487 13.2883 18.1528L13.0705 18.2749C12.6937 18.4669 12.2873 18.5461 11.8293 18.5835C11.3791 18.6203 10.822 18.6196 10.133 18.6196H7.29999C6.6109 18.6196 6.05394 18.6203 5.6037 18.5835C5.20305 18.5508 4.84233 18.4855 4.50604 18.3413L4.36347 18.2749C3.84243 18.0094 3.40584 17.6056 3.10175 17.1099L2.97968 16.8911C2.78787 16.5145 2.70849 16.1087 2.67108 15.6509C2.6343 15.2006 2.63495 14.6437 2.63495 13.9546V11.1216C2.63495 10.4326 2.63431 9.8755 2.67108 9.42529C2.7085 8.96729 2.78771 8.56084 2.97968 8.18408L3.10175 7.96631C3.40585 7.47049 3.84235 7.06679 4.36347 6.80127L4.50604 6.73486C4.84236 6.59059 5.20302 6.52542 5.6037 6.49268C5.9405 6.46516 6.33707 6.4601 6.80389 6.4585C6.8055 5.99167 6.81056 5.5951 6.83807 5.2583C6.87549 4.80047 6.95482 4.39471 7.14667 4.01807L7.26874 3.79932C7.5728 3.30371 8.00855 2.89973 8.52948 2.63428L8.67206 2.56787C9.00854 2.42345 9.36978 2.35844 9.77069 2.32568C10.2209 2.28891 10.778 2.28955 11.467 2.28955H14.3C14.9891 2.28955 15.546 2.2889 15.9963 2.32568C16.4541 2.3631 16.8599 2.44247 17.2365 2.63428L17.4553 2.75635C17.951 3.06044 18.3548 3.49703 18.6203 4.01807L18.6867 4.16065C18.8309 4.49694 18.8962 4.85765 18.9289 5.2583C18.9657 5.70854 18.965 6.2655 18.965 6.95459V9.7876Z",fill:"currentColor"}))}function Ze(n){return f("svg",{className:n,width:"17",height:"17",viewBox:"0 0 17 17",fill:"none","aria-hidden":!0},f("path",{d:"M12.8961 3.64101C13.1297 3.41418 13.4984 3.37523 13.7779 3.56581C14.0571 3.75635 14.1554 4.11331 14.0299 4.41347L13.9615 4.53847L7.71151 13.7045C7.59411 13.8767 7.4063 13.9877 7.19881 14.0072C6.99136 14.0267 6.78564 13.9533 6.63826 13.806L2.88826 10.056L2.79842 9.9457C2.6192 9.67407 2.64927 9.30496 2.88826 9.06581C3.12738 8.82669 3.49647 8.79676 3.76815 8.97597L3.8785 9.06581L7.03084 12.2182L12.8053 3.74941L12.8961 3.64101Z",fill:"currentColor"}))}function bn(n="icon-sm"){return f("svg",{className:n,width:"20",height:"20",viewBox:"0 0 20 20",fill:"none","aria-hidden":!0},f("path",{d:"M5.96967 5.96967C6.26256 5.67678 6.73744 5.67678 7.03033 5.96967L10 8.93934L12.9697 5.96967C13.2626 5.67678 13.7374 5.67678 14.0303 5.96967C14.3232 6.26256 14.3232 6.73744 14.0303 7.03033L11.0607 10L14.0303 12.9697C14.3232 13.2626 14.3232 13.7374 14.0303 14.0303C13.7374 14.3232 13.2626 14.3232 12.9697 14.0303L10 11.0607L7.03033 14.0303C6.73744 14.3232 6.26256 14.3232 5.96967 14.0303C5.67678 13.7374 5.67678 13.2626 5.96967 12.9697L8.93934 10L5.96967 7.03033C5.67678 6.73744 5.67678 6.26256 5.96967 5.96967Z",fill:"currentColor"}))}function fp(){return f("svg",{className:"icon-sm",width:"20",height:"20",viewBox:"0 0 20 20",fill:"none","aria-hidden":!0},f("path",{d:"M9.33496 16.5V10.665H3.5C3.13273 10.665 2.83496 10.3673 2.83496 10C2.83496 9.63273 3.13273 9.33496 3.5 9.33496H9.33496V3.5C9.33496 3.13273 9.63273 2.83496 10 2.83496C10.3673 2.83496 10.665 3.13273 10.665 3.5V9.33496H16.5L16.6338 9.34863C16.9369 9.41057 17.165 9.67857 17.165 10C17.165 10.3214 16.9369 10.5894 16.6338 10.6514L16.5 10.665H10.665V16.5C10.665 16.8673 10.3673 17.165 10 17.165C9.63273 17.165 9.33496 16.8673 9.33496 16.5Z",fill:"currentColor"}))}function Sr(n="icon-sm"){return f("svg",{className:n,width:"21",height:"21",viewBox:"0 0 21 21",fill:"none","aria-hidden":!0},f("path",{d:"M4.43945 12.8041V7.68261C4.43945 7.30642 4.74446 7.00141 5.12066 7.00141C5.49685 7.00141 5.80186 7.30642 5.80186 7.68261V12.8041C5.80186 15.2565 7.78984 17.2445 10.2422 17.2445C12.6945 17.2445 14.6825 15.2565 14.6825 12.8041V5.9751C14.6823 4.46587 13.4589 3.24247 11.9497 3.24229C10.4403 3.24229 9.21606 4.46576 9.21588 5.9751V12.8041C9.21588 13.3708 9.67553 13.8304 10.2422 13.8304C10.8088 13.8304 11.2685 13.3708 11.2685 12.8041V7.68261C11.2685 7.30642 11.5735 7.00141 11.9497 7.00141C12.3257 7.00159 12.6309 7.30653 12.6309 7.68261V12.8041C12.6309 14.1232 11.5612 15.1929 10.2422 15.1929C8.92314 15.1929 7.85347 14.1232 7.85347 12.8041V5.9751C7.85365 3.71337 9.68791 1.87988 11.9497 1.87988C14.2113 1.88006 16.0447 3.71348 16.0449 5.9751V12.8041C16.0449 16.0089 13.4469 18.6069 10.2422 18.6069C7.03745 18.6069 4.43945 16.0089 4.43945 12.8041Z",fill:"currentColor"}))}function hp(n="icon-sm"){return f("svg",{className:n,width:20,height:20,viewBox:"0 0 20 20",fill:"none","aria-hidden":!0},f("path",{d:Zo,fill:"currentColor"}))}function an(n="icon-sm"){return f("svg",{className:n,width:"20",height:"20",viewBox:"0 0 20 20",fill:"none","aria-hidden":!0},f("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M5.69336 11.0557C7.05891 11.1944 8.12484 12.3479 8.125 13.75L8.11035 14.0273C7.97144 15.3928 6.81814 16.459 5.41602 16.459L5.13965 16.4443C3.86514 16.3149 2.85128 15.3018 2.72168 14.0273L2.70801 13.75C2.70818 12.2546 3.92061 11.0423 5.41602 11.042L5.69336 11.0557ZM5.41602 12.3721C4.65515 12.3724 4.03826 12.9891 4.03809 13.75C4.03826 14.5109 4.65515 15.1286 5.41602 15.1289C6.17714 15.1289 6.79475 14.5111 6.79492 13.75C6.79475 12.9889 6.17714 12.3721 5.41602 12.3721Z",fill:"currentColor"}),f("path",{d:"M16.8008 13.0986C17.1036 13.1608 17.3311 13.4288 17.3311 13.75C17.3311 14.0712 17.1036 14.3392 16.8008 14.4014L16.666 14.415H10.833C10.4659 14.4149 10.168 14.1172 10.168 13.75C10.168 13.3828 10.4659 13.0851 10.833 13.085H16.666L16.8008 13.0986Z",fill:"currentColor"}),f("path",{d:"M16.8008 5.59863C17.1036 5.66081 17.3311 5.92879 17.3311 6.25C17.3311 6.57121 17.1036 6.83919 16.8008 6.90137L16.666 6.91504H10.833C10.4659 6.91491 10.168 6.61719 10.168 6.25C10.168 5.88281 10.4659 5.58509 10.833 5.58496H16.666L16.8008 5.59863Z",fill:"currentColor"}),f("path",{d:"M7.13311 3.76578C7.35346 3.47216 7.771 3.4128 8.06475 3.63297C8.35843 3.85336 8.41789 4.27084 8.19757 4.56461L5.19757 8.56461C5.0819 8.71866 4.90439 8.81462 4.71221 8.82828C4.5201 8.84178 4.33083 8.77209 4.19464 8.6359L2.69464 7.1359C2.43512 6.87623 2.43512 6.45415 2.69464 6.19449C2.95429 5.93484 3.37633 5.93493 3.63604 6.19449L4.59307 7.15152L7.13311 3.76578Z",fill:"currentColor"}))}function mp(n="icon-sm"){return f("svg",{className:n,width:"20",height:"20",viewBox:"0 0 20 20",fill:"none","aria-hidden":!0},f("path",{d:"M12.6683 4.16699C12.6683 3.84391 12.4065 3.58203 12.0834 3.58203C11.7603 3.58203 11.4984 3.84391 11.4984 4.16699V7.91699L11.4847 8.05078C11.4227 8.35375 11.1547 8.58203 10.8334 8.58203C10.4662 8.58203 10.1685 8.28411 10.1683 7.91699V3.75C10.1683 3.42691 9.90646 3.16504 9.58337 3.16504C9.26029 3.16504 8.99841 3.42691 8.99841 3.75V7.91699C8.99824 8.28411 8.70053 8.58203 8.33337 8.58203C7.96621 8.58203 7.66851 8.28411 7.66833 7.91699V5C7.66833 4.67691 7.40646 4.41504 7.08337 4.41504C6.76029 4.41504 6.49841 4.67691 6.49841 5V9.30371C6.53326 9.3429 6.56715 9.38359 6.59998 9.42578L8.02478 11.2588C8.25005 11.5486 8.19821 11.9659 7.90857 12.1914C7.6187 12.4169 7.20048 12.365 6.97498 12.0752L5.55017 10.2432C5.15812 9.7391 4.41813 9.73637 4.01501 10.1924C4.04396 10.426 4.11486 10.8323 4.25525 11.3486C4.44664 12.0525 4.75404 12.9113 5.21619 13.7383C6.14103 15.3931 7.62465 16.835 10.0004 16.835C12.8545 16.8348 15.1682 14.5211 15.1683 11.667V6.25C15.1683 5.92691 14.9065 5.66504 14.5834 5.66504C14.2603 5.66504 13.9984 5.92691 13.9984 6.25V9.16699C13.9982 9.53411 13.7005 9.83203 13.3334 9.83203C12.9662 9.83203 12.6685 9.53411 12.6683 9.16699V4.16699ZM13.9984 4.42578C14.1828 4.36671 14.3794 4.33496 14.5834 4.33496C15.641 4.33496 16.4984 5.19237 16.4984 6.25V11.667C16.4982 15.2557 13.589 18.1649 10.0004 18.165C6.95953 18.165 5.10939 16.2734 4.05505 14.3867C3.52774 13.4431 3.1843 12.4787 2.97205 11.6982C2.76447 10.9349 2.66834 10.2954 2.66833 10C2.66833 9.87959 2.70117 9.76148 2.76306 9.6582C3.28988 8.78018 4.26555 8.40372 5.16833 8.56152V5C5.16833 3.94237 6.02575 3.08496 7.08337 3.08496C7.31706 3.08496 7.54039 3.12845 7.74744 3.20508C7.98218 2.41297 8.7151 1.83496 9.58337 1.83496C10.1836 1.83496 10.7186 2.11176 11.0697 2.54395C11.3639 2.35978 11.7107 2.25195 12.0834 2.25195C13.141 2.25195 13.9984 3.10937 13.9984 4.16699V4.42578Z",fill:"currentColor"}))}function gp(n="icon-sm"){return f("svg",{className:n,width:"20",height:"20",viewBox:"0 0 20 20",fill:"none","aria-hidden":!0},f("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M9.06543 1.95123C9.66107 1.69076 10.3389 1.69071 10.9346 1.95123L15.9346 4.13873C16.7832 4.51008 17.3311 5.34917 17.3311 6.27545V10.5528C17.3309 14.6017 14.0489 17.8847 10 17.8848C5.95108 17.8846 2.66813 14.6017 2.66797 10.5528V6.27545C2.66797 5.34924 3.21695 4.51012 4.06543 4.13873L9.06543 1.95123ZM10.4014 3.16998C10.1456 3.05814 9.85444 3.05819 9.59863 3.16998L4.59863 5.35748C4.23427 5.51708 3.99805 5.87764 3.99805 6.27545V10.5528C3.99821 13.8671 6.68563 16.5546 10 16.5547C13.3144 16.5546 16.0008 13.8671 16.001 10.5528V6.27545C16.001 5.87756 15.7658 5.51703 15.4014 5.35748L10.4014 3.16998Z",fill:"currentColor"}),f("path",{d:"M13.4678 11.4318L13.333 11.4182H10.833C10.466 11.4183 10.1682 11.7162 10.168 12.0832C10.168 12.4504 10.4659 12.7481 10.833 12.7482H13.333L13.4678 12.7346C13.7706 12.6724 13.9981 12.4044 13.9981 12.0832C13.9979 11.7621 13.7706 11.494 13.4678 11.4318Z",fill:"currentColor"}),f("path",{d:"M7.65336 12.426C7.46431 12.7406 7.05607 12.8424 6.74125 12.6535C6.42646 12.4646 6.32395 12.0563 6.51274 11.7414L7.55668 10.0002L6.51274 8.25899C6.32395 7.94412 6.42646 7.53583 6.74125 7.34688C7.05607 7.15799 7.46431 7.25975 7.65336 7.57442L8.90336 9.6584C9.0296 9.86893 9.0296 10.1315 8.90336 10.342L7.65336 12.426Z",fill:"currentColor"}))}function xp(n="icon-sm"){return f("svg",{className:n,width:"20",height:"20",viewBox:"0 0 20 20",fill:"none","aria-hidden":!0},f("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M9.06543 1.95123C9.66107 1.69076 10.3389 1.69071 10.9346 1.95123L15.9346 4.13873C16.7832 4.51008 17.3311 5.34917 17.3311 6.27545V10.5528C17.3309 14.6017 14.0489 17.8847 10 17.8848C5.95108 17.8846 2.66813 14.6017 2.66797 10.5528V6.27545C2.66797 5.34924 3.21695 4.51012 4.06543 4.13873L9.06543 1.95123ZM10.4014 3.16998C10.1456 3.05814 9.85444 3.05819 9.59863 3.16998L4.59863 5.35748C4.23427 5.51708 3.99805 5.87764 3.99805 6.27545V10.5528C3.99821 13.8671 6.68563 16.5546 10 16.5547C13.3144 16.5546 16.0008 13.8671 16.001 10.5528V6.27545C16.001 5.87756 15.7658 5.51703 15.4014 5.35748L10.4014 3.16998Z",fill:"currentColor"}),f("path",{d:"M10.8883 13.1116C10.8883 13.6025 10.4903 14.0005 9.99936 14.0005C9.50844 14.0005 9.11047 13.6025 9.11047 13.1116C9.11047 12.6207 9.50844 12.2227 9.99936 12.2227C10.4903 12.2227 10.8883 12.6207 10.8883 13.1116Z",fill:"currentColor"}),f("path",{d:"M10.5169 10.8949L11.1135 7.31519C11.2283 6.62672 10.6974 6 9.99941 6C9.30145 6 8.77053 6.62672 8.88528 7.31519L9.4819 10.8949C9.52406 11.1479 9.74294 11.3333 9.99941 11.3333C10.2559 11.3333 10.4748 11.1479 10.5169 10.8949Z",fill:"currentColor"}))}function bp(n="icon-sm"){return f("svg",{className:n,width:"20",height:"20",viewBox:"0 0 20 20",fill:"none","aria-hidden":!0},f("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M9.99944 7.24939C11.5169 7.2495 12.7473 8.47995 12.7475 9.99744C12.7475 11.5151 11.517 12.7454 9.99944 12.7455C8.48176 12.7455 7.2514 11.5151 7.2514 9.99744C7.25155 8.47988 8.48186 7.24939 9.99944 7.24939ZM9.99944 8.57947C9.2164 8.57947 8.58163 9.21442 8.58148 9.99744C8.58148 10.7806 9.2163 11.4154 9.99944 11.4154C10.7825 11.4153 11.4174 10.7805 11.4174 9.99744C11.4173 9.21449 10.7824 8.57958 9.99944 8.57947Z",fill:"currentColor"}),f("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M10.6391 1.67517C11.2939 1.67532 11.8991 2.02577 12.226 2.59314L13.2485 4.36755H15.2963C15.9505 4.36758 16.555 4.71709 16.8823 5.28357L17.5219 6.39001C17.8489 6.95668 17.8481 7.65542 17.5209 8.22205L16.4975 9.99451L17.5239 11.7689C17.8519 12.3357 17.8521 13.0347 17.5248 13.6019L16.8862 14.7084C16.559 15.2747 15.9543 15.6243 15.3002 15.6244H13.2514L12.2299 17.3988C11.9029 17.9663 11.297 18.3168 10.642 18.3168L9.3637 18.3158C8.71064 18.3155 8.10718 17.9678 7.77972 17.4027L6.74847 15.6234L4.69964 15.6244C4.04558 15.6242 3.44087 15.2747 3.1137 14.7084L2.47503 13.6019C2.14791 13.0349 2.14836 12.3366 2.47601 11.7699L3.50237 9.99548L2.47894 8.22205C2.15175 7.65533 2.15174 6.95673 2.47894 6.39001L3.11761 5.28259C3.44458 4.71663 4.04894 4.36813 4.70257 4.36755L6.75042 4.36658L7.77581 2.59119C8.10301 2.02476 8.7076 1.67527 9.36175 1.67517H10.6391ZM9.36273 3.00623C9.1835 3.00623 9.01679 3.10199 8.92718 3.2572L7.82659 5.16345C7.63652 5.49253 7.28473 5.69529 6.90472 5.69568L4.70355 5.69763C4.52451 5.69782 4.3585 5.79355 4.26898 5.94861L3.6303 7.05505C3.54091 7.2102 3.54077 7.40192 3.6303 7.55701L4.73089 9.46326C4.92108 9.7929 4.92135 10.1992 4.73089 10.5287L3.62737 12.4359C3.5378 12.591 3.53792 12.7817 3.62737 12.9369L4.26605 14.0433C4.35567 14.1982 4.52067 14.2932 4.69964 14.2933L6.90276 14.2943C7.28242 14.2946 7.63335 14.497 7.82366 14.8256L8.93011 16.7357C9.01984 16.8905 9.18578 16.9857 9.36468 16.9857H10.642C10.8213 16.9857 10.987 16.89 11.0766 16.7347L12.1752 14.8275C12.3653 14.4975 12.7182 14.2943 13.0991 14.2943H15.3002C15.4794 14.2942 15.6452 14.1985 15.7348 14.0433L16.3725 12.9379C16.4621 12.7826 16.4621 12.5911 16.3725 12.4359L15.27 10.5287C15.1032 10.2404 15.0808 9.89331 15.2055 9.59021L15.269 9.46326L16.3696 7.55701C16.4591 7.40189 16.459 7.21022 16.3696 7.05505L15.7309 5.94861C15.6412 5.79363 15.4754 5.69863 15.2963 5.69861L13.0951 5.69763L12.9535 5.68884C12.6751 5.65158 12.4217 5.50519 12.2504 5.28259L12.1723 5.16443L11.0737 3.2572C10.9841 3.10175 10.8175 3.00525 10.6381 3.00525L9.36273 3.00623Z",fill:"currentColor"}))}function Es(n="icon-sm"){return f("svg",{className:n,width:"20",height:"20",viewBox:"0 0 20 20",fill:"none","aria-hidden":!0},f("path",{d:"M10.6878 9.46029L10.8421 9.49545L17.2913 11.43L17.4642 11.4974C18.2215 11.8649 18.2705 12.9544 17.5492 13.388L17.3822 13.4701L14.5872 14.5872L13.4701 17.3822C13.1135 18.2734 11.8913 18.2756 11.4974 17.4642L11.43 17.2913L9.49544 10.8421C9.26342 10.0687 9.92452 9.34418 10.6878 9.46029ZM12.4984 16.2288L13.3929 13.9954L13.4388 13.8949C13.5579 13.6675 13.7549 13.4891 13.9954 13.3929L16.2288 12.4984L10.9007 10.9007L12.4984 16.2288ZM5.90365 12.9749C6.16329 12.7153 6.58436 12.7154 6.84408 12.9749C7.10378 13.2346 7.10378 13.6557 6.84408 13.9154L5.0765 15.6829C4.8168 15.9426 4.39577 15.9426 4.13607 15.6829C3.87654 15.4232 3.87643 15.0022 4.13607 14.7425L5.90365 12.9749ZM2.83724 7.3265L5.25228 7.97299L5.37826 8.02084C5.65484 8.1591 5.80597 8.47712 5.72298 8.78744C5.63984 9.09774 5.34997 9.298 5.04134 9.27963L4.90853 9.25814L2.49349 8.61068L2.36752 8.56283C2.09082 8.42452 1.93961 8.10666 2.02279 7.79623C2.10599 7.4859 2.39574 7.28652 2.70443 7.30502L2.83724 7.3265ZM14.847 4.05111C15.1051 3.88059 15.4556 3.90894 15.6829 4.13607C15.9426 4.39577 15.9426 4.8168 15.6829 5.0765L13.9154 6.84408C13.6557 7.10378 13.2346 7.10378 12.9749 6.84408C12.7154 6.58437 12.7153 6.16329 12.9749 5.90365L14.7425 4.13607L14.847 4.05111ZM7.79623 2.02279C8.15098 1.92773 8.51562 2.13874 8.61068 2.49349L9.25814 4.90853L9.27962 5.04135C9.298 5.34998 9.09774 5.63984 8.78744 5.72299C8.47713 5.80592 8.15908 5.65484 8.02084 5.37826L7.97298 5.25228L7.3265 2.83724L7.30502 2.70443C7.28652 2.39577 7.48595 2.10603 7.79623 2.02279Z",fill:"currentColor"}))}const yp='@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-border-style:solid;--tw-leading:initial;--tw-font-weight:initial;--tw-ordinal:initial;--tw-slashed-zero:initial;--tw-numeric-figure:initial;--tw-numeric-spacing:initial;--tw-numeric-fraction:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-backdrop-blur:initial;--tw-backdrop-brightness:initial;--tw-backdrop-contrast:initial;--tw-backdrop-grayscale:initial;--tw-backdrop-hue-rotate:initial;--tw-backdrop-invert:initial;--tw-backdrop-opacity:initial;--tw-backdrop-saturate:initial;--tw-backdrop-sepia:initial;--tw-duration:initial;--tw-ease:initial;--tw-outline-style:solid;--top-fade:0;--bottom-fade:0;--edge-fade-distance:1rem}}}@layer theme{:root,:host{--font-sans:var(--vscode-font-family,-apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif);--font-mono:var(--vscode-editor-font-family,ui-monospace, "SFMono-Regular", "SF Mono", Menlo, Consolas, monospace);--color-black:#000;--spacing:.25rem;--text-xs:11px;--text-xs--line-height:calc(1 / .75);--text-sm:12px;--text-sm--line-height:calc(1.25 / .875);--text-base:14px;--text-base--line-height: 1.5 ;--font-weight-medium:500;--radius-md:calc(var(--radius-md-base) * var(--corner-radius-scale));--radius-lg:calc(var(--radius-lg-base) * var(--corner-radius-scale));--radius-xl:calc(var(--radius-xl-base) * var(--corner-radius-scale));--radius-2xl:calc(var(--radius-2xl-base) * var(--corner-radius-scale));--radius-3xl:calc(var(--radius-3xl-base) * var(--corner-radius-scale));--shadow-xl:0px 8px 16px -4px #0000001f;--ease-out:cubic-bezier(0, 0, .2, 1);--blur-sm:8px;--blur-lg:16px;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4, 0, .2, 1);--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono);--color-token-foreground:var(--agent-text);--color-token-description-foreground:var(--agent-muted);--color-token-input-background:var(--agent-input-bg);--color-token-dropdown-background:var(--agent-surface-elevated);--color-token-border:var(--agent-border);--color-token-border-heavy:var(--agent-border-strong);--color-token-button-foreground:var(--agent-text);--color-token-button-background:var(--agent-accent);--color-token-button-secondary-foreground:var(--agent-text);--color-token-button-secondary-background:var(--agent-control);--color-token-button-secondary-hover-background:var(--agent-control-hover);--color-token-input-placeholder-foreground:var(--agent-muted);--color-token-charts-blue:var(--agent-accent);--color-token-text-tertiary:var(--agent-muted);--color-token-menu-border:var(--agent-border);--color-token-list-hover-background:var(--agent-control-hover);--color-token-side-bar-background:var(--agent-surface-elevated);--color-token-text-link-foreground:var(--agent-accent);--color-token-editor-background:var(--agent-page-bg);--corner-radius-scale:1;--radius-md-base:.5rem;--radius-lg-base:.625rem;--radius-xl-base:.75rem;--radius-2xl-base:1rem;--radius-3xl-base:1.25rem;--spacing-token-button-composer:calc(var(--spacing) * 7);--spacing-token-button-composer-sm:calc(var(--spacing) * 5);--spacing-token-button-composer-gap:var(--spacing);--h-token-button-composer-gap:var(--spacing-token-button-composer-gap)}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;tab-size:4;line-height:1.5;font-family:var(--default-font-family,ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab,red,red)){::placeholder{color:color-mix(in oklab,currentcolor 50%,transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){appearance:button}::file-selector-button{appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}}@layer components;@layer utilities{.pointer-events-auto{pointer-events:auto}.pointer-events-none{pointer-events:none}.collapse{visibility:collapse}.invisible{visibility:hidden}.visible{visibility:visible}.absolute{position:absolute}.relative{position:relative}.inset-x-0{inset-inline:calc(var(--spacing) * 0)}.top-0{top:calc(var(--spacing) * 0)}.top-1\\/2{top:50%}.right-2\\.5{right:calc(var(--spacing) * 2.5)}.bottom-0{bottom:calc(var(--spacing) * 0)}.bottom-\\[calc\\(100\\%\\+6px\\)\\]{bottom:calc(100% + 6px)}.bottom-full{bottom:100%}.left-0{left:calc(var(--spacing) * 0)}.z-10{z-index:10}.z-20{z-index:20}.z-50{z-index:50}.container{width:100%}@media(min-width:40rem){.container{max-width:40rem}}@media(min-width:48rem){.container{max-width:48rem}}@media(min-width:64rem){.container{max-width:64rem}}@media(min-width:80rem){.container{max-width:80rem}}@media(min-width:96rem){.container{max-width:96rem}}.m-px{margin:1px}.ms-1{margin-inline-start:calc(var(--spacing) * 1)}.mt-1\\.5{margin-top:calc(var(--spacing) * 1.5)}.mr-1{margin-right:calc(var(--spacing) * 1)}.mr-\\[3px\\]{margin-right:3px}.mb-1{margin-bottom:calc(var(--spacing) * 1)}.mb-2{margin-bottom:calc(var(--spacing) * 2)}.mb-px{margin-bottom:1px}.ml-1\\.5{margin-left:calc(var(--spacing) * 1.5)}.ml-auto{margin-left:auto}.box-border{box-sizing:border-box}.block{display:block}.contents{display:contents}.flex{display:flex}.grid{display:grid}.hidden{display:none}.inline{display:inline}.inline-block{display:inline-block}.inline-flex{display:inline-flex}.aspect-square{aspect-ratio:1}.size-16{width:calc(var(--spacing) * 16);height:calc(var(--spacing) * 16)}.size-\\[22px\\]{width:22px;height:22px}.size-token-button-composer{width:var(--spacing-token-button-composer);height:var(--spacing-token-button-composer)}.\\!h-auto{height:auto!important}.h-0{height:calc(var(--spacing) * 0)}.h-3{height:calc(var(--spacing) * 3)}.h-4{height:calc(var(--spacing) * 4)}.h-5{height:calc(var(--spacing) * 5)}.h-6{height:calc(var(--spacing) * 6)}.h-8{height:calc(var(--spacing) * 8)}.h-9{height:calc(var(--spacing) * 9)}.h-\\[1lh\\]{height:1lh}.h-\\[1px\\]{height:1px}.h-auto{height:auto}.h-full{height:100%}.h-token-button-composer{height:var(--spacing-token-button-composer)}.h-token-button-composer-sm{height:var(--spacing-token-button-composer-sm)}.max-h-\\[25dvh\\]{max-height:25dvh}.max-h-\\[140px\\]{max-height:140px}.max-h-none{max-height:none}.min-h-0{min-height:calc(var(--spacing) * 0)}.min-h-\\[1\\.25rem\\]{min-height:1.25rem}.w-3{width:calc(var(--spacing) * 3)}.w-4{width:calc(var(--spacing) * 4)}.w-7{width:calc(var(--spacing) * 7)}.w-52{width:calc(var(--spacing) * 52)}.w-fit{width:fit-content}.w-full{width:100%}.w-max{width:max-content}.w-px{width:1px}.max-w-16{max-width:calc(var(--spacing) * 16)}.max-w-20{max-width:calc(var(--spacing) * 20)}.max-w-40{max-width:calc(var(--spacing) * 40)}.max-w-\\[60\\%\\]{max-width:60%}.max-w-\\[77\\%\\]{max-width:77%}.max-w-\\[320px\\]{max-width:320px}.max-w-full{max-width:100%}.max-w-none{max-width:none}.min-w-0{min-width:calc(var(--spacing) * 0)}.min-w-56{min-width:calc(var(--spacing) * 56)}.min-w-max{min-width:max-content}.flex-1{flex:1}.flex-none{flex:none}.flex-shrink-0{flex-shrink:0}.shrink{flex-shrink:1}.shrink-0{flex-shrink:0}.flex-grow{flex-grow:1}.-translate-y-1\\/2{--tw-translate-y: -50% ;translate:var(--tw-translate-x) var(--tw-translate-y)}.rotate-90{rotate:90deg}.rotate-180{rotate:180deg}.cursor-default{cursor:default}.cursor-pointer{cursor:pointer}.resize{resize:both}.grid-cols-\\[auto_minmax\\(0\\,1fr\\)_auto\\]{grid-template-columns:auto minmax(0,1fr) auto}.grid-cols-\\[minmax\\(0\\,auto\\)_auto_minmax\\(0\\,1fr\\)\\]{grid-template-columns:minmax(0,auto) auto minmax(0,1fr)}.flex-col{flex-direction:column}.flex-row-reverse{flex-direction:row-reverse}.flex-wrap{flex-wrap:wrap}.items-center{align-items:center}.items-end{align-items:flex-end}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.justify-end{justify-content:flex-end}.justify-start{justify-content:flex-start}.gap-0\\.5{gap:calc(var(--spacing) * .5)}.gap-1{gap:calc(var(--spacing) * 1)}.gap-1\\.5{gap:calc(var(--spacing) * 1.5)}.gap-2{gap:calc(var(--spacing) * 2)}.gap-4{gap:calc(var(--spacing) * 4)}.gap-\\[5px\\]{gap:5px}.self-start{align-self:flex-start}.truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.overflow-clip{overflow:clip}.overflow-hidden{overflow:hidden}.overflow-visible{overflow:visible}.overflow-x-auto{overflow-x:auto}.overflow-y-auto{overflow-y:auto}.rounded{border-radius:.25rem}.rounded-2xl{border-radius:var(--radius-2xl)}.rounded-3xl{border-radius:var(--radius-3xl)}.rounded-full{border-radius:3.40282e38px}.rounded-lg{border-radius:var(--radius-lg)}.rounded-md{border-radius:var(--radius-md)}.rounded-xl{border-radius:var(--radius-xl)}.border{border-style:var(--tw-border-style);border-width:1px}.border-\\[color\\:var\\(--gray-0\\)\\]{border-color:var(--gray-0)}.border-token-border,.border-token-border\\/80{border-color:var(--color-token-border)}@supports (color:color-mix(in lab,red,red)){.border-token-border\\/80{border-color:color-mix(in oklab,var(--color-token-border) 80%,transparent)}}.border-transparent{border-color:#0000}.bg-\\[color\\:var\\(--gray-0\\)\\]{background-color:var(--gray-0)}.bg-token-border\\/70{background-color:var(--color-token-border)}@supports (color:color-mix(in lab,red,red)){.bg-token-border\\/70{background-color:color-mix(in oklab,var(--color-token-border) 70%,transparent)}}.bg-token-button-secondary-background{background-color:var(--color-token-button-secondary-background)}.bg-token-charts-blue{background-color:var(--color-token-charts-blue)}.bg-token-dropdown-background,.bg-token-dropdown-background\\/90{background-color:var(--color-token-dropdown-background)}@supports (color:color-mix(in lab,red,red)){.bg-token-dropdown-background\\/90{background-color:color-mix(in oklab,var(--color-token-dropdown-background) 90%,transparent)}}.bg-token-dropdown-background\\/95{background-color:var(--color-token-dropdown-background)}@supports (color:color-mix(in lab,red,red)){.bg-token-dropdown-background\\/95{background-color:color-mix(in oklab,var(--color-token-dropdown-background) 95%,transparent)}}.bg-token-foreground,.bg-token-foreground\\/5{background-color:var(--color-token-foreground)}@supports (color:color-mix(in lab,red,red)){.bg-token-foreground\\/5{background-color:color-mix(in oklab,var(--color-token-foreground) 5%,transparent)}}.bg-token-foreground\\/10{background-color:var(--color-token-foreground)}@supports (color:color-mix(in lab,red,red)){.bg-token-foreground\\/10{background-color:color-mix(in oklab,var(--color-token-foreground) 10%,transparent)}}.bg-token-input-background\\/90{background-color:var(--color-token-input-background)}@supports (color:color-mix(in lab,red,red)){.bg-token-input-background\\/90{background-color:color-mix(in oklab,var(--color-token-input-background) 90%,transparent)}}.bg-token-menu-border{background-color:var(--color-token-menu-border)}.bg-token-side-bar-background{background-color:var(--color-token-side-bar-background)}.\\[mask-image\\:linear-gradient\\(to_right\\,black_calc\\(100\\%_-_0\\.25rem\\)\\,transparent\\)\\]{-webkit-mask-image:linear-gradient(90deg,#000 calc(100% - .25rem),#0000);mask-image:linear-gradient(90deg,#000 calc(100% - .25rem),#0000)}.\\[mask-repeat\\:no-repeat\\]{-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat}.object-cover{object-fit:cover}.p-0\\.5{padding:calc(var(--spacing) * .5)}.p-2{padding:calc(var(--spacing) * 2)}.\\!px-0{padding-inline:calc(var(--spacing) * 0)!important}.px-0\\.5{padding-inline:calc(var(--spacing) * .5)}.px-1{padding-inline:calc(var(--spacing) * 1)}.px-1\\.5{padding-inline:calc(var(--spacing) * 1.5)}.px-2{padding-inline:calc(var(--spacing) * 2)}.px-2\\.5{padding-inline:calc(var(--spacing) * 2.5)}.px-3{padding-inline:calc(var(--spacing) * 3)}.px-\\[var\\(--padding-row-x\\)\\]{padding-inline:var(--padding-row-x)}.py-0{padding-block:calc(var(--spacing) * 0)}.py-0\\.5{padding-block:calc(var(--spacing) * .5)}.py-1{padding-block:calc(var(--spacing) * 1)}.py-1\\.5{padding-block:calc(var(--spacing) * 1.5)}.py-2{padding-block:calc(var(--spacing) * 2)}.py-\\[var\\(--padding-row-y\\)\\]{padding-block:var(--padding-row-y)}.pt-0\\.5{padding-top:calc(var(--spacing) * .5)}.pr-0{padding-right:calc(var(--spacing) * 0)}.pr-1{padding-right:calc(var(--spacing) * 1)}.pr-2{padding-right:calc(var(--spacing) * 2)}.pb-1{padding-bottom:calc(var(--spacing) * 1)}.pl-2{padding-left:calc(var(--spacing) * 2)}.pl-3{padding-left:calc(var(--spacing) * 3)}.text-left{text-align:left}.align-bottom{vertical-align:bottom}.text-base{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.\\!leading-none{--tw-leading:1!important;line-height:1!important}.leading-5{--tw-leading:calc(var(--spacing) * 5);line-height:calc(var(--spacing) * 5)}.leading-\\[18px\\]{--tw-leading:18px;line-height:18px}.leading-\\[calc\\(var\\(--codex-chat-font-size\\)\\+8px\\)\\]{--tw-leading:calc(var(--codex-chat-font-size) + 8px);line-height:calc(var(--codex-chat-font-size) + 8px)}.leading-none{--tw-leading:1;line-height:1}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.break-words{overflow-wrap:break-word}.text-ellipsis{text-overflow:ellipsis}.whitespace-nowrap{white-space:nowrap}.whitespace-pre{white-space:pre}.text-current{color:currentColor}.text-token-button-secondary-foreground{color:var(--color-token-button-secondary-foreground)}.text-token-description-foreground{color:var(--color-token-description-foreground)}.text-token-dropdown-background{color:var(--color-token-dropdown-background)}.text-token-foreground{color:var(--color-token-foreground)}.text-token-input-placeholder-foreground{color:var(--color-token-input-placeholder-foreground)}.text-token-text-tertiary{color:var(--color-token-text-tertiary)}.tabular-nums{--tw-numeric-spacing:tabular-nums;font-variant-numeric:var(--tw-ordinal,) var(--tw-slashed-zero,) var(--tw-numeric-figure,) var(--tw-numeric-spacing,) var(--tw-numeric-fraction,)}.opacity-0{opacity:0}.opacity-50{opacity:.5}.opacity-100{opacity:1}.shadow{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a), 0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-md{--tw-shadow:0px 2px 4px -1px var(--tw-shadow-color,#00000014);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-sm{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a), 0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ring-\\[0\\.5px\\]{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(.5px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ring-token-border{--tw-ring-color:var(--color-token-border)}.outline-hidden{--tw-outline-style:none;outline-style:none}@media(forced-colors:active){.outline-hidden{outline-offset:2px;outline:2px solid #0000}}.backdrop-blur-lg{--tw-backdrop-blur:blur(var(--blur-lg));-webkit-backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,)}.backdrop-blur-sm{--tw-backdrop-blur:blur(var(--blur-sm));-webkit-backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,)}.transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-opacity{transition-property:opacity;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-transform{transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.duration-200{--tw-duration:.2s;transition-duration:.2s}.ease-out{--tw-ease:var(--ease-out);transition-timing-function:var(--ease-out)}.select-none{-webkit-user-select:none;user-select:none}.\\[--edge-fade-distance\\:2rem\\]{--edge-fade-distance:2rem}.group-focus-within\\:opacity-100:is(:where(.group):focus-within *){opacity:1}@media(hover:hover){.group-hover\\:opacity-100:is(:where(.group):hover *){opacity:1}.group-hover\\/collapsed-tool-activity\\:text-token-foreground:is(:where(.group\\/collapsed-tool-activity):hover *){color:var(--color-token-foreground)}.hover\\:bg-token-button-secondary-hover-background:hover{background-color:var(--color-token-button-secondary-hover-background)}.hover\\:bg-token-editor-background\\/40:hover{background-color:var(--color-token-editor-background)}@supports (color:color-mix(in lab,red,red)){.hover\\:bg-token-editor-background\\/40:hover{background-color:color-mix(in oklab,var(--color-token-editor-background) 40%,transparent)}}.hover\\:bg-token-list-hover-background:hover{background-color:var(--color-token-list-hover-background)}.hover\\:bg-transparent:hover{background-color:#0000}.hover\\:text-token-button-foreground:hover{color:var(--color-token-button-foreground)}.hover\\:text-token-foreground:hover{color:var(--color-token-foreground)}}.focus\\:bg-token-list-hover-background:focus{background-color:var(--color-token-list-hover-background)}.focus\\:outline-none:focus{--tw-outline-style:none;outline-style:none}.focus-visible\\:outline-2:focus-visible{outline-style:var(--tw-outline-style);outline-width:2px}.focus-visible\\:outline-token-button-background:focus-visible{outline-color:var(--color-token-button-background)}@media(hover:hover){.enabled\\:hover\\:bg-token-foreground\\/80:enabled:hover{background-color:var(--color-token-foreground)}@supports (color:color-mix(in lab,red,red)){.enabled\\:hover\\:bg-token-foreground\\/80:enabled:hover{background-color:color-mix(in oklab,var(--color-token-foreground) 80%,transparent)}}.enabled\\:hover\\:bg-token-list-hover-background:enabled:hover{background-color:var(--color-token-list-hover-background)}}.disabled\\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\\:opacity-40:disabled{opacity:.4}.data-\\[state\\=checked\\]\\:translate-x-\\[14px\\][data-state=checked]{--tw-translate-x:14px;translate:var(--tw-translate-x) var(--tw-translate-y)}.data-\\[state\\=open\\]\\:bg-token-foreground\\/80[data-state=open]{background-color:var(--color-token-foreground)}@supports (color:color-mix(in lab,red,red)){.data-\\[state\\=open\\]\\:bg-token-foreground\\/80[data-state=open]{background-color:color-mix(in oklab,var(--color-token-foreground) 80%,transparent)}}.data-\\[state\\=open\\]\\:bg-token-list-hover-background[data-state=open]{background-color:var(--color-token-list-hover-background)}.data-\\[state\\=unchecked\\]\\:translate-x-\\[2px\\][data-state=unchecked]{--tw-translate-x:2px;translate:var(--tw-translate-x) var(--tw-translate-y)}@container (min-width:500px){.\\@\\[500px\\]\\:inline{display:inline}}.electron\\:rounded-md:where([data-codex-window-type=electron],[data-codex-window-type=electron] *){border-radius:var(--radius-md)}.electron\\:p-1:where([data-codex-window-type=electron],[data-codex-window-type=electron] *){padding:calc(var(--spacing) * 1)}.electron\\:shadow-\\[0_4px_16px_0_rgba\\(0\\,0\\,0\\,0\\.05\\)\\]:where([data-codex-window-type=electron],[data-codex-window-type=electron] *){--tw-shadow:0 4px 16px 0 var(--tw-shadow-color,#0000000d);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.electron\\:ring:where([data-codex-window-type=electron],[data-codex-window-type=electron] *){--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.electron\\:ring-black\\/10:where([data-codex-window-type=electron],[data-codex-window-type=electron] *){--tw-ring-color:#0000001a}@supports (color:color-mix(in lab,red,red)){.electron\\:ring-black\\/10:where([data-codex-window-type=electron],[data-codex-window-type=electron] *){--tw-ring-color:color-mix(in oklab, var(--color-black) 10%, transparent)}}@media(prefers-color-scheme:dark){.electron\\:dark\\:bg-token-dropdown-background:where([data-codex-window-type=electron],[data-codex-window-type=electron] *){background-color:var(--color-token-dropdown-background)}}.extension\\:border:where([data-codex-window-type=extension],[data-codex-window-type=extension] *){border-style:var(--tw-border-style);border-width:1px}.extension\\:border-token-border\\/50:where([data-codex-window-type=extension],[data-codex-window-type=extension] *){border-color:var(--color-token-border)}@supports (color:color-mix(in lab,red,red)){.extension\\:border-token-border\\/50:where([data-codex-window-type=extension],[data-codex-window-type=extension] *){border-color:color-mix(in oklab,var(--color-token-border) 50%,transparent)}}.\\[\\&_\\.ProseMirror\\]\\:\\!h-5 .ProseMirror{height:calc(var(--spacing) * 5)!important}.\\[\\&_\\.ProseMirror\\]\\:h-auto .ProseMirror{height:auto}.\\[\\&_\\.ProseMirror\\]\\:\\!min-h-5 .ProseMirror{min-height:calc(var(--spacing) * 5)!important}.\\[\\&_\\.ProseMirror\\]\\:min-h-\\[2rem\\] .ProseMirror{min-height:2rem}.\\[\\&_\\.ProseMirror\\]\\:min-w-0 .ProseMirror{min-width:calc(var(--spacing) * 0)}.\\[\\&_\\.ProseMirror\\]\\:flex-1 .ProseMirror{flex:1}.\\[\\&_\\.ProseMirror\\]\\:resize-none .ProseMirror{resize:none}.\\[\\&_\\.ProseMirror\\]\\:overflow-hidden .ProseMirror{overflow:hidden}.\\[\\&_\\.ProseMirror\\]\\:leading-5 .ProseMirror{--tw-leading:calc(var(--spacing) * 5);line-height:calc(var(--spacing) * 5)}.\\[\\&_\\.ProseMirror\\]\\:whitespace-nowrap .ProseMirror{white-space:nowrap}.\\[\\&_\\.ProseMirror\\]\\:focus-visible\\:outline-none .ProseMirror:focus-visible{--tw-outline-style:none;outline-style:none}.\\[\\&_\\.ProseMirror_p\\]\\:m-0 .ProseMirror p{margin:calc(var(--spacing) * 0)}.\\[\\&_\\.ProseMirror_p\\]\\:overflow-hidden .ProseMirror p{overflow:hidden}.\\[\\&_\\.ProseMirror_p\\]\\:text-ellipsis .ProseMirror p{text-overflow:ellipsis}.\\[\\&_\\.ProseMirror_p\\]\\:whitespace-nowrap .ProseMirror p{white-space:nowrap}.\\[\\&_\\.contain-inline-size\\]\\:\\[contain\\:initial\\] .contain-inline-size{contain:initial}.\\[\\&\\>\\*\\:last-child\\]\\:mb-0>:last-child{margin-bottom:calc(var(--spacing) * 0)}.\\[\\&\\>ol\\:first-child\\]\\:mt-0>ol:first-child,.\\[\\&\\>ul\\:first-child\\]\\:mt-0>ul:first-child{margin-top:calc(var(--spacing) * 0)}}@property --top-fade{syntax:"";inherits:false;initial-value:0}@property --bottom-fade{syntax:"";inherits:false;initial-value:0}@property --edge-fade-distance{syntax:"";inherits:false;initial-value:1rem}@keyframes edge-fade{0%,1%{--top-fade:0;--bottom-fade:var(--edge-fade-distance,1rem)}99%,to{--top-fade:var(--edge-fade-distance,1rem);--bottom-fade:0}}@supports (animation-timeline:--scroll-fade){.vertical-scroll-fade-mask{-webkit-mask:linear-gradient(to bottom in oklch,oklch(60% 0 0/0),oklch(85% 0 0) var(--top-fade) calc(100% - var(--bottom-fade)),oklch(60% 0 0/0));mask:linear-gradient(to bottom in oklch,oklch(60% 0 0/0),oklch(85% 0 0) var(--top-fade) calc(100% - var(--bottom-fade)),oklch(60% 0 0/0));animation-name:edge-fade;animation-timing-function:linear;animation-fill-mode:both;animation-timeline:scroll(self y)}}:root{color-scheme:dark;font-family:var(--font-sans);color:var(--agent-text,#f1f0e8);--agent-page-bg:transparent;--agent-surface:#1c1f1b57;--agent-surface-elevated:#1c1f1b7a;--agent-input-bg:#080a085c;--agent-border:#e9e7d81f;--agent-border-strong:#e9e7d838;--agent-text:#f1f0e8;--agent-muted:#f1f0e894;--agent-soft:#f1f0e8c7;--agent-accent:#8ab4f8;--agent-accent-soft:#8ab4f833;--agent-danger:#ff8d7e;--agent-shadow:#0003;--agent-card:var(--agent-input-bg);background:0 0}@supports (color:color-mix(in lab,red,red)){:root{--agent-card:color-mix(in srgb, var(--agent-input-bg) 90%, transparent)}}:root{--agent-card-hover:var(--agent-input-bg)}@supports (color:color-mix(in lab,red,red)){:root{--agent-card-hover:color-mix(in srgb, var(--agent-input-bg) 96%, transparent)}}:root{--agent-control:var(--agent-input-bg)}@supports (color:color-mix(in lab,red,red)){:root{--agent-control:color-mix(in srgb, var(--agent-input-bg) 44%, transparent)}}:root{--agent-control-hover:var(--agent-soft)}@supports (color:color-mix(in lab,red,red)){:root{--agent-control-hover:color-mix(in srgb, var(--agent-soft) 8%, transparent)}}:root{--agent-primary:var(--agent-accent)}@supports (color:color-mix(in lab,red,red)){:root{--agent-primary:color-mix(in srgb, var(--agent-accent) 90%, var(--agent-text))}}:root{--agent-primary-text:#fff;--cubic-enter:cubic-bezier(.19, 1, .22, 1);--cubic-exit-snappy:cubic-bezier(.65, 0, .4, 1);--transition-duration-basic:.15s;--gray-0:#fff;--color-background-surface:transparent;--color-background-surface-under:transparent;--color-background-elevated-primary:var(--agent-surface-elevated);--color-background-elevated-primary-opaque:var(--agent-surface-elevated)}@supports (color:color-mix(in lab,red,red)){:root{--color-background-elevated-primary-opaque:color-mix(in srgb, var(--agent-surface-elevated) 100%, #111)}}:root{--color-background-elevated-secondary:var(--agent-card);--color-background-elevated-secondary-opaque:var(--agent-card)}@supports (color:color-mix(in lab,red,red)){:root{--color-background-elevated-secondary-opaque:color-mix(in srgb, var(--agent-card) 100%, #111)}}:root{--thread-content-max-width:none;--markdown-wide-block-max-width:56rem;--padding-toolbar:calc(var(--spacing) * 4);--vscode-foreground:var(--agent-text);--vscode-descriptionForeground:var(--agent-muted);--vscode-input-background:var(--agent-input-bg);--vscode-dropdown-background:var(--agent-surface-elevated);--vscode-input-placeholderForeground:var(--agent-muted);--vscode-textLink-foreground:var(--agent-accent);--vscode-textLink-activeForeground:var(--agent-accent);--vscode-list-hoverBackground:var(--agent-control-hover);--color-token-editor-foreground:var(--agent-text);--color-token-editor-background:var(--agent-page-bg);--color-token-side-bar-background:var(--agent-surface-elevated);--color-token-main-surface-primary:transparent;--color-token-text-code-block-background:var(--agent-input-bg);--color-token-bg-primary:var(--agent-surface-elevated);--color-token-bg-secondary:var(--agent-card);--color-token-bg-fog:var(--color-background-elevated-secondary);--color-token-bg-tertiary:var(--agent-control);--color-token-list-hover-background:var(--agent-control-hover);--markdown-wide-block-max-height:80vh;--conversation-block-gap:12px;--conversation-tool-assistant-gap:16px;--color-token-terminal-ansi-black:var(--vscode-terminal-ansiBlack,#000);--color-token-terminal-ansi-red:var(--vscode-terminal-ansiRed,#f66);--color-token-terminal-ansi-green:var(--vscode-terminal-ansiGreen,#94f494);--color-token-terminal-ansi-yellow:var(--vscode-terminal-ansiYellow,#f4f47b);--color-token-terminal-ansi-blue:var(--vscode-terminal-ansiBlue,#9e9eff);--color-token-terminal-ansi-magenta:var(--vscode-terminal-ansiMagenta,#db6bdb);--color-token-terminal-ansi-cyan:var(--vscode-terminal-ansiCyan,#81eeee);--color-token-terminal-ansi-white:var(--vscode-terminal-ansiWhite,#d6d6d6);--color-token-terminal-ansi-bright-black:var(--vscode-terminal-ansiBrightBlack,#6e6e6e);--color-token-terminal-ansi-bright-red:var(--vscode-terminal-ansiBrightRed,#ffa8a8);--color-token-terminal-ansi-bright-green:var(--vscode-terminal-ansiBrightGreen,#0f0);--color-token-terminal-ansi-bright-yellow:var(--vscode-terminal-ansiBrightYellow,#ffffa8);--color-token-terminal-ansi-bright-blue:var(--vscode-terminal-ansiBrightBlue,#9494ff);--color-token-terminal-ansi-bright-magenta:var(--vscode-terminal-ansiBrightMagenta,#ffb3ff);--color-token-terminal-ansi-bright-cyan:var(--vscode-terminal-ansiBrightCyan,#adffff);--color-token-terminal-ansi-bright-white:var(--vscode-terminal-ansiBrightWhite,#fff);--padding-row-x:calc(var(--spacing) * 2);--padding-row-y:calc(var(--spacing) * 1.25);--height-token-nav-row:32px;--codex-chat-font-size:var(--vscode-chat-font-size,var(--vscode-font-size,13px));--codex-chat-code-font-size:var(--vscode-chat-editor-font-size,var(--vscode-editor-font-size,12px))}:root[data-codex-window-type=electron]{background:0 0;overflow:hidden}:root[data-codex-window-type=electron] body{--padding-row-y:calc(var(--spacing) * 1.25);--height-token-nav-row:calc(var(--text-base) * 1.5 + var(--padding-row-y) * 2);--padding-panel-base:calc(var(--spacing) * 5);--padding-panel:var(--padding-panel-base);--thread-content-max-width:48rem;--markdown-wide-block-max-width:56rem;--markdown-wide-block-max-height:80vh;--conversation-block-gap:12px;--conversation-tool-assistant-gap:16px;--spacing-token-button-composer-sm:calc(var(--spacing) * 7);--text-heading-md:18px;--cursor-interaction:default;--vscode-editor-font-family:ui-monospace, "SFMono-Regular", "SF Mono", Menlo, Consolas, "Liberation Mono", monospace;--vscode-font-size:var(--text-base);--vscode-editor-font-size:var(--text-sm);--vscode-chat-font-size:var(--vscode-font-size);--vscode-chat-editor-font-size:var(--vscode-editor-font-size);overscroll-behavior:none;overflow:hidden}:root[data-codex-window-type=electron]:not([data-codex-os=win32]) body{background:0 0}*{box-sizing:border-box}html,body,#root{background:0 0;height:100%}body{min-width:0;color:var(--agent-text);font-family:var(--font-sans);font-size:var(--text-base);font-weight:var(--vscode-font-weight,400);margin:0;overflow:hidden}button,select,textarea{font:inherit}button,select{cursor:default}.agent-shell{height:100%;min-height:100%;padding:var(--padding-toolbar);color:var(--agent-text);background:var(--agent-page-bg);flex-direction:column;display:flex}.agent-log,.log,.agent-thread{width:100%;min-height:0;max-width:var(--thread-content-max-width);scrollbar-width:thin;scrollbar-color:var(--agent-muted) transparent;background:0 0;flex:auto;margin:0 auto;padding:6px 2px 18px;overflow:auto}@supports (color:color-mix(in lab,red,red)){.agent-log,.log,.agent-thread{scrollbar-color:color-mix(in srgb,var(--agent-muted) 28%,transparent) transparent}}.agent-thread{gap:var(--conversation-block-gap,12px);flex-direction:column;padding-top:10px;padding-bottom:24px;display:flex;position:relative;overflow-x:hidden}:root[data-codex-window-type=electron] .agent-thread{--color-token-description-foreground:var(--color-token-foreground)}@supports (color:color-mix(in lab,red,red)){:root[data-codex-window-type=electron] .agent-thread{--color-token-description-foreground:color-mix(in srgb, var(--color-token-foreground) 70%, transparent)}}.agent-thread[data-empty]{justify-content:flex-end}.text-size-chat{font-size:var(--codex-chat-font-size)}.text-size-chat-sm{font-size:calc(var(--codex-chat-font-size) - 1px)}.text-size-code{font-size:var(--codex-chat-code-font-size)}.text-size-code-sm{font-size:calc(var(--codex-chat-code-font-size) - 1px)}.font-vscode-editor{font-family:var(--vscode-editor-font-family,var(--font-mono))}.codex-user-turn,.codex-assistant-turn,.codex-notice-turn{width:100%;min-width:0}.codex-user-bubble{color:var(--color-token-foreground);background:var(--color-token-foreground)}@supports (color:color-mix(in lab,red,red)){.codex-user-bubble{background:color-mix(in srgb,var(--color-token-foreground) 5%,transparent)}}.codex-user-message-content[data-collapsed=true]{-webkit-line-clamp:20;-webkit-box-orient:vertical;max-height:20lh;display:-webkit-box;overflow:hidden}.codex-user-message-toggle{background:0 0;border:0;padding:0}.codex-assistant-turn{justify-content:flex-start;display:flex}.codex-assistant-message{max-width:100%;color:var(--color-token-foreground);white-space:normal;overflow-wrap:anywhere}.codex-assistant-message-streaming{white-space:break-spaces}.codex-assistant-message :where(p){margin:0 0 .85em}.codex-assistant-message :where(p:last-child){margin-bottom:0}.codex-assistant-message :where(ul,ol){margin:.45em 0 .85em;padding-left:1.35rem}.codex-assistant-message :where(ul){list-style:outside}.codex-assistant-message :where(ol){list-style:decimal}.codex-assistant-message :where(li){margin:.25em 0}.codex-assistant-message :where(blockquote){border-left:2px solid var(--color-token-border);color:var(--agent-soft);margin:.75em 0;padding-left:.85rem}.codex-assistant-message :where(code){background:var(--agent-soft);border-radius:4px;padding:.12em .3em}@supports (color:color-mix(in lab,red,red)){.codex-assistant-message :where(code){background:color-mix(in srgb,var(--agent-soft) 10%,transparent)}}.codex-assistant-message :where(code){font-family:var(--font-mono);font-size:var(--codex-chat-code-font-size)}.codex-assistant-message :where(pre){border:1px solid var(--agent-border);margin:.75em 0;padding:.65rem .75rem;overflow-x:auto}@supports (color:color-mix(in lab,red,red)){.codex-assistant-message :where(pre){border:1px solid color-mix(in srgb,var(--agent-border) 72%,transparent)}}.codex-assistant-message :where(pre){border-radius:var(--radius-lg);background:var(--agent-input-bg)}@supports (color:color-mix(in lab,red,red)){.codex-assistant-message :where(pre){background:color-mix(in srgb,var(--agent-input-bg) 82%,transparent)}}.codex-assistant-message :where(pre code){white-space:pre;background:0 0;border-radius:0;padding:0;display:block}.codex-assistant-message :where(a){color:var(--agent-accent);text-underline-offset:2px;text-decoration:underline}.codex-assistant-message :where(hr){border-top:1px solid var(--color-token-border);margin:1rem 0}.codex-notice-turn{justify-content:flex-start;display:flex}.codex-notice-content{border:1px solid var(--agent-border);max-width:min(100%,44rem);padding:10px 12px}@supports (color:color-mix(in lab,red,red)){.codex-notice-content{border:1px solid color-mix(in srgb,var(--agent-border) 74%,transparent)}}.codex-notice-content{border-radius:var(--radius-lg);color:var(--agent-soft);background:var(--agent-surface-elevated)}@supports (color:color-mix(in lab,red,red)){.codex-notice-content{background:color-mix(in srgb,var(--agent-surface-elevated) 86%,transparent)}}.codex-notice-content{overflow-wrap:anywhere}.codex-notice-turn.error .codex-notice-content{border-color:var(--agent-danger)}@supports (color:color-mix(in lab,red,red)){.codex-notice-turn.error .codex-notice-content{border-color:color-mix(in srgb,var(--agent-danger) 46%,transparent)}}.codex-notice-turn.error .codex-notice-content{color:var(--agent-danger)}@supports (color:color-mix(in lab,red,red)){.codex-notice-turn.error .codex-notice-content{color:color-mix(in srgb,var(--agent-danger) 88%,var(--agent-text))}}.codex-notice-turn.error .codex-notice-content{background:var(--agent-danger)}@supports (color:color-mix(in lab,red,red)){.codex-notice-turn.error .codex-notice-content{background:color-mix(in srgb,var(--agent-danger) 11%,transparent)}}.codex-notice-turn.warning .codex-notice-content{border-color:var(--agent-accent)}@supports (color:color-mix(in lab,red,red)){.codex-notice-turn.warning .codex-notice-content{border-color:color-mix(in srgb,var(--agent-accent) 30%,transparent)}}.codex-tool-activity-turn{flex-direction:column;align-items:flex-start;gap:0;width:100%;min-width:0;display:flex}.codex-tool-activity-summary{max-width:100%;color:var(--color-token-foreground);border:0;padding:0}@supports (color:color-mix(in lab,red,red)){.codex-tool-activity-summary{color:color-mix(in srgb,var(--color-token-foreground) 40%,transparent)}}.codex-tool-activity-summary{font:inherit;font-size:var(--codex-chat-font-size);line-height:calc(var(--codex-chat-font-size) + 8px);background:0 0}.codex-tool-activity-summary:focus-visible{outline:none}.codex-tool-activity-turn.inProgress .codex-tool-activity-summary{color:var(--color-token-description-foreground)}@supports (color:color-mix(in lab,red,red)){.codex-tool-activity-turn.inProgress .codex-tool-activity-summary{color:color-mix(in srgb,var(--color-token-description-foreground) 90%,transparent)}}.codex-tool-activity-icon{color:var(--color-token-foreground);justify-content:center;align-items:center;display:inline-flex}@supports (color:color-mix(in lab,red,red)){.codex-tool-activity-icon{color:color-mix(in srgb,var(--color-token-foreground) 35%,transparent)}}.codex-tool-activity-icon{font-family:var(--font-mono);font-size:11px;line-height:1}.codex-tool-activity-turn.inProgress .codex-tool-activity-icon{animation:1.2s ease-in-out infinite codex-tool-activity-pulse}.codex-tool-activity-text{align-items:baseline;gap:4px;min-width:0;max-width:100%;display:inline-flex}.codex-tool-activity-action{color:var(--color-token-foreground);flex:none}@supports (color:color-mix(in lab,red,red)){.codex-tool-activity-action{color:color-mix(in srgb,var(--color-token-foreground) 58%,transparent)}}.codex-tool-activity-detail{min-width:0;color:var(--color-token-foreground);overflow:hidden}@supports (color:color-mix(in lab,red,red)){.codex-tool-activity-detail{color:color-mix(in srgb,var(--color-token-foreground) 40%,transparent)}}.codex-tool-activity-detail{font-family:var(--font-mono);text-overflow:ellipsis;white-space:nowrap}.codex-tool-activity-summary:hover .codex-tool-activity-action,.codex-tool-activity-summary:hover .codex-tool-activity-detail,.codex-tool-activity-summary:hover .codex-tool-activity-icon{color:var(--color-token-foreground)}.codex-tool-activity-output-shell{opacity:0;pointer-events:none;grid-template-rows:0fr;width:100%;min-width:0;transition:grid-template-rows .18s ease-out,opacity .18s ease-out;display:grid;overflow:hidden}.codex-tool-activity-output-shell[data-expanded=true]{opacity:1;pointer-events:auto;grid-template-rows:1fr}.codex-tool-activity-output-shell-inner{min-height:0;overflow:hidden}.codex-tool-activity-output-frame{min-height:1.25rem;padding-right:0;position:relative}.codex-tool-activity-output{box-sizing:border-box;max-width:min(100%,var(--markdown-wide-block-max-width));max-height:140px;color:var(--color-token-description-foreground);white-space:pre;--edge-fade-distance:2rem;background:0 0;border:0;border-radius:0;flex-direction:column;gap:6px;margin:0;padding:8px;font-weight:500;display:flex;overflow:auto}.codex-tool-output-copy:focus-visible{opacity:1}@keyframes codex-tool-activity-pulse{0%,to{opacity:.45}50%{opacity:1}}.agent-log-line,.log-line{border-bottom:1px solid var(--agent-border);grid-template-columns:4.5rem minmax(0,1fr);gap:12px;padding:9px 0;display:grid}@supports (color:color-mix(in lab,red,red)){.agent-log-line,.log-line{border-bottom:1px solid color-mix(in srgb,var(--agent-border) 55%,transparent)}}.agent-log-line,.log-line{color:var(--agent-soft);font-family:var(--font-mono);font-size:12px;line-height:1.5}.agent-log-line:last-child,.log-line:last-child{border-bottom-color:#0000}.agent-log-label,.log-label{color:var(--agent-muted);text-overflow:ellipsis;text-transform:uppercase;overflow:hidden}.agent-log-line.stdout .agent-log-label,.log-line.stdout .log-label{color:var(--agent-accent)}.agent-log-line.stderr .agent-log-label,.agent-log-line.error .agent-log-label,.log-line.stderr .log-label,.log-line.error .log-label{color:var(--agent-danger)}.agent-log-text,.log-text{overflow-wrap:anywhere;white-space:pre-wrap;word-break:normal;min-width:0}.agent-composer-stack{width:100%;max-width:var(--thread-content-max-width);gap:6px;margin:0 auto;display:grid}.above-composer-suggestion-shell{container-type:inline-size}.codex-composer-frame{--composer-top-tray-inline-padding:12px;--composer-top-tray-top-padding:14px;--composer-top-tray-max-height:177px}.codex-composer-surface{color:var(--color-token-foreground)}.codex-composer-inner{isolation:isolate}@supports (corner-shape:superellipse(1.5)){:root{--corner-radius-scale:1.25}.codex-composer-surface,.codex-user-bubble,.codex-notice-content,.provider-dropdown,.provider-dropdown-item,.add-context-dropdown,.add-context-item,.composer-attachment-file,.composer-attachment-image,.rate-limit-popover,.codex-top-tray-panel,.codex-top-tray-item{corner-shape:superellipse(1.5)}}.codex-composer-single-line{min-height:0}.composer-single-line-measure{pointer-events:none;visibility:hidden;white-space:pre;width:max-content;max-width:none;height:0;font-family:var(--font-sans);font-size:var(--text-base);line-height:20px;position:absolute;overflow:hidden}.h-token-button-composer{height:var(--spacing-token-button-composer);gap:var(--h-token-button-composer-gap)}.h-token-button-composer-sm{height:var(--spacing-token-button-composer-sm);gap:var(--h-token-button-composer-gap)}.size-token-button-composer{width:var(--spacing-token-button-composer);height:var(--spacing-token-button-composer)}.size-token-button-composer-sm{width:var(--spacing-token-button-composer-sm);height:var(--spacing-token-button-composer-sm)}.icon-3xs{width:10px;height:10px}.icon-xxs{width:12px;height:12px}.icon-2xs{width:14px;height:14px}.icon-xs{width:16px;height:16px}.icon-sm{width:18px;height:18px}.icon-base{width:20px;height:20px}.icon-md{width:24px;height:24px}.icon-lg{width:28px;height:28px}.cursor-interaction{cursor:var(--cursor-interaction)}.no-drag{-webkit-app-region:no-drag}.outline-hidden{outline-offset:2px;outline:2px solid #0000}.user-select-none{-webkit-user-select:none;user-select:none}.shadow-xl-spread{--tw-shadow:0px 0px 0px .5px var(--tw-shadow-color,var(--color-token-border)), var(--shadow-xl);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}._content_1hiti_1{--dropdown-content-inset:2px;--dropdown-content-start-transform:translateY(calc(var(--dropdown-content-inset) * -1)) scale(.98);transform-origin:var(--radix-dropdown-menu-content-transform-origin);will-change:opacity,transform}._content_1hiti_1[data-side=top]{--dropdown-content-start-transform:translateY(var(--dropdown-content-inset)) scale(.98)}._content_1hiti_1[data-side=right]{--dropdown-content-start-transform:translateX(calc(var(--dropdown-content-inset) * -1)) scale(.98)}._content_1hiti_1[data-side=left]{--dropdown-content-start-transform:translateX(var(--dropdown-content-inset)) scale(.98)}@media(prefers-reduced-motion:no-preference){._content_1hiti_1[data-state=open]{animation:_dropdown-content-enter_1hiti_1 var(--transition-duration-basic) var(--cubic-enter)}}@keyframes _dropdown-content-enter_1hiti_1{0%{opacity:0;transform:var(--dropdown-content-start-transform)}to{opacity:1;transform:translate(0)translateY(0)scale(1)}}.hide-scrollbar{scrollbar-width:none}.hide-scrollbar::-webkit-scrollbar{display:none}.prompt-input{resize:none;width:100%;min-height:2.75rem;max-height:200px;color:var(--color-token-foreground);font-size:var(--text-base);background:0 0;border:0;outline:none;padding:0;line-height:20px;display:block}.prompt-input::placeholder{color:var(--color-token-input-placeholder-foreground)}@supports (color:color-mix(in lab,red,red)){.prompt-input::placeholder{color:color-mix(in srgb,var(--color-token-input-placeholder-foreground) 50%,transparent)}}.ProseMirror{min-width:0;color:var(--agent-text);caret-color:var(--agent-text);font-variant-ligatures:none;font-feature-settings:"liga" 0;white-space:pre-wrap;white-space:break-spaces;word-wrap:break-word;word-break:normal;background:0 0;outline:none;position:relative;overflow-y:auto}.ProseMirror pre{white-space:pre-wrap}.ProseMirror li{position:relative}.ProseMirror-hideselection{caret-color:#0000;background:0 0}.ProseMirror-hideselection ::selection{caret-color:#0000;background:0 0}.ProseMirror [draggable][contenteditable=false]{-webkit-user-select:text;user-select:text}.ProseMirror-selectednode{outline:2px solid #8cf}li.ProseMirror-selectednode{outline:none}li.ProseMirror-selectednode:after{content:"";pointer-events:none;border:2px solid #8cf;position:absolute;inset:-2px -2px -2px -32px}img.ProseMirror-separator{border:none!important;margin:0!important;display:inline!important}.ProseMirror p{margin:0}.ProseMirror .placeholder{pointer-events:none;-webkit-user-select:none;user-select:none;position:relative}.ProseMirror .placeholder:after{color:var(--color-token-input-placeholder-foreground);content:attr(data-placeholder);opacity:.5;pointer-events:none;-webkit-user-select:none;user-select:none;white-space:nowrap;text-overflow:ellipsis;max-width:100%;position:absolute;inset:0 0 auto;overflow:hidden}.ProseMirror .placeholder::selection{color:inherit;background:0 0}.ProseMirror .placeholder ::selection{color:inherit;background:0 0}.ProseMirror .ProseMirror-selectednode:has([skill-mention-name]){outline:none}.prompt-editor-mention{--inline-mention-base-color:var(--color-token-text-link-foreground)}@supports (color:color-mix(in lab,red,red)){.prompt-editor-mention{--inline-mention-base-color:color-mix(in srgb, var(--color-token-text-link-foreground) 80%, var(--color-token-foreground) 20%)}}.prompt-editor-mention{--inline-mention-color:var(--inline-mention-resolved-base-color,var(--inline-mention-base-color));max-width:100%;color:var(--inline-mention-color);vertical-align:baseline;white-space:nowrap;align-items:baseline;display:inline-flex}.prompt-editor-mention:hover{text-underline-offset:2px;text-decoration-line:underline;text-decoration-style:dashed;text-decoration-thickness:.5px}.prompt-editor-mention-icon{color:currentColor}[cmdk-dialog],[cmdk-dialog]:focus-visible{outline:none}[cmdk-root],[data-cmdk-root]{z-index:1000;gap:var(--spacing);min-width:100%;padding:var(--spacing);border:1px solid var(--color-token-border);border-radius:var(--radius-3xl);color:var(--color-token-foreground);background-color:var(--color-token-dropdown-background);flex-direction:column;display:flex}@supports (color:color-mix(in lab,red,red)){[cmdk-root],[data-cmdk-root]{background-color:color-mix(in oklab,var(--color-token-dropdown-background) 95%,transparent)}}[cmdk-root],[data-cmdk-root]{font-size:var(--text-sm);opacity:1;-webkit-user-select:none;user-select:none;-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);--cmdk-bottom-item-radius:calc(var(--radius-3xl) - var(--spacing));transform:translateZ(0)}[cmdk-item]{content-visibility:auto;width:100%;min-height:calc(var(--spacing) * 6);padding:var(--padding-row-y) var(--padding-row-x);border-radius:var(--radius-lg);color:var(--color-token-foreground);cursor:var(--cursor-interaction);opacity:.75;-webkit-user-select:none;user-select:none;outline:none;flex-direction:row;align-items:center;display:flex}[cmdk-item][aria-disabled=true],[cmdk-item][data-disabled=true]{cursor:default;opacity:.25}[cmdk-item]:hover:not([aria-disabled=true]),[cmdk-item][data-selected=true],[cmdk-item][aria-selected=true],[cmdk-item]:focus-visible,[cmdk-item]:active:not([aria-disabled=true]){background-color:var(--color-token-list-hover-background);opacity:1}[cmdk-item][data-command-menu-loading=true],[cmdk-item][data-command-menu-loading=true]:hover,[cmdk-item][data-command-menu-loading=true][data-selected=true],[cmdk-item][data-command-menu-loading=true][aria-selected=true],[cmdk-item][data-command-menu-loading=true]:focus-visible,[cmdk-item][data-command-menu-loading=true]:active{cursor:default;opacity:.6;background-color:#0000}[cmdk-item][data-command-menu-empty-state=true],[cmdk-item][data-command-menu-empty-state=true]:hover,[cmdk-item][data-command-menu-empty-state=true][data-selected=true],[cmdk-item][data-command-menu-empty-state=true][aria-selected=true],[cmdk-item][data-command-menu-empty-state=true]:focus-visible,[cmdk-item][data-command-menu-empty-state=true]:active{cursor:default;opacity:1;background-color:#0000}[cmdk-list]{min-height:0;max-height:min(300px,var(--cmdk-list-height,300px));gap:var(--spacing);overscroll-behavior:contain;scrollbar-width:none;flex-direction:column;transition:max-height .1s;display:flex;overflow-y:auto}[cmdk-list]:focus-visible{outline:none}.command-menu-dialog [cmdk-list]{max-height:var(--command-menu-list-max-height);scroll-padding-block-start:calc(var(--spacing) * 8)}.composer-home-top-menu [cmdk-list]{max-height:none}.composer-home-top-menu{max-height:min(320px,var(--composer-top-menu-max-height,320px));overflow:hidden}:where([cmdk-list])>[cmdk-item]:not(:has(~[cmdk-item],~[cmdk-group]:not([hidden]))),:where([cmdk-list])>[cmdk-group]:not([hidden]):not(:has(~[cmdk-item],~[cmdk-group]:not([hidden]))) [cmdk-item]:last-of-type,:where([cmdk-list])>[cmdk-list-sizer]>[cmdk-item]:not(:has(~[cmdk-item],~[cmdk-group]:not([hidden]))),:where([cmdk-list])>[cmdk-list-sizer]>[cmdk-group]:not([hidden]):not(:has(~[cmdk-item],~[cmdk-group]:not([hidden]))) [cmdk-item]:last-of-type{border-bottom-right-radius:var(--cmdk-bottom-item-radius);border-bottom-left-radius:var(--cmdk-bottom-item-radius)}[cmdk-input]{padding:calc(var(--spacing) * 1.5) calc(var(--spacing) * 2.5)}[cmdk-input]:focus-visible{outline:none}[cmdk-empty],[data-cmdk-empty]{min-height:calc(var(--spacing) * 8);padding:calc(var(--spacing) * 1.5) calc(var(--spacing) * 2.5);color:var(--color-token-description-foreground);text-align:center;white-space:pre-wrap;align-items:center;line-height:1.4;display:flex}[data-codex-window-type=electron] [cmdk-root],[data-codex-window-type=electron] [data-cmdk-root]{font-size:var(--text-base)}.codex-attachment-tray{scrollbar-width:none}.codex-attachment-tray::-webkit-scrollbar{display:none}.codex-user-attachment-tray{max-width:77%}.codex-user-attachment-tray .codex-attachment-row{justify-content:flex-end;min-width:0}.composer-attachment-image{border:1px solid var(--color-token-border-heavy);border-radius:var(--radius-lg);background:var(--color-token-input-background);flex:none;width:80px;height:80px;display:inline-flex;position:relative;overflow:visible}.composer-attachment-image img{border-radius:calc(var(--radius-lg) - 1px);object-fit:cover;width:100%;height:100%}.composer-attachment-file{border:.5px solid var(--color-token-border-heavy);flex:none;align-items:center;gap:7px;max-width:min(220px,70vw);height:32px;padding:0 30px 0 10px;display:inline-flex;position:relative}@supports (color:color-mix(in lab,red,red)){.composer-attachment-file{border:.5px solid color-mix(in srgb,var(--color-token-border-heavy) 80%,transparent)}}.composer-attachment-file{border-radius:var(--radius-lg);color:var(--color-token-foreground);background:var(--color-token-dropdown-background)}@supports (color:color-mix(in lab,red,red)){.composer-attachment-file{background:color-mix(in srgb,var(--color-token-dropdown-background) 90%,transparent)}}.composer-attachment-file-icon{color:var(--color-token-description-foreground);flex:none;display:inline-flex}.composer-attachment-file-label{min-width:0;font-size:var(--text-sm);text-overflow:ellipsis;white-space:nowrap;font-weight:500;line-height:1rem;overflow:hidden}.composer-attachment-remove{border:.5px solid var(--color-token-border-heavy);justify-content:center;align-items:center;width:18px;height:18px;display:inline-flex;position:absolute;top:-7px;right:-7px}@supports (color:color-mix(in lab,red,red)){.composer-attachment-remove{border:.5px solid color-mix(in srgb,var(--color-token-border-heavy) 70%,transparent)}}.composer-attachment-remove{color:var(--color-token-foreground);background:var(--color-token-dropdown-background);border-radius:999px;box-shadow:0 1px 3px #0000002e}.composer-attachment-remove:hover,.composer-attachment-remove:focus-visible{background:var(--color-token-list-hover-background)}.codex-left-rail,.codex-secondary-controls,.codex-action-cluster,.model-picker,.rate-line{align-items:center;display:flex}.codex-left-rail{scrollbar-width:none;flex:0 auto;min-width:0;margin:0;padding:0;overflow-x:auto}.codex-left-rail::-webkit-scrollbar{display:none}.composer-mode-indicator{color:var(--color-token-text-link-foreground);flex:0 auto}.composer-mode-divider{background:var(--color-token-border);width:1px;height:1rem;margin:0 1px}@supports (color:color-mix(in lab,red,red)){.composer-mode-divider{background:color-mix(in srgb,var(--color-token-border) 70%,transparent)}}.composer-mode-button{min-width:0;color:var(--color-token-text-link-foreground)}.composer-mode-icon{flex:none;justify-content:center;align-items:center;display:inline-flex}.composer-mode-icon-hover,.composer-mode-button:hover .composer-mode-icon-default,.composer-mode-button:focus-visible .composer-mode-icon-default{display:none}.composer-mode-button:hover .composer-mode-icon-hover,.composer-mode-button:focus-visible .composer-mode-icon-hover{display:inline-flex}.composer-mode-label{color:currentColor;font-weight:500}.composer-context-indicator{color:var(--color-token-text-link-foreground);flex:0 auto}.composer-context-divider{background:var(--color-token-border);margin:0 1px}@supports (color:color-mix(in lab,red,red)){.composer-context-divider{background:color-mix(in srgb,var(--color-token-border) 70%,transparent)}}.composer-context-button{color:var(--color-token-text-link-foreground)}.composer-context-icon{justify-content:center;align-items:center;display:inline-flex}.composer-context-icon-hover,.composer-context-button:hover .composer-context-icon-default,.composer-context-button:focus-visible .composer-context-icon-default{display:none}.composer-context-button:hover .composer-context-icon-hover,.composer-context-button:focus-visible .composer-context-icon-hover{display:inline-flex}.composer-context-label{color:currentColor;font-weight:500}.codex-secondary-controls{flex:0 auto;justify-content:flex-end}.codex-action-cluster{flex:none;justify-content:flex-end}.model-picker-root{flex:none;align-items:center;display:inline-flex}.model-picker,.codex-tool,.codex-action{outline:none;flex:none;justify-content:center;align-items:center;display:inline-flex;position:relative}.codex-tool,.codex-action{line-height:18px}.model-picker{letter-spacing:0;white-space:nowrap;min-width:0;max-width:10rem}.model-icon{border:1px solid var(--agent-border-strong);flex:none;justify-content:center;align-items:center;width:18px;height:18px;display:inline-flex}@supports (color:color-mix(in lab,red,red)){.model-icon{border:1px solid color-mix(in srgb,var(--agent-border-strong) 70%,transparent)}}.model-icon{color:var(--agent-text);background:var(--agent-control);border-radius:999px;font-size:10px;font-weight:750;line-height:1}.model-label{min-width:0;color:var(--color-token-foreground);text-overflow:ellipsis;overflow:hidden}.model-chevron{color:var(--color-token-input-placeholder-foreground);flex:none;line-height:1}.provider-dropdown{z-index:50;border:.5px solid var(--color-token-menu-border);width:13rem;max-height:min(250px,100vh - 16px);position:absolute;bottom:calc(100% + 6px);left:0}@supports (color:color-mix(in lab,red,red)){.provider-dropdown{border:.5px solid color-mix(in srgb,var(--color-token-menu-border) 78%,transparent)}}.provider-dropdown{border-radius:var(--radius-xl);color:var(--color-token-foreground);background:var(--color-token-dropdown-background)}@supports (color:color-mix(in lab,red,red)){.provider-dropdown{background:color-mix(in srgb,var(--color-token-dropdown-background) 90%,transparent)}}.provider-dropdown{-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px)}.provider-dropdown-title{min-height:24px;padding:var(--padding-row-y) var(--padding-row-x);color:var(--color-token-description-foreground);font-size:var(--text-sm);text-overflow:ellipsis;white-space:nowrap;align-items:center;line-height:1rem;display:flex;overflow:hidden}.provider-dropdown-item{width:100%;color:var(--color-token-foreground);text-align:left;background:0 0;border:0}.provider-dropdown-item:hover,.provider-dropdown-item:focus,.provider-dropdown-item[data-selected=true]{background:var(--color-token-list-hover-background)}.provider-dropdown-check{color:var(--color-token-foreground)}.permissions-root{flex:0 auto;min-width:0;display:inline-flex;position:relative}.permissions-trigger{color:var(--color-token-input-placeholder-foreground)}.permissions-trigger[data-permission-mode=auto-review],.permissions-item[data-permission-mode=auto-review] .permissions-item-icon{color:var(--color-token-text-link-foreground)}.permissions-trigger[data-permission-mode=full-access],.permissions-item[data-permission-mode=full-access] .permissions-item-icon{color:var(--agent-danger)}.permissions-trigger-label{color:currentColor;font-weight:500}.permissions-trigger-chevron{color:currentColor;opacity:.72}.permissions-dropdown{z-index:50;border:.5px solid var(--color-token-menu-border);width:13.5rem;max-height:min(250px,100vh - 16px);position:absolute;bottom:calc(100% + 6px);left:0;overflow-y:auto}@supports (color:color-mix(in lab,red,red)){.permissions-dropdown{border:.5px solid color-mix(in srgb,var(--color-token-menu-border) 78%,transparent)}}.permissions-dropdown{border-radius:var(--radius-xl);color:var(--color-token-foreground);background:var(--color-token-dropdown-background)}@supports (color:color-mix(in lab,red,red)){.permissions-dropdown{background:color-mix(in srgb,var(--color-token-dropdown-background) 90%,transparent)}}.permissions-dropdown{-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px)}.permissions-item{width:100%;min-height:calc(var(--spacing) * 8);align-items:center;gap:calc(var(--spacing) * 2);color:var(--color-token-foreground);text-align:left;background:0 0;border:0;display:flex}.permissions-item:hover,.permissions-item:focus-visible,.permissions-item[data-selected=true]{background:var(--color-token-list-hover-background)}.permissions-item-icon,.permissions-item-check{color:var(--color-token-description-foreground);justify-content:center;align-items:center;display:inline-flex}.permissions-item-label{color:var(--color-token-foreground);font-weight:500}.add-context-root{flex:none;display:inline-flex;position:relative}.add-context-dropdown{z-index:50;border:.5px solid var(--color-token-menu-border);width:max-content;min-width:120px;max-width:min(320px,100vw - 16px);max-height:min(270px,100vh - 16px);position:absolute;bottom:calc(100% + 6px);left:-8px;overflow-y:auto}@supports (color:color-mix(in lab,red,red)){.add-context-dropdown{border:.5px solid color-mix(in srgb,var(--color-token-menu-border) 78%,transparent)}}.add-context-dropdown{border-radius:var(--radius-xl);color:var(--color-token-foreground);background:var(--color-token-dropdown-background)}@supports (color:color-mix(in lab,red,red)){.add-context-dropdown{background:color-mix(in srgb,var(--color-token-dropdown-background) 90%,transparent)}}.add-context-dropdown{-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px)}.add-context-item{width:100%;min-height:calc(var(--spacing) * 8);align-items:center;gap:calc(var(--spacing) * 1.5);color:var(--color-token-foreground);cursor:var(--cursor-interaction);text-align:left;background:0 0;border:0;display:flex}.add-context-item:hover,.add-context-item:focus-visible{background:var(--color-token-list-hover-background)}.add-context-item:disabled{cursor:default;opacity:.5}.add-context-item:disabled:hover{background:0 0}.add-context-item-icon{color:var(--color-token-description-foreground);opacity:.75;justify-content:center;align-items:center;display:inline-flex}.add-context-item:hover .add-context-item-icon,.add-context-item:focus-visible .add-context-item-icon{opacity:1}.add-context-glyph{width:14px;height:14px;color:var(--color-token-description-foreground);font-size:var(--text-sm);justify-content:center;align-items:center;font-weight:700;line-height:1;display:inline-flex}.add-context-item-label{color:var(--color-token-foreground);font-weight:500}.add-context-item-detail{color:var(--color-token-description-foreground);font-size:var(--text-sm)}.add-context-separator{flex:none}.add-context-separator-line{background:var(--color-token-menu-border)}.provider-select{appearance:none;color:#0000;opacity:0;background:0 0;outline:none;width:100%;height:100%;position:absolute;inset:0}.composer-separator{background:var(--agent-border-strong);flex:none;width:1px;height:18px;margin:0 3px}@supports (color:color-mix(in lab,red,red)){.composer-separator{background:color-mix(in srgb,var(--agent-border-strong) 72%,transparent)}}.codex-start{width:auto;min-width:56px}.codex-circle-action:before{content:"";border:2px solid;border-radius:999px;width:13px;height:13px}.send-button{border-radius:999px}.provider-select:disabled{opacity:0}.rate-line{min-width:0;color:var(--agent-muted);gap:6px;padding:0 2px}@supports (color:color-mix(in lab,red,red)){.rate-line{color:color-mix(in srgb,var(--agent-muted) 88%,transparent)}}.rate-line{white-space:nowrap;font-size:12px;font-weight:500;line-height:1.35}.rate-line[hidden]{display:none}.rate-line :where(span){text-overflow:ellipsis;min-width:0;overflow:hidden}.codex-rate-limit-summary{flex-wrap:nowrap;justify-content:flex-start;overflow:hidden}.rate-limit-trigger{border-radius:var(--radius-md);max-width:100%;height:22px;color:var(--color-token-input-placeholder-foreground);border:0;padding:0 4px;display:inline-flex;position:relative}@supports (color:color-mix(in lab,red,red)){.rate-limit-trigger{color:color-mix(in srgb,var(--color-token-input-placeholder-foreground) 94%,transparent)}}.rate-limit-trigger{font-size:var(--text-sm);background:0 0;font-weight:500;line-height:1}.rate-limit-trigger-inline{gap:6px;overflow:hidden}.rate-limit-trigger:hover,.rate-limit-trigger:focus-visible,.rate-limit-trigger[aria-expanded=true]{background:var(--color-token-list-hover-background);outline:none}.rate-limit-speedometer,.rate-limit-chevron{color:var(--color-token-input-placeholder-foreground);flex:none}@supports (color:color-mix(in lab,red,red)){.rate-limit-speedometer,.rate-limit-chevron{color:color-mix(in srgb,var(--color-token-input-placeholder-foreground) 86%,transparent)}}.rate-line-heading{color:var(--color-token-input-placeholder-foreground);flex:none}@supports (color:color-mix(in lab,red,red)){.rate-line-heading{color:color-mix(in srgb,var(--color-token-input-placeholder-foreground) 92%,transparent)}}.rate-limit-inline-separator{color:var(--agent-accent);flex:none}@supports (color:color-mix(in lab,red,red)){.rate-limit-inline-separator{color:color-mix(in srgb,var(--agent-accent) 82%,transparent)}}.rate-limit-inline-segment{align-items:baseline;gap:5px;min-width:0;display:inline-flex}.rate-limit-popover{color:var(--color-token-foreground)}.rate-limit-popover-title{color:var(--color-token-description-foreground);font-size:var(--text-xs);padding:2px 0 5px;font-weight:600}.rate-limit-popover-row{min-width:0;min-height:24px;color:var(--color-token-foreground);grid-template-columns:minmax(0,1fr) auto;align-items:center;gap:24px;display:grid}.rate-limit-window{min-width:0;color:var(--color-token-foreground);text-overflow:ellipsis;font-weight:500;overflow:hidden}.rate-limit-row-value{min-width:0;color:var(--color-token-description-foreground);text-align:right;justify-content:flex-end;align-items:center;gap:5px;display:inline-flex}.rate-limit-percent{color:var(--color-token-input-placeholder-foreground);flex:none}@supports (color:color-mix(in lab,red,red)){.rate-limit-percent{color:color-mix(in srgb,var(--color-token-input-placeholder-foreground) 92%,transparent)}}.rate-limit-percent{font-weight:600}.rate-limit-reset{min-width:0;color:var(--color-token-description-foreground)}.status-dot{background:var(--agent-muted);border-radius:999px;flex:none;width:6px;height:6px}.status-dot.running{background:var(--agent-accent)}.status-dot.failed{background:var(--agent-danger)}.codex-top-tray-shell{width:calc(var(--composer-top-tray-inline-padding,12px) * 2 + 100% + 8px);min-width:0;left:50%;bottom:var(--composer-top-tray-top-padding,14px);transform:translate(-50%)}.codex-top-tray-panel,.codex-top-tray-panel[cmdk-root],.codex-top-tray-panel[data-cmdk-root]{width:100%;min-width:0;max-height:var(--composer-top-tray-max-height,177px);padding:var(--spacing);padding-top:calc(var(--spacing) * 3);padding-left:calc(var(--spacing) * 2);border:1px solid var(--composer-top-tray-border,var(--color-token-border));flex-direction:column;display:flex;position:relative}@supports (color:color-mix(in lab,red,red)){.codex-top-tray-panel,.codex-top-tray-panel[cmdk-root],.codex-top-tray-panel[data-cmdk-root]{border:1px solid var(--composer-top-tray-border,color-mix(in srgb, var(--color-token-border) 72%, transparent))}}.codex-top-tray-panel,.codex-top-tray-panel[cmdk-root],.codex-top-tray-panel[data-cmdk-root]{border-top-left-radius:var(--radius-3xl);border-top-right-radius:var(--radius-3xl);color:var(--color-token-foreground);background:var(--composer-top-tray-background,var(--color-token-side-bar-background));border-top-color:#0000;border-bottom:none;border-bottom-right-radius:0;border-bottom-left-radius:0}@supports (color:color-mix(in lab,red,red)){.codex-top-tray-panel,.codex-top-tray-panel[cmdk-root],.codex-top-tray-panel[data-cmdk-root]{background:var(--composer-top-tray-background,color-mix(in oklab, var(--color-token-side-bar-background) 94%, transparent))}}.codex-top-tray-panel,.codex-top-tray-panel[cmdk-root],.codex-top-tray-panel[data-cmdk-root]{box-shadow:none;font-size:var(--text-sm);-webkit-backdrop-filter:none;backdrop-filter:none;isolation:isolate;-webkit-user-select:none;user-select:none;--cmdk-bottom-item-radius:0;overflow:hidden}.codex-top-tray-title{padding:0 var(--padding-row-x) calc(var(--spacing) * 1.25);color:var(--color-token-description-foreground);font-size:var(--text-xs);font-weight:600;line-height:1.2}.codex-top-tray-list,.codex-top-tray-panel [cmdk-list],.codex-top-tray-panel [data-cmdk-list]{gap:var(--spacing);scrollbar-width:none;flex-direction:column;flex:1;width:100%;min-height:0;max-height:none;transition:none;display:flex;overflow-y:auto}.codex-top-tray-list::-webkit-scrollbar{display:none}.codex-top-tray-empty,.codex-top-tray-panel [data-cmdk-empty]{padding:var(--padding-row-y) var(--padding-row-x);color:var(--color-token-input-placeholder-foreground);font-size:var(--text-sm);align-items:center;display:flex}.codex-top-tray-item,.codex-top-tray-item[cmdk-item],.codex-top-tray-item[data-list-navigation-item]{width:calc(100% - var(--spacing) * 2);min-height:calc(var(--spacing) * 6);padding:var(--padding-row-y) var(--padding-row-x);border-radius:var(--radius-lg);color:var(--color-token-foreground);cursor:var(--cursor-interaction,default);font-size:var(--text-sm);opacity:.75;text-align:left;background:0 0;border:0;outline:none;flex-shrink:0;align-items:center;gap:0;display:flex;overflow:hidden}.codex-top-tray-item:hover,.codex-top-tray-item[data-selected=true],.codex-top-tray-item:focus-visible{background:var(--color-token-list-hover-background);opacity:1}.codex-top-tray-icon{width:14px;height:14px;color:var(--color-token-description-foreground);font-size:var(--text-sm);flex:none;justify-content:center;align-items:center;font-weight:700;line-height:1;display:inline-flex}.codex-top-tray-copy{align-items:center;gap:calc(var(--spacing) * 2);min-width:0;display:flex}.codex-top-tray-label,.codex-top-tray-detail{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.codex-top-tray-label{color:var(--color-token-foreground);font-size:var(--text-sm)}.codex-top-tray-detail{color:var(--color-token-description-foreground);font-size:var(--text-sm);flex:1 1 0}@media(max-width:720px){.agent-shell{padding:10px}.prompt-input{min-height:2.75rem;font-size:16px}.model-picker,.codex-tool,.codex-action{height:var(--spacing-token-button-composer)}.codex-tool,.codex-action{width:var(--spacing-token-button-composer)}.codex-tool{width:var(--spacing-token-button-composer-sm);height:var(--spacing-token-button-composer-sm)}.codex-left-rail{min-width:0}.codex-action-cluster{margin-left:auto}}@media(max-width:520px){.agent-log-line,.log-line{grid-template-columns:1fr;gap:2px}.model-picker{min-width:104px;max-width:168px}.codex-tool-skill,.codex-mic,.rate-dot,.rate-limit-reset{display:none}}@property --tw-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-z{syntax:"*";inherits:false;initial-value:0}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-ordinal{syntax:"*";inherits:false}@property --tw-slashed-zero{syntax:"*";inherits:false}@property --tw-numeric-figure{syntax:"*";inherits:false}@property --tw-numeric-spacing{syntax:"*";inherits:false}@property --tw-numeric-fraction{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-backdrop-blur{syntax:"*";inherits:false}@property --tw-backdrop-brightness{syntax:"*";inherits:false}@property --tw-backdrop-contrast{syntax:"*";inherits:false}@property --tw-backdrop-grayscale{syntax:"*";inherits:false}@property --tw-backdrop-hue-rotate{syntax:"*";inherits:false}@property --tw-backdrop-invert{syntax:"*";inherits:false}@property --tw-backdrop-opacity{syntax:"*";inherits:false}@property --tw-backdrop-saturate{syntax:"*";inherits:false}@property --tw-backdrop-sepia{syntax:"*";inherits:false}@property --tw-duration{syntax:"*";inherits:false}@property --tw-ease{syntax:"*";inherits:false}@property --tw-outline-style{syntax:"*";inherits:false;initial-value:solid}';function vp(n){Xs("agent-session",yp),jo(),document.documentElement.dataset.cmuxWebviewKind="agent-session",document.body.dataset.cmuxWebviewKind="agent-session";const e=Qs(()=>Pr.jsx(yu,{}));Ys.createRoot(n).render(Pr.jsx(Gs,{router:e}))}export{vp as mountAgentSessionSurface}; +`)}function Ou({copiedLabel:n,copyLabel:e,text:t}){"use no memo";const[r,o]=b.useState(!1),i=b.useRef(null),s=r?n:e,a=b.useCallback(c=>{c!==null||i.current===null||(window.clearTimeout(i.current),i.current=null)},[]),l=b.useCallback(c=>{c.stopPropagation(),navigator.clipboard?.writeText(t)?.catch(()=>{}),o(!0),i.current!==null&&window.clearTimeout(i.current),i.current=window.setTimeout(()=>{o(!1),i.current=null},2e3)},[t]);return f("button",{ref:a,type:"button",className:`codex-shell-copy ${ee} ${te} ${ln} rounded-full electron:rounded-md hover:bg-transparent hover:text-token-button-foreground`,"aria-label":s,title:s,onClick:l},r?Ze("icon-xxs"):xn("icon-xxs"))}function Tu({label:n,output:e}){"use no memo";const[t,r]=b.useState(!1),o=b.useRef(null),i=b.useCallback(a=>{a!==null||o.current===null||(window.clearTimeout(o.current),o.current=null)},[]),s=b.useCallback(a=>{a.stopPropagation(),navigator.clipboard?.writeText(e)?.catch(()=>{}),r(!0),o.current!==null&&window.clearTimeout(o.current),o.current=window.setTimeout(()=>{r(!1),o.current=null},2e3)},[e]);return f("button",{ref:i,type:"button",className:`codex-tool-output-copy ${ee} ${te} rounded-full electron:rounded-md electron:p-1 electron:[&>svg]:icon-sm flex items-center justify-center p-0.5 absolute top-0 right-2.5 opacity-0 transition-opacity duration-200 group-hover/output:opacity-100${t?" text-token-foreground opacity-100":""}`,"aria-label":n,title:n,onClick:s},t?Ze("icon-2xs"):xn("icon-2xs"))}function Du({copy:n,sentAtMs:e,text:t}){"use no memo";const[r,o]=b.useState(!1),i=b.useRef(null),s=n?.copyUserMessage??"",a=n?.copiedUserMessage??"",l=r?a:s,c=e==null?null:Os(e),d=b.useCallback(p=>{p!==null||i.current===null||(window.clearTimeout(i.current),i.current=null)},[]),u=b.useCallback(()=>{const p=t.trim();if(!p)return;navigator.clipboard?.writeText(p)?.catch(()=>{}),o(!0),i.current!==null&&window.clearTimeout(i.current),i.current=window.setTimeout(()=>{o(!1),i.current=null},1500)},[t]);return f("div",{className:"codex-user-message-actions flex flex-row-reverse items-center gap-1"},f("div",{className:"mr-1 ms-1 flex items-center gap-2 opacity-0 group-focus-within:opacity-100 group-hover:opacity-100"},c==null?null:f("span",{className:"text-xs text-token-text-tertiary"},c),f("button",{ref:d,type:"button",className:`codex-user-message-action-button ${ee} ${te} ${ln} rounded-full electron:rounded-md`,"aria-label":l,title:l,onClick:u},r?Ze("icon-xs"):xn("icon-xs"))))}function Eu({copy:n,sentAtMs:e,text:t}){"use no memo";const[r,o]=b.useState(!1),i=b.useRef(null),s=n?.copyAssistantMessage??"",a=n?.copiedAssistantMessage??s,l=r?a:s,c=e==null?null:Os(e),d=b.useCallback(p=>{p!==null||i.current===null||(window.clearTimeout(i.current),i.current=null)},[]),u=b.useCallback(()=>{const p=t.trim();if(!p)return;navigator.clipboard?.writeText(p)?.catch(()=>{}),o(!0),i.current!==null&&window.clearTimeout(i.current),i.current=window.setTimeout(()=>{o(!1),i.current=null},2e3)},[t]);return f("div",{className:"codex-assistant-message-actions mt-1.5 flex h-5 items-center justify-start gap-0.5 opacity-0 group-focus-within:opacity-100 group-hover:opacity-100"},f("button",{ref:d,type:"button",className:`codex-assistant-message-action-button ${ee} ${te} ${ln} rounded-full electron:rounded-md`,"aria-label":l,title:l,onClick:u},r?Ze("icon-xs"):xn("icon-xs")),c==null?null:f("span",{className:"ml-1.5 flex h-full items-center text-size-chat leading-5 text-token-input-placeholder-foreground"},c))}function Os(n,e=new Date){const t=new Date(n),r=Au(t,e);return r===0?new Intl.DateTimeFormat(void 0,{hour:"numeric",minute:"2-digit"}).format(t):r<0&&r>-7?new Intl.DateTimeFormat(void 0,{hour:"numeric",minute:"2-digit",weekday:"long"}).format(t):new Intl.DateTimeFormat(void 0,{day:"numeric",hour:"numeric",minute:"2-digit",month:"short"}).format(t)}function Au(n,e){const t=new Date(n.getFullYear(),n.getMonth(),n.getDate()),r=new Date(e.getFullYear(),e.getMonth(),e.getDate());return Math.round((t.getTime()-r.getTime())/864e5)}function Ru({copy:n,text:e}){"use no memo";const[t,r]=b.useState(!1),o=Iu(e),i=o&&!t,s=n?.showMore??"",a=n?.showLess??"",l=b.useCallback(()=>{r(c=>!c)},[]);return f("div",{className:"flex flex-col items-end gap-1"},f("div",{className:"codex-user-message-content text-size-chat relative w-full min-w-0 mb-px","data-collapsed":i?"true":void 0,dangerouslySetInnerHTML:{__html:Be(e)}}),o?f("button",{type:"button","aria-expanded":t,className:"codex-user-message-toggle text-size-chat mt-1.5 inline-flex cursor-interaction items-center gap-1 self-start text-token-description-foreground hover:text-token-foreground",onClick:l},f("span",null,t?a:s),gn(`icon-2xs${t?" rotate-180":""}`)):null)}function Iu(n){return n.split(/\r\n|\r|\n/).length>uu||n.length>1600}function Lu({attachments:n}){return f("div",{className:"codex-user-message-attachments flex max-w-[77%] flex-row-reverse flex-wrap items-center gap-1"},n.map(e=>f(Pu,{attachment:e,key:e.id})))}function Pu({attachment:n}){return n.kind==="image"&&n.dataUrl?f("div",{className:"user-message-image-attachment flex size-16 items-center justify-center rounded-lg border border-token-border",title:n.label},f("img",{alt:n.label,className:"h-full w-full rounded-md object-cover",referrerPolicy:"no-referrer",src:n.dataUrl})):f("div",{className:"user-message-file-attachment bg-token-dropdown-background border-token-border inline-flex max-w-[320px] items-center gap-1 rounded-full border px-2 py-1.5 text-sm",title:n.path},f("span",{className:"text-token-input-placeholder-foreground flex-shrink-0","aria-hidden":!0},Sr("icon-2xs")),f("span",{className:"flex max-w-full min-w-0 items-center gap-1"},f("span",{className:"truncate"},n.label)))}function zu({attachments:n,className:e,copy:t,onRemove:r}){return f("div",{className:`codex-attachment-tray w-full overflow-x-auto${e?` ${e}`:""}`,"data-composer-attachments-row":!0},f("div",{className:"codex-attachment-row flex min-w-max items-end gap-2"},n.map(o=>f(Fu,{attachment:o,copy:t,key:o.id,onRemove:r}))))}function Fu({attachment:n,copy:e,onRemove:t}){const r=`${e?.removeAttachment??"Remove attachment"} ${n.label}`,o=t?f("button",{className:"composer-attachment-remove",type:"button","aria-label":r,onClick:()=>t(n.id),onMouseDown:i=>i.preventDefault()},bn("icon-2xs")):null;return n.kind==="image"&&n.dataUrl?f("div",{className:"composer-attachment-image",title:n.label},f("img",{alt:"","aria-hidden":!0,src:n.dataUrl}),o):f("div",{className:"composer-attachment-file",title:n.path},f("span",{className:"composer-attachment-file-icon","aria-hidden":!0},Sr("icon-xs")),f("span",{className:"composer-attachment-file-label"},n.label),o)}function Bu(n){const e=Et.c(6),{state:t,providerDisplayName:r}=n,i=(t.context?.rateLimitRows??[]).map(La),s=t.context?.copy,[a,l]=b.useState(!1);if(i.length===0)return null;const c=s?.rateLimits??"Rate limits";let d;e[0]!==t?(d=ja(t),e[0]=t,e[1]=d):d=e[1];let u;e[2]===Symbol.for("react.memo_cache_sentinel")?(u=m=>{m.currentTarget.contains(m.relatedTarget)||l(!1)},e[2]=u):u=e[2];let p;e[3]===Symbol.for("react.memo_cache_sentinel")?(p=()=>l(Vu),e[3]=p):p=e[3];let h;return e[4]!==t?(h=(m,g)=>[g>0?f("span",{key:`${m.role}-separator`,className:"rate-limit-inline-separator","aria-hidden":!0},"•"):null,f(_u,{key:m.role,row:m,state:t})],e[4]=t,e[5]=h):h=e[5],f("div",{className:"rate-line codex-rate-limit-summary relative",role:"status","aria-label":`${r} ${d}`.trim(),onBlur:u},f("button",{className:"rate-limit-trigger rate-limit-trigger-inline flex min-w-0 items-center gap-1",type:"button","aria-expanded":a,onClick:p},f("span",{className:"rate-line-heading"},c),i.flatMap(h)),a?f("div",{className:"rate-limit-popover absolute bottom-[calc(100%+6px)] left-0 z-50 flex min-w-56 flex-col gap-1 rounded-xl border border-token-border bg-token-dropdown-background/95 px-3 py-2 text-sm shadow-xl-spread backdrop-blur-sm"},f("div",{className:"rate-limit-popover-title"},c),i.map(m=>f($u,{key:m.role,row:m,state:t}))):null)}function Vu(n){return!n}function _u({row:n,state:e}){const t=n,r=e.context?.copy,o=t.role==="primary"?r?.rateLimitPrimary??"Primary":r?.rateLimitSecondary??"Secondary",i=ti(t.windowDurationMins,o,{weekly:r?.rateLimitWeekly??"Weekly",monthly:r?.rateLimitMonthly??"Monthly",daysFormat:r?.rateLimitDaysFormat??"",hoursFormat:r?.rateLimitHoursFormat??"",minutesFormat:r?.rateLimitMinutesFormat??""}),s=ei(t.resetsAt);return f("span",{className:"rate-limit-inline-segment"},f("span",{className:"rate-limit-window"},i),f("span",{className:"rate-limit-percent"},Qo(t.remainingPercent)),s?f("span",{className:"rate-limit-reset"},`${r?.rateLimitResets??"resets"} ${s}`):null)}function $u({row:n,state:e}){const t=n,r=e.context?.copy,o=t.role==="primary"?r?.rateLimitPrimary??"Primary":r?.rateLimitSecondary??"Secondary",i=ti(t.windowDurationMins,o,{weekly:r?.rateLimitWeekly??"Weekly",monthly:r?.rateLimitMonthly??"Monthly",daysFormat:r?.rateLimitDaysFormat??"",hoursFormat:r?.rateLimitHoursFormat??"",minutesFormat:r?.rateLimitMinutesFormat??""}),s=ei(t.resetsAt);return f("div",{className:"rate-limit-popover-row"},f("span",{className:"rate-limit-window"},i),f("span",{className:"rate-limit-row-value"},f("span",{className:"rate-limit-percent"},Qo(t.remainingPercent)),s?f("span",{className:"rate-limit-reset"},`${r?.rateLimitResets??"resets"} ${s}`):null))}function Wu({emptyLabel:n,highlightedIndex:e,items:t,onChoose:r,onHighlight:o,query:i}){return f("div",{className:"codex-top-tray-shell absolute z-20"},f("div",{className:"codex-top-tray-panel","cmdk-root":"","data-cmdk-root":!0},f("div",{className:"codex-top-tray-list","cmdk-list":"","data-cmdk-list":!0},t.length===0?f("div",{className:"codex-top-tray-empty","cmdk-empty":"","data-cmdk-empty":!0,"data-command-menu-empty-state":"true"},n):t.map((s,a)=>{const l=s.detail?"codex-top-tray-label max-w-[60%] flex-none truncate":"codex-top-tray-label min-w-0 flex-1 truncate",c=sp(s.label,i),d=c.some(u=>!u.isMatch);return f("button",{key:s.id,className:"codex-top-tray-item",type:"button","aria-selected":a===e?"true":void 0,"cmdk-item":"","data-selected":a===e?"true":void 0,"data-list-navigation-item":!0,onMouseEnter:()=>o(a),onMouseDown:u=>u.preventDefault(),onClick:()=>r(s)},f("div",{className:"codex-top-tray-copy flex w-full items-center gap-2"},f("span",{className:"codex-top-tray-icon icon-xs shrink-0","aria-hidden":!0},s.icon),f("div",{className:l},c.map((u,p)=>f("span",{key:`${u.text}-${p}`,className:!u.isMatch&&d?"text-token-description-foreground":void 0},u.text))),s.detail?f("span",{className:"codex-top-tray-detail min-w-0 flex-1 truncate text-sm text-token-description-foreground"},s.detail):null))}))))}function Wo({icon:n,label:e,onClear:t}){return f("div",{className:"composer-mode-indicator flex min-w-0 items-center gap-1"},f("div",{className:"composer-mode-divider","aria-hidden":!0}),f("button",{className:`composer-mode-button group ${ee} ${te} ${Oe} rounded-full`,type:"button","aria-label":e,onClick:t},f("span",{className:"composer-mode-icon composer-mode-icon-default icon-xs shrink-0","aria-hidden":!0},n),f("span",{className:"composer-mode-icon composer-mode-icon-hover icon-xs shrink-0","aria-hidden":!0},bn("icon-xs")),f("span",{className:"composer-footer__label--sm composer-mode-label max-w-16 truncate"},e)))}function Hu({hideLabel:n,label:e,onClear:t}){return f("button",{className:`composer-context-button group ${ee} ${te} ${Oe} min-w-0 rounded-full`,type:"button","aria-label":e,title:e,onClick:t},f("span",{className:"composer-context-icon composer-context-icon-default icon-xs shrink-0","aria-hidden":!0},Es("icon-xs")),f("span",{className:"composer-context-icon composer-context-icon-hover icon-xs shrink-0","aria-hidden":!0},bn("icon-xs")),n?null:f("span",{className:"composer-footer__label--sm composer-context-label max-w-20 truncate"},e))}function qu({copy:n,hideLabel:e=!1,isEnabled:t,isOpen:r,mode:o,onModeChange:i,onOpenChange:s}){const a=n?.changePermissions??"Change permissions",l=Uo(n,o),c=t?["default","auto-review","full-access","custom"]:[],d=e?oa:Oe,u=h=>{i(h),s(!1)},p=t&&r;return f("div",{className:"permissions-root relative inline-flex",onBlur:h=>{t&&!h.currentTarget.contains(h.relatedTarget)&&s(!1)}},f("button",{className:`permissions-trigger ${ee} ${te} ${d} ${e?Kt:"min-w-0"} rounded-full`,type:"button","aria-label":a,"aria-haspopup":t?"menu":void 0,"aria-expanded":t?p:void 0,"aria-disabled":t?void 0:!0,"data-permission-mode":o,"data-state":p?"open":"closed",disabled:!t,onClick:()=>{t&&s(!p)},onKeyDown:h=>{t&&(h.key==="ArrowDown"&&(h.preventDefault(),s(!0)),h.key==="Escape"&&(h.preventDefault(),s(!1)))}},Ds(o,"icon-xs shrink-0"),e?null:f("span",{className:"permissions-trigger-label composer-footer__label--xs max-w-40 truncate whitespace-nowrap text-left"},l),t?f("span",{className:"permissions-trigger-chevron icon-2xs shrink-0","aria-hidden":!0},gn()):null),p?f("div",{className:"permissions-dropdown _content_1hiti_1 no-drag bg-token-dropdown-background/90 text-token-foreground ring-token-border z-50 m-px flex select-none flex-col overflow-y-auto rounded-xl ring-[0.5px] px-1 py-1 shadow-xl-spread backdrop-blur-sm",role:"menu","aria-label":a,"data-state":"open","data-side":"top",style:{"--radix-dropdown-menu-content-transform-origin":"left bottom"}},c.map(h=>f(Ju,{isSelected:h===o,key:h,label:Uo(n,h),mode:h,onSelect:()=>u(h)}))):null)}function Ju({isSelected:n,label:e,mode:t,onSelect:r}){return f("button",{className:"permissions-item no-drag group hover:bg-token-list-hover-background focus:bg-token-list-hover-background cursor-interaction text-token-foreground outline-hidden rounded-lg px-[var(--padding-row-x)] py-[var(--padding-row-y)] text-sm",type:"button",role:"menuitemradio","aria-checked":n,"data-permission-mode":t,"data-selected":n?"true":void 0,onMouseDown:o=>o.preventDefault(),onClick:r},f("span",{className:"permissions-item-icon icon-xs shrink-0","aria-hidden":!0},Ds(t,"icon-xs shrink-0")),f("span",{className:"permissions-item-label min-w-0 flex-1 truncate"},e),n?f("span",{className:"permissions-item-check icon-xs shrink-0","aria-hidden":!0},Ze()):null)}function Uu({hasIdeContext:n,isAutoContextOn:e,isOpen:t,isPickingFiles:r,isPlanMode:o,onOpenChange:i,onPickFiles:s,onToggleAutoContext:a,onTogglePlanMode:l,state:c}){const d=c.context?.copy,u=d?.addFilesAndMore??"Add files and more",p=d?.addPhotosAndFiles??"Add photos & files",m=Cr("skill",c,"").find(g=>g.id==="plan")??null;return f("div",{className:"add-context-root relative inline-flex",onBlur:g=>{g.currentTarget.contains(g.relatedTarget)||i(!1)}},f("button",{className:`codex-tool codex-tool-plus ${ee} ${te} ${Oe} ${Kt} rounded-full`,type:"button","aria-label":u,"aria-haspopup":"menu","aria-expanded":t,"data-state":t?"open":"closed",onClick:()=>i(!t),onKeyDown:g=>{g.key==="ArrowDown"&&(g.preventDefault(),i(!0)),g.key==="Escape"&&(g.preventDefault(),i(!1))}},fp()),t?f("div",{className:"add-context-dropdown _content_1hiti_1 no-drag bg-token-dropdown-background/90 text-token-foreground ring-token-border z-50 m-px flex select-none flex-col overflow-y-auto rounded-xl ring-[0.5px] px-1 py-1 shadow-xl-spread backdrop-blur-sm",role:"menu","aria-label":u,"data-state":"open","data-side":"top",style:{"--radix-dropdown-menu-content-transform-origin":"left bottom"}},f(ju,{disabled:r,icon:Sr("icon-xs"),label:p,onSelect:s}),n||m?f(Ku):null,n?f(Ho,{checked:e,icon:Es("icon-sm"),label:d?.includeIdeContext??"Include IDE context",onSelect:a}):null,m?f(Ho,{checked:o,icon:an(),label:d?.planMode??"Plan mode",onSelect:l}):null):null)}function ju({detail:n,disabled:e=!1,icon:t,label:r,onSelect:o}){return f("button",{className:"add-context-item group no-drag hover:bg-token-list-hover-background focus:bg-token-list-hover-background cursor-interaction text-token-foreground outline-hidden rounded-lg px-[var(--padding-row-x)] py-[var(--padding-row-y)] text-sm",disabled:e,type:"button",role:"menuitem",onMouseDown:i=>i.preventDefault(),onClick:e?void 0:o},f("span",{className:"add-context-item-icon icon-xs shrink-0","aria-hidden":!0},t),f("span",{className:"add-context-item-copy flex min-w-0 flex-1 items-center gap-2"},f("span",{className:"add-context-item-label min-w-0 truncate"},r),n?f("span",{className:"add-context-item-detail min-w-0 flex-1 truncate text-token-description-foreground"},n):null))}function Ho({checked:n,icon:e,label:t,onSelect:r}){const o=n?"checked":"unchecked",i=n?"relative inline-flex h-4 w-7 shrink-0 items-center rounded-full bg-token-charts-blue transition-colors duration-200 ease-out":"relative inline-flex h-4 w-7 shrink-0 items-center rounded-full bg-token-foreground/10 transition-colors duration-200 ease-out";return f("button",{className:"add-context-item group no-drag hover:bg-token-list-hover-background focus:bg-token-list-hover-background cursor-interaction text-token-foreground outline-hidden rounded-lg px-[var(--padding-row-x)] py-[var(--padding-row-y)] text-sm",type:"button",role:"menuitemcheckbox","aria-checked":n,onMouseDown:s=>s.preventDefault(),onClick:r},f("span",{className:"add-context-item-icon icon-xs shrink-0","aria-hidden":!0},e),f("span",{className:"add-context-switch-row flex w-full min-w-0 items-center justify-between gap-2"},f("span",{className:"flex min-w-0 items-center gap-2"},f("span",{className:"add-context-item-label min-w-0 truncate"},t)),f("span",{className:i,"data-state":o,"aria-hidden":!0},f("span",{className:"h-3 w-3 rounded-full border border-[color:var(--gray-0)] bg-[color:var(--gray-0)] shadow-sm transition-transform duration-200 ease-out data-[state=unchecked]:translate-x-[2px] data-[state=checked]:translate-x-[14px]","data-state":o}))))}function Ku(){return f("div",{className:"add-context-separator w-full px-[var(--padding-row-x)] py-1",role:"separator"},f("div",{className:"add-context-separator-line h-[1px] w-full bg-token-menu-border"}))}function Zu(n){return Cr("mention",n,"").find(e=>e.id==="workspace")??null}function Cr(n,e,t){const r=e.context?.copy,o=n==="mention"?[...e.context?.workingDirectory?[{id:"workspace",icon:hp("icon-xs"),label:r?.mentionCurrentWorkspace??"Current workspace",detail:jt(e.context.workingDirectory),mention:{kind:"at",label:jt(e.context.workingDirectory),name:jt(e.context.workingDirectory),path:e.context.workingDirectory,fsPath:e.context.workingDirectory}}]:[],...e.providers.map(i=>({id:i.id,icon:Ia(i),label:i.displayName,detail:i.executableName,mention:{kind:"agent",label:i.displayName,name:i.id,displayName:i.displayName,path:`provider://${i.id}`,description:i.executableName}}))]:[{id:"plan",icon:"$",label:r?.skillPlan??"Plan",detail:"$plan",mention:{kind:"skill",label:"Plan",name:"plan",displayName:"Plan",path:"skill://plan"}},{id:"review",icon:"$",label:r?.skillCodeReview??"Code review",detail:"$codex-review",mention:{kind:"skill",label:"Code review",name:"codex-review",displayName:"Code review",path:"skill://codex-review"}},{id:"research",icon:"$",label:r?.skillResearch??"Research",detail:"$research",mention:{kind:"skill",label:"Research",name:"research",displayName:"Research",path:"skill://research"}}];return Yu(o,t)}function Yu(n,e){const t=e.trim();return t?n.map(r=>({item:r,score:ip(r.label,t,[r.detail,r.mention.name])})).filter(({score:r})=>r>0).sort((r,o)=>o.score-r.score).map(({item:r})=>r):n}const qo=1,Gu=.9,Xu=.8,Qu=.17,_n=.1,$n=.999,ep=.9999,tp=.99,np=/[\\/_+.#"@[({&]/,rp=/[\\/_+.#"@[({&]/g,op=/[\s-]/,Ts=/[\s-]/g;function ip(n,e,t){const r=t.length>0?`${n} ${t.join(" ")}`:n;return ir(r,e,Jo(r),Jo(e),0,0,{})}function Jo(n){return n.toLowerCase().replace(Ts," ")}function ir(n,e,t,r,o,i,s){if(i===e.length)return o===n.length?qo:tp;const a=`${o},${i}`;if(s[a]!==void 0)return s[a];const l=r.charAt(i);let c=t.indexOf(l,o),d=0;for(;c>=0;){let u=ir(n,e,t,r,c+1,i+1,s);if(u>d){if(c===o)u*=qo;else if(np.test(n.charAt(c-1))){u*=Xu;const p=n.slice(o,c-1).match(rp);p&&o>0&&(u*=$n**p.length)}else if(op.test(n.charAt(c-1))){u*=Gu;const p=n.slice(o,c-1).match(Ts);p&&o>0&&(u*=$n**p.length)}else u*=Qu,o>0&&(u*=$n**(c-o));n.charAt(c)!==e.charAt(i)&&(u*=ep)}if(u<_n&&t.charAt(c-1)===r.charAt(i+1)||r.charAt(i+1)===r.charAt(i)&&t.charAt(c-1)!==r.charAt(i)){const p=ir(n,e,t,r,c+1,i+2,s);p*_n>u&&(u=p*_n)}u>d&&(d=u),c=t.indexOf(l,c+1)}return s[a]=d,d}function sp(n,e){const t=Array.from(n),r=e.trim();if(!r)return t.map(l=>({isMatch:!0,text:l}));const o=t.map(l=>l.toLowerCase()),i=Array.from(r.toLowerCase());let s=-1;for(let l=0;l<=o.length-i.length;l+=1)if(i.every((c,d)=>o[l+d]===c)){s=l;break}if(s>=0){const l=s+i.length;return t.map((c,d)=>({isMatch:d>=s&&d{const c=a{const r=`${t.kind}:${t.path}`;return e.has(r)?!1:(e.add(r),!0)})}function lp(n="icon-sm"){return f("svg",{className:n,width:"20",height:"20",viewBox:"0 0 20 20",fill:"none","aria-hidden":!0},f("path",{d:"M9.33467 16.6663V4.93978L4.6374 9.63704L4.1667 9.16634L3.69599 8.69661L9.52998 2.86263L9.63447 2.77767C9.8925 2.60753 10.2433 2.63564 10.4704 2.86263L16.3034 8.69661L16.3884 8.80111C16.5588 9.05922 16.5306 9.40982 16.3034 9.63704C16.0762 9.86414 15.7255 9.89242 15.4675 9.722L15.363 9.63704L10.6647 4.9388V16.6663C10.6647 17.0336 10.367 17.3314 9.99971 17.3314C9.63259 17.3312 9.33467 17.0335 9.33467 16.6663ZM4.6374 9.63704C4.3777 9.89674 3.95569 9.89674 3.69599 9.63704C3.43657 9.37744 3.43668 8.95628 3.69599 8.69661L4.6374 9.63704Z",fill:"currentColor"}))}function cp(){return f("svg",{width:"16",height:"16",viewBox:"0 0 16 16",fill:"none","aria-hidden":!0},f("rect",{x:"4.75",y:"4.75",width:"6.5",height:"6.5",rx:"1",fill:"currentColor"}))}function dp(){return f("svg",{width:"16",height:"16",viewBox:"0 0 16 16",fill:"none","aria-hidden":!0},f("path",{d:"M8 2.25a2 2 0 0 0-2 2v3.25a2 2 0 1 0 4 0V4.25a2 2 0 0 0-2-2ZM4 7.5a4 4 0 0 0 8 0M8 11.5v2.25",stroke:"currentColor",strokeWidth:"1.4",strokeLinecap:"round"}))}function up(n="icon-sm"){return f("svg",{className:n,width:"20",height:"20",viewBox:"0 0 20 20",fill:"none","aria-hidden":!0},f("path",{d:"M10 5.14295V14.8441M10 5.14295C10 1.98209 14.8475 1.94468 14.8475 5.07797L14.8473 5.1067C17.1367 5.43539 18.0436 7.54498 16.4225 9.14006C17.8633 10.5577 17.3503 13.9054 15.4449 14.6301C14.8475 17.6527 10.8056 18.4821 10 14.8441M10 5.14295C10 1.98209 5.15249 1.94468 5.15249 5.07797L5.15265 5.1067C2.86325 5.43539 1.95642 7.54498 3.57746 9.14006C2.13674 10.5577 2.64974 13.9054 4.5551 14.6301C5.15249 17.6527 9.19444 18.4821 10 14.8441",stroke:"currentColor",strokeLinejoin:"round",strokeWidth:"1.33"}))}function gn(n="icon-2xs"){return f("svg",{className:n,width:"20",height:"21",viewBox:"0 0 20 21",fill:"none","aria-hidden":!0},f("path",{d:"M15.2793 7.71101C15.539 7.45131 15.961 7.45131 16.2207 7.71101C16.4804 7.97071 16.4804 8.39272 16.2207 8.65242L10.4707 14.4024C10.211 14.6621 9.78902 14.6621 9.52932 14.4024L3.77932 8.65242L3.69436 8.54792C3.52385 8.28979 3.55205 7.93828 3.77932 7.71101C4.00659 7.48374 4.3581 7.45554 4.61623 7.62605L4.72073 7.71101L10 12.9903L15.2793 7.71101Z",fill:"currentColor",stroke:"currentColor",strokeWidth:"0.6"}))}function pp(n="icon-2xs"){return f("svg",{className:n,width:"20",height:"20",viewBox:"0 0 20 20",fill:"none","aria-hidden":!0},f("path",{d:"M7.52925 3.7793C7.75652 3.55203 8.10803 3.52383 8.36616 3.69434L8.47065 3.7793L14.2207 9.5293C14.4804 9.789 14.4804 10.211 14.2207 10.4707L8.47065 16.2207C8.21095 16.4804 7.78895 16.4804 7.52925 16.2207C7.26955 15.961 7.26955 15.539 7.52925 15.2793L12.8085 10L7.52925 4.7207L7.44429 4.61621C7.27378 4.35808 7.30198 4.00657 7.52925 3.7793Z",fill:"currentColor"}))}function xn(n="icon-sm"){return f("svg",{className:n,width:"21",height:"21",viewBox:"0 0 21 21",fill:"none","aria-hidden":!0},f("path",{d:"M13.468 11.1216C13.468 10.4107 13.468 9.91717 13.4367 9.53369C13.4137 9.25191 13.3758 9.0622 13.3244 8.91846L13.2687 8.78858C13.1148 8.48652 12.8803 8.23344 12.593 8.05713L12.466 7.98584C12.308 7.90546 12.0963 7.84854 11.7209 7.81787C11.3374 7.78656 10.8439 7.78662 10.133 7.78662H7.29999C6.58895 7.78662 6.09562 7.78654 5.7121 7.81787C5.43015 7.84091 5.24064 7.87872 5.09686 7.93018L4.96698 7.98584C4.66487 8.13977 4.41184 8.37419 4.23554 8.66162L4.16522 8.78858C4.08477 8.94657 4.02794 9.15811 3.99725 9.53369C3.96594 9.91718 3.96503 10.4107 3.96503 11.1216V13.9546C3.96503 14.6656 3.96592 15.159 3.99725 15.5425C4.02796 15.9182 4.08471 16.1296 4.16522 16.2876L4.23554 16.4136C4.41185 16.7012 4.66472 16.9353 4.96698 17.0894L5.09686 17.146C5.24061 17.1974 5.43024 17.2343 5.7121 17.2573C6.09562 17.2887 6.58895 17.2896 7.29999 17.2896H10.133C10.8439 17.2896 11.3374 17.2886 11.7209 17.2573C12.0965 17.2266 12.308 17.1698 12.466 17.0894L12.593 17.019C12.8804 16.8427 13.1148 16.5897 13.2687 16.2876L13.3244 16.1577C13.3759 16.0139 13.4137 15.8244 13.4367 15.5425C13.468 15.159 13.468 14.6656 13.468 13.9546V11.1216ZM14.798 13.1196C15.2528 13.118 15.6011 13.1147 15.8879 13.0913C16.2634 13.0606 16.475 13.0038 16.633 12.9233L16.759 12.8521C17.0466 12.6757 17.2808 12.4228 17.4348 12.1206L17.4914 11.9907C17.5428 11.847 17.5797 11.6572 17.6027 11.3755C17.634 10.992 17.6349 10.4985 17.6349 9.7876V6.95459C17.6349 6.24355 17.6341 5.75022 17.6027 5.3667C17.5797 5.08484 17.5428 4.89522 17.4914 4.75147L17.4348 4.62158C17.2807 4.31933 17.0466 4.06645 16.759 3.89014L16.633 3.81982C16.475 3.73932 16.2636 3.68256 15.8879 3.65186C15.5044 3.62052 15.011 3.61963 14.3 3.61963H11.467C10.7561 3.61963 10.2626 3.62054 9.87909 3.65186C9.59738 3.67487 9.40759 3.71179 9.26386 3.76318L9.13397 3.81982C8.83175 3.97382 8.57885 4.20802 8.40253 4.49561L8.33124 4.62158C8.25079 4.77957 8.19396 4.99114 8.16327 5.3667C8.13984 5.65352 8.13561 6.00178 8.13397 6.45654H10.133C10.822 6.45654 11.3791 6.4559 11.8293 6.49268C12.2873 6.5301 12.6937 6.6093 13.0705 6.80127L13.2883 6.92334C13.7839 7.22739 14.1878 7.66313 14.4533 8.18408L14.5197 8.32666C14.6642 8.66318 14.7291 9.02433 14.7619 9.42529C14.7987 9.8755 14.798 10.4326 14.798 11.1216V13.1196ZM18.965 9.7876C18.965 10.4766 18.9657 11.0337 18.9289 11.4839C18.8961 11.8848 18.8311 12.246 18.6867 12.5825L18.6203 12.7251C18.3548 13.246 17.9509 13.6818 17.4553 13.9858L17.2365 14.1079C16.8599 14.2998 16.4541 14.3791 15.9963 14.4165C15.6592 14.444 15.2624 14.4481 14.7951 14.4497C14.7935 14.917 14.7894 15.3138 14.7619 15.6509C14.7292 16.0516 14.664 16.4122 14.5197 16.7485L14.4533 16.8911C14.1878 17.4122 13.7841 17.8487 13.2883 18.1528L13.0705 18.2749C12.6937 18.4669 12.2873 18.5461 11.8293 18.5835C11.3791 18.6203 10.822 18.6196 10.133 18.6196H7.29999C6.6109 18.6196 6.05394 18.6203 5.6037 18.5835C5.20305 18.5508 4.84233 18.4855 4.50604 18.3413L4.36347 18.2749C3.84243 18.0094 3.40584 17.6056 3.10175 17.1099L2.97968 16.8911C2.78787 16.5145 2.70849 16.1087 2.67108 15.6509C2.6343 15.2006 2.63495 14.6437 2.63495 13.9546V11.1216C2.63495 10.4326 2.63431 9.8755 2.67108 9.42529C2.7085 8.96729 2.78771 8.56084 2.97968 8.18408L3.10175 7.96631C3.40585 7.47049 3.84235 7.06679 4.36347 6.80127L4.50604 6.73486C4.84236 6.59059 5.20302 6.52542 5.6037 6.49268C5.9405 6.46516 6.33707 6.4601 6.80389 6.4585C6.8055 5.99167 6.81056 5.5951 6.83807 5.2583C6.87549 4.80047 6.95482 4.39471 7.14667 4.01807L7.26874 3.79932C7.5728 3.30371 8.00855 2.89973 8.52948 2.63428L8.67206 2.56787C9.00854 2.42345 9.36978 2.35844 9.77069 2.32568C10.2209 2.28891 10.778 2.28955 11.467 2.28955H14.3C14.9891 2.28955 15.546 2.2889 15.9963 2.32568C16.4541 2.3631 16.8599 2.44247 17.2365 2.63428L17.4553 2.75635C17.951 3.06044 18.3548 3.49703 18.6203 4.01807L18.6867 4.16065C18.8309 4.49694 18.8962 4.85765 18.9289 5.2583C18.9657 5.70854 18.965 6.2655 18.965 6.95459V9.7876Z",fill:"currentColor"}))}function Ze(n){return f("svg",{className:n,width:"17",height:"17",viewBox:"0 0 17 17",fill:"none","aria-hidden":!0},f("path",{d:"M12.8961 3.64101C13.1297 3.41418 13.4984 3.37523 13.7779 3.56581C14.0571 3.75635 14.1554 4.11331 14.0299 4.41347L13.9615 4.53847L7.71151 13.7045C7.59411 13.8767 7.4063 13.9877 7.19881 14.0072C6.99136 14.0267 6.78564 13.9533 6.63826 13.806L2.88826 10.056L2.79842 9.9457C2.6192 9.67407 2.64927 9.30496 2.88826 9.06581C3.12738 8.82669 3.49647 8.79676 3.76815 8.97597L3.8785 9.06581L7.03084 12.2182L12.8053 3.74941L12.8961 3.64101Z",fill:"currentColor"}))}function bn(n="icon-sm"){return f("svg",{className:n,width:"20",height:"20",viewBox:"0 0 20 20",fill:"none","aria-hidden":!0},f("path",{d:"M5.96967 5.96967C6.26256 5.67678 6.73744 5.67678 7.03033 5.96967L10 8.93934L12.9697 5.96967C13.2626 5.67678 13.7374 5.67678 14.0303 5.96967C14.3232 6.26256 14.3232 6.73744 14.0303 7.03033L11.0607 10L14.0303 12.9697C14.3232 13.2626 14.3232 13.7374 14.0303 14.0303C13.7374 14.3232 13.2626 14.3232 12.9697 14.0303L10 11.0607L7.03033 14.0303C6.73744 14.3232 6.26256 14.3232 5.96967 14.0303C5.67678 13.7374 5.67678 13.2626 5.96967 12.9697L8.93934 10L5.96967 7.03033C5.67678 6.73744 5.67678 6.26256 5.96967 5.96967Z",fill:"currentColor"}))}function fp(){return f("svg",{className:"icon-sm",width:"20",height:"20",viewBox:"0 0 20 20",fill:"none","aria-hidden":!0},f("path",{d:"M9.33496 16.5V10.665H3.5C3.13273 10.665 2.83496 10.3673 2.83496 10C2.83496 9.63273 3.13273 9.33496 3.5 9.33496H9.33496V3.5C9.33496 3.13273 9.63273 2.83496 10 2.83496C10.3673 2.83496 10.665 3.13273 10.665 3.5V9.33496H16.5L16.6338 9.34863C16.9369 9.41057 17.165 9.67857 17.165 10C17.165 10.3214 16.9369 10.5894 16.6338 10.6514L16.5 10.665H10.665V16.5C10.665 16.8673 10.3673 17.165 10 17.165C9.63273 17.165 9.33496 16.8673 9.33496 16.5Z",fill:"currentColor"}))}function Sr(n="icon-sm"){return f("svg",{className:n,width:"21",height:"21",viewBox:"0 0 21 21",fill:"none","aria-hidden":!0},f("path",{d:"M4.43945 12.8041V7.68261C4.43945 7.30642 4.74446 7.00141 5.12066 7.00141C5.49685 7.00141 5.80186 7.30642 5.80186 7.68261V12.8041C5.80186 15.2565 7.78984 17.2445 10.2422 17.2445C12.6945 17.2445 14.6825 15.2565 14.6825 12.8041V5.9751C14.6823 4.46587 13.4589 3.24247 11.9497 3.24229C10.4403 3.24229 9.21606 4.46576 9.21588 5.9751V12.8041C9.21588 13.3708 9.67553 13.8304 10.2422 13.8304C10.8088 13.8304 11.2685 13.3708 11.2685 12.8041V7.68261C11.2685 7.30642 11.5735 7.00141 11.9497 7.00141C12.3257 7.00159 12.6309 7.30653 12.6309 7.68261V12.8041C12.6309 14.1232 11.5612 15.1929 10.2422 15.1929C8.92314 15.1929 7.85347 14.1232 7.85347 12.8041V5.9751C7.85365 3.71337 9.68791 1.87988 11.9497 1.87988C14.2113 1.88006 16.0447 3.71348 16.0449 5.9751V12.8041C16.0449 16.0089 13.4469 18.6069 10.2422 18.6069C7.03745 18.6069 4.43945 16.0089 4.43945 12.8041Z",fill:"currentColor"}))}function hp(n="icon-sm"){return f("svg",{className:n,width:20,height:20,viewBox:"0 0 20 20",fill:"none","aria-hidden":!0},f("path",{d:Zo,fill:"currentColor"}))}function an(n="icon-sm"){return f("svg",{className:n,width:"20",height:"20",viewBox:"0 0 20 20",fill:"none","aria-hidden":!0},f("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M5.69336 11.0557C7.05891 11.1944 8.12484 12.3479 8.125 13.75L8.11035 14.0273C7.97144 15.3928 6.81814 16.459 5.41602 16.459L5.13965 16.4443C3.86514 16.3149 2.85128 15.3018 2.72168 14.0273L2.70801 13.75C2.70818 12.2546 3.92061 11.0423 5.41602 11.042L5.69336 11.0557ZM5.41602 12.3721C4.65515 12.3724 4.03826 12.9891 4.03809 13.75C4.03826 14.5109 4.65515 15.1286 5.41602 15.1289C6.17714 15.1289 6.79475 14.5111 6.79492 13.75C6.79475 12.9889 6.17714 12.3721 5.41602 12.3721Z",fill:"currentColor"}),f("path",{d:"M16.8008 13.0986C17.1036 13.1608 17.3311 13.4288 17.3311 13.75C17.3311 14.0712 17.1036 14.3392 16.8008 14.4014L16.666 14.415H10.833C10.4659 14.4149 10.168 14.1172 10.168 13.75C10.168 13.3828 10.4659 13.0851 10.833 13.085H16.666L16.8008 13.0986Z",fill:"currentColor"}),f("path",{d:"M16.8008 5.59863C17.1036 5.66081 17.3311 5.92879 17.3311 6.25C17.3311 6.57121 17.1036 6.83919 16.8008 6.90137L16.666 6.91504H10.833C10.4659 6.91491 10.168 6.61719 10.168 6.25C10.168 5.88281 10.4659 5.58509 10.833 5.58496H16.666L16.8008 5.59863Z",fill:"currentColor"}),f("path",{d:"M7.13311 3.76578C7.35346 3.47216 7.771 3.4128 8.06475 3.63297C8.35843 3.85336 8.41789 4.27084 8.19757 4.56461L5.19757 8.56461C5.0819 8.71866 4.90439 8.81462 4.71221 8.82828C4.5201 8.84178 4.33083 8.77209 4.19464 8.6359L2.69464 7.1359C2.43512 6.87623 2.43512 6.45415 2.69464 6.19449C2.95429 5.93484 3.37633 5.93493 3.63604 6.19449L4.59307 7.15152L7.13311 3.76578Z",fill:"currentColor"}))}function mp(n="icon-sm"){return f("svg",{className:n,width:"20",height:"20",viewBox:"0 0 20 20",fill:"none","aria-hidden":!0},f("path",{d:"M12.6683 4.16699C12.6683 3.84391 12.4065 3.58203 12.0834 3.58203C11.7603 3.58203 11.4984 3.84391 11.4984 4.16699V7.91699L11.4847 8.05078C11.4227 8.35375 11.1547 8.58203 10.8334 8.58203C10.4662 8.58203 10.1685 8.28411 10.1683 7.91699V3.75C10.1683 3.42691 9.90646 3.16504 9.58337 3.16504C9.26029 3.16504 8.99841 3.42691 8.99841 3.75V7.91699C8.99824 8.28411 8.70053 8.58203 8.33337 8.58203C7.96621 8.58203 7.66851 8.28411 7.66833 7.91699V5C7.66833 4.67691 7.40646 4.41504 7.08337 4.41504C6.76029 4.41504 6.49841 4.67691 6.49841 5V9.30371C6.53326 9.3429 6.56715 9.38359 6.59998 9.42578L8.02478 11.2588C8.25005 11.5486 8.19821 11.9659 7.90857 12.1914C7.6187 12.4169 7.20048 12.365 6.97498 12.0752L5.55017 10.2432C5.15812 9.7391 4.41813 9.73637 4.01501 10.1924C4.04396 10.426 4.11486 10.8323 4.25525 11.3486C4.44664 12.0525 4.75404 12.9113 5.21619 13.7383C6.14103 15.3931 7.62465 16.835 10.0004 16.835C12.8545 16.8348 15.1682 14.5211 15.1683 11.667V6.25C15.1683 5.92691 14.9065 5.66504 14.5834 5.66504C14.2603 5.66504 13.9984 5.92691 13.9984 6.25V9.16699C13.9982 9.53411 13.7005 9.83203 13.3334 9.83203C12.9662 9.83203 12.6685 9.53411 12.6683 9.16699V4.16699ZM13.9984 4.42578C14.1828 4.36671 14.3794 4.33496 14.5834 4.33496C15.641 4.33496 16.4984 5.19237 16.4984 6.25V11.667C16.4982 15.2557 13.589 18.1649 10.0004 18.165C6.95953 18.165 5.10939 16.2734 4.05505 14.3867C3.52774 13.4431 3.1843 12.4787 2.97205 11.6982C2.76447 10.9349 2.66834 10.2954 2.66833 10C2.66833 9.87959 2.70117 9.76148 2.76306 9.6582C3.28988 8.78018 4.26555 8.40372 5.16833 8.56152V5C5.16833 3.94237 6.02575 3.08496 7.08337 3.08496C7.31706 3.08496 7.54039 3.12845 7.74744 3.20508C7.98218 2.41297 8.7151 1.83496 9.58337 1.83496C10.1836 1.83496 10.7186 2.11176 11.0697 2.54395C11.3639 2.35978 11.7107 2.25195 12.0834 2.25195C13.141 2.25195 13.9984 3.10937 13.9984 4.16699V4.42578Z",fill:"currentColor"}))}function gp(n="icon-sm"){return f("svg",{className:n,width:"20",height:"20",viewBox:"0 0 20 20",fill:"none","aria-hidden":!0},f("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M9.06543 1.95123C9.66107 1.69076 10.3389 1.69071 10.9346 1.95123L15.9346 4.13873C16.7832 4.51008 17.3311 5.34917 17.3311 6.27545V10.5528C17.3309 14.6017 14.0489 17.8847 10 17.8848C5.95108 17.8846 2.66813 14.6017 2.66797 10.5528V6.27545C2.66797 5.34924 3.21695 4.51012 4.06543 4.13873L9.06543 1.95123ZM10.4014 3.16998C10.1456 3.05814 9.85444 3.05819 9.59863 3.16998L4.59863 5.35748C4.23427 5.51708 3.99805 5.87764 3.99805 6.27545V10.5528C3.99821 13.8671 6.68563 16.5546 10 16.5547C13.3144 16.5546 16.0008 13.8671 16.001 10.5528V6.27545C16.001 5.87756 15.7658 5.51703 15.4014 5.35748L10.4014 3.16998Z",fill:"currentColor"}),f("path",{d:"M13.4678 11.4318L13.333 11.4182H10.833C10.466 11.4183 10.1682 11.7162 10.168 12.0832C10.168 12.4504 10.4659 12.7481 10.833 12.7482H13.333L13.4678 12.7346C13.7706 12.6724 13.9981 12.4044 13.9981 12.0832C13.9979 11.7621 13.7706 11.494 13.4678 11.4318Z",fill:"currentColor"}),f("path",{d:"M7.65336 12.426C7.46431 12.7406 7.05607 12.8424 6.74125 12.6535C6.42646 12.4646 6.32395 12.0563 6.51274 11.7414L7.55668 10.0002L6.51274 8.25899C6.32395 7.94412 6.42646 7.53583 6.74125 7.34688C7.05607 7.15799 7.46431 7.25975 7.65336 7.57442L8.90336 9.6584C9.0296 9.86893 9.0296 10.1315 8.90336 10.342L7.65336 12.426Z",fill:"currentColor"}))}function xp(n="icon-sm"){return f("svg",{className:n,width:"20",height:"20",viewBox:"0 0 20 20",fill:"none","aria-hidden":!0},f("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M9.06543 1.95123C9.66107 1.69076 10.3389 1.69071 10.9346 1.95123L15.9346 4.13873C16.7832 4.51008 17.3311 5.34917 17.3311 6.27545V10.5528C17.3309 14.6017 14.0489 17.8847 10 17.8848C5.95108 17.8846 2.66813 14.6017 2.66797 10.5528V6.27545C2.66797 5.34924 3.21695 4.51012 4.06543 4.13873L9.06543 1.95123ZM10.4014 3.16998C10.1456 3.05814 9.85444 3.05819 9.59863 3.16998L4.59863 5.35748C4.23427 5.51708 3.99805 5.87764 3.99805 6.27545V10.5528C3.99821 13.8671 6.68563 16.5546 10 16.5547C13.3144 16.5546 16.0008 13.8671 16.001 10.5528V6.27545C16.001 5.87756 15.7658 5.51703 15.4014 5.35748L10.4014 3.16998Z",fill:"currentColor"}),f("path",{d:"M10.8883 13.1116C10.8883 13.6025 10.4903 14.0005 9.99936 14.0005C9.50844 14.0005 9.11047 13.6025 9.11047 13.1116C9.11047 12.6207 9.50844 12.2227 9.99936 12.2227C10.4903 12.2227 10.8883 12.6207 10.8883 13.1116Z",fill:"currentColor"}),f("path",{d:"M10.5169 10.8949L11.1135 7.31519C11.2283 6.62672 10.6974 6 9.99941 6C9.30145 6 8.77053 6.62672 8.88528 7.31519L9.4819 10.8949C9.52406 11.1479 9.74294 11.3333 9.99941 11.3333C10.2559 11.3333 10.4748 11.1479 10.5169 10.8949Z",fill:"currentColor"}))}function bp(n="icon-sm"){return f("svg",{className:n,width:"20",height:"20",viewBox:"0 0 20 20",fill:"none","aria-hidden":!0},f("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M9.99944 7.24939C11.5169 7.2495 12.7473 8.47995 12.7475 9.99744C12.7475 11.5151 11.517 12.7454 9.99944 12.7455C8.48176 12.7455 7.2514 11.5151 7.2514 9.99744C7.25155 8.47988 8.48186 7.24939 9.99944 7.24939ZM9.99944 8.57947C9.2164 8.57947 8.58163 9.21442 8.58148 9.99744C8.58148 10.7806 9.2163 11.4154 9.99944 11.4154C10.7825 11.4153 11.4174 10.7805 11.4174 9.99744C11.4173 9.21449 10.7824 8.57958 9.99944 8.57947Z",fill:"currentColor"}),f("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M10.6391 1.67517C11.2939 1.67532 11.8991 2.02577 12.226 2.59314L13.2485 4.36755H15.2963C15.9505 4.36758 16.555 4.71709 16.8823 5.28357L17.5219 6.39001C17.8489 6.95668 17.8481 7.65542 17.5209 8.22205L16.4975 9.99451L17.5239 11.7689C17.8519 12.3357 17.8521 13.0347 17.5248 13.6019L16.8862 14.7084C16.559 15.2747 15.9543 15.6243 15.3002 15.6244H13.2514L12.2299 17.3988C11.9029 17.9663 11.297 18.3168 10.642 18.3168L9.3637 18.3158C8.71064 18.3155 8.10718 17.9678 7.77972 17.4027L6.74847 15.6234L4.69964 15.6244C4.04558 15.6242 3.44087 15.2747 3.1137 14.7084L2.47503 13.6019C2.14791 13.0349 2.14836 12.3366 2.47601 11.7699L3.50237 9.99548L2.47894 8.22205C2.15175 7.65533 2.15174 6.95673 2.47894 6.39001L3.11761 5.28259C3.44458 4.71663 4.04894 4.36813 4.70257 4.36755L6.75042 4.36658L7.77581 2.59119C8.10301 2.02476 8.7076 1.67527 9.36175 1.67517H10.6391ZM9.36273 3.00623C9.1835 3.00623 9.01679 3.10199 8.92718 3.2572L7.82659 5.16345C7.63652 5.49253 7.28473 5.69529 6.90472 5.69568L4.70355 5.69763C4.52451 5.69782 4.3585 5.79355 4.26898 5.94861L3.6303 7.05505C3.54091 7.2102 3.54077 7.40192 3.6303 7.55701L4.73089 9.46326C4.92108 9.7929 4.92135 10.1992 4.73089 10.5287L3.62737 12.4359C3.5378 12.591 3.53792 12.7817 3.62737 12.9369L4.26605 14.0433C4.35567 14.1982 4.52067 14.2932 4.69964 14.2933L6.90276 14.2943C7.28242 14.2946 7.63335 14.497 7.82366 14.8256L8.93011 16.7357C9.01984 16.8905 9.18578 16.9857 9.36468 16.9857H10.642C10.8213 16.9857 10.987 16.89 11.0766 16.7347L12.1752 14.8275C12.3653 14.4975 12.7182 14.2943 13.0991 14.2943H15.3002C15.4794 14.2942 15.6452 14.1985 15.7348 14.0433L16.3725 12.9379C16.4621 12.7826 16.4621 12.5911 16.3725 12.4359L15.27 10.5287C15.1032 10.2404 15.0808 9.89331 15.2055 9.59021L15.269 9.46326L16.3696 7.55701C16.4591 7.40189 16.459 7.21022 16.3696 7.05505L15.7309 5.94861C15.6412 5.79363 15.4754 5.69863 15.2963 5.69861L13.0951 5.69763L12.9535 5.68884C12.6751 5.65158 12.4217 5.50519 12.2504 5.28259L12.1723 5.16443L11.0737 3.2572C10.9841 3.10175 10.8175 3.00525 10.6381 3.00525L9.36273 3.00623Z",fill:"currentColor"}))}function Es(n="icon-sm"){return f("svg",{className:n,width:"20",height:"20",viewBox:"0 0 20 20",fill:"none","aria-hidden":!0},f("path",{d:"M10.6878 9.46029L10.8421 9.49545L17.2913 11.43L17.4642 11.4974C18.2215 11.8649 18.2705 12.9544 17.5492 13.388L17.3822 13.4701L14.5872 14.5872L13.4701 17.3822C13.1135 18.2734 11.8913 18.2756 11.4974 17.4642L11.43 17.2913L9.49544 10.8421C9.26342 10.0687 9.92452 9.34418 10.6878 9.46029ZM12.4984 16.2288L13.3929 13.9954L13.4388 13.8949C13.5579 13.6675 13.7549 13.4891 13.9954 13.3929L16.2288 12.4984L10.9007 10.9007L12.4984 16.2288ZM5.90365 12.9749C6.16329 12.7153 6.58436 12.7154 6.84408 12.9749C7.10378 13.2346 7.10378 13.6557 6.84408 13.9154L5.0765 15.6829C4.8168 15.9426 4.39577 15.9426 4.13607 15.6829C3.87654 15.4232 3.87643 15.0022 4.13607 14.7425L5.90365 12.9749ZM2.83724 7.3265L5.25228 7.97299L5.37826 8.02084C5.65484 8.1591 5.80597 8.47712 5.72298 8.78744C5.63984 9.09774 5.34997 9.298 5.04134 9.27963L4.90853 9.25814L2.49349 8.61068L2.36752 8.56283C2.09082 8.42452 1.93961 8.10666 2.02279 7.79623C2.10599 7.4859 2.39574 7.28652 2.70443 7.30502L2.83724 7.3265ZM14.847 4.05111C15.1051 3.88059 15.4556 3.90894 15.6829 4.13607C15.9426 4.39577 15.9426 4.8168 15.6829 5.0765L13.9154 6.84408C13.6557 7.10378 13.2346 7.10378 12.9749 6.84408C12.7154 6.58437 12.7153 6.16329 12.9749 5.90365L14.7425 4.13607L14.847 4.05111ZM7.79623 2.02279C8.15098 1.92773 8.51562 2.13874 8.61068 2.49349L9.25814 4.90853L9.27962 5.04135C9.298 5.34998 9.09774 5.63984 8.78744 5.72299C8.47713 5.80592 8.15908 5.65484 8.02084 5.37826L7.97298 5.25228L7.3265 2.83724L7.30502 2.70443C7.28652 2.39577 7.48595 2.10603 7.79623 2.02279Z",fill:"currentColor"}))}const yp='@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-border-style:solid;--tw-leading:initial;--tw-font-weight:initial;--tw-ordinal:initial;--tw-slashed-zero:initial;--tw-numeric-figure:initial;--tw-numeric-spacing:initial;--tw-numeric-fraction:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-backdrop-blur:initial;--tw-backdrop-brightness:initial;--tw-backdrop-contrast:initial;--tw-backdrop-grayscale:initial;--tw-backdrop-hue-rotate:initial;--tw-backdrop-invert:initial;--tw-backdrop-opacity:initial;--tw-backdrop-saturate:initial;--tw-backdrop-sepia:initial;--tw-duration:initial;--tw-ease:initial;--tw-outline-style:solid;--top-fade:0;--bottom-fade:0;--edge-fade-distance:1rem}}}@layer theme{:root,:host{--font-sans:var(--vscode-font-family,-apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif);--font-mono:var(--vscode-editor-font-family,ui-monospace, "SFMono-Regular", "SF Mono", Menlo, Consolas, monospace);--color-black:#000;--spacing:.25rem;--text-xs:11px;--text-xs--line-height:calc(1 / .75);--text-sm:12px;--text-sm--line-height:calc(1.25 / .875);--text-base:14px;--text-base--line-height: 1.5 ;--font-weight-medium:500;--radius-md:calc(var(--radius-md-base) * var(--corner-radius-scale));--radius-lg:calc(var(--radius-lg-base) * var(--corner-radius-scale));--radius-xl:calc(var(--radius-xl-base) * var(--corner-radius-scale));--radius-2xl:calc(var(--radius-2xl-base) * var(--corner-radius-scale));--radius-3xl:calc(var(--radius-3xl-base) * var(--corner-radius-scale));--shadow-xl:0px 8px 16px -4px #0000001f;--ease-out:cubic-bezier(0, 0, .2, 1);--blur-sm:8px;--blur-lg:16px;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4, 0, .2, 1);--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono);--color-token-foreground:var(--agent-text);--color-token-description-foreground:var(--agent-muted);--color-token-input-background:var(--agent-input-bg);--color-token-dropdown-background:var(--agent-surface-elevated);--color-token-border:var(--agent-border);--color-token-border-heavy:var(--agent-border-strong);--color-token-button-foreground:var(--agent-text);--color-token-button-background:var(--agent-accent);--color-token-button-secondary-foreground:var(--agent-text);--color-token-button-secondary-background:var(--agent-control);--color-token-button-secondary-hover-background:var(--agent-control-hover);--color-token-input-placeholder-foreground:var(--agent-muted);--color-token-charts-blue:var(--agent-accent);--color-token-text-tertiary:var(--agent-muted);--color-token-menu-border:var(--agent-border);--color-token-list-hover-background:var(--agent-control-hover);--color-token-side-bar-background:var(--agent-surface-elevated);--color-token-text-link-foreground:var(--agent-accent);--color-token-editor-background:var(--agent-page-bg);--corner-radius-scale:1;--radius-md-base:.5rem;--radius-lg-base:.625rem;--radius-xl-base:.75rem;--radius-2xl-base:1rem;--radius-3xl-base:1.25rem;--spacing-token-button-composer:calc(var(--spacing) * 7);--spacing-token-button-composer-sm:calc(var(--spacing) * 5);--spacing-token-button-composer-gap:var(--spacing);--h-token-button-composer-gap:var(--spacing-token-button-composer-gap)}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;tab-size:4;line-height:1.5;font-family:var(--default-font-family,ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab,red,red)){::placeholder{color:color-mix(in oklab,currentcolor 50%,transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){appearance:button}::file-selector-button{appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}}@layer components;@layer utilities{.pointer-events-auto{pointer-events:auto}.pointer-events-none{pointer-events:none}.collapse{visibility:collapse}.invisible{visibility:hidden}.visible{visibility:visible}.absolute{position:absolute}.relative{position:relative}.inset-x-0{inset-inline:calc(var(--spacing) * 0)}.top-0{top:calc(var(--spacing) * 0)}.top-1\\/2{top:50%}.right-2\\.5{right:calc(var(--spacing) * 2.5)}.bottom-0{bottom:calc(var(--spacing) * 0)}.bottom-\\[calc\\(100\\%\\+6px\\)\\]{bottom:calc(100% + 6px)}.bottom-full{bottom:100%}.left-0{left:calc(var(--spacing) * 0)}.z-10{z-index:10}.z-20{z-index:20}.z-50{z-index:50}.container{width:100%}@media(min-width:40rem){.container{max-width:40rem}}@media(min-width:48rem){.container{max-width:48rem}}@media(min-width:64rem){.container{max-width:64rem}}@media(min-width:80rem){.container{max-width:80rem}}@media(min-width:96rem){.container{max-width:96rem}}.m-px{margin:1px}.ms-1{margin-inline-start:calc(var(--spacing) * 1)}.mt-1\\.5{margin-top:calc(var(--spacing) * 1.5)}.mr-1{margin-right:calc(var(--spacing) * 1)}.mr-\\[3px\\]{margin-right:3px}.mb-1{margin-bottom:calc(var(--spacing) * 1)}.mb-2{margin-bottom:calc(var(--spacing) * 2)}.mb-px{margin-bottom:1px}.ml-1\\.5{margin-left:calc(var(--spacing) * 1.5)}.ml-auto{margin-left:auto}.box-border{box-sizing:border-box}.block{display:block}.contents{display:contents}.flex{display:flex}.grid{display:grid}.hidden{display:none}.inline{display:inline}.inline-block{display:inline-block}.inline-flex{display:inline-flex}.aspect-square{aspect-ratio:1}.size-16{width:calc(var(--spacing) * 16);height:calc(var(--spacing) * 16)}.size-\\[22px\\]{width:22px;height:22px}.size-token-button-composer{width:var(--spacing-token-button-composer);height:var(--spacing-token-button-composer)}.\\!h-auto{height:auto!important}.h-0{height:calc(var(--spacing) * 0)}.h-3{height:calc(var(--spacing) * 3)}.h-4{height:calc(var(--spacing) * 4)}.h-5{height:calc(var(--spacing) * 5)}.h-6{height:calc(var(--spacing) * 6)}.h-8{height:calc(var(--spacing) * 8)}.h-9{height:calc(var(--spacing) * 9)}.h-\\[1lh\\]{height:1lh}.h-\\[1px\\]{height:1px}.h-auto{height:auto}.h-full{height:100%}.h-token-button-composer{height:var(--spacing-token-button-composer)}.h-token-button-composer-sm{height:var(--spacing-token-button-composer-sm)}.max-h-\\[25dvh\\]{max-height:25dvh}.max-h-\\[140px\\]{max-height:140px}.max-h-none{max-height:none}.min-h-0{min-height:calc(var(--spacing) * 0)}.min-h-\\[1\\.25rem\\]{min-height:1.25rem}.w-3{width:calc(var(--spacing) * 3)}.w-4{width:calc(var(--spacing) * 4)}.w-7{width:calc(var(--spacing) * 7)}.w-52{width:calc(var(--spacing) * 52)}.w-fit{width:fit-content}.w-full{width:100%}.w-max{width:max-content}.w-px{width:1px}.max-w-16{max-width:calc(var(--spacing) * 16)}.max-w-20{max-width:calc(var(--spacing) * 20)}.max-w-40{max-width:calc(var(--spacing) * 40)}.max-w-\\[60\\%\\]{max-width:60%}.max-w-\\[77\\%\\]{max-width:77%}.max-w-\\[320px\\]{max-width:320px}.max-w-full{max-width:100%}.max-w-none{max-width:none}.min-w-0{min-width:calc(var(--spacing) * 0)}.min-w-56{min-width:calc(var(--spacing) * 56)}.min-w-max{min-width:max-content}.flex-1{flex:1}.flex-none{flex:none}.flex-shrink-0{flex-shrink:0}.shrink{flex-shrink:1}.shrink-0{flex-shrink:0}.flex-grow{flex-grow:1}.-translate-y-1\\/2{--tw-translate-y: -50% ;translate:var(--tw-translate-x) var(--tw-translate-y)}.rotate-90{rotate:90deg}.rotate-180{rotate:180deg}.cursor-default{cursor:default}.cursor-pointer{cursor:pointer}.resize{resize:both}.grid-cols-\\[auto_minmax\\(0\\,1fr\\)_auto\\]{grid-template-columns:auto minmax(0,1fr) auto}.grid-cols-\\[minmax\\(0\\,auto\\)_auto_minmax\\(0\\,1fr\\)\\]{grid-template-columns:minmax(0,auto) auto minmax(0,1fr)}.flex-col{flex-direction:column}.flex-row-reverse{flex-direction:row-reverse}.flex-wrap{flex-wrap:wrap}.items-center{align-items:center}.items-end{align-items:flex-end}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.justify-end{justify-content:flex-end}.justify-start{justify-content:flex-start}.gap-0\\.5{gap:calc(var(--spacing) * .5)}.gap-1{gap:calc(var(--spacing) * 1)}.gap-1\\.5{gap:calc(var(--spacing) * 1.5)}.gap-2{gap:calc(var(--spacing) * 2)}.gap-4{gap:calc(var(--spacing) * 4)}.gap-\\[5px\\]{gap:5px}.self-start{align-self:flex-start}.truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.overflow-clip{overflow:clip}.overflow-hidden{overflow:hidden}.overflow-visible{overflow:visible}.overflow-x-auto{overflow-x:auto}.overflow-y-auto{overflow-y:auto}.rounded{border-radius:.25rem}.rounded-2xl{border-radius:var(--radius-2xl)}.rounded-3xl{border-radius:var(--radius-3xl)}.rounded-full{border-radius:3.40282e38px}.rounded-lg{border-radius:var(--radius-lg)}.rounded-md{border-radius:var(--radius-md)}.rounded-xl{border-radius:var(--radius-xl)}.border{border-style:var(--tw-border-style);border-width:1px}.border-\\[color\\:var\\(--gray-0\\)\\]{border-color:var(--gray-0)}.border-token-border,.border-token-border\\/80{border-color:var(--color-token-border)}@supports (color:color-mix(in lab,red,red)){.border-token-border\\/80{border-color:color-mix(in oklab,var(--color-token-border) 80%,transparent)}}.border-transparent{border-color:#0000}.bg-\\[color\\:var\\(--gray-0\\)\\]{background-color:var(--gray-0)}.bg-token-border\\/70{background-color:var(--color-token-border)}@supports (color:color-mix(in lab,red,red)){.bg-token-border\\/70{background-color:color-mix(in oklab,var(--color-token-border) 70%,transparent)}}.bg-token-button-secondary-background{background-color:var(--color-token-button-secondary-background)}.bg-token-charts-blue{background-color:var(--color-token-charts-blue)}.bg-token-dropdown-background,.bg-token-dropdown-background\\/90{background-color:var(--color-token-dropdown-background)}@supports (color:color-mix(in lab,red,red)){.bg-token-dropdown-background\\/90{background-color:color-mix(in oklab,var(--color-token-dropdown-background) 90%,transparent)}}.bg-token-dropdown-background\\/95{background-color:var(--color-token-dropdown-background)}@supports (color:color-mix(in lab,red,red)){.bg-token-dropdown-background\\/95{background-color:color-mix(in oklab,var(--color-token-dropdown-background) 95%,transparent)}}.bg-token-foreground,.bg-token-foreground\\/5{background-color:var(--color-token-foreground)}@supports (color:color-mix(in lab,red,red)){.bg-token-foreground\\/5{background-color:color-mix(in oklab,var(--color-token-foreground) 5%,transparent)}}.bg-token-foreground\\/10{background-color:var(--color-token-foreground)}@supports (color:color-mix(in lab,red,red)){.bg-token-foreground\\/10{background-color:color-mix(in oklab,var(--color-token-foreground) 10%,transparent)}}.bg-token-input-background\\/90{background-color:var(--color-token-input-background)}@supports (color:color-mix(in lab,red,red)){.bg-token-input-background\\/90{background-color:color-mix(in oklab,var(--color-token-input-background) 90%,transparent)}}.bg-token-menu-border{background-color:var(--color-token-menu-border)}.bg-token-side-bar-background{background-color:var(--color-token-side-bar-background)}.\\[mask-image\\:linear-gradient\\(to_right\\,black_calc\\(100\\%_-_0\\.25rem\\)\\,transparent\\)\\]{-webkit-mask-image:linear-gradient(90deg,#000 calc(100% - .25rem),#0000);mask-image:linear-gradient(90deg,#000 calc(100% - .25rem),#0000)}.\\[mask-repeat\\:no-repeat\\]{-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat}.object-cover{object-fit:cover}.p-0\\.5{padding:calc(var(--spacing) * .5)}.p-2{padding:calc(var(--spacing) * 2)}.\\!px-0{padding-inline:calc(var(--spacing) * 0)!important}.px-0\\.5{padding-inline:calc(var(--spacing) * .5)}.px-1{padding-inline:calc(var(--spacing) * 1)}.px-1\\.5{padding-inline:calc(var(--spacing) * 1.5)}.px-2{padding-inline:calc(var(--spacing) * 2)}.px-2\\.5{padding-inline:calc(var(--spacing) * 2.5)}.px-3{padding-inline:calc(var(--spacing) * 3)}.px-\\[var\\(--padding-row-x\\)\\]{padding-inline:var(--padding-row-x)}.py-0{padding-block:calc(var(--spacing) * 0)}.py-0\\.5{padding-block:calc(var(--spacing) * .5)}.py-1{padding-block:calc(var(--spacing) * 1)}.py-1\\.5{padding-block:calc(var(--spacing) * 1.5)}.py-2{padding-block:calc(var(--spacing) * 2)}.py-\\[var\\(--padding-row-y\\)\\]{padding-block:var(--padding-row-y)}.pt-0\\.5{padding-top:calc(var(--spacing) * .5)}.pr-0{padding-right:calc(var(--spacing) * 0)}.pr-1{padding-right:calc(var(--spacing) * 1)}.pr-2{padding-right:calc(var(--spacing) * 2)}.pb-1{padding-bottom:calc(var(--spacing) * 1)}.pl-2{padding-left:calc(var(--spacing) * 2)}.pl-3{padding-left:calc(var(--spacing) * 3)}.text-left{text-align:left}.align-bottom{vertical-align:bottom}.text-base{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.\\!leading-none{--tw-leading:1!important;line-height:1!important}.leading-5{--tw-leading:calc(var(--spacing) * 5);line-height:calc(var(--spacing) * 5)}.leading-\\[18px\\]{--tw-leading:18px;line-height:18px}.leading-\\[calc\\(var\\(--codex-chat-font-size\\)\\+8px\\)\\]{--tw-leading:calc(var(--codex-chat-font-size) + 8px);line-height:calc(var(--codex-chat-font-size) + 8px)}.leading-none{--tw-leading:1;line-height:1}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.break-words{overflow-wrap:break-word}.text-ellipsis{text-overflow:ellipsis}.whitespace-nowrap{white-space:nowrap}.whitespace-pre{white-space:pre}.text-current{color:currentColor}.text-token-button-secondary-foreground{color:var(--color-token-button-secondary-foreground)}.text-token-description-foreground{color:var(--color-token-description-foreground)}.text-token-dropdown-background{color:var(--color-token-dropdown-background)}.text-token-foreground{color:var(--color-token-foreground)}.text-token-input-placeholder-foreground{color:var(--color-token-input-placeholder-foreground)}.text-token-text-tertiary{color:var(--color-token-text-tertiary)}.tabular-nums{--tw-numeric-spacing:tabular-nums;font-variant-numeric:var(--tw-ordinal,) var(--tw-slashed-zero,) var(--tw-numeric-figure,) var(--tw-numeric-spacing,) var(--tw-numeric-fraction,)}.opacity-0{opacity:0}.opacity-50{opacity:.5}.opacity-100{opacity:1}.shadow{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a), 0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-md{--tw-shadow:0px 2px 4px -1px var(--tw-shadow-color,#00000014);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-sm{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a), 0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ring-\\[0\\.5px\\]{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(.5px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ring-token-border{--tw-ring-color:var(--color-token-border)}.outline-hidden{--tw-outline-style:none;outline-style:none}@media(forced-colors:active){.outline-hidden{outline-offset:2px;outline:2px solid #0000}}.backdrop-blur-lg{--tw-backdrop-blur:blur(var(--blur-lg));-webkit-backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,)}.backdrop-blur-sm{--tw-backdrop-blur:blur(var(--blur-sm));-webkit-backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,)}.transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-opacity{transition-property:opacity;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-transform{transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.duration-200{--tw-duration:.2s;transition-duration:.2s}.ease-out{--tw-ease:var(--ease-out);transition-timing-function:var(--ease-out)}.select-none{-webkit-user-select:none;user-select:none}.\\[--edge-fade-distance\\:2rem\\]{--edge-fade-distance:2rem}.group-focus-within\\:opacity-100:is(:where(.group):focus-within *){opacity:1}@media(hover:hover){.group-hover\\:opacity-100:is(:where(.group):hover *){opacity:1}.group-hover\\/collapsed-tool-activity\\:text-token-foreground:is(:where(.group\\/collapsed-tool-activity):hover *){color:var(--color-token-foreground)}.hover\\:bg-token-button-secondary-hover-background:hover{background-color:var(--color-token-button-secondary-hover-background)}.hover\\:bg-token-editor-background\\/40:hover{background-color:var(--color-token-editor-background)}@supports (color:color-mix(in lab,red,red)){.hover\\:bg-token-editor-background\\/40:hover{background-color:color-mix(in oklab,var(--color-token-editor-background) 40%,transparent)}}.hover\\:bg-token-list-hover-background:hover{background-color:var(--color-token-list-hover-background)}.hover\\:bg-transparent:hover{background-color:#0000}.hover\\:text-token-button-foreground:hover{color:var(--color-token-button-foreground)}.hover\\:text-token-foreground:hover{color:var(--color-token-foreground)}}.focus\\:bg-token-list-hover-background:focus{background-color:var(--color-token-list-hover-background)}.focus\\:outline-none:focus{--tw-outline-style:none;outline-style:none}.focus-visible\\:outline-2:focus-visible{outline-style:var(--tw-outline-style);outline-width:2px}.focus-visible\\:outline-token-button-background:focus-visible{outline-color:var(--color-token-button-background)}@media(hover:hover){.enabled\\:hover\\:bg-token-foreground\\/80:enabled:hover{background-color:var(--color-token-foreground)}@supports (color:color-mix(in lab,red,red)){.enabled\\:hover\\:bg-token-foreground\\/80:enabled:hover{background-color:color-mix(in oklab,var(--color-token-foreground) 80%,transparent)}}.enabled\\:hover\\:bg-token-list-hover-background:enabled:hover{background-color:var(--color-token-list-hover-background)}}.disabled\\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\\:opacity-40:disabled{opacity:.4}.data-\\[state\\=checked\\]\\:translate-x-\\[14px\\][data-state=checked]{--tw-translate-x:14px;translate:var(--tw-translate-x) var(--tw-translate-y)}.data-\\[state\\=open\\]\\:bg-token-foreground\\/80[data-state=open]{background-color:var(--color-token-foreground)}@supports (color:color-mix(in lab,red,red)){.data-\\[state\\=open\\]\\:bg-token-foreground\\/80[data-state=open]{background-color:color-mix(in oklab,var(--color-token-foreground) 80%,transparent)}}.data-\\[state\\=open\\]\\:bg-token-list-hover-background[data-state=open]{background-color:var(--color-token-list-hover-background)}.data-\\[state\\=unchecked\\]\\:translate-x-\\[2px\\][data-state=unchecked]{--tw-translate-x:2px;translate:var(--tw-translate-x) var(--tw-translate-y)}@container (min-width:500px){.\\@\\[500px\\]\\:inline{display:inline}}.electron\\:rounded-md:where([data-codex-window-type=electron],[data-codex-window-type=electron] *){border-radius:var(--radius-md)}.electron\\:p-1:where([data-codex-window-type=electron],[data-codex-window-type=electron] *){padding:calc(var(--spacing) * 1)}.electron\\:shadow-\\[0_4px_16px_0_rgba\\(0\\,0\\,0\\,0\\.05\\)\\]:where([data-codex-window-type=electron],[data-codex-window-type=electron] *){--tw-shadow:0 4px 16px 0 var(--tw-shadow-color,#0000000d);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.electron\\:ring:where([data-codex-window-type=electron],[data-codex-window-type=electron] *){--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.electron\\:ring-black\\/10:where([data-codex-window-type=electron],[data-codex-window-type=electron] *){--tw-ring-color:#0000001a}@supports (color:color-mix(in lab,red,red)){.electron\\:ring-black\\/10:where([data-codex-window-type=electron],[data-codex-window-type=electron] *){--tw-ring-color:color-mix(in oklab, var(--color-black) 10%, transparent)}}@media(prefers-color-scheme:dark){.electron\\:dark\\:bg-token-dropdown-background:where([data-codex-window-type=electron],[data-codex-window-type=electron] *){background-color:var(--color-token-dropdown-background)}}.extension\\:border:where([data-codex-window-type=extension],[data-codex-window-type=extension] *){border-style:var(--tw-border-style);border-width:1px}.extension\\:border-token-border\\/50:where([data-codex-window-type=extension],[data-codex-window-type=extension] *){border-color:var(--color-token-border)}@supports (color:color-mix(in lab,red,red)){.extension\\:border-token-border\\/50:where([data-codex-window-type=extension],[data-codex-window-type=extension] *){border-color:color-mix(in oklab,var(--color-token-border) 50%,transparent)}}.\\[\\&_\\.ProseMirror\\]\\:\\!h-5 .ProseMirror{height:calc(var(--spacing) * 5)!important}.\\[\\&_\\.ProseMirror\\]\\:h-auto .ProseMirror{height:auto}.\\[\\&_\\.ProseMirror\\]\\:\\!min-h-5 .ProseMirror{min-height:calc(var(--spacing) * 5)!important}.\\[\\&_\\.ProseMirror\\]\\:min-h-\\[2rem\\] .ProseMirror{min-height:2rem}.\\[\\&_\\.ProseMirror\\]\\:min-w-0 .ProseMirror{min-width:calc(var(--spacing) * 0)}.\\[\\&_\\.ProseMirror\\]\\:flex-1 .ProseMirror{flex:1}.\\[\\&_\\.ProseMirror\\]\\:resize-none .ProseMirror{resize:none}.\\[\\&_\\.ProseMirror\\]\\:overflow-hidden .ProseMirror{overflow:hidden}.\\[\\&_\\.ProseMirror\\]\\:leading-5 .ProseMirror{--tw-leading:calc(var(--spacing) * 5);line-height:calc(var(--spacing) * 5)}.\\[\\&_\\.ProseMirror\\]\\:whitespace-nowrap .ProseMirror{white-space:nowrap}.\\[\\&_\\.ProseMirror\\]\\:focus-visible\\:outline-none .ProseMirror:focus-visible{--tw-outline-style:none;outline-style:none}.\\[\\&_\\.ProseMirror_p\\]\\:m-0 .ProseMirror p{margin:calc(var(--spacing) * 0)}.\\[\\&_\\.ProseMirror_p\\]\\:overflow-hidden .ProseMirror p{overflow:hidden}.\\[\\&_\\.ProseMirror_p\\]\\:text-ellipsis .ProseMirror p{text-overflow:ellipsis}.\\[\\&_\\.ProseMirror_p\\]\\:whitespace-nowrap .ProseMirror p{white-space:nowrap}.\\[\\&_\\.contain-inline-size\\]\\:\\[contain\\:initial\\] .contain-inline-size{contain:initial}.\\[\\&\\>\\*\\:last-child\\]\\:mb-0>:last-child{margin-bottom:calc(var(--spacing) * 0)}.\\[\\&\\>ol\\:first-child\\]\\:mt-0>ol:first-child,.\\[\\&\\>ul\\:first-child\\]\\:mt-0>ul:first-child{margin-top:calc(var(--spacing) * 0)}}@property --top-fade{syntax:"";inherits:false;initial-value:0}@property --bottom-fade{syntax:"";inherits:false;initial-value:0}@property --edge-fade-distance{syntax:"";inherits:false;initial-value:1rem}@keyframes edge-fade{0%,1%{--top-fade:0;--bottom-fade:var(--edge-fade-distance,1rem)}99%,to{--top-fade:var(--edge-fade-distance,1rem);--bottom-fade:0}}@supports (animation-timeline:--scroll-fade){.vertical-scroll-fade-mask{-webkit-mask:linear-gradient(to bottom in oklch,oklch(60% 0 0/0),oklch(85% 0 0) var(--top-fade) calc(100% - var(--bottom-fade)),oklch(60% 0 0/0));mask:linear-gradient(to bottom in oklch,oklch(60% 0 0/0),oklch(85% 0 0) var(--top-fade) calc(100% - var(--bottom-fade)),oklch(60% 0 0/0));animation-name:edge-fade;animation-timing-function:linear;animation-fill-mode:both;animation-timeline:scroll(self y)}}:root{color-scheme:dark;font-family:var(--font-sans);color:var(--agent-text,#f1f0e8);--agent-page-bg:transparent;--agent-surface:#1c1f1b57;--agent-surface-elevated:#1c1f1b7a;--agent-input-bg:#080a085c;--agent-border:#e9e7d81f;--agent-border-strong:#e9e7d838;--agent-text:#f1f0e8;--agent-muted:#f1f0e894;--agent-soft:#f1f0e8c7;--agent-accent:#8ab4f8;--agent-accent-soft:#8ab4f833;--agent-danger:#ff8d7e;--agent-shadow:#0003;--agent-card:var(--agent-input-bg);background:0 0}@supports (color:color-mix(in lab,red,red)){:root{--agent-card:color-mix(in srgb, var(--agent-input-bg) 90%, transparent)}}:root{--agent-card-hover:var(--agent-input-bg)}@supports (color:color-mix(in lab,red,red)){:root{--agent-card-hover:color-mix(in srgb, var(--agent-input-bg) 96%, transparent)}}:root{--agent-control:var(--agent-input-bg)}@supports (color:color-mix(in lab,red,red)){:root{--agent-control:color-mix(in srgb, var(--agent-input-bg) 44%, transparent)}}:root{--agent-control-hover:var(--agent-soft)}@supports (color:color-mix(in lab,red,red)){:root{--agent-control-hover:color-mix(in srgb, var(--agent-soft) 8%, transparent)}}:root{--agent-primary:var(--agent-accent)}@supports (color:color-mix(in lab,red,red)){:root{--agent-primary:color-mix(in srgb, var(--agent-accent) 90%, var(--agent-text))}}:root{--agent-primary-text:#fff;--cubic-enter:cubic-bezier(.19, 1, .22, 1);--cubic-exit-snappy:cubic-bezier(.65, 0, .4, 1);--transition-duration-basic:.15s;--gray-0:#fff;--color-background-surface:transparent;--color-background-surface-under:transparent;--color-background-elevated-primary:var(--agent-surface-elevated);--color-background-elevated-primary-opaque:var(--agent-surface-elevated)}@supports (color:color-mix(in lab,red,red)){:root{--color-background-elevated-primary-opaque:color-mix(in srgb, var(--agent-surface-elevated) 100%, #111)}}:root{--color-background-elevated-secondary:var(--agent-card);--color-background-elevated-secondary-opaque:var(--agent-card)}@supports (color:color-mix(in lab,red,red)){:root{--color-background-elevated-secondary-opaque:color-mix(in srgb, var(--agent-card) 100%, #111)}}:root{--thread-content-max-width:none;--markdown-wide-block-max-width:56rem;--padding-toolbar:calc(var(--spacing) * 4);--vscode-foreground:var(--agent-text);--vscode-descriptionForeground:var(--agent-muted);--vscode-input-background:var(--agent-input-bg);--vscode-dropdown-background:var(--agent-surface-elevated);--vscode-input-placeholderForeground:var(--agent-muted);--vscode-textLink-foreground:var(--agent-accent);--vscode-textLink-activeForeground:var(--agent-accent);--vscode-list-hoverBackground:var(--agent-control-hover);--color-token-editor-foreground:var(--agent-text);--color-token-editor-background:var(--agent-page-bg);--color-token-side-bar-background:var(--agent-surface-elevated);--color-token-main-surface-primary:transparent;--color-token-text-code-block-background:var(--agent-input-bg);--color-token-bg-primary:var(--agent-surface-elevated);--color-token-bg-secondary:var(--agent-card);--color-token-bg-fog:var(--color-background-elevated-secondary);--color-token-bg-tertiary:var(--agent-control);--color-token-list-hover-background:var(--agent-control-hover);--markdown-wide-block-max-height:80vh;--conversation-block-gap:12px;--conversation-tool-assistant-gap:16px;--color-token-terminal-ansi-black:var(--vscode-terminal-ansiBlack,#000);--color-token-terminal-ansi-red:var(--vscode-terminal-ansiRed,#f66);--color-token-terminal-ansi-green:var(--vscode-terminal-ansiGreen,#94f494);--color-token-terminal-ansi-yellow:var(--vscode-terminal-ansiYellow,#f4f47b);--color-token-terminal-ansi-blue:var(--vscode-terminal-ansiBlue,#9e9eff);--color-token-terminal-ansi-magenta:var(--vscode-terminal-ansiMagenta,#db6bdb);--color-token-terminal-ansi-cyan:var(--vscode-terminal-ansiCyan,#81eeee);--color-token-terminal-ansi-white:var(--vscode-terminal-ansiWhite,#d6d6d6);--color-token-terminal-ansi-bright-black:var(--vscode-terminal-ansiBrightBlack,#6e6e6e);--color-token-terminal-ansi-bright-red:var(--vscode-terminal-ansiBrightRed,#ffa8a8);--color-token-terminal-ansi-bright-green:var(--vscode-terminal-ansiBrightGreen,#0f0);--color-token-terminal-ansi-bright-yellow:var(--vscode-terminal-ansiBrightYellow,#ffffa8);--color-token-terminal-ansi-bright-blue:var(--vscode-terminal-ansiBrightBlue,#9494ff);--color-token-terminal-ansi-bright-magenta:var(--vscode-terminal-ansiBrightMagenta,#ffb3ff);--color-token-terminal-ansi-bright-cyan:var(--vscode-terminal-ansiBrightCyan,#adffff);--color-token-terminal-ansi-bright-white:var(--vscode-terminal-ansiBrightWhite,#fff);--padding-row-x:calc(var(--spacing) * 2);--padding-row-y:calc(var(--spacing) * 1.25);--height-token-nav-row:32px;--codex-chat-font-size:var(--vscode-chat-font-size,var(--vscode-font-size,13px));--codex-chat-code-font-size:var(--vscode-chat-editor-font-size,var(--vscode-editor-font-size,12px))}:root[data-codex-window-type=electron]{background:0 0;overflow:hidden}:root[data-codex-window-type=electron] body{--padding-row-y:calc(var(--spacing) * 1.25);--height-token-nav-row:calc(var(--text-base) * 1.5 + var(--padding-row-y) * 2);--padding-panel-base:calc(var(--spacing) * 5);--padding-panel:var(--padding-panel-base);--thread-content-max-width:48rem;--markdown-wide-block-max-width:56rem;--markdown-wide-block-max-height:80vh;--conversation-block-gap:12px;--conversation-tool-assistant-gap:16px;--spacing-token-button-composer-sm:calc(var(--spacing) * 7);--text-heading-md:18px;--cursor-interaction:default;--vscode-editor-font-family:ui-monospace, "SFMono-Regular", "SF Mono", Menlo, Consolas, "Liberation Mono", monospace;--vscode-font-size:var(--text-base);--vscode-editor-font-size:var(--text-sm);--vscode-chat-font-size:var(--vscode-font-size);--vscode-chat-editor-font-size:var(--vscode-editor-font-size);overscroll-behavior:none;overflow:hidden}:root[data-codex-window-type=electron]:not([data-codex-os=win32]) body{background:0 0}*{box-sizing:border-box}html,body,#root{background:0 0;height:100%}body{min-width:0;color:var(--agent-text);font-family:var(--font-sans);font-size:var(--text-base);font-weight:var(--vscode-font-weight,400);margin:0;overflow:hidden}button,select,textarea{font:inherit}button,select{cursor:default}.agent-shell{height:100%;min-height:100%;padding:var(--padding-toolbar);color:var(--agent-text);background:var(--agent-page-bg);flex-direction:column;display:flex}.agent-log,.log,.agent-thread{width:100%;min-height:0;max-width:var(--thread-content-max-width);scrollbar-width:thin;scrollbar-color:var(--agent-muted) transparent;background:0 0;flex:auto;margin:0 auto;padding:6px 2px 18px;overflow:auto}@supports (color:color-mix(in lab,red,red)){.agent-log,.log,.agent-thread{scrollbar-color:color-mix(in srgb,var(--agent-muted) 28%,transparent) transparent}}.agent-thread{gap:var(--conversation-block-gap,12px);flex-direction:column;padding-top:10px;padding-bottom:24px;display:flex;position:relative;overflow-x:hidden}:root[data-codex-window-type=electron] .agent-thread{--color-token-description-foreground:var(--color-token-foreground)}@supports (color:color-mix(in lab,red,red)){:root[data-codex-window-type=electron] .agent-thread{--color-token-description-foreground:color-mix(in srgb, var(--color-token-foreground) 70%, transparent)}}.agent-thread[data-empty]{justify-content:flex-end}.text-size-chat{font-size:var(--codex-chat-font-size)}.text-size-chat-sm{font-size:calc(var(--codex-chat-font-size) - 1px)}.text-size-code{font-size:var(--codex-chat-code-font-size)}.text-size-code-sm{font-size:calc(var(--codex-chat-code-font-size) - 1px)}.font-vscode-editor{font-family:var(--vscode-editor-font-family,var(--font-mono))}.codex-user-turn,.codex-assistant-turn,.codex-notice-turn{width:100%;min-width:0}.codex-user-bubble{color:var(--color-token-foreground);background:var(--color-token-foreground)}@supports (color:color-mix(in lab,red,red)){.codex-user-bubble{background:color-mix(in srgb,var(--color-token-foreground) 5%,transparent)}}.codex-user-message-content[data-collapsed=true]{-webkit-line-clamp:20;-webkit-box-orient:vertical;max-height:20lh;display:-webkit-box;overflow:hidden}.codex-user-message-toggle{background:0 0;border:0;padding:0}.codex-assistant-turn{justify-content:flex-start;display:flex}.codex-assistant-message{max-width:100%;color:var(--color-token-foreground);white-space:normal;overflow-wrap:anywhere}.codex-assistant-message-streaming{white-space:break-spaces}.codex-assistant-message :where(p){margin:0 0 .85em}.codex-assistant-message :where(p:last-child){margin-bottom:0}.codex-assistant-message :where(ul,ol){margin:.45em 0 .85em;padding-left:1.35rem}.codex-assistant-message :where(ul){list-style:outside}.codex-assistant-message :where(ol){list-style:decimal}.codex-assistant-message :where(li){margin:.25em 0}.codex-assistant-message :where(blockquote){border-left:2px solid var(--color-token-border);color:var(--agent-soft);margin:.75em 0;padding-left:.85rem}.codex-assistant-message :where(code){background:var(--agent-soft);border-radius:4px;padding:.12em .3em}@supports (color:color-mix(in lab,red,red)){.codex-assistant-message :where(code){background:color-mix(in srgb,var(--agent-soft) 10%,transparent)}}.codex-assistant-message :where(code){font-family:var(--font-mono);font-size:var(--codex-chat-code-font-size)}.codex-assistant-message :where(pre){border:1px solid var(--agent-border);margin:.75em 0;padding:.65rem .75rem;overflow-x:auto}@supports (color:color-mix(in lab,red,red)){.codex-assistant-message :where(pre){border:1px solid color-mix(in srgb,var(--agent-border) 72%,transparent)}}.codex-assistant-message :where(pre){border-radius:var(--radius-lg);background:var(--agent-input-bg)}@supports (color:color-mix(in lab,red,red)){.codex-assistant-message :where(pre){background:color-mix(in srgb,var(--agent-input-bg) 82%,transparent)}}.codex-assistant-message :where(pre code){white-space:pre;background:0 0;border-radius:0;padding:0;display:block}.codex-assistant-message :where(a){color:var(--agent-accent);text-underline-offset:2px;text-decoration:underline}.codex-assistant-message :where(hr){border-top:1px solid var(--color-token-border);margin:1rem 0}.codex-notice-turn{justify-content:flex-start;display:flex}.codex-notice-content{border:1px solid var(--agent-border);max-width:min(100%,44rem);padding:10px 12px}@supports (color:color-mix(in lab,red,red)){.codex-notice-content{border:1px solid color-mix(in srgb,var(--agent-border) 74%,transparent)}}.codex-notice-content{border-radius:var(--radius-lg);color:var(--agent-soft);background:var(--agent-surface-elevated)}@supports (color:color-mix(in lab,red,red)){.codex-notice-content{background:color-mix(in srgb,var(--agent-surface-elevated) 86%,transparent)}}.codex-notice-content{overflow-wrap:anywhere}.codex-notice-turn.error .codex-notice-content{border-color:var(--agent-danger)}@supports (color:color-mix(in lab,red,red)){.codex-notice-turn.error .codex-notice-content{border-color:color-mix(in srgb,var(--agent-danger) 46%,transparent)}}.codex-notice-turn.error .codex-notice-content{color:var(--agent-danger)}@supports (color:color-mix(in lab,red,red)){.codex-notice-turn.error .codex-notice-content{color:color-mix(in srgb,var(--agent-danger) 88%,var(--agent-text))}}.codex-notice-turn.error .codex-notice-content{background:var(--agent-danger)}@supports (color:color-mix(in lab,red,red)){.codex-notice-turn.error .codex-notice-content{background:color-mix(in srgb,var(--agent-danger) 11%,transparent)}}.codex-notice-turn.warning .codex-notice-content{border-color:var(--agent-accent)}@supports (color:color-mix(in lab,red,red)){.codex-notice-turn.warning .codex-notice-content{border-color:color-mix(in srgb,var(--agent-accent) 30%,transparent)}}.codex-tool-activity-turn{flex-direction:column;align-items:flex-start;gap:0;width:100%;min-width:0;display:flex}.codex-tool-activity-summary{max-width:100%;color:var(--color-token-foreground);border:0;padding:0}@supports (color:color-mix(in lab,red,red)){.codex-tool-activity-summary{color:color-mix(in srgb,var(--color-token-foreground) 40%,transparent)}}.codex-tool-activity-summary{font:inherit;font-size:var(--codex-chat-font-size);line-height:calc(var(--codex-chat-font-size) + 8px);background:0 0}.codex-tool-activity-summary:focus-visible{outline:none}.codex-tool-activity-turn.inProgress .codex-tool-activity-summary{color:var(--color-token-description-foreground)}@supports (color:color-mix(in lab,red,red)){.codex-tool-activity-turn.inProgress .codex-tool-activity-summary{color:color-mix(in srgb,var(--color-token-description-foreground) 90%,transparent)}}.codex-tool-activity-icon{color:var(--color-token-foreground);justify-content:center;align-items:center;display:inline-flex}@supports (color:color-mix(in lab,red,red)){.codex-tool-activity-icon{color:color-mix(in srgb,var(--color-token-foreground) 35%,transparent)}}.codex-tool-activity-icon{font-family:var(--font-mono);font-size:11px;line-height:1}.codex-tool-activity-turn.inProgress .codex-tool-activity-icon{animation:1.2s ease-in-out infinite codex-tool-activity-pulse}.codex-tool-activity-text{align-items:baseline;gap:4px;min-width:0;max-width:100%;display:inline-flex}.codex-tool-activity-action{color:var(--color-token-foreground);flex:none}@supports (color:color-mix(in lab,red,red)){.codex-tool-activity-action{color:color-mix(in srgb,var(--color-token-foreground) 58%,transparent)}}.codex-tool-activity-detail{min-width:0;color:var(--color-token-foreground);overflow:hidden}@supports (color:color-mix(in lab,red,red)){.codex-tool-activity-detail{color:color-mix(in srgb,var(--color-token-foreground) 40%,transparent)}}.codex-tool-activity-detail{font-family:var(--font-mono);text-overflow:ellipsis;white-space:nowrap}.codex-tool-activity-summary:hover .codex-tool-activity-action,.codex-tool-activity-summary:hover .codex-tool-activity-detail,.codex-tool-activity-summary:hover .codex-tool-activity-icon{color:var(--color-token-foreground)}.codex-tool-activity-output-shell{opacity:0;pointer-events:none;grid-template-rows:0fr;width:100%;min-width:0;transition:grid-template-rows .18s ease-out,opacity .18s ease-out;display:grid;overflow:hidden}.codex-tool-activity-output-shell[data-expanded=true]{opacity:1;pointer-events:auto;grid-template-rows:1fr}.codex-tool-activity-output-shell-inner{min-height:0;overflow:hidden}.codex-tool-activity-output-frame{min-height:1.25rem;padding-right:0;position:relative}.codex-tool-activity-output{box-sizing:border-box;max-width:min(100%,var(--markdown-wide-block-max-width));max-height:140px;color:var(--color-token-description-foreground);white-space:pre;--edge-fade-distance:2rem;background:0 0;border:0;border-radius:0;flex-direction:column;gap:6px;margin:0;padding:8px;font-weight:500;display:flex;overflow:auto}.codex-tool-output-copy:focus-visible{opacity:1}@keyframes codex-tool-activity-pulse{0%,to{opacity:.45}50%{opacity:1}}.agent-log-line,.log-line{border-bottom:1px solid var(--agent-border);grid-template-columns:4.5rem minmax(0,1fr);gap:12px;padding:9px 0;display:grid}@supports (color:color-mix(in lab,red,red)){.agent-log-line,.log-line{border-bottom:1px solid color-mix(in srgb,var(--agent-border) 55%,transparent)}}.agent-log-line,.log-line{color:var(--agent-soft);font-family:var(--font-mono);font-size:12px;line-height:1.5}.agent-log-line:last-child,.log-line:last-child{border-bottom-color:#0000}.agent-log-label,.log-label{color:var(--agent-muted);text-overflow:ellipsis;text-transform:uppercase;overflow:hidden}.agent-log-line.stdout .agent-log-label,.log-line.stdout .log-label{color:var(--agent-accent)}.agent-log-line.stderr .agent-log-label,.agent-log-line.error .agent-log-label,.log-line.stderr .log-label,.log-line.error .log-label{color:var(--agent-danger)}.agent-log-text,.log-text{overflow-wrap:anywhere;white-space:pre-wrap;word-break:normal;min-width:0}.agent-composer-stack{width:100%;max-width:var(--thread-content-max-width);gap:6px;margin:0 auto;display:grid}.above-composer-suggestion-shell{container-type:inline-size}.codex-composer-frame{--composer-top-tray-inline-padding:12px;--composer-top-tray-top-padding:14px;--composer-top-tray-max-height:177px}.codex-composer-surface{color:var(--color-token-foreground)}.codex-composer-inner{isolation:isolate}@supports (corner-shape:superellipse(1.5)){:root{--corner-radius-scale:1.25}.codex-composer-surface,.codex-user-bubble,.codex-notice-content,.provider-dropdown,.provider-dropdown-item,.add-context-dropdown,.add-context-item,.composer-attachment-file,.composer-attachment-image,.rate-limit-popover,.codex-top-tray-panel,.codex-top-tray-item{corner-shape:superellipse(1.5)}}.codex-composer-single-line{min-height:0}.composer-single-line-measure{pointer-events:none;visibility:hidden;white-space:pre;width:max-content;max-width:none;height:0;font-family:var(--font-sans);font-size:var(--text-base);line-height:20px;position:absolute;overflow:hidden}.h-token-button-composer{height:var(--spacing-token-button-composer);gap:var(--h-token-button-composer-gap)}.h-token-button-composer-sm{height:var(--spacing-token-button-composer-sm);gap:var(--h-token-button-composer-gap)}.size-token-button-composer{width:var(--spacing-token-button-composer);height:var(--spacing-token-button-composer)}.size-token-button-composer-sm{width:var(--spacing-token-button-composer-sm);height:var(--spacing-token-button-composer-sm)}.icon-3xs{width:10px;height:10px}.icon-xxs{width:12px;height:12px}.icon-2xs{width:14px;height:14px}.icon-xs{width:16px;height:16px}.icon-sm{width:18px;height:18px}.icon-base{width:20px;height:20px}.icon-md{width:24px;height:24px}.icon-lg{width:28px;height:28px}.cursor-interaction{cursor:var(--cursor-interaction)}.no-drag{-webkit-app-region:no-drag}.outline-hidden{outline-offset:2px;outline:2px solid #0000}.user-select-none{-webkit-user-select:none;user-select:none}.shadow-xl-spread{--tw-shadow:0px 0px 0px .5px var(--tw-shadow-color,var(--color-token-border)), var(--shadow-xl);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}._content_1hiti_1{--dropdown-content-inset:2px;--dropdown-content-start-transform:translateY(calc(var(--dropdown-content-inset) * -1)) scale(.98);transform-origin:var(--radix-dropdown-menu-content-transform-origin);will-change:opacity,transform}._content_1hiti_1[data-side=top]{--dropdown-content-start-transform:translateY(var(--dropdown-content-inset)) scale(.98)}._content_1hiti_1[data-side=right]{--dropdown-content-start-transform:translateX(calc(var(--dropdown-content-inset) * -1)) scale(.98)}._content_1hiti_1[data-side=left]{--dropdown-content-start-transform:translateX(var(--dropdown-content-inset)) scale(.98)}@media(prefers-reduced-motion:no-preference){._content_1hiti_1[data-state=open]{animation:_dropdown-content-enter_1hiti_1 var(--transition-duration-basic) var(--cubic-enter)}}@keyframes _dropdown-content-enter_1hiti_1{0%{opacity:0;transform:var(--dropdown-content-start-transform)}to{opacity:1;transform:translate(0)translateY(0)scale(1)}}.hide-scrollbar{scrollbar-width:none}.hide-scrollbar::-webkit-scrollbar{display:none}.prompt-input{resize:none;width:100%;min-height:2.75rem;max-height:200px;color:var(--color-token-foreground);font-size:var(--text-base);background:0 0;border:0;outline:none;padding:0;line-height:20px;display:block}.prompt-input::placeholder{color:var(--color-token-input-placeholder-foreground)}@supports (color:color-mix(in lab,red,red)){.prompt-input::placeholder{color:color-mix(in srgb,var(--color-token-input-placeholder-foreground) 50%,transparent)}}.ProseMirror{min-width:0;color:var(--agent-text);caret-color:var(--agent-text);font-variant-ligatures:none;font-feature-settings:"liga" 0;white-space:pre-wrap;white-space:break-spaces;word-wrap:break-word;word-break:normal;background:0 0;outline:none;position:relative;overflow-y:auto}.ProseMirror pre{white-space:pre-wrap}.ProseMirror li{position:relative}.ProseMirror-hideselection{caret-color:#0000;background:0 0}.ProseMirror-hideselection ::selection{caret-color:#0000;background:0 0}.ProseMirror [draggable][contenteditable=false]{-webkit-user-select:text;user-select:text}.ProseMirror-selectednode{outline:2px solid #8cf}li.ProseMirror-selectednode{outline:none}li.ProseMirror-selectednode:after{content:"";pointer-events:none;border:2px solid #8cf;position:absolute;inset:-2px -2px -2px -32px}img.ProseMirror-separator{border:none!important;margin:0!important;display:inline!important}.ProseMirror p{margin:0}.ProseMirror .placeholder{pointer-events:none;-webkit-user-select:none;user-select:none;position:relative}.ProseMirror .placeholder:after{color:var(--color-token-input-placeholder-foreground);content:attr(data-placeholder);opacity:.5;pointer-events:none;-webkit-user-select:none;user-select:none;white-space:nowrap;text-overflow:ellipsis;max-width:100%;position:absolute;inset:0 0 auto;overflow:hidden}.ProseMirror .placeholder::selection{color:inherit;background:0 0}.ProseMirror .placeholder ::selection{color:inherit;background:0 0}.ProseMirror .ProseMirror-selectednode:has([skill-mention-name]){outline:none}.prompt-editor-mention{--inline-mention-base-color:var(--color-token-text-link-foreground)}@supports (color:color-mix(in lab,red,red)){.prompt-editor-mention{--inline-mention-base-color:color-mix(in srgb, var(--color-token-text-link-foreground) 80%, var(--color-token-foreground) 20%)}}.prompt-editor-mention{--inline-mention-color:var(--inline-mention-resolved-base-color,var(--inline-mention-base-color));max-width:100%;color:var(--inline-mention-color);vertical-align:baseline;white-space:nowrap;align-items:baseline;display:inline-flex}.prompt-editor-mention:hover{text-underline-offset:2px;text-decoration-line:underline;text-decoration-style:dashed;text-decoration-thickness:.5px}.prompt-editor-mention-icon{color:currentColor}[cmdk-dialog],[cmdk-dialog]:focus-visible{outline:none}[cmdk-root],[data-cmdk-root]{z-index:1000;gap:var(--spacing);min-width:100%;padding:var(--spacing);border:1px solid var(--color-token-border);border-radius:var(--radius-3xl);color:var(--color-token-foreground);background-color:var(--color-token-dropdown-background);flex-direction:column;display:flex}@supports (color:color-mix(in lab,red,red)){[cmdk-root],[data-cmdk-root]{background-color:color-mix(in oklab,var(--color-token-dropdown-background) 95%,transparent)}}[cmdk-root],[data-cmdk-root]{font-size:var(--text-sm);opacity:1;-webkit-user-select:none;user-select:none;-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);--cmdk-bottom-item-radius:calc(var(--radius-3xl) - var(--spacing));transform:translateZ(0)}[cmdk-item]{content-visibility:auto;width:100%;min-height:calc(var(--spacing) * 6);padding:var(--padding-row-y) var(--padding-row-x);border-radius:var(--radius-lg);color:var(--color-token-foreground);cursor:var(--cursor-interaction);opacity:.75;-webkit-user-select:none;user-select:none;outline:none;flex-direction:row;align-items:center;display:flex}[cmdk-item][aria-disabled=true],[cmdk-item][data-disabled=true]{cursor:default;opacity:.25}[cmdk-item]:hover:not([aria-disabled=true]),[cmdk-item][data-selected=true],[cmdk-item][aria-selected=true],[cmdk-item]:focus-visible,[cmdk-item]:active:not([aria-disabled=true]){background-color:var(--color-token-list-hover-background);opacity:1}[cmdk-item][data-command-menu-loading=true],[cmdk-item][data-command-menu-loading=true]:hover,[cmdk-item][data-command-menu-loading=true][data-selected=true],[cmdk-item][data-command-menu-loading=true][aria-selected=true],[cmdk-item][data-command-menu-loading=true]:focus-visible,[cmdk-item][data-command-menu-loading=true]:active{cursor:default;opacity:.6;background-color:#0000}[cmdk-item][data-command-menu-empty-state=true],[cmdk-item][data-command-menu-empty-state=true]:hover,[cmdk-item][data-command-menu-empty-state=true][data-selected=true],[cmdk-item][data-command-menu-empty-state=true][aria-selected=true],[cmdk-item][data-command-menu-empty-state=true]:focus-visible,[cmdk-item][data-command-menu-empty-state=true]:active{cursor:default;opacity:1;background-color:#0000}[cmdk-list]{min-height:0;max-height:min(300px,var(--cmdk-list-height,300px));gap:var(--spacing);overscroll-behavior:contain;scrollbar-width:none;flex-direction:column;transition:max-height .1s;display:flex;overflow-y:auto}[cmdk-list]:focus-visible{outline:none}.command-menu-dialog [cmdk-list]{max-height:var(--command-menu-list-max-height);scroll-padding-block-start:calc(var(--spacing) * 8)}.composer-home-top-menu [cmdk-list]{max-height:none}.composer-home-top-menu{max-height:min(320px,var(--composer-top-menu-max-height,320px));overflow:hidden}:where([cmdk-list])>[cmdk-item]:not(:has(~[cmdk-item],~[cmdk-group]:not([hidden]))),:where([cmdk-list])>[cmdk-group]:not([hidden]):not(:has(~[cmdk-item],~[cmdk-group]:not([hidden]))) [cmdk-item]:last-of-type,:where([cmdk-list])>[cmdk-list-sizer]>[cmdk-item]:not(:has(~[cmdk-item],~[cmdk-group]:not([hidden]))),:where([cmdk-list])>[cmdk-list-sizer]>[cmdk-group]:not([hidden]):not(:has(~[cmdk-item],~[cmdk-group]:not([hidden]))) [cmdk-item]:last-of-type{border-bottom-right-radius:var(--cmdk-bottom-item-radius);border-bottom-left-radius:var(--cmdk-bottom-item-radius)}[cmdk-input]{padding:calc(var(--spacing) * 1.5) calc(var(--spacing) * 2.5)}[cmdk-input]:focus-visible{outline:none}[cmdk-empty],[data-cmdk-empty]{min-height:calc(var(--spacing) * 8);padding:calc(var(--spacing) * 1.5) calc(var(--spacing) * 2.5);color:var(--color-token-description-foreground);text-align:center;white-space:pre-wrap;align-items:center;line-height:1.4;display:flex}[data-codex-window-type=electron] [cmdk-root],[data-codex-window-type=electron] [data-cmdk-root]{font-size:var(--text-base)}.codex-attachment-tray{scrollbar-width:none}.codex-attachment-tray::-webkit-scrollbar{display:none}.codex-user-attachment-tray{max-width:77%}.codex-user-attachment-tray .codex-attachment-row{justify-content:flex-end;min-width:0}.composer-attachment-image{border:1px solid var(--color-token-border-heavy);border-radius:var(--radius-lg);background:var(--color-token-input-background);flex:none;width:80px;height:80px;display:inline-flex;position:relative;overflow:visible}.composer-attachment-image img{border-radius:calc(var(--radius-lg) - 1px);object-fit:cover;width:100%;height:100%}.composer-attachment-file{border:.5px solid var(--color-token-border-heavy);flex:none;align-items:center;gap:7px;max-width:min(220px,70vw);height:32px;padding:0 30px 0 10px;display:inline-flex;position:relative}@supports (color:color-mix(in lab,red,red)){.composer-attachment-file{border:.5px solid color-mix(in srgb,var(--color-token-border-heavy) 80%,transparent)}}.composer-attachment-file{border-radius:var(--radius-lg);color:var(--color-token-foreground);background:var(--color-token-dropdown-background)}@supports (color:color-mix(in lab,red,red)){.composer-attachment-file{background:color-mix(in srgb,var(--color-token-dropdown-background) 90%,transparent)}}.composer-attachment-file-icon{color:var(--color-token-description-foreground);flex:none;display:inline-flex}.composer-attachment-file-label{min-width:0;font-size:var(--text-sm);text-overflow:ellipsis;white-space:nowrap;font-weight:500;line-height:1rem;overflow:hidden}.composer-attachment-remove{border:.5px solid var(--color-token-border-heavy);justify-content:center;align-items:center;width:18px;height:18px;display:inline-flex;position:absolute;top:-7px;right:-7px}@supports (color:color-mix(in lab,red,red)){.composer-attachment-remove{border:.5px solid color-mix(in srgb,var(--color-token-border-heavy) 70%,transparent)}}.composer-attachment-remove{color:var(--color-token-foreground);background:var(--color-token-dropdown-background);border-radius:999px;box-shadow:0 1px 3px #0000002e}.composer-attachment-remove:hover,.composer-attachment-remove:focus-visible{background:var(--color-token-list-hover-background)}.codex-left-rail,.codex-secondary-controls,.codex-action-cluster,.model-picker,.rate-line{align-items:center;display:flex}.codex-left-rail{scrollbar-width:none;flex:0 auto;min-width:0;margin:0;padding:0;overflow-x:auto}.codex-left-rail::-webkit-scrollbar{display:none}.composer-mode-indicator{color:var(--color-token-text-link-foreground);flex:0 auto}.composer-mode-divider{background:var(--color-token-border);width:1px;height:1rem;margin:0 1px}@supports (color:color-mix(in lab,red,red)){.composer-mode-divider{background:color-mix(in srgb,var(--color-token-border) 70%,transparent)}}.composer-mode-button{min-width:0;color:var(--color-token-text-link-foreground)}.composer-mode-icon{flex:none;justify-content:center;align-items:center;display:inline-flex}.composer-mode-icon-hover,.composer-mode-button:hover .composer-mode-icon-default,.composer-mode-button:focus-visible .composer-mode-icon-default{display:none}.composer-mode-button:hover .composer-mode-icon-hover,.composer-mode-button:focus-visible .composer-mode-icon-hover{display:inline-flex}.composer-mode-label{color:currentColor;font-weight:500}.composer-context-indicator{color:var(--color-token-text-link-foreground);flex:0 auto}.composer-context-divider{background:var(--color-token-border);margin:0 1px}@supports (color:color-mix(in lab,red,red)){.composer-context-divider{background:color-mix(in srgb,var(--color-token-border) 70%,transparent)}}.composer-context-button{color:var(--color-token-text-link-foreground)}.composer-context-icon{justify-content:center;align-items:center;display:inline-flex}.composer-context-icon-hover,.composer-context-button:hover .composer-context-icon-default,.composer-context-button:focus-visible .composer-context-icon-default{display:none}.composer-context-button:hover .composer-context-icon-hover,.composer-context-button:focus-visible .composer-context-icon-hover{display:inline-flex}.composer-context-label{color:currentColor;font-weight:500}.codex-secondary-controls{flex:0 auto;justify-content:flex-end}.codex-action-cluster{flex:none;justify-content:flex-end}.model-picker-root{flex:none;align-items:center;display:inline-flex}.model-picker,.codex-tool,.codex-action{outline:none;flex:none;justify-content:center;align-items:center;display:inline-flex;position:relative}.codex-tool,.codex-action{line-height:18px}.model-picker{letter-spacing:0;white-space:nowrap;min-width:0;max-width:10rem}.model-icon{border:1px solid var(--agent-border-strong);flex:none;justify-content:center;align-items:center;width:18px;height:18px;display:inline-flex}@supports (color:color-mix(in lab,red,red)){.model-icon{border:1px solid color-mix(in srgb,var(--agent-border-strong) 70%,transparent)}}.model-icon{color:var(--agent-text);background:var(--agent-control);border-radius:999px;font-size:10px;font-weight:750;line-height:1}.model-label{min-width:0;color:var(--color-token-foreground);text-overflow:ellipsis;overflow:hidden}.model-chevron{color:var(--color-token-input-placeholder-foreground);flex:none;line-height:1}.provider-dropdown{z-index:50;border:.5px solid var(--color-token-menu-border);width:13rem;max-height:min(250px,100vh - 16px);position:absolute;bottom:calc(100% + 6px);left:0}@supports (color:color-mix(in lab,red,red)){.provider-dropdown{border:.5px solid color-mix(in srgb,var(--color-token-menu-border) 78%,transparent)}}.provider-dropdown{border-radius:var(--radius-xl);color:var(--color-token-foreground);background:var(--color-token-dropdown-background)}@supports (color:color-mix(in lab,red,red)){.provider-dropdown{background:color-mix(in srgb,var(--color-token-dropdown-background) 90%,transparent)}}.provider-dropdown{-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px)}.provider-dropdown-title{min-height:24px;padding:var(--padding-row-y) var(--padding-row-x);color:var(--color-token-description-foreground);font-size:var(--text-sm);text-overflow:ellipsis;white-space:nowrap;align-items:center;line-height:1rem;display:flex;overflow:hidden}.provider-dropdown-item{width:100%;color:var(--color-token-foreground);text-align:left;background:0 0;border:0}.provider-dropdown-item:hover,.provider-dropdown-item:focus,.provider-dropdown-item[data-selected=true]{background:var(--color-token-list-hover-background)}.provider-dropdown-check{color:var(--color-token-foreground)}.permissions-root{flex:0 auto;min-width:0;display:inline-flex;position:relative}.permissions-trigger{color:var(--color-token-input-placeholder-foreground)}.permissions-trigger[data-permission-mode=auto-review],.permissions-item[data-permission-mode=auto-review] .permissions-item-icon{color:var(--color-token-text-link-foreground)}.permissions-trigger[data-permission-mode=full-access],.permissions-item[data-permission-mode=full-access] .permissions-item-icon{color:var(--agent-danger)}.permissions-trigger-label{color:currentColor;font-weight:500}.permissions-trigger-chevron{color:currentColor;opacity:.72}.permissions-dropdown{z-index:50;border:.5px solid var(--color-token-menu-border);width:13.5rem;max-height:min(250px,100vh - 16px);position:absolute;bottom:calc(100% + 6px);left:0;overflow-y:auto}@supports (color:color-mix(in lab,red,red)){.permissions-dropdown{border:.5px solid color-mix(in srgb,var(--color-token-menu-border) 78%,transparent)}}.permissions-dropdown{border-radius:var(--radius-xl);color:var(--color-token-foreground);background:var(--color-token-dropdown-background)}@supports (color:color-mix(in lab,red,red)){.permissions-dropdown{background:color-mix(in srgb,var(--color-token-dropdown-background) 90%,transparent)}}.permissions-dropdown{-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px)}.permissions-item{width:100%;min-height:calc(var(--spacing) * 8);align-items:center;gap:calc(var(--spacing) * 2);color:var(--color-token-foreground);text-align:left;background:0 0;border:0;display:flex}.permissions-item:hover,.permissions-item:focus-visible,.permissions-item[data-selected=true]{background:var(--color-token-list-hover-background)}.permissions-item-icon,.permissions-item-check{color:var(--color-token-description-foreground);justify-content:center;align-items:center;display:inline-flex}.permissions-item-label{color:var(--color-token-foreground);font-weight:500}.add-context-root{flex:none;display:inline-flex;position:relative}.add-context-dropdown{z-index:50;border:.5px solid var(--color-token-menu-border);width:max-content;min-width:120px;max-width:min(320px,100vw - 16px);max-height:min(270px,100vh - 16px);position:absolute;bottom:calc(100% + 6px);left:-8px;overflow-y:auto}@supports (color:color-mix(in lab,red,red)){.add-context-dropdown{border:.5px solid color-mix(in srgb,var(--color-token-menu-border) 78%,transparent)}}.add-context-dropdown{border-radius:var(--radius-xl);color:var(--color-token-foreground);background:var(--color-token-dropdown-background)}@supports (color:color-mix(in lab,red,red)){.add-context-dropdown{background:color-mix(in srgb,var(--color-token-dropdown-background) 90%,transparent)}}.add-context-dropdown{-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px)}.add-context-item{width:100%;min-height:calc(var(--spacing) * 8);align-items:center;gap:calc(var(--spacing) * 1.5);color:var(--color-token-foreground);cursor:var(--cursor-interaction);text-align:left;background:0 0;border:0;display:flex}.add-context-item:hover,.add-context-item:focus-visible{background:var(--color-token-list-hover-background)}.add-context-item:disabled{cursor:default;opacity:.5}.add-context-item:disabled:hover{background:0 0}.add-context-item-icon{color:var(--color-token-description-foreground);opacity:.75;justify-content:center;align-items:center;display:inline-flex}.add-context-item:hover .add-context-item-icon,.add-context-item:focus-visible .add-context-item-icon{opacity:1}.add-context-glyph{width:14px;height:14px;color:var(--color-token-description-foreground);font-size:var(--text-sm);justify-content:center;align-items:center;font-weight:700;line-height:1;display:inline-flex}.add-context-item-label{color:var(--color-token-foreground);font-weight:500}.add-context-item-detail{color:var(--color-token-description-foreground);font-size:var(--text-sm)}.add-context-separator{flex:none}.add-context-separator-line{background:var(--color-token-menu-border)}.provider-select{appearance:none;color:#0000;opacity:0;background:0 0;outline:none;width:100%;height:100%;position:absolute;inset:0}.composer-separator{background:var(--agent-border-strong);flex:none;width:1px;height:18px;margin:0 3px}@supports (color:color-mix(in lab,red,red)){.composer-separator{background:color-mix(in srgb,var(--agent-border-strong) 72%,transparent)}}.codex-start{width:auto;min-width:56px}.codex-circle-action:before{content:"";border:2px solid;border-radius:999px;width:13px;height:13px}.send-button{border-radius:999px}.provider-select:disabled{opacity:0}.rate-line{min-width:0;color:var(--agent-muted);gap:6px;padding:0 2px}@supports (color:color-mix(in lab,red,red)){.rate-line{color:color-mix(in srgb,var(--agent-muted) 88%,transparent)}}.rate-line{white-space:nowrap;font-size:12px;font-weight:500;line-height:1.35}.rate-line[hidden]{display:none}.rate-line :where(span){text-overflow:ellipsis;min-width:0;overflow:hidden}.codex-rate-limit-summary{flex-wrap:nowrap;justify-content:flex-start;overflow:hidden}.rate-limit-trigger{border-radius:var(--radius-md);max-width:100%;height:22px;color:var(--color-token-input-placeholder-foreground);border:0;padding:0 4px;display:inline-flex;position:relative}@supports (color:color-mix(in lab,red,red)){.rate-limit-trigger{color:color-mix(in srgb,var(--color-token-input-placeholder-foreground) 94%,transparent)}}.rate-limit-trigger{font-size:var(--text-sm);background:0 0;font-weight:500;line-height:1}.rate-limit-trigger-inline{gap:6px;overflow:hidden}.rate-limit-trigger:hover,.rate-limit-trigger:focus-visible,.rate-limit-trigger[aria-expanded=true]{background:var(--color-token-list-hover-background);outline:none}.rate-limit-speedometer,.rate-limit-chevron{color:var(--color-token-input-placeholder-foreground);flex:none}@supports (color:color-mix(in lab,red,red)){.rate-limit-speedometer,.rate-limit-chevron{color:color-mix(in srgb,var(--color-token-input-placeholder-foreground) 86%,transparent)}}.rate-line-heading{color:var(--color-token-input-placeholder-foreground);flex:none}@supports (color:color-mix(in lab,red,red)){.rate-line-heading{color:color-mix(in srgb,var(--color-token-input-placeholder-foreground) 92%,transparent)}}.rate-limit-inline-separator{color:var(--agent-accent);flex:none}@supports (color:color-mix(in lab,red,red)){.rate-limit-inline-separator{color:color-mix(in srgb,var(--agent-accent) 82%,transparent)}}.rate-limit-inline-segment{align-items:baseline;gap:5px;min-width:0;display:inline-flex}.rate-limit-popover{color:var(--color-token-foreground)}.rate-limit-popover-title{color:var(--color-token-description-foreground);font-size:var(--text-xs);padding:2px 0 5px;font-weight:600}.rate-limit-popover-row{min-width:0;min-height:24px;color:var(--color-token-foreground);grid-template-columns:minmax(0,1fr) auto;align-items:center;gap:24px;display:grid}.rate-limit-window{min-width:0;color:var(--color-token-foreground);text-overflow:ellipsis;font-weight:500;overflow:hidden}.rate-limit-row-value{min-width:0;color:var(--color-token-description-foreground);text-align:right;justify-content:flex-end;align-items:center;gap:5px;display:inline-flex}.rate-limit-percent{color:var(--color-token-input-placeholder-foreground);flex:none}@supports (color:color-mix(in lab,red,red)){.rate-limit-percent{color:color-mix(in srgb,var(--color-token-input-placeholder-foreground) 92%,transparent)}}.rate-limit-percent{font-weight:600}.rate-limit-reset{min-width:0;color:var(--color-token-description-foreground)}.status-dot{background:var(--agent-muted);border-radius:999px;flex:none;width:6px;height:6px}.status-dot.running{background:var(--agent-accent)}.status-dot.failed{background:var(--agent-danger)}.codex-top-tray-shell{width:calc(var(--composer-top-tray-inline-padding,12px) * 2 + 100% + 8px);min-width:0;left:50%;bottom:var(--composer-top-tray-top-padding,14px);transform:translate(-50%)}.codex-top-tray-panel,.codex-top-tray-panel[cmdk-root],.codex-top-tray-panel[data-cmdk-root]{width:100%;min-width:0;max-height:var(--composer-top-tray-max-height,177px);padding:var(--spacing);padding-top:calc(var(--spacing) * 3);padding-left:calc(var(--spacing) * 2);border:1px solid var(--composer-top-tray-border,var(--color-token-border));flex-direction:column;display:flex;position:relative}@supports (color:color-mix(in lab,red,red)){.codex-top-tray-panel,.codex-top-tray-panel[cmdk-root],.codex-top-tray-panel[data-cmdk-root]{border:1px solid var(--composer-top-tray-border,color-mix(in srgb, var(--color-token-border) 72%, transparent))}}.codex-top-tray-panel,.codex-top-tray-panel[cmdk-root],.codex-top-tray-panel[data-cmdk-root]{border-top-left-radius:var(--radius-3xl);border-top-right-radius:var(--radius-3xl);color:var(--color-token-foreground);background:var(--composer-top-tray-background,var(--color-token-side-bar-background));border-top-color:#0000;border-bottom:none;border-bottom-right-radius:0;border-bottom-left-radius:0}@supports (color:color-mix(in lab,red,red)){.codex-top-tray-panel,.codex-top-tray-panel[cmdk-root],.codex-top-tray-panel[data-cmdk-root]{background:var(--composer-top-tray-background,color-mix(in oklab, var(--color-token-side-bar-background) 94%, transparent))}}.codex-top-tray-panel,.codex-top-tray-panel[cmdk-root],.codex-top-tray-panel[data-cmdk-root]{box-shadow:none;font-size:var(--text-sm);-webkit-backdrop-filter:none;backdrop-filter:none;isolation:isolate;-webkit-user-select:none;user-select:none;--cmdk-bottom-item-radius:0;overflow:hidden}.codex-top-tray-title{padding:0 var(--padding-row-x) calc(var(--spacing) * 1.25);color:var(--color-token-description-foreground);font-size:var(--text-xs);font-weight:600;line-height:1.2}.codex-top-tray-list,.codex-top-tray-panel [cmdk-list],.codex-top-tray-panel [data-cmdk-list]{gap:var(--spacing);scrollbar-width:none;flex-direction:column;flex:1;width:100%;min-height:0;max-height:none;transition:none;display:flex;overflow-y:auto}.codex-top-tray-list::-webkit-scrollbar{display:none}.codex-top-tray-empty,.codex-top-tray-panel [data-cmdk-empty]{padding:var(--padding-row-y) var(--padding-row-x);color:var(--color-token-input-placeholder-foreground);font-size:var(--text-sm);align-items:center;display:flex}.codex-top-tray-item,.codex-top-tray-item[cmdk-item],.codex-top-tray-item[data-list-navigation-item]{width:calc(100% - var(--spacing) * 2);min-height:calc(var(--spacing) * 6);padding:var(--padding-row-y) var(--padding-row-x);border-radius:var(--radius-lg);color:var(--color-token-foreground);cursor:var(--cursor-interaction,default);font-size:var(--text-sm);opacity:.75;text-align:left;background:0 0;border:0;outline:none;flex-shrink:0;align-items:center;gap:0;display:flex;overflow:hidden}.codex-top-tray-item:hover,.codex-top-tray-item[data-selected=true],.codex-top-tray-item:focus-visible{background:var(--color-token-list-hover-background);opacity:1}.codex-top-tray-icon{width:14px;height:14px;color:var(--color-token-description-foreground);font-size:var(--text-sm);flex:none;justify-content:center;align-items:center;font-weight:700;line-height:1;display:inline-flex}.codex-top-tray-copy{align-items:center;gap:calc(var(--spacing) * 2);min-width:0;display:flex}.codex-top-tray-label,.codex-top-tray-detail{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.codex-top-tray-label{color:var(--color-token-foreground);font-size:var(--text-sm)}.codex-top-tray-detail{color:var(--color-token-description-foreground);font-size:var(--text-sm);flex:1 1 0}@media(max-width:720px){.agent-shell{padding:10px}.prompt-input{min-height:2.75rem;font-size:16px}.model-picker,.codex-tool,.codex-action{height:var(--spacing-token-button-composer)}.codex-tool,.codex-action{width:var(--spacing-token-button-composer)}.codex-tool{width:var(--spacing-token-button-composer-sm);height:var(--spacing-token-button-composer-sm)}.codex-left-rail{min-width:0}.codex-action-cluster{margin-left:auto}}@media(max-width:520px){.agent-log-line,.log-line{grid-template-columns:1fr;gap:2px}.model-picker{min-width:104px;max-width:168px}.codex-tool-skill,.codex-mic,.rate-dot,.rate-limit-reset{display:none}}@property --tw-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-z{syntax:"*";inherits:false;initial-value:0}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-ordinal{syntax:"*";inherits:false}@property --tw-slashed-zero{syntax:"*";inherits:false}@property --tw-numeric-figure{syntax:"*";inherits:false}@property --tw-numeric-spacing{syntax:"*";inherits:false}@property --tw-numeric-fraction{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-backdrop-blur{syntax:"*";inherits:false}@property --tw-backdrop-brightness{syntax:"*";inherits:false}@property --tw-backdrop-contrast{syntax:"*";inherits:false}@property --tw-backdrop-grayscale{syntax:"*";inherits:false}@property --tw-backdrop-hue-rotate{syntax:"*";inherits:false}@property --tw-backdrop-invert{syntax:"*";inherits:false}@property --tw-backdrop-opacity{syntax:"*";inherits:false}@property --tw-backdrop-saturate{syntax:"*";inherits:false}@property --tw-backdrop-sepia{syntax:"*";inherits:false}@property --tw-duration{syntax:"*";inherits:false}@property --tw-ease{syntax:"*";inherits:false}@property --tw-outline-style{syntax:"*";inherits:false;initial-value:solid}';function Cp(n){Xs("agent-session",yp),jo(),document.documentElement.dataset.cmuxWebviewKind="agent-session",document.body.dataset.cmuxWebviewKind="agent-session";const e=Qs(()=>Pr.jsx(yu,{}));Ys.createRoot(n).render(Pr.jsx(Gs,{router:e}))}export{Cp as mountAgentSessionSurface}; diff --git a/Resources/markdown-viewer/webviews-app/chunks/diffSurface.mjs b/Resources/markdown-viewer/webviews-app/chunks/diffSurface.mjs index 4bb90596c69c..f2942b98601c 100644 --- a/Resources/markdown-viewer/webviews-app/chunks/diffSurface.mjs +++ b/Resources/markdown-viewer/webviews-app/chunks/diffSurface.mjs @@ -1,4 +1,4 @@ -import{b as B,j as s,i as C,r as Pt,c as Rt,a as Lt}from"./vendor.mjs";import{W as Tt,C as Ft,r as Bt,c as _t,p as Nt,g as Ee,a as Et,u as Dt,d as zt,b as Be,F as At}from"./diff-vendor.mjs";import{m as Ot,i as $t,c as Wt}from"./installWebviewStyles.mjs";(function(t){var e=[["diffViewerScrollDown","line",1],["diffViewerScrollUp","line",-1],["diffViewerScrollHalfPageDown","halfPage",1],["diffViewerScrollHalfPageUp","halfPage",-1],["diffViewerScrollDownEmacs","line",1],["diffViewerScrollUpEmacs","line",-1],["diffViewerScrollToBottom","edge",1],["diffViewerScrollToTop","edge",-1]],r=new WeakMap;function i(d){return{key:String(d&&d.key||"").toLowerCase(),command:!!(d&&d.command),control:!!(d&&d.control),option:!!(d&&d.option),shift:!!(d&&d.shift)}}function n(d){return!d||d.unbound===!0||!d.first?null:{first:i(d.first),second:d.second?i(d.second):null}}function o(d){return d.code==="Space"?"space":typeof d.key=="string"?d.key.toLowerCase():""}function a(d,g){return!!d&&g.metaKey===d.command&&g.ctrlKey===d.control&&g.altKey===d.option&&g.shiftKey===d.shift&&o(g)===d.key}function c(d){var g=d&&d.closest?d:null;return!!(g&&g.closest("input, textarea, select, [contenteditable='true']"))}function l(d){return d.metaKey||d.ctrlKey||d.altKey||c(d.target)?!1:["arrowdown","arrowup","pagedown","pageup","home","end","space"].indexOf(o(d))>=0}function m(d){var g=Number(d&&d.clientHeight);return Number.isFinite(g)&&g>0?g:Math.max(1,Number(t.innerHeight)||1)}function f(d,g){var w=e.find(function(b){return b[0]===d});return w?(u(g,w[1],w[2]),!0):!1}function h(d){d&&r.delete(d)}function u(d,g,w){if(d){var b=Math.max(0,(Number(d.scrollHeight)||0)-m(d));if(g==="edge"){var v=w>0?b:0;r.set(d,{target:v,time:Date.now()}),d.scrollTo({top:v,behavior:"smooth"});return}var y=g==="halfPage"?Math.max(80,Math.floor(m(d)*.5)):72,I=Date.now(),M=r.get(d),L=Number(d.scrollTop)||0,S=M&&I-M.time<300?M.target:L,k=Math.max(0,Math.min(b,S+w*y));r.set(d,{target:k,time:I}),d.scrollTo({top:k,behavior:"smooth"})}}function p(d){var g=d&&d.target,w=d&&d.getScroller;if(!g||typeof g.addEventListener!="function"||typeof w!="function")return function(){};function b(){h(w())}function v(y){l(y)&&b()}return g.addEventListener("keydown",v,!0),g.addEventListener("wheel",b,!0),g.addEventListener("touchstart",b,!0),g.addEventListener("pointerdown",b,!0),function(){g.removeEventListener("keydown",v,!0),g.removeEventListener("wheel",b,!0),g.removeEventListener("touchstart",b,!0),g.removeEventListener("pointerdown",b,!0)}}function x(d){var g=d&&d.target,w=d&&d.getScroller,b=d&&d.shortcuts||{};if(!g||typeof g.addEventListener!="function"||typeof w!="function")return function(){};var v=e.map(function(k){return{action:k[0],shortcut:n(b[k[0]]),kind:k[1],direction:k[2]}}).filter(function(k){return k.shortcut}),y=null,I=0,M=p({target:g,getScroller:w});function L(){y=null,I&&(t.clearTimeout(I),I=0)}function S(k){if(!(k.defaultPrevented||c(k.target))){if(y){if(a(y.shortcut.second,k)){k.preventDefault(),f(y.action,w()),L();return}L()}for(var P=0;P=0}function m(d){var g=Number(d&&d.clientHeight);return Number.isFinite(g)&&g>0?g:Math.max(1,Number(t.innerHeight)||1)}function f(d,g){var w=e.find(function(b){return b[0]===d});return w?(u(g,w[1],w[2]),!0):!1}function h(d){d&&r.delete(d)}function u(d,g,w){if(d){var b=Math.max(0,(Number(d.scrollHeight)||0)-m(d));if(g==="edge"){var v=w>0?b:0;r.set(d,{target:v,time:Date.now()}),d.scrollTo({top:v,behavior:"smooth"});return}var y=g==="halfPage"?Math.max(80,Math.floor(m(d)*.5)):72,I=Date.now(),M=r.get(d),L=Number(d.scrollTop)||0,S=M&&I-M.time<300?M.target:L,k=Math.max(0,Math.min(b,S+w*y));r.set(d,{target:k,time:I}),d.scrollTo({top:k,behavior:"smooth"})}}function p(d){var g=d&&d.target,w=d&&d.getScroller;if(!g||typeof g.addEventListener!="function"||typeof w!="function")return function(){};function b(){h(w())}function v(y){l(y)&&b()}return g.addEventListener("keydown",v,!0),g.addEventListener("wheel",b,!0),g.addEventListener("touchstart",b,!0),g.addEventListener("pointerdown",b,!0),function(){g.removeEventListener("keydown",v,!0),g.removeEventListener("wheel",b,!0),g.removeEventListener("touchstart",b,!0),g.removeEventListener("pointerdown",b,!0)}}function x(d){var g=d&&d.target,w=d&&d.getScroller,b=d&&d.shortcuts||{};if(!g||typeof g.addEventListener!="function"||typeof w!="function")return function(){};var v=e.map(function(k){return{action:k[0],shortcut:n(b[k[0]]),kind:k[1],direction:k[2]}}).filter(function(k){return k.shortcut}),y=null,I=0,M=p({target:g,getScroller:w});function L(){y=null,I&&(t.clearTimeout(I),I=0)}function S(k){if(!(k.defaultPrevented||c(k.target))){if(y){if(a(y.shortcut.second,k)){k.preventDefault(),f(y.action,w()),L();return}L()}for(var P=0;P=4.5)return i;const a={blue:0,green:0,red:0},c={blue:255,green:255,red:255};return ke(a,o)>=ke(c,o)?"#000000":"#ffffff"}function xe(t,e,r){const i=t.palette??{},n=e.map(o=>i[o]).find(o=>typeof o=="string"&&o.trim()!=="");return He(n,t.background,4.5)?ae(n,r):He(r,t.background,4.5)?r:he(n,t.background,r)}function ae(t,e){return typeof t=="string"&&t.trim()!==""?t.trim():e}function Yt(t){const e=typeof t=="string"&&t.trim()!==""?t.trim():"Menlo";return`${JSON.stringify(e)}, ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", monospace`}function Se(t,e){return typeof t=="number"&&Number.isFinite(t)&&t>0?t:e}function Xt(t){return typeof t!="number"||!Number.isFinite(t)?1:Math.max(0,Math.min(1,t))}function He(t,e,r){const i=je(ae(t,"")),n=je(ae(e,"#000000"));return!!(i&&n&&ke(i,n)>=r)}function je(t){const e=t.trim(),r=e.match(/^#([0-9a-f]{3})$/i);if(r){const[,o]=r;return{red:Number.parseInt(o[0]+o[0],16),green:Number.parseInt(o[1]+o[1],16),blue:Number.parseInt(o[2]+o[2],16)}}const i=e.match(/^#([0-9a-f]{6})$/i);if(!i)return null;const[,n]=i;return{red:Number.parseInt(n.slice(0,2),16),green:Number.parseInt(n.slice(2,4),16),blue:Number.parseInt(n.slice(4,6),16)}}function ke(t,e){const r=Math.max(be(t),be(e)),i=Math.min(be(t),be(e));return(r+.05)/(i+.05)}function be(t){return .2126*Le(t.red)+.7152*Le(t.green)+.0722*Le(t.blue)}function Le(t){const e=t/255;return e<=.03928?e/12.92:((e+.055)/1.055)**2.4}function re(t){const e=B.c(2),{name:r}=t;let i;return e[0]!==r?(i=s.jsx("svg",{viewBox:"0 0 20 20","aria-hidden":"true",children:s.jsx(Jt,{name:r})}),e[0]=r,e[1]=i):i=e[1],i}function Jt(t){const e=B.c(21),{name:r}=t;switch(r){case"arrow":{let i;return e[0]===Symbol.for("react.memo_cache_sentinel")?(i=s.jsxs(s.Fragment,{children:[s.jsx("path",{d:"M4 10h11"}),s.jsx("path",{d:"m11 6 4 4-4 4"})]}),e[0]=i):i=e[0],i}case"background":{let i;return e[1]===Symbol.for("react.memo_cache_sentinel")?(i=s.jsxs(s.Fragment,{children:[s.jsx("rect",{x:"4",y:"4",width:"12",height:"12",rx:"2"}),s.jsx("path",{d:"M7 8h6"}),s.jsx("path",{d:"M7 12h6"})]}),e[1]=i):i=e[1],i}case"bars":{let i;return e[2]===Symbol.for("react.memo_cache_sentinel")?(i=s.jsxs(s.Fragment,{children:[s.jsx("path",{d:"M5 4v12"}),s.jsx("path",{d:"M9 6v8"}),s.jsx("path",{d:"M13 8v4"})]}),e[2]=i):i=e[2],i}case"check":{let i;return e[3]===Symbol.for("react.memo_cache_sentinel")?(i=s.jsx("path",{d:"M4 10.5 8 14l8-9"}),e[3]=i):i=e[3],i}case"classic":{let i;return e[4]===Symbol.for("react.memo_cache_sentinel")?(i=s.jsxs(s.Fragment,{children:[s.jsx("path",{d:"M4 5h12"}),s.jsx("path",{d:"M4 10h12"}),s.jsx("path",{d:"M4 15h12"}),s.jsx("path",{d:"M7 3v4"}),s.jsx("path",{d:"M13 8v4"})]}),e[4]=i):i=e[4],i}case"collapse":{let i;return e[5]===Symbol.for("react.memo_cache_sentinel")?(i=s.jsxs(s.Fragment,{children:[s.jsx("path",{d:"M13.5 11.5 10 15 6.5 11.5"}),s.jsx("path",{d:"M6.5 8.5 10 5l3.5 3.5"})]}),e[5]=i):i=e[5],i}case"clipboard":{let i;return e[6]===Symbol.for("react.memo_cache_sentinel")?(i=s.jsxs(s.Fragment,{children:[s.jsx("rect",{x:"5",y:"4",width:"10",height:"13",rx:"2"}),s.jsx("path",{d:"M8 4a2 2 0 0 1 4 0"}),s.jsx("path",{d:"M8 7h4"})]}),e[6]=i):i=e[6],i}case"document":{let i;return e[7]===Symbol.for("react.memo_cache_sentinel")?(i=s.jsxs(s.Fragment,{children:[s.jsx("path",{d:"M6 3h6l4 4v10H6z"}),s.jsx("path",{d:"M12 3v5h5"})]}),e[7]=i):i=e[7],i}case"dots":{let i;return e[8]===Symbol.for("react.memo_cache_sentinel")?(i=s.jsxs(s.Fragment,{children:[s.jsx("path",{d:"M5 10h.01","data-precision-dot":"true"}),s.jsx("path",{d:"M10 10h.01","data-precision-dot":"true"}),s.jsx("path",{d:"M15 10h.01","data-precision-dot":"true"})]}),e[8]=i):i=e[8],i}case"expand":{let i;return e[9]===Symbol.for("react.memo_cache_sentinel")?(i=s.jsx("path",{d:"M6.5 8 10 11.5 13.5 8"}),e[9]=i):i=e[9],i}case"external":{let i;return e[10]===Symbol.for("react.memo_cache_sentinel")?(i=s.jsxs(s.Fragment,{children:[s.jsx("path",{d:"M7 5H5a2 2 0 0 0-2 2v8a2 2 0 0 0 2 2h8a2 2 0 0 0 2-2v-2"}),s.jsx("path",{d:"M11 3h6v6"}),s.jsx("path",{d:"m10 10 7-7"})]}),e[10]=i):i=e[10],i}case"eye":{let i;return e[11]===Symbol.for("react.memo_cache_sentinel")?(i=s.jsxs(s.Fragment,{children:[s.jsx("path",{d:"M2.5 10s2.75-5 7.5-5 7.5 5 7.5 5-2.75 5-7.5 5-7.5-5-7.5-5z"}),s.jsx("circle",{cx:"10",cy:"10",r:"2.4"})]}),e[11]=i):i=e[11],i}case"files":{let i;return e[12]===Symbol.for("react.memo_cache_sentinel")?(i=s.jsxs(s.Fragment,{children:[s.jsx("rect",{x:"3.5",y:"4",width:"13",height:"12",rx:"2"}),s.jsx("path",{d:"M11.5 4v12"})]}),e[12]=i):i=e[12],i}case"numbers":{let i;return e[13]===Symbol.for("react.memo_cache_sentinel")?(i=s.jsxs(s.Fragment,{children:[s.jsx("path",{d:"M5 5h2v10"}),s.jsx("path",{d:"M4 15h4"}),s.jsx("path",{d:"M11 6.5a2 2 0 1 1 3.2 1.6L11 12h4"}),s.jsx("path",{d:"M11 15h4"})]}),e[13]=i):i=e[13],i}case"refresh":{let i;return e[14]===Symbol.for("react.memo_cache_sentinel")?(i=s.jsxs(s.Fragment,{children:[s.jsx("path",{d:"M16 8a6 6 0 0 0-10.3-3.7L4 6"}),s.jsx("path",{d:"M4 3v3h3"}),s.jsx("path",{d:"M4 12a6 6 0 0 0 10.3 3.7L16 14"}),s.jsx("path",{d:"M16 17v-3h-3"})]}),e[14]=i):i=e[14],i}case"search":{let i;return e[15]===Symbol.for("react.memo_cache_sentinel")?(i=s.jsxs(s.Fragment,{children:[s.jsx("circle",{cx:"8.5",cy:"8.5",r:"4.5"}),s.jsx("path",{d:"m12 12 4 4"})]}),e[15]=i):i=e[15],i}case"sidebarCollapse":{let i;return e[16]===Symbol.for("react.memo_cache_sentinel")?(i=s.jsxs(s.Fragment,{children:[s.jsx("rect",{x:"3.5",y:"4",width:"13",height:"12",rx:"2"}),s.jsx("path",{d:"M8 4v12"}),s.jsx("path",{d:"m12 8 2 2-2 2"})]}),e[16]=i):i=e[16],i}case"split":{let i;return e[17]===Symbol.for("react.memo_cache_sentinel")?(i=s.jsxs(s.Fragment,{children:[s.jsx("rect",{x:"4",y:"4",width:"12",height:"12",rx:"2"}),s.jsx("rect",{x:"6",y:"6",width:"3.5",height:"8",rx:"1","data-diff-deletion":"true"}),s.jsx("rect",{x:"10.5",y:"6",width:"3.5",height:"8",rx:"1","data-diff-addition":"true"})]}),e[17]=i):i=e[17],i}case"unified":{let i;return e[18]===Symbol.for("react.memo_cache_sentinel")?(i=s.jsxs(s.Fragment,{children:[s.jsx("rect",{x:"4",y:"4",width:"12",height:"12",rx:"2"}),s.jsx("rect",{x:"6",y:"6",width:"8",height:"3.5",rx:"1","data-diff-deletion":"true"}),s.jsx("rect",{x:"6",y:"10.5",width:"8",height:"3.5",rx:"1","data-diff-addition":"true"})]}),e[18]=i):i=e[18],i}case"word":{let i;return e[19]===Symbol.for("react.memo_cache_sentinel")?(i=s.jsxs(s.Fragment,{children:[s.jsx("path",{d:"M3 6h14"}),s.jsx("path",{d:"M3 10h8"}),s.jsx("path",{d:"M3 14h11"}),s.jsx("path",{d:"M14 10h3"})]}),e[19]=i):i=e[19],i}case"wrap":{let i;return e[20]===Symbol.for("react.memo_cache_sentinel")?(i=s.jsxs(s.Fragment,{children:[s.jsx("path",{d:"M3 6h10a4 4 0 0 1 0 8H8"}),s.jsx("path",{d:"m10 11-3 3 3 3"})]}),e[20]=i):i=e[20],i}}}function qe(t){return`${t.repoRoot}\0${t.capabilityToken??""}\0${t.currentRef}`}function ct(t){return t.replace(/^[a-zA-Z][\w+.-]*:\/\/[^/]*/,"")}const Qt={suggested:50,worktrees:50},Zt=8,Ke=50,er={suggested:"branchPickerGroupSuggested",worktrees:"branchPickerGroupWorktrees",branches:"branchPickerGroupBranches",remotes:"branchPickerGroupRemotes",recent:"branchPickerGroupRecent"},tr=320,we=6,ve=8,rr=160;function ir(t){const e=window.innerWidth,r=window.innerHeight,i=e-tr-ve,n=Math.max(ve,Math.min(t.left,i)),o=r-t.bottom-we-ve,a=t.top-we-ve;return oo?{top:"auto",bottom:r-t.top+we,left:n,maxHeight:Math.max(0,a)}:{top:t.bottom+we,bottom:"auto",left:n,maxHeight:Math.max(0,o)}}function Ye(t){const e=B.c(65),{label:r,onNavigate:i,onSelectBranchBase:n,picker:o,transport:a}=t,c=a===void 0?null:a,[l,m]=C.useState(!1),[f,h]=C.useState(""),[u,p]=C.useState(null),[x,d]=C.useState("idle"),[g,w]=C.useState(0),[b,v]=C.useState(null),[y,I]=C.useState(!1),[M,L]=C.useState(null),S=C.useRef(null),k=C.useRef(null),P=C.useRef(null),R=C.useId(),D=nr;let z;e[0]!==u||e[1]!==r||e[2]!==f?(z=cr(u,f,r),e[0]=u,e[1]=r,e[2]=f,e[3]=z):z=e[3];const T=z,A=T.length===0?0:Math.min(g,T.length-1);let V;e[4]!==u||e[5]!==x||e[6]!==o||e[7]!==c?(V=()=>{m(!0),h(""),w(0),u==null&&x!=="loading"&&(d("loading"),ur(o,c).then(F=>{p(F.groups),d("idle")}).catch(F=>{console.warn("cmux diff branch picker refs load failed",F),d("error")}))},e[4]=u,e[5]=x,e[6]=o,e[7]=c,e[8]=V):V=e[8];const U=V;let O;e[9]===Symbol.for("react.memo_cache_sentinel")?(O=()=>{m(!1),P.current?.focus()},e[9]=O):O=e[9];const G=O;let $;e[10]!==i||e[11]!==n||e[12]!==o||e[13]!==c?($=F=>{const q=F.trim();if(q!==""){if(q===o.currentRef){G(),v(null);return}if(v(q),I(!1),m(!1),n){n(q),v(null);return}if(c&&o.groupId&&o.capabilityToken){c.request({method:"branchChange",params:{groupId:o.groupId,repoRoot:o.repoRoot,baseRef:q,capabilityToken:o.capabilityToken}}).then(me=>{if(me.type!=="navigation")throw new Error("branch change response missing navigation");i(me.value.url)}).catch(me=>{console.warn("cmux diff branch picker regeneration failed",me),v(null),I(!0),d("idle"),h(""),w(0),m(!0)});return}i(ct(o.regenerateURLTemplate).replace("{ref}",encodeURIComponent(q)))}},e[10]=i,e[11]=n,e[12]=o,e[13]=c,e[14]=$):$=e[14];const _=$;let H,N;e[15]!==l?(H=()=>{if(!l)return;const F=q=>{if(!(q.target instanceof Node))return;const me=q.target;S.current?.contains(me)||k.current?.contains(me)||m(!1)};return document.addEventListener("mousedown",F),()=>document.removeEventListener("mousedown",F)},N=[l],e[15]=l,e[16]=H,e[17]=N):(H=e[16],N=e[17]),C.useEffect(H,N);let Y,X;e[18]!==l?(Y=()=>{if(!l){L(null);return}const F=()=>{const q=P.current;q&&L(ir(q.getBoundingClientRect()))};return F(),window.addEventListener("resize",F),window.addEventListener("scroll",F,!0),()=>{window.removeEventListener("resize",F),window.removeEventListener("scroll",F,!0)}},X=[l],e[18]=l,e[19]=Y,e[20]=X):(Y=e[19],X=e[20]),C.useEffect(Y,X);let j;e[21]!==A||e[22]!==T||e[23]!==_?(j=F=>{if(F.key==="Escape"){F.preventDefault(),G();return}if(F.key==="ArrowDown"){F.preventDefault(),T.length>0&&w(q=>(q+1)%T.length);return}if(F.key==="ArrowUp"){F.preventDefault(),T.length>0&&w(q=>(q-1+T.length)%T.length);return}if(F.key==="Enter"){F.preventDefault();const q=T[A];q&&_(q.row.ref);return}},e[21]=A,e[22]=T,e[23]=_,e[24]=j):j=e[24];const W=j;let E;e[25]!==b||e[26]!==r?(E=b!=null?r("branchPickerGenerating").replace("{ref}",b):null,e[25]=b,e[26]=r,e[27]=E):E=e[27];const K=E;let J;e[28]!==b||e[29]!==r||e[30]!==o?(J=b!=null?r("branchPickerOpen"):or(r,o),e[28]=b,e[29]=r,e[30]=o,e[31]=J):J=e[31];const se=J,le=l?R:void 0;let Q;e[32]!==r?(Q=r("branchPickerOpen"),e[32]=r,e[33]=Q):Q=e[33];const ce=b!=null?"true":"false",de=b!=null;let Z;e[34]!==l||e[35]!==U?(Z=()=>l?m(!1):U(),e[34]=l,e[35]=U,e[36]=Z):Z=e[36];let ne;e[37]!==K||e[38]!==b||e[39]!==o?(ne=b!=null?s.jsxs(s.Fragment,{children:[s.jsx("span",{className:"base-picker-spinner","aria-hidden":"true"}),s.jsx("span",{className:"base-picker-text",children:K})]}):s.jsx(ar,{picker:o}),e[37]=K,e[38]=b,e[39]=o,e[40]=ne):ne=e[40];let ee;e[41]!==se||e[42]!==l||e[43]!==le||e[44]!==Q||e[45]!==ce||e[46]!==de||e[47]!==Z||e[48]!==ne?(ee=s.jsx("button",{ref:P,id:"base-picker-button",type:"button",className:"base-picker-button","aria-haspopup":"listbox","aria-expanded":l,"aria-controls":le,"aria-label":Q,title:se,"data-generating":ce,disabled:de,onClick:Z,children:ne}),e[41]=se,e[42]=l,e[43]=le,e[44]=Q,e[45]=ce,e[46]=de,e[47]=Z,e[48]=ne,e[49]=ee):ee=e[49];let te;e[50]!==A||e[51]!==T||e[52]!==r||e[53]!==R||e[54]!==x||e[55]!==W||e[56]!==l||e[57]!==M||e[58]!==f||e[59]!==y||e[60]!==_?(te=l&&M?Pt.createPortal(s.jsxs("div",{ref:k,className:"base-picker-popover",role:"dialog","aria-label":r("branchPickerOpen"),style:M,children:[s.jsxs("div",{className:"base-picker-search",children:[s.jsx(re,{name:"search"}),s.jsx("input",{ref:D,type:"text",className:"base-picker-input",placeholder:r("branchPickerFilterPlaceholder"),"aria-label":r("branchPickerFilterPlaceholder"),"aria-controls":R,"aria-activedescendant":T[A]?Xe(R,A):void 0,value:f,onChange:F=>{h(F.currentTarget.value),w(0)},onKeyDown:W})]}),y?s.jsx("output",{className:"base-picker-status base-picker-status-error",children:r("branchPickerGenerateFailed")}):null,s.jsx("div",{id:R,className:"base-picker-list",role:"listbox","aria-label":r("branchPickerOpen"),children:x==="loading"?s.jsx("div",{className:"base-picker-status",children:r("branchPickerLoading")}):x==="error"?s.jsx("div",{className:"base-picker-status base-picker-status-error",children:r("branchPickerLoadFailed")}):T.length===0?s.jsx("div",{className:"base-picker-status",children:r("branchPickerNoMatches")}):T.map((F,q)=>s.jsx(sr,{domId:Xe(R,q),entry:F,label:r,selected:q===A,onHover:()=>w(q),onSelect:()=>_(F.row.ref)},`${F.groupId}:${F.row.ref}`))})]}),document.body):null,e[50]=A,e[51]=T,e[52]=r,e[53]=R,e[54]=x,e[55]=W,e[56]=l,e[57]=M,e[58]=f,e[59]=y,e[60]=_,e[61]=te):te=e[61];let fe;return e[62]!==ee||e[63]!==te?(fe=s.jsxs("div",{id:"base-picker",ref:S,children:[ee,te]}),e[62]=ee,e[63]=te,e[64]=fe):fe=e[64],fe}function nr(t){t?.focus()}function or(t,e){const r=e.confidence==="low",i=[t("branchPickerComparing").replace("{head}",e.headRef).replace("{base}",e.currentRef)];return e.currentReason&&i.push(`(${r?"~":""}${e.currentReason})`),e.aheadBehind&&i.push(`+${e.aheadBehind.ahead} -${e.aheadBehind.behind}`),i.join(" ")}function ar(t){const e=B.c(15),{picker:r}=t,i=r.confidence==="low",n=`${i?"~":""}${r.currentReason}`,o=r.aheadBehind;let a;e[0]!==r.headRef?(a=s.jsx("span",{className:"base-picker-head",children:r.headRef}),e[0]=r.headRef,e[1]=a):a=e[1];let c;e[2]===Symbol.for("react.memo_cache_sentinel")?(c=s.jsx(re,{name:"arrow"}),e[2]=c):c=e[2];let l;e[3]!==r.currentRef?(l=s.jsx("span",{className:"base-picker-ref",children:r.currentRef}),e[3]=r.currentRef,e[4]=l):l=e[4];let m;e[5]!==o||e[6]!==i||e[7]!==r.currentReason||e[8]!==n?(m=r.currentReason||o?s.jsxs("span",{className:"base-picker-meta",children:[r.currentReason?s.jsxs("span",{className:i?"base-picker-reason base-picker-reason-low":"base-picker-reason",children:["(",n,")"]}):null,o?s.jsxs("span",{className:"base-picker-aheadbehind",children:["+",o.ahead," -",o.behind]}):null]}):null,e[5]=o,e[6]=i,e[7]=r.currentReason,e[8]=n,e[9]=m):m=e[9];let f;e[10]===Symbol.for("react.memo_cache_sentinel")?(f=s.jsx(re,{name:"expand"}),e[10]=f):f=e[10];let h;return e[11]!==a||e[12]!==l||e[13]!==m?(h=s.jsxs("span",{className:"base-picker-label",children:[a,c,l,m,f]}),e[11]=a,e[12]=l,e[13]=m,e[14]=h):h=e[14],h}function sr(t){const e=B.c(34),{domId:r,entry:i,label:n,onHover:o,onSelect:a,selected:c}=t,{row:l}=i,m=l.secondary??l.worktreeDir??l.reason??"";let f;e[0]!==i.firstInGroup||e[1]!==i.groupLabel?(f=i.firstInGroup?s.jsx("div",{className:"base-picker-group-header",role:"presentation",children:i.groupLabel}):null,e[0]=i.firstInGroup,e[1]=i.groupLabel,e[2]=f):f=e[2];const h=c?"base-picker-row base-picker-row-selected":"base-picker-row";let u;e[3]!==a?(u=y=>{y.preventDefault(),a()},e[3]=a,e[4]=u):u=e[4];let p;e[5]!==i.match||e[6]!==i.raw||e[7]!==n||e[8]!==l.label||e[9]!==l.ref?(p=i.raw?n("branchPickerUseRaw").replace("{ref}",l.ref):lr(l.label,i.match),e[5]=i.match,e[6]=i.raw,e[7]=n,e[8]=l.label,e[9]=l.ref,e[10]=p):p=e[10];let x;e[11]!==p?(x=s.jsx("span",{className:"base-picker-row-primary",children:p}),e[11]=p,e[12]=x):x=e[12];let d;e[13]!==n||e[14]!==l.current?(d=l.current?s.jsx("span",{className:"base-picker-pill",children:n("branchPickerCurrent")}):null,e[13]=n,e[14]=l.current,e[15]=d):d=e[15];let g;e[16]!==m?(g=m?s.jsx("span",{className:"base-picker-row-secondary",children:m}):null,e[16]=m,e[17]=g):g=e[17];let w;e[18]!==r||e[19]!==o||e[20]!==c||e[21]!==h||e[22]!==u||e[23]!==x||e[24]!==d||e[25]!==g?(w=s.jsxs("div",{id:r,role:"option",tabIndex:-1,"aria-selected":c,className:h,onMouseMove:o,onMouseDown:u,children:[x,d,g]}),e[18]=r,e[19]=o,e[20]=c,e[21]=h,e[22]=u,e[23]=x,e[24]=d,e[25]=g,e[26]=w):w=e[26];let b;e[27]!==i.moreCount||e[28]!==n?(b=i.moreCount>0?s.jsx("div",{className:"base-picker-more",role:"presentation",children:n("branchPickerMore").replace("{count}",String(i.moreCount))}):null,e[27]=i.moreCount,e[28]=n,e[29]=b):b=e[29];let v;return e[30]!==f||e[31]!==w||e[32]!==b?(v=s.jsxs(s.Fragment,{children:[f,w,b]}),e[30]=f,e[31]=w,e[32]=b,e[33]=v):v=e[33],v}function Xe(t,e){return`${t}-row-${e}`}function lr(t,e){if(!e)return t;const[r,i]=e;return s.jsxs(s.Fragment,{children:[t.slice(0,r),s.jsx("strong",{children:t.slice(r,i)}),t.slice(i)]})}function cr(t,e,r){const i=e.trim(),n=[];let o=!1;if(t&&i==="")for(const a of t){const c=Je(a,r),l=Qt[a.id]??Zt,m=a.rows.slice(0,l),f=a.rows.length-m.length;m.forEach((h,u)=>{n.push({row:h,groupId:a.id,groupLabel:c,firstInGroup:u===0,match:null,raw:!1,moreCount:u===m.length-1?f:0})})}else if(t)for(const a of t){if(n.length>=Ke)break;const c=Je(a,r);let l=!0;for(const m of a.rows){if(n.length>=Ke)break;const f=dr(m.label,i);f!=null&&(o=!0,n.push({row:m,groupId:a.id,groupLabel:c,firstInGroup:l,match:f,raw:!1,moreCount:0}),l=!1)}}return i!==""&&!o&&n.unshift({row:{ref:i,label:i},groupId:"__raw",groupLabel:"",firstInGroup:!1,match:null,raw:!0,moreCount:0}),n}function Je(t,e){const r=er[t.id];return r?e(r):t.label||t.id}function dr(t,e){const r=t.toLowerCase(),i=e.toLowerCase(),n=r.indexOf(i);if(n>=0)return[n,n+i.length];let o=0,a=-1;for(let c=0;c=0?[a,a+1]:null}async function fr(t){const e=await fetch(t,{cache:"no-store"});if(!e.ok)throw new Error(`refs request failed (${e.status})`);const r=await e.json();if(!r||!Array.isArray(r.groups))throw new Error("refs response missing groups");return r}async function ur(t,e){if(e&&t.capabilityToken){const r=await e.request({method:"branchList",params:{repoRoot:t.repoRoot,capabilityToken:t.capabilityToken,selectedBase:t.currentRef}});if(r.type!=="branches")throw new Error("branch list response missing groups");if(!Array.isArray(r.value.groups))throw new Error("branch list response missing groups");return r.value}return fr(ct(t.refsURL))}const dt=40;function ze(t,e){return e==="additions"?{start:t.additionStart,count:t.additionCount,lineIndex:t.additionLineIndex}:{start:t.deletionStart,count:t.deletionCount,lineIndex:t.deletionLineIndex}}function ge(t,e){return(t[e]??"").replace(/\r?\n$/,"")}function ft(t,e){const r=e==="additions"?t?.additionLines:t?.deletionLines;return Array.isArray(r)?r:[]}function pr(t,e,r){if(t?.hunks==null||!Number.isFinite(r))return null;for(const i of t.hunks){const{start:n,count:o,lineIndex:a}=ze(i,e);if(r>=n&&r=f.start+f.count||m.hunkContent==null)continue;let h=m.additionStart,u=m.deletionStart;for(const p of m.hunkContent){if(p.type==="context"){for(let d=0;d=n&&g<=o&&l.push(` ${ge(a,p.additionLineIndex+d)}`)}h+=p.lines,u+=p.lines;continue}if(e==="additions"?p.additions>0&&h<=o&&h+p.additions-1>=n:p.deletions>0&&u<=o&&u+p.deletions-1>=n){for(let d=0;d{if(t.signal?.aborted)throw t.signal.reason??new DOMException("The diff stream was cancelled","AbortError")},r=wr(),i={startedAt:performance.now(),completedAt:0,flushCount:0,longYieldCount:0,maxBatchSize:0,maxYieldMs:0,treeRefreshCount:0,yieldCount:0};let n=!0,o=performance.now(),a=performance.now(),c=128,l,m=0;const f={initialBatchSize:t.initialFileTreeRowCount,maxIncrementalBatchSize:4096,initialMaxWait:500,incrementalMaxWait:100};function h(S,k){e(),Qe(S),Lr(S);const P=vr(r,S,k,t.getCollapsed(),t.label("untitled"));return P?.renamedItem&&t.onRename(P.renamedItem),P?.item}async function u(S,k){e(),h(S,k)&&await p(!1)}async function p(S){if(e(),r.pendingItems.length===0)return;const k=performance.now();if(!S&&n&&k-o>=8&&r.pendingItems.length=P||k-a>=R)&&(x(),await d(),o=performance.now())}function x(){if(e(),r.pendingItems.length===0)return;const S=r.pendingItems.splice(0,r.pendingItems.length);r.pendingItemById.clear(),r.items.push(...S),t.onBatch(S),i.firstBatchAt==null&&(i.firstBatchAt=performance.now(),i.firstBatchFileCount=S.length),i.flushCount+=1,i.maxBatchSize=Math.max(i.maxBatchSize,S.length),i.fileCount=r.items.length,i.renderableFileCount=r.items.length,g(),t.onMetrics({...i}),a=performance.now(),n||(c=Math.min(c*4,f.maxIncrementalBatchSize)),n=!1}async function d(){e();const S=performance.now();await Nr();const k=performance.now()-S;i.yieldCount+=1,i.maxYieldMs=Math.max(i.maxYieldMs,k),k>16&&(i.longYieldCount+=1)}function g(){e(),i.treeRefreshCount+=1,t.onTreeSource(jr(r))}async function w(S){if(e(),S.trim()==="")return;const k=Pr(S);k!=null&&(l=mt(k,m,t.label),m+=1);const P=`cmux-diff-file-${r.fileIndex}`,R=t.processFile(S,{cacheKey:P,isGitDiff:!0});Qe(R,S),await u(R,l)}const b=await fetch(t.patchURL,{cache:"no-store",signal:t.signal});if(!b.ok)throw new Error(`${t.label("loadingDiff")} (${b.status})`);if(!b.body?.getReader){e();const S=await b.text();e(),await tt(S,t,u),await p(!0),i.completedAt=performance.now(),t.onComplete({...i});return}const v=new TextDecoder,y=b.body.getReader(),I=Ir(),M=256*1024;for(;;){e();const{done:S,value:k}=await y.read();if(S){const P=v.decode();P.length>0&&(I.push(P),await Te(I,w));break}for(let P=0;P0&&(c==null&&t.paths.push(a),t.pathToItemId.set(a,h.id),Sr(t,a,e.type,c?.sawDeleted===!0),t.pathStateByTreePath.set(a,{currentItem:h,currentItemId:h.id,currentType:e.type,fileOrder:u,sawDeleted:c?.sawDeleted===!0||e.type==="deleted"})),{item:h,renamedItem:l}}function yr(t,e,r){const i=r.currentItemId,n=r.currentType==="deleted"?"?deleted":"?previous",o=pt(t,`${e}${n}`),a={...r.currentItem,id:o};r.currentItem=a,r.currentItemId=o,kr(t,i,a);const c=t.itemIdToFile.get(i);if(c&&(t.itemIdToFile.delete(i),t.itemIdToFile.set(o,c)),t.treePathByItemId.has(i)&&(t.treePathByItemId.delete(i),t.treePathByItemId.set(o,e)),t.pendingItemById.has(i)){t.pendingItemById.delete(i),t.pendingItemById.set(o,a);return}return{oldId:i,newId:o}}function kr(t,e,r){const i=t.itemIdToFile.get(e)?.fileOrder;i!=null&&(i({...i})),gitStatusPatch:Cr(t),pathCount:t.paths.length,paths:[...t.paths],pathToItemId:new Map(t.pathToItemId),previousRevision:e,revision:t.treeRevision,statsChanged:t.pendingStatsChanged,statsByPath:new Map(Array.from(t.statsByPath,([i,n])=>[i,{...n}])),treePathByItemId:new Map(t.treePathByItemId)};return t.pendingStatsChanged=!1,r}function Cr(t){if(t.pendingGitStatusRemovePaths.size===0&&t.pendingGitStatusSetByPath.size===0)return;const e={};return t.pendingGitStatusRemovePaths.size>0&&(e.remove=Array.from(t.pendingGitStatusRemovePaths),t.pendingGitStatusRemovePaths.clear()),t.pendingGitStatusSetByPath.size>0&&(e.set=Array.from(t.pendingGitStatusSetByPath.values()),t.pendingGitStatusSetByPath.clear()),e}async function tt(t,e,r){const i=e.parsePatchFiles(t,"cmux-diff"),n=i.length>1;for(const[o,a]of i.entries()){const c=n?mt(a.patchMetadata,o,e.label):void 0;for(const l of a.files??[])await r(l,c)}}function Ir(){let t,e="",r=0,i=0,n=!1;const o="diff --git ",a=` @@ -142,4 +142,4 @@ ${o} background-color: var(--cmux-diff-tree-sticky-bg) !important; box-shadow: 0 1px 0 var(--trees-border-color); } - `}function pi(t,e){const r=t.palette??{},i=Kt(t.background),n=mi(t),o=he(t.foreground,n,t.type==="light"?"#000000":"#ffffff"),a=(c,l=o)=>he(c,n,l);return{name:t.name,displayName:t.ghosttyName,type:t.type,colors:{"editor.background":i,"editor.foreground":o,"terminal.background":i,"terminal.foreground":o,"terminal.ansiBlack":a(r[0]),"terminal.ansiRed":a(r[1]),"terminal.ansiGreen":a(r[2]),"terminal.ansiYellow":a(r[3]),"terminal.ansiBlue":a(r[4]),"terminal.ansiMagenta":a(r[5]),"terminal.ansiCyan":a(r[6]),"terminal.ansiWhite":a(r[7]),"terminal.ansiBrightBlack":a(r[8]),"terminal.ansiBrightRed":a(r[9],a(r[1])),"terminal.ansiBrightGreen":a(r[10],a(r[2])),"terminal.ansiBrightYellow":a(r[11],a(r[3])),"terminal.ansiBrightBlue":a(r[12],a(r[4])),"terminal.ansiBrightMagenta":a(r[13],a(r[5])),"terminal.ansiBrightCyan":a(r[14],a(r[6])),"terminal.ansiBrightWhite":a(r[15]),"gitDecoration.addedResourceForeground":a(r[10],a(r[2],"#32d74b")),"gitDecoration.deletedResourceForeground":a(r[9],a(r[1],"#ff453a")),"gitDecoration.modifiedResourceForeground":a(r[12],a(r[4],"#0a84ff")),"editor.selectionBackground":t.selectionBackground,"editor.selectionForeground":t.selectionForeground},tokenColors:[{settings:{foreground:o,background:i}},{scope:["comment","punctuation.definition.comment"],settings:{foreground:a(r[8]),fontStyle:"italic"}},{scope:["string","constant.other.symbol"],settings:{foreground:a(r[2])}},{scope:["constant.numeric","constant.language","support.constant"],settings:{foreground:a(r[3])}},{scope:["keyword","storage","storage.type"],settings:{foreground:a(r[5])}},{scope:["entity.name.function","support.function"],settings:{foreground:a(r[4])}},{scope:["entity.name.type","entity.name.class","support.type"],settings:{foreground:a(r[6])}},{scope:["markup.heading","punctuation.definition.heading"],settings:{foreground:a(r[12],a(r[4])),fontStyle:"bold"}},{scope:["markup.bold","punctuation.definition.bold"],settings:{foreground:a(r[11],a(r[3])),fontStyle:"bold"}},{scope:["markup.italic","punctuation.definition.italic"],settings:{foreground:a(r[13],a(r[5])),fontStyle:"italic"}},{scope:["markup.inline.raw","markup.raw","markup.fenced_code","markup.raw.block"],settings:{foreground:a(r[10],a(r[2]))}},{scope:["markup.underline.link","string.other.link","markup.link"],settings:{foreground:a(r[14],a(r[6]))}},{scope:["markup.quote","punctuation.definition.quote"],settings:{foreground:a(r[8]),fontStyle:"italic"}},{scope:["markup.list","punctuation.definition.list","markup.table"],settings:{foreground:a(r[9],a(r[1]))}},{scope:["variable","meta.definition.variable"],settings:{foreground:o}},{scope:["invalid","message.error"],settings:{foreground:a(r[9],a(r[1]))}}]}}function mi(t){return typeof t.background=="string"&&t.background.trim()!==""?t.background.trim():t.type==="light"?"#ffffff":"#000000"}function ie(t,e={}){const r=e.pending===!0;return{error:e.error===!0,loading:e.loading===!0||r,message:t,pending:r,statusOnly:e.statusOnly===!0}}function hi(t,e){const r=t.payload;return r?.pendingReplacement===!0?ie(r.statusMessage??e("loadingDiff"),{loading:!0,pending:!0}):typeof r?.statusMessage=="string"&&r.statusMessage.length>0?ie(r.statusMessage,{error:r.statusIsError===!0,loading:!1,statusOnly:!0}):ie(e("loadingDiff"),{loading:!0})}function Ce(t){document.body.dataset.loading=t.loading?"true":"false",document.body.dataset.statusOnly=t.statusOnly?"true":"false"}function gi(t){const e=(Number.isFinite(t.available)?t.available:0)-t.reserved,r=[],i=[];let n=0,o=!1;for(const a of t.items){const c=n+Math.max(0,a.width);!o&&c<=e?(n=c,r.push(a.id)):(o=!0,i.push(a.id))}return{visible:r,overflow:i}}function xi(t){const e=B.c(3),[r,i]=C.useState(null),n=C.useRef(null);let o,a;return e[0]!==t?(o=()=>{const c=t.current;if(!c||typeof ResizeObserver>"u")return;const l=new ResizeObserver(m=>{for(const f of m){const h=f.contentBoxSize?.[0]?.inlineSize??f.contentRect.width,u=Math.round(h);u!==n.current&&(n.current=u,i(u))}});return l.observe(c),()=>l.disconnect()},a=[t],e[0]=t,e[1]=o,e[2]=a):(o=e[1],a=e[2]),C.useEffect(o,a),r}class We{version;listeners=new Set;constructor(e){this.version=e}subscribe(e){return this.listeners.add(e),()=>this.listeners.delete(e)}openResource(e){return fetch(e.id,{cache:"no-store"})}close(){}receive(e){for(const r of this.listeners)r(e)}makeRequest(e){return{id:Si(),version:this.version,...e}}unwrap(e){if(e.error)throw new ue(e.error.code,e.error.message);if(!e.result)throw new ue("missingResult","Diff transport returned no result");return e.result}}class bi extends We{endpoint;constructor(e,r){super(r),this.endpoint=e}async request(e){const r=await fetch(this.endpoint,{method:"POST",cache:"no-store",headers:{"Content-Type":"application/json"},body:JSON.stringify(this.makeRequest(e))});if(!r.ok)throw new ue("requestFailed",`Diff transport request failed (${r.status})`);return this.unwrap(await r.json())}}class wi extends We{handler;constructor(e,r){super(r),this.handler=e,window.cmuxDiffBridge={receive:i=>this.receive(i)}}async request(e){return this.unwrap(await this.handler.postMessage(this.makeRequest(e)))}close(){delete window.cmuxDiffBridge}}class vi extends We{endpoint;socket=null;connecting=null;pending=new Map;constructor(e,r){super(r),this.endpoint=e}async request(e){const r=await this.connect(),i=this.makeRequest(e);return new Promise((n,o)=>{this.pending.set(i.id,{resolve:n,reject:o}),r.send(JSON.stringify(i))})}close(){this.socket?.close(),this.socket=null,this.connecting=null,this.rejectPending(new ue("closed","Diff transport closed"))}connect(){return this.socket?.readyState===WebSocket.OPEN?Promise.resolve(this.socket):this.connecting?this.connecting:(this.connecting=new Promise((e,r)=>{const i=new WebSocket(this.endpoint);i.addEventListener("open",()=>{this.socket=i,this.connecting=null,e(i)},{once:!0}),i.addEventListener("message",n=>this.handleMessage(n)),i.addEventListener("close",()=>{this.socket=null,this.connecting=null,this.rejectPending(new ue("closed","Diff transport closed"))}),i.addEventListener("error",()=>{this.connecting=null,r(new ue("connectFailed","Could not connect to diff transport"))},{once:!0})}),this.connecting)}handleMessage(e){if(typeof e.data!="string")return;const r=JSON.parse(e.data);if("id"in r){const i=this.pending.get(r.id);if(!i)return;this.pending.delete(r.id);try{i.resolve(this.unwrap(r))}catch(n){i.reject(n instanceof Error?n:new Error(String(n)))}return}this.receive(r)}rejectPending(e){for(const r of this.pending.values())r.reject(e);this.pending.clear()}}function yi(t){if(!t)return null;const e=window.webkit?.messageHandlers?.cmuxDiff;return t.kind==="webKit"&&e?new wi(e,t.protocolVersion):t.kind==="webSocket"?new vi(t.endpoint,t.protocolVersion):t.kind==="fetch"&&ki(window.location.protocol)?new bi(t.endpoint,t.protocolVersion):null}function ki(t){return t==="http:"||t==="https:"}class ue extends Error{code;constructor(e,r){super(r),this.name="DiffTransportError",this.code=e}}function Si(){return typeof crypto.randomUUID=="function"?crypto.randomUUID():`diff-${Date.now()}-${Math.random().toString(16).slice(2)}`}const ji=/\b(Android|iPhone|iPad|iPod|Mobile)\b/i;function Ci(t){return ji.test(t??"")?1:3}function Ii(){return Ci(typeof navigator>"u"?void 0:navigator.userAgent)}function Mi(t){return{poolSize:Ii(),workerFactory:()=>new Worker(t,{type:"module"})}}const lt=new Set,Pi="00000000-0000-0000-0000-000000000000",Ri=["82%","64%","76%","58%","70%","46%"],Li=["58%","88%","72%","94%","64%","82%","52%","78%"],Ti="./assets/pierre-diffs-1.2.7-trees-1.0.0-beta.4/worker-pool/worker-portable.js",jt="cmux.diffViewer.layout";function Fi(t,e){const r=t.payload??{};return{activeItemId:"",activeTreePath:"",comments:[],copyFeedback:"",draft:null,fileSearchOpen:!1,fileSearchRequest:0,filesWidth:252,filesVisible:!0,items:[],languages:["text"],metrics:null,options:{collapsed:!1,diffIndicators:"bars",expandUnchanged:!1,layout:Wi(r),lineNumbers:!0,showBackgrounds:!0,wordDiffs:!1,wordWrap:!1},optionsOpen:!1,status:e,treeSource:null}}function Bi(t,e){switch(e.type){case"append-items":{const r=e.items.map(n=>{Mn(n);const o=Ar(n,t.comments,t.draft);return t.options.collapsed?{...o,collapsed:!0}:o}),i=Rn(t.languages,r.flatMap(Pn));return{...t,activeItemId:t.activeItemId||r[0]?.id||"",items:[...t.items,...r],languages:i,status:t.status.loading?ie("",{loading:!1}):t.status}}case"reset-diff":return{...t,activeItemId:"",activeTreePath:"",draft:null,items:[],languages:["text"],metrics:null,status:e.status,treeSource:null};case"remove-comment":{const r=t.comments.filter(i=>i.id!==e.id);return{...t,comments:r,items:ye(t.items,r,t.draft)}}case"rename-item":return{...t,activeItemId:t.activeItemId===e.oldId?e.newId:t.activeItemId,draft:t.draft?.itemId===e.oldId?{...t.draft,itemId:e.newId}:t.draft,items:t.items.map(r=>r.id===e.oldId||r.id===e.newId?{...r,id:e.newId,version:(r.version??0)+1}:r)};case"set-active-item":return{...t,activeItemId:e.itemId,activeTreePath:e.treePath??t.activeTreePath};case"replace-comments":return{...t,comments:e.comments,draft:null,items:ye(t.items,e.comments,null)};case"set-copy-feedback":return{...t,copyFeedback:e.message};case"set-draft":return{...t,draft:e.draft,items:ye(t.items,t.comments,e.draft)};case"set-file-search-open":return{...t,fileSearchOpen:e.open,filesVisible:e.open?!0:t.filesVisible};case"request-file-search":return{...t,fileSearchOpen:!0,fileSearchRequest:t.fileSearchRequest+1,filesVisible:!0};case"set-files-width":return{...t,filesWidth:e.width};case"set-files-visible":return{...t,filesVisible:e.visible};case"set-metrics":return{...t,metrics:e.metrics};case"set-option":return e.key==="collapsed"?{...t,options:{...t.options,collapsed:!!e.value},items:t.items.map(r=>({...r,collapsed:!!e.value,version:(r.version??0)+1}))}:{...t,options:{...t.options,[e.key]:e.value}};case"set-options-open":return{...t,optionsOpen:e.open};case"set-status":return{...t,status:e.status};case"set-tree-source":{const r=e.source,i=t.activeItemId?r.treePathByItemId.get(t.activeItemId)??t.activeTreePath:t.activeTreePath;return{...t,activeTreePath:i,treeSource:r}}case"upsert-comment":{const i=t.comments.some(n=>n.id===e.comment.id)?t.comments.map(n=>n.id===e.comment.id?e.comment:n):[...t.comments,e.comment];return{...t,comments:i,items:ye(t.items,i,t.draft)}}}}function _i({config:t,initialStatus:e}){const r=t.payload??{},i=C.useMemo(()=>St(r.labels,{assertMissing:kt()}),[r.labels]),n=De(r.appearance),o=zn(r.transport),[a,c]=C.useState(Ie(r.sessionSource)?r.sessionSource:null),[l,m]=C.useState(a),f=C.useRef(new Map);a?.kind==="branch"&&!f.current.has(a.repoRoot)&&f.current.set(a.repoRoot,a);const[h,u]=C.useState(r.patchURL),[p,x]=C.useReducer(Bi,Fi(t,e)),d=Ve(p),g=C.useRef(null),w=C.useRef(0),b=C.useRef(null),v=C.useRef(null),y=C.useRef(null),I=Ei(t.assets?.workerModuleURL),M=Mi(I),L=di(p.options,n,p.languages),S=typeof r.repoRoot=="string"&&r.repoRoot!==""?r.repoRoot:null,k=Me(l??a)??S,P=$r()&&k!=null,R=Kr(r),D=Di({bridgeAvailable:P,dispatch:x,latestState:d,repoRoot:k}),z=ci(p.options,n);z.onGutterUtilityClick=D.onGutterUtilityClick;const T=C.useCallback(()=>{const j=v.current;return o?j?(v.current=null,o.request({method:"sessionClose",params:j}).then(()=>{}).catch(()=>{v.current||(v.current=j)})):typeof r.capabilityToken!="string"?Promise.resolve():It(o,{sessionId:Pi,capabilityToken:r.capabilityToken}):Promise.resolve()},[r.capabilityToken,o]),A=C.useCallback(j=>{j.kind==="branch"&&f.current.set(j.repoRoot,j),m(j)},[]);Bn(p),Tn(r,i,x,o),Sn(t,o,i,x,d,u,v,T,a,A),Xr(P?k:null,D.onLoaded),Nn(p.optionsOpen,x),Dn(p.fileSearchOpen,x);const V=(j,W)=>{const E=j.metadata;return E.kind==="draft"?s.jsx(xt,{labels:R,onCancel:()=>x({type:"set-draft",draft:null}),onSave:K=>D.saveDraft(W,K)}):s.jsx(Yr,{comment:E.comment,labels:R,onDelete:()=>D.remove(E.comment),onSaveMessage:K=>D.editMessage(E.comment,K,W.fileDiff)})},U=Number.isFinite(p.metrics?.completedAt)&&(p.metrics?.completedAt??0)>0,O=Or(p.items,p.comments,U),G=j=>{j.itemId!=null&&(j.anchor.state==="outdated"?g.current?.scrollTo({type:"item",id:j.itemId,align:"start",behavior:"smooth-auto"}):g.current?.scrollTo({type:"line",id:j.itemId,lineNumber:j.anchor.line,side:j.comment.side,align:"center",behavior:"smooth-auto"}),x({type:"set-active-item",itemId:j.itemId,treePath:p.treeSource?.treePathByItemId.get(j.itemId)}))},$=p.treeSource?.treePathByItemId.get(p.activeItemId)??p.activeTreePath,_=C.useCallback(j=>{const W=d.current,E=An(j,W.items);E&&(g.current?.scrollTo({type:"item",id:E,align:"start",behavior:"smooth-auto"}),x({type:"set-active-item",itemId:E,treePath:W.treeSource?.treePathByItemId.get(E)}))},[d]),H=C.useCallback(j=>{const W=d.current,E=$n(W.items,w.current,J=>g.current?.getInstance()?.getTopForItem(J)),K=On(E||W.activeItemId,W.items,j);K&&_(K)},[d,_]),N=C.useCallback(j=>{w.current=j},[]);_n(y,x,H);const Y=j=>{Ce(j),x({type:"set-status",status:j})},X=j=>{Gi(j),x({type:"set-option",key:"layout",value:j})};return s.jsxs("div",{id:"app","data-file-search-open":p.fileSearchOpen,children:[s.jsx(Hi,{config:t,transport:o,label:i,onCopyGitApply:async()=>{try{const j=await Ut(h,i,b.current);x({type:"set-copy-feedback",message:j})}catch{x({type:"set-copy-feedback",message:i("copyFailedGitApplyCommand")})}},onJump:_,onNavigate:j=>{Y(ie(i("loadingDiff"),{pending:!0})),T(),window.location.href=Vt(j)},activeSessionSource:l??a,onSelectSessionSource:j=>{const W=l??a,E=j.kind==="branch"&&(W?.kind!=="branch"||j.baseRef==null)?f.current.get(j.repoRoot)??j:j;E.kind==="branch"&&f.current.set(E.repoRoot,E);const K=ie(i("loadingDiff"),{pending:!0});Ce(K),x({type:"reset-diff",status:K}),u(void 0),T(),m(E),c(E)},onReload:async()=>{await T(),window.location.reload()},onSetLayout:X,dispatch:x,state:p}),s.jsxs("section",{id:"content",style:{"--cmux-diff-files-width":`${p.filesWidth}px`},children:[s.jsx(Ni,{label:i,onClose:()=>Ue(x),open:p.fileSearchOpen}),s.jsx(an,{commentEntries:O,commentLabels:R,hasDraft:p.draft!=null,label:i,onSelectComment:G,onSelectItem:_,selectedPath:$,dispatch:x,state:p}),s.jsx("main",{id:"viewer","aria-label":i("diffViewer"),children:p.items.length>0?s.jsxs(Tt,{poolOptions:M,highlighterOptions:L,children:[s.jsx(Ui,{codeViewRef:g,highlighterOptions:L}),s.jsx(Ft,{ref:g,className:"code-view-root",containerRef:y,items:p.items,onScroll:N,options:z,renderHeaderMetadata:j=>s.jsx(xr,{fileDiff:j.fileDiff,label:i}),renderAnnotation:(j,W)=>V(j,W)})]}):null}),s.jsx(pn,{label:i,status:p.status})]}),s.jsx("textarea",{ref:b,"aria-hidden":"true",readOnly:!0,tabIndex:-1,className:"copy-fallback-textarea"})]})}function Ni(t){const e=B.c(8),{label:r,onClose:i,open:n}=t;if(!n)return null;let o;e[0]!==r?(o=r("hideFileSearch"),e[0]=r,e[1]=o):o=e[1];let a;e[2]!==r?(a=r("hideFileSearch"),e[2]=r,e[3]=a):a=e[3];let c;return e[4]!==i||e[5]!==o||e[6]!==a?(c=s.jsx("button",{id:"files-sidebar-backdrop",type:"button","aria-controls":"files-sidebar","aria-label":o,title:a,onClick:i}),e[4]=i,e[5]=o,e[6]=a,e[7]=c):c=e[7],c}function Ei(t){return new URL(t||Ti,window.location.href)}function Di(t){const e=B.c(26),{bridgeAvailable:r,dispatch:i,latestState:n,repoRoot:o}=t,a=Ve(o);let c;e[0]!==i?(c=b=>i({type:"replace-comments",comments:b}),e[0]=i,e[1]=c):c=e[1];const l=c;let m;e[2]!==i?(m=(b,v)=>{const y=b.side==="deletions"?"deletions":"additions";i({type:"set-draft",draft:{itemId:v.item.id,side:y,startLine:Math.min(b.start,b.end),endLine:Math.max(b.start,b.end)}})},e[2]=i,e[3]=m):m=e[3];const f=m;let h;e[4]!==a||e[5]!==r||e[6]!==i||e[7]!==n||e[8]!==o?(h=(b,v)=>{const y=n.current.draft;if(y==null||y.itemId!==b.id||v.trim()==="")return;const I={filePath:pe(b.fileDiff,""),side:y.side,startLine:y.startLine,endLine:y.endLine,lineText:Ae(b.fileDiff,y.side,y.endLine)??"",message:v},M={...I,submissionText:it(I,b.fileDiff)};(r&&o!=null?rt(o,M):Promise.resolve($i(M))).then(S=>{a.current===o&&(i({type:"upsert-comment",comment:S}),i({type:"set-draft",draft:null}))}).catch(Oi)},e[4]=a,e[5]=r,e[6]=i,e[7]=n,e[8]=o,e[9]=h):h=e[9];const u=h;let p;e[10]!==a||e[11]!==r||e[12]!==i||e[13]!==o?(p=(b,v,y)=>{if(v.trim()==="")return;const I={...b,message:v,updatedAt:new Date().toISOString()},M={...I,submissionText:it(I,y)};(r&&o!=null?rt(o,M):Promise.resolve(M)).then(S=>{a.current===o&&i({type:"upsert-comment",comment:S})}).catch(Ai)},e[10]=a,e[11]=r,e[12]=i,e[13]=o,e[14]=p):p=e[14];const x=p;let d;e[15]!==a||e[16]!==r||e[17]!==i||e[18]!==o?(d=b=>{const v=o;r&&o!=null&&Vr(o,b.id).catch(zi),a.current===v&&i({type:"remove-comment",id:b.id})},e[15]=a,e[16]=r,e[17]=i,e[18]=o,e[19]=d):d=e[19];const g=d;let w;return e[20]!==x||e[21]!==f||e[22]!==l||e[23]!==g||e[24]!==u?(w={editMessage:x,onGutterUtilityClick:f,onLoaded:l,remove:g,saveDraft:u},e[20]=x,e[21]=f,e[22]=l,e[23]=g,e[24]=u,e[25]=w):w=e[25],w}function zi(t){return console.warn("cmux diff comment delete failed",t)}function Ai(t){return console.warn("cmux diff comment edit failed",t)}function Oi(t){return console.warn("cmux diff comment save failed",t)}function $i(t){const e=new Date().toISOString();return{...t,id:crypto.randomUUID(),createdAt:e,updatedAt:e}}function Wi(t){const e=Ct(t.layout);return t.layoutSource==="explicit"&&e?e:Vi()??e??"unified"}function Vi(){try{return Ct(window.localStorage.getItem(jt))}catch{return null}}function Gi(t){try{window.localStorage.setItem(jt,t)}catch{}}function Ct(t){return t==="split"||t==="unified"?t:null}function Ui(t){const{codeViewRef:e,highlighterOptions:r}=t;return mn(r,e),null}function Hi(t){const e=B.c(70),{activeSessionSource:r,config:i,dispatch:n,label:o,onCopyGitApply:a,onJump:c,onNavigate:l,onSelectSessionSource:m,onReload:f,onSetLayout:h,state:u,transport:p}=t;let x;e[0]!==i.payload?(x=i.payload??{},e[0]=i.payload,e[1]=x):x=e[1];const d=x,g=typeof d.externalURL=="string"&&d.externalURL.length>0?d.externalURL:null,w=C.useRef(null),b=xi(w);let v;if(e[2]!==g||e[3]!==d||e[4]!==b){const N=[{id:"files-toggle",width:Fe},{id:"layout-toggle",width:Fe},...g?[{id:"external-link",width:Fe}]:[]];v=b==null?new Set:new Set(gi({available:b,reserved:qi+(Yi(d)?Ki:0),items:N}).overflow),e[2]=g,e[3]=d,e[4]=b,e[5]=v}else v=e[5];const y=v,I=!y.has("files-toggle"),M=!y.has("layout-toggle"),L=g!=null&&!y.has("external-link");let S;e[6]!==r||e[7]!==o||e[8]!==l||e[9]!==m||e[10]!==d||e[11]!==p?(S=s.jsx(Xi,{activeSessionSource:r,label:o,onNavigate:l,onSelectSessionSource:m,payload:d,transport:p}),e[6]=r,e[7]=o,e[8]=l,e[9]=m,e[10]=d,e[11]=p,e[12]=S):S=e[12];let k;e[13]!==n?(k=()=>n({type:"set-file-search-open",open:!0}),e[13]=n,e[14]=k):k=e[14];let P;e[15]!==o||e[16]!==c||e[17]!==u.activeItemId||e[18]!==u.fileSearchOpen||e[19]!==u.items||e[20]!==k?(P=s.jsx("div",{className:"toolbar-middle flex min-w-0 flex-1 items-center justify-center gap-1.5",children:s.jsx(nn,{items:u.items,label:o,onJump:c,onOpenSearch:k,searchOpen:u.fileSearchOpen,selectedItemId:u.activeItemId})}),e[15]=o,e[16]=c,e[17]=u.activeItemId,e[18]=u.fileSearchOpen,e[19]=u.items,e[20]=k,e[21]=P):P=e[21];let R;e[22]!==g||e[23]!==o||e[24]!==L?(R=L?s.jsx("a",{id:"external-link",className:"toolbar-icon",href:g??void 0,target:"_blank",rel:"noreferrer",title:o("openSourceURL"),"aria-label":o("openSourceURL"),children:s.jsx(re,{name:"external"})}):null,e[22]=g,e[23]=o,e[24]=L,e[25]=R):R=e[25];let D;e[26]!==o||e[27]!==h||e[28]!==M||e[29]!==u.options?(D=M?s.jsx("button",{id:"layout-toggle",className:"toolbar-icon",type:"button",title:u.options.layout==="split"?o("switchToUnifiedDiff"):o("switchToSplitDiff"),"aria-label":u.options.layout==="split"?o("switchToUnifiedDiff"):o("switchToSplitDiff"),onClick:()=>h(u.options.layout==="split"?"unified":"split"),children:s.jsx(re,{name:u.options.layout})}):null,e[26]=o,e[27]=h,e[28]=M,e[29]=u.options,e[30]=D):D=e[30];let z;e[31]!==o?(z=o("options"),e[31]=o,e[32]=z):z=e[32];let T;e[33]!==o?(T=o("options"),e[33]=o,e[34]=T):T=e[34];let A;e[35]!==n||e[36]!==u.optionsOpen?(A=()=>n({type:"set-options-open",open:!u.optionsOpen}),e[35]=n,e[36]=u.optionsOpen,e[37]=A):A=e[37];let V;e[38]===Symbol.for("react.memo_cache_sentinel")?(V=s.jsx(re,{name:"dots"}),e[38]=V):V=e[38];let U;e[39]!==u.optionsOpen||e[40]!==A||e[41]!==z||e[42]!==T?(U=s.jsx("button",{id:"options-button",className:"toolbar-icon",type:"button",title:z,"aria-label":T,"aria-expanded":u.optionsOpen,"aria-controls":"options-menu",onClick:A,children:V}),e[39]=u.optionsOpen,e[40]=A,e[41]=z,e[42]=T,e[43]=U):U=e[43];let O;e[44]!==n||e[45]!==o||e[46]!==I||e[47]!==u.filesVisible?(O=I?s.jsx("button",{id:"files-toggle",className:"toolbar-icon",type:"button",title:u.filesVisible?o("hideFiles"):o("showFiles"),"aria-label":u.filesVisible?o("hideFiles"):o("showFiles"),"aria-pressed":u.filesVisible,onClick:()=>n({type:"set-files-visible",visible:!u.filesVisible}),children:s.jsx(re,{name:"files"})}):null,e[44]=n,e[45]=o,e[46]=I,e[47]=u.filesVisible,e[48]=O):O=e[48];let G;e[49]!==u.copyFeedback?(G=s.jsx("span",{id:"copy-feedback",className:"visually-hidden","aria-live":"polite",children:u.copyFeedback}),e[49]=u.copyFeedback,e[50]=G):G=e[50];let $;e[51]!==U||e[52]!==O||e[53]!==G||e[54]!==R||e[55]!==D?($=s.jsxs("div",{className:"toolbar-actions flex items-center gap-1.5",children:[R,D,U,O,G]}),e[51]=U,e[52]=O,e[53]=G,e[54]=R,e[55]=D,e[56]=$):$=e[56];let _;e[57]!==n||e[58]!==g||e[59]!==o||e[60]!==a||e[61]!==f||e[62]!==h||e[63]!==u?(_=u.optionsOpen?s.jsx(on,{dispatch:n,externalURL:g,label:o,onCopyGitApply:a,onReload:f,onSetLayout:h,state:u}):null,e[57]=n,e[58]=g,e[59]=o,e[60]=a,e[61]=f,e[62]=h,e[63]=u,e[64]=_):_=e[64];let H;return e[65]!==$||e[66]!==_||e[67]!==S||e[68]!==P?(H=s.jsxs("header",{id:"toolbar",ref:w,children:[S,P,$,_]}),e[65]=$,e[66]=_,e[67]=S,e[68]=P,e[69]=H):H=e[69],H}const Fe=28,qi=248,Ki=60;function Yi(t){return Array.isArray(t?.repoOptions)&&t.repoOptions.length>=2}function Xi(t){const e=B.c(31),{activeSessionSource:r,label:i,onNavigate:n,onSelectSessionSource:o,payload:a,transport:c}=t;let l;e[0]!==i?(l=i("diffTarget"),e[0]=i,e[1]=l):l=e[1];const m=a.sourceOptions;let f;e[2]!==r||e[3]!==o?(f=g=>o(Cn(g,r)),e[2]=r,e[3]=o,e[4]=f):f=e[4];let h;e[5]!==r?(h=jn(r),e[5]=r,e[6]=h):h=e[6];let u;e[7]!==n||e[8]!==a.sourceOptions||e[9]!==l||e[10]!==f||e[11]!==h?(u=s.jsx(Ne,{ariaLabel:l,fallbackValue:"",id:"source-select",options:m,onNavigate:n,onSelectSessionSource:f,selectedValue:h}),e[7]=n,e[8]=a.sourceOptions,e[9]=l,e[10]=f,e[11]=h,e[12]=u):u=e[12];let p;e[13]!==r||e[14]!==i||e[15]!==n||e[16]!==o||e[17]!==a.repoOptions||e[18]!==a.repoRoot?(p=r?.kind!=="patch"?s.jsx(Ne,{ariaLabel:i("repoPath"),fallbackValue:a.repoRoot??"",id:"repo-select",options:a.repoOptions,onNavigate:n,onSelectSessionSource:g=>o(In(g,r)),selectedValue:Me(r)}):null,e[13]=r,e[14]=i,e[15]=n,e[16]=o,e[17]=a.repoOptions,e[18]=a.repoRoot,e[19]=p):p=e[19];let x;e[20]!==r||e[21]!==i||e[22]!==n||e[23]!==o||e[24]!==a||e[25]!==c?(x=s.jsx(Ji,{activeSessionSource:r,label:i,onNavigate:n,onSelectSessionSource:o,payload:a,transport:c}),e[20]=r,e[21]=i,e[22]=n,e[23]=o,e[24]=a,e[25]=c,e[26]=x):x=e[26];let d;return e[27]!==u||e[28]!==p||e[29]!==x?(d=s.jsxs("div",{className:"toolbar-left flex min-w-0 items-center gap-1.5",children:[u,p,x]}),e[27]=u,e[28]=p,e[29]=x,e[30]=d):d=e[30],d}function Ji(t){const e=B.c(29),{activeSessionSource:r,label:i,onNavigate:n,onSelectSessionSource:o,payload:a,transport:c}=t;if(r?.kind==="branch"&&c){const u=r.baseRef??"";let p,x,d;e[0]!==r.repoRoot||e[1]!==a.capabilityToken||e[2]!==u?(d={repoRoot:r.repoRoot,capabilityToken:a.capabilityToken,headRef:"HEAD",currentRef:u,currentReason:"",confidence:"high",aheadBehind:null,refsURL:"typed://branch-list",regenerateURLTemplate:"typed://branch-change/{ref}"},p=Ye,x=qe(d),e[0]=r.repoRoot,e[1]=a.capabilityToken,e[2]=u,e[3]=p,e[4]=x,e[5]=d):(p=e[3],x=e[4],d=e[5]);let g;e[6]!==r.repoRoot||e[7]!==o?(g=b=>o({kind:"branch",repoRoot:r.repoRoot,baseRef:b}),e[6]=r.repoRoot,e[7]=o,e[8]=g):g=e[8];let w;return e[9]!==p||e[10]!==i||e[11]!==n||e[12]!==x||e[13]!==g||e[14]!==c||e[15]!==d?(w=s.jsx(p,{label:i,onNavigate:n,onSelectBranchBase:g,picker:d,transport:c},x),e[9]=p,e[10]=i,e[11]=n,e[12]=x,e[13]=g,e[14]=c,e[15]=d,e[16]=w):w=e[16],w}let l;if(e[17]!==i||e[18]!==n||e[19]!==a||e[20]!==c){l=Symbol.for("react.early_return_sentinel");e:{const u=Qi(a);if(u){l=s.jsx(Ye,{label:i,onNavigate:n,picker:u,transport:c},qe(u));break e}}e[17]=i,e[18]=n,e[19]=a,e[20]=c,e[21]=l}else l=e[21];if(l!==Symbol.for("react.early_return_sentinel"))return l;let m;e[22]!==i?(m=i("branchBase"),e[22]=i,e[23]=m):m=e[23];const f=a.branchBaseRef??"";let h;return e[24]!==n||e[25]!==a.baseOptions||e[26]!==m||e[27]!==f?(h=s.jsx(Ne,{ariaLabel:m,fallbackValue:f,id:"base-select",options:a.baseOptions,onNavigate:n}),e[24]=n,e[25]=a.baseOptions,e[26]=m,e[27]=f,e[28]=h):h=e[28],h}function Qi(t){const e=t?.branchPicker;return Zi(e)?e:null}function Zi(t){return!!(t&&typeof t=="object"&&typeof t.refsURL=="string"&&t.refsURL!==""&&typeof t.regenerateURLTemplate=="string"&&t.regenerateURLTemplate!==""&&typeof t.currentRef=="string"&&typeof t.headRef=="string")}function Ne(t){const e=B.c(17),{ariaLabel:r,fallbackValue:i,id:n,onNavigate:o,onSelectSessionSource:a,options:c,selectedValue:l}=t;if(!Array.isArray(c)||c.length<2)return null;let m;e[0]!==c||e[1]!==l?(m=c.find(d=>d.value===l)??c.find(rn)??c.find(tn),e[0]=c,e[1]=l,e[2]=m):m=e[2];const f=m,h=f?.value??i;let u;e[3]!==i||e[4]!==o||e[5]!==a||e[6]!==c||e[7]!==f?.value?(u=d=>{const g=c.find(w=>w.value===d.currentTarget.value);if(Ie(g?.sessionSource)&&a){a(g.sessionSource);return}if(!g?.url){d.currentTarget.value=f?.value??i;return}o(g.url)},e[3]=i,e[4]=o,e[5]=a,e[6]=c,e[7]=f?.value,e[8]=u):u=e[8];let p;e[9]!==c?(p=c.map(en),e[9]=c,e[10]=p):p=e[10];let x;return e[11]!==r||e[12]!==n||e[13]!==h||e[14]!==u||e[15]!==p?(x=s.jsx("select",{id:n,"aria-label":r,value:h,title:r,onChange:u,children:p}),e[11]=r,e[12]=n,e[13]=h,e[14]=u,e[15]=p,e[16]=x):x=e[16],x}function en(t){return s.jsx("option",{value:t.value,disabled:t.disabled||!t.url&&!Ie(t.sessionSource),title:t.message,children:t.label},t.value)}function tn(t){return!t.disabled}function rn(t){return t.selected}function nn(t){const e=B.c(31),{items:r,label:i,onJump:n,onOpenSearch:o,searchOpen:a,selectedItemId:c}=t;if(r.length===0)return null;if(r.length>500){let x;e[0]!==i?(x=i("jumpToFile"),e[0]=i,e[1]=x):x=e[1];let d;e[2]!==i?(d=i("jumpToFile"),e[2]=i,e[3]=d):d=e[3];let g;e[4]!==i?(g=i("jumpToFile"),e[4]=i,e[5]=g):g=e[5];let w;return e[6]!==o||e[7]!==a||e[8]!==x||e[9]!==d||e[10]!==g?(w=s.jsx("button",{id:"jump-search-button",type:"button","aria-controls":"files-sidebar","aria-expanded":a,"aria-label":x,title:d,onClick:o,children:g}),e[6]=o,e[7]=a,e[8]=x,e[9]=d,e[10]=g,e[11]=w):w=e[11],w}let l;e[12]!==i?(l=i("jumpToFile"),e[12]=i,e[13]=l):l=e[13];let m;e[14]!==n?(m=x=>n(x.currentTarget.value),e[14]=n,e[15]=m):m=e[15];let f;e[16]!==i?(f=i("jumpToFile"),e[16]=i,e[17]=f):f=e[17];let h;e[18]!==f?(h=s.jsx("option",{value:"",children:f}),e[18]=f,e[19]=h):h=e[19];let u;if(e[20]!==r||e[21]!==i){let x;e[23]!==i?(x=d=>s.jsx("option",{value:d.id,children:pe(d.fileDiff,i("untitled"))},d.id),e[23]=i,e[24]=x):x=e[24],u=r.map(x),e[20]=r,e[21]=i,e[22]=u}else u=e[22];let p;return e[25]!==c||e[26]!==l||e[27]!==m||e[28]!==h||e[29]!==u?(p=s.jsxs("select",{id:"jump-select","aria-label":l,value:c,onChange:m,children:[h,u]}),e[25]=c,e[26]=l,e[27]=m,e[28]=h,e[29]=u,e[30]=p):p=e[30],p}function on(t){const e=B.c(137),{dispatch:r,externalURL:i,label:n,onCopyGitApply:o,onReload:a,onSetLayout:c,state:l}=t;let m;e[0]!==r||e[1]!==l.options?(m=F=>r({type:"set-option",key:F,value:!l.options[F]}),e[0]=r,e[1]=l.options,e[2]=m):m=e[2];const f=m;let h;e[3]!==n?(h=n("options"),e[3]=n,e[4]=h):h=e[4];let u;e[5]!==n?(u=n("refresh"),e[5]=n,e[6]=u):u=e[6];let p;e[7]!==a||e[8]!==u?(p=s.jsx(oe,{icon:"refresh",label:u,onClick:a}),e[7]=a,e[8]=u,e[9]=p):p=e[9];let x;e[10]!==n||e[11]!==l.options.wordWrap?(x=l.options.wordWrap?n("disableWordWrap"):n("enableWordWrap"),e[10]=n,e[11]=l.options.wordWrap,e[12]=x):x=e[12];let d;e[13]!==f?(d=()=>f("wordWrap"),e[13]=f,e[14]=d):d=e[14];let g;e[15]!==l.options.wordWrap||e[16]!==x||e[17]!==d?(g=s.jsx(oe,{checked:l.options.wordWrap,icon:"wrap",label:x,onClick:d}),e[15]=l.options.wordWrap,e[16]=x,e[17]=d,e[18]=g):g=e[18];const w=l.options.collapsed?"expand":"collapse";let b;e[19]!==n||e[20]!==l.options.collapsed?(b=l.options.collapsed?n("expandAllDiffs"):n("collapseAllDiffs"),e[19]=n,e[20]=l.options.collapsed,e[21]=b):b=e[21];let v;e[22]!==f?(v=()=>f("collapsed"),e[22]=f,e[23]=v):v=e[23];let y;e[24]!==l.options.collapsed||e[25]!==v||e[26]!==w||e[27]!==b?(y=s.jsx(oe,{checked:l.options.collapsed,icon:w,label:b,onClick:v}),e[24]=l.options.collapsed,e[25]=v,e[26]=w,e[27]=b,e[28]=y):y=e[28];let I;e[29]===Symbol.for("react.memo_cache_sentinel")?(I=s.jsx("div",{className:"menu-separator"}),e[29]=I):I=e[29];let M;e[30]!==n||e[31]!==l.options.layout?(M=l.options.layout==="split"?n("switchToUnifiedDiff"):n("switchToSplitDiff"),e[30]=n,e[31]=l.options.layout,e[32]=M):M=e[32];let L;e[33]!==c||e[34]!==l.options.layout?(L=()=>c(l.options.layout==="split"?"unified":"split"),e[33]=c,e[34]=l.options.layout,e[35]=L):L=e[35];let S;e[36]!==l.options.layout||e[37]!==M||e[38]!==L?(S=s.jsx(oe,{icon:l.options.layout,label:M,onClick:L}),e[36]=l.options.layout,e[37]=M,e[38]=L,e[39]=S):S=e[39];let k;e[40]!==i||e[41]!==n?(k=i?s.jsx(oe,{icon:"external",label:n("openSourceURL"),onClick:()=>window.open(i,"_blank","noreferrer")}):null,e[40]=i,e[41]=n,e[42]=k):k=e[42];let P;e[43]!==n||e[44]!==l.filesVisible?(P=l.filesVisible?n("hideFiles"):n("showFiles"),e[43]=n,e[44]=l.filesVisible,e[45]=P):P=e[45];let R;e[46]!==r||e[47]!==l.filesVisible?(R=()=>r({type:"set-files-visible",visible:!l.filesVisible}),e[46]=r,e[47]=l.filesVisible,e[48]=R):R=e[48];let D;e[49]!==l.filesVisible||e[50]!==P||e[51]!==R?(D=s.jsx(oe,{checked:l.filesVisible,icon:"files",label:P,onClick:R}),e[49]=l.filesVisible,e[50]=P,e[51]=R,e[52]=D):D=e[52];let z;e[53]!==n||e[54]!==l.options.expandUnchanged?(z=l.options.expandUnchanged?n("collapseUnchangedContext"):n("expandUnchangedContext"),e[53]=n,e[54]=l.options.expandUnchanged,e[55]=z):z=e[55];let T;e[56]!==f?(T=()=>f("expandUnchanged"),e[56]=f,e[57]=T):T=e[57];let A;e[58]!==l.options.expandUnchanged||e[59]!==z||e[60]!==T?(A=s.jsx(oe,{checked:l.options.expandUnchanged,icon:"document",label:z,onClick:T}),e[58]=l.options.expandUnchanged,e[59]=z,e[60]=T,e[61]=A):A=e[61];let V;e[62]!==n||e[63]!==l.options.showBackgrounds?(V=l.options.showBackgrounds?n("hideBackgrounds"):n("showBackgrounds"),e[62]=n,e[63]=l.options.showBackgrounds,e[64]=V):V=e[64];let U;e[65]!==f?(U=()=>f("showBackgrounds"),e[65]=f,e[66]=U):U=e[66];let O;e[67]!==l.options.showBackgrounds||e[68]!==V||e[69]!==U?(O=s.jsx(oe,{checked:l.options.showBackgrounds,icon:"background",label:V,onClick:U}),e[67]=l.options.showBackgrounds,e[68]=V,e[69]=U,e[70]=O):O=e[70];let G;e[71]!==n||e[72]!==l.options.lineNumbers?(G=l.options.lineNumbers?n("hideLineNumbers"):n("showLineNumbers"),e[71]=n,e[72]=l.options.lineNumbers,e[73]=G):G=e[73];let $;e[74]!==f?($=()=>f("lineNumbers"),e[74]=f,e[75]=$):$=e[75];let _;e[76]!==l.options.lineNumbers||e[77]!==G||e[78]!==$?(_=s.jsx(oe,{checked:l.options.lineNumbers,icon:"numbers",label:G,onClick:$}),e[76]=l.options.lineNumbers,e[77]=G,e[78]=$,e[79]=_):_=e[79];let H;e[80]!==n||e[81]!==l.options.wordDiffs?(H=l.options.wordDiffs?n("disableWordDiffs"):n("enableWordDiffs"),e[80]=n,e[81]=l.options.wordDiffs,e[82]=H):H=e[82];let N;e[83]!==f?(N=()=>f("wordDiffs"),e[83]=f,e[84]=N):N=e[84];let Y;e[85]!==l.options.wordDiffs||e[86]!==H||e[87]!==N?(Y=s.jsx(oe,{checked:l.options.wordDiffs,icon:"word",label:H,onClick:N}),e[85]=l.options.wordDiffs,e[86]=H,e[87]=N,e[88]=Y):Y=e[88];let X;e[89]===Symbol.for("react.memo_cache_sentinel")?(X=s.jsx(re,{name:"bars"}),e[89]=X):X=e[89];let j;e[90]!==n?(j=n("indicatorStyle"),e[90]=n,e[91]=j):j=e[91];let W;e[92]!==j?(W=s.jsx("span",{className:"menu-label",children:j}),e[92]=j,e[93]=W):W=e[93];let E;e[94]!==n?(E=n("bars"),e[94]=n,e[95]=E):E=e[95];let K;e[96]!==E?(K={value:"bars",icon:"bars",label:E},e[96]=E,e[97]=K):K=e[97];let J;e[98]!==n?(J=n("classic"),e[98]=n,e[99]=J):J=e[99];let se;e[100]!==J?(se={value:"classic",icon:"classic",label:J},e[100]=J,e[101]=se):se=e[101];let le;e[102]!==n?(le=n("none"),e[102]=n,e[103]=le):le=e[103];let Q;e[104]!==le?(Q={value:"none",icon:"eye",label:le},e[104]=le,e[105]=Q):Q=e[105];let ce;e[106]!==K||e[107]!==se||e[108]!==Q?(ce=[K,se,Q],e[106]=K,e[107]=se,e[108]=Q,e[109]=ce):ce=e[109];let de;e[110]!==r||e[111]!==l.options.diffIndicators||e[112]!==ce?(de=s.jsx("span",{className:"menu-segment-controls",children:ce.map(F=>s.jsx("button",{type:"button",className:"segment-button",title:F.label,"aria-label":F.label,"aria-pressed":l.options.diffIndicators===F.value,onClick:()=>r({type:"set-option",key:"diffIndicators",value:F.value}),children:s.jsx(re,{name:F.icon})},F.value))}),e[110]=r,e[111]=l.options.diffIndicators,e[112]=ce,e[113]=de):de=e[113];let Z;e[114]!==W||e[115]!==de?(Z=s.jsxs("div",{className:"menu-item menu-segment",children:[X,W,de]}),e[114]=W,e[115]=de,e[116]=Z):Z=e[116];let ne;e[117]===Symbol.for("react.memo_cache_sentinel")?(ne=s.jsx("div",{className:"menu-separator"}),e[117]=ne):ne=e[117];let ee;e[118]!==n?(ee=n("copyGitApplyCommand"),e[118]=n,e[119]=ee):ee=e[119];let te;e[120]!==o||e[121]!==ee?(te=s.jsx(oe,{icon:"clipboard",label:ee,onClick:o}),e[120]=o,e[121]=ee,e[122]=te):te=e[122];let fe;return e[123]!==y||e[124]!==S||e[125]!==k||e[126]!==D||e[127]!==h||e[128]!==A||e[129]!==O||e[130]!==_||e[131]!==Y||e[132]!==p||e[133]!==Z||e[134]!==te||e[135]!==g?(fe=s.jsxs("div",{id:"options-menu","aria-label":h,children:[p,g,y,I,S,k,D,A,O,_,Y,Z,ne,te]}),e[123]=y,e[124]=S,e[125]=k,e[126]=D,e[127]=h,e[128]=A,e[129]=O,e[130]=_,e[131]=Y,e[132]=p,e[133]=Z,e[134]=te,e[135]=g,e[136]=fe):fe=e[136],fe}function oe(t){const e=B.c(14),{checked:r,icon:i,label:n,onClick:o}=t,a=r??void 0;let c;e[0]!==i?(c=s.jsx(re,{name:i}),e[0]=i,e[1]=c):c=e[1];let l;e[2]!==n?(l=s.jsx("span",{className:"menu-label",children:n}),e[2]=n,e[3]=l):l=e[3];let m;e[4]!==r?(m=r?s.jsx(re,{name:"check"}):null,e[4]=r,e[5]=m):m=e[5];let f;e[6]!==m?(f=s.jsx("span",{className:"menu-check",children:m}),e[6]=m,e[7]=f):f=e[7];let h;return e[8]!==o||e[9]!==a||e[10]!==c||e[11]!==l||e[12]!==f?(h=s.jsxs("button",{type:"button",className:"menu-item","aria-pressed":a,onClick:o,children:[c,l,f]}),e[8]=o,e[9]=a,e[10]=c,e[11]=l,e[12]=f,e[13]=h):h=e[13],h}function an(t){const e=B.c(70),{commentEntries:r,commentLabels:i,dispatch:n,hasDraft:o,label:a,onSelectComment:c,onSelectItem:l,selectedPath:m,state:f}=t,h=C.useRef(null);let u;e[0]!==n?(u=N=>{const Y=h.current;if(!Y)return;const X=document.documentElement.clientWidth||window.innerWidth,j=Math.max(220,Math.min(520,Math.floor(X*.55))),W=Math.max(180,Math.min(j,Math.round(Y.startWidth-(N-Y.startX))));n({type:"set-files-width",width:W})},e[0]=n,e[1]=u):u=e[1];const p=u;let x;e[2]!==a?(x=a("changedFiles"),e[2]=a,e[3]=x):x=e[3];const d=!f.filesVisible,g=!f.filesVisible;let w;e[4]!==a?(w=a("files"),e[4]=a,e[5]=w):w=e[5];let b;e[6]!==f.filesWidth?(b=N=>{h.current={startWidth:f.filesWidth,startX:N.clientX},N.currentTarget.setPointerCapture(N.pointerId)},e[6]=f.filesWidth,e[7]=b):b=e[7];let v,y;e[8]!==p?(v=N=>p(N.clientX),y=N=>{p(N.clientX),h.current=null,N.currentTarget.releasePointerCapture(N.pointerId)},e[8]=p,e[9]=v,e[10]=y):(v=e[9],y=e[10]);let I;e[11]===Symbol.for("react.memo_cache_sentinel")?(I=()=>{h.current=null},e[11]=I):I=e[11];let M;e[12]!==n||e[13]!==f.filesWidth?(M=N=>{if(N.key!=="ArrowLeft"&&N.key!=="ArrowRight")return;N.preventDefault();const Y=N.key==="ArrowLeft"?20:-20;n({type:"set-files-width",width:Math.max(180,Math.min(520,f.filesWidth+Y))})},e[12]=n,e[13]=f.filesWidth,e[14]=M):M=e[14];let L;e[15]!==M||e[16]!==w||e[17]!==b||e[18]!==v||e[19]!==y?(L=s.jsx("button",{id:"files-resize-handle","aria-label":w,type:"button",tabIndex:0,onPointerDown:b,onPointerMove:v,onPointerUp:y,onPointerCancel:I,onKeyDown:M}),e[15]=M,e[16]=w,e[17]=b,e[18]=v,e[19]=y,e[20]=L):L=e[20];let S;e[21]!==a?(S=a("files"),e[21]=a,e[22]=S):S=e[22];let k;e[23]!==S?(k=s.jsx("span",{children:S}),e[23]=S,e[24]=k):k=e[24];const P=f.treeSource?.pathCount??0;let R;e[25]!==P?(R=s.jsx("span",{id:"files-count",children:P}),e[25]=P,e[26]=R):R=e[26];let D;e[27]!==k||e[28]!==R?(D=s.jsxs("span",{id:"files-title",children:[k,R]}),e[27]=k,e[28]=R,e[29]=D):D=e[29];let z;e[30]!==a||e[31]!==f.fileSearchOpen?(z=f.fileSearchOpen?a("hideFileSearch"):a("showFileSearch"),e[30]=a,e[31]=f.fileSearchOpen,e[32]=z):z=e[32];let T;e[33]!==a||e[34]!==f.fileSearchOpen?(T=f.fileSearchOpen?a("hideFileSearch"):a("showFileSearch"),e[33]=a,e[34]=f.fileSearchOpen,e[35]=T):T=e[35];const A=!f.treeSource;let V;e[36]!==n||e[37]!==f.fileSearchOpen?(V=()=>f.fileSearchOpen?Ue(n):n({type:"set-file-search-open",open:!0}),e[36]=n,e[37]=f.fileSearchOpen,e[38]=V):V=e[38];let U;e[39]===Symbol.for("react.memo_cache_sentinel")?(U=s.jsx(re,{name:"search"}),e[39]=U):U=e[39];let O;e[40]!==f.fileSearchOpen||e[41]!==z||e[42]!==T||e[43]!==A||e[44]!==V?(O=s.jsx("span",{id:"files-header-actions",children:s.jsx("button",{id:"file-search-toggle",type:"button",title:z,"aria-label":T,"aria-pressed":f.fileSearchOpen,disabled:A,onClick:V,children:U})}),e[40]=f.fileSearchOpen,e[41]=z,e[42]=T,e[43]=A,e[44]=V,e[45]=O):O=e[45];let G;e[46]!==D||e[47]!==O?(G=s.jsxs("div",{id:"files-header",children:[D,O]}),e[46]=D,e[47]=O,e[48]=G):G=e[48];let $;e[49]!==a||e[50]!==l||e[51]!==m||e[52]!==f.fileSearchOpen||e[53]!==f.fileSearchRequest||e[54]!==f.status||e[55]!==f.treeSource?($=s.jsx("div",{id:"file-list",children:f.treeSource?s.jsx(sn,{fileSearchOpen:f.fileSearchOpen,fileSearchRequest:f.fileSearchRequest,label:a,onSelectItem:l,selectedPath:m,source:f.treeSource}):f.status.loading||f.status.pending?s.jsx(cn,{}):s.jsx("div",{className:"visually-hidden",children:f.status.message})}),e[49]=a,e[50]=l,e[51]=m,e[52]=f.fileSearchOpen,e[53]=f.fileSearchRequest,e[54]=f.status,e[55]=f.treeSource,e[56]=$):$=e[56];let _;e[57]!==r||e[58]!==i||e[59]!==o||e[60]!==c?(_=s.jsx(Hr,{entries:r,hasDraft:o,labels:i,onSelect:c}),e[57]=r,e[58]=i,e[59]=o,e[60]=c,e[61]=_):_=e[61];let H;return e[62]!==L||e[63]!==x||e[64]!==G||e[65]!==$||e[66]!==_||e[67]!==d||e[68]!==g?(H=s.jsxs("aside",{id:"files-sidebar","aria-label":x,"aria-hidden":d,inert:g,children:[L,G,$,_]}),e[62]=L,e[63]=x,e[64]=G,e[65]=$,e[66]=_,e[67]=d,e[68]=g,e[69]=H):H=e[69],H}function sn(t){const e=B.c(18),{fileSearchOpen:r,fileSearchRequest:i,label:n,onSelectItem:o,selectedPath:a,source:c}=t;let l;e[0]!==n||e[1]!==o||e[2]!==c?(l={label:n,onSelectItem:o,source:c},e[0]=n,e[1]=o,e[2]=c,e[3]=l):l=e[3];const m=Ve(l);let f;e[4]!==c.paths?(f=()=>Be(c.paths),e[4]=c.paths,e[5]=f):f=e[5];const[h]=C.useState(f);let u;e[6]!==a?(u=a?[a]:[],e[6]=a,e[7]=u):u=e[7];let p;e[8]===Symbol.for("react.memo_cache_sentinel")?(p=Mt(),e[8]=p):p=e[8];const x=c.gitStatus;let d;e[9]===Symbol.for("react.memo_cache_sentinel")?(d=ui(),e[9]=d):d=e[9];let g;e[10]!==h||e[11]!==m||e[12]!==u||e[13]!==x?(g={flattenEmptyDirectories:!1,id:"cmux-diff-file-tree",initialExpansion:"open",initialSelectedPaths:u,initialVisibleRowCount:p,itemHeight:24,overscan:12,preparedInput:h,search:!0,searchBlurBehavior:"retain",stickyFolders:!0,gitStatus:x,sort:ln,unsafeCSS:d,onSelectionChange(y){const I=y[y.length-1],M=m.current.source.pathToItemId.get(I);M&&m.current.onSelectItem(M)}},e[10]=h,e[11]=m,e[12]=u,e[13]=x,e[14]=g):g=e[14];const{model:w}=Dt(g);wn(w,c),yn(w,r,i),kn(w,a);let b;e[15]===Symbol.for("react.memo_cache_sentinel")?(b={height:"100%"},e[15]=b):b=e[15];let v;return e[16]!==w?(v=s.jsx(At,{model:w,style:b}),e[16]=w,e[17]=v):v=e[17],v}function ln(){return 0}function cn(){const t=B.c(1);let e;return t[0]===Symbol.for("react.memo_cache_sentinel")?(e=s.jsx("div",{className:"diff-loading-placeholder","aria-hidden":"true",children:Ri.map(dn)}),t[0]=e):e=t[0],e}function dn(t,e){return s.jsxs("div",{className:"grid h-6 grid-cols-[16px_minmax(0,1fr)_44px] items-center gap-2 rounded-[5px] px-[7px]",children:[s.jsx("span",{className:"size-4 rounded-[5px] border border-[color-mix(in_lab,var(--cmux-diff-fg)_18%,transparent)]"}),s.jsx("span",{className:"h-[11px] rounded bg-[var(--cmux-diff-muted-bg)]",style:{width:t}}),s.jsx("span",{className:"h-[11px] justify-self-end rounded bg-[var(--cmux-diff-muted-bg)] opacity-70",style:{width:e%2===0?"34px":"24px"}})]},`${t}-${e}`)}function fn(){const t=B.c(2);let e;t[0]===Symbol.for("react.memo_cache_sentinel")?(e=s.jsxs("div",{className:"mb-3 grid h-9 grid-cols-[72px_minmax(0,1fr)_96px] items-center gap-3 rounded-md bg-[color-mix(in_lab,var(--cmux-diff-fg)_5%,transparent)] px-3",children:[s.jsx("span",{className:"h-3 rounded bg-[var(--cmux-diff-muted-bg)]"}),s.jsx("span",{className:"h-3 w-2/5 rounded bg-[var(--cmux-diff-muted-bg)]"}),s.jsx("span",{className:"h-3 rounded bg-[var(--cmux-diff-muted-bg)] opacity-70"})]}),t[0]=e):e=t[0];let r;return t[1]===Symbol.for("react.memo_cache_sentinel")?(r=s.jsxs("div",{className:"diff-loading-placeholder mx-3.5 mt-3.5 border-t border-[var(--cmux-diff-border)] pt-3","aria-hidden":"true",children:[e,s.jsx("div",{className:"space-y-[13px] px-3 py-1",children:Li.map(un)})]}),t[1]=r):r=t[1],r}function un(t,e){return s.jsxs("div",{className:"grid grid-cols-[42px_minmax(0,1fr)] items-center gap-4",children:[s.jsx("span",{className:"h-px bg-[color-mix(in_lab,var(--cmux-diff-fg)_10%,transparent)]"}),s.jsx("span",{className:"h-3 rounded bg-[var(--cmux-diff-muted-bg)]",style:{width:t}})]},`${t}-${e}`)}function pn(t){const e=B.c(16),{label:r,status:i}=t;if(!i.loading&&!i.pending&&!i.statusOnly&&!i.error)return null;const n=i.error?"true":"false",o=i.pending?"true":"false";let a;e[0]===Symbol.for("react.memo_cache_sentinel")?(a=s.jsx("span",{id:"status-icon","aria-hidden":"true"}),e[0]=a):a=e[0];let c;e[1]!==r||e[2]!==i.message?(c=i.message||r("loadingDiff"),e[1]=r,e[2]=i.message,e[3]=c):c=e[3];let l;e[4]!==c?(l=s.jsx("span",{id:"status-text",children:c}),e[4]=c,e[5]=l):l=e[5];let m;e[6]!==n||e[7]!==o||e[8]!==l?(m=s.jsxs("div",{id:"status","data-error":n,"data-pending":o,children:[a,l]}),e[6]=n,e[7]=o,e[8]=l,e[9]=m):m=e[9];let f;e[10]!==i.loading||e[11]!==i.pending?(f=i.loading||i.pending?s.jsx(fn,{}):null,e[10]=i.loading,e[11]=i.pending,e[12]=f):f=e[12];let h;return e[13]!==m||e[14]!==f?(h=s.jsxs("div",{id:"loading-layer","aria-live":"polite",children:[m,f]}),e[13]=m,e[14]=f,e[15]=h):h=e[15],h}function Ve(t){const e=B.c(3),r=C.useRef(t);let i,n;return e[0]!==t?(i=()=>{r.current=t},n=[t],e[0]=t,e[1]=i,e[2]=n):(i=e[1],n=e[2]),C.useEffect(i,n),r}function mn(t,e){const r=B.c(5),i=zt(),n=C.useRef(null);let o,a;r[0]!==e||r[1]!==t||r[2]!==i?(o=()=>{if(!i||gn(n.current,t))return;let c=!0;return n.current=t,i.setRenderOptions(t).then(()=>{c&&e.current?.getInstance()?.render(!0)}).catch(hn),()=>{c=!1}},a=[e,t,i],r[0]=e,r[1]=t,r[2]=i,r[3]=o,r[4]=a):(o=r[3],a=r[4]),C.useEffect(o,a)}function hn(t){return console.warn("cmux diff worker render options update failed",t)}function gn(t,e){return t?.lineDiffType===e.lineDiffType&&xn(t?.langs,e.langs)&&t?.maxLineDiffLength===e.maxLineDiffLength&&t?.preferredHighlighter===e.preferredHighlighter&&bn(t?.theme,e.theme)&&t?.tokenizeMaxLineLength===e.tokenizeMaxLineLength&&t?.useTokenTransformer===e.useTokenTransformer}function xn(t,e){return t===e?!0:t==null||e==null||t.length!==e.length?!1:t.every((r,i)=>r===e[i])}function bn(t,e){return t===e?!0:typeof t!="object"||t==null||typeof e!="object"||e==null?!1:t.dark===e.dark&&t.light===e.light}function wn(t,e){const r=B.c(4),i=C.useRef(null);let n,o;r[0]!==t||r[1]!==e?(n=()=>{const a=i.current;i.current=e;const c=ni(a,e,e.paths);let l=c.kind==="append"?c.requiresFullGitStatus:!1;if(c.kind==="append"){if(c.addedPaths.length>0)try{t.batch(c.addedPaths.map(vn)),l=!c.sourceFollowsPrevious}catch{const m=Be(e.paths);t.resetPaths(e.paths,{preparedInput:m}),l=!0}}else{const m=Be(e.paths);t.resetPaths(e.paths,{preparedInput:m}),l=!0}oi(t,e,l)},o=[t,e],r[0]=t,r[1]=e,r[2]=n,r[3]=o):(n=r[2],o=r[3]),C.useEffect(n,o)}function vn(t){return{type:"add",path:t}}function yn(t,e,r){const i=B.c(7);let n;i[0]!==e||i[1]!==t?(n=()=>{if(e){const a=t.isSearchOpen();if(t.openSearch(a?t.getSearchValue():""),a){const c=t.getFileTreeContainer();(c?.shadowRoot??c?.getRootNode())?.querySelector("[data-file-tree-search-input]")?.focus()}}else t.closeSearch()},i[0]=e,i[1]=t,i[2]=n):n=i[2];let o;i[3]!==e||i[4]!==r||i[5]!==t?(o=[e,r,t],i[3]=e,i[4]=r,i[5]=t,i[6]=o):o=i[6],C.useEffect(n,o)}function kn(t,e){const r=B.c(4);let i,n;r[0]!==t||r[1]!==e?(i=()=>{ai(t,e)},n=[t,e],r[0]=t,r[1]=e,r[2]=i,r[3]=n):(i=r[2],n=r[3]),C.useEffect(i,n)}function Sn(t,e,r,i,n,o,a,c,l,m){C.useEffect(()=>{if(Ln(t.payload,e,l))return;const f=t.payload??{},h=De(f.appearance);for(const d of[h.themes.light,h.themes.dark])d.name&&!lt.has(d.name)&&(Bt(d.name,()=>Promise.resolve(pi(d))),lt.add(d.name));let u=!1;const p=new AbortController,x=()=>{c()};return window.addEventListener("pagehide",x),(async()=>{try{let d=f.patchURL;const g=Ge(f,e,l);if(g){const b=await e.request({method:"sessionOpen",params:g});if(b.type!=="sessionOpened")throw new ue("invalidResponse","Diff transport did not open a session");const v={sessionId:b.value.sessionId,capabilityToken:String(f.capabilityToken??"")};if(u){await It(e,v);return}a.current=v,m(b.value.source),d=b.value.patch.id}if(u||!d)return;o(d);const w=[];i({type:"set-status",status:ie(r("parsingDiff"),{loading:!0})}),await br({getCollapsed:()=>n.current.options.collapsed,initialFileTreeRowCount:Mt(),label:r,signal:p.signal,onBatch:b=>{u||(w.push(...b),i({type:"append-items",items:b}))},onComplete:b=>{if(u)return;i({type:"set-metrics",metrics:b});const v=w;if(v.length===0){const M=typeof f.emptyMessage=="string"?f.emptyMessage:r("noFileDiffs");i({type:"set-status",status:ie(M,{error:!1,loading:!1,statusOnly:!0})});return}const y=Array.from(new Set([h.theme?.light,h.theme?.dark].filter(Boolean))),I=Array.from(new Set(v.flatMap(M=>{const L=M.fileDiff??{};return yt(pe(L,""),L.lang,L,Ee)})));Et({themes:y,langs:I.length>0?I:["text"]}).catch(M=>console.warn("cmux diff highlighter preload failed",M))},onMetrics:b=>{u||i({type:"set-metrics",metrics:b})},onRename:b=>{u||i({type:"rename-item",oldId:b.oldId,newId:b.newId})},onTreeSource:b=>{u||i({type:"set-tree-source",source:b})},parsePatchFiles:Nt,patchURL:d,processFile:_t})}catch(d){if(u)return;const g=d instanceof ue&&d.code==="emptyDiff";g||console.error("cmux diff viewer render failed",d);const w=typeof f.emptyMessage=="string"?f.emptyMessage:r("noFileDiffs");i({type:"set-status",status:ie(g?w:r("renderFailed"),{error:!g,loading:!1,statusOnly:!0})})}})(),()=>{u=!0,p.abort(),window.removeEventListener("pagehide",x),c()}},[a,c,t,i,r,n,o,m,l,e])}function It(t,e){return t.request({method:"sessionClose",params:e}).then(()=>{},()=>{})}function Ge(t,e,r){if(!e||typeof t?.capabilityToken!="string")return null;const i=r??t.sessionSource;return Ie(i)?{source:i,capabilityToken:t.capabilityToken}:null}function Ie(t){if(!t||typeof t!="object"||typeof t.kind!="string")return!1;const e=t;return e.kind==="patch"?typeof e.path=="string":e.kind==="unstaged"||e.kind==="staged"?typeof e.repoRoot=="string":e.kind==="branch"&&typeof e.repoRoot=="string"&&(e.baseRef==null||typeof e.baseRef=="string")}function jn(t){return t?.kind??null}function Me(t){return t&&"repoRoot"in t?t.repoRoot:null}function Cn(t,e){if(t.kind==="patch")return t;const r=Me(e);return r?t.kind==="branch"?t.repoRoot===r?{...t,repoRoot:r}:{kind:"branch",repoRoot:r}:{...t,repoRoot:r}:t}function In(t,e){const r=Me(t);return!r||!e||e.kind==="patch"?t:e.kind==="branch"?e.repoRoot===r?{...e,repoRoot:r}:{kind:"branch",repoRoot:r}:{...e,repoRoot:r}}function Mn(t){const e=t.fileDiff;if(e==null)return;const r=vt(pe(e,""),e.lang,Ee);e.lang=r}function Pn(t){const e=t.fileDiff;return e==null?[]:yt(pe(e,""),e.lang,e,Ee)}function Rn(t,e){const r=new Set(t);for(const i of e)i.trim().length>0&&r.add(i);return Array.from(r)}function Ln(t,e=null,r=null){return t?.pendingReplacement===!0?Ge(t,e,r)==null:typeof t?.statusMessage=="string"&&t.statusMessage.length>0}function Tn(t,e,r,i){const n=B.c(6),o=C.useRef(!1);let a,c;n[0]!==r||n[1]!==e||n[2]!==t||n[3]!==i?(a=()=>{if(!o.current){if(o.current=!0,t.pendingReplacement===!0){if(r({type:"set-status",status:ie(t.statusMessage??e("loadingDiff"),{loading:!0,pending:!0})}),Ge(t,i)||window.location.protocol==="cmux-diff-viewer:")return;fetch("/__cmux_diff_viewer_wait"+window.location.pathname,{cache:"no-store"}).then(Fn).catch(l=>{document.documentElement.dataset.cmuxDiffWait="failed",r({type:"set-status",status:ie(e("renderFailed"),{error:!0,loading:!1,statusOnly:!0})}),console.warn("cmux diff viewer deferred load failed",l)});return}typeof t.statusMessage=="string"&&t.statusMessage.length>0&&r({type:"set-status",status:ie(t.statusMessage,{error:t.statusIsError===!0,loading:!1,statusOnly:!0})})}},c=[r,e,t,i],n[0]=r,n[1]=e,n[2]=t,n[3]=i,n[4]=a,n[5]=c):(a=n[4],c=n[5]),C.useEffect(a,c)}async function Fn(t){if(!t.ok)throw new Error("replacement failed");(await t.text()).includes('data-cmux-diff-pending="true"')||window.location.reload()}function Bn(t){const e=B.c(10);let r;e[0]!==t.filesVisible||e[1]!==t.items||e[2]!==t.metrics||e[3]!==t.options.diffIndicators||e[4]!==t.options.layout||e[5]!==t.options.wordWrap||e[6]!==t.status?(r=()=>{document.body.dataset.filesHidden=t.filesVisible?"false":"true",document.body.dataset.loading=t.status.loading?"true":"false",document.documentElement.dataset.layout=t.options.layout,document.documentElement.dataset.wordWrap=String(t.options.wordWrap),document.documentElement.dataset.diffIndicators=t.options.diffIndicators,t.metrics&&(document.body.dataset.streamFileCount=String(t.metrics.fileCount??t.items.length),document.body.dataset.streamRenderableFileCount=String(t.metrics.renderableFileCount??t.items.length),document.body.dataset.streamFlushCount=String(t.metrics.flushCount??0),document.body.dataset.streamMaxBatchSize=String(t.metrics.maxBatchSize??0),document.body.dataset.streamTreeRefreshCount=String(t.metrics.treeRefreshCount??0),Number.isFinite(t.metrics.completedAt)&&t.metrics.completedAt>0&&(document.body.dataset.streamElapsedMs=String(Math.round(t.metrics.completedAt-t.metrics.startedAt)))),Ce(t.status)},e[0]=t.filesVisible,e[1]=t.items,e[2]=t.metrics,e[3]=t.options.diffIndicators,e[4]=t.options.layout,e[5]=t.options.wordWrap,e[6]=t.status,e[7]=r):r=e[7];let i;e[8]!==t?(i=[t],e[8]=t,e[9]=i):i=e[9],C.useEffect(r,i)}function _n(t,e,r){const i=B.c(5);let n,o;i[0]!==e||i[1]!==r||i[2]!==t?(n=()=>{window.__cmuxPerformDiffViewerNavigationAction=c=>{const l=t.current;if(l&&CmuxViewerNavigation.performAction(c,l))return!0;switch(c){case"diffViewerOpenFileSearch":return e({type:"request-file-search"}),!0;case"diffViewerNextFile":return l&&CmuxViewerNavigation.resetSmoothTarget(l),r(1),!0;case"diffViewerPreviousFile":return l&&CmuxViewerNavigation.resetSmoothTarget(l),r(-1),!0}return!1},document.documentElement.dataset.cmuxViewerNavigationReady="true",document.dispatchEvent(new window.Event("cmux-diff-viewer-navigation-readiness-change"));const a=CmuxViewerNavigation.installManualInputReset({target:document,getScroller:()=>t.current});return()=>{delete window.__cmuxPerformDiffViewerNavigationAction,delete document.documentElement.dataset.cmuxViewerNavigationReady,document.dispatchEvent(new window.Event("cmux-diff-viewer-navigation-readiness-change")),a()}},o=[e,r,t],i[0]=e,i[1]=r,i[2]=t,i[3]=n,i[4]=o):(n=i[3],o=i[4]),C.useEffect(n,o)}function Nn(t,e){const r=B.c(4);let i,n;r[0]!==e||r[1]!==t?(i=()=>{if(!t)return;const o=c=>{c.target instanceof Element&&c.target.closest("#toolbar")||e({type:"set-options-open",open:!1})},a=c=>{c.key==="Escape"&&e({type:"set-options-open",open:!1})};return document.addEventListener("click",o),document.addEventListener("keydown",a),()=>{document.removeEventListener("click",o),document.removeEventListener("keydown",a)}},n=[e,t],r[0]=e,r[1]=t,r[2]=i,r[3]=n):(i=r[2],n=r[3]),C.useEffect(i,n)}function Ue(t,e=document){t({type:"set-file-search-open",open:!1}),(e.getElementById("jump-search-button")??e.getElementById("jump-select"))?.focus()}function En(t,e){return t==="Escape"&&e}function Dn(t,e){const r=B.c(4);let i,n;r[0]!==e||r[1]!==t?(i=()=>{if(!t)return;const o=a=>{En(a.key,window.matchMedia("(max-width: 520px)").matches)&&(a.preventDefault(),Ue(e))};return document.addEventListener("keydown",o),()=>document.removeEventListener("keydown",o)},n=[e,t],r[0]=e,r[1]=t,r[2]=i,r[3]=n):(i=r[2],n=r[3]),C.useEffect(i,n)}function zn(t){const e=C.useRef(void 0);return e.current===void 0&&(e.current=yi(t)),C.useEffect(()=>{const r=e.current;return()=>r?.close()},[]),e.current}function An(t,e){return e.some(r=>r.id===t)?t:e[0]?.id??""}function On(t,e,r){if(e.length===0)return"";const i=e.findIndex(o=>o.id===t);if(i<0)return r>0?e[0].id:e[e.length-1].id;const n=i+r;return n>=0&&n0?0:-1;for(;i<=n;){const a=Math.floor((i+n)/2),c=r(t[a].id);c!=null&&c<=e+1?(o=a,i=a+1):n=a-1}return o>=0?t[o].id:""}function Mt(){const t=window.visualViewport?.height??window.innerHeight;return!Number.isFinite(t)||t<=0?25:Math.min(96,Math.max(25,Math.ceil(t/24)))}const Wn=`@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-rotate-x:initial;--tw-rotate-y:initial;--tw-rotate-z:initial;--tw-skew-x:initial;--tw-skew-y:initial;--tw-space-y-reverse:0;--tw-border-style:solid;--tw-leading:initial;--tw-font-weight:initial;--tw-ordinal:initial;--tw-slashed-zero:initial;--tw-numeric-figure:initial;--tw-numeric-spacing:initial;--tw-numeric-fraction:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial;--tw-backdrop-blur:initial;--tw-backdrop-brightness:initial;--tw-backdrop-contrast:initial;--tw-backdrop-grayscale:initial;--tw-backdrop-hue-rotate:initial;--tw-backdrop-invert:initial;--tw-backdrop-opacity:initial;--tw-backdrop-saturate:initial;--tw-backdrop-sepia:initial;--tw-duration:initial;--tw-ease:initial;--tw-outline-style:solid}}}@layer theme{:root,:host{--font-sans:ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";--font-mono:ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;--spacing:.25rem;--text-xs:.75rem;--text-xs--line-height:calc(1 / .75);--text-sm:.875rem;--text-sm--line-height:calc(1.25 / .875);--text-base:1rem;--text-base--line-height: 1.5 ;--font-weight-medium:500;--radius-md:.375rem;--radius-lg:.5rem;--radius-xl:.75rem;--radius-2xl:1rem;--radius-3xl:1.5rem;--shadow-xl:0 20px 25px -5px #0000001a, 0 8px 10px -6px #0000001a;--ease-out:cubic-bezier(0, 0, .2, 1);--blur-sm:8px;--blur-lg:16px;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4, 0, .2, 1);--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono)}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;tab-size:4;line-height:1.5;font-family:var(--default-font-family,ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab,red,red)){::placeholder{color:color-mix(in oklab,currentcolor 50%,transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){appearance:button}::file-selector-button{appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}}@layer components;@layer utilities{.\\@container{container-type:inline-size}.pointer-events-auto{pointer-events:auto}.pointer-events-none{pointer-events:none}.collapse{visibility:collapse}.invisible{visibility:hidden}.visible{visibility:visible}.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.static{position:static}.sticky{position:sticky}.inset-x-0{inset-inline:calc(var(--spacing) * 0)}.top-0{top:calc(var(--spacing) * 0)}.top-1\\/2{top:50%}.right-2\\.5{right:calc(var(--spacing) * 2.5)}.bottom-0{bottom:calc(var(--spacing) * 0)}.bottom-\\[calc\\(100\\%\\+6px\\)\\]{bottom:calc(100% + 6px)}.bottom-full{bottom:100%}.left-0{left:calc(var(--spacing) * 0)}.z-10{z-index:10}.z-20{z-index:20}.z-50{z-index:50}.container{width:100%}@media(min-width:40rem){.container{max-width:40rem}}@media(min-width:48rem){.container{max-width:48rem}}@media(min-width:64rem){.container{max-width:64rem}}@media(min-width:80rem){.container{max-width:80rem}}@media(min-width:96rem){.container{max-width:96rem}}.m-px{margin:1px}.mx-3\\.5{margin-inline:calc(var(--spacing) * 3.5)}.ms-1{margin-inline-start:calc(var(--spacing) * 1)}.mt-1\\.5{margin-top:calc(var(--spacing) * 1.5)}.mt-3\\.5{margin-top:calc(var(--spacing) * 3.5)}.mr-1{margin-right:calc(var(--spacing) * 1)}.mr-\\[3px\\]{margin-right:3px}.mb-1{margin-bottom:calc(var(--spacing) * 1)}.mb-2{margin-bottom:calc(var(--spacing) * 2)}.mb-3{margin-bottom:calc(var(--spacing) * 3)}.mb-px{margin-bottom:1px}.ml-1\\.5{margin-left:calc(var(--spacing) * 1.5)}.ml-auto{margin-left:auto}.box-border{box-sizing:border-box}.block{display:block}.contents{display:contents}.flex{display:flex}.grid{display:grid}.hidden{display:none}.inline{display:inline}.inline-block{display:inline-block}.inline-flex{display:inline-flex}.table{display:table}.aspect-square{aspect-ratio:1}.size-4{width:calc(var(--spacing) * 4);height:calc(var(--spacing) * 4)}.size-16{width:calc(var(--spacing) * 16);height:calc(var(--spacing) * 16)}.size-\\[22px\\]{width:22px;height:22px}.\\!h-auto{height:auto!important}.h-0{height:calc(var(--spacing) * 0)}.h-3{height:calc(var(--spacing) * 3)}.h-4{height:calc(var(--spacing) * 4)}.h-5{height:calc(var(--spacing) * 5)}.h-6{height:calc(var(--spacing) * 6)}.h-8{height:calc(var(--spacing) * 8)}.h-9{height:calc(var(--spacing) * 9)}.h-\\[1lh\\]{height:1lh}.h-\\[1px\\]{height:1px}.h-\\[11px\\]{height:11px}.h-auto{height:auto}.h-full{height:100%}.h-px{height:1px}.max-h-\\[25dvh\\]{max-height:25dvh}.max-h-\\[140px\\]{max-height:140px}.max-h-none{max-height:none}.min-h-0{min-height:calc(var(--spacing) * 0)}.min-h-\\[1\\.25rem\\]{min-height:1.25rem}.w-2\\/5{width:40%}.w-3{width:calc(var(--spacing) * 3)}.w-4{width:calc(var(--spacing) * 4)}.w-7{width:calc(var(--spacing) * 7)}.w-52{width:calc(var(--spacing) * 52)}.w-fit{width:fit-content}.w-full{width:100%}.w-max{width:max-content}.w-px{width:1px}.max-w-16{max-width:calc(var(--spacing) * 16)}.max-w-20{max-width:calc(var(--spacing) * 20)}.max-w-40{max-width:calc(var(--spacing) * 40)}.max-w-\\[60\\%\\]{max-width:60%}.max-w-\\[77\\%\\]{max-width:77%}.max-w-\\[320px\\]{max-width:320px}.max-w-full{max-width:100%}.max-w-none{max-width:none}.min-w-0{min-width:calc(var(--spacing) * 0)}.min-w-56{min-width:calc(var(--spacing) * 56)}.min-w-max{min-width:max-content}.flex-1{flex:1}.flex-none{flex:none}.flex-shrink{flex-shrink:1}.flex-shrink-0{flex-shrink:0}.shrink{flex-shrink:1}.shrink-0{flex-shrink:0}.flex-grow{flex-grow:1}.-translate-y-1\\/2{--tw-translate-y: -50% ;translate:var(--tw-translate-x) var(--tw-translate-y)}.rotate-90{rotate:90deg}.rotate-180{rotate:180deg}.transform{transform:var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,)}.cursor-default{cursor:default}.cursor-pointer{cursor:pointer}.resize{resize:both}.grid-cols-\\[16px_minmax\\(0\\,1fr\\)_44px\\]{grid-template-columns:16px minmax(0,1fr) 44px}.grid-cols-\\[42px_minmax\\(0\\,1fr\\)\\]{grid-template-columns:42px minmax(0,1fr)}.grid-cols-\\[72px_minmax\\(0\\,1fr\\)_96px\\]{grid-template-columns:72px minmax(0,1fr) 96px}.grid-cols-\\[auto_minmax\\(0\\,1fr\\)_auto\\]{grid-template-columns:auto minmax(0,1fr) auto}.grid-cols-\\[minmax\\(0\\,auto\\)_auto_minmax\\(0\\,1fr\\)\\]{grid-template-columns:minmax(0,auto) auto minmax(0,1fr)}.flex-col{flex-direction:column}.flex-row-reverse{flex-direction:row-reverse}.flex-wrap{flex-wrap:wrap}.items-center{align-items:center}.items-end{align-items:flex-end}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.justify-end{justify-content:flex-end}.justify-start{justify-content:flex-start}.gap-0\\.5{gap:calc(var(--spacing) * .5)}.gap-1{gap:calc(var(--spacing) * 1)}.gap-1\\.5{gap:calc(var(--spacing) * 1.5)}.gap-2{gap:calc(var(--spacing) * 2)}.gap-3{gap:calc(var(--spacing) * 3)}.gap-4{gap:calc(var(--spacing) * 4)}.gap-\\[5px\\]{gap:5px}:where(.space-y-\\[13px\\]>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(13px * var(--tw-space-y-reverse));margin-block-end:calc(13px * calc(1 - var(--tw-space-y-reverse)))}.self-start{align-self:flex-start}.justify-self-end{justify-self:flex-end}.truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.overflow-clip{overflow:clip}.overflow-hidden{overflow:hidden}.overflow-visible{overflow:visible}.overflow-x-auto{overflow-x:auto}.overflow-y-auto{overflow-y:auto}.rounded{border-radius:.25rem}.rounded-2xl{border-radius:var(--radius-2xl)}.rounded-3xl{border-radius:var(--radius-3xl)}.rounded-\\[5px\\]{border-radius:5px}.rounded-full{border-radius:3.40282e38px}.rounded-lg{border-radius:var(--radius-lg)}.rounded-md{border-radius:var(--radius-md)}.rounded-xl{border-radius:var(--radius-xl)}.border{border-style:var(--tw-border-style);border-width:1px}.border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.border-\\[color-mix\\(in_lab\\,var\\(--cmux-diff-fg\\)_18\\%\\,transparent\\)\\]{border-color:var(--cmux-diff-fg)}@supports (color:color-mix(in lab,red,red)){.border-\\[color-mix\\(in_lab\\,var\\(--cmux-diff-fg\\)_18\\%\\,transparent\\)\\]{border-color:color-mix(in lab,var(--cmux-diff-fg) 18%,transparent)}}.border-\\[color\\:var\\(--gray-0\\)\\]{border-color:var(--gray-0)}.border-\\[var\\(--cmux-diff-border\\)\\]{border-color:var(--cmux-diff-border)}.border-transparent{border-color:#0000}.bg-\\[color-mix\\(in_lab\\,var\\(--cmux-diff-fg\\)_5\\%\\,transparent\\)\\]{background-color:var(--cmux-diff-fg)}@supports (color:color-mix(in lab,red,red)){.bg-\\[color-mix\\(in_lab\\,var\\(--cmux-diff-fg\\)_5\\%\\,transparent\\)\\]{background-color:color-mix(in lab,var(--cmux-diff-fg) 5%,transparent)}}.bg-\\[color-mix\\(in_lab\\,var\\(--cmux-diff-fg\\)_10\\%\\,transparent\\)\\]{background-color:var(--cmux-diff-fg)}@supports (color:color-mix(in lab,red,red)){.bg-\\[color-mix\\(in_lab\\,var\\(--cmux-diff-fg\\)_10\\%\\,transparent\\)\\]{background-color:color-mix(in lab,var(--cmux-diff-fg) 10%,transparent)}}.bg-\\[color\\:var\\(--gray-0\\)\\]{background-color:var(--gray-0)}.bg-\\[var\\(--cmux-diff-muted-bg\\)\\]{background-color:var(--cmux-diff-muted-bg)}.\\[mask-image\\:linear-gradient\\(to_right\\,black_calc\\(100\\%_-_0\\.25rem\\)\\,transparent\\)\\]{-webkit-mask-image:linear-gradient(90deg,#000 calc(100% - .25rem),#0000);mask-image:linear-gradient(90deg,#000 calc(100% - .25rem),#0000)}.\\[mask-repeat\\:no-repeat\\]{-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat}.object-cover{object-fit:cover}.p-0\\.5{padding:calc(var(--spacing) * .5)}.p-2{padding:calc(var(--spacing) * 2)}.\\!px-0{padding-inline:calc(var(--spacing) * 0)!important}.px-0\\.5{padding-inline:calc(var(--spacing) * .5)}.px-1{padding-inline:calc(var(--spacing) * 1)}.px-1\\.5{padding-inline:calc(var(--spacing) * 1.5)}.px-2{padding-inline:calc(var(--spacing) * 2)}.px-2\\.5{padding-inline:calc(var(--spacing) * 2.5)}.px-3{padding-inline:calc(var(--spacing) * 3)}.px-\\[7px\\]{padding-inline:7px}.px-\\[var\\(--padding-row-x\\)\\]{padding-inline:var(--padding-row-x)}.py-0{padding-block:calc(var(--spacing) * 0)}.py-0\\.5{padding-block:calc(var(--spacing) * .5)}.py-1{padding-block:calc(var(--spacing) * 1)}.py-1\\.5{padding-block:calc(var(--spacing) * 1.5)}.py-2{padding-block:calc(var(--spacing) * 2)}.py-\\[var\\(--padding-row-y\\)\\]{padding-block:var(--padding-row-y)}.pt-0\\.5{padding-top:calc(var(--spacing) * .5)}.pt-3{padding-top:calc(var(--spacing) * 3)}.pr-0{padding-right:calc(var(--spacing) * 0)}.pr-1{padding-right:calc(var(--spacing) * 1)}.pr-2{padding-right:calc(var(--spacing) * 2)}.pb-1{padding-bottom:calc(var(--spacing) * 1)}.pl-2{padding-left:calc(var(--spacing) * 2)}.pl-3{padding-left:calc(var(--spacing) * 3)}.text-left{text-align:left}.align-bottom{vertical-align:bottom}.text-base{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.\\!leading-none{--tw-leading:1!important;line-height:1!important}.leading-5{--tw-leading:calc(var(--spacing) * 5);line-height:calc(var(--spacing) * 5)}.leading-\\[18px\\]{--tw-leading:18px;line-height:18px}.leading-\\[calc\\(var\\(--codex-chat-font-size\\)\\+8px\\)\\]{--tw-leading:calc(var(--codex-chat-font-size) + 8px);line-height:calc(var(--codex-chat-font-size) + 8px)}.leading-none{--tw-leading:1;line-height:1}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.break-words{overflow-wrap:break-word}.text-ellipsis{text-overflow:ellipsis}.whitespace-nowrap{white-space:nowrap}.whitespace-pre{white-space:pre}.text-current{color:currentColor}.italic{font-style:italic}.tabular-nums{--tw-numeric-spacing:tabular-nums;font-variant-numeric:var(--tw-ordinal,) var(--tw-slashed-zero,) var(--tw-numeric-figure,) var(--tw-numeric-spacing,) var(--tw-numeric-fraction,)}.opacity-0{opacity:0}.opacity-50{opacity:.5}.opacity-70{opacity:.7}.opacity-100{opacity:1}.shadow{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a), 0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-md{--tw-shadow:0 4px 6px -1px var(--tw-shadow-color,#0000001a), 0 2px 4px -2px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-sm{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a), 0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ring-\\[0\\.5px\\]{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(.5px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.outline-hidden{--tw-outline-style:none;outline-style:none}@media(forced-colors:active){.outline-hidden{outline-offset:2px;outline:2px solid #0000}}.filter{filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.backdrop-blur-lg{--tw-backdrop-blur:blur(var(--blur-lg));-webkit-backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,)}.backdrop-blur-sm{--tw-backdrop-blur:blur(var(--blur-sm));-webkit-backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,)}.backdrop-filter{-webkit-backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,)}.transition{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-opacity{transition-property:opacity;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-transform{transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.duration-200{--tw-duration:.2s;transition-duration:.2s}.ease-out{--tw-ease:var(--ease-out);transition-timing-function:var(--ease-out)}.select-none{-webkit-user-select:none;user-select:none}.\\[--edge-fade-distance\\:2rem\\]{--edge-fade-distance:2rem}.group-focus-within\\:opacity-100:is(:where(.group):focus-within *){opacity:1}@media(hover:hover){.group-hover\\:opacity-100:is(:where(.group):hover *){opacity:1}.hover\\:bg-transparent:hover{background-color:#0000}}.focus\\:outline-none:focus{--tw-outline-style:none;outline-style:none}.focus-visible\\:outline-2:focus-visible{outline-style:var(--tw-outline-style);outline-width:2px}.disabled\\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\\:opacity-40:disabled{opacity:.4}.data-\\[state\\=checked\\]\\:translate-x-\\[14px\\][data-state=checked]{--tw-translate-x:14px;translate:var(--tw-translate-x) var(--tw-translate-y)}.data-\\[state\\=unchecked\\]\\:translate-x-\\[2px\\][data-state=unchecked]{--tw-translate-x:2px;translate:var(--tw-translate-x) var(--tw-translate-y)}@container (min-width:500px){.\\@\\[500px\\]\\:inline{display:inline}}.\\[\\&_\\.ProseMirror\\]\\:\\!h-5 .ProseMirror{height:calc(var(--spacing) * 5)!important}.\\[\\&_\\.ProseMirror\\]\\:h-auto .ProseMirror{height:auto}.\\[\\&_\\.ProseMirror\\]\\:\\!min-h-5 .ProseMirror{min-height:calc(var(--spacing) * 5)!important}.\\[\\&_\\.ProseMirror\\]\\:min-h-\\[2rem\\] .ProseMirror{min-height:2rem}.\\[\\&_\\.ProseMirror\\]\\:min-w-0 .ProseMirror{min-width:calc(var(--spacing) * 0)}.\\[\\&_\\.ProseMirror\\]\\:flex-1 .ProseMirror{flex:1}.\\[\\&_\\.ProseMirror\\]\\:resize-none .ProseMirror{resize:none}.\\[\\&_\\.ProseMirror\\]\\:overflow-hidden .ProseMirror{overflow:hidden}.\\[\\&_\\.ProseMirror\\]\\:leading-5 .ProseMirror{--tw-leading:calc(var(--spacing) * 5);line-height:calc(var(--spacing) * 5)}.\\[\\&_\\.ProseMirror\\]\\:whitespace-nowrap .ProseMirror{white-space:nowrap}.\\[\\&_\\.ProseMirror\\]\\:focus-visible\\:outline-none .ProseMirror:focus-visible{--tw-outline-style:none;outline-style:none}.\\[\\&_\\.ProseMirror_p\\]\\:m-0 .ProseMirror p{margin:calc(var(--spacing) * 0)}.\\[\\&_\\.ProseMirror_p\\]\\:overflow-hidden .ProseMirror p{overflow:hidden}.\\[\\&_\\.ProseMirror_p\\]\\:text-ellipsis .ProseMirror p{text-overflow:ellipsis}.\\[\\&_\\.ProseMirror_p\\]\\:whitespace-nowrap .ProseMirror p{white-space:nowrap}.\\[\\&_\\.contain-inline-size\\]\\:\\[contain\\:initial\\] .contain-inline-size{contain:initial}.\\[\\&\\>\\*\\:last-child\\]\\:mb-0>:last-child{margin-bottom:calc(var(--spacing) * 0)}.\\[\\&\\>ol\\:first-child\\]\\:mt-0>ol:first-child,.\\[\\&\\>ul\\:first-child\\]\\:mt-0>ul:first-child{margin-top:calc(var(--spacing) * 0)}}:root{color-scheme:light dark;--cmux-diff-bg-light:#fff;--cmux-diff-bg-dark:#000;--cmux-diff-fg-light:#000;--cmux-diff-fg-dark:#fff;--cmux-diff-selection-bg-light:#abd8ff;--cmux-diff-selection-bg-dark:#3f638b;--cmux-diff-ui-font-family:system-ui, -apple-system, BlinkMacSystemFont, "SF Pro Text", "Helvetica Neue", Arial, sans-serif;--cmux-diff-ui-font-size:12px;--cmux-diff-ui-line-height:16px;--cmux-diff-code-font-family:ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", monospace;--cmux-diff-font-size:10px;--cmux-diff-line-height:20px;--cmux-diff-bg:var(--cmux-diff-bg-light);--cmux-diff-fg:var(--cmux-diff-fg-light);--cmux-diff-border:var(--cmux-diff-fg)}@supports (color:color-mix(in lab,red,red)){:root{--cmux-diff-border:color-mix(in lab, var(--cmux-diff-fg) 12%, transparent)}}:root{--cmux-diff-toolbar-bg:transparent;--cmux-diff-sidebar-bg:transparent;--cmux-diff-muted-bg:var(--cmux-diff-fg)}@supports (color:color-mix(in lab,red,red)){:root{--cmux-diff-muted-bg:color-mix(in lab, var(--cmux-diff-fg) 8%, transparent)}}:root{--cmux-diff-hover-bg:var(--cmux-diff-fg)}@supports (color:color-mix(in lab,red,red)){:root{--cmux-diff-hover-bg:color-mix(in lab, var(--cmux-diff-fg) 10%, transparent)}}:root{--cmux-diff-accent:light-dark(#0a84ff,#7ab7ff);--cmux-diff-text-muted:var(--cmux-diff-fg)}@supports (color:color-mix(in lab,red,red)){:root{--cmux-diff-text-muted:color-mix(in lab, var(--cmux-diff-fg) 72%, var(--cmux-diff-bg))}}:root{--cmux-diff-text-subtle:var(--cmux-diff-fg)}@supports (color:color-mix(in lab,red,red)){:root{--cmux-diff-text-subtle:color-mix(in lab, var(--cmux-diff-fg) 84%, var(--cmux-diff-bg))}}:root{--cmux-diff-surface-fill-light:transparent;--cmux-diff-surface-fill-dark:transparent;--cmux-diff-surface-fill:var(--cmux-diff-surface-fill-light);background:var(--cmux-diff-surface-fill);color:var(--cmux-diff-fg)}@media(prefers-color-scheme:dark){:root{--cmux-diff-bg:var(--cmux-diff-bg-dark);--cmux-diff-fg:var(--cmux-diff-fg-dark);--cmux-diff-surface-fill:var(--cmux-diff-surface-fill-dark)}}*{box-sizing:border-box}html,body{background:var(--cmux-diff-surface-fill);height:100%;overflow:hidden}body{background:var(--cmux-diff-surface-fill);height:100vh;min-height:0;color:var(--cmux-diff-fg);font-family:var(--cmux-diff-ui-font-family);font-size:var(--cmux-diff-ui-font-size);line-height:var(--cmux-diff-ui-line-height);flex-direction:column;margin:0;display:flex;overflow:hidden}#root{background:0 0;height:100%;min-height:0}#app{overscroll-behavior:contain;contain:strict;height:100vh;min-height:0;color:inherit;background:0 0;grid-template-rows:auto minmax(0,1fr);grid-template-columns:minmax(0,1fr);display:grid;overflow:hidden}.copy-fallback-textarea{opacity:0;pointer-events:none;width:1px;height:1px;position:fixed;top:0;left:-9999px}#toolbar{border-bottom:1px solid var(--cmux-diff-border);background:var(--cmux-diff-toolbar-bg);min-height:32px;color:var(--cmux-diff-fg);flex:none;grid-template-columns:minmax(0,1.1fr) minmax(0,.9fr) minmax(0,auto);align-items:center;gap:7px;padding:3px 4px 3px 8px;display:grid;position:relative}@supports (color:color-mix(in lab,red,red)){#toolbar{color:color-mix(in lab,var(--cmux-diff-fg) 76%,var(--cmux-diff-bg))}}#toolbar{z-index:50}@media(min-width:521px){body[data-files-hidden=false] #toolbar{grid-template-columns:minmax(0,1fr) minmax(0,auto)}body[data-files-hidden=false] .toolbar-middle{display:none}}.toolbar-left,.toolbar-middle,.toolbar-actions{align-items:center;min-width:0;display:flex;overflow:clip visible}.toolbar-left,.toolbar-middle{gap:6px}.toolbar-left{justify-self:stretch;container:toolbar-left/inline-size}.toolbar-middle{justify-content:center}.toolbar-actions{justify-self:end;gap:4px}#source-select,#repo-select,#base-select,#jump-select,#jump-search-button{appearance:none;white-space:nowrap;text-overflow:ellipsis;background:linear-gradient(45deg,transparent 50%,currentcolor 50%) right 11px center / 4px 4px no-repeat,linear-gradient(135deg,currentcolor 50%,transparent 50%) right 7px center / 4px 4px no-repeat,var(--cmux-diff-fg);border:1px solid #0000;border-radius:6px;min-width:0;max-width:100%;height:24px;padding:0 24px 0 9px;overflow:hidden}@supports (color:color-mix(in lab,red,red)){#source-select,#repo-select,#base-select,#jump-select,#jump-search-button{background:linear-gradient(45deg,transparent 50%,currentcolor 50%) right 11px center / 4px 4px no-repeat,linear-gradient(135deg,currentcolor 50%,transparent 50%) right 7px center / 4px 4px no-repeat,color-mix(in lab,var(--cmux-diff-fg) 7%,transparent)}}#source-select,#repo-select,#base-select,#jump-select,#jump-search-button{color:inherit;font:inherit}#source-select{field-sizing:content;flex:0 3 auto;min-width:58px}#source-select:hover,#repo-select:hover,#base-select:hover,#jump-select:hover{border-color:var(--cmux-diff-fg)}@supports (color:color-mix(in lab,red,red)){#source-select:hover,#repo-select:hover,#base-select:hover,#jump-select:hover{border-color:color-mix(in lab,var(--cmux-diff-fg) 24%,transparent)}}#source-select:hover,#repo-select:hover,#base-select:hover,#jump-select:hover{background-color:var(--cmux-diff-fg)}@supports (color:color-mix(in lab,red,red)){#source-select:hover,#repo-select:hover,#base-select:hover,#jump-select:hover{background-color:color-mix(in lab,var(--cmux-diff-fg) 10%,transparent)}}#jump-search-button:hover{border-color:var(--cmux-diff-fg)}@supports (color:color-mix(in lab,red,red)){#jump-search-button:hover{border-color:color-mix(in lab,var(--cmux-diff-fg) 24%,transparent)}}#jump-search-button:hover{background-color:var(--cmux-diff-fg)}@supports (color:color-mix(in lab,red,red)){#jump-search-button:hover{background-color:color-mix(in lab,var(--cmux-diff-fg) 10%,transparent)}}#source-select[hidden],#repo-select[hidden],#base-select[hidden],#jump-select[hidden]{display:none}#jump-select{field-sizing:content;min-width:64px}#jump-search-button{cursor:pointer;background-image:none;min-width:64px;padding-right:9px}#repo-select{field-sizing:content;flex:0 5 auto;min-width:56px}#base-select{flex:0 120px}#source-select:focus,#repo-select:focus,#base-select:focus,#jump-select:focus,#jump-search-button:focus-visible,.base-picker-button:focus-visible,.base-picker-input:focus-visible,.toolbar-icon:focus-visible,.menu-item:focus-visible,.file-entry:focus-visible{outline:2px solid var(--cmux-diff-fg)}@supports (color:color-mix(in lab,red,red)){#source-select:focus,#repo-select:focus,#base-select:focus,#jump-select:focus,#jump-search-button:focus-visible,.base-picker-button:focus-visible,.base-picker-input:focus-visible,.toolbar-icon:focus-visible,.menu-item:focus-visible,.file-entry:focus-visible{outline:2px solid color-mix(in lab,var(--cmux-diff-fg) 36%,transparent)}}#source-select:focus,#repo-select:focus,#base-select:focus,#jump-select:focus,#jump-search-button:focus-visible,.base-picker-button:focus-visible,.base-picker-input:focus-visible,.toolbar-icon:focus-visible,.menu-item:focus-visible,.file-entry:focus-visible{outline-offset:1px}#base-picker{flex:0 auto;align-items:center;min-width:150px;display:flex;position:relative}.base-picker-button{border:1px solid var(--cmux-diff-fg);align-items:center;gap:5px;min-width:0;max-width:100%;height:24px;padding:0 7px 0 9px;display:inline-flex}@supports (color:color-mix(in lab,red,red)){.base-picker-button{border:1px solid color-mix(in lab,var(--cmux-diff-fg) 18%,transparent)}}.base-picker-button{background:var(--cmux-diff-fg);border-radius:6px}@supports (color:color-mix(in lab,red,red)){.base-picker-button{background:color-mix(in lab,var(--cmux-diff-fg) 11%,transparent)}}.base-picker-button{color:var(--cmux-diff-fg);font:inherit;cursor:pointer;font-weight:600}.base-picker-button:hover:not(:disabled),.base-picker-button[aria-expanded=true]{border-color:var(--cmux-diff-fg)}@supports (color:color-mix(in lab,red,red)){.base-picker-button:hover:not(:disabled),.base-picker-button[aria-expanded=true]{border-color:color-mix(in lab,var(--cmux-diff-fg) 30%,transparent)}}.base-picker-button:hover:not(:disabled),.base-picker-button[aria-expanded=true]{background:var(--cmux-diff-fg)}@supports (color:color-mix(in lab,red,red)){.base-picker-button:hover:not(:disabled),.base-picker-button[aria-expanded=true]{background:color-mix(in lab,var(--cmux-diff-fg) 15%,transparent)}}.base-picker-button:disabled{cursor:default;opacity:.85}.base-picker-button svg{stroke:currentColor;fill:none;stroke-width:1.6px;stroke-linecap:round;stroke-linejoin:round;opacity:.7;flex:none;width:12px;height:12px}.base-picker-label{align-items:center;gap:5px;min-width:0;display:inline-flex}.base-picker-prefix{color:var(--cmux-diff-fg);flex:none;font-weight:500}@supports (color:color-mix(in lab,red,red)){.base-picker-prefix{color:color-mix(in lab,var(--cmux-diff-fg) 60%,var(--cmux-diff-bg))}}.base-picker-head{text-overflow:ellipsis;white-space:nowrap;min-width:4ch;color:var(--cmux-diff-fg);flex:0 8 auto;font-weight:500;overflow:hidden}@supports (color:color-mix(in lab,red,red)){.base-picker-head{color:color-mix(in lab,var(--cmux-diff-fg) 62%,var(--cmux-diff-bg))}}.base-picker-ref{text-overflow:ellipsis;white-space:nowrap;flex:0 auto;min-width:6ch;overflow:hidden}.base-picker-meta{flex:0 1000 auto;align-items:center;gap:5px;min-width:0;display:inline-flex;overflow:hidden}.base-picker-reason{color:var(--cmux-diff-fg);flex:none;font-weight:500}@supports (color:color-mix(in lab,red,red)){.base-picker-reason{color:color-mix(in lab,var(--cmux-diff-fg) 64%,var(--cmux-diff-bg))}}.base-picker-reason{white-space:nowrap}.base-picker-reason-low{opacity:.6;font-style:italic}.base-picker-aheadbehind{font-variant-numeric:tabular-nums;color:var(--cmux-diff-fg);flex:none;font-weight:500}@supports (color:color-mix(in lab,red,red)){.base-picker-aheadbehind{color:color-mix(in lab,var(--cmux-diff-fg) 58%,var(--cmux-diff-bg))}}.base-picker-aheadbehind{white-space:nowrap}@container toolbar-left (max-width:380px){.base-picker-aheadbehind{display:none}}@container toolbar-left (max-width:312px){.base-picker-reason{display:none}}.base-picker-text{text-overflow:ellipsis;white-space:nowrap;font-weight:500;overflow:hidden}.base-picker-spinner{border:1.6px solid var(--cmux-diff-fg);border-radius:50%;flex:none;width:12px;height:12px}@supports (color:color-mix(in lab,red,red)){.base-picker-spinner{border:1.6px solid color-mix(in lab,var(--cmux-diff-fg) 26%,transparent)}}.base-picker-spinner{border-top-color:var(--cmux-diff-fg);animation:.7s linear infinite base-picker-spin}@keyframes base-picker-spin{to{transform:rotate(360deg)}}@media(prefers-reduced-motion:reduce){.base-picker-spinner{animation-duration:1.6s}}.base-picker-popover{border:1px solid var(--cmux-diff-fg);flex-direction:column;width:320px;max-width:min(86vw,360px);display:flex;position:fixed}@supports (color:color-mix(in lab,red,red)){.base-picker-popover{border:1px solid color-mix(in lab,var(--cmux-diff-fg) 13%,transparent)}}.base-picker-popover{background:var(--cmux-diff-bg);z-index:120;border-radius:8px;overflow:hidden;box-shadow:0 16px 34px lab(0% none none/.28)}.base-picker-search{border-bottom:1px solid var(--cmux-diff-fg);align-items:center;gap:6px;padding:7px 9px;display:flex}@supports (color:color-mix(in lab,red,red)){.base-picker-search{border-bottom:1px solid color-mix(in lab,var(--cmux-diff-fg) 11%,transparent)}}.base-picker-search svg{stroke:currentColor;fill:none;stroke-width:1.6px;stroke-linecap:round;stroke-linejoin:round;opacity:.55;flex:none;width:13px;height:13px}.base-picker-input{min-width:0;color:var(--cmux-diff-fg);font:inherit;background:0 0;border:0;outline:none;flex:auto}.base-picker-list{flex:auto;min-height:0;padding:4px;overflow-y:auto}.base-picker-status{color:var(--cmux-diff-fg);padding:12px 9px}@supports (color:color-mix(in lab,red,red)){.base-picker-status{color:color-mix(in lab,var(--cmux-diff-fg) 60%,var(--cmux-diff-bg))}}.base-picker-status{text-align:center}.base-picker-status-error{color:#ff5f56}@supports (color:color-mix(in lab,red,red)){.base-picker-status-error{color:color-mix(in lab,#ff5f56 70%,var(--cmux-diff-fg))}}.base-picker-group-header{letter-spacing:.06em;text-transform:uppercase;color:var(--cmux-diff-fg);padding:8px 8px 3px;font-size:10px;font-weight:600}@supports (color:color-mix(in lab,red,red)){.base-picker-group-header{color:color-mix(in lab,var(--cmux-diff-fg) 52%,var(--cmux-diff-bg))}}.base-picker-more{color:var(--cmux-diff-fg);padding:5px 8px 7px;font-size:11px}@supports (color:color-mix(in lab,red,red)){.base-picker-more{color:color-mix(in lab,var(--cmux-diff-fg) 48%,var(--cmux-diff-bg))}}.base-picker-more{cursor:default;-webkit-user-select:none;user-select:none}.base-picker-row{cursor:pointer;border-radius:6px;align-items:center;gap:8px;min-height:28px;padding:0 8px;display:flex}.base-picker-row-selected{background:var(--cmux-diff-fg)}@supports (color:color-mix(in lab,red,red)){.base-picker-row-selected{background:color-mix(in lab,var(--cmux-diff-fg) 12%,transparent)}}.base-picker-row-primary{text-overflow:ellipsis;white-space:nowrap;min-width:0;color:var(--cmux-diff-fg);flex:auto;overflow:hidden}.base-picker-row-primary strong{font-weight:700}.base-picker-row-secondary{text-overflow:ellipsis;white-space:nowrap;text-align:right;min-width:0;max-width:55%;color:var(--cmux-diff-fg);flex:0 auto;overflow:hidden}@supports (color:color-mix(in lab,red,red)){.base-picker-row-secondary{color:color-mix(in lab,var(--cmux-diff-fg) 55%,var(--cmux-diff-bg))}}.base-picker-pill{text-transform:uppercase;letter-spacing:.04em;color:var(--cmux-diff-accent);background:var(--cmux-diff-accent);border-radius:999px;flex:none;padding:1px 6px;font-size:10px;font-weight:600}@supports (color:color-mix(in lab,red,red)){.base-picker-pill{background:color-mix(in lab,var(--cmux-diff-accent) 16%,transparent)}}@media(max-width:760px){#toolbar{grid-template-columns:minmax(0,1fr) minmax(0,auto);grid-template-areas:"source actions""jump actions"}.toolbar-left{grid-area:source}.toolbar-middle{grid-area:jump;justify-content:stretch}.toolbar-actions{grid-area:actions}}.toolbar-icon{width:20px;height:20px;color:var(--cmux-diff-fg);background:0 0;border:1px solid #0000;border-radius:6px;justify-content:center;align-items:center;display:inline-flex}@supports (color:color-mix(in lab,red,red)){.toolbar-icon{color:color-mix(in lab,var(--cmux-diff-fg) 60%,var(--cmux-diff-bg))}}.toolbar-icon{cursor:pointer;padding:0}.toolbar-icon:hover,.toolbar-icon[aria-expanded=true]{border-color:var(--cmux-diff-fg)}@supports (color:color-mix(in lab,red,red)){.toolbar-icon:hover,.toolbar-icon[aria-expanded=true]{border-color:color-mix(in lab,var(--cmux-diff-fg) 14%,transparent)}}.toolbar-icon:hover,.toolbar-icon[aria-expanded=true]{background:var(--cmux-diff-fg)}@supports (color:color-mix(in lab,red,red)){.toolbar-icon:hover,.toolbar-icon[aria-expanded=true]{background:color-mix(in lab,var(--cmux-diff-fg) 9%,transparent)}}.toolbar-icon:hover,.toolbar-icon[aria-expanded=true],.toolbar-icon[aria-pressed=true]{color:var(--cmux-diff-fg)}@supports (color:color-mix(in lab,red,red)){.toolbar-icon[aria-pressed=true]{color:color-mix(in lab,var(--cmux-diff-fg) 78%,var(--cmux-diff-bg))}}.toolbar-icon[hidden]{display:none}.toolbar-icon svg,.menu-item svg{fill:none;stroke:currentColor;stroke-width:1px;stroke-linecap:round;stroke-linejoin:round;width:14px;height:14px;display:block}#layout-toggle svg [data-diff-deletion],#layout-toggle svg [data-diff-addition]{stroke:none}#layout-toggle svg [data-diff-deletion]{fill:light-dark(var(--cmux-diff-deletion-fg-light),var(--cmux-diff-deletion-fg-dark))}#layout-toggle svg [data-diff-addition]{fill:light-dark(var(--cmux-diff-addition-fg-light),var(--cmux-diff-addition-fg-dark))}.toolbar-icon svg [data-precision-dot],.menu-item svg [data-precision-dot]{stroke-width:2px}#options-menu{border:1px solid var(--cmux-diff-fg);min-width:246px;padding:8px;position:absolute;top:calc(100% + 7px);right:10px}@supports (color:color-mix(in lab,red,red)){#options-menu{border:1px solid color-mix(in lab,var(--cmux-diff-fg) 13%,transparent)}}#options-menu{background:var(--cmux-diff-bg);z-index:100;border-radius:8px;box-shadow:0 16px 34px lab(0% none none/.28)}#options-menu[hidden]{display:none}.menu-separator{background:var(--cmux-diff-fg);height:1px;margin:7px 6px}@supports (color:color-mix(in lab,red,red)){.menu-separator{background:color-mix(in lab,var(--cmux-diff-fg) 12%,transparent)}}.menu-item{width:100%;min-height:31px;color:var(--cmux-diff-fg);background:0 0;border:0;border-radius:6px;grid-template-columns:22px minmax(0,1fr) 18px;align-items:center;gap:10px;display:grid}@supports (color:color-mix(in lab,red,red)){.menu-item{color:color-mix(in lab,var(--cmux-diff-fg) 86%,var(--cmux-diff-bg))}}.menu-item{font:inherit;text-align:left;padding:0 7px}.menu-item:hover:not(:disabled){background:var(--cmux-diff-fg)}@supports (color:color-mix(in lab,red,red)){.menu-item:hover:not(:disabled){background:color-mix(in lab,var(--cmux-diff-fg) 10%,transparent)}}.menu-item:hover:not(:disabled){color:var(--cmux-diff-fg)}.menu-segment{cursor:default}.menu-segment:hover{background:0 0}.menu-segment-controls{background:0 0;border-radius:7px;justify-self:end;align-items:center;gap:2px;padding:2px;display:inline-flex}.segment-button{width:27px;height:24px;color:var(--cmux-diff-fg);background:0 0;border:0;border-radius:5px;justify-content:center;align-items:center;display:inline-flex}@supports (color:color-mix(in lab,red,red)){.segment-button{color:color-mix(in lab,var(--cmux-diff-fg) 62%,var(--cmux-diff-bg))}}.segment-button{padding:0}.segment-button:hover,.segment-button[aria-pressed=true]{background:var(--cmux-diff-fg)}@supports (color:color-mix(in lab,red,red)){.segment-button:hover,.segment-button[aria-pressed=true]{background:color-mix(in lab,var(--cmux-diff-fg) 12%,transparent)}}.segment-button:hover,.segment-button[aria-pressed=true],.menu-item:disabled{color:var(--cmux-diff-fg)}@supports (color:color-mix(in lab,red,red)){.menu-item:disabled{color:color-mix(in lab,var(--cmux-diff-fg) 36%,var(--cmux-diff-bg))}}.menu-label{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.menu-check{justify-self:end}#content{--cmux-diff-files-width:252px;grid-template-columns:minmax(0,1fr) var(--cmux-diff-files-width);overscroll-behavior:contain;contain:strict;background:0 0;flex:auto;grid-template-rows:minmax(0,1fr);grid-template-areas:"viewer files";min-width:0;min-height:0;display:grid;position:relative;overflow:hidden}body[data-files-hidden=true] #content{grid-template-columns:minmax(0,1fr) 0}body[data-status-only=true] #content{grid-template-columns:minmax(0,1fr);grid-template-areas:"viewer"}#files-sidebar{border-left:1px solid var(--cmux-diff-border);background:var(--cmux-diff-sidebar-bg);contain:strict;opacity:1;flex-direction:column;grid-area:files;width:100%;min-width:0;height:100%;min-height:0;transition:opacity .1s,visibility linear;display:flex;position:relative;overflow:hidden}#files-resize-handle{z-index:3;appearance:none;cursor:col-resize;background:0 0;border:0;outline:none;width:8px;margin:0;padding:0;position:absolute;top:0;bottom:0;left:0}#files-resize-handle:after{content:"";background:0 0;width:1px;position:absolute;top:0;bottom:0;left:0}body[data-files-hidden=true] #files-sidebar{opacity:0;pointer-events:none;visibility:hidden;transition:opacity .1s,visibility 0s linear .1s}body[data-status-only=true] #files-sidebar,#files-sidebar-backdrop{display:none}#files-header{z-index:1;border-bottom:1px solid var(--cmux-diff-border);background:var(--cmux-diff-sidebar-bg);min-height:30px;color:var(--cmux-diff-text-muted);justify-content:space-between;align-items:center;gap:8px;padding:0 7px 0 10px;display:flex;position:relative}#files-title{align-items:center;gap:6px;min-width:0;display:inline-flex}#files-header-actions{flex:none;align-items:center;gap:2px;display:inline-flex}#file-search-toggle{width:24px;height:24px;color:var(--cmux-diff-text-muted);background:0 0;border:0;border-radius:5px;flex:none;justify-content:center;align-items:center;padding:0;display:inline-flex}#file-search-toggle:hover,#file-search-toggle[aria-pressed=true]{background:var(--cmux-diff-hover-bg);color:var(--cmux-diff-fg)}#file-search-toggle svg{fill:none;stroke:currentColor;stroke-width:1px;stroke-linecap:round;stroke-linejoin:round;width:15px;height:15px}#file-list{background:var(--cmux-diff-sidebar-bg);--trees-bg-override:var(--cmux-diff-sidebar-bg);--trees-fg-override:var(--cmux-diff-text-subtle);--trees-fg-muted-override:var(--cmux-diff-text-muted);--trees-bg-muted-override:var(--cmux-diff-hover-bg);--trees-selected-bg-override:var(--cmux-diff-fg);flex:auto;min-height:0;padding:6px 4px 6px 6px;overflow:hidden}@supports (color:color-mix(in lab,red,red)){#file-list{--trees-selected-bg-override:color-mix(in lab, var(--cmux-diff-fg) 11%, transparent)}}#file-list{--trees-selected-fg-override:var(--cmux-diff-fg);--trees-selected-focused-border-color-override:transparent;--trees-border-color-override:var(--cmux-diff-border);--trees-focus-ring-color-override:var(--cmux-diff-accent)}@supports (color:color-mix(in lab,red,red)){#file-list{--trees-focus-ring-color-override:color-mix(in lab, var(--cmux-diff-accent) 72%, transparent)}}#file-list{--trees-font-family-override:var(--cmux-diff-ui-font-family);--trees-font-size-override:var(--cmux-diff-ui-font-size);--trees-font-weight-semibold-override:500;--trees-density-override:.78;--trees-border-radius-override:5px;--trees-item-padding-x-override:7px;--trees-item-margin-x-override:0;--trees-padding-inline-override:8px;--trees-search-bg-override:var(--cmux-diff-bg)}@supports (color:color-mix(in lab,red,red)){#file-list{--trees-search-bg-override:color-mix(in lab, var(--cmux-diff-bg) 92%, var(--cmux-diff-fg))}}#file-list{--trees-status-added-override:light-dark(var(--cmux-diff-addition-fg-light),var(--cmux-diff-addition-fg-dark));--trees-status-modified-override:var(--cmux-diff-accent);--trees-status-renamed-override:light-dark(#a26300,#ffd166);--trees-status-deleted-override:light-dark(var(--cmux-diff-deletion-fg-light),var(--cmux-diff-deletion-fg-dark))}body[data-loading=false] .diff-loading-placeholder,body[data-loading=false]:not([data-status-only=true]) #loading-layer{display:none}#file-list file-tree-container{width:100%;height:100%;min-height:0;display:block}.file-entry{width:100%;min-height:30px;color:inherit;font:inherit;text-align:left;background:0 0;border:0;border-radius:6px;grid-template-columns:18px minmax(0,1fr) auto;align-items:center;gap:8px;padding:3px 7px;display:grid}.file-entry:hover,.file-entry[aria-current=true]{background:var(--cmux-diff-fg)}@supports (color:color-mix(in lab,red,red)){.file-entry:hover,.file-entry[aria-current=true]{background:color-mix(in lab,var(--cmux-diff-fg) 9%,transparent)}}.file-status{width:17px;height:17px;color:var(--cmux-diff-text-muted);border:1px solid;border-radius:5px;justify-content:center;align-items:center;font-size:9px;line-height:1;display:inline-flex}.file-name{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.file-stats{color:var(--cmux-diff-text-muted);gap:5px;display:inline-flex}.stat-add{color:light-dark(var(--cmux-diff-addition-fg-light),var(--cmux-diff-addition-fg-dark))}.stat-del{color:light-dark(var(--cmux-diff-deletion-fg-light),var(--cmux-diff-deletion-fg-dark))}#viewer{--diffs-font-family:var(--cmux-diff-code-font-family);--diffs-header-font-family:var(--cmux-diff-ui-font-family);--diffs-font-size:var(--cmux-diff-font-size);--diffs-line-height:var(--cmux-diff-line-height);--diffs-bg-selection-override:light-dark(var(--cmux-diff-selection-bg-light),var(--cmux-diff-selection-bg-dark));overscroll-behavior:contain;overflow-anchor:none;contain:strict;border-bottom:1px solid var(--cmux-diff-border);background:0 0;grid-area:viewer;width:100%;min-width:0;height:100%;min-height:0;position:relative;overflow:clip auto}.code-view-root{overscroll-behavior:contain;overflow-anchor:none;contain:strict;width:100%;min-width:0;height:100%;min-height:0;position:relative;overflow:clip auto}@media(max-width:520px){#content,body[data-files-hidden=true] #content{grid-template-columns:minmax(0,1fr);grid-template-areas:"viewer"}#files-sidebar{display:none}#app[data-file-search-open=true] #files-sidebar-backdrop{z-index:44;-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px);cursor:default;background:#00000061;border:0;width:100%;height:100%;margin:0;padding:0;display:block;position:absolute;inset:0}#app[data-file-search-open=true] #files-sidebar-backdrop:focus-visible{outline:2px solid var(--cmux-diff-accent);outline-offset:-2px}#app[data-file-search-open=true] #files-sidebar{z-index:45;visibility:visible;opacity:1;pointer-events:auto;border-left:1px solid var(--cmux-diff-border);background:var(--cmux-diff-bg);isolation:isolate;--cmux-diff-sidebar-bg:var(--cmux-diff-bg);width:min(88vw,360px);max-width:calc(100% - 32px);display:flex;position:absolute;inset:0 0 0 auto;box-shadow:-18px 0 42px #00000057}#app[data-file-search-open=true] #files-resize-handle{display:none}}@media(prefers-reduced-motion:reduce){#files-sidebar{transition:none}}#viewer diffs-container{--diffs-font-family:var(--cmux-diff-code-font-family);--diffs-header-font-family:var(--cmux-diff-ui-font-family);--diffs-font-size:var(--cmux-diff-font-size);--diffs-line-height:var(--cmux-diff-line-height);--diffs-bg-selection-override:light-dark(var(--cmux-diff-selection-bg-light),var(--cmux-diff-selection-bg-dark));contain:layout paint style;flex:auto;width:100%;min-height:30px;display:block;overflow:clip}#viewer diffs-container [data-diffs-header]{overflow-x:clip}#viewer diffs-container [data-diffs-header=default] [data-metadata]{flex-shrink:0}#loading-layer{z-index:4;pointer-events:none;contain:strict;background:0 0;grid-area:viewer;position:absolute;inset:0;overflow:hidden}body[data-status-only=true] #loading-layer{pointer-events:auto;justify-content:center;align-items:center;width:100%;height:100%;padding:32px;display:flex;position:static}#status{z-index:5;border:1px solid var(--cmux-diff-fg);align-items:center;gap:10px;max-width:calc(100% - 24px);min-height:32px;padding:8px 12px;display:flex;position:absolute;top:10px;left:12px}@supports (color:color-mix(in lab,red,red)){#status{border:1px solid color-mix(in lab,var(--cmux-diff-fg) 10%,transparent)}}#status{background:var(--cmux-diff-bg);font-family:var(--cmux-diff-ui-font-family);font-size:13px;line-height:var(--cmux-diff-ui-line-height);color:var(--cmux-diff-fg);border-radius:7px}@supports (color:color-mix(in lab,red,red)){#status{color:color-mix(in lab,var(--cmux-diff-fg) 70%,var(--cmux-diff-bg))}}body[data-status-only=true] #status{text-align:center;text-wrap:balance;width:auto;max-width:340px;min-height:0;color:var(--cmux-diff-fg);background:0 0;border:0;border-radius:0;flex-direction:column;justify-content:center;align-items:center;gap:14px;padding:0;font-size:14px;line-height:1.55;position:static}@supports (color:color-mix(in lab,red,red)){body[data-status-only=true] #status{color:color-mix(in lab,var(--cmux-diff-fg) 58%,var(--cmux-diff-bg))}}body[data-status-only=true] #status-text{letter-spacing:.005em;font-weight:500}.visually-hidden{clip:rect(0 0 0 0);white-space:nowrap;width:1px;height:1px;position:absolute;overflow:hidden}#status-icon{display:none}body[data-status-only=true] #status:not([data-error=true]):not([data-pending=true]) #status-icon{background:var(--cmux-diff-fg);border-radius:16px;justify-content:center;align-items:center;width:56px;height:56px;display:flex}@supports (color:color-mix(in lab,red,red)){body[data-status-only=true] #status:not([data-error=true]):not([data-pending=true]) #status-icon{background:color-mix(in lab,var(--cmux-diff-fg) 5%,transparent)}}body[data-status-only=true] #status:not([data-error=true]):not([data-pending=true]) #status-icon{border:1px solid var(--cmux-diff-fg)}@supports (color:color-mix(in lab,red,red)){body[data-status-only=true] #status:not([data-error=true]):not([data-pending=true]) #status-icon{border:1px solid color-mix(in lab,var(--cmux-diff-fg) 8%,transparent)}}body[data-status-only=true] #status:not([data-error=true]):not([data-pending=true]) #status-icon:before{content:"";opacity:.8;background-color:currentColor;width:26px;height:26px;display:block;-webkit-mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='1.7' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z'/%3E%3Cpath d='M14 2v6h6'/%3E%3Cpath d='M9 13h6'/%3E%3Cpath d='M9 17h4'/%3E%3C/svg%3E") 50%/contain no-repeat;mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='1.7' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z'/%3E%3Cpath d='M14 2v6h6'/%3E%3Cpath d='M9 13h6'/%3E%3Cpath d='M9 17h4'/%3E%3C/svg%3E") 50%/contain no-repeat}#status[data-pending=true]:before,body[data-loading=true] #status:before{content:"";border:2px solid var(--cmux-diff-fg);flex:none;width:14px;height:14px}@supports (color:color-mix(in lab,red,red)){#status[data-pending=true]:before,body[data-loading=true] #status:before{border:2px solid color-mix(in lab,var(--cmux-diff-fg) 20%,transparent)}}#status[data-pending=true]:before,body[data-loading=true] #status:before{border-top-color:var(--cmux-diff-fg)}@supports (color:color-mix(in lab,red,red)){#status[data-pending=true]:before,body[data-loading=true] #status:before{border-top-color:color-mix(in lab,var(--cmux-diff-fg) 70%,var(--cmux-diff-bg))}}#status[data-pending=true]:before,body[data-loading=true] #status:before{border-radius:50%;animation:.8s linear infinite cmuxDiffPendingSpin}#status[data-error=true]{color:light-dark(#b42318,#ff8a80)}@keyframes cmuxDiffPendingSpin{to{transform:rotate(360deg)}}@media(prefers-reduced-motion:reduce){#status[data-pending=true]:before,body[data-loading=true] #status:before{animation:none}}#comments-section{border-top:1px solid var(--cmux-diff-border);background:var(--cmux-diff-sidebar-bg);flex-direction:column;flex:none;min-height:0;max-height:40%;display:flex}#comments-header{min-height:30px;color:var(--cmux-diff-text-muted);font-size:var(--cmux-diff-ui-font-size);align-items:center;padding:0 10px;display:flex}#comments-list{flex-direction:column;gap:4px;min-height:0;padding:0 6px 6px;display:flex;overflow-y:auto}.comments-empty{color:var(--cmux-diff-text-muted);font-size:var(--cmux-diff-ui-font-size);padding:2px 7px 6px}.comment-entry{color:var(--cmux-diff-text-subtle);font:inherit;font-size:var(--cmux-diff-ui-font-size);text-align:left;cursor:pointer;background:0 0;border:0;border-radius:5px;flex-direction:column;gap:2px;padding:5px 7px;display:flex}.comment-entry:hover{background:var(--cmux-diff-hover-bg)}.comment-entry-header{justify-content:space-between;align-items:center;gap:6px;display:flex}.comment-entry-location{color:var(--cmux-diff-fg);text-overflow:ellipsis;white-space:nowrap;font-weight:500;overflow:hidden}.comment-entry-badge{background:var(--cmux-diff-muted-bg);color:var(--cmux-diff-text-muted);font-size:calc(var(--cmux-diff-ui-font-size) - 1px);border-radius:4px;flex:none;padding:0 5px}.comment-entry-message{text-overflow:ellipsis;white-space:nowrap;color:var(--cmux-diff-text-muted);overflow:hidden}.comment-composer,.comment-card{border:1px solid var(--cmux-diff-border);background:light-dark(var(--cmux-diff-bg),var(--cmux-diff-bg));border-radius:10px;flex-direction:column;gap:8px;max-width:680px;margin:8px 12px;padding:10px 12px;display:flex}@supports (color:color-mix(in lab,red,red)){.comment-composer,.comment-card{background:light-dark(color-mix(in lab,var(--cmux-diff-bg) 92%,#fff),color-mix(in lab,var(--cmux-diff-bg) 90%,#fff))}}.comment-composer,.comment-card{color:var(--cmux-diff-fg);font-family:var(--cmux-diff-ui-font-family);font-size:13px;line-height:1.45;box-shadow:0 1px 2px lab(0% none none/.1),0 2px 8px lab(0% none none/.06)}.comment-composer:focus-within{border-color:var(--cmux-diff-accent)}@supports (color:color-mix(in lab,red,red)){.comment-composer:focus-within{border-color:color-mix(in lab,var(--cmux-diff-accent) 60%,var(--cmux-diff-border))}}.comment-composer:focus-within{box-shadow:0 0 0 3px var(--cmux-diff-accent)}@supports (color:color-mix(in lab,red,red)){.comment-composer:focus-within{box-shadow:0 0 0 3px color-mix(in lab,var(--cmux-diff-accent) 18%,transparent)}}.comment-composer-input{box-sizing:border-box;resize:none;width:100%;min-height:52px;color:var(--cmux-diff-fg);font:inherit;background:0 0;border:0;padding:0}.comment-composer-input::placeholder{color:var(--cmux-diff-text-muted)}.comment-composer-input:focus-visible{outline:none}.comment-composer-footer{justify-content:space-between;align-items:center;gap:8px;display:flex}.comment-composer-buttons{gap:6px;display:inline-flex}.comment-button{color:var(--cmux-diff-text-muted);font:inherit;cursor:pointer;background:0 0;border:0;border-radius:6px;padding:4px 12px;font-weight:500}.comment-button:hover:not(:disabled){background:var(--cmux-diff-hover-bg);color:var(--cmux-diff-fg)}.comment-button:disabled{opacity:.5;cursor:default}.comment-button-primary{background:var(--cmux-diff-accent);color:light-dark(#fff,#08233f)}.comment-button-primary:hover:not(:disabled){background:var(--cmux-diff-accent)}@supports (color:color-mix(in lab,red,red)){.comment-button-primary:hover:not(:disabled){background:color-mix(in lab,var(--cmux-diff-accent) 86%,var(--cmux-diff-fg))}}.comment-button-primary:hover:not(:disabled){color:light-dark(#fff,#08233f)}.comment-card-header{justify-content:space-between;align-items:center;gap:8px;min-height:20px;display:flex}.comment-card-location{font-weight:500;font-size:calc(var(--cmux-diff-ui-font-size) - 1px);color:var(--cmux-diff-text-muted)}.comment-card-actions{opacity:0;gap:2px;transition:opacity .1s;display:inline-flex}.comment-card:hover .comment-card-actions,.comment-card:focus-within .comment-card-actions{opacity:1}.comment-card-action{color:var(--cmux-diff-text-muted);font:inherit;font-size:calc(var(--cmux-diff-ui-font-size) - 1px);cursor:pointer;background:0 0;border:0;border-radius:4px;padding:1px 6px}.comment-card-action:hover{background:var(--cmux-diff-hover-bg);color:var(--cmux-diff-fg)}.comment-card-message{white-space:pre-wrap;overflow-wrap:anywhere}@property --tw-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-z{syntax:"*";inherits:false;initial-value:0}@property --tw-rotate-x{syntax:"*";inherits:false}@property --tw-rotate-y{syntax:"*";inherits:false}@property --tw-rotate-z{syntax:"*";inherits:false}@property --tw-skew-x{syntax:"*";inherits:false}@property --tw-skew-y{syntax:"*";inherits:false}@property --tw-space-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-ordinal{syntax:"*";inherits:false}@property --tw-slashed-zero{syntax:"*";inherits:false}@property --tw-numeric-figure{syntax:"*";inherits:false}@property --tw-numeric-spacing{syntax:"*";inherits:false}@property --tw-numeric-fraction{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-blur{syntax:"*";inherits:false}@property --tw-brightness{syntax:"*";inherits:false}@property --tw-contrast{syntax:"*";inherits:false}@property --tw-grayscale{syntax:"*";inherits:false}@property --tw-hue-rotate{syntax:"*";inherits:false}@property --tw-invert{syntax:"*";inherits:false}@property --tw-opacity{syntax:"*";inherits:false}@property --tw-saturate{syntax:"*";inherits:false}@property --tw-sepia{syntax:"*";inherits:false}@property --tw-drop-shadow{syntax:"*";inherits:false}@property --tw-drop-shadow-color{syntax:"*";inherits:false}@property --tw-drop-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-drop-shadow-size{syntax:"*";inherits:false}@property --tw-backdrop-blur{syntax:"*";inherits:false}@property --tw-backdrop-brightness{syntax:"*";inherits:false}@property --tw-backdrop-contrast{syntax:"*";inherits:false}@property --tw-backdrop-grayscale{syntax:"*";inherits:false}@property --tw-backdrop-hue-rotate{syntax:"*";inherits:false}@property --tw-backdrop-invert{syntax:"*";inherits:false}@property --tw-backdrop-opacity{syntax:"*";inherits:false}@property --tw-backdrop-saturate{syntax:"*";inherits:false}@property --tw-backdrop-sepia{syntax:"*";inherits:false}@property --tw-duration{syntax:"*";inherits:false}@property --tw-ease{syntax:"*";inherits:false}@property --tw-outline-style{syntax:"*";inherits:false;initial-value:solid}`;function Vn(){const t=document.getElementById("cmux-diff-viewer-config");if(!t?.textContent)throw new Error("Missing cmux diff viewer config");return JSON.parse(t.textContent)}function qn(t){const e=Vn();$t("diff",Wn),qt(De(e.payload?.appearance)),typeof e.payload?.title=="string"&&e.payload.title.trim()!==""&&(document.title=e.payload.title);const r=St(e.payload?.labels,{assertMissing:kt()}),i=hi(e,r);document.body.dataset.filesHidden="false",Ce(i);const n=Wt(()=>s.jsx(_i,{config:e,initialStatus:i}));Rt.createRoot(t).render(s.jsx(Lt,{router:n}))}export{qn as mountDiffSurface}; + `}function pi(t,e){const r=t.palette??{},i=Kt(t.background),n=mi(t),o=he(t.foreground,n,t.type==="light"?"#000000":"#ffffff"),a=(c,l=o)=>he(c,n,l);return{name:t.name,displayName:t.ghosttyName,type:t.type,colors:{"editor.background":i,"editor.foreground":o,"terminal.background":i,"terminal.foreground":o,"terminal.ansiBlack":a(r[0]),"terminal.ansiRed":a(r[1]),"terminal.ansiGreen":a(r[2]),"terminal.ansiYellow":a(r[3]),"terminal.ansiBlue":a(r[4]),"terminal.ansiMagenta":a(r[5]),"terminal.ansiCyan":a(r[6]),"terminal.ansiWhite":a(r[7]),"terminal.ansiBrightBlack":a(r[8]),"terminal.ansiBrightRed":a(r[9],a(r[1])),"terminal.ansiBrightGreen":a(r[10],a(r[2])),"terminal.ansiBrightYellow":a(r[11],a(r[3])),"terminal.ansiBrightBlue":a(r[12],a(r[4])),"terminal.ansiBrightMagenta":a(r[13],a(r[5])),"terminal.ansiBrightCyan":a(r[14],a(r[6])),"terminal.ansiBrightWhite":a(r[15]),"gitDecoration.addedResourceForeground":a(r[10],a(r[2],"#32d74b")),"gitDecoration.deletedResourceForeground":a(r[9],a(r[1],"#ff453a")),"gitDecoration.modifiedResourceForeground":a(r[12],a(r[4],"#0a84ff")),"editor.selectionBackground":t.selectionBackground,"editor.selectionForeground":t.selectionForeground},tokenColors:[{settings:{foreground:o,background:i}},{scope:["comment","punctuation.definition.comment"],settings:{foreground:a(r[8]),fontStyle:"italic"}},{scope:["string","constant.other.symbol"],settings:{foreground:a(r[2])}},{scope:["constant.numeric","constant.language","support.constant"],settings:{foreground:a(r[3])}},{scope:["keyword","storage","storage.type"],settings:{foreground:a(r[5])}},{scope:["entity.name.function","support.function"],settings:{foreground:a(r[4])}},{scope:["entity.name.type","entity.name.class","support.type"],settings:{foreground:a(r[6])}},{scope:["markup.heading","punctuation.definition.heading"],settings:{foreground:a(r[12],a(r[4])),fontStyle:"bold"}},{scope:["markup.bold","punctuation.definition.bold"],settings:{foreground:a(r[11],a(r[3])),fontStyle:"bold"}},{scope:["markup.italic","punctuation.definition.italic"],settings:{foreground:a(r[13],a(r[5])),fontStyle:"italic"}},{scope:["markup.inline.raw","markup.raw","markup.fenced_code","markup.raw.block"],settings:{foreground:a(r[10],a(r[2]))}},{scope:["markup.underline.link","string.other.link","markup.link"],settings:{foreground:a(r[14],a(r[6]))}},{scope:["markup.quote","punctuation.definition.quote"],settings:{foreground:a(r[8]),fontStyle:"italic"}},{scope:["markup.list","punctuation.definition.list","markup.table"],settings:{foreground:a(r[9],a(r[1]))}},{scope:["variable","meta.definition.variable"],settings:{foreground:o}},{scope:["invalid","message.error"],settings:{foreground:a(r[9],a(r[1]))}}]}}function mi(t){return typeof t.background=="string"&&t.background.trim()!==""?t.background.trim():t.type==="light"?"#ffffff":"#000000"}function ie(t,e={}){const r=e.pending===!0;return{error:e.error===!0,loading:e.loading===!0||r,message:t,pending:r,statusOnly:e.statusOnly===!0}}function hi(t,e){const r=t.payload;return r?.pendingReplacement===!0?ie(r.statusMessage??e("loadingDiff"),{loading:!0,pending:!0}):typeof r?.statusMessage=="string"&&r.statusMessage.length>0?ie(r.statusMessage,{error:r.statusIsError===!0,loading:!1,statusOnly:!0}):ie(e("loadingDiff"),{loading:!0})}function Ce(t){document.body.dataset.loading=t.loading?"true":"false",document.body.dataset.statusOnly=t.statusOnly?"true":"false"}function gi(t){const e=(Number.isFinite(t.available)?t.available:0)-t.reserved,r=[],i=[];let n=0,o=!1;for(const a of t.items){const c=n+Math.max(0,a.width);!o&&c<=e?(n=c,r.push(a.id)):(o=!0,i.push(a.id))}return{visible:r,overflow:i}}function xi(t){const e=B.c(3),[r,i]=C.useState(null),n=C.useRef(null);let o,a;return e[0]!==t?(o=()=>{const c=t.current;if(!c||typeof ResizeObserver>"u")return;const l=new ResizeObserver(m=>{for(const f of m){const h=f.contentBoxSize?.[0]?.inlineSize??f.contentRect.width,u=Math.round(h);u!==n.current&&(n.current=u,i(u))}});return l.observe(c),()=>l.disconnect()},a=[t],e[0]=t,e[1]=o,e[2]=a):(o=e[1],a=e[2]),C.useEffect(o,a),r}class We{version;listeners=new Set;constructor(e){this.version=e}subscribe(e){return this.listeners.add(e),()=>this.listeners.delete(e)}openResource(e){return fetch(e.id,{cache:"no-store"})}close(){}receive(e){for(const r of this.listeners)r(e)}makeRequest(e){return{id:Si(),version:this.version,...e}}unwrap(e){if(e.error)throw new ue(e.error.code,e.error.message);if(!e.result)throw new ue("missingResult","Diff transport returned no result");return e.result}}class bi extends We{endpoint;constructor(e,r){super(r),this.endpoint=e}async request(e){const r=await fetch(this.endpoint,{method:"POST",cache:"no-store",headers:{"Content-Type":"application/json"},body:JSON.stringify(this.makeRequest(e))});if(!r.ok)throw new ue("requestFailed",`Diff transport request failed (${r.status})`);return this.unwrap(await r.json())}}class wi extends We{handler;constructor(e,r){super(r),this.handler=e,window.cmuxDiffBridge={receive:i=>this.receive(i)}}async request(e){return this.unwrap(await this.handler.postMessage(this.makeRequest(e)))}close(){delete window.cmuxDiffBridge}}class vi extends We{endpoint;socket=null;connecting=null;pending=new Map;constructor(e,r){super(r),this.endpoint=e}async request(e){const r=await this.connect(),i=this.makeRequest(e);return new Promise((n,o)=>{this.pending.set(i.id,{resolve:n,reject:o}),r.send(JSON.stringify(i))})}close(){this.socket?.close(),this.socket=null,this.connecting=null,this.rejectPending(new ue("closed","Diff transport closed"))}connect(){return this.socket?.readyState===WebSocket.OPEN?Promise.resolve(this.socket):this.connecting?this.connecting:(this.connecting=new Promise((e,r)=>{const i=new WebSocket(this.endpoint);i.addEventListener("open",()=>{this.socket=i,this.connecting=null,e(i)},{once:!0}),i.addEventListener("message",n=>this.handleMessage(n)),i.addEventListener("close",()=>{this.socket=null,this.connecting=null,this.rejectPending(new ue("closed","Diff transport closed"))}),i.addEventListener("error",()=>{this.connecting=null,r(new ue("connectFailed","Could not connect to diff transport"))},{once:!0})}),this.connecting)}handleMessage(e){if(typeof e.data!="string")return;const r=JSON.parse(e.data);if("id"in r){const i=this.pending.get(r.id);if(!i)return;this.pending.delete(r.id);try{i.resolve(this.unwrap(r))}catch(n){i.reject(n instanceof Error?n:new Error(String(n)))}return}this.receive(r)}rejectPending(e){for(const r of this.pending.values())r.reject(e);this.pending.clear()}}function yi(t){if(!t)return null;const e=window.webkit?.messageHandlers?.cmuxDiff;return t.kind==="webKit"&&e?new wi(e,t.protocolVersion):t.kind==="webSocket"?new vi(t.endpoint,t.protocolVersion):t.kind==="fetch"&&ki(window.location.protocol)?new bi(t.endpoint,t.protocolVersion):null}function ki(t){return t==="http:"||t==="https:"}class ue extends Error{code;constructor(e,r){super(r),this.name="DiffTransportError",this.code=e}}function Si(){return typeof crypto.randomUUID=="function"?crypto.randomUUID():`diff-${Date.now()}-${Math.random().toString(16).slice(2)}`}const ji=/\b(Android|iPhone|iPad|iPod|Mobile)\b/i;function Ci(t){return ji.test(t??"")?1:3}function Ii(){return Ci(typeof navigator>"u"?void 0:navigator.userAgent)}function Mi(t){return{poolSize:Ii(),workerFactory:()=>new Worker(t,{type:"module"})}}const lt=new Set,Pi="00000000-0000-0000-0000-000000000000",Ri=["82%","64%","76%","58%","70%","46%"],Li=["58%","88%","72%","94%","64%","82%","52%","78%"],Ti="./assets/pierre-diffs-1.2.7-trees-1.0.0-beta.4/worker-pool/worker-portable.js",jt="cmux.diffViewer.layout";function Fi(t,e){const r=t.payload??{};return{activeItemId:"",activeTreePath:"",comments:[],copyFeedback:"",draft:null,fileSearchOpen:!1,fileSearchRequest:0,filesWidth:252,filesVisible:!0,items:[],languages:["text"],metrics:null,options:{collapsed:!1,diffIndicators:"bars",expandUnchanged:!1,layout:Wi(r),lineNumbers:!0,showBackgrounds:!0,wordDiffs:!1,wordWrap:!1},optionsOpen:!1,status:e,treeSource:null}}function Bi(t,e){switch(e.type){case"append-items":{const r=e.items.map(n=>{Mn(n);const o=Ar(n,t.comments,t.draft);return t.options.collapsed?{...o,collapsed:!0}:o}),i=Rn(t.languages,r.flatMap(Pn));return{...t,activeItemId:t.activeItemId||r[0]?.id||"",items:[...t.items,...r],languages:i,status:t.status.loading?ie("",{loading:!1}):t.status}}case"reset-diff":return{...t,activeItemId:"",activeTreePath:"",draft:null,items:[],languages:["text"],metrics:null,status:e.status,treeSource:null};case"remove-comment":{const r=t.comments.filter(i=>i.id!==e.id);return{...t,comments:r,items:ye(t.items,r,t.draft)}}case"rename-item":return{...t,activeItemId:t.activeItemId===e.oldId?e.newId:t.activeItemId,draft:t.draft?.itemId===e.oldId?{...t.draft,itemId:e.newId}:t.draft,items:t.items.map(r=>r.id===e.oldId||r.id===e.newId?{...r,id:e.newId,version:(r.version??0)+1}:r)};case"set-active-item":return{...t,activeItemId:e.itemId,activeTreePath:e.treePath??t.activeTreePath};case"replace-comments":return{...t,comments:e.comments,draft:null,items:ye(t.items,e.comments,null)};case"set-copy-feedback":return{...t,copyFeedback:e.message};case"set-draft":return{...t,draft:e.draft,items:ye(t.items,t.comments,e.draft)};case"set-file-search-open":return{...t,fileSearchOpen:e.open,filesVisible:e.open?!0:t.filesVisible};case"request-file-search":return{...t,fileSearchOpen:!0,fileSearchRequest:t.fileSearchRequest+1,filesVisible:!0};case"set-files-width":return{...t,filesWidth:e.width};case"set-files-visible":return{...t,filesVisible:e.visible};case"set-metrics":return{...t,metrics:e.metrics};case"set-option":return e.key==="collapsed"?{...t,options:{...t.options,collapsed:!!e.value},items:t.items.map(r=>({...r,collapsed:!!e.value,version:(r.version??0)+1}))}:{...t,options:{...t.options,[e.key]:e.value}};case"set-options-open":return{...t,optionsOpen:e.open};case"set-status":return{...t,status:e.status};case"set-tree-source":{const r=e.source,i=t.activeItemId?r.treePathByItemId.get(t.activeItemId)??t.activeTreePath:t.activeTreePath;return{...t,activeTreePath:i,treeSource:r}}case"upsert-comment":{const i=t.comments.some(n=>n.id===e.comment.id)?t.comments.map(n=>n.id===e.comment.id?e.comment:n):[...t.comments,e.comment];return{...t,comments:i,items:ye(t.items,i,t.draft)}}}}function _i({config:t,initialStatus:e}){const r=t.payload??{},i=C.useMemo(()=>St(r.labels,{assertMissing:kt()}),[r.labels]),n=De(r.appearance),o=zn(r.transport),[a,c]=C.useState(Ie(r.sessionSource)?r.sessionSource:null),[l,m]=C.useState(a),f=C.useRef(new Map);a?.kind==="branch"&&!f.current.has(a.repoRoot)&&f.current.set(a.repoRoot,a);const[h,u]=C.useState(r.patchURL),[p,x]=C.useReducer(Bi,Fi(t,e)),d=Ve(p),g=C.useRef(null),w=C.useRef(0),b=C.useRef(null),v=C.useRef(null),y=C.useRef(null),I=Ei(t.assets?.workerModuleURL),M=Mi(I),L=di(p.options,n,p.languages),S=typeof r.repoRoot=="string"&&r.repoRoot!==""?r.repoRoot:null,k=Me(l??a)??S,P=$r()&&k!=null,R=Kr(r),D=Di({bridgeAvailable:P,dispatch:x,latestState:d,repoRoot:k}),z=ci(p.options,n);z.onGutterUtilityClick=D.onGutterUtilityClick;const T=C.useCallback(()=>{const j=v.current;return o?j?(v.current=null,o.request({method:"sessionClose",params:j}).then(()=>{}).catch(()=>{v.current||(v.current=j)})):typeof r.capabilityToken!="string"?Promise.resolve():It(o,{sessionId:Pi,capabilityToken:r.capabilityToken}):Promise.resolve()},[r.capabilityToken,o]),A=C.useCallback(j=>{j.kind==="branch"&&f.current.set(j.repoRoot,j),m(j)},[]);Bn(p),Tn(r,i,x,o),Sn(t,o,i,x,d,u,v,T,a,A),Xr(P?k:null,D.onLoaded),Nn(p.optionsOpen,x),Dn(p.fileSearchOpen,x);const V=(j,W)=>{const E=j.metadata;return E.kind==="draft"?s.jsx(xt,{labels:R,onCancel:()=>x({type:"set-draft",draft:null}),onSave:K=>D.saveDraft(W,K)}):s.jsx(Yr,{comment:E.comment,labels:R,onDelete:()=>D.remove(E.comment),onSaveMessage:K=>D.editMessage(E.comment,K,W.fileDiff)})},U=Number.isFinite(p.metrics?.completedAt)&&(p.metrics?.completedAt??0)>0,O=Or(p.items,p.comments,U),G=j=>{j.itemId!=null&&(j.anchor.state==="outdated"?g.current?.scrollTo({type:"item",id:j.itemId,align:"start",behavior:"smooth-auto"}):g.current?.scrollTo({type:"line",id:j.itemId,lineNumber:j.anchor.line,side:j.comment.side,align:"center",behavior:"smooth-auto"}),x({type:"set-active-item",itemId:j.itemId,treePath:p.treeSource?.treePathByItemId.get(j.itemId)}))},$=p.treeSource?.treePathByItemId.get(p.activeItemId)??p.activeTreePath,_=C.useCallback(j=>{const W=d.current,E=An(j,W.items);E&&(g.current?.scrollTo({type:"item",id:E,align:"start",behavior:"smooth-auto"}),x({type:"set-active-item",itemId:E,treePath:W.treeSource?.treePathByItemId.get(E)}))},[d]),H=C.useCallback(j=>{const W=d.current,E=$n(W.items,w.current,J=>g.current?.getInstance()?.getTopForItem(J)),K=On(E||W.activeItemId,W.items,j);K&&_(K)},[d,_]),N=C.useCallback(j=>{w.current=j},[]);_n(y,x,H);const Y=j=>{Ce(j),x({type:"set-status",status:j})},X=j=>{Gi(j),x({type:"set-option",key:"layout",value:j})};return s.jsxs("div",{id:"app","data-file-search-open":p.fileSearchOpen,children:[s.jsx(Hi,{config:t,transport:o,label:i,onCopyGitApply:async()=>{try{const j=await Ut(h,i,b.current);x({type:"set-copy-feedback",message:j})}catch{x({type:"set-copy-feedback",message:i("copyFailedGitApplyCommand")})}},onJump:_,onNavigate:j=>{Y(ie(i("loadingDiff"),{pending:!0})),T(),window.location.href=Vt(j)},activeSessionSource:l??a,onSelectSessionSource:j=>{const W=l??a,E=j.kind==="branch"&&(W?.kind!=="branch"||j.baseRef==null)?f.current.get(j.repoRoot)??j:j;E.kind==="branch"&&f.current.set(E.repoRoot,E);const K=ie(i("loadingDiff"),{pending:!0});Ce(K),x({type:"reset-diff",status:K}),u(void 0),T(),m(E),c(E)},onReload:async()=>{await T(),window.location.reload()},onSetLayout:X,dispatch:x,state:p}),s.jsxs("section",{id:"content",style:{"--cmux-diff-files-width":`${p.filesWidth}px`},children:[s.jsx(Ni,{label:i,onClose:()=>Ue(x),open:p.fileSearchOpen}),s.jsx(an,{commentEntries:O,commentLabels:R,hasDraft:p.draft!=null,label:i,onSelectComment:G,onSelectItem:_,selectedPath:$,dispatch:x,state:p}),s.jsx("main",{id:"viewer","aria-label":i("diffViewer"),children:p.items.length>0?s.jsxs(Tt,{poolOptions:M,highlighterOptions:L,children:[s.jsx(Ui,{codeViewRef:g,highlighterOptions:L}),s.jsx(Ft,{ref:g,className:"code-view-root",containerRef:y,items:p.items,onScroll:N,options:z,renderHeaderMetadata:j=>s.jsx(xr,{fileDiff:j.fileDiff,label:i}),renderAnnotation:(j,W)=>V(j,W)})]}):null}),s.jsx(pn,{label:i,status:p.status})]}),s.jsx("textarea",{ref:b,"aria-hidden":"true",readOnly:!0,tabIndex:-1,className:"copy-fallback-textarea"})]})}function Ni(t){const e=B.c(8),{label:r,onClose:i,open:n}=t;if(!n)return null;let o;e[0]!==r?(o=r("hideFileSearch"),e[0]=r,e[1]=o):o=e[1];let a;e[2]!==r?(a=r("hideFileSearch"),e[2]=r,e[3]=a):a=e[3];let c;return e[4]!==i||e[5]!==o||e[6]!==a?(c=s.jsx("button",{id:"files-sidebar-backdrop",type:"button","aria-controls":"files-sidebar","aria-label":o,title:a,onClick:i}),e[4]=i,e[5]=o,e[6]=a,e[7]=c):c=e[7],c}function Ei(t){return new URL(t||Ti,window.location.href)}function Di(t){const e=B.c(26),{bridgeAvailable:r,dispatch:i,latestState:n,repoRoot:o}=t,a=Ve(o);let c;e[0]!==i?(c=b=>i({type:"replace-comments",comments:b}),e[0]=i,e[1]=c):c=e[1];const l=c;let m;e[2]!==i?(m=(b,v)=>{const y=b.side==="deletions"?"deletions":"additions";i({type:"set-draft",draft:{itemId:v.item.id,side:y,startLine:Math.min(b.start,b.end),endLine:Math.max(b.start,b.end)}})},e[2]=i,e[3]=m):m=e[3];const f=m;let h;e[4]!==a||e[5]!==r||e[6]!==i||e[7]!==n||e[8]!==o?(h=(b,v)=>{const y=n.current.draft;if(y==null||y.itemId!==b.id||v.trim()==="")return;const I={filePath:pe(b.fileDiff,""),side:y.side,startLine:y.startLine,endLine:y.endLine,lineText:Ae(b.fileDiff,y.side,y.endLine)??"",message:v},M={...I,submissionText:it(I,b.fileDiff)};(r&&o!=null?rt(o,M):Promise.resolve($i(M))).then(S=>{a.current===o&&(i({type:"upsert-comment",comment:S}),i({type:"set-draft",draft:null}))}).catch(Oi)},e[4]=a,e[5]=r,e[6]=i,e[7]=n,e[8]=o,e[9]=h):h=e[9];const u=h;let p;e[10]!==a||e[11]!==r||e[12]!==i||e[13]!==o?(p=(b,v,y)=>{if(v.trim()==="")return;const I={...b,message:v,updatedAt:new Date().toISOString()},M={...I,submissionText:it(I,y)};(r&&o!=null?rt(o,M):Promise.resolve(M)).then(S=>{a.current===o&&i({type:"upsert-comment",comment:S})}).catch(Ai)},e[10]=a,e[11]=r,e[12]=i,e[13]=o,e[14]=p):p=e[14];const x=p;let d;e[15]!==a||e[16]!==r||e[17]!==i||e[18]!==o?(d=b=>{const v=o;r&&o!=null&&Vr(o,b.id).catch(zi),a.current===v&&i({type:"remove-comment",id:b.id})},e[15]=a,e[16]=r,e[17]=i,e[18]=o,e[19]=d):d=e[19];const g=d;let w;return e[20]!==x||e[21]!==f||e[22]!==l||e[23]!==g||e[24]!==u?(w={editMessage:x,onGutterUtilityClick:f,onLoaded:l,remove:g,saveDraft:u},e[20]=x,e[21]=f,e[22]=l,e[23]=g,e[24]=u,e[25]=w):w=e[25],w}function zi(t){return console.warn("cmux diff comment delete failed",t)}function Ai(t){return console.warn("cmux diff comment edit failed",t)}function Oi(t){return console.warn("cmux diff comment save failed",t)}function $i(t){const e=new Date().toISOString();return{...t,id:crypto.randomUUID(),createdAt:e,updatedAt:e}}function Wi(t){const e=Ct(t.layout);return t.layoutSource==="explicit"&&e?e:Vi()??e??"unified"}function Vi(){try{return Ct(window.localStorage.getItem(jt))}catch{return null}}function Gi(t){try{window.localStorage.setItem(jt,t)}catch{}}function Ct(t){return t==="split"||t==="unified"?t:null}function Ui(t){const{codeViewRef:e,highlighterOptions:r}=t;return mn(r,e),null}function Hi(t){const e=B.c(70),{activeSessionSource:r,config:i,dispatch:n,label:o,onCopyGitApply:a,onJump:c,onNavigate:l,onSelectSessionSource:m,onReload:f,onSetLayout:h,state:u,transport:p}=t;let x;e[0]!==i.payload?(x=i.payload??{},e[0]=i.payload,e[1]=x):x=e[1];const d=x,g=typeof d.externalURL=="string"&&d.externalURL.length>0?d.externalURL:null,w=C.useRef(null),b=xi(w);let v;if(e[2]!==g||e[3]!==d||e[4]!==b){const N=[{id:"files-toggle",width:Fe},{id:"layout-toggle",width:Fe},...g?[{id:"external-link",width:Fe}]:[]];v=b==null?new Set:new Set(gi({available:b,reserved:qi+(Yi(d)?Ki:0),items:N}).overflow),e[2]=g,e[3]=d,e[4]=b,e[5]=v}else v=e[5];const y=v,I=!y.has("files-toggle"),M=!y.has("layout-toggle"),L=g!=null&&!y.has("external-link");let S;e[6]!==r||e[7]!==o||e[8]!==l||e[9]!==m||e[10]!==d||e[11]!==p?(S=s.jsx(Xi,{activeSessionSource:r,label:o,onNavigate:l,onSelectSessionSource:m,payload:d,transport:p}),e[6]=r,e[7]=o,e[8]=l,e[9]=m,e[10]=d,e[11]=p,e[12]=S):S=e[12];let k;e[13]!==n?(k=()=>n({type:"set-file-search-open",open:!0}),e[13]=n,e[14]=k):k=e[14];let P;e[15]!==o||e[16]!==c||e[17]!==u.activeItemId||e[18]!==u.fileSearchOpen||e[19]!==u.items||e[20]!==k?(P=s.jsx("div",{className:"toolbar-middle flex min-w-0 flex-1 items-center justify-center gap-1.5",children:s.jsx(nn,{items:u.items,label:o,onJump:c,onOpenSearch:k,searchOpen:u.fileSearchOpen,selectedItemId:u.activeItemId})}),e[15]=o,e[16]=c,e[17]=u.activeItemId,e[18]=u.fileSearchOpen,e[19]=u.items,e[20]=k,e[21]=P):P=e[21];let R;e[22]!==g||e[23]!==o||e[24]!==L?(R=L?s.jsx("a",{id:"external-link",className:"toolbar-icon",href:g??void 0,target:"_blank",rel:"noreferrer",title:o("openSourceURL"),"aria-label":o("openSourceURL"),children:s.jsx(re,{name:"external"})}):null,e[22]=g,e[23]=o,e[24]=L,e[25]=R):R=e[25];let D;e[26]!==o||e[27]!==h||e[28]!==M||e[29]!==u.options?(D=M?s.jsx("button",{id:"layout-toggle",className:"toolbar-icon",type:"button",title:u.options.layout==="split"?o("switchToUnifiedDiff"):o("switchToSplitDiff"),"aria-label":u.options.layout==="split"?o("switchToUnifiedDiff"):o("switchToSplitDiff"),onClick:()=>h(u.options.layout==="split"?"unified":"split"),children:s.jsx(re,{name:u.options.layout})}):null,e[26]=o,e[27]=h,e[28]=M,e[29]=u.options,e[30]=D):D=e[30];let z;e[31]!==o?(z=o("options"),e[31]=o,e[32]=z):z=e[32];let T;e[33]!==o?(T=o("options"),e[33]=o,e[34]=T):T=e[34];let A;e[35]!==n||e[36]!==u.optionsOpen?(A=()=>n({type:"set-options-open",open:!u.optionsOpen}),e[35]=n,e[36]=u.optionsOpen,e[37]=A):A=e[37];let V;e[38]===Symbol.for("react.memo_cache_sentinel")?(V=s.jsx(re,{name:"dots"}),e[38]=V):V=e[38];let U;e[39]!==u.optionsOpen||e[40]!==A||e[41]!==z||e[42]!==T?(U=s.jsx("button",{id:"options-button",className:"toolbar-icon",type:"button",title:z,"aria-label":T,"aria-expanded":u.optionsOpen,"aria-controls":"options-menu",onClick:A,children:V}),e[39]=u.optionsOpen,e[40]=A,e[41]=z,e[42]=T,e[43]=U):U=e[43];let O;e[44]!==n||e[45]!==o||e[46]!==I||e[47]!==u.filesVisible?(O=I?s.jsx("button",{id:"files-toggle",className:"toolbar-icon",type:"button",title:u.filesVisible?o("hideFiles"):o("showFiles"),"aria-label":u.filesVisible?o("hideFiles"):o("showFiles"),"aria-pressed":u.filesVisible,onClick:()=>n({type:"set-files-visible",visible:!u.filesVisible}),children:s.jsx(re,{name:"files"})}):null,e[44]=n,e[45]=o,e[46]=I,e[47]=u.filesVisible,e[48]=O):O=e[48];let G;e[49]!==u.copyFeedback?(G=s.jsx("span",{id:"copy-feedback",className:"visually-hidden","aria-live":"polite",children:u.copyFeedback}),e[49]=u.copyFeedback,e[50]=G):G=e[50];let $;e[51]!==U||e[52]!==O||e[53]!==G||e[54]!==R||e[55]!==D?($=s.jsxs("div",{className:"toolbar-actions flex items-center gap-1.5",children:[R,D,U,O,G]}),e[51]=U,e[52]=O,e[53]=G,e[54]=R,e[55]=D,e[56]=$):$=e[56];let _;e[57]!==n||e[58]!==g||e[59]!==o||e[60]!==a||e[61]!==f||e[62]!==h||e[63]!==u?(_=u.optionsOpen?s.jsx(on,{dispatch:n,externalURL:g,label:o,onCopyGitApply:a,onReload:f,onSetLayout:h,state:u}):null,e[57]=n,e[58]=g,e[59]=o,e[60]=a,e[61]=f,e[62]=h,e[63]=u,e[64]=_):_=e[64];let H;return e[65]!==$||e[66]!==_||e[67]!==S||e[68]!==P?(H=s.jsxs("header",{id:"toolbar",ref:w,children:[S,P,$,_]}),e[65]=$,e[66]=_,e[67]=S,e[68]=P,e[69]=H):H=e[69],H}const Fe=28,qi=248,Ki=60;function Yi(t){return Array.isArray(t?.repoOptions)&&t.repoOptions.length>=2}function Xi(t){const e=B.c(31),{activeSessionSource:r,label:i,onNavigate:n,onSelectSessionSource:o,payload:a,transport:c}=t;let l;e[0]!==i?(l=i("diffTarget"),e[0]=i,e[1]=l):l=e[1];const m=a.sourceOptions;let f;e[2]!==r||e[3]!==o?(f=g=>o(Cn(g,r)),e[2]=r,e[3]=o,e[4]=f):f=e[4];let h;e[5]!==r?(h=jn(r),e[5]=r,e[6]=h):h=e[6];let u;e[7]!==n||e[8]!==a.sourceOptions||e[9]!==l||e[10]!==f||e[11]!==h?(u=s.jsx(Ne,{ariaLabel:l,fallbackValue:"",id:"source-select",options:m,onNavigate:n,onSelectSessionSource:f,selectedValue:h}),e[7]=n,e[8]=a.sourceOptions,e[9]=l,e[10]=f,e[11]=h,e[12]=u):u=e[12];let p;e[13]!==r||e[14]!==i||e[15]!==n||e[16]!==o||e[17]!==a.repoOptions||e[18]!==a.repoRoot?(p=r?.kind!=="patch"?s.jsx(Ne,{ariaLabel:i("repoPath"),fallbackValue:a.repoRoot??"",id:"repo-select",options:a.repoOptions,onNavigate:n,onSelectSessionSource:g=>o(In(g,r)),selectedValue:Me(r)}):null,e[13]=r,e[14]=i,e[15]=n,e[16]=o,e[17]=a.repoOptions,e[18]=a.repoRoot,e[19]=p):p=e[19];let x;e[20]!==r||e[21]!==i||e[22]!==n||e[23]!==o||e[24]!==a||e[25]!==c?(x=s.jsx(Ji,{activeSessionSource:r,label:i,onNavigate:n,onSelectSessionSource:o,payload:a,transport:c}),e[20]=r,e[21]=i,e[22]=n,e[23]=o,e[24]=a,e[25]=c,e[26]=x):x=e[26];let d;return e[27]!==u||e[28]!==p||e[29]!==x?(d=s.jsxs("div",{className:"toolbar-left flex min-w-0 items-center gap-1.5",children:[u,p,x]}),e[27]=u,e[28]=p,e[29]=x,e[30]=d):d=e[30],d}function Ji(t){const e=B.c(29),{activeSessionSource:r,label:i,onNavigate:n,onSelectSessionSource:o,payload:a,transport:c}=t;if(r?.kind==="branch"&&c){const u=r.baseRef??"";let p,x,d;e[0]!==r.repoRoot||e[1]!==a.capabilityToken||e[2]!==u?(d={repoRoot:r.repoRoot,capabilityToken:a.capabilityToken,headRef:"HEAD",currentRef:u,currentReason:"",confidence:"high",aheadBehind:null,refsURL:"typed://branch-list",regenerateURLTemplate:"typed://branch-change/{ref}"},p=Ye,x=qe(d),e[0]=r.repoRoot,e[1]=a.capabilityToken,e[2]=u,e[3]=p,e[4]=x,e[5]=d):(p=e[3],x=e[4],d=e[5]);let g;e[6]!==r.repoRoot||e[7]!==o?(g=b=>o({kind:"branch",repoRoot:r.repoRoot,baseRef:b}),e[6]=r.repoRoot,e[7]=o,e[8]=g):g=e[8];let w;return e[9]!==p||e[10]!==i||e[11]!==n||e[12]!==x||e[13]!==g||e[14]!==c||e[15]!==d?(w=s.jsx(p,{label:i,onNavigate:n,onSelectBranchBase:g,picker:d,transport:c},x),e[9]=p,e[10]=i,e[11]=n,e[12]=x,e[13]=g,e[14]=c,e[15]=d,e[16]=w):w=e[16],w}let l;if(e[17]!==i||e[18]!==n||e[19]!==a||e[20]!==c){l=Symbol.for("react.early_return_sentinel");e:{const u=Qi(a);if(u){l=s.jsx(Ye,{label:i,onNavigate:n,picker:u,transport:c},qe(u));break e}}e[17]=i,e[18]=n,e[19]=a,e[20]=c,e[21]=l}else l=e[21];if(l!==Symbol.for("react.early_return_sentinel"))return l;let m;e[22]!==i?(m=i("branchBase"),e[22]=i,e[23]=m):m=e[23];const f=a.branchBaseRef??"";let h;return e[24]!==n||e[25]!==a.baseOptions||e[26]!==m||e[27]!==f?(h=s.jsx(Ne,{ariaLabel:m,fallbackValue:f,id:"base-select",options:a.baseOptions,onNavigate:n}),e[24]=n,e[25]=a.baseOptions,e[26]=m,e[27]=f,e[28]=h):h=e[28],h}function Qi(t){const e=t?.branchPicker;return Zi(e)?e:null}function Zi(t){return!!(t&&typeof t=="object"&&typeof t.refsURL=="string"&&t.refsURL!==""&&typeof t.regenerateURLTemplate=="string"&&t.regenerateURLTemplate!==""&&typeof t.currentRef=="string"&&typeof t.headRef=="string")}function Ne(t){const e=B.c(17),{ariaLabel:r,fallbackValue:i,id:n,onNavigate:o,onSelectSessionSource:a,options:c,selectedValue:l}=t;if(!Array.isArray(c)||c.length<2)return null;let m;e[0]!==c||e[1]!==l?(m=c.find(d=>d.value===l)??c.find(rn)??c.find(tn),e[0]=c,e[1]=l,e[2]=m):m=e[2];const f=m,h=f?.value??i;let u;e[3]!==i||e[4]!==o||e[5]!==a||e[6]!==c||e[7]!==f?.value?(u=d=>{const g=c.find(w=>w.value===d.currentTarget.value);if(Ie(g?.sessionSource)&&a){a(g.sessionSource);return}if(!g?.url){d.currentTarget.value=f?.value??i;return}o(g.url)},e[3]=i,e[4]=o,e[5]=a,e[6]=c,e[7]=f?.value,e[8]=u):u=e[8];let p;e[9]!==c?(p=c.map(en),e[9]=c,e[10]=p):p=e[10];let x;return e[11]!==r||e[12]!==n||e[13]!==h||e[14]!==u||e[15]!==p?(x=s.jsx("select",{id:n,"aria-label":r,value:h,title:r,onChange:u,children:p}),e[11]=r,e[12]=n,e[13]=h,e[14]=u,e[15]=p,e[16]=x):x=e[16],x}function en(t){return s.jsx("option",{value:t.value,disabled:t.disabled||!t.url&&!Ie(t.sessionSource),title:t.message,children:t.label},t.value)}function tn(t){return!t.disabled}function rn(t){return t.selected}function nn(t){const e=B.c(31),{items:r,label:i,onJump:n,onOpenSearch:o,searchOpen:a,selectedItemId:c}=t;if(r.length===0)return null;if(r.length>500){let x;e[0]!==i?(x=i("jumpToFile"),e[0]=i,e[1]=x):x=e[1];let d;e[2]!==i?(d=i("jumpToFile"),e[2]=i,e[3]=d):d=e[3];let g;e[4]!==i?(g=i("jumpToFile"),e[4]=i,e[5]=g):g=e[5];let w;return e[6]!==o||e[7]!==a||e[8]!==x||e[9]!==d||e[10]!==g?(w=s.jsx("button",{id:"jump-search-button",type:"button","aria-controls":"files-sidebar","aria-expanded":a,"aria-label":x,title:d,onClick:o,children:g}),e[6]=o,e[7]=a,e[8]=x,e[9]=d,e[10]=g,e[11]=w):w=e[11],w}let l;e[12]!==i?(l=i("jumpToFile"),e[12]=i,e[13]=l):l=e[13];let m;e[14]!==n?(m=x=>n(x.currentTarget.value),e[14]=n,e[15]=m):m=e[15];let f;e[16]!==i?(f=i("jumpToFile"),e[16]=i,e[17]=f):f=e[17];let h;e[18]!==f?(h=s.jsx("option",{value:"",children:f}),e[18]=f,e[19]=h):h=e[19];let u;if(e[20]!==r||e[21]!==i){let x;e[23]!==i?(x=d=>s.jsx("option",{value:d.id,children:pe(d.fileDiff,i("untitled"))},d.id),e[23]=i,e[24]=x):x=e[24],u=r.map(x),e[20]=r,e[21]=i,e[22]=u}else u=e[22];let p;return e[25]!==c||e[26]!==l||e[27]!==m||e[28]!==h||e[29]!==u?(p=s.jsxs("select",{id:"jump-select","aria-label":l,value:c,onChange:m,children:[h,u]}),e[25]=c,e[26]=l,e[27]=m,e[28]=h,e[29]=u,e[30]=p):p=e[30],p}function on(t){const e=B.c(137),{dispatch:r,externalURL:i,label:n,onCopyGitApply:o,onReload:a,onSetLayout:c,state:l}=t;let m;e[0]!==r||e[1]!==l.options?(m=F=>r({type:"set-option",key:F,value:!l.options[F]}),e[0]=r,e[1]=l.options,e[2]=m):m=e[2];const f=m;let h;e[3]!==n?(h=n("options"),e[3]=n,e[4]=h):h=e[4];let u;e[5]!==n?(u=n("refresh"),e[5]=n,e[6]=u):u=e[6];let p;e[7]!==a||e[8]!==u?(p=s.jsx(oe,{icon:"refresh",label:u,onClick:a}),e[7]=a,e[8]=u,e[9]=p):p=e[9];let x;e[10]!==n||e[11]!==l.options.wordWrap?(x=l.options.wordWrap?n("disableWordWrap"):n("enableWordWrap"),e[10]=n,e[11]=l.options.wordWrap,e[12]=x):x=e[12];let d;e[13]!==f?(d=()=>f("wordWrap"),e[13]=f,e[14]=d):d=e[14];let g;e[15]!==l.options.wordWrap||e[16]!==x||e[17]!==d?(g=s.jsx(oe,{checked:l.options.wordWrap,icon:"wrap",label:x,onClick:d}),e[15]=l.options.wordWrap,e[16]=x,e[17]=d,e[18]=g):g=e[18];const w=l.options.collapsed?"expand":"collapse";let b;e[19]!==n||e[20]!==l.options.collapsed?(b=l.options.collapsed?n("expandAllDiffs"):n("collapseAllDiffs"),e[19]=n,e[20]=l.options.collapsed,e[21]=b):b=e[21];let v;e[22]!==f?(v=()=>f("collapsed"),e[22]=f,e[23]=v):v=e[23];let y;e[24]!==l.options.collapsed||e[25]!==v||e[26]!==w||e[27]!==b?(y=s.jsx(oe,{checked:l.options.collapsed,icon:w,label:b,onClick:v}),e[24]=l.options.collapsed,e[25]=v,e[26]=w,e[27]=b,e[28]=y):y=e[28];let I;e[29]===Symbol.for("react.memo_cache_sentinel")?(I=s.jsx("div",{className:"menu-separator"}),e[29]=I):I=e[29];let M;e[30]!==n||e[31]!==l.options.layout?(M=l.options.layout==="split"?n("switchToUnifiedDiff"):n("switchToSplitDiff"),e[30]=n,e[31]=l.options.layout,e[32]=M):M=e[32];let L;e[33]!==c||e[34]!==l.options.layout?(L=()=>c(l.options.layout==="split"?"unified":"split"),e[33]=c,e[34]=l.options.layout,e[35]=L):L=e[35];let S;e[36]!==l.options.layout||e[37]!==M||e[38]!==L?(S=s.jsx(oe,{icon:l.options.layout,label:M,onClick:L}),e[36]=l.options.layout,e[37]=M,e[38]=L,e[39]=S):S=e[39];let k;e[40]!==i||e[41]!==n?(k=i?s.jsx(oe,{icon:"external",label:n("openSourceURL"),onClick:()=>window.open(i,"_blank","noreferrer")}):null,e[40]=i,e[41]=n,e[42]=k):k=e[42];let P;e[43]!==n||e[44]!==l.filesVisible?(P=l.filesVisible?n("hideFiles"):n("showFiles"),e[43]=n,e[44]=l.filesVisible,e[45]=P):P=e[45];let R;e[46]!==r||e[47]!==l.filesVisible?(R=()=>r({type:"set-files-visible",visible:!l.filesVisible}),e[46]=r,e[47]=l.filesVisible,e[48]=R):R=e[48];let D;e[49]!==l.filesVisible||e[50]!==P||e[51]!==R?(D=s.jsx(oe,{checked:l.filesVisible,icon:"files",label:P,onClick:R}),e[49]=l.filesVisible,e[50]=P,e[51]=R,e[52]=D):D=e[52];let z;e[53]!==n||e[54]!==l.options.expandUnchanged?(z=l.options.expandUnchanged?n("collapseUnchangedContext"):n("expandUnchangedContext"),e[53]=n,e[54]=l.options.expandUnchanged,e[55]=z):z=e[55];let T;e[56]!==f?(T=()=>f("expandUnchanged"),e[56]=f,e[57]=T):T=e[57];let A;e[58]!==l.options.expandUnchanged||e[59]!==z||e[60]!==T?(A=s.jsx(oe,{checked:l.options.expandUnchanged,icon:"document",label:z,onClick:T}),e[58]=l.options.expandUnchanged,e[59]=z,e[60]=T,e[61]=A):A=e[61];let V;e[62]!==n||e[63]!==l.options.showBackgrounds?(V=l.options.showBackgrounds?n("hideBackgrounds"):n("showBackgrounds"),e[62]=n,e[63]=l.options.showBackgrounds,e[64]=V):V=e[64];let U;e[65]!==f?(U=()=>f("showBackgrounds"),e[65]=f,e[66]=U):U=e[66];let O;e[67]!==l.options.showBackgrounds||e[68]!==V||e[69]!==U?(O=s.jsx(oe,{checked:l.options.showBackgrounds,icon:"background",label:V,onClick:U}),e[67]=l.options.showBackgrounds,e[68]=V,e[69]=U,e[70]=O):O=e[70];let G;e[71]!==n||e[72]!==l.options.lineNumbers?(G=l.options.lineNumbers?n("hideLineNumbers"):n("showLineNumbers"),e[71]=n,e[72]=l.options.lineNumbers,e[73]=G):G=e[73];let $;e[74]!==f?($=()=>f("lineNumbers"),e[74]=f,e[75]=$):$=e[75];let _;e[76]!==l.options.lineNumbers||e[77]!==G||e[78]!==$?(_=s.jsx(oe,{checked:l.options.lineNumbers,icon:"numbers",label:G,onClick:$}),e[76]=l.options.lineNumbers,e[77]=G,e[78]=$,e[79]=_):_=e[79];let H;e[80]!==n||e[81]!==l.options.wordDiffs?(H=l.options.wordDiffs?n("disableWordDiffs"):n("enableWordDiffs"),e[80]=n,e[81]=l.options.wordDiffs,e[82]=H):H=e[82];let N;e[83]!==f?(N=()=>f("wordDiffs"),e[83]=f,e[84]=N):N=e[84];let Y;e[85]!==l.options.wordDiffs||e[86]!==H||e[87]!==N?(Y=s.jsx(oe,{checked:l.options.wordDiffs,icon:"word",label:H,onClick:N}),e[85]=l.options.wordDiffs,e[86]=H,e[87]=N,e[88]=Y):Y=e[88];let X;e[89]===Symbol.for("react.memo_cache_sentinel")?(X=s.jsx(re,{name:"bars"}),e[89]=X):X=e[89];let j;e[90]!==n?(j=n("indicatorStyle"),e[90]=n,e[91]=j):j=e[91];let W;e[92]!==j?(W=s.jsx("span",{className:"menu-label",children:j}),e[92]=j,e[93]=W):W=e[93];let E;e[94]!==n?(E=n("bars"),e[94]=n,e[95]=E):E=e[95];let K;e[96]!==E?(K={value:"bars",icon:"bars",label:E},e[96]=E,e[97]=K):K=e[97];let J;e[98]!==n?(J=n("classic"),e[98]=n,e[99]=J):J=e[99];let se;e[100]!==J?(se={value:"classic",icon:"classic",label:J},e[100]=J,e[101]=se):se=e[101];let le;e[102]!==n?(le=n("none"),e[102]=n,e[103]=le):le=e[103];let Q;e[104]!==le?(Q={value:"none",icon:"eye",label:le},e[104]=le,e[105]=Q):Q=e[105];let ce;e[106]!==K||e[107]!==se||e[108]!==Q?(ce=[K,se,Q],e[106]=K,e[107]=se,e[108]=Q,e[109]=ce):ce=e[109];let de;e[110]!==r||e[111]!==l.options.diffIndicators||e[112]!==ce?(de=s.jsx("span",{className:"menu-segment-controls",children:ce.map(F=>s.jsx("button",{type:"button",className:"segment-button",title:F.label,"aria-label":F.label,"aria-pressed":l.options.diffIndicators===F.value,onClick:()=>r({type:"set-option",key:"diffIndicators",value:F.value}),children:s.jsx(re,{name:F.icon})},F.value))}),e[110]=r,e[111]=l.options.diffIndicators,e[112]=ce,e[113]=de):de=e[113];let Z;e[114]!==W||e[115]!==de?(Z=s.jsxs("div",{className:"menu-item menu-segment",children:[X,W,de]}),e[114]=W,e[115]=de,e[116]=Z):Z=e[116];let ne;e[117]===Symbol.for("react.memo_cache_sentinel")?(ne=s.jsx("div",{className:"menu-separator"}),e[117]=ne):ne=e[117];let ee;e[118]!==n?(ee=n("copyGitApplyCommand"),e[118]=n,e[119]=ee):ee=e[119];let te;e[120]!==o||e[121]!==ee?(te=s.jsx(oe,{icon:"clipboard",label:ee,onClick:o}),e[120]=o,e[121]=ee,e[122]=te):te=e[122];let fe;return e[123]!==y||e[124]!==S||e[125]!==k||e[126]!==D||e[127]!==h||e[128]!==A||e[129]!==O||e[130]!==_||e[131]!==Y||e[132]!==p||e[133]!==Z||e[134]!==te||e[135]!==g?(fe=s.jsxs("div",{id:"options-menu","aria-label":h,children:[p,g,y,I,S,k,D,A,O,_,Y,Z,ne,te]}),e[123]=y,e[124]=S,e[125]=k,e[126]=D,e[127]=h,e[128]=A,e[129]=O,e[130]=_,e[131]=Y,e[132]=p,e[133]=Z,e[134]=te,e[135]=g,e[136]=fe):fe=e[136],fe}function oe(t){const e=B.c(14),{checked:r,icon:i,label:n,onClick:o}=t,a=r??void 0;let c;e[0]!==i?(c=s.jsx(re,{name:i}),e[0]=i,e[1]=c):c=e[1];let l;e[2]!==n?(l=s.jsx("span",{className:"menu-label",children:n}),e[2]=n,e[3]=l):l=e[3];let m;e[4]!==r?(m=r?s.jsx(re,{name:"check"}):null,e[4]=r,e[5]=m):m=e[5];let f;e[6]!==m?(f=s.jsx("span",{className:"menu-check",children:m}),e[6]=m,e[7]=f):f=e[7];let h;return e[8]!==o||e[9]!==a||e[10]!==c||e[11]!==l||e[12]!==f?(h=s.jsxs("button",{type:"button",className:"menu-item","aria-pressed":a,onClick:o,children:[c,l,f]}),e[8]=o,e[9]=a,e[10]=c,e[11]=l,e[12]=f,e[13]=h):h=e[13],h}function an(t){const e=B.c(70),{commentEntries:r,commentLabels:i,dispatch:n,hasDraft:o,label:a,onSelectComment:c,onSelectItem:l,selectedPath:m,state:f}=t,h=C.useRef(null);let u;e[0]!==n?(u=N=>{const Y=h.current;if(!Y)return;const X=document.documentElement.clientWidth||window.innerWidth,j=Math.max(220,Math.min(520,Math.floor(X*.55))),W=Math.max(180,Math.min(j,Math.round(Y.startWidth-(N-Y.startX))));n({type:"set-files-width",width:W})},e[0]=n,e[1]=u):u=e[1];const p=u;let x;e[2]!==a?(x=a("changedFiles"),e[2]=a,e[3]=x):x=e[3];const d=!f.filesVisible,g=!f.filesVisible;let w;e[4]!==a?(w=a("files"),e[4]=a,e[5]=w):w=e[5];let b;e[6]!==f.filesWidth?(b=N=>{h.current={startWidth:f.filesWidth,startX:N.clientX},N.currentTarget.setPointerCapture(N.pointerId)},e[6]=f.filesWidth,e[7]=b):b=e[7];let v,y;e[8]!==p?(v=N=>p(N.clientX),y=N=>{p(N.clientX),h.current=null,N.currentTarget.releasePointerCapture(N.pointerId)},e[8]=p,e[9]=v,e[10]=y):(v=e[9],y=e[10]);let I;e[11]===Symbol.for("react.memo_cache_sentinel")?(I=()=>{h.current=null},e[11]=I):I=e[11];let M;e[12]!==n||e[13]!==f.filesWidth?(M=N=>{if(N.key!=="ArrowLeft"&&N.key!=="ArrowRight")return;N.preventDefault();const Y=N.key==="ArrowLeft"?20:-20;n({type:"set-files-width",width:Math.max(180,Math.min(520,f.filesWidth+Y))})},e[12]=n,e[13]=f.filesWidth,e[14]=M):M=e[14];let L;e[15]!==M||e[16]!==w||e[17]!==b||e[18]!==v||e[19]!==y?(L=s.jsx("button",{id:"files-resize-handle","aria-label":w,type:"button",tabIndex:0,onPointerDown:b,onPointerMove:v,onPointerUp:y,onPointerCancel:I,onKeyDown:M}),e[15]=M,e[16]=w,e[17]=b,e[18]=v,e[19]=y,e[20]=L):L=e[20];let S;e[21]!==a?(S=a("files"),e[21]=a,e[22]=S):S=e[22];let k;e[23]!==S?(k=s.jsx("span",{children:S}),e[23]=S,e[24]=k):k=e[24];const P=f.treeSource?.pathCount??0;let R;e[25]!==P?(R=s.jsx("span",{id:"files-count",children:P}),e[25]=P,e[26]=R):R=e[26];let D;e[27]!==k||e[28]!==R?(D=s.jsxs("span",{id:"files-title",children:[k,R]}),e[27]=k,e[28]=R,e[29]=D):D=e[29];let z;e[30]!==a||e[31]!==f.fileSearchOpen?(z=f.fileSearchOpen?a("hideFileSearch"):a("showFileSearch"),e[30]=a,e[31]=f.fileSearchOpen,e[32]=z):z=e[32];let T;e[33]!==a||e[34]!==f.fileSearchOpen?(T=f.fileSearchOpen?a("hideFileSearch"):a("showFileSearch"),e[33]=a,e[34]=f.fileSearchOpen,e[35]=T):T=e[35];const A=!f.treeSource;let V;e[36]!==n||e[37]!==f.fileSearchOpen?(V=()=>f.fileSearchOpen?Ue(n):n({type:"set-file-search-open",open:!0}),e[36]=n,e[37]=f.fileSearchOpen,e[38]=V):V=e[38];let U;e[39]===Symbol.for("react.memo_cache_sentinel")?(U=s.jsx(re,{name:"search"}),e[39]=U):U=e[39];let O;e[40]!==f.fileSearchOpen||e[41]!==z||e[42]!==T||e[43]!==A||e[44]!==V?(O=s.jsx("span",{id:"files-header-actions",children:s.jsx("button",{id:"file-search-toggle",type:"button",title:z,"aria-label":T,"aria-pressed":f.fileSearchOpen,disabled:A,onClick:V,children:U})}),e[40]=f.fileSearchOpen,e[41]=z,e[42]=T,e[43]=A,e[44]=V,e[45]=O):O=e[45];let G;e[46]!==D||e[47]!==O?(G=s.jsxs("div",{id:"files-header",children:[D,O]}),e[46]=D,e[47]=O,e[48]=G):G=e[48];let $;e[49]!==a||e[50]!==l||e[51]!==m||e[52]!==f.fileSearchOpen||e[53]!==f.fileSearchRequest||e[54]!==f.status||e[55]!==f.treeSource?($=s.jsx("div",{id:"file-list",children:f.treeSource?s.jsx(sn,{fileSearchOpen:f.fileSearchOpen,fileSearchRequest:f.fileSearchRequest,label:a,onSelectItem:l,selectedPath:m,source:f.treeSource}):f.status.loading||f.status.pending?s.jsx(cn,{}):s.jsx("div",{className:"visually-hidden",children:f.status.message})}),e[49]=a,e[50]=l,e[51]=m,e[52]=f.fileSearchOpen,e[53]=f.fileSearchRequest,e[54]=f.status,e[55]=f.treeSource,e[56]=$):$=e[56];let _;e[57]!==r||e[58]!==i||e[59]!==o||e[60]!==c?(_=s.jsx(Hr,{entries:r,hasDraft:o,labels:i,onSelect:c}),e[57]=r,e[58]=i,e[59]=o,e[60]=c,e[61]=_):_=e[61];let H;return e[62]!==L||e[63]!==x||e[64]!==G||e[65]!==$||e[66]!==_||e[67]!==d||e[68]!==g?(H=s.jsxs("aside",{id:"files-sidebar","aria-label":x,"aria-hidden":d,inert:g,children:[L,G,$,_]}),e[62]=L,e[63]=x,e[64]=G,e[65]=$,e[66]=_,e[67]=d,e[68]=g,e[69]=H):H=e[69],H}function sn(t){const e=B.c(18),{fileSearchOpen:r,fileSearchRequest:i,label:n,onSelectItem:o,selectedPath:a,source:c}=t;let l;e[0]!==n||e[1]!==o||e[2]!==c?(l={label:n,onSelectItem:o,source:c},e[0]=n,e[1]=o,e[2]=c,e[3]=l):l=e[3];const m=Ve(l);let f;e[4]!==c.paths?(f=()=>Be(c.paths),e[4]=c.paths,e[5]=f):f=e[5];const[h]=C.useState(f);let u;e[6]!==a?(u=a?[a]:[],e[6]=a,e[7]=u):u=e[7];let p;e[8]===Symbol.for("react.memo_cache_sentinel")?(p=Mt(),e[8]=p):p=e[8];const x=c.gitStatus;let d;e[9]===Symbol.for("react.memo_cache_sentinel")?(d=ui(),e[9]=d):d=e[9];let g;e[10]!==h||e[11]!==m||e[12]!==u||e[13]!==x?(g={flattenEmptyDirectories:!1,id:"cmux-diff-file-tree",initialExpansion:"open",initialSelectedPaths:u,initialVisibleRowCount:p,itemHeight:24,overscan:12,preparedInput:h,search:!0,searchBlurBehavior:"retain",stickyFolders:!0,gitStatus:x,sort:ln,unsafeCSS:d,onSelectionChange(y){const I=y[y.length-1],M=m.current.source.pathToItemId.get(I);M&&m.current.onSelectItem(M)}},e[10]=h,e[11]=m,e[12]=u,e[13]=x,e[14]=g):g=e[14];const{model:w}=Dt(g);wn(w,c),yn(w,r,i),kn(w,a);let b;e[15]===Symbol.for("react.memo_cache_sentinel")?(b={height:"100%"},e[15]=b):b=e[15];let v;return e[16]!==w?(v=s.jsx(At,{model:w,style:b}),e[16]=w,e[17]=v):v=e[17],v}function ln(){return 0}function cn(){const t=B.c(1);let e;return t[0]===Symbol.for("react.memo_cache_sentinel")?(e=s.jsx("div",{className:"diff-loading-placeholder","aria-hidden":"true",children:Ri.map(dn)}),t[0]=e):e=t[0],e}function dn(t,e){return s.jsxs("div",{className:"grid h-6 grid-cols-[16px_minmax(0,1fr)_44px] items-center gap-2 rounded-[5px] px-[7px]",children:[s.jsx("span",{className:"size-4 rounded-[5px] border border-[color-mix(in_lab,var(--cmux-diff-fg)_18%,transparent)]"}),s.jsx("span",{className:"h-[11px] rounded bg-[var(--cmux-diff-muted-bg)]",style:{width:t}}),s.jsx("span",{className:"h-[11px] justify-self-end rounded bg-[var(--cmux-diff-muted-bg)] opacity-70",style:{width:e%2===0?"34px":"24px"}})]},`${t}-${e}`)}function fn(){const t=B.c(2);let e;t[0]===Symbol.for("react.memo_cache_sentinel")?(e=s.jsxs("div",{className:"mb-3 grid h-9 grid-cols-[72px_minmax(0,1fr)_96px] items-center gap-3 rounded-md bg-[color-mix(in_lab,var(--cmux-diff-fg)_5%,transparent)] px-3",children:[s.jsx("span",{className:"h-3 rounded bg-[var(--cmux-diff-muted-bg)]"}),s.jsx("span",{className:"h-3 w-2/5 rounded bg-[var(--cmux-diff-muted-bg)]"}),s.jsx("span",{className:"h-3 rounded bg-[var(--cmux-diff-muted-bg)] opacity-70"})]}),t[0]=e):e=t[0];let r;return t[1]===Symbol.for("react.memo_cache_sentinel")?(r=s.jsxs("div",{className:"diff-loading-placeholder mx-3.5 mt-3.5 border-t border-[var(--cmux-diff-border)] pt-3","aria-hidden":"true",children:[e,s.jsx("div",{className:"space-y-[13px] px-3 py-1",children:Li.map(un)})]}),t[1]=r):r=t[1],r}function un(t,e){return s.jsxs("div",{className:"grid grid-cols-[42px_minmax(0,1fr)] items-center gap-4",children:[s.jsx("span",{className:"h-px bg-[color-mix(in_lab,var(--cmux-diff-fg)_10%,transparent)]"}),s.jsx("span",{className:"h-3 rounded bg-[var(--cmux-diff-muted-bg)]",style:{width:t}})]},`${t}-${e}`)}function pn(t){const e=B.c(16),{label:r,status:i}=t;if(!i.loading&&!i.pending&&!i.statusOnly&&!i.error)return null;const n=i.error?"true":"false",o=i.pending?"true":"false";let a;e[0]===Symbol.for("react.memo_cache_sentinel")?(a=s.jsx("span",{id:"status-icon","aria-hidden":"true"}),e[0]=a):a=e[0];let c;e[1]!==r||e[2]!==i.message?(c=i.message||r("loadingDiff"),e[1]=r,e[2]=i.message,e[3]=c):c=e[3];let l;e[4]!==c?(l=s.jsx("span",{id:"status-text",children:c}),e[4]=c,e[5]=l):l=e[5];let m;e[6]!==n||e[7]!==o||e[8]!==l?(m=s.jsxs("div",{id:"status","data-error":n,"data-pending":o,children:[a,l]}),e[6]=n,e[7]=o,e[8]=l,e[9]=m):m=e[9];let f;e[10]!==i.loading||e[11]!==i.pending?(f=i.loading||i.pending?s.jsx(fn,{}):null,e[10]=i.loading,e[11]=i.pending,e[12]=f):f=e[12];let h;return e[13]!==m||e[14]!==f?(h=s.jsxs("div",{id:"loading-layer","aria-live":"polite",children:[m,f]}),e[13]=m,e[14]=f,e[15]=h):h=e[15],h}function Ve(t){const e=B.c(3),r=C.useRef(t);let i,n;return e[0]!==t?(i=()=>{r.current=t},n=[t],e[0]=t,e[1]=i,e[2]=n):(i=e[1],n=e[2]),C.useEffect(i,n),r}function mn(t,e){const r=B.c(5),i=zt(),n=C.useRef(null);let o,a;r[0]!==e||r[1]!==t||r[2]!==i?(o=()=>{if(!i||gn(n.current,t))return;let c=!0;return n.current=t,i.setRenderOptions(t).then(()=>{c&&e.current?.getInstance()?.render(!0)}).catch(hn),()=>{c=!1}},a=[e,t,i],r[0]=e,r[1]=t,r[2]=i,r[3]=o,r[4]=a):(o=r[3],a=r[4]),C.useEffect(o,a)}function hn(t){return console.warn("cmux diff worker render options update failed",t)}function gn(t,e){return t?.lineDiffType===e.lineDiffType&&xn(t?.langs,e.langs)&&t?.maxLineDiffLength===e.maxLineDiffLength&&t?.preferredHighlighter===e.preferredHighlighter&&bn(t?.theme,e.theme)&&t?.tokenizeMaxLineLength===e.tokenizeMaxLineLength&&t?.useTokenTransformer===e.useTokenTransformer}function xn(t,e){return t===e?!0:t==null||e==null||t.length!==e.length?!1:t.every((r,i)=>r===e[i])}function bn(t,e){return t===e?!0:typeof t!="object"||t==null||typeof e!="object"||e==null?!1:t.dark===e.dark&&t.light===e.light}function wn(t,e){const r=B.c(4),i=C.useRef(null);let n,o;r[0]!==t||r[1]!==e?(n=()=>{const a=i.current;i.current=e;const c=ni(a,e,e.paths);let l=c.kind==="append"?c.requiresFullGitStatus:!1;if(c.kind==="append"){if(c.addedPaths.length>0)try{t.batch(c.addedPaths.map(vn)),l=!c.sourceFollowsPrevious}catch{const m=Be(e.paths);t.resetPaths(e.paths,{preparedInput:m}),l=!0}}else{const m=Be(e.paths);t.resetPaths(e.paths,{preparedInput:m}),l=!0}oi(t,e,l)},o=[t,e],r[0]=t,r[1]=e,r[2]=n,r[3]=o):(n=r[2],o=r[3]),C.useEffect(n,o)}function vn(t){return{type:"add",path:t}}function yn(t,e,r){const i=B.c(7);let n;i[0]!==e||i[1]!==t?(n=()=>{if(e){const a=t.isSearchOpen();if(t.openSearch(a?t.getSearchValue():""),a){const c=t.getFileTreeContainer();(c?.shadowRoot??c?.getRootNode())?.querySelector("[data-file-tree-search-input]")?.focus()}}else t.closeSearch()},i[0]=e,i[1]=t,i[2]=n):n=i[2];let o;i[3]!==e||i[4]!==r||i[5]!==t?(o=[e,r,t],i[3]=e,i[4]=r,i[5]=t,i[6]=o):o=i[6],C.useEffect(n,o)}function kn(t,e){const r=B.c(4);let i,n;r[0]!==t||r[1]!==e?(i=()=>{ai(t,e)},n=[t,e],r[0]=t,r[1]=e,r[2]=i,r[3]=n):(i=r[2],n=r[3]),C.useEffect(i,n)}function Sn(t,e,r,i,n,o,a,c,l,m){C.useEffect(()=>{if(Ln(t.payload,e,l))return;const f=t.payload??{},h=De(f.appearance);for(const d of[h.themes.light,h.themes.dark])d.name&&!lt.has(d.name)&&(Bt(d.name,()=>Promise.resolve(pi(d))),lt.add(d.name));let u=!1;const p=new AbortController,x=()=>{c()};return window.addEventListener("pagehide",x),(async()=>{try{let d=f.patchURL;const g=Ge(f,e,l);if(g){const b=await e.request({method:"sessionOpen",params:g});if(b.type!=="sessionOpened")throw new ue("invalidResponse","Diff transport did not open a session");const v={sessionId:b.value.sessionId,capabilityToken:String(f.capabilityToken??"")};if(u){await It(e,v);return}a.current=v,m(b.value.source),d=b.value.patch.id}if(u||!d)return;o(d);const w=[];i({type:"set-status",status:ie(r("parsingDiff"),{loading:!0})}),await br({getCollapsed:()=>n.current.options.collapsed,initialFileTreeRowCount:Mt(),label:r,signal:p.signal,onBatch:b=>{u||(w.push(...b),i({type:"append-items",items:b}))},onComplete:b=>{if(u)return;i({type:"set-metrics",metrics:b});const v=w;if(v.length===0){const M=typeof f.emptyMessage=="string"?f.emptyMessage:r("noFileDiffs");i({type:"set-status",status:ie(M,{error:!1,loading:!1,statusOnly:!0})});return}const y=Array.from(new Set([h.theme?.light,h.theme?.dark].filter(Boolean))),I=Array.from(new Set(v.flatMap(M=>{const L=M.fileDiff??{};return yt(pe(L,""),L.lang,L,Ee)})));Et({themes:y,langs:I.length>0?I:["text"]}).catch(M=>console.warn("cmux diff highlighter preload failed",M))},onMetrics:b=>{u||i({type:"set-metrics",metrics:b})},onRename:b=>{u||i({type:"rename-item",oldId:b.oldId,newId:b.newId})},onTreeSource:b=>{u||i({type:"set-tree-source",source:b})},parsePatchFiles:Nt,patchURL:d,processFile:_t})}catch(d){if(u)return;const g=d instanceof ue&&d.code==="emptyDiff";g||console.error("cmux diff viewer render failed",d);const w=typeof f.emptyMessage=="string"?f.emptyMessage:r("noFileDiffs");i({type:"set-status",status:ie(g?w:r("renderFailed"),{error:!g,loading:!1,statusOnly:!0})})}})(),()=>{u=!0,p.abort(),window.removeEventListener("pagehide",x),c()}},[a,c,t,i,r,n,o,m,l,e])}function It(t,e){return t.request({method:"sessionClose",params:e}).then(()=>{},()=>{})}function Ge(t,e,r){if(!e||typeof t?.capabilityToken!="string")return null;const i=r??t.sessionSource;return Ie(i)?{source:i,capabilityToken:t.capabilityToken}:null}function Ie(t){if(!t||typeof t!="object"||typeof t.kind!="string")return!1;const e=t;return e.kind==="patch"?typeof e.path=="string":e.kind==="unstaged"||e.kind==="staged"?typeof e.repoRoot=="string":e.kind==="branch"&&typeof e.repoRoot=="string"&&(e.baseRef==null||typeof e.baseRef=="string")}function jn(t){return t?.kind??null}function Me(t){return t&&"repoRoot"in t?t.repoRoot:null}function Cn(t,e){if(t.kind==="patch")return t;const r=Me(e);return r?t.kind==="branch"?t.repoRoot===r?{...t,repoRoot:r}:{kind:"branch",repoRoot:r}:{...t,repoRoot:r}:t}function In(t,e){const r=Me(t);return!r||!e||e.kind==="patch"?t:e.kind==="branch"?e.repoRoot===r?{...e,repoRoot:r}:{kind:"branch",repoRoot:r}:{...e,repoRoot:r}}function Mn(t){const e=t.fileDiff;if(e==null)return;const r=vt(pe(e,""),e.lang,Ee);e.lang=r}function Pn(t){const e=t.fileDiff;return e==null?[]:yt(pe(e,""),e.lang,e,Ee)}function Rn(t,e){const r=new Set(t);for(const i of e)i.trim().length>0&&r.add(i);return Array.from(r)}function Ln(t,e=null,r=null){return t?.pendingReplacement===!0?Ge(t,e,r)==null:typeof t?.statusMessage=="string"&&t.statusMessage.length>0}function Tn(t,e,r,i){const n=B.c(6),o=C.useRef(!1);let a,c;n[0]!==r||n[1]!==e||n[2]!==t||n[3]!==i?(a=()=>{if(!o.current){if(o.current=!0,t.pendingReplacement===!0){if(r({type:"set-status",status:ie(t.statusMessage??e("loadingDiff"),{loading:!0,pending:!0})}),Ge(t,i)||window.location.protocol==="cmux-diff-viewer:")return;fetch("/__cmux_diff_viewer_wait"+window.location.pathname,{cache:"no-store"}).then(Fn).catch(l=>{document.documentElement.dataset.cmuxDiffWait="failed",r({type:"set-status",status:ie(e("renderFailed"),{error:!0,loading:!1,statusOnly:!0})}),console.warn("cmux diff viewer deferred load failed",l)});return}typeof t.statusMessage=="string"&&t.statusMessage.length>0&&r({type:"set-status",status:ie(t.statusMessage,{error:t.statusIsError===!0,loading:!1,statusOnly:!0})})}},c=[r,e,t,i],n[0]=r,n[1]=e,n[2]=t,n[3]=i,n[4]=a,n[5]=c):(a=n[4],c=n[5]),C.useEffect(a,c)}async function Fn(t){if(!t.ok)throw new Error("replacement failed");(await t.text()).includes('data-cmux-diff-pending="true"')||window.location.reload()}function Bn(t){const e=B.c(10);let r;e[0]!==t.filesVisible||e[1]!==t.items||e[2]!==t.metrics||e[3]!==t.options.diffIndicators||e[4]!==t.options.layout||e[5]!==t.options.wordWrap||e[6]!==t.status?(r=()=>{document.body.dataset.filesHidden=t.filesVisible?"false":"true",document.body.dataset.loading=t.status.loading?"true":"false",document.documentElement.dataset.layout=t.options.layout,document.documentElement.dataset.wordWrap=String(t.options.wordWrap),document.documentElement.dataset.diffIndicators=t.options.diffIndicators,t.metrics&&(document.body.dataset.streamFileCount=String(t.metrics.fileCount??t.items.length),document.body.dataset.streamRenderableFileCount=String(t.metrics.renderableFileCount??t.items.length),document.body.dataset.streamFlushCount=String(t.metrics.flushCount??0),document.body.dataset.streamMaxBatchSize=String(t.metrics.maxBatchSize??0),document.body.dataset.streamTreeRefreshCount=String(t.metrics.treeRefreshCount??0),Number.isFinite(t.metrics.completedAt)&&t.metrics.completedAt>0&&(document.body.dataset.streamElapsedMs=String(Math.round(t.metrics.completedAt-t.metrics.startedAt)))),Ce(t.status)},e[0]=t.filesVisible,e[1]=t.items,e[2]=t.metrics,e[3]=t.options.diffIndicators,e[4]=t.options.layout,e[5]=t.options.wordWrap,e[6]=t.status,e[7]=r):r=e[7];let i;e[8]!==t?(i=[t],e[8]=t,e[9]=i):i=e[9],C.useEffect(r,i)}function _n(t,e,r){const i=B.c(5);let n,o;i[0]!==e||i[1]!==r||i[2]!==t?(n=()=>{window.__cmuxPerformDiffViewerNavigationAction=c=>{const l=t.current;if(l&&CmuxViewerNavigation.performAction(c,l))return!0;switch(c){case"diffViewerOpenFileSearch":return e({type:"request-file-search"}),!0;case"diffViewerNextFile":return l&&CmuxViewerNavigation.resetSmoothTarget(l),r(1),!0;case"diffViewerPreviousFile":return l&&CmuxViewerNavigation.resetSmoothTarget(l),r(-1),!0}return!1},document.documentElement.dataset.cmuxViewerNavigationReady="true",document.dispatchEvent(new window.Event("cmux-diff-viewer-navigation-readiness-change"));const a=CmuxViewerNavigation.installManualInputReset({target:document,getScroller:()=>t.current});return()=>{delete window.__cmuxPerformDiffViewerNavigationAction,delete document.documentElement.dataset.cmuxViewerNavigationReady,document.dispatchEvent(new window.Event("cmux-diff-viewer-navigation-readiness-change")),a()}},o=[e,r,t],i[0]=e,i[1]=r,i[2]=t,i[3]=n,i[4]=o):(n=i[3],o=i[4]),C.useEffect(n,o)}function Nn(t,e){const r=B.c(4);let i,n;r[0]!==e||r[1]!==t?(i=()=>{if(!t)return;const o=c=>{c.target instanceof Element&&c.target.closest("#toolbar")||e({type:"set-options-open",open:!1})},a=c=>{c.key==="Escape"&&e({type:"set-options-open",open:!1})};return document.addEventListener("click",o),document.addEventListener("keydown",a),()=>{document.removeEventListener("click",o),document.removeEventListener("keydown",a)}},n=[e,t],r[0]=e,r[1]=t,r[2]=i,r[3]=n):(i=r[2],n=r[3]),C.useEffect(i,n)}function Ue(t,e=document){t({type:"set-file-search-open",open:!1}),(e.getElementById("jump-search-button")??e.getElementById("jump-select"))?.focus()}function En(t,e){return t==="Escape"&&e}function Dn(t,e){const r=B.c(4);let i,n;r[0]!==e||r[1]!==t?(i=()=>{if(!t)return;const o=a=>{En(a.key,window.matchMedia("(max-width: 520px)").matches)&&(a.preventDefault(),Ue(e))};return document.addEventListener("keydown",o),()=>document.removeEventListener("keydown",o)},n=[e,t],r[0]=e,r[1]=t,r[2]=i,r[3]=n):(i=r[2],n=r[3]),C.useEffect(i,n)}function zn(t){const e=C.useRef(void 0);return e.current===void 0&&(e.current=yi(t)),C.useEffect(()=>{const r=e.current;return()=>r?.close()},[]),e.current}function An(t,e){return e.some(r=>r.id===t)?t:e[0]?.id??""}function On(t,e,r){if(e.length===0)return"";const i=e.findIndex(o=>o.id===t);if(i<0)return r>0?e[0].id:e[e.length-1].id;const n=i+r;return n>=0&&n0?0:-1;for(;i<=n;){const a=Math.floor((i+n)/2),c=r(t[a].id);c!=null&&c<=e+1?(o=a,i=a+1):n=a-1}return o>=0?t[o].id:""}function Mt(){const t=window.visualViewport?.height??window.innerHeight;return!Number.isFinite(t)||t<=0?25:Math.min(96,Math.max(25,Math.ceil(t/24)))}const Wn=`@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-rotate-x:initial;--tw-rotate-y:initial;--tw-rotate-z:initial;--tw-skew-x:initial;--tw-skew-y:initial;--tw-space-y-reverse:0;--tw-border-style:solid;--tw-leading:initial;--tw-font-weight:initial;--tw-ordinal:initial;--tw-slashed-zero:initial;--tw-numeric-figure:initial;--tw-numeric-spacing:initial;--tw-numeric-fraction:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial;--tw-backdrop-blur:initial;--tw-backdrop-brightness:initial;--tw-backdrop-contrast:initial;--tw-backdrop-grayscale:initial;--tw-backdrop-hue-rotate:initial;--tw-backdrop-invert:initial;--tw-backdrop-opacity:initial;--tw-backdrop-saturate:initial;--tw-backdrop-sepia:initial;--tw-duration:initial;--tw-ease:initial;--tw-outline-style:solid}}}@layer theme{:root,:host{--font-sans:ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";--font-mono:ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;--spacing:.25rem;--text-xs:.75rem;--text-xs--line-height:calc(1 / .75);--text-sm:.875rem;--text-sm--line-height:calc(1.25 / .875);--text-base:1rem;--text-base--line-height: 1.5 ;--font-weight-medium:500;--radius-md:.375rem;--radius-lg:.5rem;--radius-xl:.75rem;--radius-2xl:1rem;--radius-3xl:1.5rem;--shadow-xl:0 20px 25px -5px #0000001a, 0 8px 10px -6px #0000001a;--ease-out:cubic-bezier(0, 0, .2, 1);--blur-sm:8px;--blur-lg:16px;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4, 0, .2, 1);--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono)}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;tab-size:4;line-height:1.5;font-family:var(--default-font-family,ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab,red,red)){::placeholder{color:color-mix(in oklab,currentcolor 50%,transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){appearance:button}::file-selector-button{appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}}@layer components;@layer utilities{.\\@container{container-type:inline-size}.pointer-events-auto{pointer-events:auto}.pointer-events-none{pointer-events:none}.collapse{visibility:collapse}.invisible{visibility:hidden}.visible{visibility:visible}.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.static{position:static}.sticky{position:sticky}.inset-x-0{inset-inline:calc(var(--spacing) * 0)}.top-0{top:calc(var(--spacing) * 0)}.top-1\\/2{top:50%}.right-2\\.5{right:calc(var(--spacing) * 2.5)}.bottom-0{bottom:calc(var(--spacing) * 0)}.bottom-\\[calc\\(100\\%\\+6px\\)\\]{bottom:calc(100% + 6px)}.bottom-full{bottom:100%}.left-0{left:calc(var(--spacing) * 0)}.z-10{z-index:10}.z-20{z-index:20}.z-50{z-index:50}.container{width:100%}@media(min-width:40rem){.container{max-width:40rem}}@media(min-width:48rem){.container{max-width:48rem}}@media(min-width:64rem){.container{max-width:64rem}}@media(min-width:80rem){.container{max-width:80rem}}@media(min-width:96rem){.container{max-width:96rem}}.m-px{margin:1px}.mx-3\\.5{margin-inline:calc(var(--spacing) * 3.5)}.ms-1{margin-inline-start:calc(var(--spacing) * 1)}.mt-1\\.5{margin-top:calc(var(--spacing) * 1.5)}.mt-3\\.5{margin-top:calc(var(--spacing) * 3.5)}.mr-1{margin-right:calc(var(--spacing) * 1)}.mr-\\[3px\\]{margin-right:3px}.mb-1{margin-bottom:calc(var(--spacing) * 1)}.mb-2{margin-bottom:calc(var(--spacing) * 2)}.mb-3{margin-bottom:calc(var(--spacing) * 3)}.mb-px{margin-bottom:1px}.ml-1\\.5{margin-left:calc(var(--spacing) * 1.5)}.ml-auto{margin-left:auto}.box-border{box-sizing:border-box}.block{display:block}.contents{display:contents}.flex{display:flex}.grid{display:grid}.hidden{display:none}.inline{display:inline}.inline-block{display:inline-block}.inline-flex{display:inline-flex}.table{display:table}.aspect-square{aspect-ratio:1}.size-4{width:calc(var(--spacing) * 4);height:calc(var(--spacing) * 4)}.size-16{width:calc(var(--spacing) * 16);height:calc(var(--spacing) * 16)}.size-\\[22px\\]{width:22px;height:22px}.\\!h-auto{height:auto!important}.h-0{height:calc(var(--spacing) * 0)}.h-3{height:calc(var(--spacing) * 3)}.h-4{height:calc(var(--spacing) * 4)}.h-5{height:calc(var(--spacing) * 5)}.h-6{height:calc(var(--spacing) * 6)}.h-8{height:calc(var(--spacing) * 8)}.h-9{height:calc(var(--spacing) * 9)}.h-\\[1lh\\]{height:1lh}.h-\\[1px\\]{height:1px}.h-\\[11px\\]{height:11px}.h-auto{height:auto}.h-full{height:100%}.h-px{height:1px}.max-h-\\[25dvh\\]{max-height:25dvh}.max-h-\\[140px\\]{max-height:140px}.max-h-none{max-height:none}.min-h-0{min-height:calc(var(--spacing) * 0)}.min-h-\\[1\\.25rem\\]{min-height:1.25rem}.w-2\\/5{width:40%}.w-3{width:calc(var(--spacing) * 3)}.w-4{width:calc(var(--spacing) * 4)}.w-7{width:calc(var(--spacing) * 7)}.w-52{width:calc(var(--spacing) * 52)}.w-fit{width:fit-content}.w-full{width:100%}.w-max{width:max-content}.w-px{width:1px}.max-w-16{max-width:calc(var(--spacing) * 16)}.max-w-20{max-width:calc(var(--spacing) * 20)}.max-w-40{max-width:calc(var(--spacing) * 40)}.max-w-\\[60\\%\\]{max-width:60%}.max-w-\\[77\\%\\]{max-width:77%}.max-w-\\[320px\\]{max-width:320px}.max-w-full{max-width:100%}.max-w-none{max-width:none}.min-w-0{min-width:calc(var(--spacing) * 0)}.min-w-56{min-width:calc(var(--spacing) * 56)}.min-w-max{min-width:max-content}.flex-1{flex:1}.flex-none{flex:none}.flex-shrink{flex-shrink:1}.flex-shrink-0{flex-shrink:0}.shrink{flex-shrink:1}.shrink-0{flex-shrink:0}.flex-grow{flex-grow:1}.-translate-y-1\\/2{--tw-translate-y: -50% ;translate:var(--tw-translate-x) var(--tw-translate-y)}.rotate-90{rotate:90deg}.rotate-180{rotate:180deg}.transform{transform:var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,)}.cursor-default{cursor:default}.cursor-pointer{cursor:pointer}.resize{resize:both}.grid-cols-\\[16px_minmax\\(0\\,1fr\\)_44px\\]{grid-template-columns:16px minmax(0,1fr) 44px}.grid-cols-\\[42px_minmax\\(0\\,1fr\\)\\]{grid-template-columns:42px minmax(0,1fr)}.grid-cols-\\[72px_minmax\\(0\\,1fr\\)_96px\\]{grid-template-columns:72px minmax(0,1fr) 96px}.grid-cols-\\[auto_minmax\\(0\\,1fr\\)_auto\\]{grid-template-columns:auto minmax(0,1fr) auto}.grid-cols-\\[minmax\\(0\\,auto\\)_auto_minmax\\(0\\,1fr\\)\\]{grid-template-columns:minmax(0,auto) auto minmax(0,1fr)}.flex-col{flex-direction:column}.flex-row-reverse{flex-direction:row-reverse}.flex-wrap{flex-wrap:wrap}.items-center{align-items:center}.items-end{align-items:flex-end}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.justify-end{justify-content:flex-end}.justify-start{justify-content:flex-start}.gap-0\\.5{gap:calc(var(--spacing) * .5)}.gap-1{gap:calc(var(--spacing) * 1)}.gap-1\\.5{gap:calc(var(--spacing) * 1.5)}.gap-2{gap:calc(var(--spacing) * 2)}.gap-3{gap:calc(var(--spacing) * 3)}.gap-4{gap:calc(var(--spacing) * 4)}.gap-\\[5px\\]{gap:5px}:where(.space-y-\\[13px\\]>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(13px * var(--tw-space-y-reverse));margin-block-end:calc(13px * calc(1 - var(--tw-space-y-reverse)))}.self-start{align-self:flex-start}.justify-self-end{justify-self:flex-end}.truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.overflow-clip{overflow:clip}.overflow-hidden{overflow:hidden}.overflow-visible{overflow:visible}.overflow-x-auto{overflow-x:auto}.overflow-y-auto{overflow-y:auto}.rounded{border-radius:.25rem}.rounded-2xl{border-radius:var(--radius-2xl)}.rounded-3xl{border-radius:var(--radius-3xl)}.rounded-\\[5px\\]{border-radius:5px}.rounded-full{border-radius:3.40282e38px}.rounded-lg{border-radius:var(--radius-lg)}.rounded-md{border-radius:var(--radius-md)}.rounded-xl{border-radius:var(--radius-xl)}.border{border-style:var(--tw-border-style);border-width:1px}.border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.border-\\[color-mix\\(in_lab\\,var\\(--cmux-diff-fg\\)_18\\%\\,transparent\\)\\]{border-color:var(--cmux-diff-fg)}@supports (color:color-mix(in lab,red,red)){.border-\\[color-mix\\(in_lab\\,var\\(--cmux-diff-fg\\)_18\\%\\,transparent\\)\\]{border-color:color-mix(in lab,var(--cmux-diff-fg) 18%,transparent)}}.border-\\[color\\:var\\(--gray-0\\)\\]{border-color:var(--gray-0)}.border-\\[var\\(--cmux-diff-border\\)\\]{border-color:var(--cmux-diff-border)}.border-transparent{border-color:#0000}.bg-\\[color-mix\\(in_lab\\,var\\(--cmux-diff-fg\\)_5\\%\\,transparent\\)\\]{background-color:var(--cmux-diff-fg)}@supports (color:color-mix(in lab,red,red)){.bg-\\[color-mix\\(in_lab\\,var\\(--cmux-diff-fg\\)_5\\%\\,transparent\\)\\]{background-color:color-mix(in lab,var(--cmux-diff-fg) 5%,transparent)}}.bg-\\[color-mix\\(in_lab\\,var\\(--cmux-diff-fg\\)_10\\%\\,transparent\\)\\]{background-color:var(--cmux-diff-fg)}@supports (color:color-mix(in lab,red,red)){.bg-\\[color-mix\\(in_lab\\,var\\(--cmux-diff-fg\\)_10\\%\\,transparent\\)\\]{background-color:color-mix(in lab,var(--cmux-diff-fg) 10%,transparent)}}.bg-\\[color\\:var\\(--gray-0\\)\\]{background-color:var(--gray-0)}.bg-\\[var\\(--cmux-diff-muted-bg\\)\\]{background-color:var(--cmux-diff-muted-bg)}.\\[mask-image\\:linear-gradient\\(to_right\\,black_calc\\(100\\%_-_0\\.25rem\\)\\,transparent\\)\\]{-webkit-mask-image:linear-gradient(90deg,#000 calc(100% - .25rem),#0000);mask-image:linear-gradient(90deg,#000 calc(100% - .25rem),#0000)}.\\[mask-repeat\\:no-repeat\\]{-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat}.object-cover{object-fit:cover}.p-0\\.5{padding:calc(var(--spacing) * .5)}.p-2{padding:calc(var(--spacing) * 2)}.\\!px-0{padding-inline:calc(var(--spacing) * 0)!important}.px-0\\.5{padding-inline:calc(var(--spacing) * .5)}.px-1{padding-inline:calc(var(--spacing) * 1)}.px-1\\.5{padding-inline:calc(var(--spacing) * 1.5)}.px-2{padding-inline:calc(var(--spacing) * 2)}.px-2\\.5{padding-inline:calc(var(--spacing) * 2.5)}.px-3{padding-inline:calc(var(--spacing) * 3)}.px-\\[7px\\]{padding-inline:7px}.px-\\[var\\(--padding-row-x\\)\\]{padding-inline:var(--padding-row-x)}.py-0{padding-block:calc(var(--spacing) * 0)}.py-0\\.5{padding-block:calc(var(--spacing) * .5)}.py-1{padding-block:calc(var(--spacing) * 1)}.py-1\\.5{padding-block:calc(var(--spacing) * 1.5)}.py-2{padding-block:calc(var(--spacing) * 2)}.py-\\[var\\(--padding-row-y\\)\\]{padding-block:var(--padding-row-y)}.pt-0\\.5{padding-top:calc(var(--spacing) * .5)}.pt-3{padding-top:calc(var(--spacing) * 3)}.pr-0{padding-right:calc(var(--spacing) * 0)}.pr-1{padding-right:calc(var(--spacing) * 1)}.pr-2{padding-right:calc(var(--spacing) * 2)}.pb-1{padding-bottom:calc(var(--spacing) * 1)}.pl-2{padding-left:calc(var(--spacing) * 2)}.pl-3{padding-left:calc(var(--spacing) * 3)}.text-left{text-align:left}.align-bottom{vertical-align:bottom}.text-base{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.\\!leading-none{--tw-leading:1!important;line-height:1!important}.leading-5{--tw-leading:calc(var(--spacing) * 5);line-height:calc(var(--spacing) * 5)}.leading-\\[18px\\]{--tw-leading:18px;line-height:18px}.leading-\\[calc\\(var\\(--codex-chat-font-size\\)\\+8px\\)\\]{--tw-leading:calc(var(--codex-chat-font-size) + 8px);line-height:calc(var(--codex-chat-font-size) + 8px)}.leading-none{--tw-leading:1;line-height:1}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.break-words{overflow-wrap:break-word}.text-ellipsis{text-overflow:ellipsis}.whitespace-nowrap{white-space:nowrap}.whitespace-pre{white-space:pre}.text-current{color:currentColor}.italic{font-style:italic}.tabular-nums{--tw-numeric-spacing:tabular-nums;font-variant-numeric:var(--tw-ordinal,) var(--tw-slashed-zero,) var(--tw-numeric-figure,) var(--tw-numeric-spacing,) var(--tw-numeric-fraction,)}.opacity-0{opacity:0}.opacity-50{opacity:.5}.opacity-70{opacity:.7}.opacity-100{opacity:1}.shadow{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a), 0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-md{--tw-shadow:0 4px 6px -1px var(--tw-shadow-color,#0000001a), 0 2px 4px -2px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-sm{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a), 0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ring-\\[0\\.5px\\]{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(.5px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.outline-hidden{--tw-outline-style:none;outline-style:none}@media(forced-colors:active){.outline-hidden{outline-offset:2px;outline:2px solid #0000}}.filter{filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.backdrop-blur-lg{--tw-backdrop-blur:blur(var(--blur-lg));-webkit-backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,)}.backdrop-blur-sm{--tw-backdrop-blur:blur(var(--blur-sm));-webkit-backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,)}.backdrop-filter{-webkit-backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,)}.transition{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-opacity{transition-property:opacity;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-transform{transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.duration-200{--tw-duration:.2s;transition-duration:.2s}.ease-out{--tw-ease:var(--ease-out);transition-timing-function:var(--ease-out)}.select-none{-webkit-user-select:none;user-select:none}.\\[--edge-fade-distance\\:2rem\\]{--edge-fade-distance:2rem}.group-focus-within\\:opacity-100:is(:where(.group):focus-within *){opacity:1}@media(hover:hover){.group-hover\\:opacity-100:is(:where(.group):hover *){opacity:1}.hover\\:bg-transparent:hover{background-color:#0000}}.focus\\:outline-none:focus{--tw-outline-style:none;outline-style:none}.focus-visible\\:outline-2:focus-visible{outline-style:var(--tw-outline-style);outline-width:2px}.disabled\\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\\:opacity-40:disabled{opacity:.4}.data-\\[state\\=checked\\]\\:translate-x-\\[14px\\][data-state=checked]{--tw-translate-x:14px;translate:var(--tw-translate-x) var(--tw-translate-y)}.data-\\[state\\=unchecked\\]\\:translate-x-\\[2px\\][data-state=unchecked]{--tw-translate-x:2px;translate:var(--tw-translate-x) var(--tw-translate-y)}@container (min-width:500px){.\\@\\[500px\\]\\:inline{display:inline}}.\\[\\&_\\.ProseMirror\\]\\:\\!h-5 .ProseMirror{height:calc(var(--spacing) * 5)!important}.\\[\\&_\\.ProseMirror\\]\\:h-auto .ProseMirror{height:auto}.\\[\\&_\\.ProseMirror\\]\\:\\!min-h-5 .ProseMirror{min-height:calc(var(--spacing) * 5)!important}.\\[\\&_\\.ProseMirror\\]\\:min-h-\\[2rem\\] .ProseMirror{min-height:2rem}.\\[\\&_\\.ProseMirror\\]\\:min-w-0 .ProseMirror{min-width:calc(var(--spacing) * 0)}.\\[\\&_\\.ProseMirror\\]\\:flex-1 .ProseMirror{flex:1}.\\[\\&_\\.ProseMirror\\]\\:resize-none .ProseMirror{resize:none}.\\[\\&_\\.ProseMirror\\]\\:overflow-hidden .ProseMirror{overflow:hidden}.\\[\\&_\\.ProseMirror\\]\\:leading-5 .ProseMirror{--tw-leading:calc(var(--spacing) * 5);line-height:calc(var(--spacing) * 5)}.\\[\\&_\\.ProseMirror\\]\\:whitespace-nowrap .ProseMirror{white-space:nowrap}.\\[\\&_\\.ProseMirror\\]\\:focus-visible\\:outline-none .ProseMirror:focus-visible{--tw-outline-style:none;outline-style:none}.\\[\\&_\\.ProseMirror_p\\]\\:m-0 .ProseMirror p{margin:calc(var(--spacing) * 0)}.\\[\\&_\\.ProseMirror_p\\]\\:overflow-hidden .ProseMirror p{overflow:hidden}.\\[\\&_\\.ProseMirror_p\\]\\:text-ellipsis .ProseMirror p{text-overflow:ellipsis}.\\[\\&_\\.ProseMirror_p\\]\\:whitespace-nowrap .ProseMirror p{white-space:nowrap}.\\[\\&_\\.contain-inline-size\\]\\:\\[contain\\:initial\\] .contain-inline-size{contain:initial}.\\[\\&\\>\\*\\:last-child\\]\\:mb-0>:last-child{margin-bottom:calc(var(--spacing) * 0)}.\\[\\&\\>ol\\:first-child\\]\\:mt-0>ol:first-child,.\\[\\&\\>ul\\:first-child\\]\\:mt-0>ul:first-child{margin-top:calc(var(--spacing) * 0)}}:root{color-scheme:light dark;--cmux-diff-bg-light:#fff;--cmux-diff-bg-dark:#000;--cmux-diff-fg-light:#000;--cmux-diff-fg-dark:#fff;--cmux-diff-selection-bg-light:#abd8ff;--cmux-diff-selection-bg-dark:#3f638b;--cmux-diff-ui-font-family:system-ui, -apple-system, BlinkMacSystemFont, "SF Pro Text", "Helvetica Neue", Arial, sans-serif;--cmux-diff-ui-font-size:12px;--cmux-diff-ui-line-height:16px;--cmux-diff-code-font-family:ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", monospace;--cmux-diff-font-size:10px;--cmux-diff-line-height:20px;--cmux-diff-bg:var(--cmux-diff-bg-light);--cmux-diff-fg:var(--cmux-diff-fg-light);--cmux-diff-border:var(--cmux-diff-fg)}@supports (color:color-mix(in lab,red,red)){:root{--cmux-diff-border:color-mix(in lab, var(--cmux-diff-fg) 12%, transparent)}}:root{--cmux-diff-toolbar-bg:transparent;--cmux-diff-sidebar-bg:transparent;--cmux-diff-muted-bg:var(--cmux-diff-fg)}@supports (color:color-mix(in lab,red,red)){:root{--cmux-diff-muted-bg:color-mix(in lab, var(--cmux-diff-fg) 8%, transparent)}}:root{--cmux-diff-hover-bg:var(--cmux-diff-fg)}@supports (color:color-mix(in lab,red,red)){:root{--cmux-diff-hover-bg:color-mix(in lab, var(--cmux-diff-fg) 10%, transparent)}}:root{--cmux-diff-accent:light-dark(#0a84ff,#7ab7ff);--cmux-diff-text-muted:var(--cmux-diff-fg)}@supports (color:color-mix(in lab,red,red)){:root{--cmux-diff-text-muted:color-mix(in lab, var(--cmux-diff-fg) 72%, var(--cmux-diff-bg))}}:root{--cmux-diff-text-subtle:var(--cmux-diff-fg)}@supports (color:color-mix(in lab,red,red)){:root{--cmux-diff-text-subtle:color-mix(in lab, var(--cmux-diff-fg) 84%, var(--cmux-diff-bg))}}:root{--cmux-diff-surface-fill-light:transparent;--cmux-diff-surface-fill-dark:transparent;--cmux-diff-surface-fill:var(--cmux-diff-surface-fill-light);background:var(--cmux-diff-surface-fill);color:var(--cmux-diff-fg)}@media(prefers-color-scheme:dark){:root{--cmux-diff-bg:var(--cmux-diff-bg-dark);--cmux-diff-fg:var(--cmux-diff-fg-dark);--cmux-diff-surface-fill:var(--cmux-diff-surface-fill-dark)}}*{box-sizing:border-box}html,body{background:var(--cmux-diff-surface-fill);height:100%;overflow:hidden}body{background:var(--cmux-diff-surface-fill);height:100vh;min-height:0;color:var(--cmux-diff-fg);font-family:var(--cmux-diff-ui-font-family);font-size:var(--cmux-diff-ui-font-size);line-height:var(--cmux-diff-ui-line-height);flex-direction:column;margin:0;display:flex;overflow:hidden}#root{background:0 0;height:100%;min-height:0}#app{overscroll-behavior:contain;contain:strict;height:100vh;min-height:0;color:inherit;background:0 0;grid-template-rows:auto minmax(0,1fr);grid-template-columns:minmax(0,1fr);display:grid;overflow:hidden}.copy-fallback-textarea{opacity:0;pointer-events:none;width:1px;height:1px;position:fixed;top:0;left:-9999px}#toolbar{border-bottom:1px solid var(--cmux-diff-border);background:var(--cmux-diff-toolbar-bg);min-height:32px;color:var(--cmux-diff-fg);flex:none;grid-template-columns:minmax(0,1.1fr) minmax(0,.9fr) minmax(0,auto);align-items:center;gap:7px;padding:3px 4px 3px 8px;display:grid;position:relative}@supports (color:color-mix(in lab,red,red)){#toolbar{color:color-mix(in lab,var(--cmux-diff-fg) 76%,var(--cmux-diff-bg))}}#toolbar{z-index:50}@media(min-width:521px){body[data-files-hidden=false] #toolbar{grid-template-columns:minmax(0,1fr) minmax(0,auto)}body[data-files-hidden=false] .toolbar-middle{display:none}}.toolbar-left,.toolbar-middle,.toolbar-actions{align-items:center;min-width:0;display:flex;overflow:clip visible}.toolbar-left,.toolbar-middle{gap:6px}.toolbar-left{justify-self:stretch;container:toolbar-left/inline-size}.toolbar-middle{justify-content:center}.toolbar-actions{justify-self:end;gap:4px}#source-select,#repo-select,#base-select,#jump-select,#jump-search-button{appearance:none;white-space:nowrap;text-overflow:ellipsis;background:linear-gradient(45deg,transparent 50%,currentcolor 50%) right 11px center / 4px 4px no-repeat,linear-gradient(135deg,currentcolor 50%,transparent 50%) right 7px center / 4px 4px no-repeat,var(--cmux-diff-fg);border:1px solid #0000;border-radius:6px;min-width:0;max-width:100%;height:24px;padding:0 24px 0 9px;overflow:hidden}@supports (color:color-mix(in lab,red,red)){#source-select,#repo-select,#base-select,#jump-select,#jump-search-button{background:linear-gradient(45deg,transparent 50%,currentcolor 50%) right 11px center / 4px 4px no-repeat,linear-gradient(135deg,currentcolor 50%,transparent 50%) right 7px center / 4px 4px no-repeat,color-mix(in lab,var(--cmux-diff-fg) 7%,transparent)}}#source-select,#repo-select,#base-select,#jump-select,#jump-search-button{color:inherit;font:inherit}#source-select{field-sizing:content;flex:0 3 auto;min-width:58px}#source-select:hover,#repo-select:hover,#base-select:hover,#jump-select:hover{border-color:var(--cmux-diff-fg)}@supports (color:color-mix(in lab,red,red)){#source-select:hover,#repo-select:hover,#base-select:hover,#jump-select:hover{border-color:color-mix(in lab,var(--cmux-diff-fg) 24%,transparent)}}#source-select:hover,#repo-select:hover,#base-select:hover,#jump-select:hover{background-color:var(--cmux-diff-fg)}@supports (color:color-mix(in lab,red,red)){#source-select:hover,#repo-select:hover,#base-select:hover,#jump-select:hover{background-color:color-mix(in lab,var(--cmux-diff-fg) 10%,transparent)}}#jump-search-button:hover{border-color:var(--cmux-diff-fg)}@supports (color:color-mix(in lab,red,red)){#jump-search-button:hover{border-color:color-mix(in lab,var(--cmux-diff-fg) 24%,transparent)}}#jump-search-button:hover{background-color:var(--cmux-diff-fg)}@supports (color:color-mix(in lab,red,red)){#jump-search-button:hover{background-color:color-mix(in lab,var(--cmux-diff-fg) 10%,transparent)}}#source-select[hidden],#repo-select[hidden],#base-select[hidden],#jump-select[hidden]{display:none}#jump-select{field-sizing:content;min-width:64px}#jump-search-button{cursor:pointer;background-image:none;min-width:64px;padding-right:9px}#repo-select{field-sizing:content;flex:0 5 auto;min-width:56px}#base-select{flex:0 120px}#source-select:focus,#repo-select:focus,#base-select:focus,#jump-select:focus,#jump-search-button:focus-visible,.base-picker-button:focus-visible,.base-picker-input:focus-visible,.toolbar-icon:focus-visible,.menu-item:focus-visible,.file-entry:focus-visible{outline:2px solid var(--cmux-diff-fg)}@supports (color:color-mix(in lab,red,red)){#source-select:focus,#repo-select:focus,#base-select:focus,#jump-select:focus,#jump-search-button:focus-visible,.base-picker-button:focus-visible,.base-picker-input:focus-visible,.toolbar-icon:focus-visible,.menu-item:focus-visible,.file-entry:focus-visible{outline:2px solid color-mix(in lab,var(--cmux-diff-fg) 36%,transparent)}}#source-select:focus,#repo-select:focus,#base-select:focus,#jump-select:focus,#jump-search-button:focus-visible,.base-picker-button:focus-visible,.base-picker-input:focus-visible,.toolbar-icon:focus-visible,.menu-item:focus-visible,.file-entry:focus-visible{outline-offset:1px}#base-picker{flex:0 auto;align-items:center;min-width:150px;display:flex;position:relative}.base-picker-button{border:1px solid var(--cmux-diff-fg);align-items:center;gap:5px;min-width:0;max-width:100%;height:24px;padding:0 7px 0 9px;display:inline-flex}@supports (color:color-mix(in lab,red,red)){.base-picker-button{border:1px solid color-mix(in lab,var(--cmux-diff-fg) 18%,transparent)}}.base-picker-button{background:var(--cmux-diff-fg);border-radius:6px}@supports (color:color-mix(in lab,red,red)){.base-picker-button{background:color-mix(in lab,var(--cmux-diff-fg) 11%,transparent)}}.base-picker-button{color:var(--cmux-diff-fg);font:inherit;cursor:pointer;font-weight:600}.base-picker-button:hover:not(:disabled),.base-picker-button[aria-expanded=true]{border-color:var(--cmux-diff-fg)}@supports (color:color-mix(in lab,red,red)){.base-picker-button:hover:not(:disabled),.base-picker-button[aria-expanded=true]{border-color:color-mix(in lab,var(--cmux-diff-fg) 30%,transparent)}}.base-picker-button:hover:not(:disabled),.base-picker-button[aria-expanded=true]{background:var(--cmux-diff-fg)}@supports (color:color-mix(in lab,red,red)){.base-picker-button:hover:not(:disabled),.base-picker-button[aria-expanded=true]{background:color-mix(in lab,var(--cmux-diff-fg) 15%,transparent)}}.base-picker-button:disabled{cursor:default;opacity:.85}.base-picker-button svg{stroke:currentColor;fill:none;stroke-width:1.6px;stroke-linecap:round;stroke-linejoin:round;opacity:.7;flex:none;width:12px;height:12px}.base-picker-label{align-items:center;gap:5px;min-width:0;display:inline-flex}.base-picker-prefix{color:var(--cmux-diff-fg);flex:none;font-weight:500}@supports (color:color-mix(in lab,red,red)){.base-picker-prefix{color:color-mix(in lab,var(--cmux-diff-fg) 60%,var(--cmux-diff-bg))}}.base-picker-head{text-overflow:ellipsis;white-space:nowrap;min-width:4ch;color:var(--cmux-diff-fg);flex:0 8 auto;font-weight:500;overflow:hidden}@supports (color:color-mix(in lab,red,red)){.base-picker-head{color:color-mix(in lab,var(--cmux-diff-fg) 62%,var(--cmux-diff-bg))}}.base-picker-ref{text-overflow:ellipsis;white-space:nowrap;flex:0 auto;min-width:6ch;overflow:hidden}.base-picker-meta{flex:0 1000 auto;align-items:center;gap:5px;min-width:0;display:inline-flex;overflow:hidden}.base-picker-reason{color:var(--cmux-diff-fg);flex:none;font-weight:500}@supports (color:color-mix(in lab,red,red)){.base-picker-reason{color:color-mix(in lab,var(--cmux-diff-fg) 64%,var(--cmux-diff-bg))}}.base-picker-reason{white-space:nowrap}.base-picker-reason-low{opacity:.6;font-style:italic}.base-picker-aheadbehind{font-variant-numeric:tabular-nums;color:var(--cmux-diff-fg);flex:none;font-weight:500}@supports (color:color-mix(in lab,red,red)){.base-picker-aheadbehind{color:color-mix(in lab,var(--cmux-diff-fg) 58%,var(--cmux-diff-bg))}}.base-picker-aheadbehind{white-space:nowrap}@container toolbar-left (max-width:380px){.base-picker-aheadbehind{display:none}}@container toolbar-left (max-width:312px){.base-picker-reason{display:none}}.base-picker-text{text-overflow:ellipsis;white-space:nowrap;font-weight:500;overflow:hidden}.base-picker-spinner{border:1.6px solid var(--cmux-diff-fg);border-radius:50%;flex:none;width:12px;height:12px}@supports (color:color-mix(in lab,red,red)){.base-picker-spinner{border:1.6px solid color-mix(in lab,var(--cmux-diff-fg) 26%,transparent)}}.base-picker-spinner{border-top-color:var(--cmux-diff-fg);animation:.7s linear infinite base-picker-spin}@keyframes base-picker-spin{to{transform:rotate(360deg)}}@media(prefers-reduced-motion:reduce){.base-picker-spinner{animation-duration:1.6s}}.base-picker-popover{border:1px solid var(--cmux-diff-fg);flex-direction:column;width:320px;max-width:min(86vw,360px);display:flex;position:fixed}@supports (color:color-mix(in lab,red,red)){.base-picker-popover{border:1px solid color-mix(in lab,var(--cmux-diff-fg) 13%,transparent)}}.base-picker-popover{background:var(--cmux-diff-bg);z-index:120;border-radius:8px;overflow:hidden;box-shadow:0 16px 34px lab(0% none none/.28)}.base-picker-search{border-bottom:1px solid var(--cmux-diff-fg);align-items:center;gap:6px;padding:7px 9px;display:flex}@supports (color:color-mix(in lab,red,red)){.base-picker-search{border-bottom:1px solid color-mix(in lab,var(--cmux-diff-fg) 11%,transparent)}}.base-picker-search svg{stroke:currentColor;fill:none;stroke-width:1.6px;stroke-linecap:round;stroke-linejoin:round;opacity:.55;flex:none;width:13px;height:13px}.base-picker-input{min-width:0;color:var(--cmux-diff-fg);font:inherit;background:0 0;border:0;outline:none;flex:auto}.base-picker-list{flex:auto;min-height:0;padding:4px;overflow-y:auto}.base-picker-status{color:var(--cmux-diff-fg);padding:12px 9px}@supports (color:color-mix(in lab,red,red)){.base-picker-status{color:color-mix(in lab,var(--cmux-diff-fg) 60%,var(--cmux-diff-bg))}}.base-picker-status{text-align:center}.base-picker-status-error{color:#ff5f56}@supports (color:color-mix(in lab,red,red)){.base-picker-status-error{color:color-mix(in lab,#ff5f56 70%,var(--cmux-diff-fg))}}.base-picker-group-header{letter-spacing:.06em;text-transform:uppercase;color:var(--cmux-diff-fg);padding:8px 8px 3px;font-size:10px;font-weight:600}@supports (color:color-mix(in lab,red,red)){.base-picker-group-header{color:color-mix(in lab,var(--cmux-diff-fg) 52%,var(--cmux-diff-bg))}}.base-picker-more{color:var(--cmux-diff-fg);padding:5px 8px 7px;font-size:11px}@supports (color:color-mix(in lab,red,red)){.base-picker-more{color:color-mix(in lab,var(--cmux-diff-fg) 48%,var(--cmux-diff-bg))}}.base-picker-more{cursor:default;-webkit-user-select:none;user-select:none}.base-picker-row{cursor:pointer;border-radius:6px;align-items:center;gap:8px;min-height:28px;padding:0 8px;display:flex}.base-picker-row-selected{background:var(--cmux-diff-fg)}@supports (color:color-mix(in lab,red,red)){.base-picker-row-selected{background:color-mix(in lab,var(--cmux-diff-fg) 12%,transparent)}}.base-picker-row-primary{text-overflow:ellipsis;white-space:nowrap;min-width:0;color:var(--cmux-diff-fg);flex:auto;overflow:hidden}.base-picker-row-primary strong{font-weight:700}.base-picker-row-secondary{text-overflow:ellipsis;white-space:nowrap;text-align:right;min-width:0;max-width:55%;color:var(--cmux-diff-fg);flex:0 auto;overflow:hidden}@supports (color:color-mix(in lab,red,red)){.base-picker-row-secondary{color:color-mix(in lab,var(--cmux-diff-fg) 55%,var(--cmux-diff-bg))}}.base-picker-pill{text-transform:uppercase;letter-spacing:.04em;color:var(--cmux-diff-accent);background:var(--cmux-diff-accent);border-radius:999px;flex:none;padding:1px 6px;font-size:10px;font-weight:600}@supports (color:color-mix(in lab,red,red)){.base-picker-pill{background:color-mix(in lab,var(--cmux-diff-accent) 16%,transparent)}}@media(max-width:760px){#toolbar{grid-template-columns:minmax(0,1fr) minmax(0,auto);grid-template-areas:"source actions""jump actions"}.toolbar-left{grid-area:source}.toolbar-middle{grid-area:jump;justify-content:stretch}.toolbar-actions{grid-area:actions}}.toolbar-icon{width:20px;height:20px;color:var(--cmux-diff-fg);background:0 0;border:1px solid #0000;border-radius:6px;justify-content:center;align-items:center;display:inline-flex}@supports (color:color-mix(in lab,red,red)){.toolbar-icon{color:color-mix(in lab,var(--cmux-diff-fg) 60%,var(--cmux-diff-bg))}}.toolbar-icon{cursor:pointer;padding:0}.toolbar-icon:hover,.toolbar-icon[aria-expanded=true]{border-color:var(--cmux-diff-fg)}@supports (color:color-mix(in lab,red,red)){.toolbar-icon:hover,.toolbar-icon[aria-expanded=true]{border-color:color-mix(in lab,var(--cmux-diff-fg) 14%,transparent)}}.toolbar-icon:hover,.toolbar-icon[aria-expanded=true]{background:var(--cmux-diff-fg)}@supports (color:color-mix(in lab,red,red)){.toolbar-icon:hover,.toolbar-icon[aria-expanded=true]{background:color-mix(in lab,var(--cmux-diff-fg) 9%,transparent)}}.toolbar-icon:hover,.toolbar-icon[aria-expanded=true],.toolbar-icon[aria-pressed=true]{color:var(--cmux-diff-fg)}@supports (color:color-mix(in lab,red,red)){.toolbar-icon[aria-pressed=true]{color:color-mix(in lab,var(--cmux-diff-fg) 78%,var(--cmux-diff-bg))}}.toolbar-icon[hidden]{display:none}.toolbar-icon svg,.menu-item svg{fill:none;stroke:currentColor;stroke-width:1px;stroke-linecap:round;stroke-linejoin:round;width:14px;height:14px;display:block}#layout-toggle svg [data-diff-deletion],#layout-toggle svg [data-diff-addition]{stroke:none}#layout-toggle svg [data-diff-deletion]{fill:light-dark(var(--cmux-diff-deletion-fg-light),var(--cmux-diff-deletion-fg-dark))}#layout-toggle svg [data-diff-addition]{fill:light-dark(var(--cmux-diff-addition-fg-light),var(--cmux-diff-addition-fg-dark))}.toolbar-icon svg [data-precision-dot],.menu-item svg [data-precision-dot]{stroke-width:2px}#options-menu{border:1px solid var(--cmux-diff-fg);min-width:246px;padding:8px;position:absolute;top:calc(100% + 7px);right:10px}@supports (color:color-mix(in lab,red,red)){#options-menu{border:1px solid color-mix(in lab,var(--cmux-diff-fg) 13%,transparent)}}#options-menu{background:var(--cmux-diff-bg);z-index:100;border-radius:8px;box-shadow:0 16px 34px lab(0% none none/.28)}#options-menu[hidden]{display:none}.menu-separator{background:var(--cmux-diff-fg);height:1px;margin:7px 6px}@supports (color:color-mix(in lab,red,red)){.menu-separator{background:color-mix(in lab,var(--cmux-diff-fg) 12%,transparent)}}.menu-item{width:100%;min-height:31px;color:var(--cmux-diff-fg);background:0 0;border:0;border-radius:6px;grid-template-columns:22px minmax(0,1fr) 18px;align-items:center;gap:10px;display:grid}@supports (color:color-mix(in lab,red,red)){.menu-item{color:color-mix(in lab,var(--cmux-diff-fg) 86%,var(--cmux-diff-bg))}}.menu-item{font:inherit;text-align:left;padding:0 7px}.menu-item:hover:not(:disabled){background:var(--cmux-diff-fg)}@supports (color:color-mix(in lab,red,red)){.menu-item:hover:not(:disabled){background:color-mix(in lab,var(--cmux-diff-fg) 10%,transparent)}}.menu-item:hover:not(:disabled){color:var(--cmux-diff-fg)}.menu-segment{cursor:default}.menu-segment:hover{background:0 0}.menu-segment-controls{background:0 0;border-radius:7px;justify-self:end;align-items:center;gap:2px;padding:2px;display:inline-flex}.segment-button{width:27px;height:24px;color:var(--cmux-diff-fg);background:0 0;border:0;border-radius:5px;justify-content:center;align-items:center;display:inline-flex}@supports (color:color-mix(in lab,red,red)){.segment-button{color:color-mix(in lab,var(--cmux-diff-fg) 62%,var(--cmux-diff-bg))}}.segment-button{padding:0}.segment-button:hover,.segment-button[aria-pressed=true]{background:var(--cmux-diff-fg)}@supports (color:color-mix(in lab,red,red)){.segment-button:hover,.segment-button[aria-pressed=true]{background:color-mix(in lab,var(--cmux-diff-fg) 12%,transparent)}}.segment-button:hover,.segment-button[aria-pressed=true],.menu-item:disabled{color:var(--cmux-diff-fg)}@supports (color:color-mix(in lab,red,red)){.menu-item:disabled{color:color-mix(in lab,var(--cmux-diff-fg) 36%,var(--cmux-diff-bg))}}.menu-label{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.menu-check{justify-self:end}#content{--cmux-diff-files-width:252px;grid-template-columns:minmax(0,1fr) var(--cmux-diff-files-width);overscroll-behavior:contain;contain:strict;background:0 0;flex:auto;grid-template-rows:minmax(0,1fr);grid-template-areas:"viewer files";min-width:0;min-height:0;display:grid;position:relative;overflow:hidden}body[data-files-hidden=true] #content{grid-template-columns:minmax(0,1fr) 0}body[data-status-only=true] #content{grid-template-columns:minmax(0,1fr);grid-template-areas:"viewer"}#files-sidebar{border-left:1px solid var(--cmux-diff-border);background:var(--cmux-diff-sidebar-bg);contain:strict;opacity:1;flex-direction:column;grid-area:files;width:100%;min-width:0;height:100%;min-height:0;transition:opacity .1s,visibility linear;display:flex;position:relative;overflow:hidden}#files-resize-handle{z-index:3;appearance:none;cursor:col-resize;background:0 0;border:0;outline:none;width:8px;margin:0;padding:0;position:absolute;top:0;bottom:0;left:0}#files-resize-handle:after{content:"";background:0 0;width:1px;position:absolute;top:0;bottom:0;left:0}body[data-files-hidden=true] #files-sidebar{opacity:0;pointer-events:none;visibility:hidden;transition:opacity .1s,visibility 0s linear .1s}body[data-status-only=true] #files-sidebar,#files-sidebar-backdrop{display:none}#files-header{z-index:1;border-bottom:1px solid var(--cmux-diff-border);background:var(--cmux-diff-sidebar-bg);min-height:30px;color:var(--cmux-diff-text-muted);justify-content:space-between;align-items:center;gap:8px;padding:0 7px 0 10px;display:flex;position:relative}#files-title{align-items:center;gap:6px;min-width:0;display:inline-flex}#files-header-actions{flex:none;align-items:center;gap:2px;display:inline-flex}#file-search-toggle{width:24px;height:24px;color:var(--cmux-diff-text-muted);background:0 0;border:0;border-radius:5px;flex:none;justify-content:center;align-items:center;padding:0;display:inline-flex}#file-search-toggle:hover,#file-search-toggle[aria-pressed=true]{background:var(--cmux-diff-hover-bg);color:var(--cmux-diff-fg)}#file-search-toggle svg{fill:none;stroke:currentColor;stroke-width:1px;stroke-linecap:round;stroke-linejoin:round;width:15px;height:15px}#file-list{background:var(--cmux-diff-sidebar-bg);--trees-bg-override:var(--cmux-diff-sidebar-bg);--trees-fg-override:var(--cmux-diff-text-subtle);--trees-fg-muted-override:var(--cmux-diff-text-muted);--trees-bg-muted-override:var(--cmux-diff-hover-bg);--trees-selected-bg-override:var(--cmux-diff-fg);flex:auto;min-height:0;padding:6px 4px 6px 6px;overflow:hidden}@supports (color:color-mix(in lab,red,red)){#file-list{--trees-selected-bg-override:color-mix(in lab, var(--cmux-diff-fg) 11%, transparent)}}#file-list{--trees-selected-fg-override:var(--cmux-diff-fg);--trees-selected-focused-border-color-override:transparent;--trees-border-color-override:var(--cmux-diff-border);--trees-focus-ring-color-override:var(--cmux-diff-accent)}@supports (color:color-mix(in lab,red,red)){#file-list{--trees-focus-ring-color-override:color-mix(in lab, var(--cmux-diff-accent) 72%, transparent)}}#file-list{--trees-font-family-override:var(--cmux-diff-ui-font-family);--trees-font-size-override:var(--cmux-diff-ui-font-size);--trees-font-weight-semibold-override:500;--trees-density-override:.78;--trees-border-radius-override:5px;--trees-item-padding-x-override:7px;--trees-item-margin-x-override:0;--trees-padding-inline-override:8px;--trees-search-bg-override:var(--cmux-diff-bg)}@supports (color:color-mix(in lab,red,red)){#file-list{--trees-search-bg-override:color-mix(in lab, var(--cmux-diff-bg) 92%, var(--cmux-diff-fg))}}#file-list{--trees-status-added-override:light-dark(var(--cmux-diff-addition-fg-light),var(--cmux-diff-addition-fg-dark));--trees-status-modified-override:var(--cmux-diff-accent);--trees-status-renamed-override:light-dark(#a26300,#ffd166);--trees-status-deleted-override:light-dark(var(--cmux-diff-deletion-fg-light),var(--cmux-diff-deletion-fg-dark))}body[data-loading=false] .diff-loading-placeholder,body[data-loading=false]:not([data-status-only=true]) #loading-layer{display:none}#file-list file-tree-container{width:100%;height:100%;min-height:0;display:block}.file-entry{width:100%;min-height:30px;color:inherit;font:inherit;text-align:left;background:0 0;border:0;border-radius:6px;grid-template-columns:18px minmax(0,1fr) auto;align-items:center;gap:8px;padding:3px 7px;display:grid}.file-entry:hover,.file-entry[aria-current=true]{background:var(--cmux-diff-fg)}@supports (color:color-mix(in lab,red,red)){.file-entry:hover,.file-entry[aria-current=true]{background:color-mix(in lab,var(--cmux-diff-fg) 9%,transparent)}}.file-status{width:17px;height:17px;color:var(--cmux-diff-text-muted);border:1px solid;border-radius:5px;justify-content:center;align-items:center;font-size:9px;line-height:1;display:inline-flex}.file-name{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.file-stats{color:var(--cmux-diff-text-muted);gap:5px;display:inline-flex}.stat-add{color:light-dark(var(--cmux-diff-addition-fg-light),var(--cmux-diff-addition-fg-dark))}.stat-del{color:light-dark(var(--cmux-diff-deletion-fg-light),var(--cmux-diff-deletion-fg-dark))}#viewer{--diffs-font-family:var(--cmux-diff-code-font-family);--diffs-header-font-family:var(--cmux-diff-ui-font-family);--diffs-font-size:var(--cmux-diff-font-size);--diffs-line-height:var(--cmux-diff-line-height);--diffs-bg-selection-override:light-dark(var(--cmux-diff-selection-bg-light),var(--cmux-diff-selection-bg-dark));overscroll-behavior:contain;overflow-anchor:none;contain:strict;border-bottom:1px solid var(--cmux-diff-border);background:0 0;grid-area:viewer;width:100%;min-width:0;height:100%;min-height:0;position:relative;overflow:clip auto}.code-view-root{overscroll-behavior:contain;overflow-anchor:none;contain:strict;width:100%;min-width:0;height:100%;min-height:0;position:relative;overflow:clip auto}@media(max-width:520px){#content,body[data-files-hidden=true] #content{grid-template-columns:minmax(0,1fr);grid-template-areas:"viewer"}#files-sidebar{display:none}#app[data-file-search-open=true] #files-sidebar-backdrop{z-index:44;-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px);cursor:default;background:#00000061;border:0;width:100%;height:100%;margin:0;padding:0;display:block;position:absolute;inset:0}#app[data-file-search-open=true] #files-sidebar-backdrop:focus-visible{outline:2px solid var(--cmux-diff-accent);outline-offset:-2px}#app[data-file-search-open=true] #files-sidebar{z-index:45;visibility:visible;opacity:1;pointer-events:auto;border-left:1px solid var(--cmux-diff-border);background:var(--cmux-diff-bg);isolation:isolate;--cmux-diff-sidebar-bg:var(--cmux-diff-bg);width:min(88vw,360px);max-width:calc(100% - 32px);display:flex;position:absolute;inset:0 0 0 auto;box-shadow:-18px 0 42px #00000057}#app[data-file-search-open=true] #files-resize-handle{display:none}}@media(prefers-reduced-motion:reduce){#files-sidebar{transition:none}}#viewer diffs-container{--diffs-font-family:var(--cmux-diff-code-font-family);--diffs-header-font-family:var(--cmux-diff-ui-font-family);--diffs-font-size:var(--cmux-diff-font-size);--diffs-line-height:var(--cmux-diff-line-height);--diffs-bg-selection-override:light-dark(var(--cmux-diff-selection-bg-light),var(--cmux-diff-selection-bg-dark));contain:layout paint style;flex:auto;width:100%;min-height:30px;display:block;overflow:clip}#viewer diffs-container [data-diffs-header]{overflow-x:clip}#viewer diffs-container [data-diffs-header=default] [data-metadata]{flex-shrink:0}#loading-layer{z-index:4;pointer-events:none;contain:strict;background:0 0;grid-area:viewer;position:absolute;inset:0;overflow:hidden}body[data-status-only=true] #loading-layer{pointer-events:auto;justify-content:center;align-items:center;width:100%;height:100%;padding:32px;display:flex;position:static}#status{z-index:5;border:1px solid var(--cmux-diff-fg);align-items:center;gap:10px;max-width:calc(100% - 24px);min-height:32px;padding:8px 12px;display:flex;position:absolute;top:10px;left:12px}@supports (color:color-mix(in lab,red,red)){#status{border:1px solid color-mix(in lab,var(--cmux-diff-fg) 10%,transparent)}}#status{background:var(--cmux-diff-bg);font-family:var(--cmux-diff-ui-font-family);font-size:13px;line-height:var(--cmux-diff-ui-line-height);color:var(--cmux-diff-fg);border-radius:7px}@supports (color:color-mix(in lab,red,red)){#status{color:color-mix(in lab,var(--cmux-diff-fg) 70%,var(--cmux-diff-bg))}}body[data-status-only=true] #status{text-align:center;text-wrap:balance;width:auto;max-width:340px;min-height:0;color:var(--cmux-diff-fg);background:0 0;border:0;border-radius:0;flex-direction:column;justify-content:center;align-items:center;gap:14px;padding:0;font-size:14px;line-height:1.55;position:static}@supports (color:color-mix(in lab,red,red)){body[data-status-only=true] #status{color:color-mix(in lab,var(--cmux-diff-fg) 58%,var(--cmux-diff-bg))}}body[data-status-only=true] #status-text{letter-spacing:.005em;font-weight:500}.visually-hidden{clip:rect(0 0 0 0);white-space:nowrap;width:1px;height:1px;position:absolute;overflow:hidden}#status-icon{display:none}body[data-status-only=true] #status:not([data-error=true]):not([data-pending=true]) #status-icon{background:var(--cmux-diff-fg);border-radius:16px;justify-content:center;align-items:center;width:56px;height:56px;display:flex}@supports (color:color-mix(in lab,red,red)){body[data-status-only=true] #status:not([data-error=true]):not([data-pending=true]) #status-icon{background:color-mix(in lab,var(--cmux-diff-fg) 5%,transparent)}}body[data-status-only=true] #status:not([data-error=true]):not([data-pending=true]) #status-icon{border:1px solid var(--cmux-diff-fg)}@supports (color:color-mix(in lab,red,red)){body[data-status-only=true] #status:not([data-error=true]):not([data-pending=true]) #status-icon{border:1px solid color-mix(in lab,var(--cmux-diff-fg) 8%,transparent)}}body[data-status-only=true] #status:not([data-error=true]):not([data-pending=true]) #status-icon:before{content:"";opacity:.8;background-color:currentColor;width:26px;height:26px;display:block;-webkit-mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='1.7' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z'/%3E%3Cpath d='M14 2v6h6'/%3E%3Cpath d='M9 13h6'/%3E%3Cpath d='M9 17h4'/%3E%3C/svg%3E") 50%/contain no-repeat;mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='1.7' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z'/%3E%3Cpath d='M14 2v6h6'/%3E%3Cpath d='M9 13h6'/%3E%3Cpath d='M9 17h4'/%3E%3C/svg%3E") 50%/contain no-repeat}#status[data-pending=true]:before,body[data-loading=true] #status:before{content:"";border:2px solid var(--cmux-diff-fg);flex:none;width:14px;height:14px}@supports (color:color-mix(in lab,red,red)){#status[data-pending=true]:before,body[data-loading=true] #status:before{border:2px solid color-mix(in lab,var(--cmux-diff-fg) 20%,transparent)}}#status[data-pending=true]:before,body[data-loading=true] #status:before{border-top-color:var(--cmux-diff-fg)}@supports (color:color-mix(in lab,red,red)){#status[data-pending=true]:before,body[data-loading=true] #status:before{border-top-color:color-mix(in lab,var(--cmux-diff-fg) 70%,var(--cmux-diff-bg))}}#status[data-pending=true]:before,body[data-loading=true] #status:before{border-radius:50%;animation:.8s linear infinite cmuxDiffPendingSpin}#status[data-error=true]{color:light-dark(#b42318,#ff8a80)}@keyframes cmuxDiffPendingSpin{to{transform:rotate(360deg)}}@media(prefers-reduced-motion:reduce){#status[data-pending=true]:before,body[data-loading=true] #status:before{animation:none}}#comments-section{border-top:1px solid var(--cmux-diff-border);background:var(--cmux-diff-sidebar-bg);flex-direction:column;flex:none;min-height:0;max-height:40%;display:flex}#comments-header{min-height:30px;color:var(--cmux-diff-text-muted);font-size:var(--cmux-diff-ui-font-size);align-items:center;padding:0 10px;display:flex}#comments-list{flex-direction:column;gap:4px;min-height:0;padding:0 6px 6px;display:flex;overflow-y:auto}.comments-empty{color:var(--cmux-diff-text-muted);font-size:var(--cmux-diff-ui-font-size);padding:2px 7px 6px}.comment-entry{color:var(--cmux-diff-text-subtle);font:inherit;font-size:var(--cmux-diff-ui-font-size);text-align:left;cursor:pointer;background:0 0;border:0;border-radius:5px;flex-direction:column;gap:2px;padding:5px 7px;display:flex}.comment-entry:hover{background:var(--cmux-diff-hover-bg)}.comment-entry-header{justify-content:space-between;align-items:center;gap:6px;display:flex}.comment-entry-location{color:var(--cmux-diff-fg);text-overflow:ellipsis;white-space:nowrap;font-weight:500;overflow:hidden}.comment-entry-badge{background:var(--cmux-diff-muted-bg);color:var(--cmux-diff-text-muted);font-size:calc(var(--cmux-diff-ui-font-size) - 1px);border-radius:4px;flex:none;padding:0 5px}.comment-entry-message{text-overflow:ellipsis;white-space:nowrap;color:var(--cmux-diff-text-muted);overflow:hidden}.comment-composer,.comment-card{border:1px solid var(--cmux-diff-border);background:light-dark(var(--cmux-diff-bg),var(--cmux-diff-bg));border-radius:10px;flex-direction:column;gap:8px;max-width:680px;margin:8px 12px;padding:10px 12px;display:flex}@supports (color:color-mix(in lab,red,red)){.comment-composer,.comment-card{background:light-dark(color-mix(in lab,var(--cmux-diff-bg) 92%,#fff),color-mix(in lab,var(--cmux-diff-bg) 90%,#fff))}}.comment-composer,.comment-card{color:var(--cmux-diff-fg);font-family:var(--cmux-diff-ui-font-family);font-size:13px;line-height:1.45;box-shadow:0 1px 2px lab(0% none none/.1),0 2px 8px lab(0% none none/.06)}.comment-composer:focus-within{border-color:var(--cmux-diff-accent)}@supports (color:color-mix(in lab,red,red)){.comment-composer:focus-within{border-color:color-mix(in lab,var(--cmux-diff-accent) 60%,var(--cmux-diff-border))}}.comment-composer:focus-within{box-shadow:0 0 0 3px var(--cmux-diff-accent)}@supports (color:color-mix(in lab,red,red)){.comment-composer:focus-within{box-shadow:0 0 0 3px color-mix(in lab,var(--cmux-diff-accent) 18%,transparent)}}.comment-composer-input{box-sizing:border-box;resize:none;width:100%;min-height:52px;color:var(--cmux-diff-fg);font:inherit;background:0 0;border:0;padding:0}.comment-composer-input::placeholder{color:var(--cmux-diff-text-muted)}.comment-composer-input:focus-visible{outline:none}.comment-composer-footer{justify-content:space-between;align-items:center;gap:8px;display:flex}.comment-composer-buttons{gap:6px;display:inline-flex}.comment-button{color:var(--cmux-diff-text-muted);font:inherit;cursor:pointer;background:0 0;border:0;border-radius:6px;padding:4px 12px;font-weight:500}.comment-button:hover:not(:disabled){background:var(--cmux-diff-hover-bg);color:var(--cmux-diff-fg)}.comment-button:disabled{opacity:.5;cursor:default}.comment-button-primary{background:var(--cmux-diff-accent);color:light-dark(#fff,#08233f)}.comment-button-primary:hover:not(:disabled){background:var(--cmux-diff-accent)}@supports (color:color-mix(in lab,red,red)){.comment-button-primary:hover:not(:disabled){background:color-mix(in lab,var(--cmux-diff-accent) 86%,var(--cmux-diff-fg))}}.comment-button-primary:hover:not(:disabled){color:light-dark(#fff,#08233f)}.comment-card-header{justify-content:space-between;align-items:center;gap:8px;min-height:20px;display:flex}.comment-card-location{font-weight:500;font-size:calc(var(--cmux-diff-ui-font-size) - 1px);color:var(--cmux-diff-text-muted)}.comment-card-actions{opacity:0;gap:2px;transition:opacity .1s;display:inline-flex}.comment-card:hover .comment-card-actions,.comment-card:focus-within .comment-card-actions{opacity:1}.comment-card-action{color:var(--cmux-diff-text-muted);font:inherit;font-size:calc(var(--cmux-diff-ui-font-size) - 1px);cursor:pointer;background:0 0;border:0;border-radius:4px;padding:1px 6px}.comment-card-action:hover{background:var(--cmux-diff-hover-bg);color:var(--cmux-diff-fg)}.comment-card-message{white-space:pre-wrap;overflow-wrap:anywhere}@property --tw-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-z{syntax:"*";inherits:false;initial-value:0}@property --tw-rotate-x{syntax:"*";inherits:false}@property --tw-rotate-y{syntax:"*";inherits:false}@property --tw-rotate-z{syntax:"*";inherits:false}@property --tw-skew-x{syntax:"*";inherits:false}@property --tw-skew-y{syntax:"*";inherits:false}@property --tw-space-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-ordinal{syntax:"*";inherits:false}@property --tw-slashed-zero{syntax:"*";inherits:false}@property --tw-numeric-figure{syntax:"*";inherits:false}@property --tw-numeric-spacing{syntax:"*";inherits:false}@property --tw-numeric-fraction{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-blur{syntax:"*";inherits:false}@property --tw-brightness{syntax:"*";inherits:false}@property --tw-contrast{syntax:"*";inherits:false}@property --tw-grayscale{syntax:"*";inherits:false}@property --tw-hue-rotate{syntax:"*";inherits:false}@property --tw-invert{syntax:"*";inherits:false}@property --tw-opacity{syntax:"*";inherits:false}@property --tw-saturate{syntax:"*";inherits:false}@property --tw-sepia{syntax:"*";inherits:false}@property --tw-drop-shadow{syntax:"*";inherits:false}@property --tw-drop-shadow-color{syntax:"*";inherits:false}@property --tw-drop-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-drop-shadow-size{syntax:"*";inherits:false}@property --tw-backdrop-blur{syntax:"*";inherits:false}@property --tw-backdrop-brightness{syntax:"*";inherits:false}@property --tw-backdrop-contrast{syntax:"*";inherits:false}@property --tw-backdrop-grayscale{syntax:"*";inherits:false}@property --tw-backdrop-hue-rotate{syntax:"*";inherits:false}@property --tw-backdrop-invert{syntax:"*";inherits:false}@property --tw-backdrop-opacity{syntax:"*";inherits:false}@property --tw-backdrop-saturate{syntax:"*";inherits:false}@property --tw-backdrop-sepia{syntax:"*";inherits:false}@property --tw-duration{syntax:"*";inherits:false}@property --tw-ease{syntax:"*";inherits:false}@property --tw-outline-style{syntax:"*";inherits:false;initial-value:solid}`;function Vn(){const t=document.getElementById("cmux-diff-viewer-config");if(!t?.textContent)throw new Error("Missing cmux diff viewer config");return JSON.parse(t.textContent)}function Kn(t){const e=Vn();$t("diff",Wn),qt(De(e.payload?.appearance)),typeof e.payload?.title=="string"&&e.payload.title.trim()!==""&&(document.title=e.payload.title);const r=St(e.payload?.labels,{assertMissing:kt()}),i=hi(e,r);document.body.dataset.filesHidden="false",Ce(i);const n=Wt(()=>s.jsx(_i,{config:e,initialStatus:i}));Rt.createRoot(t).render(s.jsx(Lt,{router:n}))}export{Kn as mountDiffSurface}; diff --git a/Resources/markdown-viewer/webviews-app/chunks/feedSurface.mjs b/Resources/markdown-viewer/webviews-app/chunks/feedSurface.mjs new file mode 100644 index 000000000000..b3af879a31c9 --- /dev/null +++ b/Resources/markdown-viewer/webviews-app/chunks/feedSurface.mjs @@ -0,0 +1 @@ +import{b as O,i as h,j as c,c as Me,a as ne}from"./vendor.mjs";import{c as ae}from"./router.mjs";let te=null;const ee=new Set;let V=null;function ie(t){te=t;for(const e of ee)e()}function de(t){t.type==="feed.snapshot"&&ie(t.snapshot)}typeof window<"u"&&(window.cmuxFeedBridge={receive:de});async function le(t,e={}){const i=window.webkit?.messageHandlers?.cmuxFeed;if(!i?.postMessage)throw new Error("Native Feed bridge is unavailable.");const s=await i.postMessage({method:t,params:e});if(!s.ok)throw new Error(s.error?.userMessage||"Feed request failed.");return s.value}async function re(){return V||(V=le("feed.subscribe").then(ie).catch(t=>{throw V=null,t}),V)}const q={getSnapshot:()=>te,subscribe(t){return ee.add(t),re(),()=>ee.delete(t)}},_=t=>({presentation:"mask",url:`data:image/svg+xml;base64,${t}`}),$=(t,e)=>({presentation:"image",url:`data:${t};base64,${e}`}),je={cursor:_("PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxZW0iIGhlaWdodD0iMWVtIiB2aWV3Qm94PSIwIDAgMjQgMjQiPjxwYXRoIGZpbGw9ImN1cnJlbnRDb2xvciIgZD0iTTExLjUwMy4xMzFMMS44OTEgNS42NzhhLjg0Ljg0IDAgMCAwLS40Mi43MjZ2MTEuMTg4YzAgLjMuMTYyLjU3NS40Mi43MjRsOS42MDkgNS41NWExIDEgMCAwIDAgLjk5OCAwbDkuNjEtNS41NWEuODQuODQgMCAwIDAgLjQyLS43MjRWNi40MDRhLjg0Ljg0IDAgMCAwLS40Mi0uNzI2TDEyLjQ5Ny4xMzFhMS4wMSAxLjAxIDAgMCAwLS45OTYgME0yLjY1NyA2LjMzOGgxOC41NWMuMjYzIDAgLjQzLjI4Ny4yOTcuNTE1TDEyLjIzIDIyLjkxOGMtLjA2Mi4xMDctLjIyOS4wNjQtLjIyOS0uMDZWMTIuMzM1YS41OS41OSAwIDAgMC0uMjk1LS41MWwtOS4xMS01LjI1N2MtLjEwOS0uMDYzLS4wNjQtLjIzLjA2MS0uMjMiLz48L3N2Zz4="),gemini:_("PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxZW0iIGhlaWdodD0iMWVtIiB2aWV3Qm94PSIwIDAgMjQgMjQiPjxwYXRoIGZpbGw9ImN1cnJlbnRDb2xvciIgZD0iTTExLjA0IDE5LjMyUTEyIDIxLjUxIDEyIDI0cTAtMi40OS45My00LjY4cS45Ni0yLjE5IDIuNTgtMy44MXQzLjgxLTIuNTVRMjEuNTEgMTIgMjQgMTJxLTIuNDkgMC00LjY4LS45M2ExMi4zIDEyLjMgMCAwIDEtMy44MS0yLjU4YTEyLjMgMTIuMyAwIDAgMS0yLjU4LTMuODFRMTIgMi40OSAxMiAwcTAgMi40OS0uOTYgNC42OHEtLjkzIDIuMTktMi41NSAzLjgxYTEyLjMgMTIuMyAwIDAgMS0zLjgxIDIuNThRMi40OSAxMiAwIDEycTIuNDkgMCA0LjY4Ljk2cTIuMTkuOTMgMy44MSAyLjU1dDIuNTUgMy44MSIvPjwvc3ZnPg=="),copilot:_("PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxZW0iIGhlaWdodD0iMWVtIiB2aWV3Qm94PSIwIDAgMjQgMjQiPjxwYXRoIGZpbGw9ImN1cnJlbnRDb2xvciIgZD0iTTIzLjkyMiAxNi45OTdDMjMuMDYxIDE4LjQ5MiAxOC4wNjMgMjIuMDIgMTIgMjIuMDJTLjkzOSAxOC40OTIuMDc4IDE2Ljk5N0EuNi42IDAgMCAxIDAgMTYuNzQxdi0yLjg2OWExIDEgMCAwIDEgLjA1My0uMjJjLjM3Mi0uOTM1IDEuMzQ3LTIuMjkyIDIuNjA1LTIuNjU2Yy4xNjctLjQyOS40MTQtMS4wNTUuNjQ0LTEuNTE3YTEwIDEwIDAgMCAxLS4wNTItMS4wODZjMC0xLjMzMS4yODItMi40OTkgMS4xMzItMy4zNjhjLjM5Ny0uNDA2Ljg5LS43MTcgMS40NzQtLjk1MkM3LjI1NSAyLjkzNyA5LjI0OCAxLjk4IDExLjk3OCAxLjk4czQuNzY3Ljk1NyA2LjE2NiAyLjA5M2MuNTg0LjIzNSAxLjA3Ny41NDYgMS40NzQuOTUyYy44NS44NjkgMS4xMzIgMi4wMzcgMS4xMzIgMy4zNjhjMCAuMzY4LS4wMTQuNzMzLS4wNTIgMS4wODZjLjIzLjQ2Mi40NzcgMS4wODguNjQ0IDEuNTE3YzEuMjU4LjM2NCAyLjIzMyAxLjcyMSAyLjYwNSAyLjY1NmEuOC44IDAgMCAxIC4wNTMuMjJ2Mi44NjlhLjYuNiAwIDAgMS0uMDc4LjI1Nm0tMTEuNzUtNS45OTJoLS4zNDRhNCA0IDAgMCAxLS4zNTUuNTA4Yy0uNzcuOTQ3LTEuOTE4IDEuNDkyLTMuNTA4IDEuNDkyYy0xLjcyNSAwLTIuOTg5LS4zNTktMy43ODItMS4yNTlhMiAyIDAgMCAxLS4wODUtLjEwNEw0IDExLjc0NnY2LjU4NWMxLjQzNS43NzkgNC41MTQgMi4xNzkgOCAyLjE3OXM2LjU2NS0xLjQgOC0yLjE3OXYtNi41ODVsLS4wOTgtLjEwNHMtLjAzMy4wNDUtLjA4NS4xMDRjLS43OTMuOS0yLjA1NyAxLjI1OS0zLjc4MiAxLjI1OWMtMS41OSAwLTIuNzM4LS41NDUtMy41MDgtMS40OTJhNCA0IDAgMCAxLS4zNTUtLjUwOG0yLjMyOCAzLjI1Yy41NDkgMCAxIC40NTEgMSAxdjJjMCAuNTQ5LS40NTEgMS0xIDFzLTEtLjQ1MS0xLTF2LTJjMC0uNTQ5LjQ1MS0xIDEtMW0tNSAwYy41NDkgMCAxIC40NTEgMSAxdjJjMCAuNTQ5LS40NTEgMS0xIDFzLTEtLjQ1MS0xLTF2LTJjMC0uNTQ5LjQ1MS0xIDEtMW0zLjMxMy02LjE4NWMuMTM2IDEuMDU3LjQwMyAxLjkxMy44NzggMi40OTdjLjQ0Mi41NDQgMS4xMzQuOTM4IDIuMzQ0LjkzOGMxLjU3MyAwIDIuMjkyLS4zMzcgMi42NTctLjc1MWMuMzg0LS40MzUuNTU4LTEuMTUuNTU4LTIuMzYxYzAtMS4xNC0uMjQzLTEuODQ3LS43MDUtMi4zMTljLS40NzctLjQ4OC0xLjMxOS0uODYyLTIuODI0LTEuMDI1Yy0xLjQ4Ny0uMTYxLTIuMTkyLjEzOC0yLjUzMy41MjljLS4yNjkuMzA3LS40MzcuODA4LS40MzggMS41Nzh2LjAyMXEwIC4zOTcuMDYzLjg5M20tMS42MjYgMHEuMDYzLS40OTYuMDYzLS44OTR2LS4wMmMtLjAwMS0uNzctLjE2OS0xLjI3MS0uNDM4LTEuNTc4Yy0uMzQxLS4zOTEtMS4wNDYtLjY5LTIuNTMzLS41MjljLTEuNTA1LjE2My0yLjM0Ny41MzctMi44MjQgMS4wMjVjLS40NjIuNDcyLS43MDUgMS4xNzktLjcwNSAyLjMxOWMwIDEuMjExLjE3NSAxLjkyNi41NTggMi4zNjFjLjM2NS40MTQgMS4wODQuNzUxIDIuNjU3Ljc1MWMxLjIxIDAgMS45MDItLjM5NCAyLjM0NC0uOTM4Yy40NzUtLjU4NC43NDItMS40NC44NzgtMi40OTciLz48L3N2Zz4="),codebuddy:$("image/svg+xml","PHN2ZyB3aWR0aD0iNDAiIGhlaWdodD0iNDAiIHZpZXdCb3g9IjAgMCA0MCA0MCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPGcgY2xpcC1wYXRoPSJ1cmwoI2NsaXAwXzUxMTBfMTQ3NzEpIj4KPHJlY3Qgd2lkdGg9IjQwIiBoZWlnaHQ9IjQwIiByeD0iMjAiIGZpbGw9InVybCgjcGFpbnQwX2xpbmVhcl81MTEwXzE0NzcxKSIvPgo8ZyBmaWx0ZXI9InVybCgjZmlsdGVyMF9mXzUxMTBfMTQ3NzEpIj4KPGNpcmNsZSBjeD0iMTIuNjA3MSIgY3k9IjM0Ljk3OTQiIHI9IjE0LjA4MSIgZmlsbD0iIzMyRTZCOSIgZmlsbC1vcGFjaXR5PSIwLjQiLz4KPC9nPgo8ZyBmaWx0ZXI9InVybCgjZmlsdGVyMV9mXzUxMTBfMTQ3NzEpIj4KPGNpcmNsZSBjeD0iMzMuMzQwNCIgY3k9IjQzLjYxODUiIHI9IjEyLjg3MDQiIGZpbGw9IiMzMkU2QjkiLz4KPC9nPgo8cGF0aCBkPSJNMjcuNjg5NyAzLjM0MjZDMjguMDU3IDMuMDEzMjIgMjguMDc5NSAyLjk5OTgzIDI4LjM0ODUgMi45ODM2NkMyOC43ODUxIDIuOTUxNzcgMjkuMTg1OCAzLjE2MTA3IDI5Ljg2NjQgMy43ODA3MkMzMS40NTY2IDUuMjI1NzQgMzMuNjcwMyA4LjE5NzI0IDM1LjA0NyAxMC43MzQzTDM1LjU3OTYgMTEuNzE5MUwzNi4zMzA5IDEyLjA5MjdDMzcuMDU2MiAxMi40NTkzIDM4LjI0NTkgMTMuMjExMSAzOC43NDI4IDEzLjYxNEMzOC45NjczIDEzLjc5OTcgMzguOTk5MiAxMy44MDMyIDM5LjIzMjYgMTMuNzEyNEM0MC4yODcyIDEzLjMwMTcgNDEuNzk4MiAxMy44NDYgNDMuMTMwNyAxNS4xMjQ0QzQ0LjMzMDIgMTYuMjc0IDQ1LjQ3OSAxOC4yMzg0IDQ1LjkxOTEgMTkuODc3OEM0NS45ODMzIDIwLjE0MTcgNDYuMDY4MyAyMC43MDkgNDYuMDk5NCAyMS4xMzE0QzQ2LjE5OTcgMjIuNjE0NCA0NS43MjQzIDIzLjc5ODYgNDQuODA4NSAyNC4zMzQ5QzQ0LjYyMTMgMjQuNDQzIDQ0LjYwODUgMjQuNDcyNSA0NC42MTM3IDI0LjkzOUM0NC42NTU5IDI3LjE2MDQgNDQuMDU3MSAyOS4zNzc3IDQyLjg1NDMgMzEuNTRDNDEuNDk2NSAzMy45Njc4IDM5LjA3OTQgMzYuNDc5OCAzNS44MDczIDM4Ljg0NkMzNC4wNTAyIDQwLjEyNDcgMjkuODkxOCA0Mi41NDY5IDI4LjAxMjIgNDMuMzk3M0MyMy41MDk2IDQ1LjQyNDQgMTkuODk5OSA0Ni4yMDIyIDE2Ljc2NDUgNDUuODE4MUMxNC44OTQzIDQ1LjU5MTUgMTIuNzc3MSA0NC44NjExIDExLjUyNDYgNDQuMDEzN0MxMS4xOTUxIDQzLjc4NiAxMS4xNDI4IDQzLjc3MTkgMTAuODkwOSA0My44NDM5QzkuNTUwMTcgNDQuMjI4OSA3Ljc5NDQyIDQzLjQzNzQgNi4zMDI3MiA0MS43ODE3QzUuNzA3NzEgNDEuMTE5NyA0Ljc0NzA5IDM5LjQ5MzkgNC40MzU3NSAzOC42MjQxQzMuNzE1NjkgMzYuNTg4NyAzLjg1ODU5IDM0Ljc1MiA0LjgxNzgzIDMzLjY1NTFDNS4wNjU3IDMzLjM3MjUgNS4wNzM4NyAzMy4zNjA3IDUuMDE5NzIgMzIuODg1NkM0LjkzMDMzIDMyLjEwNzkgNC44ODk4MiAzMC45NTY2IDQuOTMwNjYgMzAuMjEzOEw0Ljk2MzQzIDI5LjUyMDVMMy45MjA5MSAyNy42Nzc3QzIuMzA3OCAyNC44MDc0IDEuMjgzMjYgMjIuMzk2OCAwLjg4Nzk4MiAyMC41NTU0QzAuNjc5NDAyIDE5LjU0NiAwLjY5Mjc4MSAxOS4wOTgxIDAuOTQ5MDYxIDE4Ljc2NjdDMS4xMDUyOSAxOC41NjY2IDEuNjE2MjIgMTguMzU5NCAyLjIzMjUyIDE4LjI0NTVDMy43ODUxOCAxNy45NzI5IDcuMTcyMDMgMTguMjE5OCAxMC45Mzk0IDE4Ljg4NUwxMS4zMzAzIDE4Ljk1MjVMMTIuMTkwMyAxOC4xOTIxQzEzLjYxNzkgMTYuOTI3NSAxNC41NjY1IDE2LjIxNzYgMTYuMzE1IDE1LjEyNzRDMTguMTM3MyAxMy45ODcyIDIwLjE5NDMgMTMuMDQ5OCAyMi41MTAzIDEyLjMwNzFMMjMuMjUzMyAxMi4wNjg3TDIzLjY2MTUgMTAuOTk2NEMyNS4xMjM5IDcuMTM1ODcgMjYuNjIxOCA0LjI4OTY5IDI3LjY4OTcgMy4zNDI2Wk0xNS40MzkzIDIzLjEyNjFDMTMuNzg2NCAyNC4wODA0IDEyLjk2MDIgMjQuNTU4MiAxMi4zNTI5IDI1LjA5M0M5Ljg5MzY0IDI3LjI1ODUgOC45NzM4IDMwLjY4ODggMTAuMDIwOCAzMy43OTM4QzEwLjI3OTQgMzQuNTYwNiAxMC43NTY4IDM1LjM4NyAxMS43MTExIDM3LjAzOThDMTIuNjY1MyAzOC42OTI2IDEzLjE0MjQgMzkuNTE5NCAxMy42NzcxIDQwLjEyNjdDMTUuODQyNiA0Mi41ODU5IDE5LjI3MzIgNDMuNTA0NSAyMi4zNzgzIDQyLjQ1NzRDMjMuMTQ1IDQyLjE5ODkgMjMuOTcyIDQxLjcyMjMgMjUuNjI0OCA0MC43NjhMMzUuMTMzMyAzNS4yNzgzQzM2Ljc4NjIgMzQuMzI0IDM3LjYxMjQgMzMuODQ2MiAzOC4yMTk2IDMzLjMxMTRDNDAuNjc4OSAzMS4xNDU5IDQxLjU5ODggMjcuNzE1NiA0MC41NTE4IDI0LjYxMDVDNDAuMjkzMiAyMy44NDM4IDM5LjgxNTcgMjMuMDE3NCAzOC44NjE1IDIxLjM2NDZDMzcuOTA3MiAxOS43MTE3IDM3LjQzMDIgMTguODg1IDM2Ljg5NTUgMTguMjc3N0MzNC43Mjk5IDE1LjgxODUgMzEuMjk5MyAxNC44OTk5IDI4LjE5NDMgMTUuOTQ3QzI3LjQyNzUgMTYuMjA1NSAyNi42MDA2IDE2LjY4MjEgMjQuOTQ3OCAxNy42MzY0TDE1LjQzOTMgMjMuMTI2MVoiIGZpbGw9InVybCgjcGFpbnQxX2xpbmVhcl81MTEwXzE0NzcxKSIvPgo8cmVjdCB4PSIxNS44ODE2IiB5PSIzMC4wMjczIiB3aWR0aD0iNC4wMDkwNCIgaGVpZ2h0PSI4LjMyNjQ2IiByeD0iMi4wMDQ1MiIgdHJhbnNmb3JtPSJyb3RhdGUoLTMwIDE1Ljg4MTYgMzAuMDI3MykiIGZpbGw9IndoaXRlIi8+CjxyZWN0IHg9IjI2LjY5NzgiIHk9IjIzLjc4MTIiIHdpZHRoPSI0LjAwOTA0IiBoZWlnaHQ9IjguMzI2NDYiIHJ4PSIyLjAwNDUyIiB0cmFuc2Zvcm09InJvdGF0ZSgtMzAgMjYuNjk3OCAyMy43ODEyKSIgZmlsbD0id2hpdGUiLz4KPC9nPgo8ZGVmcz4KPGZpbHRlciBpZD0iZmlsdGVyMF9mXzUxMTBfMTQ3NzEiIHg9Ii0xNC45MTYzIiB5PSI3LjQ1NTk5IiB3aWR0aD0iNTUuMDQ2OCIgaGVpZ2h0PSI1NS4wNDciIGZpbHRlclVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzPSJzUkdCIj4KPGZlRmxvb2QgZmxvb2Qtb3BhY2l0eT0iMCIgcmVzdWx0PSJCYWNrZ3JvdW5kSW1hZ2VGaXgiLz4KPGZlQmxlbmQgbW9kZT0ibm9ybWFsIiBpbj0iU291cmNlR3JhcGhpYyIgaW4yPSJCYWNrZ3JvdW5kSW1hZ2VGaXgiIHJlc3VsdD0ic2hhcGUiLz4KPGZlR2F1c3NpYW5CbHVyIHN0ZERldmlhdGlvbj0iNi43MjEyMyIgcmVzdWx0PSJlZmZlY3QxX2ZvcmVncm91bmRCbHVyXzUxMTBfMTQ3NzEiLz4KPC9maWx0ZXI+CjxmaWx0ZXIgaWQ9ImZpbHRlcjFfZl81MTEwXzE0NzcxIiB4PSI5LjQ2OTU5IiB5PSIxOS43NDc3IiB3aWR0aD0iNDcuNzQxNyIgaGVpZ2h0PSI0Ny43NDEiIGZpbHRlclVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzPSJzUkdCIj4KPGZlRmxvb2QgZmxvb2Qtb3BhY2l0eT0iMCIgcmVzdWx0PSJCYWNrZ3JvdW5kSW1hZ2VGaXgiLz4KPGZlQmxlbmQgbW9kZT0ibm9ybWFsIiBpbj0iU291cmNlR3JhcGhpYyIgaW4yPSJCYWNrZ3JvdW5kSW1hZ2VGaXgiIHJlc3VsdD0ic2hhcGUiLz4KPGZlR2F1c3NpYW5CbHVyIHN0ZERldmlhdGlvbj0iNS41MDAxOSIgcmVzdWx0PSJlZmZlY3QxX2ZvcmVncm91bmRCbHVyXzUxMTBfMTQ3NzEiLz4KPC9maWx0ZXI+CjxsaW5lYXJHcmFkaWVudCBpZD0icGFpbnQwX2xpbmVhcl81MTEwXzE0NzcxIiB4MT0iMjAiIHkxPSIwIiB4Mj0iMjAiIHkyPSI0MCIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPgo8c3RvcCBzdG9wLWNvbG9yPSIjNkM0REZGIi8+CjxzdG9wIG9mZnNldD0iMSIgc3RvcC1jb2xvcj0iIzU4M0VEMyIvPgo8L2xpbmVhckdyYWRpZW50Pgo8bGluZWFyR3JhZGllbnQgaWQ9InBhaW50MV9saW5lYXJfNTExMF8xNDc3MSIgeDE9IjE0LjYzOSIgeTE9IjEwLjc5MTciIHgyPSIzMi4xNzEyIiB5Mj0iNDEuMTU4NSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPgo8c3RvcCBzdG9wLWNvbG9yPSJ3aGl0ZSIgc3RvcC1vcGFjaXR5PSIwLjgiLz4KPHN0b3Agb2Zmc2V0PSIwLjQzNzY4OSIgc3RvcC1jb2xvcj0id2hpdGUiLz4KPC9saW5lYXJHcmFkaWVudD4KPGNsaXBQYXRoIGlkPSJjbGlwMF81MTEwXzE0NzcxIj4KPHJlY3Qgd2lkdGg9IjQwIiBoZWlnaHQ9IjQwIiByeD0iMjAiIGZpbGw9IndoaXRlIi8+CjwvY2xpcFBhdGg+CjwvZGVmcz4KPC9zdmc+Cg=="),factory:$("image/x-icon","AAABAAMAEBAAAAAAIACnAQAANgAAACAgAAAAACAA7gMAAN0BAAAwMAAAAAAgAEEGAADLBQAAiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAABbklEQVR4nNVTsYrCUBCcvJxoIUrQwjr+goKljSip/ABjKUKKlIKlhYhgYaNoLETQ0i5YCnYh+QDxAyxMF6OChXvkcScWCoJccQtbPNidNzuzKzDGCB8E+6T57wAqlQpGoxFisRgajQYsy0I2m30PQBAE5PN5yLIMXdcxmUzAGEMoFHoK8PX4UBQF4XAYs9kMnuehVCohHo/Dtm1IkgTDMLBarbBcLp8z6Ha7qNfrqFar8H0fyWQSqqqi1WrBdV2k02kUCoXXDObzOYbDIURR5I1B8el0QjQaxX6/x2azQa/Xew0wHo/RbrdxvV5xuVxwPB5xPp85G9M0+ViapqHT6TyoyBgFKYoiOY5DhmFQIpGgXC5HtVqN+v0+pVIpGgwGtNvtyLZtXn9P/AQRccuCX8rlMprNJhaLxV0Lx3FQLBa5xS9HWK/XPAMbI5EIMpkMdyXQZbvdYjqdvrdIt9sNh8OBi/e7SIE+z0L4/8f0Da2inUv6aSJrAAAAAElFTkSuQmCCiVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAADtUlEQVR4nO1WWyh0URTejjEjJDPNg1uYvAgZT6Mk9yJjIsmIt+Ft8KB4mpQJSS4PJJoklzIhiSFCxgu555okDMklIXItLe3Vf07/eDpnUvMyp3bn7L323uvb3/rW2seNYRggTnwYZzp3AXAxIJgBnU5HrFYrCQgIsBtXqVTEaDQSi8VCcnNzBaqQYYBPUygU8Pz8DF9fX9DT04NjmZmZsLS0BC8vL5ytvb2d135sI3wndnd3w97eHqyvr8P7+ztYrVaYnp4GtVoNEokEKisrEYBGo/l7AN7e3nBzcwORkZEQGhqKJ25tbbWbMzIyggBqampAqVTyB0F4PGlpaWR5eZkcHR2Ry8tL0t/fTxISEji7TCYjGRkZpKmpiTw+PhKTyUT29/eJwWAgUqnUMQ00NzfjqUpLS2FoaAipZm1RUVHw+fkJYWFh2K+uroaTkxPw8vLi5qSmpoLNZoPb21vIz88XHgKbzYaUsq2jowP8/f05+/z8PJSVlWH8z87OoLi42G59eHg47Ozs4FoqVMEABgcHUXRU6fX19XB8fAwPDw9gNBpBJpOBVquF2dlZfK+uroJIJMJ1KpUKs+T19RXe3t7AZDJBUFCQcADZ2dl4MrZPHWRlZcHk5CRcX18jEOrk9PQUioqKkI3NzU10urCwAG1tbTA1NeV4Fri7u+OGNJa/bdHR0cgIG567uzsYGBiAwsJCkMvl3DxKfUpKiuNpqFarYWJiAr8DAwNBp9PB6OgoCuvw8JADsLW1hUITi8V26/Py8mBxcdFxAFKpFCne2NhA1R8cHEBVVRWC6erqgrGxMRQrDRctUOfn52AwGLiY+/j4YNGKj48XDkCv12PxoSekFY9SScPChuD+/h7p3t3dhfT0dNRIQUEBgqRO5+bmoKWlBT4+PqCxsVEYAIlEAk9PT+icium3fXx8HNOSfjc0NMDw8DBno2GgY1SMbIgsFotwBhITE5FWetLy8nLw8/PD8eTkZDxVREQE9im9NBv+T7XOzk6Mf0xMDFRUVEBcXJxjGhD9S72+vj6MdW9vL2xvb8PMzIzdnIuLC6wVtO/r6wtXV1ccYIfTkPnVPDw8uBuPZgM7HhwcjEzRIhUSEgK1tbVYwvnuK+L73/D9/U0UCgV+i8ViotFoiFarJUqlkpjNZrx4VlZWiFwuJzk5OX//Q8IwDKytrXHComovKSkBT09PtJnNZhyn5VnInkTI5KSkJBRkbGwsl5JsoxdVXV0d1gghe7ohCic+jDOduwC4GKAU/ADJJ9DJ7wBVHQAAAABJRU5ErkJggolQTkcNChoKAAAADUlIRFIAAAAwAAAAMAgGAAAAVwL5hwAABghJREFUeJzVWGlIVU8Un65pakhZGi6tTwsXgiANDYqoVCLDlLRPIqX4waUPFSmRYpLYohHRHm1fog0NCtQUUcNQoSDDsrDVNLcW08reh078Dt3hXt8r/P/vk8c9MPDuzJmZ85s553fOvCmKopAwsSjC5KIIk4siTC6KMLkowuSiCJOLIkwuijC5KI5YJCUlRdTU1IiYmJi/6ri6uorY2FhRXFwsTp48KeLi4hyxtRDIxEba2rVraWxsjKxWK338+JH8/Px043PmzKHCwkJ6//4966itp6fH0L5qMwRg6tSp9OTJE51hx44d4zFfX18qKyujz58/c39/fz99+PBB6mGe4mwAmzdvZmNgZHd3N/8eHR2lw4cPs8FdXV18+iEhIaw/f/58CaC0tNT5ACorK+n79++0cuVKNm5wcJCN6+3tpbS0NJo2bZpOf/369RIA5ijOBADfxmkfOXJE9uG0Ydzjx4/tzjl9+rQE0NjYSHl5eRQREeEcAOnp6QwgMDBQ9s2aNYsGBgbYwNDQUJ2+u7u7jIH8/Hzav3+/jJ/nz59TcXExhYWFTQ4ABKvFYiEPDw/Zd+PGDbp69aqNLvwfRu3du1fXn5qayv3Nzc3k4uKiY7Gqqioe+/nzJ92+fdsGvGEAMFalyWvXrlFGRgYNDQ1RQkKCje6SJUvYkNbWVl1/W1sbrwGD7e2xbds2Scdfv36luLg4xwF49eqVjiq1TDJjxgwb/erqagYxb948/l6zZg3r46T/tofFYqFPnz7Jte/du+c4ALW1tbwoGKe9vZ2+ffsmNwLj7Nmzh7y8vKR+UlISj2VmZvJ3RUUF/fjxg5YtW2aztp+fH5WUlOiMx+8NGzY4DsDu3bt54evXr/P37NmzmSbv3r0rrx2ZNicnh4PVzc2N3r59yzQbHBzMOmfPntWtGRUVxX3Dw8PScPwGq43P5oYBgGlGRkbo/v37NmNBQUF06NAh6uvrYyM6Oztp69atdPToUTaorq6OYycgIIB8fHxox44d9OjRI2n02NgYPXjwgHVAqxM1/D8BQDt16hSDgBH2xqdPn86BiOAdHysvXrxgxsJ8fH/58oXZJj09nfz9/Xk+3BC3Zi+mHAIAQQbfz83N/ace3OvOnTs2IHAzqI1iY2PJ09PTZp6XlxfniQMHDkwOALTjx4+zIdoSAZy+YsUKKigooKamJg5We4yFLIxy41/rl5WVsSuhEJwUAHAfnNLOnTv5JE+cOEFv3ryRRuI3Murq1at1xoM+we1gsZs3b9K6det0yUz50yIjI1m/qKhocgDAjbQBiAa3unXrFm3cuJFcXV1ZDwEMY7ds2cI68PUFCxbQhQsXJGuBjrOysrj8UNfHzQIoCEGb9Q0DAIOcOXPGhv/37dsng1BtKJ2hp5YZz549o5aWFjm+dOlSzgtIdFarlQMbAb19+3Y+BABH/6ZNmxwDAKcCI1TDsSGKMW3i0jYYA73o6Gh5G/hGnGj1li9fLnXttYMHDzoOgPY5iNP7m67q+whmtS8mJob7zp07Z3dOSUkJB772drUvO4e4EE5LvQVcPXKCt7e3jV5DQwPrJCcnyz5kZpTY4H6tv2vLlPLycl4vJSWFLl68yBl8oqX1hIMY3J2dnU0dHR1sJF5fSPvh4eE8Hh8fz/0vX77kUkI799KlSzyGLKztX7RoEQc1bmmidvxvAOPpDnU/coLKKOqb2B4FIiAx9vr1ax27lJeX80HYS2yTCmB8LXTlyhXpu/auHolJHcctom/x4sXsVufPnze0v2EAaJcvX5blwviyYteuXVzjqAAQD3A3UKvVauW3gpG9pzAKA+Lm5ibevXsnZs6cKfr6+kROTo4IDAwUq1atEvHx8WJ0dFSUlpaKhw8fivr6ehyYnPv06VMREREhfv365bx/5sDv9ngc1It3sZat1GBWW2JiouHbNwwAJYL67xsYBVSKlxjK6/G6CxculO8GgFEc4L6GXQji6+sr5s6dK7q6usTIyMg/dS0WiwgNDRVVVVXGXOePOASAM0URJhdFmFwUYXJRhMlFESYXRZhcFGFyUZxtgFH5DTKA7j8bLK6dAAAAAElFTkSuQmCC"),qoder:$("image/png","iVBORw0KGgoAAAANSUhEUgAAALQAAAC0CAMAAAAKE/YAAAAAyVBMVEURERMq21z///8hj0Hh4eGmpqYgICLw8PAkqEqIiInDw8QnwlMvLzFNTU4UKhx5eXopzlgedjg+Pj8THhgbXS9qamyXl5jk+uoXRCWv8cIWNyEfgzx66JlbW121tbXy/fUZUCoUKxwkqUpF33DX+OAcaTMYRCZra2wcajPS0tOlpaZS4ns33WZcXF0mtU9f5IRt5o/J9taU7a0aXS4ySDpEcFIltU5Q1XYnwVMfgjy89Myi77giLSYukUt7hn+T4KlF33F8koPI6dKlvz6KAAAD3ElEQVR42u3c13biMBCAYUkIjAsYMB1CSUjfTdvey/s/1BI2ARIEyJLwjM+Z/zIXPl8UWTLGDmMURVEURVEURVEURVEURVGU+xpH7VFwKWUwaseVUh7AceCJ9bwgxu0+KkqhyPPRsiO1GDO7EoidIWRHe8gI2VFRaOW18JhbUugm3+ZrmJ8KKhjWZSlSBs+OhUHAbF+YVYzgzG1hXBtq/bsSFgEt21ZmIHZbWJc52xcukplukufCUTK79S/yhLOyWrZLUrgsG3ZbOC5oHP6KX7jv0Juk48nx3GHXP7eTYzy77z02Gx9y2W64A8++3V3zZb+Hv34eih04GuGvwxO+0acPiM/C3i3fUjjBOdAd1RivKlfxDXRnyPdUu0A20NIv8/3V3a7R9nuIDpoX8FyRLq5EtdBOx9rq6u5ysVXroR2qrU5D//8xNNG8i2EHj1k6dJiAzw5veRtPF82/OPrAYm5eXTBro7mbTSZ2YE6BdrPuFU3R6x9M9NFuhtr06v+cmaEvALdDnxmiQ7jL/ytmiuZ9B98Tmu3dJXP0KdDi4b2+O5AGXQa6WoqZBboGs4kHzAbNpyDLdGSHPoNA+8wO3QRAe4r7GDdp0HUAdKw4SogcLZktupA9WjXQrIYbrZrRLOG40b7qIH3kaOUt0CZudKA8yAA3Wv0d4TFqtKe+QV5DjR4pj9HlqNHKRZrVcaMjB1M6a7RyC0+5tWSOHrmYHVmj1VP6Bjf6yMHakTk6cnAaZo5WbS1VjhytOkABAN22XPHSD7QDtG+JPoZAx3boLodAH9mhQxB0xQpd5yDokg26z2HQ7NIcnXyEQhfN0QMOhW4Zo99xMHRkiu7X4NBsZIauhhwQ3TJCm5vdfGkrDdAWZjfoVnq0jdnR1+MyLdrK7AjdSom2M7t6AKuYCn1R4xjQkUyBHnCOAq35PoC0nxpOn89reHroOud40OxcQy2bIUeF1nkLscM5MrTGm8AI0fMPuV4O0azke/lD72GPkaJ3v8qMFr3rjLzGi97+XxDuMKO3sR9wo9Xse+xo1T9EGONHK3ab2xygN5btXh7Qr9mdfKAf2WvqYU7QLzbJTm7Q84vtwOFQZ4VeLdudPKGX7IdcoefsxW5zYouus2x73CQ7tupmxujFsj17o/1QuvKHCWMA7J6mulDtluFnxzP7r446XDyRvsEOEwZT6c/ezzDhcuZW6+uzJOwzsL7/2P1ayIuTLVmxwyqD7P3W9wDCwoYsOS3XNn4XkLoDxepQPt32959OGYqS7uDz2lpWHkwSlouS/qQ5b3I2ZRRFURRFURRFURRFURRFURT11D+KvFuepijo0gAAAABJRU5ErkJggg==")},se=40;function ue(t){return t instanceof HTMLElement&&(t.isContentEditable||["INPUT","SELECT","TEXTAREA"].includes(t.tagName))}function Ie(t,e){if(t.key==="Tab"&&!t.altKey&&!t.ctrlKey&&!t.metaKey){const M=document.activeElement,r=M?.closest(".feed-card");if(r){const I=[...r.querySelectorAll('button:not(:disabled), input:not(:disabled), select:not(:disabled), textarea:not(:disabled), [tabindex="0"]')].filter(D=>D.tabIndex>=0);if(M===r&&I.length>0){t.preventDefault(),I[t.shiftKey?I.length-1:0]?.focus();return}if(t.shiftKey&&M===I[0]){t.preventDefault(),r.focus({preventScroll:!0});return}}const d=[...e.querySelectorAll('button:not(:disabled), input:not(:disabled), select:not(:disabled), textarea:not(:disabled), [tabindex="0"]')].filter(I=>I!==e&&I.tabIndex>=0);if(d.length===0)return;const j=d.indexOf(document.activeElement),N=j<0?t.shiftKey?d.length-1:0:(j+(t.shiftKey?-1:1)+d.length)%d.length;t.preventDefault(),d[N]?.focus();return}if(ue(t.target)||t.altKey||t.metaKey)return;const i=t.key.toLowerCase(),s=!t.ctrlKey&&(i==="j"||i==="arrowdown")?1:!t.ctrlKey&&(i==="k"||i==="arrowup")?-1:t.ctrlKey&&i==="n"?1:t.ctrlKey&&i==="p"?-1:0,l=!t.ctrlKey&&(i==="home"||i==="end");if(s===0&&!l)return;const n=[...e.querySelectorAll(".feed-card")];if(n.length===0)return;const a=document.activeElement?.closest(".feed-card"),o=a?n.indexOf(a):-1,u=i==="home"?0:i==="end"?n.length-1:o<0?s>0?0:n.length-1:Math.max(0,Math.min(n.length-1,o+s));t.preventDefault(),n[u]?.focus({preventScroll:!0}),n[u]?.scrollIntoView?.({block:"nearest"})}function Ne(t){const e=[...t.currentTarget.querySelectorAll('[role="tab"]')],i=e.indexOf(document.activeElement);if(i<0)return;const s=t.key,l=s==="Home"?0:s==="End"?e.length-1:s==="ArrowLeft"?(i-1+e.length)%e.length:s==="ArrowRight"?(i+1)%e.length:-1;l<0||(t.preventDefault(),t.stopPropagation(),e[l]?.focus(),e[l]?.click())}function Ae(t){const e=new Date().toISOString();return[{allowed_permission_modes:["deny","once","always"],created_at:e,id:"feed-demo-permission",kind:"permissionRequest",source:"claude",status:"pending",tool_input:t.demoPermissionBody,tool_name:t.demoPermissionTitle,workstream_id:"feed-demo"},{created_at:e,id:"feed-demo-plan",kind:"exitPlan",plan:t.demoPlanBody,source:"codex",status:"pending",title:t.demoPlanTitle,workstream_id:"feed-demo"},{created_at:e,id:"feed-demo-question",kind:"question",question_prompt:t.demoQuestionPrompt,questions:[{id:"verification",multi_select:!1,options:[{id:"focused",label:t.demoQuestionOptionFocused},{id:"full",label:t.demoQuestionOptionFull}],prompt:t.demoQuestionPrompt}],source:"gemini",status:"pending",title:t.demoQuestionTitle,workstream_id:"feed-demo"}]}function ge(){const t=O.c(62),e=h.useSyncExternalStore(q.subscribe,q.getSnapshot,q.getSnapshot),[i,s]=h.useState("actionable"),[l,n]=h.useState(se);let a;t[0]===Symbol.for("react.memo_cache_sentinel")?(a=[],t[0]=a):a=t[0];const[o,u]=h.useState(a),[M,r]=h.useState(null),d=h.useRef(ze);let j;t[1]===Symbol.for("react.memo_cache_sentinel")?(j=S=>{if(d.current(),d.current=xe,!S)return;const G=X=>Ie(X,S);S.addEventListener("keydown",G),d.current=()=>S.removeEventListener("keydown",G),(!document.activeElement||document.activeElement===document.body)&&S.focus()},t[1]=j):j=t[1];const N=j;if(!e){let S;return t[2]===Symbol.for("react.memo_cache_sentinel")?(S=c.jsx("main",{className:"feed-shell feed-loading","aria-busy":"true"}),t[2]=S):S=t[2],S}let I;t[3]!==o||t[4]!==e.items?(I=o.length>0?[...o,...e.items]:e.items,t[3]=o,t[4]=e.items,t[5]=I):I=t[5];const D=I;let g;t[6]!==i||t[7]!==D?(g=i==="actionable"?D.filter(De):D,t[6]=i,t[7]=D,t[8]=g):g=t[8];const A=g;let y;t[9]!==l||t[10]!==i||t[11]!==A?(y=i==="activity"?A.slice(0,l):A,t[9]=l,t[10]=i,t[11]=A,t[12]=y):y=t[12];const z=y,m=i==="activity"&&z.length{r(null);const X=typeof G.itemId=="string"?G.itemId:"";if(X.startsWith("feed-demo-")){u(oe=>oe.map(K=>K.id===X?{...K,status:"resolved"}:K));return}try{await le(S,G)}catch{r(e.copy.requestFailed)}},t[17]=e.copy.requestFailed,t[18]=x):x=t[18];const L=x;let p;t[19]!==e.copy.feed?(p=c.jsx("h1",{children:e.copy.feed}),t[19]=e.copy.feed,t[20]=p):p=t[20];const b=i==="actionable";let w;t[21]===Symbol.for("react.memo_cache_sentinel")?(w=()=>s("actionable"),t[21]=w):w=t[21];const J=i==="actionable"?0:-1;let Q;t[22]!==e.copy.actionable||t[23]!==J||t[24]!==b?(Q=c.jsx("button",{"aria-selected":b,onClick:w,role:"tab",tabIndex:J,children:e.copy.actionable}),t[22]=e.copy.actionable,t[23]=J,t[24]=b,t[25]=Q):Q=t[25];const F=i==="activity";let W;t[26]===Symbol.for("react.memo_cache_sentinel")?(W=()=>s("activity"),t[26]=W):W=t[26];const H=i==="activity"?0:-1;let C;t[27]!==e.copy.activity||t[28]!==F||t[29]!==H?(C=c.jsx("button",{"aria-selected":F,onClick:W,role:"tab",tabIndex:H,children:e.copy.activity}),t[27]=e.copy.activity,t[28]=F,t[29]=H,t[30]=C):C=t[30];let k;t[31]!==Q||t[32]!==C?(k=c.jsxs("div",{className:"feed-filter",onKeyDown:Ne,role:"tablist",tabIndex:-1,children:[Q,C]}),t[31]=Q,t[32]=C,t[33]=k):k=t[33];let U;t[34]!==k||t[35]!==p?(U=c.jsxs("header",{className:"feed-header",children:[p,k]}),t[34]=k,t[35]=p,t[36]=U):U=t[36];let Y;t[37]!==M?(Y=M&&c.jsx("div",{className:"feed-error",role:"alert",children:M}),t[37]=M,t[38]=Y):Y=t[38];let P;t[39]!==i||t[40]!==L||t[41]!==e||t[42]!==z?(P=z.length===0?c.jsx(Le,{filter:i,onLoadExamples:()=>{u(Ae(e.copy)),s("actionable")},snapshot:e}):z.map(S=>c.jsx(me,{item:S,copy:e.copy,perform:L,sourceIcon:e.sourceIcons[S.source],sourceLabel:e.sourceLabels[S.source]},S.id)),t[39]=i,t[40]=L,t[41]=e,t[42]=z,t[43]=P):P=t[43];let v;t[44]!==m||t[45]!==L||t[46]!==e.copy.loadOlder||t[47]!==e.copy.loadingOlder||t[48]!==e.hasMore||t[49]!==e.isLoadingOlder?(v=(m||e.hasMore)&&c.jsx("button",{className:"feed-load-more",disabled:!m&&e.isLoadingOlder,onClick:()=>{m?n(ye):L("feed.loadOlder",{})},children:!m&&e.isLoadingOlder?e.copy.loadingOlder:e.copy.loadOlder}),t[44]=m,t[45]=L,t[46]=e.copy.loadOlder,t[47]=e.copy.loadingOlder,t[48]=e.hasMore,t[49]=e.isLoadingOlder,t[50]=v):v=t[50];let R;t[51]!==P||t[52]!==v?(R=c.jsxs("section",{className:"feed-list",children:[P,v]}),t[51]=P,t[52]=v,t[53]=R):R=t[53];let Z;t[54]!==e.copy.feed||t[55]!==U||t[56]!==Y||t[57]!==R?(Z=c.jsxs("div",{"aria-label":e.copy.feed,className:"feed-keyboard-root",ref:N,tabIndex:-1,children:[U,Y,R]}),t[54]=e.copy.feed,t[55]=U,t[56]=Y,t[57]=R,t[58]=Z):Z=t[58];let B;return t[59]!==Z||t[60]!==T?(B=c.jsx("main",{className:"feed-shell",style:T,children:Z}),t[59]=Z,t[60]=T,t[61]=B):B=t[61],B}function ye(t){return t+se}function De(t){return t.status==="pending"}function xe(){}function ze(){}function Le(t){const e=O.c(39),{filter:i,onLoadExamples:s,snapshot:l}=t,n=i==="actionable"?l.copy.emptyActionable:l.copy.emptyActivity,a=i==="actionable"?l.copy.emptyActionableDescription:l.copy.emptyActivityDescription;let o;e[0]!==l.copy.integrationChecking||e[1]!==l.copy.integrationDisabled||e[2]!==l.copy.integrationNeedsSetup||e[3]!==l.copy.integrationReady?(o=z=>({checking:l.copy.integrationChecking,disabled:l.copy.integrationDisabled,needsSetup:l.copy.integrationNeedsSetup,ready:l.copy.integrationReady})[z.status],e[0]=l.copy.integrationChecking,e[1]=l.copy.integrationDisabled,e[2]=l.copy.integrationNeedsSetup,e[3]=l.copy.integrationReady,e[4]=o):o=e[4];const u=o;let M;e[5]!==n?(M=c.jsx("h2",{children:n}),e[5]=n,e[6]=M):M=e[6];let r;e[7]!==a?(r=c.jsx("p",{children:a}),e[7]=a,e[8]=r):r=e[8];let d;e[9]!==s||e[10]!==l.copy.loadExamples?(d=c.jsx("button",{className:"feed-load-examples",onClick:s,children:l.copy.loadExamples}),e[9]=s,e[10]=l.copy.loadExamples,e[11]=d):d=e[11];let j;e[12]!==l.copy.integrationsTitle?(j=c.jsx("h3",{id:"feed-integrations-title",children:l.copy.integrationsTitle}),e[12]=l.copy.integrationsTitle,e[13]=j):j=e[13];let N;if(e[14]!==l.integrations||e[15]!==l.sourceIcons||e[16]!==l.sourceLabels||e[17]!==u){let z;e[19]!==l.sourceIcons||e[20]!==l.sourceLabels||e[21]!==u?(z=m=>c.jsxs("div",{className:"feed-integration","data-status":m.status,children:[c.jsx(ce,{icon:l.sourceIcons[m.source],label:l.sourceLabels[m.source],source:m.source}),c.jsx("span",{className:"feed-integration-status",children:u(m)})]},m.source),e[19]=l.sourceIcons,e[20]=l.sourceLabels,e[21]=u,e[22]=z):z=e[22],N=l.integrations.map(z),e[14]=l.integrations,e[15]=l.sourceIcons,e[16]=l.sourceLabels,e[17]=u,e[18]=N}else N=e[18];let I;e[23]!==N?(I=c.jsx("div",{className:"feed-integration-grid",children:N}),e[23]=N,e[24]=I):I=e[24];let D;e[25]!==l.copy.integrationHint?(D=c.jsx("p",{className:"feed-integration-hint",children:l.copy.integrationHint}),e[25]=l.copy.integrationHint,e[26]=D):D=e[26];let g;e[27]!==j||e[28]!==I||e[29]!==D?(g=c.jsxs("section",{"aria-labelledby":"feed-integrations-title",className:"feed-integrations",children:[j,I,D]}),e[27]=j,e[28]=I,e[29]=D,e[30]=g):g=e[30];let A;e[31]!==l.copy.keyboardHelp?(A=c.jsx("p",{className:"feed-keyboard-help",children:l.copy.keyboardHelp}),e[31]=l.copy.keyboardHelp,e[32]=A):A=e[32];let y;return e[33]!==A||e[34]!==M||e[35]!==r||e[36]!==d||e[37]!==g?(y=c.jsxs("div",{className:"feed-empty",children:[M,r,d,g,A]}),e[33]=A,e[34]=M,e[35]=r,e[36]=d,e[37]=g,e[38]=y):y=e[38],y}function me(t){const e=O.c(34),{item:i,copy:s,perform:l,sourceIcon:n,sourceLabel:a}=t;let o;e[0]!==i.kind||e[1]!==i.title||e[2]!==i.tool_name?(o=i.title||i.tool_name||i.kind.replaceAll("_"," "),e[0]=i.kind,e[1]=i.title,e[2]=i.tool_name,e[3]=o):o=e[3];const u=o,M=`feed-card feed-card-${i.status}`;let r;e[4]!==i.source||e[5]!==n||e[6]!==a?(r=c.jsx(ce,{icon:n,label:a,source:i.source}),e[4]=i.source,e[5]=n,e[6]=a,e[7]=r):r=e[7];let d;e[8]!==u?(d=c.jsx("h2",{children:u}),e[8]=u,e[9]=d):d=e[9];let j;e[10]!==r||e[11]!==d?(j=c.jsxs("div",{className:"feed-card-title",children:[r,d]}),e[10]=r,e[11]=d,e[12]=j):j=e[12];let N;e[13]!==i.created_at?(N=new Date(i.created_at).toLocaleTimeString([],{hour:"numeric",minute:"2-digit"}),e[13]=i.created_at,e[14]=N):N=e[14];let I;e[15]!==N?(I=c.jsx("time",{children:N}),e[15]=N,e[16]=I):I=e[16];let D;e[17]!==j||e[18]!==I?(D=c.jsxs("div",{className:"feed-card-heading",children:[j,I]}),e[17]=j,e[18]=I,e[19]=D):D=e[19];let g;e[20]!==i.cwd?(g=i.cwd&&c.jsx("div",{className:"feed-cwd",children:i.cwd}),e[20]=i.cwd,e[21]=g):g=e[21];let A;e[22]!==i?(A=c.jsx(Te,{item:i}),e[22]=i,e[23]=A):A=e[23];let y;e[24]!==s||e[25]!==i||e[26]!==l?(y=i.status==="pending"&&c.jsx(Se,{item:i,copy:s,perform:l}),e[24]=s,e[25]=i,e[26]=l,e[27]=y):y=e[27];let z;return e[28]!==A||e[29]!==y||e[30]!==M||e[31]!==D||e[32]!==g?(z=c.jsxs("article",{className:M,tabIndex:-1,children:[D,g,A,y]}),e[28]=A,e[29]=y,e[30]=M,e[31]=D,e[32]=g,e[33]=z):z=e[33],z}function ce(t){const e=O.c(14),{icon:i,label:s,source:l}=t,n=s??l;let a,o;e[0]!==i||e[1]!==l?(a=i?{presentation:"image",url:i}:je[l],o=a?.presentation==="mask"?{"--feed-source-icon":`url(${JSON.stringify(a.url)})`}:void 0,e[0]=i,e[1]=l,e[2]=a,e[3]=o):(a=e[2],o=e[3]);const u=o;let M;e[4]!==n||e[5]!==a||e[6]!==u?(M=a?.presentation==="image"?c.jsx("img",{alt:"","aria-hidden":"true",className:"feed-source-logo feed-source-logo-image",src:a.url}):c.jsx("span",{className:"feed-source-logo feed-source-logo-mask","data-fallback":a?void 0:"",style:u,"aria-hidden":"true",children:!a&&n.slice(0,1).toUpperCase()}),e[4]=n,e[5]=a,e[6]=u,e[7]=M):M=e[7];let r;e[8]!==n?(r=c.jsx("span",{children:n}),e[8]=n,e[9]=r):r=e[9];let d;return e[10]!==l||e[11]!==M||e[12]!==r?(d=c.jsxs("span",{className:"feed-source","data-feed-source":l,children:[M,r]}),e[10]=l,e[11]=M,e[12]=r,e[13]=d):d=e[13],d}function Te(t){const e=O.c(2),{item:i}=t,s=i.plan||i.question_prompt||i.tool_input||i.tool_result||i.text;if(!s)return null;let l;return e[0]!==s?(l=c.jsx("pre",{className:"feed-body",children:s}),e[0]=s,e[1]=l):l=e[1],l}function Se(t){const e=O.c(64),{item:i,copy:s,perform:l}=t;if(i.kind==="permissionRequest"){let n;e[0]!==i.allowed_permission_modes?(n=i.allowed_permission_modes??["deny"],e[0]=i.allowed_permission_modes,e[1]=n):n=e[1];let a;e[2]!==n?(a=new Set(n),e[2]=n,e[3]=a):a=e[3];const o=a;let u;e[4]!==s||e[5]!==i.id||e[6]!==o||e[7]!==l?(u=o.has("deny")&&c.jsx("button",{className:"danger",onClick:()=>l("feed.permission.reply",{itemId:i.id,mode:"deny"}),children:s.deny}),e[4]=s,e[5]=i.id,e[6]=o,e[7]=l,e[8]=u):u=e[8];let M;e[9]!==s||e[10]!==i.id||e[11]!==o||e[12]!==l?(M=o.has("once")&&c.jsx("button",{onClick:()=>l("feed.permission.reply",{itemId:i.id,mode:"once"}),children:s.allowOnce}),e[9]=s,e[10]=i.id,e[11]=o,e[12]=l,e[13]=M):M=e[13];let r;e[14]!==s||e[15]!==i.id||e[16]!==o||e[17]!==l?(r=o.has("always")&&c.jsx("button",{className:"primary",onClick:()=>l("feed.permission.reply",{itemId:i.id,mode:"always"}),children:s.allowAlways}),e[14]=s,e[15]=i.id,e[16]=o,e[17]=l,e[18]=r):r=e[18];let d;e[19]!==s||e[20]!==i.id||e[21]!==o||e[22]!==l?(d=o.has("all")&&c.jsx("button",{className:"primary",onClick:()=>l("feed.permission.reply",{itemId:i.id,mode:"all"}),children:s.allowAll}),e[19]=s,e[20]=i.id,e[21]=o,e[22]=l,e[23]=d):d=e[23];let j;e[24]!==s||e[25]!==i.id||e[26]!==o||e[27]!==l?(j=o.has("bypass")&&c.jsx("button",{className:"danger",onClick:()=>l("feed.permission.reply",{itemId:i.id,mode:"bypass"}),children:s.allowBypass}),e[24]=s,e[25]=i.id,e[26]=o,e[27]=l,e[28]=j):j=e[28];let N;return e[29]!==u||e[30]!==M||e[31]!==r||e[32]!==d||e[33]!==j?(N=c.jsxs("div",{className:"feed-actions",children:[u,M,r,d,j]}),e[29]=u,e[30]=M,e[31]=r,e[32]=d,e[33]=j,e[34]=N):N=e[34],N}if(i.kind==="exitPlan"){let n;e[35]!==i.id||e[36]!==l?(n=()=>l("feed.exitPlan.reply",{itemId:i.id,mode:"manual"}),e[35]=i.id,e[36]=l,e[37]=n):n=e[37];let a;e[38]!==s.planManual||e[39]!==n?(a=c.jsx("button",{onClick:n,children:s.planManual}),e[38]=s.planManual,e[39]=n,e[40]=a):a=e[40];let o;e[41]!==i.id||e[42]!==l?(o=()=>l("feed.exitPlan.reply",{itemId:i.id,mode:"autoAccept"}),e[41]=i.id,e[42]=l,e[43]=o):o=e[43];let u;e[44]!==s.planAuto||e[45]!==o?(u=c.jsx("button",{onClick:o,children:s.planAuto}),e[44]=s.planAuto,e[45]=o,e[46]=u):u=e[46];let M;e[47]!==i.id||e[48]!==l?(M=()=>l("feed.exitPlan.reply",{itemId:i.id,mode:"ultraplan"}),e[47]=i.id,e[48]=l,e[49]=M):M=e[49];let r;e[50]!==s.planUltraplan||e[51]!==M?(r=c.jsx("button",{className:"primary",onClick:M,children:s.planUltraplan}),e[50]=s.planUltraplan,e[51]=M,e[52]=r):r=e[52];let d;return e[53]!==a||e[54]!==u||e[55]!==r?(d=c.jsxs("div",{className:"feed-actions",children:[a,u,r]}),e[53]=a,e[54]=u,e[55]=r,e[56]=d):d=e[56],d}if(i.kind==="question"){let n;e[57]!==i.questions?(n=i.questions??[],e[57]=i.questions,e[58]=n):n=e[58];let a;return e[59]!==s||e[60]!==i||e[61]!==l||e[62]!==n?(a=c.jsx(pe,{item:i,questions:n,copy:s,perform:l}),e[59]=s,e[60]=i,e[61]=l,e[62]=n,e[63]=a):a=e[63],a}return null}function pe(t){const e=O.c(34),{item:i,questions:s,copy:l,perform:n}=t;let a;e[0]!==i.question_options||e[1]!==i.question_prompt||e[2]!==s?(a=s.length>0?s:[{id:"question",multi_select:!1,options:i.question_options??[],prompt:i.question_prompt??""}],e[0]=i.question_options,e[1]=i.question_prompt,e[2]=s,e[3]=a):a=e[3];const o=a;let u;e[4]===Symbol.for("react.memo_cache_sentinel")?(u={},e[4]=u):u=e[4];const[M,r]=h.useState(u);let d;e[5]===Symbol.for("react.memo_cache_sentinel")?(d={},e[5]=d):d=e[5];const[j,N]=h.useState(d);let I;e[6]===Symbol.for("react.memo_cache_sentinel")?(I=(T,x)=>{r(L=>{const p=L[T.id]??[],b=T.multi_select?p.includes(x)?p.filter(w=>w!==x):[...p,x]:[x];return{...L,[T.id]:b}})},e[6]=I):I=e[6];const D=I;let g;if(e[7]!==j||e[8]!==o||e[9]!==M){let T;e[11]!==j||e[12]!==M?(T=x=>{const L=j[x.id]?.trim();if(L)return[L];const p=M[x.id]??[],b=x.options.filter(w=>p.includes(w.id)).map(fe);return b.length>0?[b.join(", ")]:[]},e[11]=j,e[12]=M,e[13]=T):T=e[13],g=o.flatMap(T),e[7]=j,e[8]=o,e[9]=M,e[10]=g}else g=e[10];const A=g;let y;if(e[14]!==l.questionPlaceholder||e[15]!==j||e[16]!==o||e[17]!==M){let T;e[19]!==l.questionPlaceholder||e[20]!==j||e[21]!==M?(T=x=>c.jsxs("div",{className:"feed-question",children:[x.prompt&&c.jsx("div",{className:"feed-question-prompt",children:x.prompt}),c.jsx("div",{className:"feed-options",children:x.options.map(L=>c.jsxs("button",{"aria-pressed":(M[x.id]??[]).includes(L.id),onClick:()=>D(x,L.id),children:[c.jsx("strong",{children:L.label}),L.description&&c.jsx("span",{children:L.description})]},L.id))}),c.jsx("input",{"aria-label":l.questionPlaceholder,onChange:L=>N(p=>({...p,[x.id]:L.target.value})),placeholder:l.questionPlaceholder,value:j[x.id]??""})]},x.id),e[19]=l.questionPlaceholder,e[20]=j,e[21]=M,e[22]=T):T=e[22],y=o.map(T),e[14]=l.questionPlaceholder,e[15]=j,e[16]=o,e[17]=M,e[18]=y}else y=e[18];const z=A.length===0;let m;e[23]!==A||e[24]!==i.id||e[25]!==n?(m=()=>n("feed.question.reply",{itemId:i.id,selections:A}),e[23]=A,e[24]=i.id,e[25]=n,e[26]=m):m=e[26];let f;e[27]!==l.questionSubmit||e[28]!==z||e[29]!==m?(f=c.jsx("button",{className:"primary",disabled:z,onClick:m,children:l.questionSubmit}),e[27]=l.questionSubmit,e[28]=z,e[29]=m,e[30]=f):f=e[30];let E;return e[31]!==y||e[32]!==f?(E=c.jsxs("div",{className:"feed-question-actions",children:[y,f]}),e[31]=y,e[32]=f,e[33]=E):E=e[33],E}function fe(t){return t.label}function we(t){document.documentElement.dataset.cmuxWebviewKind="feed",document.body.dataset.cmuxWebviewKind="feed";const e=ae(()=>c.jsx(ge,{}));Me.createRoot(t).render(c.jsx(ne,{router:e}))}export{we as mountFeedSurface}; diff --git a/Resources/markdown-viewer/webviews-app/chunks/installWebviewStyles.mjs b/Resources/markdown-viewer/webviews-app/chunks/installWebviewStyles.mjs index 10955ad22a49..099323367f22 100644 --- a/Resources/markdown-viewer/webviews-app/chunks/installWebviewStyles.mjs +++ b/Resources/markdown-viewer/webviews-app/chunks/installWebviewStyles.mjs @@ -1 +1 @@ -import{e as u,f as a,g as i,d,O as f}from"./vendor.mjs";function l(){const t=globalThis.crypto;if(typeof t?.randomUUID=="function")return t.randomUUID();const o=t?.getRandomValues?.bind(t);if(typeof o=="function"){const e=new Uint8Array(16);return o(e),e[6]=e[6]&15|64,e[8]=e[8]&63|128,[...e].map((r,s)=>{const n=r.toString(16).padStart(2,"0");return[4,6,8,10].includes(s)?`-${n}`:n}).join("")}return`cmux-${Date.now().toString(36)}-${Math.random().toString(36).slice(2)}`}function p(t){const o=u({component:f,notFoundComponent:t}),e=a({getParentRoute:()=>o,path:"/",component:t}),r=a({getParentRoute:()=>o,path:"/diff",component:t}),s=a({getParentRoute:()=>o,path:"/cmux-diff-viewer",component:t}),n=a({getParentRoute:()=>o,path:"/agent-session",component:t}),c=o.addChildren([e,r,s,n]);return i({history:d(),routeTree:c})}function R(t,o){const e=document.createElement("style");e.dataset.cmuxWebviewStyle=t,e.textContent=o,document.head.append(e)}export{p as c,R as i,l as m}; +function i(){const n=globalThis.crypto;if(typeof n?.randomUUID=="function")return n.randomUUID();const e=n?.getRandomValues?.bind(n);if(typeof e=="function"){const t=new Uint8Array(16);return e(t),t[6]=t[6]&15|64,t[8]=t[8]&63|128,[...t].map((a,r)=>{const o=a.toString(16).padStart(2,"0");return[4,6,8,10].includes(r)?`-${o}`:o}).join("")}return`cmux-${Date.now().toString(36)}-${Math.random().toString(36).slice(2)}`}function c(n,e){const t=document.createElement("style");t.dataset.cmuxWebviewStyle=n,t.textContent=e,document.head.append(t)}export{c as i,i as m}; diff --git a/Resources/markdown-viewer/webviews-app/chunks/router.mjs b/Resources/markdown-viewer/webviews-app/chunks/router.mjs new file mode 100644 index 000000000000..533d022cf890 --- /dev/null +++ b/Resources/markdown-viewer/webviews-app/chunks/router.mjs @@ -0,0 +1 @@ +import{e as R,f as o,g as f,d,O as g}from"./vendor.mjs";function p(t){const e=R({component:g,notFoundComponent:t}),n=o({getParentRoute:()=>e,path:"/",component:t}),a=o({getParentRoute:()=>e,path:"/diff",component:t}),r=o({getParentRoute:()=>e,path:"/cmux-diff-viewer",component:t}),s=o({getParentRoute:()=>e,path:"/agent-session",component:t}),c=o({getParentRoute:()=>e,path:"/feed",component:t}),u=e.addChildren([n,a,r,s,c]);return f({history:d(),routeTree:u})}export{p as c}; diff --git a/Resources/markdown-viewer/webviews-app/feed.html b/Resources/markdown-viewer/webviews-app/feed.html new file mode 100644 index 000000000000..3bcb00d4b852 --- /dev/null +++ b/Resources/markdown-viewer/webviews-app/feed.html @@ -0,0 +1,13 @@ + + + + + + cmux + + +
+ + + + diff --git a/Resources/markdown-viewer/webviews-app/main.mjs b/Resources/markdown-viewer/webviews-app/main.mjs index fd26b46d3a98..12ee3ce02db6 100644 --- a/Resources/markdown-viewer/webviews-app/main.mjs +++ b/Resources/markdown-viewer/webviews-app/main.mjs @@ -1 +1,2 @@ -import{_ as n}from"./chunks/vendor.mjs";function o(){return document.documentElement.dataset.cmuxWebviewKind==="agent-session"||document.body.dataset.cmuxWebviewKind==="agent-session"||document.getElementById("cmux-agent-session-config")?"agent-session":"diff"}const t=document.getElementById("root");if(!t)throw new Error("Missing cmux webview root");o()==="agent-session"?n(()=>import("./chunks/agentSessionSurface.mjs"),[]).then(e=>{e.mountAgentSessionSurface(t)}):n(()=>import("./chunks/diffSurface.mjs"),[]).then(e=>{e.mountDiffSurface(t)}); +const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/feedSurface.css"])))=>i.map(i=>d[i]); +import{_ as n}from"./chunks/vendor.mjs";function o(){return document.documentElement.dataset.cmuxWebviewKind==="agent-session"||document.body.dataset.cmuxWebviewKind==="agent-session"||document.getElementById("cmux-agent-session-config")?"agent-session":document.documentElement.dataset.cmuxWebviewKind==="feed"||document.body.dataset.cmuxWebviewKind==="feed"||document.getElementById("cmux-feed-config")?"feed":"diff"}const t=document.getElementById("root");if(!t)throw new Error("Missing cmux webview root");o()==="agent-session"?n(()=>import("./chunks/agentSessionSurface.mjs"),[]).then(e=>{e.mountAgentSessionSurface(t)}):o()==="feed"?n(()=>import("./chunks/feedSurface.mjs"),__vite__mapDeps([0])).then(e=>{e.mountFeedSurface(t)}):n(()=>import("./chunks/diffSurface.mjs"),[]).then(e=>{e.mountDiffSurface(t)}); diff --git a/Sources/AppDelegate+AgentChat.swift b/Sources/AppDelegate+AgentChat.swift index 6de9213ebdf9..0b7deef146ce 100644 --- a/Sources/AppDelegate+AgentChat.swift +++ b/Sources/AppDelegate+AgentChat.swift @@ -90,6 +90,51 @@ extension AppDelegate { ) } + @discardableResult + func performConfiguredFeedAction( + context: MainWindowContext, + onExecuted: (() -> Void)? + ) -> Bool { + guard BrowserAvailabilitySettings.isEnabled(), + let feedURL = FeedSurfaceBridge.feedURL() else { + NSSound.beep() + return false + } + let beforeIDs = Set(context.tabManager.tabs.map(\.id)) + let title = String(localized: "rightSidebar.mode.feed", defaultValue: "Feed") + let workspace = CmuxWorkspaceDefinition( + name: title, + layout: .pane(CmuxPaneDefinition(surfaces: [ + CmuxSurfaceDefinition( + type: .browser, + name: title, + command: nil, + cwd: nil, + env: nil, + url: feedURL.absoluteString, + focus: true, + omnibarVisible: false + ), + ])) + ) + let command = CmuxCommandDefinition(name: title, workspace: workspace) + let baseCWD = context.tabManager.selectedWorkspace?.currentDirectory + ?? FileManager.default.homeDirectoryForCurrentUser.path + guard CmuxConfigExecutor.executeWorkspaceCommand( + command: command, + workspace: workspace, + tabManager: context.tabManager, + baseCwd: baseCWD + ) else { + return false + } + guard context.tabManager.tabs.contains(where: { !beforeIDs.contains($0.id) }) else { + return false + } + onExecuted?() + return true + } + @discardableResult func executeConfiguredCmuxAction( id actionID: String, diff --git a/Sources/AppDelegate+NewWorkspaceContextMenu.swift b/Sources/AppDelegate+NewWorkspaceContextMenu.swift index 05583dd61a62..35ce74355130 100644 --- a/Sources/AppDelegate+NewWorkspaceContextMenu.swift +++ b/Sources/AppDelegate+NewWorkspaceContextMenu.swift @@ -75,6 +75,7 @@ extension AppDelegate { let model = NewWorkspaceMenuModel.build( newWorkspaceContextMenuItems: cmuxConfigStore.newWorkspaceContextMenuItems, agentChatAction: resolvedBuiltInNewAgentChatAction(cmuxConfigStore: cmuxConfigStore), + feedAction: resolvedBuiltInFeedAction(cmuxConfigStore: cmuxConfigStore), cloudSectionEnabled: CmuxFeatureFlags.shared.isCloudVMUIEnabled, templateNames: savedLayoutNames(), loadedActions: cmuxConfigStore.loadedActions, @@ -116,6 +117,20 @@ extension AppDelegate { return action } + private func resolvedBuiltInFeedAction( + cmuxConfigStore: CmuxConfigStore + ) -> CmuxResolvedConfigAction? { + guard BrowserAvailabilitySettings.isEnabled() else { return nil } + let actionID = CmuxSurfaceTabBarBuiltInAction.feed.configID + let action = cmuxConfigStore.resolvedAction(id: actionID) ?? .builtIn(.feed) + guard action.newWorkspaceMenu != false else { return nil } + let configuredActionIDs = Set(cmuxConfigStore.newWorkspaceContextMenuItems.compactMap { item -> String? in + guard case .action(let menuAction) = item else { return nil } + return menuAction.action.id + }) + return configuredActionIDs.contains(actionID) ? nil : action + } + private func shouldAppendBuiltInNewAgentChatMenuItem( _ action: CmuxResolvedConfigAction, actionID: String, diff --git a/Sources/AppDelegate.swift b/Sources/AppDelegate.swift index 1c92e1af4b20..67add68bc98e 100644 --- a/Sources/AppDelegate.swift +++ b/Sources/AppDelegate.swift @@ -15356,6 +15356,7 @@ final class AppDelegate: NSObject, NSApplicationDelegate, UNUserNotificationCent onExecuted?() return true case .newAgentChat: return performConfiguredNewAgentChatAction(context: context, preferredWindow: preferredWindow, onExecuted: onExecuted) + case .feed: return performConfiguredFeedAction(context: context, onExecuted: onExecuted) case .cloudVM: let didStart = performCloudVMAction( tabManager: context.tabManager, diff --git a/Sources/CmuxConfig.swift b/Sources/CmuxConfig.swift index 8c486c24eb77..6dc4f2997e0e 100644 --- a/Sources/CmuxConfig.swift +++ b/Sources/CmuxConfig.swift @@ -1374,6 +1374,9 @@ struct CmuxResolvedConfigAction: Identifiable, Sendable, Hashable { case .newAgentChat: title = String(localized: "command.newAgentChat.title", defaultValue: "New agent chat") keywords = ["create", "new", "agent", "chat", "browser", "codex", "claude"] + case .feed: + title = String(localized: "rightSidebar.mode.feed", defaultValue: "Feed") + keywords = ["agent", "activity", "approvals", "feed", "questions"] case .cloudVM: title = String(localized: "command.cloudVM.title", defaultValue: "Open Base") keywords = ["base", "cloud", "vm", "virtual", "machine", "remote"] @@ -1641,6 +1644,7 @@ struct CmuxSurfaceDefinition: Codable, Sendable, Hashable { var env: [String: String]? var url: String? var focus: Bool? + var omnibarVisible: Bool? = nil } enum CmuxSurfaceType: String, Codable, Sendable { diff --git a/Sources/CmuxSurfaceTabBarBuiltInAction.swift b/Sources/CmuxSurfaceTabBarBuiltInAction.swift index 8c4f5013e021..79fb6dec1ea7 100644 --- a/Sources/CmuxSurfaceTabBarBuiltInAction.swift +++ b/Sources/CmuxSurfaceTabBarBuiltInAction.swift @@ -4,6 +4,7 @@ import Foundation enum CmuxSurfaceTabBarBuiltInAction: String, Codable, Sendable, CaseIterable, Hashable { case newWorkspace = "cmux.newWorkspace" case newAgentChat = "cmux.newAgentChat" + case feed = "cmux.feed" case cloudVM = "cmux.cloudvm" case mobileConnect = "cmux.mobileconnect" case newTerminal = "cmux.newTerminal" @@ -17,6 +18,8 @@ enum CmuxSurfaceTabBarBuiltInAction: String, Codable, Sendable, CaseIterable, Ha self = .newWorkspace case "cmux.newAgentChat", "cmux.agentChat", "newAgentChat", "new-agent-chat", "agentChat": self = .newAgentChat + case "cmux.feed", "feed", "openFeed", "open-feed": + self = .feed case "cmux.cloudvm", "cmux.cloudVM", "cloudVM", "cloudvm", "cmux.newCloudVM", "cmux.newCloudVm", "newCloudVM", "newCloudVm", "cmux.startCloudVM", "cmux.startCloudVm", "startCloudVM", "startCloudVm": @@ -47,6 +50,8 @@ enum CmuxSurfaceTabBarBuiltInAction: String, Codable, Sendable, CaseIterable, Ha return "plus.square" case .newAgentChat: return "message" + case .feed: + return "dot.radiowaves.left.and.right" case .cloudVM: return "cloud" case .mobileConnect: @@ -64,7 +69,7 @@ enum CmuxSurfaceTabBarBuiltInAction: String, Codable, Sendable, CaseIterable, Ha var bonsplitAction: BonsplitConfiguration.SplitActionButton.Action? { switch self { - case .newWorkspace, .newAgentChat, .cloudVM, .mobileConnect: + case .newWorkspace, .newAgentChat, .feed, .cloudVM, .mobileConnect: return nil case .newTerminal: return .newTerminal diff --git a/Sources/ContentView+AgentChatCommandPalette.swift b/Sources/ContentView+AgentChatCommandPalette.swift index 6fef1c02eef7..716eff86dbbf 100644 --- a/Sources/ContentView+AgentChatCommandPalette.swift +++ b/Sources/ContentView+AgentChatCommandPalette.swift @@ -10,6 +10,8 @@ extension ContentView { return CmuxSurfaceTabBarBuiltInAction.newBrowser.configID case "palette.newAgentChat": return CmuxSurfaceTabBarBuiltInAction.newAgentChat.configID + case "palette.feed": + return CmuxSurfaceTabBarBuiltInAction.feed.configID case "palette.terminalSplitRight": return CmuxSurfaceTabBarBuiltInAction.splitRight.configID case "palette.terminalSplitDown": @@ -30,6 +32,16 @@ extension ContentView { )] } + static func commandPaletteFeedContributions() -> [CommandPaletteCommandContribution] { + [CommandPaletteCommandContribution( + commandId: "palette.feed", + title: { _ in String(localized: "rightSidebar.mode.feed", defaultValue: "Feed") }, + subtitle: { _ in String(localized: "command.cmuxConfig.builtInSubtitle", defaultValue: "cmux") }, + keywords: ["agent", "activity", "approvals", "feed", "questions"], + when: { !$0.bool(CommandPaletteContextKeys.browserDisabled) } + )] + } + func registerAgentChatCommandPaletteHandler(_ registry: inout CommandPaletteHandlerRegistry) { registry.register(commandId: "palette.newAgentChat") { guard CmuxFeatureFlags.shared.isAgentChatUIEnabled else { @@ -49,4 +61,20 @@ extension ContentView { } } } + + func registerFeedCommandPaletteHandler(_ registry: inout CommandPaletteHandlerRegistry) { + registry.register(commandId: "palette.feed") { + guard let appDelegate = AppDelegate.shared else { + NSSound.beep() + return + } + if !appDelegate.executeConfiguredCmuxAction( + id: CmuxSurfaceTabBarBuiltInAction.feed.configID, + tabManager: tabManager, + preferredWindow: appDelegate.mainWindow(for: windowId) + ) { + NSSound.beep() + } + } + } } diff --git a/Sources/ContentView.swift b/Sources/ContentView.swift index 88fd194a0806..62229280c54f 100644 --- a/Sources/ContentView.swift +++ b/Sources/ContentView.swift @@ -6290,6 +6290,7 @@ struct ContentView: View { ) ) contributions.append(contentsOf: Self.commandPaletteNewAgentChatContributions()) + contributions.append(contentsOf: Self.commandPaletteFeedContributions()) contributions.append( CommandPaletteCommandContribution( commandId: "palette.newWindow", @@ -7520,6 +7521,7 @@ struct ContentView: View { } } registerAgentChatCommandPaletteHandler(®istry) + registerFeedCommandPaletteHandler(®istry) registry.register(commandId: "palette.openFolder") { // Defer so the command palette dismisses before the modal sheet appears. DispatchQueue.main.async { diff --git a/Sources/Feed/FeedPanelView.swift b/Sources/Feed/FeedPanelView.swift index 08e839cd9102..2883f567fad5 100644 --- a/Sources/Feed/FeedPanelView.swift +++ b/Sources/Feed/FeedPanelView.swift @@ -73,7 +73,7 @@ struct FeedPanelView: View { } @State private var filter: Filter = .actionable - @StateObject private var viewModel = FeedPanelViewModel() + @State private var viewModel = FeedPanelViewModel() var body: some View { VStack(spacing: 0) { diff --git a/Sources/Feed/FeedPanelViewModel.swift b/Sources/Feed/FeedPanelViewModel.swift index 15e476e0072b..af3532485c76 100644 --- a/Sources/Feed/FeedPanelViewModel.swift +++ b/Sources/Feed/FeedPanelViewModel.swift @@ -4,15 +4,17 @@ import Foundation import Observation import SwiftUI -/// Bridges the `@Observable` WorkstreamStore to a Combine `@Published` -/// snapshot so SwiftUI reliably re-renders the Feed panel on every -/// mutation. +/// Projects the shared `WorkstreamStore` into immutable Feed snapshots for +/// SwiftUI. Observation owns rendering; the only task is a cancellable history +/// request whose lifetime is tied to this model. @MainActor -final class FeedPanelViewModel: ObservableObject { - @Published private(set) var items: [WorkstreamItem] = [] - @Published private(set) var hasMorePersistedItems = false - @Published private(set) var isLoadingOlderItems = false - private var storeInstalledObserver: NSObjectProtocol? +@Observable +final class FeedPanelViewModel { + private(set) var items: [WorkstreamItem] = [] + private(set) var hasMorePersistedItems = false + private(set) var isLoadingOlderItems = false + @ObservationIgnored private var storeInstalledObserver: NSObjectProtocol? + @ObservationIgnored private var loadOlderTask: Task? init() { storeInstalledObserver = NotificationCenter.default.addObserver( @@ -28,6 +30,7 @@ final class FeedPanelViewModel: ObservableObject { } deinit { + loadOlderTask?.cancel() if let storeInstalledObserver { NotificationCenter.default.removeObserver(storeInstalledObserver) } @@ -46,10 +49,13 @@ final class FeedPanelViewModel: ObservableObject { } } - nonisolated func loadOlderItems() { - Task { @MainActor [weak self] in - guard let self, !self.isLoadingOlderItems, self.hasMorePersistedItems else { return } - await FeedCoordinator.shared.store?.loadOlderItems() + func loadOlderItems() { + guard !isLoadingOlderItems, + hasMorePersistedItems, + let store = FeedCoordinator.shared.store else { return } + loadOlderTask?.cancel() + loadOlderTask = Task { @MainActor in + await store.loadOlderItems() } } } diff --git a/Sources/Feed/FeedSurfaceBridge.swift b/Sources/Feed/FeedSurfaceBridge.swift new file mode 100644 index 000000000000..789e93bf3477 --- /dev/null +++ b/Sources/Feed/FeedSurfaceBridge.swift @@ -0,0 +1,565 @@ +import AppKit +import CMUXAgentLaunch +import CmuxFoundation +import CmuxSettings +import Foundation +import Observation +import WebKit + +/// Typed native capability bridge shared by the React Feed surface and its +/// host. `WorkstreamStore` remains the only state owner; the bridge publishes +/// immutable snapshots and routes typed actions through `FeedCoordinator`. +@MainActor +final class FeedSurfaceBridge: NSObject, WKScriptMessageHandlerWithReply { + static let handlerName = "cmuxFeed" + + private static var handlerInstalledKey: UInt8 = 0 + private static var subscriptionGenerationKey: UInt8 = 0 + private let subscribedWebViews = NSHashTable.weakObjects() + private var integrationReadiness: [FeedIntegrationReadiness] = [] + private var integrationScanTask: Task? + private var settingsObserver: NSObjectProtocol? + private var themeObserver: NSObjectProtocol? + + override init() { + super.init() + integrationReadiness = Self.integrationReadiness(installedSources: nil) + themeObserver = NotificationCenter.default.addObserver( + forName: .ghosttyDefaultBackgroundDidChange, + object: nil, + queue: .main + ) { [weak self] _ in + MainActor.assumeIsolated { + self?.publishSnapshotToSubscribers() + } + } + settingsObserver = NotificationCenter.default.addObserver( + forName: UserDefaults.didChangeNotification, + object: nil, + queue: .main + ) { [weak self] _ in + MainActor.assumeIsolated { + self?.refreshIntegrationReadiness() + } + } + refreshIntegrationReadiness() + } + + deinit { + integrationScanTask?.cancel() + if let settingsObserver { + NotificationCenter.default.removeObserver(settingsObserver) + } + if let themeObserver { + NotificationCenter.default.removeObserver(themeObserver) + } + } + + static func installIfNeeded(on userContentController: WKUserContentController) { + guard objc_getAssociatedObject(userContentController, &handlerInstalledKey) == nil else { + return + } + userContentController.addScriptMessageHandler( + FeedSurfaceBridge(), + contentWorld: .page, + name: handlerName + ) + objc_setAssociatedObject( + userContentController, + &handlerInstalledKey, + NSNumber(value: true), + .OBJC_ASSOCIATION_RETAIN_NONATOMIC + ) + } + + func userContentController( + _ userContentController: WKUserContentController, + didReceive message: WKScriptMessage, + replyHandler: @escaping (Any?, String?) -> Void + ) { + guard Self.isTrustedFeedFrame(message.frameInfo), + let body = message.body as? [String: Any], + let method = body["method"] as? String else { + replyHandler(Self.error(code: "not_allowed"), nil) + return + } + let params = body["params"] as? [String: Any] ?? [:] + Task { @MainActor in + do { + let value = try await self.handle(method: method, params: params, webView: message.webView) + replyHandler(["ok": true, "value": value], nil) + } catch { + replyHandler(Self.error(code: "invalid_request"), nil) + } + } + } + + static func isTrustedFeedFrame(_ frameInfo: WKFrameInfo) -> Bool { + frameInfo.isMainFrame && isTrustedFeedURL(frameInfo.request.url) + } + + static func isTrustedFeedURL(_ url: URL?, resourceURL: URL? = Bundle.main.resourceURL) -> Bool { + _ = resourceURL + guard let url, + let expected = CmuxDiffViewerURLSchemeHandler.diffViewerURL( + token: CmuxDiffViewerURLSchemeHandler.bundledFeedToken, + requestPath: "/feed.html" + ) else { return false } + return url == expected + } + + nonisolated static func isLegacyPackagedFeedURL(_ url: URL?) -> Bool { + guard let url, url.isFileURL else { return false } + return url.standardizedFileURL.path.hasSuffix( + "/Contents/Resources/markdown-viewer/webviews-app/feed.html" + ) + } + + static func feedURL() -> URL? { + do { + return try CmuxDiffViewerURLSchemeHandler.shared.registerBundledFeedAssets() + } catch { + NSLog("feed.surface.register.failed error=%@", String(describing: error)) + return nil + } + } + + private func handle( + method: String, + params: [String: Any], + webView: WKWebView? + ) async throws -> Any { + switch method { + case "feed.snapshot": + return snapshot() + case "feed.subscribe": + guard let webView else { throw FeedSurfaceBridgeError.invalidRequest } + beginSnapshotSubscription(for: webView) + return snapshot() + case "feed.loadOlder": + await FeedCoordinator.shared.store?.loadOlderItems() + return snapshot() + case "feed.permission.reply": + let item = try item(params) + guard let modeRaw = params["mode"] as? String, + let mode = WorkstreamPermissionMode(rawValue: modeRaw), + isAllowedPermissionMode(mode, for: item) else { + throw FeedSurfaceBridgeError.invalidRequest + } + FeedCoordinator.shared.deliverReply( + requestId: try requestID(item), + decision: .permission(mode) + ) + return ["accepted": true] + case "feed.exitPlan.reply": + let item = try item(params) + guard let modeRaw = params["mode"] as? String, + let mode = WorkstreamExitPlanMode(rawValue: modeRaw) else { + throw FeedSurfaceBridgeError.invalidRequest + } + let feedback = (params["feedback"] as? String)?.trimmingCharacters(in: .whitespacesAndNewlines) + FeedCoordinator.shared.deliverReply( + requestId: try requestID(item), + decision: .exitPlan(mode, feedback: feedback?.isEmpty == false ? feedback : nil) + ) + return ["accepted": true] + case "feed.question.reply": + let item = try item(params) + guard let selections = params["selections"] as? [String] else { + throw FeedSurfaceBridgeError.invalidRequest + } + FeedCoordinator.shared.deliverReply( + requestId: try requestID(item), + decision: .question(selections: selections) + ) + return ["accepted": true] + case "feed.jump": + guard let workstreamID = params["workstreamId"] as? String else { + throw FeedSurfaceBridgeError.invalidRequest + } + return ["matched": FeedCoordinator.shared.focusIfPossible(workstreamId: workstreamID)] + case "feed.sendText": + guard let workstreamID = params["workstreamId"] as? String, + let text = params["text"] as? String else { + throw FeedSurfaceBridgeError.invalidRequest + } + return ["sent": FeedCoordinator.shared.sendTextToWorkstream(workstreamId: workstreamID, text: text)] + default: + throw FeedSurfaceBridgeError.invalidRequest + } + } + + private func item(_ params: [String: Any]) throws -> WorkstreamItem { + guard let rawID = params["itemId"] as? String, + let id = UUID(uuidString: rawID), + let item = FeedCoordinator.shared.store?.items.first(where: { $0.id == id }), + item.status.isPending else { + throw FeedSurfaceBridgeError.invalidRequest + } + return item + } + + private func requestID(_ item: WorkstreamItem) throws -> String { + switch item.payload { + case .permissionRequest(let requestID, _, _, _), + .exitPlan(let requestID, _, _), + .question(let requestID, _): + return requestID + default: + throw FeedSurfaceBridgeError.invalidRequest + } + } + + private func snapshot() -> [String: Any] { + let store = FeedCoordinator.shared.store + let background = GhosttyApp.shared.defaultBackgroundColor + let foreground = GhosttyApp.shared.defaultForegroundColor + return [ + "items": (store?.items ?? []).map(itemDictionary), + "integrations": integrationReadiness.map(\.dictionary), + "sourceIcons": Self.sourceIconDataURLs, + "sourceLabels": Self.sourceLabels, + "theme": [ + "background": background.hexString(), + "foreground": foreground.hexString(), + "isLight": cmuxReadableColorScheme(for: background) == .light, + ], + "hasMore": store?.hasMorePersistedItems ?? false, + "isLoadingOlder": store?.isLoadingOlderItems ?? false, + "copy": [ + "feed": String(localized: "rightSidebar.mode.feed", defaultValue: "Feed"), + "actionable": String(localized: "feed.filter.actionable", defaultValue: "Actionable"), + "activity": String(localized: "feed.filter.activity", defaultValue: "All Activity"), + "emptyActionable": String(localized: "feed.empty.actionable.title", defaultValue: "No pending decisions"), + "emptyActionableDescription": String(localized: "feed.empty.actionable.subtitle", defaultValue: "Permission, plan, and question requests from AI agents will appear here."), + "emptyActivity": String(localized: "feed.empty.activity.title", defaultValue: "No activity yet"), + "emptyActivityDescription": String(localized: "feed.empty.all.subtitle", defaultValue: "Tool use, messages, and session events will appear here."), + "integrationsTitle": String(localized: "feed.integrations.title", defaultValue: "Agent integrations"), + "integrationReady": String(localized: "feed.integrations.status.ready", defaultValue: "Ready"), + "integrationDisabled": String(localized: "feed.integrations.status.disabled", defaultValue: "Disabled in Settings"), + "integrationNeedsSetup": String(localized: "feed.integrations.status.needsSetup", defaultValue: "Setup needed"), + "integrationChecking": String(localized: "feed.integrations.status.checking", defaultValue: "Checking..."), + "integrationHint": String(localized: "feed.integrations.hint", defaultValue: "Claude Code and Codex use Settings. Other agents need `cmux hooks setup`."), + "keyboardHelp": String(localized: "feed.keyboard.help", defaultValue: "Navigate with ↑/↓, J/K, or Control-N/Control-P. Press Tab to reach actions."), + "loadExamples": String(localized: "feed.examples.load", defaultValue: "Load examples"), + "demoPermissionTitle": String(localized: "feed.examples.permission.title", defaultValue: "Run database migration"), + "demoPermissionBody": String(localized: "feed.examples.permission.body", defaultValue: "bun run db:migrate"), + "demoPlanTitle": String(localized: "feed.examples.plan.title", defaultValue: "Plan ready for review"), + "demoPlanBody": String(localized: "feed.examples.plan.body", defaultValue: "Update the bridge, add focused tests, then build the tagged app."), + "demoQuestionTitle": String(localized: "feed.examples.question.title", defaultValue: "Verification scope"), + "demoQuestionPrompt": String(localized: "feed.examples.question.prompt", defaultValue: "Which verification should run?"), + "demoQuestionOptionFocused": String(localized: "feed.examples.question.focused", defaultValue: "Focused tests"), + "demoQuestionOptionFull": String(localized: "feed.examples.question.full", defaultValue: "Full test suite"), + "loadOlder": String(localized: "feed.history.loadOlder", defaultValue: "Load older activity"), + "loadingOlder": String(localized: "feed.history.loadingOlder", defaultValue: "Loading older activity..."), + "deny": String(localized: "feed.permission.deny", defaultValue: "Deny"), + "allowOnce": String(localized: "feed.permission.once", defaultValue: "Allow Once"), + "allowAlways": String(localized: "feed.permission.always", defaultValue: "Always Allow"), + "allowAll": String(localized: "feed.permission.all", defaultValue: "All tools"), + "allowBypass": String(localized: "feed.permission.bypass", defaultValue: "Bypass"), + "planManual": String(localized: "feed.exitplan.manual", defaultValue: "Manual"), + "planAuto": String(localized: "feed.exitplan.auto", defaultValue: "Auto"), + "planUltraplan": String(localized: "feed.exitplan.ultraplan", defaultValue: "Ultraplan"), + "questionSubmit": String(localized: "feed.question.submitAll", defaultValue: "Submit All Answers"), + "questionPlaceholder": String(localized: "feed.question.typeSomething", defaultValue: "Type something..."), + "requestFailed": String(localized: "agentSession.web.error.requestFailed", defaultValue: "Native bridge request failed."), + ], + ] + } + + private static let sourceIconDataURLs: [String: String] = { + let assetNames: [WorkstreamSource: String] = [ + .claude: "AgentIcons/Claude", + .codex: "AgentIcons/Codex", + .opencode: "AgentIcons/OpenCode", + .pi: "AgentIcons/Pi", + .hermesAgent: "AgentIcons/HermesAgent", + ] + return assetNames.reduce(into: [:]) { result, entry in + guard let image = NSImage(named: NSImage.Name(entry.value)), + let tiffData = image.tiffRepresentation, + let bitmap = NSBitmapImageRep(data: tiffData), + let pngData = bitmap.representation(using: .png, properties: [:]) else { + return + } + result[entry.key.rawValue] = "data:image/png;base64,\(pngData.base64EncodedString())" + } + }() + + private static let sourceLabels: [String: String] = [ + WorkstreamSource.claude.rawValue: String(localized: "feed.source.claude", defaultValue: "Claude Code"), + WorkstreamSource.codex.rawValue: String(localized: "feed.source.codex", defaultValue: "Codex"), + WorkstreamSource.pi.rawValue: String(localized: "feed.source.pi", defaultValue: "Pi"), + WorkstreamSource.amp.rawValue: String(localized: "feed.source.amp", defaultValue: "Amp"), + WorkstreamSource.cursor.rawValue: String(localized: "feed.source.cursor", defaultValue: "Cursor"), + WorkstreamSource.opencode.rawValue: String(localized: "feed.source.opencode", defaultValue: "OpenCode"), + WorkstreamSource.gemini.rawValue: String(localized: "feed.source.gemini", defaultValue: "Gemini"), + WorkstreamSource.hermesAgent.rawValue: String(localized: "feed.source.hermes", defaultValue: "Hermes Agent"), + WorkstreamSource.copilot.rawValue: String(localized: "feed.source.copilot", defaultValue: "Copilot"), + WorkstreamSource.codebuddy.rawValue: String(localized: "feed.source.codebuddy", defaultValue: "CodeBuddy"), + WorkstreamSource.factory.rawValue: String(localized: "feed.source.factory", defaultValue: "Factory"), + WorkstreamSource.qoder.rawValue: String(localized: "feed.source.qoder", defaultValue: "Qoder"), + ] + + private static let integrationSources: [WorkstreamSource] = [ + .claude, + .codex, + .cursor, + .gemini, + .opencode, + .pi, + .hermesAgent, + .copilot, + .codebuddy, + .factory, + .qoder, + ] + + private static func integrationReadiness(installedSources: Set?) -> [FeedIntegrationReadiness] { + let settings = AgentIntegrationSettingsStore(defaults: .standard) + return integrationSources.map { source in + let status: FeedIntegrationStatus + switch source { + case .claude: + status = settings.claudeCodeHooksEnabled ? .ready : .disabled + case .codex: + status = settings.codexHooksEnabled ? .ready : .disabled + case .cursor: + status = integrationStatus( + settingEnabled: settings.cursorHooksEnabled, + isInstalled: installedSources?.contains(source.rawValue) + ) + case .gemini: + status = integrationStatus( + settingEnabled: settings.geminiHooksEnabled, + isInstalled: installedSources?.contains(source.rawValue) + ) + default: + status = installedSources.map { $0.contains(source.rawValue) ? .ready : .needsSetup } ?? .checking + } + return FeedIntegrationReadiness(source: source.rawValue, status: status) + } + } + + private static func integrationStatus(settingEnabled: Bool, isInstalled: Bool?) -> FeedIntegrationStatus { + guard settingEnabled else { return .disabled } + return isInstalled.map { $0 ? .ready : .needsSetup } ?? .checking + } + + private func refreshIntegrationReadiness() { + integrationScanTask?.cancel() + integrationReadiness = Self.integrationReadiness(installedSources: nil) + publishSnapshotToSubscribers() + integrationScanTask = Task { @MainActor [weak self] in + let installedSources = await Task.detached(priority: .utility) { + Self.installedFeedHookSources() + }.value + guard !Task.isCancelled, let self else { return } + self.integrationReadiness = Self.integrationReadiness(installedSources: installedSources) + self.publishSnapshotToSubscribers() + } + } + + nonisolated private static func installedFeedHookSources() -> Set { + let probes = [ + FeedHookProbe( + source: WorkstreamSource.cursor.rawValue, + url: configURL(directory: ".cursor", file: "hooks.json"), + marker: "cmux hooks feed --source" + ), + FeedHookProbe( + source: WorkstreamSource.gemini.rawValue, + url: configURL(directory: ".gemini", file: "settings.json"), + marker: "cmux hooks feed --source" + ), + FeedHookProbe( + source: WorkstreamSource.opencode.rawValue, + url: configURL( + directory: ".config/opencode", + file: "plugins/cmux-feed.js", + environmentOverride: "OPENCODE_CONFIG_DIR" + ), + marker: "cmux-feed-plugin-marker" + ), + FeedHookProbe( + source: WorkstreamSource.pi.rawValue, + url: configURL( + directory: ".pi/agent", + file: "extensions/cmux-session.ts", + environmentOverride: "PI_CODING_AGENT_DIR" + ), + marker: "cmux-pi-session-extension-marker v2" + ), + FeedHookProbe( + source: WorkstreamSource.hermesAgent.rawValue, + url: configURL(directory: ".hermes", file: "config.yaml", environmentOverride: "HERMES_HOME"), + marker: "cmux hooks feed --source" + ), + FeedHookProbe( + source: WorkstreamSource.copilot.rawValue, + url: configURL(directory: ".copilot", file: "config.json", environmentOverride: "COPILOT_HOME"), + marker: "cmux hooks feed --source" + ), + FeedHookProbe( + source: WorkstreamSource.codebuddy.rawValue, + url: configURL(directory: ".codebuddy", file: "settings.json", environmentOverride: "CODEBUDDY_CONFIG_DIR"), + marker: "cmux hooks feed --source" + ), + FeedHookProbe( + source: WorkstreamSource.factory.rawValue, + url: configURL(directory: ".factory", file: "settings.json"), + marker: "cmux hooks feed --source" + ), + FeedHookProbe( + source: WorkstreamSource.qoder.rawValue, + url: configURL(directory: ".qoder", file: "settings.json", environmentOverride: "QODER_CONFIG_DIR"), + marker: "cmux hooks feed --source" + ), + ] + return Set(probes.compactMap { probe in + guard let contents = try? String(contentsOf: probe.url, encoding: .utf8), + contents.contains(probe.marker) else { return nil } + return probe.source + }) + } + + nonisolated private static func configURL( + directory: String, + file: String, + environmentOverride: String? = nil + ) -> URL { + if let environmentOverride, + let value = ProcessInfo.processInfo.environment[environmentOverride]? + .trimmingCharacters(in: .whitespacesAndNewlines), + !value.isEmpty { + return URL(fileURLWithPath: NSString(string: value).expandingTildeInPath, isDirectory: true) + .appendingPathComponent(file, isDirectory: false) + } + return FileManager.default.homeDirectoryForCurrentUser + .appendingPathComponent(directory, isDirectory: true) + .appendingPathComponent(file, isDirectory: false) + } + + private func itemDictionary(_ item: WorkstreamItem) -> [String: Any] { + var dictionary = FeedSocketEncoding.itemDict(item) + guard case .permissionRequest(_, _, let toolInputJSON, _) = item.payload else { + return dictionary + } + dictionary["allowed_permission_modes"] = WorkstreamPermissionMode.allCases + .filter { isAllowedPermissionMode($0, for: item, toolInputJSON: toolInputJSON) } + .map(\.rawValue) + return dictionary + } + + private func isAllowedPermissionMode( + _ mode: WorkstreamPermissionMode, + for item: WorkstreamItem, + toolInputJSON explicitToolInputJSON: String? = nil + ) -> Bool { + let toolInputJSON: String? + if let explicitToolInputJSON { + toolInputJSON = explicitToolInputJSON + } else if case .permissionRequest(_, _, let value, _) = item.payload { + toolInputJSON = value + } else { + return false + } + switch mode { + case .deny: + return true + case .once: + return FeedPermissionActionPolicy.supportsOncePermissionMode( + source: item.source, + toolInputJSON: toolInputJSON + ) + case .always: + return FeedPermissionActionPolicy.supportsAlwaysPermissionMode( + source: item.source, + toolInputJSON: toolInputJSON + ) + case .all: + return FeedPermissionActionPolicy.supportsAllPermissionMode( + source: item.source, + toolInputJSON: toolInputJSON + ) + case .bypass: + return FeedPermissionActionPolicy.supportsBypassPermissions(source: item.source) + } + } + + private func beginSnapshotSubscription(for webView: WKWebView) { + subscribedWebViews.add(webView) + let generation = (objc_getAssociatedObject(webView, &Self.subscriptionGenerationKey) as? NSNumber)?.intValue ?? 0 + let nextGeneration = generation + 1 + objc_setAssociatedObject( + webView, + &Self.subscriptionGenerationKey, + NSNumber(value: nextGeneration), + .OBJC_ASSOCIATION_RETAIN_NONATOMIC + ) + armSnapshotSubscription(for: webView, generation: nextGeneration) + } + + private func armSnapshotSubscription(for webView: WKWebView, generation: Int) { + guard Self.subscriptionGeneration(for: webView) == generation else { return } + withObservationTracking { + _ = FeedCoordinator.shared.store?.items + _ = FeedCoordinator.shared.store?.hasMorePersistedItems + _ = FeedCoordinator.shared.store?.isLoadingOlderItems + } onChange: { [weak self, weak webView] in + Task { @MainActor in + guard let self, let webView, + Self.subscriptionGeneration(for: webView) == generation else { return } + self.publishSnapshot(to: webView) + self.armSnapshotSubscription(for: webView, generation: generation) + } + } + } + + private static func subscriptionGeneration(for webView: WKWebView) -> Int { + (objc_getAssociatedObject(webView, &subscriptionGenerationKey) as? NSNumber)?.intValue ?? 0 + } + + private func publishSnapshot(to webView: WKWebView) { + let event: [String: Any] = ["type": "feed.snapshot", "snapshot": snapshot()] + guard let data = try? JSONSerialization.data(withJSONObject: event), + let json = String(data: data, encoding: .utf8) else { return } + webView.evaluateJavaScript("window.cmuxFeedBridge?.receive(\(json));") + } + + private func publishSnapshotToSubscribers() { + for webView in subscribedWebViews.allObjects { + publishSnapshot(to: webView) + } + } + + private static func error(code: String) -> [String: Any] { + ["ok": false, "error": ["code": code]] + } +} + +private enum FeedSurfaceBridgeError: Error { + case invalidRequest +} + +private enum FeedIntegrationStatus: String, Sendable { + case checking + case disabled + case needsSetup + case ready +} + +private struct FeedIntegrationReadiness: Sendable { + let source: String + let status: FeedIntegrationStatus + + var dictionary: [String: String] { + ["source": source, "status": status.rawValue] + } +} + +private struct FeedHookProbe: Sendable { + let source: String + let url: URL + let marker: String +} diff --git a/Sources/NewWorkspaceMenuModel.swift b/Sources/NewWorkspaceMenuModel.swift index 6501aacc169e..13dc3f7cfa97 100644 --- a/Sources/NewWorkspaceMenuModel.swift +++ b/Sources/NewWorkspaceMenuModel.swift @@ -30,6 +30,7 @@ struct NewWorkspaceMenuModel: Equatable { static func build( newWorkspaceContextMenuItems: [CmuxResolvedConfigContextMenuItem], agentChatAction: CmuxResolvedConfigAction?, + feedAction: CmuxResolvedConfigAction? = nil, cloudSectionEnabled: Bool, templateNames: [String], loadedActions: [CmuxResolvedConfigAction], @@ -88,6 +89,20 @@ struct NewWorkspaceMenuModel: Equatable { isDefault: agentChatAction.id == newWorkspaceActionID )) } + if let feedAction { + createRows.append(.action( + CmuxResolvedConfigMenuAction( + id: feedAction.id, + title: feedAction.title, + icon: feedAction.icon, + iconSourcePath: feedAction.iconSourcePath, + tooltip: feedAction.tooltip, + action: feedAction + ), + deletable: deletable(feedAction), + isDefault: feedAction.id == newWorkspaceActionID + )) + } let defaultLayout = NewWorkspaceDefaultLayoutMenuModel.build( loadedActions: loadedActions, diff --git a/Sources/Panels/BrowserPanel+AutomationRecovery.swift b/Sources/Panels/BrowserPanel+AutomationRecovery.swift index fbc84a3625ff..8a5cc676e7bd 100644 --- a/Sources/Panels/BrowserPanel+AutomationRecovery.swift +++ b/Sources/Panels/BrowserPanel+AutomationRecovery.swift @@ -30,6 +30,7 @@ extension BrowserPanel { let replacement = Self.makeWebView( profileID: profileID, websiteDataStore: websiteDataStore, + nativeCapabilities: nativeCapabilities, browserWebExtensionHost: browserWebExtensionHost ) for userScript in browserAutomationUserScripts { diff --git a/Sources/Panels/BrowserPanel.swift b/Sources/Panels/BrowserPanel.swift index 80ef7ac41809..13e5e7c6bb15 100644 --- a/Sources/Panels/BrowserPanel.swift +++ b/Sources/Panels/BrowserPanel.swift @@ -14,6 +14,7 @@ import CFNetwork import SQLite3 import CryptoKit import Darwin +import zlib import CmuxTerminal #if canImport(CommonCrypto) import CommonCrypto @@ -1777,10 +1778,28 @@ enum BrowserInsecureHTTPNavigationResolution { } } +enum BrowserNativeCapability: Hashable, Sendable { + case feed + + static func restored(from snapshot: SessionBrowserPanelSnapshot?) -> Set { + guard let snapshot else { return [] } + if snapshot.diffViewerToken == CmuxDiffViewerURLSchemeHandler.bundledFeedToken { + return [.feed] + } + let restoredURL = snapshot.urlString.flatMap(URL.init(string:)) + return FeedSurfaceBridge.isLegacyPackagedFeedURL(restoredURL) ? [.feed] : [] + } +} + final class CmuxDiffViewerURLSchemeHandler: NSObject, WKURLSchemeHandler { static let scheme = "cmux-diff-viewer" static let shared = CmuxDiffViewerURLSchemeHandler() static let maxRegisteredFiles = 1024 + static let bundledFeedToken = "bundled-feed-surface" + + static func isBundledFeedSurface(token: String, requestPath: String) -> Bool { + token == bundledFeedToken && requestPath == "/feed.html" + } struct RegisteredFile { let requestPath: String @@ -1823,6 +1842,11 @@ final class CmuxDiffViewerURLSchemeHandler: NSObject, WKURLSchemeHandler { private var sessions: [String: Session] = [:] private var activeSchemeTasks: [ObjectIdentifier: SchemeTaskState] = [:] private let streamQueue = DispatchQueue(label: "com.manaflow.cmux.diff-viewer-stream", qos: .userInitiated) + private let bundledAssetQueue = DispatchQueue( + label: "com.manaflow.cmux.bundled-webview-assets", + qos: .userInitiated, + attributes: .concurrent + ) // Branch picker routes shell out to the bundled CLI (git). Run them on a // dedicated concurrent queue, NOT the serial file-serving streamQueue, so a // slow/hung git invocation cannot stall restored diff-viewer file serving. @@ -1863,7 +1887,7 @@ final class CmuxDiffViewerURLSchemeHandler: NSObject, WKURLSchemeHandler { let standardizedURL = file.fileURL.standardizedFileURL.resolvingSymlinksInPath() var isDirectory: ObjCBool = false - guard isTrustedDiffViewerFileURL(standardizedURL), + guard isTrustedRegisteredFileURL(standardizedURL, token: token), FileManager.default.fileExists(atPath: standardizedURL.path, isDirectory: &isDirectory), !isDirectory.boolValue, FileManager.default.isReadableFile(atPath: standardizedURL.path) else { @@ -1891,6 +1915,65 @@ final class CmuxDiffViewerURLSchemeHandler: NSObject, WKURLSchemeHandler { lock.unlock() } + func registerBundledFeedAssets(resourceURL: URL? = Bundle.main.resourceURL) throws -> URL { + guard let root = resourceURL? + .appendingPathComponent("markdown-viewer/webviews-app", isDirectory: true) + .standardizedFileURL + .resolvingSymlinksInPath(), + let enumerator = FileManager.default.enumerator( + at: root, + includingPropertiesForKeys: [.isRegularFileKey], + options: [.skipsHiddenFiles] + ) else { + throw NSError(domain: "CmuxDiffViewerURLSchemeHandler", code: 6) + } + let files = enumerator.compactMap { entry -> RegisteredFile? in + guard let fileURL = entry as? URL, + (try? fileURL.resourceValues(forKeys: [.isRegularFileKey]).isRegularFile) == true else { + return nil + } + var relativePath = String(fileURL.path.dropFirst(root.path.count)) + if relativePath.hasSuffix(".deflate") { + relativePath.removeLast(".deflate".count) + } + let mimeType: String + if relativePath.hasSuffix(".html") { + mimeType = "text/html" + } else if relativePath.hasSuffix(".mjs") || relativePath.hasSuffix(".js") { + mimeType = "text/javascript" + } else if relativePath.hasSuffix(".css") { + mimeType = "text/css" + } else { + return nil + } + return RegisteredFile(requestPath: relativePath, fileURL: fileURL, mimeType: mimeType) + } + try register(token: Self.bundledFeedToken, files: files) + guard let url = Self.diffViewerURL(token: Self.bundledFeedToken, requestPath: "/feed.html") else { + throw NSError(domain: "CmuxDiffViewerURLSchemeHandler", code: 7) + } + return url + } + + /// Resolves a persisted internal browser surface and restores the backing + /// asset registration that was process-local before the app relaunched. + func sessionRestoreURL(token: String, requestPath: String) -> URL? { + if Self.isBundledFeedSurface(token: token, requestPath: requestPath) { + return try? registerBundledFeedAssets() + } + guard registerFromManifest(token: token) else { return nil } + return Self.diffViewerURL(token: token, requestPath: requestPath) + } + + /// Bundled surfaces are restorable from the app resources in every process. + /// Dynamic diff surfaces remain restorable only when their manifest is local. + func sessionRestorable(token: String, requestPath: String) -> Bool { + if Self.isBundledFeedSurface(token: token, requestPath: requestPath) { + return true + } + return diffViewerRestorable(token: token, requestPath: requestPath) + } + /// Whether the token currently has a registered (or manifest-restorable) /// session. Used to trust-gate native bridge calls from diff viewer pages. func hasActiveSession(token: String, now: Date = Date()) -> Bool { @@ -2379,7 +2462,7 @@ final class CmuxDiffViewerURLSchemeHandler: NSObject, WKURLSchemeHandler { } private static func isAllowedMimeType(_ mimeType: String) -> Bool { - mimeType == "text/html" || mimeType == "text/javascript" || mimeType == "text/x-diff" + mimeType == "text/html" || mimeType == "text/javascript" || mimeType == "text/css" || mimeType == "text/x-diff" } private static func pathExtensionMatchesMimeType(path: String, mimeType: String) -> Bool { @@ -2389,6 +2472,9 @@ final class CmuxDiffViewerURLSchemeHandler: NSObject, WKURLSchemeHandler { if mimeType == "text/javascript" { return path.hasSuffix(".mjs") || path.hasSuffix(".js") } + if mimeType == "text/css" { + return path.hasSuffix(".css") + } if mimeType == "text/x-diff" { return path.hasSuffix(".patch") } @@ -2406,7 +2492,10 @@ final class CmuxDiffViewerURLSchemeHandler: NSObject, WKURLSchemeHandler { activeSchemeTasks[taskID] = state lock.unlock() - streamQueue.async { [weak self] in + let queue = file.fileURL.lastPathComponent.hasSuffix(".deflate") + ? bundledAssetQueue + : streamQueue + queue.async { [weak self] in guard let self else { return } do { let response = HTTPURLResponse( @@ -2517,11 +2606,60 @@ final class CmuxDiffViewerURLSchemeHandler: NSObject, WKURLSchemeHandler { return fileSize } + static func inflateZlibData(_ compressed: Data) throws -> Data { + let maximumSize = 128 * 1024 * 1024 + var capacity = max(64 * 1024, compressed.count * 4) + + while capacity <= maximumSize { + var output = Data(count: capacity) + var decodedCount = uLongf(capacity) + let status = output.withUnsafeMutableBytes { destinationBuffer in + compressed.withUnsafeBytes { sourceBuffer in + guard let destination = destinationBuffer.bindMemory(to: UInt8.self).baseAddress, + let source = sourceBuffer.bindMemory(to: UInt8.self).baseAddress else { + return Z_DATA_ERROR + } + return uncompress( + destination, + &decodedCount, + source, + uLong(compressed.count) + ) + } + } + if status == Z_OK { + output.count = Int(decodedCount) + return output + } + guard status == Z_BUF_ERROR else { + throw NSError(domain: "CmuxDiffViewerURLSchemeHandler", code: 8, userInfo: [ + NSLocalizedDescriptionKey: "Bundled webview asset has invalid zlib data" + ]) + } + capacity *= 2 + } + + throw NSError(domain: "CmuxDiffViewerURLSchemeHandler", code: 8, userInfo: [ + NSLocalizedDescriptionKey: "Bundled webview asset could not be decompressed" + ]) + } + private func isTrustedDiffViewerFileURL(_ url: URL) -> Bool { let rootPath = trustedRootURL.path return url.isFileURL && url.path.hasPrefix(rootPath + "/") } + private func isTrustedRegisteredFileURL(_ url: URL, token: String) -> Bool { + if token == Self.bundledFeedToken, + let bundleRoot = Bundle.main.resourceURL? + .appendingPathComponent("markdown-viewer/webviews-app", isDirectory: true) + .standardizedFileURL + .resolvingSymlinksInPath() { + return url.isFileURL && url.path.hasPrefix(bundleRoot.path + "/") + } + return isTrustedDiffViewerFileURL(url) + } + private func pruneExpiredSessionsLocked(now: Date) { sessions = sessions.filter { _, session in now.timeIntervalSince(session.createdAt) <= maxSessionAge @@ -2538,7 +2676,7 @@ final class CmuxDiffViewerURLSchemeHandler: NSObject, WKURLSchemeHandler { headers["Content-Security-Policy"] = [ "default-src 'none'", "script-src 'self' 'unsafe-inline' 'wasm-unsafe-eval'", - "style-src 'unsafe-inline'", + "style-src 'self' 'unsafe-inline'", "img-src 'self' data:", "connect-src 'self'", "font-src 'none'", @@ -2679,6 +2817,8 @@ final class BrowserPanel: Panel, ObservableObject { /// The workspace ID this panel belongs to private(set) var workspaceId: UUID + let nativeCapabilities: Set + @Published private(set) var profileID: UUID @Published private(set) var historyStore: BrowserHistoryStore @@ -2717,6 +2857,7 @@ final class BrowserPanel: Panel, ObservableObject { /// Used to keep omnibar text-field focus from being immediately stolen by panel focus. private var suppressWebViewFocusUntil: Date? private var suppressWebViewFocusForAddressBar: Bool = false + private(set) var hasDeferredWebViewFocus = false private let blankURLString = "about:blank" /// Owns the address-bar page-focus capture/restore subsystem. @@ -3153,6 +3294,9 @@ final class BrowserPanel: Panel, ObservableObject { allowBlankShellHeal: changed || isFirstVisibilityRecord ) drainPendingInteractiveBrowserPromptsIfPossible(reason: "visible.\(reason)") + if hasDeferredWebViewFocus { + focus() + } } else if changed || isFirstVisibilityRecord || !hiddenWebViewDiscardManager.hasScheduledDiscard { scheduleHiddenWebViewDiscardIfNeeded(reason: reason, now: now) } @@ -3490,12 +3634,20 @@ final class BrowserPanel: Panel, ObservableObject { static func makeWebView( profileID: UUID, websiteDataStore: WKWebsiteDataStore? = nil, + nativeCapabilities: Set = [], browserWebExtensionHost: (any BrowserWebExtensionHosting)? = nil, webViewConfiguration: WKWebViewConfiguration? = nil ) -> CmuxWebView { let config = webViewConfiguration ?? WKWebViewConfiguration() if webViewConfiguration == nil { - configureWebViewConfiguration(config, websiteDataStore: websiteDataStore ?? BrowserProfileStore.shared.websiteDataStore(for: profileID), browserWebExtensionHost: browserWebExtensionHost) + configureWebViewConfiguration( + config, + websiteDataStore: websiteDataStore ?? BrowserProfileStore.shared.websiteDataStore(for: profileID), + nativeCapabilities: nativeCapabilities, + browserWebExtensionHost: browserWebExtensionHost + ) + } else if nativeCapabilities.contains(.feed) { + FeedSurfaceBridge.installIfNeeded(on: config.userContentController) } let webView = CmuxWebView(frame: .zero, configuration: config) @@ -3515,6 +3667,7 @@ final class BrowserPanel: Panel, ObservableObject { static func configureWebViewConfiguration( _ configuration: WKWebViewConfiguration, websiteDataStore: WKWebsiteDataStore, + nativeCapabilities: Set = [], browserWebExtensionHost: (any BrowserWebExtensionHosting)? = nil ) { configuration.mediaTypesRequiringUserActionForPlayback = [] @@ -3532,6 +3685,9 @@ final class BrowserPanel: Panel, ObservableObject { // The handler itself rejects every frame that is not a registered diff // viewer session, so installing it on all browser webviews is safe. DiffSidecarBridge.installViewerBridges(on: configuration.userContentController) + if nativeCapabilities.contains(.feed) { + FeedSurfaceBridge.installIfNeeded(on: configuration.userContentController) + } // Enable developer extras (DevTools) configuration.preferences.setValue(true, forKey: "developerExtrasEnabled") @@ -3914,14 +4070,20 @@ final class BrowserPanel: Panel, ObservableObject { bypassRemoteProxy: Bool = false, isRemoteWorkspace: Bool = false, remoteWebsiteDataStoreIdentifier: UUID? = nil, + nativeCapabilities: Set? = nil, browserWebExtensionHost: (any BrowserWebExtensionHosting)? = nil, - webViewConfiguration: WKWebViewConfiguration? = nil, allowWebExtensionInitialNavigationConfiguration: Bool = true + webViewConfiguration: WKWebViewConfiguration? = nil, + allowWebExtensionInitialNavigationConfiguration: Bool = true ) { // Register fallback defaults and normalize legacy/out-of-range settings once // per process, before any setting is read below or by the SwiftUI view. Self.bootstrapBrowserDefaultsIfNeeded() self.id = UUID() self.workspaceId = workspaceId + let initialNavigationURL = initialRequest?.url ?? initialURL + let resolvedNativeCapabilities = nativeCapabilities + ?? (FeedSurfaceBridge.isTrustedFeedURL(initialNavigationURL) ? [.feed] : []) + self.nativeCapabilities = resolvedNativeCapabilities let resolvedProfileID = Self.resolvedProfileID(requested: profileID) self.profileID = resolvedProfileID self.historyStore = BrowserProfileStore.shared.historyStore(for: resolvedProfileID) @@ -3944,7 +4106,9 @@ final class BrowserPanel: Panel, ObservableObject { ?? initialExtensionNavigationConfiguration?.webViewConfiguration let webView: CmuxWebView var adoptedPrewarmedWebView = false - if initialWebViewConfiguration == nil, let prewarmed = Self.claimedPrewarmedWebView( + if resolvedNativeCapabilities.isEmpty, + initialWebViewConfiguration == nil, + let prewarmed = Self.claimedPrewarmedWebView( isRemoteWorkspace: isRemoteWorkspace, initialRequest: initialRequest, renderInitialNavigation: renderInitialNavigation, @@ -3959,6 +4123,7 @@ final class BrowserPanel: Panel, ObservableObject { webView = Self.makeWebView( profileID: resolvedProfileID, websiteDataStore: websiteDataStore, + nativeCapabilities: resolvedNativeCapabilities, browserWebExtensionHost: browserWebExtensionHost, webViewConfiguration: initialWebViewConfiguration ) @@ -4616,6 +4781,7 @@ final class BrowserPanel: Panel, ObservableObject { let replacement = Self.makeWebView( profileID: resolvedProfileID, websiteDataStore: websiteDataStore, + nativeCapabilities: nativeCapabilities, browserWebExtensionHost: browserWebExtensionHost ) replacement.pageZoom = desiredZoom @@ -4724,16 +4890,21 @@ final class BrowserPanel: Panel, ObservableObject { } func restoreSessionSnapshot(_ snapshot: SessionBrowserPanelSnapshot) { - // Diff viewer surfaces re-register their token from the on-disk manifest - // and navigate via the app-owned custom scheme, so they restore even - // though the local HTTP server that originally served them is gone. + // Internal surfaces restore their backing registration, from bundled + // resources for Feed or an on-disk manifest for dynamic diff viewers. if let token = snapshot.diffViewerToken, let requestPath = snapshot.diffViewerRequestPath, - CmuxDiffViewerURLSchemeHandler.shared.registerFromManifest(token: token), - let diffURL = CmuxDiffViewerURLSchemeHandler.diffViewerURL(token: token, requestPath: requestPath) { + let diffURL = CmuxDiffViewerURLSchemeHandler.shared.sessionRestoreURL( + token: token, + requestPath: requestPath + ) { hiddenWebViewDiscardManager.updateRestoredSessionRenderIntent(snapshot.shouldRenderWebView) setMuted(snapshot.isMuted) - setOmnibarVisible(snapshot.omnibarVisible ?? false) + setOmnibarVisible( + token == CmuxDiffViewerURLSchemeHandler.bundledFeedToken + ? false + : snapshot.omnibarVisible ?? false + ) currentURL = diffURL let shouldRenderRestoredWebView = snapshot.shouldRenderWebView && BrowserAvailabilitySettings.isEnabled() guard shouldRenderRestoredWebView else { @@ -4745,11 +4916,15 @@ final class BrowserPanel: Panel, ObservableObject { return } - let restoredURL = Self.remappedAppPricingSessionRestoreURL(Self.sanitizedSessionHistoryURL(snapshot.urlString)) + let sanitizedURL = Self.sanitizedSessionHistoryURL(snapshot.urlString) + let isLegacyPackagedFeed = FeedSurfaceBridge.isLegacyPackagedFeedURL(sanitizedURL) + let restoredURL = isLegacyPackagedFeed + ? FeedSurfaceBridge.feedURL() + : Self.remappedAppPricingSessionRestoreURL(sanitizedURL) let shouldRenderRestoredWebView = snapshot.shouldRenderWebView && BrowserAvailabilitySettings.isEnabled() hiddenWebViewDiscardManager.updateRestoredSessionRenderIntent(snapshot.shouldRenderWebView) setMuted(snapshot.isMuted) - setOmnibarVisible(snapshot.omnibarVisible ?? true) + setOmnibarVisible(isLegacyPackagedFeed ? false : snapshot.omnibarVisible ?? true) restoreSessionNavigationHistory( backHistoryURLStrings: snapshot.backHistoryURLStrings ?? [], @@ -4787,12 +4962,11 @@ final class BrowserPanel: Panel, ObservableObject { } func shouldPersistSessionSnapshot() -> Bool { - // Diff viewer surfaces are otherwise treated as temporary. Persist them - // only when they can actually be restored via the custom scheme (a - // local-only, non-pending manifest); otherwise persisting would leave a - // blank panel on restart with no URL to fall back to. + // Internal surfaces are otherwise treated as temporary. Persist them + // only when their bundled resources or local, non-pending manifest can + // restore the custom-scheme URL after relaunch. if let components = diffViewerSessionComponents() { - return CmuxDiffViewerURLSchemeHandler.shared.diffViewerRestorable( + return CmuxDiffViewerURLSchemeHandler.shared.sessionRestorable( token: components.token, requestPath: components.requestPath ) @@ -5224,19 +5398,25 @@ final class BrowserPanel: Panel, ObservableObject { func focus() { if shouldSuppressWebViewFocus() { + hasDeferredWebViewFocus = false return } - guard let window = webView.window, !webView.isHiddenOrHasHiddenAncestor else { return } + guard let window = webView.window, !webView.isHiddenOrHasHiddenAncestor else { + hasDeferredWebViewFocus = true + return + } // If nothing meaningful is loaded yet, prefer letting the omnibar take focus. if !webView.isLoading { let urlString = Self.remoteProxyDisplayURL(for: webView.url)?.absoluteString ?? currentURL?.absoluteString if urlString == nil || urlString == "about:blank" { + hasDeferredWebViewFocus = false return } } + hasDeferredWebViewFocus = false if Self.responderChainContains(window.firstResponder, target: webView) { noteWebViewFocused() return @@ -5282,6 +5462,7 @@ final class BrowserPanel: Panel, ObservableObject { } func unfocus() { + hasDeferredWebViewFocus = false clearBrowserFocusMode(reason: "panelUnfocus") invalidateSearchFocusRequests(reason: "panelUnfocus") guard let window = webView.window else { return } @@ -5857,6 +6038,7 @@ final class BrowserPanel: Panel, ObservableObject { let replacement = Self.makeWebView( profileID: profileID, websiteDataStore: websiteDataStore, + nativeCapabilities: nativeCapabilities, browserWebExtensionHost: browserWebExtensionHost, webViewConfiguration: webViewConfiguration ) @@ -6241,6 +6423,7 @@ extension BrowserPanel { let replacement = Self.makeWebView( profileID: profileID, websiteDataStore: websiteDataStore, + nativeCapabilities: nativeCapabilities, browserWebExtensionHost: browserWebExtensionHost ) webViewInstanceID = UUID() diff --git a/Sources/Workspace+CustomLayout.swift b/Sources/Workspace+CustomLayout.swift index 3db593176a46..e652aa6decab 100644 --- a/Sources/Workspace+CustomLayout.swift +++ b/Sources/Workspace+CustomLayout.swift @@ -191,7 +191,8 @@ extension Workspace { inPane: paneId, url: url, focus: false, - creationPolicy: .restoration + creationPolicy: .restoration, + omnibarVisible: surface.omnibarVisible ?? true ) { _ = closePanel(panelId, force: true) if let name = surface.name { setPanelCustomTitle(panelId: panel.id, title: name) } @@ -240,7 +241,8 @@ extension Workspace { inPane: paneId, url: url, focus: false, - creationPolicy: .restoration + creationPolicy: .restoration, + omnibarVisible: surface.omnibarVisible ?? true ) { if let name = surface.name { setPanelCustomTitle(panelId: panel.id, title: name) } if surface.focus == true { focusPanelId = panel.id } diff --git a/Sources/Workspace.swift b/Sources/Workspace.swift index f5256e9e63fe..bcb5519b7740 100644 --- a/Sources/Workspace.swift +++ b/Sources/Workspace.swift @@ -1596,7 +1596,8 @@ extension Workspace { focus: false, preferredProfileID: snapshot.browser?.profileID, creationPolicy: .restoration, - transparentBackground: snapshot.browser?.transparentBackground ?? false + transparentBackground: snapshot.browser?.transparentBackground ?? false, + nativeCapabilities: BrowserNativeCapability.restored(from: snapshot.browser) ) else { return nil } @@ -7842,6 +7843,7 @@ final class Workspace: Identifiable, ObservableObject { omnibarVisible: Bool = true, transparentBackground: Bool = false, bypassRemoteProxy: Bool = false, + nativeCapabilities: Set? = nil, webViewConfiguration: WKWebViewConfiguration? = nil, allowWebExtensionInitialNavigationConfiguration: Bool = true ) -> BrowserPanel? { @@ -7881,6 +7883,7 @@ final class Workspace: Identifiable, ObservableObject { bypassRemoteProxy: bypassRemoteProxy, isRemoteWorkspace: isRemoteWorkspace, remoteWebsiteDataStoreIdentifier: isRemoteWorkspace && !bypassRemoteProxy ? id : nil, + nativeCapabilities: nativeCapabilities, browserWebExtensionHost: browserWebExtensionHost, webViewConfiguration: webViewConfiguration, allowWebExtensionInitialNavigationConfiguration: allowWebExtensionInitialNavigationConfiguration @@ -12436,6 +12439,14 @@ extension Workspace: BonsplitDelegate { case .newWorkspace: owningTabManager?.addWorkspace() case .newAgentChat: performSurfaceTabBarNewAgentChatAction(presentingWindow: presentingWindow) + case .feed: + if let owningTabManager { + _ = AppDelegate.shared?.executeConfiguredCmuxAction( + id: CmuxSurfaceTabBarBuiltInAction.feed.configID, + tabManager: owningTabManager, + preferredWindow: presentingWindow + ) + } case .cloudVM: _ = AppDelegate.shared?.performCloudVMAction(tabManager: owningTabManager, preferredWindow: presentingWindow, debugSource: "surfaceTabBar.cloudVM") case .mobileConnect: diff --git a/Sources/WorkspaceConfigActionCapture.swift b/Sources/WorkspaceConfigActionCapture.swift index 2b9cf8450df3..549a641c9063 100644 --- a/Sources/WorkspaceConfigActionCapture.swift +++ b/Sources/WorkspaceConfigActionCapture.swift @@ -204,6 +204,7 @@ extension Workspace { surface.name = customName surface.url = browser.currentURL?.absoluteString surface.focus = focus + surface.omnibarVisible = browser.isOmnibarVisible return surface case let project as ProjectPanel: var surface = CmuxSurfaceDefinition(type: .project) diff --git a/cmux.xcodeproj/project.pbxproj b/cmux.xcodeproj/project.pbxproj index e5de5767546a..617eb7cb0780 100644 --- a/cmux.xcodeproj/project.pbxproj +++ b/cmux.xcodeproj/project.pbxproj @@ -833,6 +833,7 @@ C0DE71B10000000000000001 /* AppDelegate+AgentChatNotifications.swift in Sources FEED0000000000000000F013 /* FeedPermissionActionPolicy.swift in Sources */ = {isa = PBXBuildFile; fileRef = FEED0000000000000000F012 /* FeedPermissionActionPolicy.swift */; }; FEED0000000000000000F00B /* FeedPreviewWindowController.swift in Sources */ = {isa = PBXBuildFile; fileRef = FEED0000000000000000F00A /* FeedPreviewWindowController.swift */; }; FEED0000000000000000F009 /* FeedSidebarUITests.swift in Sources */ = {isa = PBXBuildFile; fileRef = FEED0000000000000000F008 /* FeedSidebarUITests.swift */; }; + FEED0000000000000000F015 /* FeedSurfaceBridge.swift in Sources */ = {isa = PBXBuildFile; fileRef = FEED0000000000000000F014 /* FeedSurfaceBridge.swift */; }; FEED0000000000000000F00F /* FeedTextEditorDebugWindowController.swift in Sources */ = {isa = PBXBuildFile; fileRef = FEED0000000000000000F00E /* FeedTextEditorDebugWindowController.swift */; }; D0B1001AA1B2C3D4E5F60001 /* FileDropHintBadgeView.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0B1001BA1B2C3D4E5F60001 /* FileDropHintBadgeView.swift */; }; D0B10020A1B2C3D4E5F60001 /* FileDropOverlayView.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0B10021A1B2C3D4E5F60001 /* FileDropOverlayView.swift */; }; @@ -2871,6 +2872,7 @@ C0DE71B10000000000000002 /* AppDelegate+AgentChatNotifications.swift */ = {isa = FEED0000000000000000F012 /* FeedPermissionActionPolicy.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = FeedPermissionActionPolicy.swift; sourceTree = ""; }; FEED0000000000000000F00A /* FeedPreviewWindowController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = FeedPreviewWindowController.swift; sourceTree = ""; }; FEED0000000000000000F008 /* FeedSidebarUITests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FeedSidebarUITests.swift; sourceTree = ""; }; + FEED0000000000000000F014 /* FeedSurfaceBridge.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = FeedSurfaceBridge.swift; sourceTree = ""; }; FEED0000000000000000F00E /* FeedTextEditorDebugWindowController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = FeedTextEditorDebugWindowController.swift; sourceTree = ""; }; D0B1001BA1B2C3D4E5F60001 /* FileDropHintBadgeView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FileDropHintBadgeView.swift; sourceTree = ""; }; D0B10021A1B2C3D4E5F60001 /* FileDropOverlayView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FileDropOverlayView.swift; sourceTree = ""; }; @@ -6220,6 +6222,7 @@ C0DE71B10000000000000002 /* AppDelegate+AgentChatNotifications.swift */ = {isa = FEED0000000000000000F004 /* FeedPanelView.swift */, FEED0000000000000000F012 /* FeedPermissionActionPolicy.swift */, FEED0000000000000000F010 /* FeedPanelViewModel.swift */, + FEED0000000000000000F014 /* FeedSurfaceBridge.swift */, FEED0000000000000000F00A /* FeedPreviewWindowController.swift */, FEED0000000000000000F00C /* FeedButtonStyleDebugWindowController.swift */, FEED0000000000000000F00E /* FeedTextEditorDebugWindowController.swift */, @@ -7134,6 +7137,7 @@ C0DE71B10000000000000002 /* AppDelegate+AgentChatNotifications.swift */ = {isa = FEED0000000000000000F011 /* FeedPanelViewModel.swift in Sources */, FEED0000000000000000F013 /* FeedPermissionActionPolicy.swift in Sources */, FEED0000000000000000F00B /* FeedPreviewWindowController.swift in Sources */, + FEED0000000000000000F015 /* FeedSurfaceBridge.swift in Sources */, FEED0000000000000000F00F /* FeedTextEditorDebugWindowController.swift in Sources */, D0B1001AA1B2C3D4E5F60001 /* FileDropHintBadgeView.swift in Sources */, D0B10020A1B2C3D4E5F60001 /* FileDropOverlayView.swift in Sources */, diff --git a/cmuxTests/BrowserPanelTests.swift b/cmuxTests/BrowserPanelTests.swift index 0d5874da09df..1646b242f5d1 100644 --- a/cmuxTests/BrowserPanelTests.swift +++ b/cmuxTests/BrowserPanelTests.swift @@ -655,6 +655,48 @@ final class BrowserPanelInitialNavigationTests: XCTestCase { XCTAssertTrue(normalLocalhostPanel.shouldPersistSessionSnapshot()) } + func testBundledFeedURLIsPersistedForSessionRestore() throws { + let feedURL = try XCTUnwrap(CmuxDiffViewerURLSchemeHandler.diffViewerURL( + token: CmuxDiffViewerURLSchemeHandler.bundledFeedToken, + requestPath: "/feed.html" + )) + let panel = BrowserPanel( + workspaceId: UUID(), + initialURL: feedURL, + renderInitialNavigation: false + ) + + XCTAssertEqual(panel.nativeCapabilities, [.feed]) + XCTAssertTrue( + panel.shouldPersistSessionSnapshot(), + "The bundled Feed panel must survive session restore instead of leaving an empty workspace that becomes a terminal." + ) + + let snapshot = SessionBrowserPanelSnapshot( + urlString: nil, + profileID: nil, + shouldRenderWebView: false, + pageZoom: 1, + developerToolsVisible: false, + omnibarVisible: true, + backHistoryURLStrings: nil, + forwardHistoryURLStrings: nil, + diffViewerToken: CmuxDiffViewerURLSchemeHandler.bundledFeedToken, + diffViewerRequestPath: "/feed.html" + ) + let restoredPanel = BrowserPanel( + workspaceId: UUID(), + renderInitialNavigation: false, + omnibarVisible: true, + nativeCapabilities: BrowserNativeCapability.restored(from: snapshot) + ) + + restoredPanel.restoreSessionSnapshot(snapshot) + + XCTAssertEqual(restoredPanel.currentURL, feedURL) + XCTAssertFalse(restoredPanel.isOmnibarVisible) + } + func testDiffViewerURLIsNotRecordedInBrowserHistory() throws { let fileURL = FileManager.default.temporaryDirectory .appendingPathComponent("cmux-browser-history-\(UUID().uuidString).json") @@ -1006,6 +1048,21 @@ final class BrowserPanelAddressBarFocusRequestTests: XCTestCase { @MainActor final class BrowserPanelReactGrabBridgeTests: XCTestCase { + func testFocusDefersUntilWebViewCanAttachAndUnfocusCancelsIt() { + let panel = BrowserPanel( + workspaceId: UUID(), + initialURL: URL(string: "https://example.com")!, + isRemoteWorkspace: false + ) + defer { panel.close() } + + panel.focus() + XCTAssertTrue(panel.hasDeferredWebViewFocus) + + panel.unfocus() + XCTAssertFalse(panel.hasDeferredWebViewFocus) + } + @MainActor func testExplicitWebViewFocusDoesNotSuppressOmnibarAutofocusWhenFocusFails() { let panel = BrowserPanel(workspaceId: UUID()) diff --git a/cmuxTests/BrowserWebContentProcessTests.swift b/cmuxTests/BrowserWebContentProcessTests.swift index 45af49695246..6ca3b5bc5409 100644 --- a/cmuxTests/BrowserWebContentProcessTests.swift +++ b/cmuxTests/BrowserWebContentProcessTests.swift @@ -118,6 +118,80 @@ struct BrowserWebContentProcessTests { #expect(result?["handler"] == false) } + @Test + func normalBrowserPageDoesNotExposeFeedNativeHandler() async throws { + let panel = BrowserPanel(workspaceId: UUID()) + defer { panel.close() } + let webView = panel.webView + let loadDelegate = BrowserWebContentProcessLoadDelegate() + webView.navigationDelegate = loadDelegate + defer { webView.navigationDelegate = nil } + + try await loadDelegate.load( + """ + + feed native handler probe + """, + in: webView, + baseURL: URL(string: "https://example.com/")! + ) + + let handlerVisible = try await webView.evaluateJavaScript( + """ + !!( + window.webkit && + window.webkit.messageHandlers && + window.webkit.messageHandlers.cmuxFeed && + typeof window.webkit.messageHandlers.cmuxFeed.postMessage === "function" + ) + """ + ) as? Bool + + #expect(handlerVisible == false) + } + + @Test + func feedSurfaceExposesFeedNativeHandler() async throws { + let feedURL = try #require(CmuxDiffViewerURLSchemeHandler.diffViewerURL( + token: CmuxDiffViewerURLSchemeHandler.bundledFeedToken, + requestPath: "/feed.html" + )) + let panel = BrowserPanel( + workspaceId: UUID(), + initialURL: feedURL, + renderInitialNavigation: false + ) + defer { panel.close() } + #expect(panel.nativeCapabilities == [.feed]) + + let webView = panel.webView + let loadDelegate = BrowserWebContentProcessLoadDelegate() + webView.navigationDelegate = loadDelegate + defer { webView.navigationDelegate = nil } + + try await loadDelegate.load( + """ + + feed capability control + """, + in: webView, + baseURL: feedURL + ) + + let handlerVisible = try await webView.evaluateJavaScript( + """ + !!( + window.webkit && + window.webkit.messageHandlers && + window.webkit.messageHandlers.cmuxFeed && + typeof window.webkit.messageHandlers.cmuxFeed.postMessage === "function" + ) + """ + ) as? Bool + + #expect(handlerVisible == true) + } + @Test func webAuthnPageBridgeRelaysCredentialGetThroughContentWorldHandler() async throws { let configuration = WKWebViewConfiguration() diff --git a/cmuxTests/CmuxConfigTests.swift b/cmuxTests/CmuxConfigTests.swift index 56f92a3fd118..325ce04befc4 100644 --- a/cmuxTests/CmuxConfigTests.swift +++ b/cmuxTests/CmuxConfigTests.swift @@ -2103,6 +2103,19 @@ final class CmuxLayoutEncodingTests: XCTestCase { } } + func testBrowserSurfaceOmnibarVisibilityRoundTrips() throws { + let original = CmuxSurfaceDefinition( + type: .browser, + url: "https://example.com", + omnibarVisible: false + ) + + let data = try JSONEncoder().encode(original) + let decoded = try JSONDecoder().decode(CmuxSurfaceDefinition.self, from: data) + + XCTAssertEqual(decoded.omnibarVisible, false) + } + func testSplitNodeRoundTrips() throws { let original = CmuxLayoutNode.split(CmuxSplitDefinition( direction: .vertical, diff --git a/cmuxTests/FeedCoordinatorTests.swift b/cmuxTests/FeedCoordinatorTests.swift index c18dd8744133..8de02214bb68 100644 --- a/cmuxTests/FeedCoordinatorTests.swift +++ b/cmuxTests/FeedCoordinatorTests.swift @@ -10,6 +10,75 @@ import CMUXAgentLaunch @Suite("Feed coordinator", .serialized) struct FeedCoordinatorTests { + @Test func feedSurfaceTrustIsLimitedToTheBundledEntryPoint() throws { + let token = CmuxDiffViewerURLSchemeHandler.bundledFeedToken + #expect(CmuxDiffViewerURLSchemeHandler.isValidToken(token)) + let feedURL = try #require(CmuxDiffViewerURLSchemeHandler.diffViewerURL(token: token, requestPath: "/feed.html")) + + #expect(FeedSurfaceBridge.isTrustedFeedURL(feedURL)) + #expect(!FeedSurfaceBridge.isTrustedFeedURL(URL(string: feedURL.absoluteString + "#feed"))) + #expect(!FeedSurfaceBridge.isTrustedFeedURL(URL(string: "cmux-diff-viewer://\(token)/index.html"))) + #expect(!FeedSurfaceBridge.isTrustedFeedURL(URL(string: "https://example.com/feed.html"))) + } + + @Test func legacyPackagedFeedURLIsRecognizedForSessionMigration() throws { + let legacyURL = try #require(URL(string: + "file:///Applications/cmux.app/Contents/Resources/markdown-viewer/webviews-app/feed.html" + )) + + #expect(FeedSurfaceBridge.isLegacyPackagedFeedURL(legacyURL)) + #expect(!FeedSurfaceBridge.isLegacyPackagedFeedURL(URL(string: "file:///tmp/feed.html"))) + #expect(!FeedSurfaceBridge.isLegacyPackagedFeedURL(URL(string: "https://example.com/feed.html"))) + } + + @Test func restoredFeedSnapshotsRetainTheirNativeCapability() { + let feedSnapshot = SessionBrowserPanelSnapshot( + urlString: "cmux-diff-viewer://bundled-feed-surface/feed.html", + profileID: nil, + shouldRenderWebView: true, + pageZoom: 1, + developerToolsVisible: false, + backHistoryURLStrings: nil, + forwardHistoryURLStrings: nil, + diffViewerToken: CmuxDiffViewerURLSchemeHandler.bundledFeedToken, + diffViewerRequestPath: "/feed.html" + ) + let normalSnapshot = SessionBrowserPanelSnapshot( + urlString: "https://example.com", + profileID: nil, + shouldRenderWebView: true, + pageZoom: 1, + developerToolsVisible: false, + backHistoryURLStrings: nil, + forwardHistoryURLStrings: nil + ) + let legacySnapshot = SessionBrowserPanelSnapshot( + urlString: "file:///Applications/cmux.app/Contents/Resources/markdown-viewer/webviews-app/feed.html", + profileID: nil, + shouldRenderWebView: true, + pageZoom: 1, + developerToolsVisible: false, + backHistoryURLStrings: nil, + forwardHistoryURLStrings: nil + ) + + #expect(BrowserNativeCapability.restored(from: feedSnapshot) == [.feed]) + #expect(BrowserNativeCapability.restored(from: legacySnapshot) == [.feed]) + #expect(BrowserNativeCapability.restored(from: normalSnapshot).isEmpty) + } + + @Test func bundledFeedAssetsUseZlibDecompression() throws { + let compressed = Data([ + 0x78, 0xda, 0x4b, 0xce, 0xcf, 0x2b, 0xce, 0xcf, 0x49, + 0xd5, 0xcb, 0xc9, 0x4f, 0xd7, 0x50, 0x4f, 0x4b, 0x4d, + 0x4d, 0x51, 0xd7, 0x04, 0x00, 0x47, 0xe8, 0x06, 0x97, + ]) + + let decoded = try CmuxDiffViewerURLSchemeHandler.inflateZlibData(compressed) + + #expect(String(decoding: decoded, as: UTF8.self) == "console.log('feed')") + } + @Test func codexTeamsResolvesExplicitWorkingDirectoryFlags() { let base = "/tmp/cmux-base" diff --git a/cmuxTests/NewWorkspaceMenuModelTests.swift b/cmuxTests/NewWorkspaceMenuModelTests.swift index 1111f006d5ed..276215ba59e7 100644 --- a/cmuxTests/NewWorkspaceMenuModelTests.swift +++ b/cmuxTests/NewWorkspaceMenuModelTests.swift @@ -12,6 +12,11 @@ import Testing /// always-present management tail. struct NewWorkspaceMenuModelTests { + @Test func feedCommandPaletteContributionUsesSharedBuiltInAction() { + let contributions = ContentView.commandPaletteFeedContributions() + #expect(contributions.map(\.commandId) == ["palette.feed"]) + } + @MainActor private func loadStore(globalJSON: String) throws -> (store: CmuxConfigStore, root: URL) { let root = FileManager.default.temporaryDirectory.appendingPathComponent( @@ -101,9 +106,11 @@ struct NewWorkspaceMenuModelTests { defer { try? FileManager.default.removeItem(at: root) } let agent = CmuxResolvedConfigAction.builtIn(.newAgentChat) + let feed = CmuxResolvedConfigAction.builtIn(.feed) let model = NewWorkspaceMenuModel.build( newWorkspaceContextMenuItems: store.newWorkspaceContextMenuItems, agentChatAction: agent, + feedAction: feed, cloudSectionEnabled: true, templateNames: ["Template A"], loadedActions: store.loadedActions, @@ -136,6 +143,7 @@ struct NewWorkspaceMenuModelTests { CmuxSurfaceTabBarBuiltInAction.newWorkspace.configID, "terminal-command", CmuxSurfaceTabBarBuiltInAction.newAgentChat.configID, + CmuxSurfaceTabBarBuiltInAction.feed.configID, ]) #expect(createRows.contains(.separator)) #expect(layoutRows.map { $0.menuAction.action.id } == ["review-layout"]) @@ -156,6 +164,7 @@ struct NewWorkspaceMenuModelTests { let cloudFirstModel = NewWorkspaceMenuModel.build( newWorkspaceContextMenuItems: store.newWorkspaceContextMenuItems, agentChatAction: agent, + feedAction: feed, cloudSectionEnabled: true, templateNames: ["Template A"], loadedActions: store.loadedActions, diff --git a/scripts/build-webviews-app.sh b/scripts/build-webviews-app.sh index bdc76ff310e9..255ebf41d877 100755 --- a/scripts/build-webviews-app.sh +++ b/scripts/build-webviews-app.sh @@ -31,13 +31,32 @@ write_agent_session_html() { } > "$out_dir/agent-session.html" } +write_feed_html() { + out_dir="$1" + { + printf '\n' + printf '\n' + printf ' \n' + printf ' \n' + printf ' \n' + printf ' cmux\n' + printf ' \n' + printf ' \n' + printf '
\n' + printf ' \n' + printf ' \n' + printf ' \n' + printf '\n' + } > "$out_dir/feed.html" +} + strip_trailing_line_whitespace() { /usr/bin/perl -0pi -e 's/[ \t]+(?=\r?\n)//g; s/[ \t]+\z//' "$@" } normalize_webviews_output() { out_dir="$1" - strip_trailing_line_whitespace "$out_dir/main.mjs" "$out_dir/agent-session.html" + strip_trailing_line_whitespace "$out_dir/main.mjs" "$out_dir/agent-session.html" "$out_dir/feed.html" } if [ "${1:-}" = "--check" ]; then @@ -48,6 +67,7 @@ if [ "${1:-}" = "--check" ]; then bun install --frozen-lockfile CMUX_WEBVIEWS_OUT_DIR="$tmp_dir" bun run build write_agent_session_html "$tmp_dir" + write_feed_html "$tmp_dir" normalize_webviews_output "$tmp_dir" ) diff_output="$(mktemp)" @@ -75,4 +95,5 @@ fi bun run build ) write_agent_session_html "$OUT_DIR" +write_feed_html "$OUT_DIR" normalize_webviews_output "$OUT_DIR" diff --git a/webviews/src/feed/App.tsx b/webviews/src/feed/App.tsx new file mode 100644 index 000000000000..14d1c4876fa0 --- /dev/null +++ b/webviews/src/feed/App.tsx @@ -0,0 +1,440 @@ +import { useCallback, useRef, useState, useSyncExternalStore } from "react"; +import { callFeedNative, feedSnapshotStore } from "./bridge"; +import { feedSourceIcons } from "./sourceIcons"; +import type { CSSProperties, KeyboardEvent as ReactKeyboardEvent } from "react"; +import type { FeedCopy, FeedIntegration, FeedItem, FeedQuestion } from "./types"; +import "./styles.css"; + +type Filter = "actionable" | "activity"; +export const feedActivityPageSize = 40; + +function isEditable(target: EventTarget | null) { + return target instanceof HTMLElement + && (target.isContentEditable || ["INPUT", "SELECT", "TEXTAREA"].includes(target.tagName)); +} + +export function handleFeedNavigation(event: KeyboardEvent, root: HTMLElement) { + if (event.key === "Tab" && !event.altKey && !event.ctrlKey && !event.metaKey) { + const activeElement = document.activeElement as HTMLElement | null; + const activeCard = activeElement?.closest(".feed-card"); + if (activeCard) { + const cardControls = [...activeCard.querySelectorAll( + 'button:not(:disabled), input:not(:disabled), select:not(:disabled), textarea:not(:disabled), [tabindex="0"]', + )].filter((control) => control.tabIndex >= 0); + if (activeElement === activeCard && cardControls.length > 0) { + event.preventDefault(); + cardControls[event.shiftKey ? cardControls.length - 1 : 0]?.focus(); + return; + } + if (event.shiftKey && activeElement === cardControls[0]) { + event.preventDefault(); + activeCard.focus({ preventScroll: true }); + return; + } + } + const controls = [...root.querySelectorAll( + 'button:not(:disabled), input:not(:disabled), select:not(:disabled), textarea:not(:disabled), [tabindex="0"]', + )].filter((control) => control !== root && control.tabIndex >= 0); + if (controls.length === 0) return; + const activeIndex = controls.indexOf(document.activeElement as HTMLElement); + const nextIndex = activeIndex < 0 + ? (event.shiftKey ? controls.length - 1 : 0) + : (activeIndex + (event.shiftKey ? -1 : 1) + controls.length) % controls.length; + event.preventDefault(); + controls[nextIndex]?.focus(); + return; + } + if (isEditable(event.target) || event.altKey || event.metaKey) return; + const key = event.key.toLowerCase(); + const direction = !event.ctrlKey && (key === "j" || key === "arrowdown") + ? 1 + : !event.ctrlKey && (key === "k" || key === "arrowup") + ? -1 + : event.ctrlKey && key === "n" + ? 1 + : event.ctrlKey && key === "p" + ? -1 + : 0; + const isBoundaryKey = !event.ctrlKey && (key === "home" || key === "end"); + if (direction === 0 && !isBoundaryKey) return; + const cards = [...root.querySelectorAll(".feed-card")]; + if (cards.length === 0) return; + const activeCard = document.activeElement?.closest(".feed-card"); + const activeIndex = activeCard ? cards.indexOf(activeCard) : -1; + const nextIndex = key === "home" + ? 0 + : key === "end" + ? cards.length - 1 + : activeIndex < 0 + ? (direction > 0 ? 0 : cards.length - 1) + : Math.max(0, Math.min(cards.length - 1, activeIndex + direction)); + event.preventDefault(); + cards[nextIndex]?.focus({ preventScroll: true }); + cards[nextIndex]?.scrollIntoView?.({ block: "nearest" }); +} + +function handleTabNavigation(event: ReactKeyboardEvent) { + const tabs = [...event.currentTarget.querySelectorAll('[role="tab"]')]; + const currentIndex = tabs.indexOf(document.activeElement as HTMLButtonElement); + if (currentIndex < 0) return; + const key = event.key; + const nextIndex = key === "Home" + ? 0 + : key === "End" + ? tabs.length - 1 + : key === "ArrowLeft" + ? (currentIndex - 1 + tabs.length) % tabs.length + : key === "ArrowRight" + ? (currentIndex + 1) % tabs.length + : -1; + if (nextIndex < 0) return; + event.preventDefault(); + event.stopPropagation(); + tabs[nextIndex]?.focus(); + tabs[nextIndex]?.click(); +} + +export function createDemoFeedItems(copy: FeedCopy): FeedItem[] { + const createdAt = new Date().toISOString(); + return [{ + allowed_permission_modes: ["deny", "once", "always"], + created_at: createdAt, + id: "feed-demo-permission", + kind: "permissionRequest", + source: "claude", + status: "pending", + tool_input: copy.demoPermissionBody, + tool_name: copy.demoPermissionTitle, + workstream_id: "feed-demo", + }, { + created_at: createdAt, + id: "feed-demo-plan", + kind: "exitPlan", + plan: copy.demoPlanBody, + source: "codex", + status: "pending", + title: copy.demoPlanTitle, + workstream_id: "feed-demo", + }, { + created_at: createdAt, + id: "feed-demo-question", + kind: "question", + question_prompt: copy.demoQuestionPrompt, + questions: [{ + id: "verification", + multi_select: false, + options: [ + { id: "focused", label: copy.demoQuestionOptionFocused }, + { id: "full", label: copy.demoQuestionOptionFull }, + ], + prompt: copy.demoQuestionPrompt, + }], + source: "gemini", + status: "pending", + title: copy.demoQuestionTitle, + workstream_id: "feed-demo", + }]; +} + +export function FeedApp() { + const snapshot = useSyncExternalStore( + feedSnapshotStore.subscribe, + feedSnapshotStore.getSnapshot, + feedSnapshotStore.getSnapshot, + ); + const [filter, setFilter] = useState("actionable"); + const [activityLimit, setActivityLimit] = useState(feedActivityPageSize); + const [demoItems, setDemoItems] = useState([]); + const [error, setError] = useState(null); + const keyboardCleanup = useRef<() => void>(() => {}); + const bindKeyboardRoot = useCallback((node: HTMLElement | null) => { + keyboardCleanup.current(); + keyboardCleanup.current = () => {}; + if (!node) return; + const onKeyDown = (event: KeyboardEvent) => handleFeedNavigation(event, node); + node.addEventListener("keydown", onKeyDown); + keyboardCleanup.current = () => node.removeEventListener("keydown", onKeyDown); + if (!document.activeElement || document.activeElement === document.body) node.focus(); + }, []); + + if (!snapshot) return
; + const sourceItems = demoItems.length > 0 ? [...demoItems, ...snapshot.items] : snapshot.items; + const items = filter === "actionable" + ? sourceItems.filter((item) => item.status === "pending") + : sourceItems; + const visibleItems = filter === "activity" ? items.slice(0, activityLimit) : items; + const hasBufferedActivity = filter === "activity" && visibleItems.length < items.length; + const themeStyle = { + "--feed-background": snapshot.theme.background, + "--feed-foreground": snapshot.theme.foreground, + colorScheme: snapshot.theme.isLight ? "light" : "dark", + } as CSSProperties; + + const perform = async (method: string, params: Record) => { + setError(null); + const itemId = typeof params.itemId === "string" ? params.itemId : ""; + if (itemId.startsWith("feed-demo-")) { + setDemoItems((current) => current.map((item) => ( + item.id === itemId ? { ...item, status: "resolved" } : item + ))); + return; + } + try { + await callFeedNative(method, params); + } catch { + setError(snapshot.copy.requestFailed); + } + }; + + return ( +
+
+
+

{snapshot.copy.feed}

+
+ + +
+
+ {error &&
{error}
} +
+ {visibleItems.length === 0 ? ( + { + setDemoItems(createDemoFeedItems(snapshot.copy)); + setFilter("actionable"); + }} + snapshot={snapshot} + /> + ) : visibleItems.map((item) => ( + + ))} + {(hasBufferedActivity || snapshot.hasMore) && ( + + )} +
+
+
+ ); +} + +function FeedEmptyState({ filter, onLoadExamples, snapshot }: { + filter: Filter; + onLoadExamples: () => void; + snapshot: NonNullable>; +}) { + const title = filter === "actionable" ? snapshot.copy.emptyActionable : snapshot.copy.emptyActivity; + const description = filter === "actionable" + ? snapshot.copy.emptyActionableDescription + : snapshot.copy.emptyActivityDescription; + const statusLabel = (integration: FeedIntegration) => ({ + checking: snapshot.copy.integrationChecking, + disabled: snapshot.copy.integrationDisabled, + needsSetup: snapshot.copy.integrationNeedsSetup, + ready: snapshot.copy.integrationReady, + })[integration.status]; + return ( +
+

{title}

+

{description}

+ +
+

{snapshot.copy.integrationsTitle}

+
+ {snapshot.integrations.map((integration) => ( +
+ + {statusLabel(integration)} +
+ ))} +
+

{snapshot.copy.integrationHint}

+
+

{snapshot.copy.keyboardHelp}

+
+ ); +} + +function FeedCard({ item, copy, perform, sourceIcon, sourceLabel }: { + item: FeedItem; + copy: NonNullable>["copy"]; + perform: (method: string, params: Record) => Promise; + sourceIcon?: string; + sourceLabel?: string; +}) { + const title = item.title || item.tool_name || item.kind.replaceAll("_", " "); + return ( +
+
+
+ +

{title}

+
+ +
+ {item.cwd &&
{item.cwd}
} + + {item.status === "pending" && ( + + )} +
+ ); +} + +function SourceIdentity({ icon, label, source }: { icon?: string; label?: string; source: string }) { + const displayLabel = label ?? source; + const resolvedIcon = icon + ? { presentation: "image" as const, url: icon } + : feedSourceIcons[source]; + const style = resolvedIcon?.presentation === "mask" + ? ({ "--feed-source-icon": `url(${JSON.stringify(resolvedIcon.url)})` } as CSSProperties) + : undefined; + return ( + + {resolvedIcon?.presentation === "image" ? ( + + ) : ( + + )} + {displayLabel} + + ); +} + +function FeedBody({ item }: { item: FeedItem }) { + const text = item.plan || item.question_prompt || item.tool_input || item.tool_result || item.text; + if (!text) return null; + return
{text}
; +} + +function FeedActions({ item, copy, perform }: { + item: FeedItem; + copy: NonNullable>["copy"]; + perform: (method: string, params: Record) => Promise; +}) { + if (item.kind === "permissionRequest") { + const modes = new Set(item.allowed_permission_modes ?? ["deny"]); + return
+ {modes.has("deny") && } + {modes.has("once") && } + {modes.has("always") && } + {modes.has("all") && } + {modes.has("bypass") && } +
; + } + if (item.kind === "exitPlan") { + return
+ + + +
; + } + if (item.kind === "question") { + return ; + } + return null; +} + +function QuestionActions({ item, questions, copy, perform }: { + item: FeedItem; + questions: FeedQuestion[]; + copy: NonNullable>["copy"]; + perform: (method: string, params: Record) => Promise; +}) { + const normalizedQuestions = questions.length > 0 ? questions : [{ + id: "question", multi_select: false, options: item.question_options ?? [], prompt: item.question_prompt ?? "", + }]; + const [selected, setSelected] = useState>({}); + const [freeText, setFreeText] = useState>({}); + const toggle = (question: FeedQuestion, id: string) => { + setSelected((current) => { + const values = current[question.id] ?? []; + const next = question.multi_select + ? (values.includes(id) ? values.filter((value) => value !== id) : [...values, id]) + : [id]; + return { ...current, [question.id]: next }; + }); + }; + const answers = normalizedQuestions.flatMap((question) => { + const custom = freeText[question.id]?.trim(); + if (custom) return [custom]; + const values = selected[question.id] ?? []; + const labels = question.options.filter((option) => values.includes(option.id)).map((option) => option.label); + return labels.length > 0 ? [labels.join(", ")] : []; + }); + return
+ {normalizedQuestions.map((question) =>
+ {question.prompt &&
{question.prompt}
} +
+ {question.options.map((option) => ( + + ))} +
+ setFreeText((current) => ({ ...current, [question.id]: event.target.value }))} + placeholder={copy.questionPlaceholder} + value={freeText[question.id] ?? ""} + /> +
)} + +
; +} diff --git a/webviews/src/feed/bridge.ts b/webviews/src/feed/bridge.ts new file mode 100644 index 000000000000..82423f001b13 --- /dev/null +++ b/webviews/src/feed/bridge.ts @@ -0,0 +1,64 @@ +import type { FeedNativeEvent, FeedSnapshot } from "./types"; + +type NativeReply = + | { ok: true; value: T } + | { ok: false; error?: { code?: string; userMessage?: string } }; + +declare global { + interface Window { + cmuxFeedBridge?: { receive(event: FeedNativeEvent): void }; + } +} + +type FeedBridgeWindow = Window & { + webkit?: { + messageHandlers?: { + cmuxFeed?: { postMessage(message: unknown): Promise> }; + }; + }; +}; + +let currentSnapshot: FeedSnapshot | null = null; +const listeners = new Set<() => void>(); +let subscriptionPromise: Promise | null = null; + +function publish(snapshot: FeedSnapshot) { + currentSnapshot = snapshot; + for (const listener of listeners) listener(); +} + +export function receiveFeedNativeEvent(event: FeedNativeEvent) { + if (event.type === "feed.snapshot") publish(event.snapshot); +} + +if (typeof window !== "undefined") { + window.cmuxFeedBridge = { receive: receiveFeedNativeEvent }; +} + +export async function callFeedNative(method: string, params: Record = {}): Promise { + const handler = (window as FeedBridgeWindow).webkit?.messageHandlers?.cmuxFeed; + if (!handler?.postMessage) throw new Error("Native Feed bridge is unavailable."); + const reply = (await handler.postMessage({ method, params })) as NativeReply; + if (!reply.ok) throw new Error(reply.error?.userMessage || "Feed request failed."); + return reply.value; +} + +async function ensureSubscribed() { + if (subscriptionPromise) return subscriptionPromise; + subscriptionPromise = callFeedNative("feed.subscribe") + .then(publish) + .catch((error) => { + subscriptionPromise = null; + throw error; + }); + return subscriptionPromise; +} + +export const feedSnapshotStore = { + getSnapshot: () => currentSnapshot, + subscribe(listener: () => void) { + listeners.add(listener); + void ensureSubscribed(); + return () => listeners.delete(listener); + }, +}; diff --git a/webviews/src/feed/sourceIcons.ts b/webviews/src/feed/sourceIcons.ts new file mode 100644 index 000000000000..d4124ce0a2c9 --- /dev/null +++ b/webviews/src/feed/sourceIcons.ts @@ -0,0 +1,25 @@ +export type FeedSourceIcon = { + presentation: "image" | "mask"; + url: string; +}; + +const svg = (base64: string): FeedSourceIcon => ({ + presentation: "mask", + url: `data:image/svg+xml;base64,${base64}`, +}); + +const image = (mime: string, base64: string): FeedSourceIcon => ({ + presentation: "image", + url: `data:${mime};base64,${base64}`, +}); + +// Monochrome marks come from Simple Icons. Full-color marks use each +// integration's official favicon so Feed stays recognizable in either theme. +export const feedSourceIcons: Record = { + cursor: svg("PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxZW0iIGhlaWdodD0iMWVtIiB2aWV3Qm94PSIwIDAgMjQgMjQiPjxwYXRoIGZpbGw9ImN1cnJlbnRDb2xvciIgZD0iTTExLjUwMy4xMzFMMS44OTEgNS42NzhhLjg0Ljg0IDAgMCAwLS40Mi43MjZ2MTEuMTg4YzAgLjMuMTYyLjU3NS40Mi43MjRsOS42MDkgNS41NWExIDEgMCAwIDAgLjk5OCAwbDkuNjEtNS41NWEuODQuODQgMCAwIDAgLjQyLS43MjRWNi40MDRhLjg0Ljg0IDAgMCAwLS40Mi0uNzI2TDEyLjQ5Ny4xMzFhMS4wMSAxLjAxIDAgMCAwLS45OTYgME0yLjY1NyA2LjMzOGgxOC41NWMuMjYzIDAgLjQzLjI4Ny4yOTcuNTE1TDEyLjIzIDIyLjkxOGMtLjA2Mi4xMDctLjIyOS4wNjQtLjIyOS0uMDZWMTIuMzM1YS41OS41OSAwIDAgMC0uMjk1LS41MWwtOS4xMS01LjI1N2MtLjEwOS0uMDYzLS4wNjQtLjIzLjA2MS0uMjMiLz48L3N2Zz4="), + gemini: svg("PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxZW0iIGhlaWdodD0iMWVtIiB2aWV3Qm94PSIwIDAgMjQgMjQiPjxwYXRoIGZpbGw9ImN1cnJlbnRDb2xvciIgZD0iTTExLjA0IDE5LjMyUTEyIDIxLjUxIDEyIDI0cTAtMi40OS45My00LjY4cS45Ni0yLjE5IDIuNTgtMy44MXQzLjgxLTIuNTVRMjEuNTEgMTIgMjQgMTJxLTIuNDkgMC00LjY4LS45M2ExMi4zIDEyLjMgMCAwIDEtMy44MS0yLjU4YTEyLjMgMTIuMyAwIDAgMS0yLjU4LTMuODFRMTIgMi40OSAxMiAwcTAgMi40OS0uOTYgNC42OHEtLjkzIDIuMTktMi41NSAzLjgxYTEyLjMgMTIuMyAwIDAgMS0zLjgxIDIuNThRMi40OSAxMiAwIDEycTIuNDkgMCA0LjY4Ljk2cTIuMTkuOTMgMy44MSAyLjU1dDIuNTUgMy44MSIvPjwvc3ZnPg=="), + copilot: svg("PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxZW0iIGhlaWdodD0iMWVtIiB2aWV3Qm94PSIwIDAgMjQgMjQiPjxwYXRoIGZpbGw9ImN1cnJlbnRDb2xvciIgZD0iTTIzLjkyMiAxNi45OTdDMjMuMDYxIDE4LjQ5MiAxOC4wNjMgMjIuMDIgMTIgMjIuMDJTLjkzOSAxOC40OTIuMDc4IDE2Ljk5N0EuNi42IDAgMCAxIDAgMTYuNzQxdi0yLjg2OWExIDEgMCAwIDEgLjA1My0uMjJjLjM3Mi0uOTM1IDEuMzQ3LTIuMjkyIDIuNjA1LTIuNjU2Yy4xNjctLjQyOS40MTQtMS4wNTUuNjQ0LTEuNTE3YTEwIDEwIDAgMCAxLS4wNTItMS4wODZjMC0xLjMzMS4yODItMi40OTkgMS4xMzItMy4zNjhjLjM5Ny0uNDA2Ljg5LS43MTcgMS40NzQtLjk1MkM3LjI1NSAyLjkzNyA5LjI0OCAxLjk4IDExLjk3OCAxLjk4czQuNzY3Ljk1NyA2LjE2NiAyLjA5M2MuNTg0LjIzNSAxLjA3Ny41NDYgMS40NzQuOTUyYy44NS44NjkgMS4xMzIgMi4wMzcgMS4xMzIgMy4zNjhjMCAuMzY4LS4wMTQuNzMzLS4wNTIgMS4wODZjLjIzLjQ2Mi40NzcgMS4wODguNjQ0IDEuNTE3YzEuMjU4LjM2NCAyLjIzMyAxLjcyMSAyLjYwNSAyLjY1NmEuOC44IDAgMCAxIC4wNTMuMjJ2Mi44NjlhLjYuNiAwIDAgMS0uMDc4LjI1Nm0tMTEuNzUtNS45OTJoLS4zNDRhNCA0IDAgMCAxLS4zNTUuNTA4Yy0uNzcuOTQ3LTEuOTE4IDEuNDkyLTMuNTA4IDEuNDkyYy0xLjcyNSAwLTIuOTg5LS4zNTktMy43ODItMS4yNTlhMiAyIDAgMCAxLS4wODUtLjEwNEw0IDExLjc0NnY2LjU4NWMxLjQzNS43NzkgNC41MTQgMi4xNzkgOCAyLjE3OXM2LjU2NS0xLjQgOC0yLjE3OXYtNi41ODVsLS4wOTgtLjEwNHMtLjAzMy4wNDUtLjA4NS4xMDRjLS43OTMuOS0yLjA1NyAxLjI1OS0zLjc4MiAxLjI1OWMtMS41OSAwLTIuNzM4LS41NDUtMy41MDgtMS40OTJhNCA0IDAgMCAxLS4zNTUtLjUwOG0yLjMyOCAzLjI1Yy41NDkgMCAxIC40NTEgMSAxdjJjMCAuNTQ5LS40NTEgMS0xIDFzLTEtLjQ1MS0xLTF2LTJjMC0uNTQ5LjQ1MS0xIDEtMW0tNSAwYy41NDkgMCAxIC40NTEgMSAxdjJjMCAuNTQ5LS40NTEgMS0xIDFzLTEtLjQ1MS0xLTF2LTJjMC0uNTQ5LjQ1MS0xIDEtMW0zLjMxMy02LjE4NWMuMTM2IDEuMDU3LjQwMyAxLjkxMy44NzggMi40OTdjLjQ0Mi41NDQgMS4xMzQuOTM4IDIuMzQ0LjkzOGMxLjU3MyAwIDIuMjkyLS4zMzcgMi42NTctLjc1MWMuMzg0LS40MzUuNTU4LTEuMTUuNTU4LTIuMzYxYzAtMS4xNC0uMjQzLTEuODQ3LS43MDUtMi4zMTljLS40NzctLjQ4OC0xLjMxOS0uODYyLTIuODI0LTEuMDI1Yy0xLjQ4Ny0uMTYxLTIuMTkyLjEzOC0yLjUzMy41MjljLS4yNjkuMzA3LS40MzcuODA4LS40MzggMS41Nzh2LjAyMXEwIC4zOTcuMDYzLjg5M20tMS42MjYgMHEuMDYzLS40OTYuMDYzLS44OTR2LS4wMmMtLjAwMS0uNzctLjE2OS0xLjI3MS0uNDM4LTEuNTc4Yy0uMzQxLS4zOTEtMS4wNDYtLjY5LTIuNTMzLS41MjljLTEuNTA1LjE2My0yLjM0Ny41MzctMi44MjQgMS4wMjVjLS40NjIuNDcyLS43MDUgMS4xNzktLjcwNSAyLjMxOWMwIDEuMjExLjE3NSAxLjkyNi41NTggMi4zNjFjLjM2NS40MTQgMS4wODQuNzUxIDIuNjU3Ljc1MWMxLjIxIDAgMS45MDItLjM5NCAyLjM0NC0uOTM4Yy40NzUtLjU4NC43NDItMS40NC44NzgtMi40OTciLz48L3N2Zz4="), + codebuddy: image("image/svg+xml", "PHN2ZyB3aWR0aD0iNDAiIGhlaWdodD0iNDAiIHZpZXdCb3g9IjAgMCA0MCA0MCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPGcgY2xpcC1wYXRoPSJ1cmwoI2NsaXAwXzUxMTBfMTQ3NzEpIj4KPHJlY3Qgd2lkdGg9IjQwIiBoZWlnaHQ9IjQwIiByeD0iMjAiIGZpbGw9InVybCgjcGFpbnQwX2xpbmVhcl81MTEwXzE0NzcxKSIvPgo8ZyBmaWx0ZXI9InVybCgjZmlsdGVyMF9mXzUxMTBfMTQ3NzEpIj4KPGNpcmNsZSBjeD0iMTIuNjA3MSIgY3k9IjM0Ljk3OTQiIHI9IjE0LjA4MSIgZmlsbD0iIzMyRTZCOSIgZmlsbC1vcGFjaXR5PSIwLjQiLz4KPC9nPgo8ZyBmaWx0ZXI9InVybCgjZmlsdGVyMV9mXzUxMTBfMTQ3NzEpIj4KPGNpcmNsZSBjeD0iMzMuMzQwNCIgY3k9IjQzLjYxODUiIHI9IjEyLjg3MDQiIGZpbGw9IiMzMkU2QjkiLz4KPC9nPgo8cGF0aCBkPSJNMjcuNjg5NyAzLjM0MjZDMjguMDU3IDMuMDEzMjIgMjguMDc5NSAyLjk5OTgzIDI4LjM0ODUgMi45ODM2NkMyOC43ODUxIDIuOTUxNzcgMjkuMTg1OCAzLjE2MTA3IDI5Ljg2NjQgMy43ODA3MkMzMS40NTY2IDUuMjI1NzQgMzMuNjcwMyA4LjE5NzI0IDM1LjA0NyAxMC43MzQzTDM1LjU3OTYgMTEuNzE5MUwzNi4zMzA5IDEyLjA5MjdDMzcuMDU2MiAxMi40NTkzIDM4LjI0NTkgMTMuMjExMSAzOC43NDI4IDEzLjYxNEMzOC45NjczIDEzLjc5OTcgMzguOTk5MiAxMy44MDMyIDM5LjIzMjYgMTMuNzEyNEM0MC4yODcyIDEzLjMwMTcgNDEuNzk4MiAxMy44NDYgNDMuMTMwNyAxNS4xMjQ0QzQ0LjMzMDIgMTYuMjc0IDQ1LjQ3OSAxOC4yMzg0IDQ1LjkxOTEgMTkuODc3OEM0NS45ODMzIDIwLjE0MTcgNDYuMDY4MyAyMC43MDkgNDYuMDk5NCAyMS4xMzE0QzQ2LjE5OTcgMjIuNjE0NCA0NS43MjQzIDIzLjc5ODYgNDQuODA4NSAyNC4zMzQ5QzQ0LjYyMTMgMjQuNDQzIDQ0LjYwODUgMjQuNDcyNSA0NC42MTM3IDI0LjkzOUM0NC42NTU5IDI3LjE2MDQgNDQuMDU3MSAyOS4zNzc3IDQyLjg1NDMgMzEuNTRDNDEuNDk2NSAzMy45Njc4IDM5LjA3OTQgMzYuNDc5OCAzNS44MDczIDM4Ljg0NkMzNC4wNTAyIDQwLjEyNDcgMjkuODkxOCA0Mi41NDY5IDI4LjAxMjIgNDMuMzk3M0MyMy41MDk2IDQ1LjQyNDQgMTkuODk5OSA0Ni4yMDIyIDE2Ljc2NDUgNDUuODE4MUMxNC44OTQzIDQ1LjU5MTUgMTIuNzc3MSA0NC44NjExIDExLjUyNDYgNDQuMDEzN0MxMS4xOTUxIDQzLjc4NiAxMS4xNDI4IDQzLjc3MTkgMTAuODkwOSA0My44NDM5QzkuNTUwMTcgNDQuMjI4OSA3Ljc5NDQyIDQzLjQzNzQgNi4zMDI3MiA0MS43ODE3QzUuNzA3NzEgNDEuMTE5NyA0Ljc0NzA5IDM5LjQ5MzkgNC40MzU3NSAzOC42MjQxQzMuNzE1NjkgMzYuNTg4NyAzLjg1ODU5IDM0Ljc1MiA0LjgxNzgzIDMzLjY1NTFDNS4wNjU3IDMzLjM3MjUgNS4wNzM4NyAzMy4zNjA3IDUuMDE5NzIgMzIuODg1NkM0LjkzMDMzIDMyLjEwNzkgNC44ODk4MiAzMC45NTY2IDQuOTMwNjYgMzAuMjEzOEw0Ljk2MzQzIDI5LjUyMDVMMy45MjA5MSAyNy42Nzc3QzIuMzA3OCAyNC44MDc0IDEuMjgzMjYgMjIuMzk2OCAwLjg4Nzk4MiAyMC41NTU0QzAuNjc5NDAyIDE5LjU0NiAwLjY5Mjc4MSAxOS4wOTgxIDAuOTQ5MDYxIDE4Ljc2NjdDMS4xMDUyOSAxOC41NjY2IDEuNjE2MjIgMTguMzU5NCAyLjIzMjUyIDE4LjI0NTVDMy43ODUxOCAxNy45NzI5IDcuMTcyMDMgMTguMjE5OCAxMC45Mzk0IDE4Ljg4NUwxMS4zMzAzIDE4Ljk1MjVMMTIuMTkwMyAxOC4xOTIxQzEzLjYxNzkgMTYuOTI3NSAxNC41NjY1IDE2LjIxNzYgMTYuMzE1IDE1LjEyNzRDMTguMTM3MyAxMy45ODcyIDIwLjE5NDMgMTMuMDQ5OCAyMi41MTAzIDEyLjMwNzFMMjMuMjUzMyAxMi4wNjg3TDIzLjY2MTUgMTAuOTk2NEMyNS4xMjM5IDcuMTM1ODcgMjYuNjIxOCA0LjI4OTY5IDI3LjY4OTcgMy4zNDI2Wk0xNS40MzkzIDIzLjEyNjFDMTMuNzg2NCAyNC4wODA0IDEyLjk2MDIgMjQuNTU4MiAxMi4zNTI5IDI1LjA5M0M5Ljg5MzY0IDI3LjI1ODUgOC45NzM4IDMwLjY4ODggMTAuMDIwOCAzMy43OTM4QzEwLjI3OTQgMzQuNTYwNiAxMC43NTY4IDM1LjM4NyAxMS43MTExIDM3LjAzOThDMTIuNjY1MyAzOC42OTI2IDEzLjE0MjQgMzkuNTE5NCAxMy42NzcxIDQwLjEyNjdDMTUuODQyNiA0Mi41ODU5IDE5LjI3MzIgNDMuNTA0NSAyMi4zNzgzIDQyLjQ1NzRDMjMuMTQ1IDQyLjE5ODkgMjMuOTcyIDQxLjcyMjMgMjUuNjI0OCA0MC43NjhMMzUuMTMzMyAzNS4yNzgzQzM2Ljc4NjIgMzQuMzI0IDM3LjYxMjQgMzMuODQ2MiAzOC4yMTk2IDMzLjMxMTRDNDAuNjc4OSAzMS4xNDU5IDQxLjU5ODggMjcuNzE1NiA0MC41NTE4IDI0LjYxMDVDNDAuMjkzMiAyMy44NDM4IDM5LjgxNTcgMjMuMDE3NCAzOC44NjE1IDIxLjM2NDZDMzcuOTA3MiAxOS43MTE3IDM3LjQzMDIgMTguODg1IDM2Ljg5NTUgMTguMjc3N0MzNC43Mjk5IDE1LjgxODUgMzEuMjk5MyAxNC44OTk5IDI4LjE5NDMgMTUuOTQ3QzI3LjQyNzUgMTYuMjA1NSAyNi42MDA2IDE2LjY4MjEgMjQuOTQ3OCAxNy42MzY0TDE1LjQzOTMgMjMuMTI2MVoiIGZpbGw9InVybCgjcGFpbnQxX2xpbmVhcl81MTEwXzE0NzcxKSIvPgo8cmVjdCB4PSIxNS44ODE2IiB5PSIzMC4wMjczIiB3aWR0aD0iNC4wMDkwNCIgaGVpZ2h0PSI4LjMyNjQ2IiByeD0iMi4wMDQ1MiIgdHJhbnNmb3JtPSJyb3RhdGUoLTMwIDE1Ljg4MTYgMzAuMDI3MykiIGZpbGw9IndoaXRlIi8+CjxyZWN0IHg9IjI2LjY5NzgiIHk9IjIzLjc4MTIiIHdpZHRoPSI0LjAwOTA0IiBoZWlnaHQ9IjguMzI2NDYiIHJ4PSIyLjAwNDUyIiB0cmFuc2Zvcm09InJvdGF0ZSgtMzAgMjYuNjk3OCAyMy43ODEyKSIgZmlsbD0id2hpdGUiLz4KPC9nPgo8ZGVmcz4KPGZpbHRlciBpZD0iZmlsdGVyMF9mXzUxMTBfMTQ3NzEiIHg9Ii0xNC45MTYzIiB5PSI3LjQ1NTk5IiB3aWR0aD0iNTUuMDQ2OCIgaGVpZ2h0PSI1NS4wNDciIGZpbHRlclVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzPSJzUkdCIj4KPGZlRmxvb2QgZmxvb2Qtb3BhY2l0eT0iMCIgcmVzdWx0PSJCYWNrZ3JvdW5kSW1hZ2VGaXgiLz4KPGZlQmxlbmQgbW9kZT0ibm9ybWFsIiBpbj0iU291cmNlR3JhcGhpYyIgaW4yPSJCYWNrZ3JvdW5kSW1hZ2VGaXgiIHJlc3VsdD0ic2hhcGUiLz4KPGZlR2F1c3NpYW5CbHVyIHN0ZERldmlhdGlvbj0iNi43MjEyMyIgcmVzdWx0PSJlZmZlY3QxX2ZvcmVncm91bmRCbHVyXzUxMTBfMTQ3NzEiLz4KPC9maWx0ZXI+CjxmaWx0ZXIgaWQ9ImZpbHRlcjFfZl81MTEwXzE0NzcxIiB4PSI5LjQ2OTU5IiB5PSIxOS43NDc3IiB3aWR0aD0iNDcuNzQxNyIgaGVpZ2h0PSI0Ny43NDEiIGZpbHRlclVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzPSJzUkdCIj4KPGZlRmxvb2QgZmxvb2Qtb3BhY2l0eT0iMCIgcmVzdWx0PSJCYWNrZ3JvdW5kSW1hZ2VGaXgiLz4KPGZlQmxlbmQgbW9kZT0ibm9ybWFsIiBpbj0iU291cmNlR3JhcGhpYyIgaW4yPSJCYWNrZ3JvdW5kSW1hZ2VGaXgiIHJlc3VsdD0ic2hhcGUiLz4KPGZlR2F1c3NpYW5CbHVyIHN0ZERldmlhdGlvbj0iNS41MDAxOSIgcmVzdWx0PSJlZmZlY3QxX2ZvcmVncm91bmRCbHVyXzUxMTBfMTQ3NzEiLz4KPC9maWx0ZXI+CjxsaW5lYXJHcmFkaWVudCBpZD0icGFpbnQwX2xpbmVhcl81MTEwXzE0NzcxIiB4MT0iMjAiIHkxPSIwIiB4Mj0iMjAiIHkyPSI0MCIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPgo8c3RvcCBzdG9wLWNvbG9yPSIjNkM0REZGIi8+CjxzdG9wIG9mZnNldD0iMSIgc3RvcC1jb2xvcj0iIzU4M0VEMyIvPgo8L2xpbmVhckdyYWRpZW50Pgo8bGluZWFyR3JhZGllbnQgaWQ9InBhaW50MV9saW5lYXJfNTExMF8xNDc3MSIgeDE9IjE0LjYzOSIgeTE9IjEwLjc5MTciIHgyPSIzMi4xNzEyIiB5Mj0iNDEuMTU4NSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPgo8c3RvcCBzdG9wLWNvbG9yPSJ3aGl0ZSIgc3RvcC1vcGFjaXR5PSIwLjgiLz4KPHN0b3Agb2Zmc2V0PSIwLjQzNzY4OSIgc3RvcC1jb2xvcj0id2hpdGUiLz4KPC9saW5lYXJHcmFkaWVudD4KPGNsaXBQYXRoIGlkPSJjbGlwMF81MTEwXzE0NzcxIj4KPHJlY3Qgd2lkdGg9IjQwIiBoZWlnaHQ9IjQwIiByeD0iMjAiIGZpbGw9IndoaXRlIi8+CjwvY2xpcFBhdGg+CjwvZGVmcz4KPC9zdmc+Cg=="), + factory: image("image/x-icon", "AAABAAMAEBAAAAAAIACnAQAANgAAACAgAAAAACAA7gMAAN0BAAAwMAAAAAAgAEEGAADLBQAAiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAABbklEQVR4nNVTsYrCUBCcvJxoIUrQwjr+goKljSip/ABjKUKKlIKlhYhgYaNoLETQ0i5YCnYh+QDxAyxMF6OChXvkcScWCoJccQtbPNidNzuzKzDGCB8E+6T57wAqlQpGoxFisRgajQYsy0I2m30PQBAE5PN5yLIMXdcxmUzAGEMoFHoK8PX4UBQF4XAYs9kMnuehVCohHo/Dtm1IkgTDMLBarbBcLp8z6Ha7qNfrqFar8H0fyWQSqqqi1WrBdV2k02kUCoXXDObzOYbDIURR5I1B8el0QjQaxX6/x2azQa/Xew0wHo/RbrdxvV5xuVxwPB5xPp85G9M0+ViapqHT6TyoyBgFKYoiOY5DhmFQIpGgXC5HtVqN+v0+pVIpGgwGtNvtyLZtXn9P/AQRccuCX8rlMprNJhaLxV0Lx3FQLBa5xS9HWK/XPAMbI5EIMpkMdyXQZbvdYjqdvrdIt9sNh8OBi/e7SIE+z0L4/8f0Da2inUv6aSJrAAAAAElFTkSuQmCCiVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAADtUlEQVR4nO1WWyh0URTejjEjJDPNg1uYvAgZT6Mk9yJjIsmIt+Ft8KB4mpQJSS4PJJoklzIhiSFCxgu555okDMklIXItLe3Vf07/eDpnUvMyp3bn7L323uvb3/rW2seNYRggTnwYZzp3AXAxIJgBnU5HrFYrCQgIsBtXqVTEaDQSi8VCcnNzBaqQYYBPUygU8Pz8DF9fX9DT04NjmZmZsLS0BC8vL5ytvb2d135sI3wndnd3w97eHqyvr8P7+ztYrVaYnp4GtVoNEokEKisrEYBGo/l7AN7e3nBzcwORkZEQGhqKJ25tbbWbMzIyggBqampAqVTyB0F4PGlpaWR5eZkcHR2Ry8tL0t/fTxISEji7TCYjGRkZpKmpiTw+PhKTyUT29/eJwWAgUqnUMQ00NzfjqUpLS2FoaAipZm1RUVHw+fkJYWFh2K+uroaTkxPw8vLi5qSmpoLNZoPb21vIz88XHgKbzYaUsq2jowP8/f05+/z8PJSVlWH8z87OoLi42G59eHg47Ozs4FoqVMEABgcHUXRU6fX19XB8fAwPDw9gNBpBJpOBVquF2dlZfK+uroJIJMJ1KpUKs+T19RXe3t7AZDJBUFCQcADZ2dl4MrZPHWRlZcHk5CRcX18jEOrk9PQUioqKkI3NzU10urCwAG1tbTA1NeV4Fri7u+OGNJa/bdHR0cgIG567uzsYGBiAwsJCkMvl3DxKfUpKiuNpqFarYWJiAr8DAwNBp9PB6OgoCuvw8JADsLW1hUITi8V26/Py8mBxcdFxAFKpFCne2NhA1R8cHEBVVRWC6erqgrGxMRQrDRctUOfn52AwGLiY+/j4YNGKj48XDkCv12PxoSekFY9SScPChuD+/h7p3t3dhfT0dNRIQUEBgqRO5+bmoKWlBT4+PqCxsVEYAIlEAk9PT+icium3fXx8HNOSfjc0NMDw8DBno2GgY1SMbIgsFotwBhITE5FWetLy8nLw8/PD8eTkZDxVREQE9im9NBv+T7XOzk6Mf0xMDFRUVEBcXJxjGhD9S72+vj6MdW9vL2xvb8PMzIzdnIuLC6wVtO/r6wtXV1ccYIfTkPnVPDw8uBuPZgM7HhwcjEzRIhUSEgK1tbVYwvnuK+L73/D9/U0UCgV+i8ViotFoiFarJUqlkpjNZrx4VlZWiFwuJzk5OX//Q8IwDKytrXHComovKSkBT09PtJnNZhyn5VnInkTI5KSkJBRkbGwsl5JsoxdVXV0d1gghe7ohCic+jDOduwC4GKAU/ADJJ9DJ7wBVHQAAAABJRU5ErkJggolQTkcNChoKAAAADUlIRFIAAAAwAAAAMAgGAAAAVwL5hwAABghJREFUeJzVWGlIVU8Un65pakhZGi6tTwsXgiANDYqoVCLDlLRPIqX4waUPFSmRYpLYohHRHm1fog0NCtQUUcNQoSDDsrDVNLcW08reh078Dt3hXt8r/P/vk8c9MPDuzJmZ85s553fOvCmKopAwsSjC5KIIk4siTC6KMLkowuSiCJOLIkwuijC5KI5YJCUlRdTU1IiYmJi/6ri6uorY2FhRXFwsTp48KeLi4hyxtRDIxEba2rVraWxsjKxWK338+JH8/Px043PmzKHCwkJ6//4966itp6fH0L5qMwRg6tSp9OTJE51hx44d4zFfX18qKyujz58/c39/fz99+PBB6mGe4mwAmzdvZmNgZHd3N/8eHR2lw4cPs8FdXV18+iEhIaw/f/58CaC0tNT5ACorK+n79++0cuVKNm5wcJCN6+3tpbS0NJo2bZpOf/369RIA5ijOBADfxmkfOXJE9uG0Ydzjx4/tzjl9+rQE0NjYSHl5eRQREeEcAOnp6QwgMDBQ9s2aNYsGBgbYwNDQUJ2+u7u7jIH8/Hzav3+/jJ/nz59TcXExhYWFTQ4ABKvFYiEPDw/Zd+PGDbp69aqNLvwfRu3du1fXn5qayv3Nzc3k4uKiY7Gqqioe+/nzJ92+fdsGvGEAMFalyWvXrlFGRgYNDQ1RQkKCje6SJUvYkNbWVl1/W1sbrwGD7e2xbds2Scdfv36luLg4xwF49eqVjiq1TDJjxgwb/erqagYxb948/l6zZg3r46T/tofFYqFPnz7Jte/du+c4ALW1tbwoGKe9vZ2+ffsmNwLj7Nmzh7y8vKR+UlISj2VmZvJ3RUUF/fjxg5YtW2aztp+fH5WUlOiMx+8NGzY4DsDu3bt54evXr/P37NmzmSbv3r0rrx2ZNicnh4PVzc2N3r59yzQbHBzMOmfPntWtGRUVxX3Dw8PScPwGq43P5oYBgGlGRkbo/v37NmNBQUF06NAh6uvrYyM6Oztp69atdPToUTaorq6OYycgIIB8fHxox44d9OjRI2n02NgYPXjwgHVAqxM1/D8BQDt16hSDgBH2xqdPn86BiOAdHysvXrxgxsJ8fH/58oXZJj09nfz9/Xk+3BC3Zi+mHAIAQQbfz83N/ace3OvOnTs2IHAzqI1iY2PJ09PTZp6XlxfniQMHDkwOALTjx4+zIdoSAZy+YsUKKigooKamJg5We4yFLIxy41/rl5WVsSuhEJwUAHAfnNLOnTv5JE+cOEFv3ryRRuI3Murq1at1xoM+we1gsZs3b9K6det0yUz50yIjI1m/qKhocgDAjbQBiAa3unXrFm3cuJFcXV1ZDwEMY7ds2cI68PUFCxbQhQsXJGuBjrOysrj8UNfHzQIoCEGb9Q0DAIOcOXPGhv/37dsng1BtKJ2hp5YZz549o5aWFjm+dOlSzgtIdFarlQMbAb19+3Y+BABH/6ZNmxwDAKcCI1TDsSGKMW3i0jYYA73o6Gh5G/hGnGj1li9fLnXttYMHDzoOgPY5iNP7m67q+whmtS8mJob7zp07Z3dOSUkJB772drUvO4e4EE5LvQVcPXKCt7e3jV5DQwPrJCcnyz5kZpTY4H6tv2vLlPLycl4vJSWFLl68yBl8oqX1hIMY3J2dnU0dHR1sJF5fSPvh4eE8Hh8fz/0vX77kUkI799KlSzyGLKztX7RoEQc1bmmidvxvAOPpDnU/coLKKOqb2B4FIiAx9vr1ax27lJeX80HYS2yTCmB8LXTlyhXpu/auHolJHcctom/x4sXsVufPnze0v2EAaJcvX5blwviyYteuXVzjqAAQD3A3UKvVauW3gpG9pzAKA+Lm5ibevXsnZs6cKfr6+kROTo4IDAwUq1atEvHx8WJ0dFSUlpaKhw8fivr6ehyYnPv06VMREREhfv365bx/5sDv9ngc1It3sZat1GBWW2JiouHbNwwAJYL67xsYBVSKlxjK6/G6CxculO8GgFEc4L6GXQji6+sr5s6dK7q6usTIyMg/dS0WiwgNDRVVVVXGXOePOASAM0URJhdFmFwUYXJRhMlFESYXRZhcFGFyUZxtgFH5DTKA7j8bLK6dAAAAAElFTkSuQmCC"), + qoder: image("image/png", "iVBORw0KGgoAAAANSUhEUgAAALQAAAC0CAMAAAAKE/YAAAAAyVBMVEURERMq21z///8hj0Hh4eGmpqYgICLw8PAkqEqIiInDw8QnwlMvLzFNTU4UKhx5eXopzlgedjg+Pj8THhgbXS9qamyXl5jk+uoXRCWv8cIWNyEfgzx66JlbW121tbXy/fUZUCoUKxwkqUpF33DX+OAcaTMYRCZra2wcajPS0tOlpaZS4ns33WZcXF0mtU9f5IRt5o/J9taU7a0aXS4ySDpEcFIltU5Q1XYnwVMfgjy89Myi77giLSYukUt7hn+T4KlF33F8koPI6dKlvz6KAAAD3ElEQVR42u3c13biMBCAYUkIjAsYMB1CSUjfTdvey/s/1BI2ARIEyJLwjM+Z/zIXPl8UWTLGDmMURVEURVEURVEURVEURVGU+xpH7VFwKWUwaseVUh7AceCJ9bwgxu0+KkqhyPPRsiO1GDO7EoidIWRHe8gI2VFRaOW18JhbUugm3+ZrmJ8KKhjWZSlSBs+OhUHAbF+YVYzgzG1hXBtq/bsSFgEt21ZmIHZbWJc52xcukplukufCUTK79S/yhLOyWrZLUrgsG3ZbOC5oHP6KX7jv0Juk48nx3GHXP7eTYzy77z02Gx9y2W64A8++3V3zZb+Hv34eih04GuGvwxO+0acPiM/C3i3fUjjBOdAd1RivKlfxDXRnyPdUu0A20NIv8/3V3a7R9nuIDpoX8FyRLq5EtdBOx9rq6u5ysVXroR2qrU5D//8xNNG8i2EHj1k6dJiAzw5veRtPF82/OPrAYm5eXTBro7mbTSZ2YE6BdrPuFU3R6x9M9NFuhtr06v+cmaEvALdDnxmiQ7jL/ytmiuZ9B98Tmu3dJXP0KdDi4b2+O5AGXQa6WoqZBboGs4kHzAbNpyDLdGSHPoNA+8wO3QRAe4r7GDdp0HUAdKw4SogcLZktupA9WjXQrIYbrZrRLOG40b7qIH3kaOUt0CZudKA8yAA3Wv0d4TFqtKe+QV5DjR4pj9HlqNHKRZrVcaMjB1M6a7RyC0+5tWSOHrmYHVmj1VP6Bjf6yMHakTk6cnAaZo5WbS1VjhytOkABAN22XPHSD7QDtG+JPoZAx3boLodAH9mhQxB0xQpd5yDokg26z2HQ7NIcnXyEQhfN0QMOhW4Zo99xMHRkiu7X4NBsZIauhhwQ3TJCm5vdfGkrDdAWZjfoVnq0jdnR1+MyLdrK7AjdSom2M7t6AKuYCn1R4xjQkUyBHnCOAq35PoC0nxpOn89reHroOud40OxcQy2bIUeF1nkLscM5MrTGm8AI0fMPuV4O0azke/lD72GPkaJ3v8qMFr3rjLzGi97+XxDuMKO3sR9wo9Xse+xo1T9EGONHK3ab2xygN5btXh7Qr9mdfKAf2WvqYU7QLzbJTm7Q84vtwOFQZ4VeLdudPKGX7IdcoefsxW5zYouus2x73CQ7tupmxujFsj17o/1QuvKHCWMA7J6mulDtluFnxzP7r446XDyRvsEOEwZT6c/ezzDhcuZW6+uzJOwzsL7/2P1ayIuTLVmxwyqD7P3W9wDCwoYsOS3XNn4XkLoDxepQPt32959OGYqS7uDz2lpWHkwSlouS/qQ5b3I2ZRRFURRFURRFURRFURRFURT11D+KvFuepijo0gAAAABJRU5ErkJggg=="), +}; diff --git a/webviews/src/feed/styles.css b/webviews/src/feed/styles.css new file mode 100644 index 000000000000..47008946ac29 --- /dev/null +++ b/webviews/src/feed/styles.css @@ -0,0 +1,321 @@ +:root { + color-scheme: light dark; + font: 12px/1.4 -apple-system, BlinkMacSystemFont, "SF Pro Text", sans-serif; + --feed-background: transparent; + --feed-foreground: CanvasText; + --feed-border: color-mix(in srgb, var(--feed-foreground) 14%, transparent); + --feed-border-strong: color-mix(in srgb, var(--feed-foreground) 38%, transparent); + --feed-fill: color-mix(in srgb, var(--feed-foreground) 5%, transparent); + --feed-fill-hover: color-mix(in srgb, var(--feed-foreground) 9%, transparent); + --feed-muted: color-mix(in srgb, var(--feed-foreground) 56%, transparent); +} + +* { box-sizing: border-box; } +html { + scrollbar-gutter: stable; +} + +html, body, #root { margin: 0; min-height: 100%; width: 100%; } +body { background: transparent; color: var(--feed-foreground); } +button, input { font: inherit; } + +.feed-shell { + background: var(--feed-background); + color: var(--feed-foreground); + min-height: 100vh; + padding: 14px clamp(12px, 3vw, 28px) 28px; +} + +.feed-loading { opacity: .5; } + +.feed-header { + align-items: center; + border-bottom: 1px solid var(--feed-border); + display: flex; + justify-content: space-between; + margin: 0 auto 8px; + max-width: 760px; + padding-bottom: 10px; +} + +.feed-header h1, +.feed-card-heading h2, +.feed-question-prompt { + font-size: inherit; + font-weight: 600; + margin: 0; +} + +.feed-filter { + border: 1px solid var(--feed-border); + display: flex; + gap: 1px; + padding: 2px; +} + +.feed-filter button { + background: transparent; + border: 0; + color: var(--feed-muted); + cursor: pointer; + padding: 3px 7px; +} + +.feed-filter button:hover { background: var(--feed-fill); } +.feed-filter button[aria-selected="true"] { background: var(--feed-foreground); color: var(--feed-background); } + +.feed-list { + display: grid; + gap: 6px; + margin: 0 auto; + max-width: 760px; +} + +.feed-card { + background: color-mix(in srgb, var(--feed-background) 96%, var(--feed-foreground) 4%); + border: 1px solid var(--feed-border); + padding: 10px; +} + +.feed-card:focus-visible { + border-color: var(--feed-foreground); + outline: 1px solid var(--feed-foreground); + outline-offset: 2px; +} + +.feed-card-pending { border-color: var(--feed-border-strong); } + +.feed-card-heading { + align-items: center; + display: flex; + gap: 10px; + justify-content: space-between; +} + +.feed-card-title { + align-items: center; + display: flex; + gap: 8px; + min-width: 0; +} + +.feed-card-heading h2 { + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} + +.feed-source { + align-items: center; + color: var(--feed-muted); + display: inline-flex; + flex: none; + gap: 5px; +} + +.feed-source-logo { + display: inline-grid; + height: 15px; + line-height: 15px; + object-fit: contain; + place-items: center; + width: 15px; +} + +.feed-source-logo-mask { + background: currentColor; + mask-image: var(--feed-source-icon); + mask-position: center; + mask-repeat: no-repeat; + mask-size: contain; +} + +.feed-source-logo-mask[data-fallback] { + background: transparent; + border: 1px solid currentColor; + mask-image: none; +} + +.feed-card-heading time, +.feed-cwd { + color: var(--feed-muted); + flex: none; +} + +.feed-cwd { + font-family: ui-monospace, "SFMono-Regular", Menlo, monospace; + margin-top: 6px; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} + +.feed-body { + background: var(--feed-fill); + border: 1px solid var(--feed-border); + font: inherit; + font-family: ui-monospace, "SFMono-Regular", Menlo, monospace; + margin: 8px 0 0; + max-height: 240px; + overflow: auto; + padding: 7px 8px; + white-space: pre-wrap; + word-break: break-word; +} + +.feed-actions { + display: flex; + flex-wrap: wrap; + gap: 5px; + margin-top: 8px; +} + +.feed-actions button, +.feed-question-actions > button, +.feed-options button, +.feed-load-examples, +.feed-load-more { + background: transparent; + border: 1px solid var(--feed-border-strong); + color: var(--feed-foreground); + cursor: pointer; + padding: 4px 7px; +} + +.feed-actions button:hover, +.feed-question-actions > button:hover, +.feed-options button:hover, +.feed-load-examples:hover, +.feed-load-more:hover { background: var(--feed-fill-hover); } + +.feed-actions .primary, +.feed-question-actions .primary { + background: var(--feed-foreground); + border-color: var(--feed-foreground); + color: var(--feed-background); +} + +.feed-actions .primary:hover, +.feed-question-actions .primary:hover { opacity: .82; } + +.feed-actions .danger { border-style: dashed; } + +.feed-question-actions { + display: grid; + gap: 7px; + margin-top: 8px; +} + +.feed-question { display: grid; gap: 6px; } + +.feed-question input { + background: var(--feed-fill); + border: 1px solid var(--feed-border-strong); + color: var(--feed-foreground); + padding: 5px 7px; + width: 100%; +} + +.feed-options { display: grid; gap: 4px; } +.feed-options button { display: grid; gap: 1px; text-align: left; } +.feed-options button[aria-pressed="true"] { background: var(--feed-foreground); color: var(--feed-background); } +.feed-options span { color: var(--feed-muted); } +.feed-options button[aria-pressed="true"] span { color: color-mix(in srgb, var(--feed-background) 70%, transparent); } + +.feed-empty { + color: var(--feed-muted); + display: grid; + gap: 6px; + padding: 36px 0; +} + +.feed-empty > h2 { + color: var(--feed-foreground); + font-size: 14px; + margin: 0; + text-align: center; +} + +.feed-empty > p { + margin: 0 auto; + max-width: 520px; + text-align: center; +} + +.feed-load-examples { + justify-self: center; + margin-top: 6px; +} + +.feed-integrations { + border: 1px solid var(--feed-border); + margin-top: 16px; + padding: 12px; +} + +.feed-integrations h3 { + color: var(--feed-foreground); + font-size: inherit; + margin: 0 0 8px; +} + +.feed-integration-grid { + display: grid; + gap: 1px 16px; + grid-template-columns: repeat(2, minmax(0, 1fr)); +} + +.feed-integration { + align-items: center; + border-top: 1px solid var(--feed-border); + display: flex; + gap: 8px; + justify-content: space-between; + min-width: 0; + padding: 7px 0; +} + +.feed-integration-status { + flex: none; + font-size: 11px; +} + +.feed-integration[data-status="ready"] .feed-integration-status { + color: var(--feed-foreground); +} + +.feed-integration[data-status="disabled"] .feed-integration-status, +.feed-integration[data-status="needsSetup"] .feed-integration-status { + color: color-mix(in srgb, #ff9f0a 80%, var(--feed-foreground)); +} + +.feed-integration-hint { + border-top: 1px solid var(--feed-border); + margin: 1px 0 0; + padding-top: 9px; +} + +.feed-empty > .feed-keyboard-help { + font-family: ui-monospace, "SFMono-Regular", Menlo, monospace; + font-size: 11px; + margin-top: 10px; +} + +.feed-error { + border: 1px solid var(--feed-border-strong); + margin: 0 auto 6px; + max-width: 760px; + padding: 6px 8px; +} + +.feed-load-more { justify-self: center; margin-top: 2px; } +button:disabled { cursor: default; opacity: .4; } +button:focus-visible, +.feed-question input:focus-visible { outline: 1px solid var(--feed-foreground); outline-offset: 2px; } + +@media (max-width: 540px) { + .feed-header { align-items: stretch; flex-direction: column; gap: 8px; } + .feed-filter { align-self: flex-start; } + .feed-card-title { align-items: flex-start; flex-direction: column; gap: 3px; } + .feed-integration-grid { grid-template-columns: 1fr; } +} diff --git a/webviews/src/feed/types.ts b/webviews/src/feed/types.ts new file mode 100644 index 000000000000..3d41c50d7ac9 --- /dev/null +++ b/webviews/src/feed/types.ts @@ -0,0 +1,99 @@ +export type FeedQuestionOption = { + description?: string; + id: string; + label: string; +}; + +export type FeedQuestion = { + header?: string; + id: string; + multi_select: boolean; + options: FeedQuestionOption[]; + prompt: string; +}; + +export type FeedItem = { + allowed_permission_modes?: Array<"all" | "always" | "bypass" | "deny" | "once">; + created_at: string; + cwd?: string; + default_mode?: string; + id: string; + kind: string; + plan?: string; + question_options?: FeedQuestionOption[]; + question_prompt?: string; + questions?: FeedQuestion[]; + request_id?: string; + source: string; + status: "expired" | "pending" | "resolved" | "telemetry"; + text?: string; + title?: string; + tool_input?: string; + tool_name?: string; + tool_result?: string; + workstream_id: string; +}; + +export type FeedCopy = { + actionable: string; + activity: string; + allowAlways: string; + allowAll: string; + allowBypass: string; + allowOnce: string; + deny: string; + demoPermissionBody: string; + demoPermissionTitle: string; + demoPlanBody: string; + demoPlanTitle: string; + demoQuestionOptionFocused: string; + demoQuestionOptionFull: string; + demoQuestionPrompt: string; + demoQuestionTitle: string; + emptyActionable: string; + emptyActionableDescription: string; + emptyActivity: string; + emptyActivityDescription: string; + feed: string; + integrationChecking: string; + integrationDisabled: string; + integrationHint: string; + integrationNeedsSetup: string; + integrationReady: string; + integrationsTitle: string; + keyboardHelp: string; + loadExamples: string; + loadOlder: string; + loadingOlder: string; + planAuto: string; + planManual: string; + planUltraplan: string; + questionSubmit: string; + questionPlaceholder: string; + requestFailed: string; +}; + +export type FeedIntegration = { + source: string; + status: "checking" | "disabled" | "needsSetup" | "ready"; +}; + +export type FeedSnapshot = { + copy: FeedCopy; + hasMore: boolean; + isLoadingOlder: boolean; + integrations: FeedIntegration[]; + items: FeedItem[]; + sourceIcons: Record; + sourceLabels: Record; + theme: { + background: string; + foreground: string; + isLight: boolean; + }; +}; + +export type FeedNativeEvent = { + snapshot: FeedSnapshot; + type: "feed.snapshot"; +}; diff --git a/webviews/src/main.tsx b/webviews/src/main.tsx index 29cfc5836967..445de28c4991 100644 --- a/webviews/src/main.tsx +++ b/webviews/src/main.tsx @@ -1,4 +1,4 @@ -type WebviewKind = "agent-session" | "diff"; +type WebviewKind = "agent-session" | "diff" | "feed"; function resolveWebviewKind(): WebviewKind { if ( @@ -8,6 +8,13 @@ function resolveWebviewKind(): WebviewKind { ) { return "agent-session"; } + if ( + document.documentElement.dataset.cmuxWebviewKind === "feed" || + document.body.dataset.cmuxWebviewKind === "feed" || + document.getElementById("cmux-feed-config") + ) { + return "feed"; + } return "diff"; } @@ -18,12 +25,16 @@ if (!rootElement) { // Load only the active surface so each one ships as its own chunk: the diff // viewer pulls in `@pierre/diffs`, the agent session pulls in its editor UI, -// and neither pays for the other. Shared vendor code (React, the router) is -// hoisted by Rollup into chunks both surfaces reuse. +// without paying for the others. Shared vendor code (React, the router) is +// hoisted by Rollup into chunks all surfaces reuse. if (resolveWebviewKind() === "agent-session") { void import("./surfaces/agentSessionSurface").then((surface) => { surface.mountAgentSessionSurface(rootElement); }); +} else if (resolveWebviewKind() === "feed") { + void import("./surfaces/feedSurface").then((surface) => { + surface.mountFeedSurface(rootElement); + }); } else { void import("./surfaces/diffSurface").then((surface) => { surface.mountDiffSurface(rootElement); diff --git a/webviews/src/router.tsx b/webviews/src/router.tsx index 18d915f2ef19..0759f17cb6f1 100644 --- a/webviews/src/router.tsx +++ b/webviews/src/router.tsx @@ -34,11 +34,17 @@ export function createWebviewsRouter(WebviewComponent: WebviewRouteComponent) { path: "/agent-session", component: WebviewComponent, }); + const feedRoute = createRoute({ + getParentRoute: () => rootRoute, + path: "/feed", + component: WebviewComponent, + }); const routeTree = rootRoute.addChildren([ indexRoute, diffRoute, generatedDiffRoute, agentSessionRoute, + feedRoute, ]); return createRouter({ history: createHashHistory(), diff --git a/webviews/src/surfaces/feedSurface.tsx b/webviews/src/surfaces/feedSurface.tsx new file mode 100644 index 000000000000..992407dfac68 --- /dev/null +++ b/webviews/src/surfaces/feedSurface.tsx @@ -0,0 +1,11 @@ +import { RouterProvider } from "@tanstack/react-router"; +import { createRoot } from "react-dom/client"; +import { FeedApp } from "../feed/App"; +import { createWebviewsRouter } from "../router"; + +export function mountFeedSurface(rootElement: HTMLElement): void { + document.documentElement.dataset.cmuxWebviewKind = "feed"; + document.body.dataset.cmuxWebviewKind = "feed"; + const router = createWebviewsRouter(() => ); + createRoot(rootElement).render(); +} diff --git a/webviews/test/feed.test.tsx b/webviews/test/feed.test.tsx new file mode 100644 index 000000000000..aadd6cfefce7 --- /dev/null +++ b/webviews/test/feed.test.tsx @@ -0,0 +1,187 @@ +import { afterEach, expect, test } from "bun:test"; +import { JSDOM } from "jsdom"; +import { flushSync } from "react-dom"; +import { createRoot, type Root } from "react-dom/client"; +import { FeedApp, feedActivityPageSize } from "../src/feed/App"; +import { receiveFeedNativeEvent } from "../src/feed/bridge"; +import { feedSourceIcons } from "../src/feed/sourceIcons"; + +let root: Root | null = null; +let dom: JSDOM | null = null; +const originalGlobals = new Map(); +for (const key of ["window", "document", "navigator", "Element", "Node", "HTMLElement"]) { + originalGlobals.set(key, (globalThis as any)[key]); +} + +afterEach(async () => { + if (root) flushSync(() => root?.unmount()); + root = null; + await new Promise((resolve) => setTimeout(resolve, 0)); + dom?.window.close(); + dom = null; + for (const [key, value] of originalGlobals) { + if (value === undefined) delete (globalThis as any)[key]; + else (globalThis as any)[key] = value; + } +}); + +test("Feed React surface invokes the typed permission primitive", async () => { + dom = new JSDOM("
", { url: "file:///feed.html" }); + for (const key of ["window", "document", "navigator", "Element", "Node", "HTMLElement"]) { + (globalThis as any)[key] = (dom.window as any)[key] ?? dom.window; + } + const calls: unknown[] = []; + let subscribedSnapshot: any; + (window as any).webkit = { messageHandlers: { cmuxFeed: { postMessage: async (message: any) => { + calls.push(message); + if (message.method === "feed.subscribe") { + subscribedSnapshot = { + copy: { + actionable: "Actionable", activity: "All Activity", allowAll: "All tools", + allowAlways: "Always Allow", allowBypass: "Bypass", + allowOnce: "Allow Once", deny: "Deny", emptyActionable: "No pending decisions", + demoPermissionBody: "bun run db:migrate", demoPermissionTitle: "Run database migration", + demoPlanBody: "Update the bridge, add tests, then build.", demoPlanTitle: "Plan ready for review", + demoQuestionOptionFocused: "Focused tests", demoQuestionOptionFull: "Full test suite", + demoQuestionPrompt: "Which verification should run?", demoQuestionTitle: "Verification scope", + emptyActionableDescription: "Requests from agents appear here.", + emptyActivity: "No activity yet", emptyActivityDescription: "Agent activity appears here.", + feed: "Feed", integrationChecking: "Checking...", integrationDisabled: "Disabled in Settings", + integrationHint: "Claude and Codex use Settings. Other agents need hooks setup.", + integrationNeedsSetup: "Setup needed", integrationReady: "Ready", + integrationsTitle: "Agent integrations", keyboardHelp: "Use J/K to navigate.", + loadExamples: "Load examples", + loadOlder: "Load older activity", + loadingOlder: "Loading older activity...", planAuto: "Auto", planManual: "Manual", + planUltraplan: "Ultraplan", questionPlaceholder: "Type something...", + questionSubmit: "Submit All Answers", requestFailed: "Native bridge request failed.", + }, + hasMore: false, + isLoadingOlder: false, + integrations: [ + { source: "claude", status: "ready" }, + { source: "codex", status: "disabled" }, + { source: "opencode", status: "needsSetup" }, + ], + sourceIcons: { + claude: "data:image/png;base64,Y2xhdWRl", + codex: "data:image/png;base64,Y29kZXg=", + opencode: "data:image/png;base64,b3BlbmNvZGU=", + }, + sourceLabels: { claude: "Claude Code", codex: "Codex", opencode: "OpenCode" }, + theme: { background: "#272822", foreground: "#f8f8f2", isLight: false }, + items: [{ + created_at: "2026-07-13T12:00:00Z", id: "item-1", kind: "permissionRequest", + request_id: "request-1", source: "claude", status: "pending", tool_name: "Bash", + tool_input: "echo ok", workstream_id: "claude-session", + allowed_permission_modes: ["deny", "once", "always", "all"], + }, { + created_at: "2026-07-13T12:01:00Z", id: "item-2", kind: "toolUse", + source: "codex", status: "telemetry", title: "Apply patch", workstream_id: "codex-session", + }, { + created_at: "2026-07-13T12:02:00Z", id: "item-3", kind: "toolUse", + source: "opencode", status: "telemetry", title: "Run tests", workstream_id: "opencode-session", + }, ...Array.from({ length: 45 }, (_, index) => ({ + created_at: "2026-07-13T12:03:00Z", id: `history-${index}`, kind: "toolUse", + source: "codex", status: "telemetry" as const, title: `History ${index}`, workstream_id: "codex-history", + }))], + }; + return { ok: true, value: subscribedSnapshot }; + } + return { ok: true, value: { accepted: true } }; + } } } }; + + const container = document.getElementById("root")!; + root = createRoot(container); + flushSync(() => root?.render()); + await waitFor(() => container.textContent?.includes("Bash") === true); + expect(container.querySelector("main")?.getAttribute("style") ?? "").toContain("--feed-background: #272822"); + expect(container.querySelector('[data-feed-source="claude"] .feed-source-logo')).toBeTruthy(); + expect(container.querySelector('[data-feed-source="claude"]')?.textContent).toContain("Claude"); + const actionableTab = [...container.querySelectorAll("button")] + .find((button) => button.textContent === "Actionable")!; + actionableTab.focus(); + flushSync(() => actionableTab.dispatchEvent(new dom!.window.KeyboardEvent("keydown", { bubbles: true, key: "ArrowRight" }))); + expect(document.activeElement?.textContent).toBe("All Activity"); + expect(document.activeElement?.getAttribute("aria-selected")).toBe("true"); + document.activeElement?.dispatchEvent(new dom!.window.KeyboardEvent("keydown", { bubbles: true, key: "Tab" })); + expect(document.activeElement?.textContent).toBe("Deny"); + document.activeElement?.dispatchEvent(new dom!.window.KeyboardEvent("keydown", { bubbles: true, key: "Tab", shiftKey: true })); + expect(document.activeElement?.classList.contains("feed-card")).toBe(true); + const loadOlder = [...container.querySelectorAll("button")] + .find((button) => button.textContent === "Load older activity")!; + loadOlder.focus(); + loadOlder.dispatchEvent(new dom!.window.KeyboardEvent("keydown", { bubbles: true, key: "Tab" })); + expect(document.activeElement?.textContent).toBe("All Activity"); + expect(container.querySelector('[data-feed-source="codex"]')?.textContent).toContain("Codex"); + expect(container.querySelector('[data-feed-source="opencode"]')?.textContent).toContain("OpenCode"); + expect(feedActivityPageSize).toBe(40); + expect(container.querySelectorAll(".feed-card")).toHaveLength(feedActivityPageSize); + const cards = [...container.querySelectorAll(".feed-card")]; + const keyboardRoot = container.querySelector(".feed-keyboard-root")!; + keyboardRoot.focus(); + keyboardRoot.dispatchEvent(new dom!.window.KeyboardEvent("keydown", { bubbles: true, key: "j" })); + expect(document.activeElement).toBe(cards[0]); + cards[0]?.dispatchEvent(new dom!.window.KeyboardEvent("keydown", { bubbles: true, key: "Tab" })); + expect(document.activeElement?.textContent).toBe("Deny"); + document.activeElement?.dispatchEvent(new dom!.window.KeyboardEvent("keydown", { + bubbles: true, + key: "Tab", + shiftKey: true, + })); + expect(document.activeElement).toBe(cards[0]); + cards[0]?.dispatchEvent(new dom!.window.KeyboardEvent("keydown", { bubbles: true, ctrlKey: true, key: "n" })); + expect(document.activeElement).toBe(cards[1]); + cards[1]?.dispatchEvent(new dom!.window.KeyboardEvent("keydown", { bubbles: true, key: "ArrowUp" })); + expect(document.activeElement).toBe(cards[0]); + cards[0]?.dispatchEvent(new dom!.window.KeyboardEvent("keydown", { bubbles: true, key: "End" })); + expect(document.activeElement).toBe(cards[cards.length - 1]!); + const input = document.createElement("input"); + keyboardRoot.append(input); + input.focus(); + input.dispatchEvent(new dom!.window.KeyboardEvent("keydown", { bubbles: true, key: "ArrowDown" })); + expect(document.activeElement).toBe(input); + input.remove(); + flushSync(() => [...container.querySelectorAll("button")].find((button) => button.textContent === "Load older activity")?.click()); + expect(container.querySelectorAll(".feed-card")).toHaveLength(48); + const allowOnce = [...container.querySelectorAll("button")].find((button) => button.textContent === "Allow Once")!; + allowOnce.click(); + await waitFor(() => calls.some((call: any) => call.method === "feed.permission.reply")); + expect(calls).toContainEqual({ method: "feed.permission.reply", params: { itemId: "item-1", mode: "once" } }); + flushSync(() => receiveFeedNativeEvent({ + snapshot: { ...subscribedSnapshot, items: [] }, + type: "feed.snapshot", + })); + expect(container.textContent).toContain("No activity yet"); + expect(container.textContent).toContain("Agent integrations"); + expect(container.textContent).toContain("Claude CodeReady"); + expect(container.textContent).toContain("CodexDisabled in Settings"); + expect(container.textContent).toContain("OpenCodeSetup needed"); + expect(container.textContent).toContain("Use J/K to navigate."); + const loadExamples = [...container.querySelectorAll("button")] + .find((button) => button.textContent === "Load examples")!; + flushSync(() => loadExamples.click()); + expect(container.querySelectorAll(".feed-card")).toHaveLength(3); + expect(container.textContent).toContain("Run database migration"); + expect(container.textContent).toContain("Plan ready for review"); + expect(container.textContent).toContain("Verification scope"); + const demoAllowOnce = [...container.querySelectorAll("button")] + .find((button) => button.textContent === "Allow Once")!; + flushSync(() => demoAllowOnce.click()); + expect(container.querySelectorAll(".feed-card")).toHaveLength(2); + expect(calls.some((call: any) => call.params?.itemId === "feed-demo-permission")).toBe(false); + expect(Object.keys(feedSourceIcons).sort()).toEqual([ + "codebuddy", "copilot", "cursor", "factory", "gemini", "qoder", + ]); + expect(feedSourceIcons.cursor?.presentation).toBe("mask"); + expect(feedSourceIcons.codebuddy?.presentation).toBe("image"); +}); + +async function waitFor(predicate: () => boolean, timeout = 1_000) { + const deadline = Date.now() + timeout; + while (Date.now() < deadline) { + if (predicate()) return; + await new Promise((resolve) => setTimeout(resolve, 5)); + } + throw new Error("condition not met"); +}