cli-jaw 2.17.41 → 2.17.42
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +3 -3
- package/dist/bin/commands/browser.js +52 -5
- package/dist/bin/commands/browser.js.map +1 -1
- package/dist/src/agent/args.js +69 -19
- package/dist/src/agent/args.js.map +1 -1
- package/dist/src/agent/codex-app-events.js +31 -1
- package/dist/src/agent/codex-app-events.js.map +1 -1
- package/dist/src/agent/cursor-model-inventory.js +140 -0
- package/dist/src/agent/cursor-model-inventory.js.map +1 -0
- package/dist/src/agent/grok-models.js +80 -0
- package/dist/src/agent/grok-models.js.map +1 -0
- package/dist/src/browser/actions.js +383 -20
- package/dist/src/browser/actions.js.map +1 -1
- package/dist/src/browser/grounding-candidate.js +272 -0
- package/dist/src/browser/grounding-candidate.js.map +1 -0
- package/dist/src/browser/grounding-eval.js +247 -0
- package/dist/src/browser/grounding-eval.js.map +1 -0
- package/dist/src/browser/image-size.js +63 -0
- package/dist/src/browser/image-size.js.map +1 -0
- package/dist/src/browser/index.js +1 -0
- package/dist/src/browser/index.js.map +1 -1
- package/dist/src/browser/occlusion.js +148 -0
- package/dist/src/browser/occlusion.js.map +1 -0
- package/dist/src/browser/verify-candidate.js +162 -0
- package/dist/src/browser/verify-candidate.js.map +1 -0
- package/dist/src/browser/vision-input.js +74 -0
- package/dist/src/browser/vision-input.js.map +1 -0
- package/dist/src/browser/vision-provider.js +75 -0
- package/dist/src/browser/vision-provider.js.map +1 -0
- package/dist/src/browser/vision.js +360 -47
- package/dist/src/browser/vision.js.map +1 -1
- package/dist/src/browser/web-ai/candidate-reconcile.js +14 -5
- package/dist/src/browser/web-ai/candidate-reconcile.js.map +1 -1
- package/dist/src/cli/claude-model-discovery.js +175 -0
- package/dist/src/cli/claude-model-discovery.js.map +1 -0
- package/dist/src/cli/claude-models.js +46 -0
- package/dist/src/cli/claude-models.js.map +1 -1
- package/dist/src/cli/registry-live.js +104 -1
- package/dist/src/cli/registry-live.js.map +1 -1
- package/dist/src/cli/registry.js +28 -5
- package/dist/src/cli/registry.js.map +1 -1
- package/dist/src/code-mode/host.js +6 -0
- package/dist/src/code-mode/host.js.map +1 -1
- package/dist/src/code-mode/manager.js +37 -8
- package/dist/src/code-mode/manager.js.map +1 -1
- package/dist/src/code-mode/providers/catalog.js +53 -1
- package/dist/src/code-mode/providers/catalog.js.map +1 -1
- package/dist/src/code-mode/providers/codex-app.js +6 -0
- package/dist/src/code-mode/providers/codex-app.js.map +1 -1
- package/dist/src/code-mode/providers/live-models.js +85 -0
- package/dist/src/code-mode/providers/live-models.js.map +1 -0
- package/dist/src/code-mode/providers/provider-live-models.js +120 -0
- package/dist/src/code-mode/providers/provider-live-models.js.map +1 -0
- package/dist/src/code-mode/session.js +37 -0
- package/dist/src/code-mode/session.js.map +1 -1
- package/dist/src/prompt/templates/a1-system.md +24 -14
- package/dist/src/prompt/templates/control-system.md +6 -11
- package/dist/src/prompt/templates/employee.md +5 -5
- package/dist/src/routes/browser.js +17 -5
- package/dist/src/routes/browser.js.map +1 -1
- package/package.json +1 -1
- package/public/css/activity.css +20 -1
- package/public/css/layout.css +7 -3
- package/public/dist/.vite/manifest.json +104 -105
- package/public/dist/assets/Agent-CQ4EBgY8.js +1 -0
- package/public/dist/assets/CodeCanvas-DWsx6sv5.js +2 -0
- package/public/dist/assets/DashboardMeta-Dh-tasbY.js +1 -0
- package/public/dist/assets/Display-NrqY_IaN.js +1 -0
- package/public/dist/assets/{Permissions-BzbnqenZ.js → Permissions-Bh947tUG.js} +1 -1
- package/public/dist/assets/Permissions-DzNJCt8K.js +1 -0
- package/public/dist/assets/app-BCBnxiGr.css +1 -0
- package/public/dist/assets/{app-x5Kray4W.js → app-Q0prKOFx.js} +4 -4
- package/public/dist/assets/{bgtask-badge-W9djRQVu.js → bgtask-badge-DAcWaUfS.js} +1 -1
- package/public/dist/assets/bgtask-badge-DHA2OQm8.js +1 -0
- package/public/dist/assets/{employees--_dmDw_a.js → employees-CWS3Juca.js} +1 -1
- package/public/dist/assets/{iframe-renderer-D4BmLtAq.js → iframe-renderer-DCDKBMb7.js} +2 -2
- package/public/dist/assets/iframe-renderer-RpvBly2x.js +1 -0
- package/public/dist/assets/manager-Nk7-RYPs.css +1 -0
- package/public/dist/assets/manager-XkR-DRaQ.js +5 -0
- package/public/dist/assets/manager-shortcuts-jsiX-zV6.js +1 -0
- package/public/dist/assets/memory-4YH8sz0L.js +1 -0
- package/public/dist/assets/{memory-DENQWzM8.js → memory-DhNdKZLO.js} +1 -1
- package/public/dist/assets/{message-history-BsrLcGJj.js → message-history-DbRTl1P0.js} +1 -1
- package/public/dist/assets/message-history-lVcLpAw8.js +1 -0
- package/public/dist/assets/{render-CF6Q1oIh.js → render-DP8SJtdZ.js} +1 -1
- package/public/dist/assets/settings--EGy3_B9.js +1 -0
- package/public/dist/assets/settings-85n9NjvX.js +1 -0
- package/public/dist/assets/{settings-B-C_jdZR.js → settings-C9_D-pn0.js} +32 -32
- package/public/dist/assets/settings-core-8wBl1mg-.js +1 -0
- package/public/dist/assets/{settings-core-BzAJLsKN.js → settings-core-BcVD2FgV.js} +1 -1
- package/public/dist/assets/{settings-embedding-dEMyByVi.js → settings-embedding-BSpq785l.js} +1 -1
- package/public/dist/assets/{settings-embedding-BSA42oKM.css → settings-embedding-LIMq5ebM.css} +1 -1
- package/public/dist/assets/{sidebar-fFEOpvJl.js → sidebar-BVhLb5Ft.js} +3 -3
- package/public/dist/assets/skills-6GFkHTlQ.js +1 -0
- package/public/dist/assets/{skills-Da_b06ci.js → skills-X7qxmHka.js} +1 -1
- package/public/dist/assets/{slash-commands-BbPUHHF4.js → slash-commands-BnDH4IU_.js} +1 -1
- package/public/dist/assets/slash-commands-qu8fPAZ3.js +1 -0
- package/public/dist/assets/{trace-drawer-B-QmzUfP.js → trace-drawer-DasaS1z4.js} +1 -1
- package/public/dist/assets/{ui-CkRUrIfp.js → ui-BtiBTXng.js} +1 -1
- package/public/dist/assets/ui-BucJ1zMA.js +1 -0
- package/public/dist/index.html +2 -2
- package/public/dist/manager/index.html +3 -3
- package/public/dist/settings/index.html +2 -2
- package/public/js/features/settings.ts +16 -0
- package/public/manager/src/App.tsx +10 -12
- package/public/manager/src/AppChrome.tsx +2 -3
- package/public/manager/src/InstancePreview.tsx +47 -0
- package/public/manager/src/SidebarRailRouter.tsx +34 -30
- package/public/manager/src/code/CodeComposer.tsx +31 -6
- package/public/manager/src/code/CodeSessionList.tsx +25 -7
- package/public/manager/src/code/CodeToastHost.tsx +49 -0
- package/public/manager/src/code/CodeTranscript.tsx +136 -26
- package/public/manager/src/code/CodeWorkbench.tsx +16 -2
- package/public/manager/src/code/ComposerFooter.tsx +130 -46
- package/public/manager/src/code/ContextUsageMeter.tsx +72 -0
- package/public/manager/src/code/ProviderGlyph.tsx +58 -0
- package/public/manager/src/code/code-composer.css +159 -175
- package/public/manager/src/code/code-controller-runtime.ts +3 -1
- package/public/manager/src/code/code-session-state.ts +7 -1
- package/public/manager/src/code/code-toasts.ts +73 -0
- package/public/manager/src/code/code-workbench.css +42 -1
- package/public/manager/src/code/code.css +130 -15
- package/public/manager/src/code/context-usage.ts +74 -0
- package/public/manager/src/code/pending-user-item.ts +46 -0
- package/public/manager/src/code/session-order.ts +70 -0
- package/public/manager/src/code/tool-summary.ts +101 -0
- package/public/manager/src/code/use-dictation.ts +130 -0
- package/public/manager/src/components/CommandCenter.tsx +4 -8
- package/public/manager/src/components/InstanceDetailPanel.tsx +0 -18
- package/public/manager/src/components/Workbench.tsx +6 -10
- package/public/manager/src/components/WorkbenchHeader.tsx +0 -11
- package/public/manager/src/dashboard-settings/dashboard-settings-ui.ts +3 -1
- package/public/manager/src/hooks/useDashboardView.ts +38 -38
- package/public/manager/src/manager-components.css +0 -8
- package/public/manager/src/manager-shortcut-runner.ts +0 -1
- package/public/manager/src/manager-shortcuts.ts +0 -2
- package/public/manager/src/settings/pages/Agent.tsx +5 -2
- package/public/manager/src/settings/pages/DashboardMeta.tsx +20 -1
- package/public/manager/src/settings/pages/Permissions.tsx +23 -4
- package/public/manager/src/settings/pages/components/agent/PermissionQuickSection.tsx +6 -2
- package/public/manager/src/settings/pages/components/agent/agent-save.ts +24 -1
- package/public/manager/src/settings/settings-icons.ts +3 -1
- package/public/manager/src/settings/settings-registry.ts +3 -3
- package/public/manager/src/settings-controls.css +0 -1
- package/public/manager/src/settings-standalone.tsx +8 -8
- package/public/manager/src/types.ts +0 -1
- package/scripts/check-private-boundary.mjs +101 -0
- package/scripts/grounding-eval.mjs +223 -0
- package/public/dist/assets/Agent-B8ZEWJ6B.js +0 -1
- package/public/dist/assets/CodeCanvas-Bj3lTSu6.js +0 -2
- package/public/dist/assets/DashboardMeta-CmZavI4H.js +0 -1
- package/public/dist/assets/Display-DFkjKcMk.js +0 -1
- package/public/dist/assets/Permissions-CJftCO6p.js +0 -1
- package/public/dist/assets/app-DVbrIl8f.css +0 -1
- package/public/dist/assets/bgtask-badge-CuAc8bAl.js +0 -1
- package/public/dist/assets/iframe-renderer-By2WO5bd.js +0 -1
- package/public/dist/assets/manager-CxLXWCGi.css +0 -1
- package/public/dist/assets/manager-DA3dF3eN.js +0 -5
- package/public/dist/assets/manager-shortcuts-CzGkE0ZG.js +0 -1
- package/public/dist/assets/memory-thjr2apY.js +0 -1
- package/public/dist/assets/message-history-CfU7_P5t.js +0 -1
- package/public/dist/assets/settings-DXA5L4DR.js +0 -1
- package/public/dist/assets/settings-Dy_IaNVH.js +0 -1
- package/public/dist/assets/settings-core-D7sAQqhC.js +0 -1
- package/public/dist/assets/skills-BcIievZp.js +0 -1
- package/public/dist/assets/slash-commands-B-5Shayl.js +0 -1
- package/public/dist/assets/ui-CJLdMfRx.js +0 -1
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/vendor-render-DSSkXCir.css"])))=>i.map(i=>d[i]);
|
|
2
|
+
import{r as e}from"./rolldown-runtime-hePW80VL.js";import{t}from"./preload-helper-CfbQpVni.js";import{a as n,i as r,n as i,r as a,t as o}from"./esm-Q6VOkDbn.js";import{t as s}from"./react-C_pPTFsM.js";import{t as c}from"./react-dom-DyUOYpVL.js";import{t as l}from"./jsx-runtime-NZYk81nU.js";var u=e(s(),1),d=c(),f={session_busy:`This session is busy. Wait for it to finish or stop the current turn.`,request_not_current:`This approval is no longer current. Refreshing its status.`,invalid_option:`This approval option is no longer available. Refreshing its status.`,revision_conflict:`Session settings changed elsewhere. Review the updated values and try again.`,invalid_sequence:`Conversation history needs to be refreshed.`,snapshot_limit:`This conversation exceeds the snapshot limit. Stop and recovery controls remain available.`,transcript_limit:`The conversation has reached its storage limit.`,event_too_large:`A conversation update exceeds the supported size.`,provider_unavailable:`This runtime is unavailable. Check its installation and authentication.`,unsupported_model:`This model is not available for the selected runtime.`,unsupported_effort:`This effort is not supported by the selected runtime.`,unsupported_policy:`This permission mode is not supported by the selected runtime.`,unsupported_capability:`This runtime does not support this action.`,session_not_found:`This session is no longer available. Its local draft is retained.`,unauthorized:`Authentication is required to access this instance.`},p=class extends Error{code;status;session;constructor(e,t,n){super(f[e]??`The request could not be completed. Refresh the session and try again.`),this.code=e,this.status=t,this.session=n,this.name=`CodeClientError`}};function m(e){return typeof window<`u`&&window.location.port===String(e)?window.location.origin:`http://127.0.0.1:${e}`}function h(e){let t=m(e);async function n(e,n,r,i){let a=await fetch(`${t}/api/code${n}`,{method:e,...i===void 0?{}:{signal:i},...r===void 0?{}:{headers:{"Content-Type":`application/json`},body:JSON.stringify(r)}}),o=await a.json();if(!a.ok||o.ok!==!0)throw new p(typeof o.error==`string`?o.error:`code_request_failed`,a.status,o.session);return o}let r=e=>`/sessions/${encodeURIComponent(e)}`,i=async(e,t,r)=>(await n(e,t,r)).session;return{listSessions(e={},t){let r=new URLSearchParams;for(let[t,n]of Object.entries(e))n!==void 0&&r.set(t,String(n));return n(`GET`,`/sessions?${r}`,void 0,t)},listModelOptions:e=>n(`GET`,`/models`,void 0,e),snapshot:(e,t)=>n(`GET`,r(e),void 0,t),events:(e,t,i)=>n(`GET`,`${r(e)}/events?afterSequence=${t}&limit=500`,void 0,i),history:(e,t,i)=>n(`GET`,`${r(e)}/items?beforeSequence=${t}&limit=200`,void 0,i),createSession:e=>i(`POST`,`/sessions`,e),patchSession:(e,t)=>i(`PATCH`,r(e),t),sendPrompt:(e,t)=>n(`POST`,`${r(e)}/prompt`,t),cancelPrompt:(e,t)=>i(`POST`,`${r(e)}/cancel`,t),attachSession:e=>i(`POST`,`${r(e)}/attach`,{}),async answerPermission(e,t){await n(`POST`,`/permissions/${encodeURIComponent(e)}`,t)},getGitInfo:(e,t)=>n(`GET`,`/git-info?cwd=${encodeURIComponent(e)}`,void 0,t),pickWorkspace:()=>n(`POST`,`/workspace/pick`)}}var g=512,_=2097152,v=2e3,y=16777216;function b(e){return{sessionId:e,session:null,items:[],permissions:[],cursor:0,hydrated:!1,hydrating:!1,synced:!1,needsSnapshot:!1,buffered:[],hasOlder:!1,beforeSequence:null,error:null}}function x(e){return!!e&&[`starting`,`streaming`,`stopping`].includes(e.status)}var S=e=>e.sort((e,t)=>(e.firstSequence??0)-(t.firstSequence??0)),C=e=>e.reduce((e,t)=>e+JSON.stringify(t).length,0);function w(e){let t=e.items,n=C(t);if(t.length<=v&&n<=y)return e;for(t=[...t];t.length>v||n>y;){let r=t.findIndex(t=>!e.session?.turnId||t.turnId!==e.session.turnId);if(r<0)return{...e,items:[],synced:!1,needsSnapshot:!0,error:`Conversation exceeds the display capacity.`};n-=JSON.stringify(t[r]).length,t.splice(r,1)}return{...e,items:t,hasOlder:!0,beforeSequence:t[0]?.firstSequence??null}}function T(e,t){let{items:n,session:r,permissions:i}=e;if(t.event===`code_session`){if(!t.session||t.session.sessionId!==e.sessionId)return{...e,needsSnapshot:!0,synced:!1};r=t.session.contextUsage===void 0&&r?.contextUsage!==void 0?{...t.session,contextUsage:r.contextUsage}:t.session,i=i.filter(e=>e.epoch===r.epoch&&e.turnId===r.turnId)}else{let a=t.item?.itemId??t.update?.itemId,o=n.find(e=>e.itemId===a),s;if(t.event===`code_item`&&t.item)s={...t.item,firstSequence:o?.firstSequence??t.item.firstSequence??t.sequence};else if(t.event===`code_item_update`&&t.update&&o&&o.turnId===t.update.turnId){let n=t.update;if(n.appendToolOutput!==void 0&&!o.tool)return{...e,needsSnapshot:!0,synced:!1};s={...o,updatedAt:n.updatedAt,...n.appendText===void 0?{}:{text:(o.text??``)+n.appendText},...n.appendToolOutput===void 0?{}:{tool:{...o.tool,output:(o.tool.output??``)+n.appendToolOutput}},...n.status===void 0?{}:{status:n.status},...n.phase===void 0?{}:{phase:n.phase}}}else return{...e,needsSnapshot:!0,synced:!1};n=S([...n.filter(e=>e.itemId!==s.itemId),s]),s.permission&&(i=i.filter(e=>e.permissionId!==s.permission.permissionId),s.status===`pending`&&s.permission.epoch===r?.epoch&&s.permission.turnId===r?.turnId&&(i=[...i,s.permission]))}return w({...e,items:n,session:r,permissions:i,cursor:t.sequence})}function E(e){let t=e;if(!t.hydrated||t.hydrating||t.needsSnapshot)return t;let n=t.buffered.filter(e=>e.sequence>t.cursor);for(;n[0]?.sequence===t.cursor+1;){let e=n[0];if(t=T(t,e),t.needsSnapshot)break;n.shift()}return{...t,buffered:n,synced:t.synced&&!n.length&&!t.needsSnapshot}}function D(e,t){if(t.sessionId!==e.sessionId||t.sequence<=e.cursor||e.buffered.some(e=>e.sequence===t.sequence))return e;let n=[...e.buffered,t].sort((e,t)=>e.sequence-t.sequence);return n.length>g||JSON.stringify(n).length>_?{...e,buffered:[],synced:!1,needsSnapshot:!0,error:`Live updates exceeded the buffer. Refreshing history.`}:E({...e,buffered:n})}function O(e,t){switch(t.type){case`stale`:return{...e,synced:!1};case`error`:return{...e,hydrating:!1,synced:!1,error:t.error};case`snapshot-start`:return{...e,hydrating:!0,synced:!1,error:null};case`event`:return D(e,t.event);case`snapshot`:{let n=t.snapshot;if(n.session.sessionId!==e.sessionId||n.sequence<e.cursor)return{...e,hydrating:!1,synced:!1,needsSnapshot:!0};let r=S([...n.items]);return E(w({...e,session:n.session,items:r,permissions:n.pendingPermissions,cursor:n.sequence,hydrated:!0,hydrating:!1,synced:!0,needsSnapshot:!1,hasOlder:n.truncated,beforeSequence:r[0]?.firstSequence??null,error:null}))}case`page`:{let n=e;for(let e of t.page.events)n=D(n,e);let r=n.cursor>=t.page.throughSequence&&!n.buffered.length&&!n.needsSnapshot;return{...n,synced:r,error:r?null:n.error}}case`history`:{let n=new Set(e.items.map(e=>e.itemId)),r=S([...e.items,...t.page.items.filter(e=>!n.has(e.itemId))]);return r.length>v||C(r)>y?{...e,error:`Older history exceeds the display capacity. Reload to return to recent items.`}:{...e,items:r,hasOlder:t.page.hasMore,beforeSequence:t.page.beforeSequence}}}}var k=`cli-jaw:code-drafts:v1`,A=`cli-jaw:code-draft-warnings:v1`,j=1,M=4,ee=32,te=262144,N=1048576,ne=2097152,P=`Draft recovery is unavailable in this tab. Your current text remains in memory.`,re=`Draft recovery is incomplete: some recent text or request state was not saved for reload. Check your draft before sending.`,F=`Draft recovery is incomplete: some text was not saved for reload because this tab reached its recovery limit.`,I=e=>!!e&&typeof e==`object`&&!Array.isArray(e),L=(e,t)=>typeof e==`string`&&e.length<=t,R=e=>typeof e==`number`&&Number.isSafeInteger(e)&&e>=0;function z(e){if(!I(e)||!L(e.input,te)||!R(e.edit)||!R(e.selectionEdit)||typeof e.creating!=`boolean`)return null;let t=e.selection;if(!I(t)||![`codex-app`,`claude`,`cursor`,`grok`].includes(String(t.provider))||!L(t.cwd,4096)||!L(t.model,1024)||!(t.effort===null||L(t.effort,80))||![`ask`,`auto`,`read-only`].includes(String(t.permissionMode)))return null;let n=e.retry,r=e.stop;return n!==null&&(!I(n)||!L(n.text,te)||!L(n.key,240)||!n.key||!R(n.edit)||n.edit>e.edit)||r!==null&&(!I(r)||!L(r.turnId,240)||!r.turnId||!R(r.epoch))?null:{input:e.input,edit:e.edit,selectionEdit:e.selectionEdit,creating:e.creating,selection:{provider:t.provider,cwd:t.cwd,model:t.model,effort:t.effort,permissionMode:t.permissionMode},retry:n===null?null:{text:n.text,key:n.key,edit:n.edit},stop:r===null?null:{turnId:r.turnId,epoch:r.epoch}}}function ie(e){if(e===null)return{version:j,endpoints:[]};if(e.length>ne)return null;let t;try{t=JSON.parse(e)}catch{return null}if(!I(t)||t.version!==j||!Array.isArray(t.endpoints)||t.endpoints.length>M)return null;let n=[];for(let e of t.endpoints){if(!I(e)||!L(e.endpoint,2048)||!(e.selectedId===null||L(e.selectedId,240))||!Array.isArray(e.sessions)||e.sessions.length>ee)return null;let t=z(e.fresh);if(!t||t.retry||t.stop)return null;let r=[];for(let t of e.sessions){if(!I(t)||!L(t.id,240)||!t.id)return null;let e=z(t.draft);if(!e||e.creating||r.some(e=>e.id===t.id))return null;r.push({id:t.id,draft:e})}if(e.selectedId!==null&&!r.some(t=>t.id===e.selectedId)||n.some(t=>t.endpoint===e.endpoint)||JSON.stringify(e).length>N)return null;n.push({endpoint:e.endpoint,selectedId:e.selectedId,fresh:t,sessions:r})}return{version:j,endpoints:n}}function ae(e){let t=e.getItem(A);if(!t||t.length>16384)return[];try{let e=JSON.parse(t);return Array.isArray(e)&&e.length<=M&&e.every(e=>L(e,2048))?e:[]}catch{return[]}}function B(e,t,n){try{let r=ae(e).filter(e=>e!==t);n&&r.push(t),r.length?e.setItem(A,JSON.stringify(r.slice(-4))):e.removeItem(A)}catch{}}function oe(){if(typeof window>`u`)return{storage:null,warning:null};try{return{storage:window.sessionStorage,warning:null}}catch{return{storage:null,warning:P}}}function se(e,t){try{let n=ie(e.getItem(k));if(!n)return{data:null,warning:`Saved Code drafts could not be read. No saved requests were sent.`};let r=n.endpoints.find(e=>e.endpoint===t)??null,i=ae(e);return{data:r,warning:i.includes(t)||!r&&i.length>0?re:null}}catch{return{data:null,warning:P}}}function ce(e){let{provider:t,cwd:n,model:r,effort:i,permissionMode:a}=e.selection;return z({input:e.input,edit:e.edit,selection:{provider:t,cwd:n,model:r,effort:i,permissionMode:a},selectionEdit:e.selectionEdit,creating:e.createUnknown||e.operation.kind===`creating`,retry:e.retry?{text:e.retry.text,key:e.retry.key,edit:e.retry.edit}:null,stop:e.stopTarget?{turnId:e.stopTarget.turnId,epoch:e.stopTarget.epoch}:null})}function le(e,t,n){try{let r=ce(n.fresh);if(!r)return B(e,t,!0),F;let i={endpoint:t,selectedId:null,fresh:r,sessions:[]},a=!1,o=[...n.sessions].sort(([e],[t])=>Number(t===n.selectedId)-Number(e===n.selectedId));for(let[r,s]of o){if(r!==n.selectedId&&!s.input&&!s.retry&&!s.stopTarget)continue;let o=ce(s);if(!o)return B(e,t,!0),F;if(i.sessions.length>=ee){a=!0;continue}let c={...i,selectedId:r===n.selectedId?r:i.selectedId,sessions:[...i.sessions,{id:r,draft:o}]};if(JSON.stringify(c).length>N){a=!0;continue}i.sessions=c.sessions,i.selectedId=c.selectedId}if(n.selectedId!==null&&i.selectedId===null||JSON.stringify(i).length>N)return B(e,t,!0),F;let s=e.getItem(k),c=[...(ie(s)??{version:j,endpoints:[]}).endpoints.filter(e=>e.endpoint!==t),i],l=JSON.stringify({version:j,endpoints:c});for(;c.length>M||l.length>ne;){let t=c.shift();t&&B(e,t.endpoint,!0),l=JSON.stringify({version:j,endpoints:c})}return l!==s&&e.setItem(k,l),B(e,t,a||n.recoveryWarning!==null),a?F:null}catch{return B(e,t,!0),P}}var ue=new Map,de=new WeakMap;function V(e){return{input:``,edit:0,selection:{...e},selectionEdit:0,operation:{kind:`idle`,error:null},retry:null,createUnknown:!1,requiredSequence:0,stopTarget:null,permissionOperations:{}}}function fe(e){let t=V(e.selection);return t.input=e.input,t.edit=e.edit,t.selectionEdit=e.selectionEdit,t.createUnknown=e.creating,t.retry=e.retry,e.creating&&(t.operation={kind:`creating`,error:`Creation was interrupted by reload. The original session may exist; no request has been retried.`}),e.retry&&(t.operation={kind:`unknown-send`,error:`The original message has not been reconciled after reload. It will not be sent automatically.`}),e.stop&&(t.stopTarget={...e.stop,outcome:`unknown`},t.operation={kind:`stopping`,error:`Checking the captured Stop after reload. No cancellation has been resent.`}),t}function pe(e,t){let n=oe(),r=n.storage?de.get(n.storage):ue;r||(r=new Map,de.set(n.storage,r));let i=r.get(e);if(!i){let a=n.storage?se(n.storage,e):{data:null,warning:n.warning};i={endpoint:e,storage:n.storage,storageWarning:n.warning,recoveryWarning:a.warning,selectedId:a.data?.selectedId??null,navigation:0,fresh:a.data?fe(a.data.fresh):V({provider:`codex-app`,cwd:t,model:``,effort:null,permissionMode:`ask`}),sessions:new Map(a.data?.sessions.map(e=>[e.id,fe(e.draft)])??[]),listeners:new Set},r.set(e,i)}return i}function me(e){e.storage&&(e.storageWarning=le(e.storage,e.endpoint,e))}function he(e){return{provider:e.provider,cwd:e.cwd,model:e.model,effort:e.effort,permissionMode:e.permissionMode}}function ge(e,t,n=!1){let r=e.providers.find(e=>e.id===t.provider);if(!r)return t;let i=r.capabilities;return{...t,model:!n&&r.models.includes(t.model)?t.model:r.defaultModel,effort:!n&&t.effort!==null&&i.efforts.includes(t.effort)?t.effort:null,permissionMode:i.permissions?!n&&i.permissionModes.includes(t.permissionMode)?t.permissionMode:i.permissions&&i.permissionModes.includes(`ask`)?`ask`:i.permissionModes.includes(`auto`)?`auto`:`read-only`:`auto`}}function H(e,t){e.retry?.key===t&&(e.edit===e.retry.edit&&(e.input=``,e.edit++),e.retry=null,(e.operation.kind===`sending`||e.operation.kind===`unknown-send`)&&(e.operation={kind:`idle`,error:null}))}var _e=`pending:user`;function ve(e,t,n=Date.now()){let r=e.retry;if(!r||t.some(e=>e.kind===`user_message`&&e.clientTurnKey===r.key))return null;let i=e.operation.kind===`unknown-send`;return{itemId:_e,turnId:null,kind:`user_message`,status:`pending`,text:r.text,clientTurnKey:r.key,firstSequence:2**53-1,createdAt:n,updatedAt:n,...i?{phase:`unknown`}:{}}}function ye(e,t,n=Date.now()){let r=ve(e,t,n);return r?[...t,r]:t}var be=6,U=1e3,xe=100,Se=32,Ce=150,W=e=>e instanceof p?e.message:`Connection lost. Refresh to check the current state.`,G=e=>e instanceof p&&e.status>=400&&e.status<500,we=(e,t)=>!t||e.epoch>t.epoch||e.epoch===t.epoch&&(e.sequence>t.sequence||e.sequence===t.sequence&&e.revision>=t.revision),Te=class{client;book;details=new Map;summaries=new Map;rows=[];catalog=null;catalogError=null;transport=`disconnected`;filter={scope:`all`,archived:!1};workingDir;gitInfo=null;gitError=null;gitGeneration=0;pickerGeneration=0;indexGeneration=0;catalogGeneration=0;lifetime=0;active=!1;abort=new AbortController;syncing=new Map;detailReads=new Map;historyLoading=new Set;indexLoading=!1;moreSessions=!1;offset=0;indexError=null;timer;listeners=new Set;model;draftSyncQueued=!1;constructor(e){this.client=h(e.port),this.workingDir=e.workingDir,this.book=pe(m(e.port),e.workingDir),this.model=this.makeModel()}getModel=()=>this.model;subscribe=e=>(this.listeners.add(e),()=>this.listeners.delete(e));changed=()=>{this.model=this.makeModel();for(let e of this.listeners)e();let e=this.book.selectedId,t=e?this.details.get(e):void 0;this.active&&e&&!t?.error&&(!t||this.draft(e).requiredSequence>t.cursor)&&!this.draftSyncQueued&&(this.draftSyncQueued=!0,queueMicrotask(()=>{this.draftSyncQueued=!1,this.active&&this.book.selectedId===e&&!this.syncing.has(e)&&this.sync(e)}))};notify(){me(this.book),this.changed();for(let e of this.book.listeners)e!==this.changed&&e()}mount=()=>(this.active=!0,this.lifetime++,this.abort=new AbortController,this.book.listeners.add(this.changed),this.refresh(),()=>{me(this.book),this.active=!1,this.lifetime++,this.abort.abort(),this.syncing.clear();for(let e of this.detailReads.values())e.abort();this.detailReads.clear(),this.timer!==void 0&&clearTimeout(this.timer),this.timer=void 0,this.book.listeners.delete(this.changed),this.details.clear(),this.summaries.clear(),this.rows=[],this.gitGeneration++,this.pickerGeneration++});setWorkingDir(e){if(e===this.workingDir)return;this.workingDir=e;let t=this.book.fresh;!t.selectionEdit&&!t.input&&t.operation.kind===`idle`&&!t.createUnknown&&(t.selection={...t.selection,cwd:e}),this.filter.scope===`cwd`&&this.readIndex(),this.readGit(),this.notify()}draft(e=this.book.selectedId){if(e===null)return this.book.fresh;let t=this.book.sessions.get(e);if(!t){let n=this.info(e);t=V(n?he(n):this.book.fresh.selection),this.book.sessions.set(e,t)}return t}info(e){if(!e)return null;let t=this.details.get(e)?.session,n=this.summaries.get(e);return n&&we(n,t)?n:t??n??null}accept(e){if(!this.active||!we(e,this.info(e.sessionId)))return;if(this.summaries.set(e.sessionId,e),this.summaries.size>1006){let e=[...this.summaries.keys()].find(e=>e!==this.book.selectedId&&!this.details.has(e)&&!this.rows.includes(e));e&&this.summaries.delete(e)}let t=this.book.sessions.get(e.sessionId);t?.stopTarget&&(e.turnId!==t.stopTarget.turnId||e.epoch!==t.stopTarget.epoch||!x(e))&&(t.stopTarget=null,t.operation.kind===`stopping`&&(t.operation=t.retry?{kind:`unknown-send`,error:`The original message still needs reconciliation.`}:{kind:`idle`,error:null}))}state(e){let t=this.details.get(e);return t||(t=b(e),this.details.set(e,t),this.trimDetails()),t}trimDetails(){for(let e of this.details.keys()){if(this.details.size<=be)break;e!==this.book.selectedId&&(this.details.delete(e),this.detailReads.get(e)?.abort(),this.detailReads.delete(e),this.syncing.delete(e))}}update(e,t){this.details.set(e,t),t.session&&this.accept(t.session);let n=this.book.sessions.get(e);if(n?.retry&&t.items.some(e=>e.kind===`user_message`&&e.clientTurnKey===n.retry.key)&&H(n,n.retry.key),n&&t.synced){let e=new Set(t.permissions.map(e=>e.permissionId));for(let t of Object.keys(n.permissionOperations))!e.has(t)&&!n.permissionOperations[t].pending&&delete n.permissionOperations[t]}this.notify()}makeModel(){let e=this.book.selectedId,t=this.info(e),n=this.draft(e),r=e?this.details.get(e):void 0,i=t&&r?.synced?{...t,pendingPermissionCount:r.permissions.length}:t,a=n.operation,o=this.book.storageWarning??this.book.recoveryWarning,s=[`creating`,`sending`,`stopping`,`resuming`,`patching`].includes(a.kind)&&!a.error,c=e===null?!!this.catalog:!!r?.synced&&(!i||i.sequence<=r.cursor)&&n.requiredSequence<=(r?.cursor??0);return{catalog:this.catalog,sessions:this.rows.map(e=>{let t=this.info(e),n=this.details.get(e);return t&&n?.synced?{...t,pendingPermissionCount:n.permissions.length}:t}).filter(e=>!!e),selectedId:e,session:i,items:ye(n,r?.items??[]),permissions:r?.permissions??[],input:n.input,selection:i?he(i):n.selection,gitInfo:this.gitInfo,loading:this.indexLoading||!!r?.hydrating||!!e&&!r?.hydrated&&!r?.error,pending:s,busy:x(i),synced:c,transport:this.transport,error:[a.error??r?.error??this.indexError??this.catalogError??this.gitError??i?.error?.message,o].filter(Boolean).join(` `)||null,operation:{...a,error:a.error&&o?`${a.error} ${o}`:a.error},retryText:n.retry?.text??null,canRetrySameSend:!!e&&a.kind===`unknown-send`&&!!n.retry&&c&&i?.archivedAt===null,permissionOperations:{...n.permissionOperations},hasMoreSessions:this.moreSessions,hasOlderHistory:r?.hasOlder??!1,filter:this.filter,creationUnknown:e===null&&n.createUnknown,startAnotherSession:this.startAnotherSession,newSession:this.newSession,selectSession:this.selectSession,setInput:this.setInput,setSelection:this.setSelection,pickWorkspace:this.pickWorkspace,send:this.send,retrySameSend:this.retrySameSend,stop:this.stop,resume:this.resume,rename:this.rename,archive:this.archive,answer:this.answer,refresh:this.refresh,loadMoreSessions:this.loadMoreSessions,loadOlderHistory:this.loadOlderHistory,setFilter:this.setFilter,clearError:this.clearError}}async readCatalog(){let e=++this.catalogGeneration,t=this.lifetime;try{let n=await this.client.listModelOptions(this.abort.signal);if(!this.active||t!==this.lifetime||e!==this.catalogGeneration)return;this.catalog=n,this.catalogError=null;let r=this.book.fresh;!r.selection.model&&!r.selectionEdit&&r.operation.kind===`idle`&&(r.selection=ge(n,{...r.selection,provider:n.defaultProvider})),this.notify()}catch(n){this.active&&t===this.lifetime&&e===this.catalogGeneration&&(this.catalogError=W(n),this.notify())}}async readIndex(e=!1){let t=++this.indexGeneration,n=this.lifetime,r=e?this.offset:0,i=e?xe:Math.min(U,Math.max(xe,this.offset));this.indexLoading=!0,this.notify();try{let a=await this.client.listSessions({...this.filter,limit:i,offset:r,...this.filter.scope===`cwd`?{cwd:this.workingDir}:{}},this.abort.signal);if(!this.active||n!==this.lifetime||t!==this.indexGeneration)return;for(let e of a.sessions){this.accept(e);let t=this.details.get(e.sessionId);t?.hydrated&&!t.hydrating&&e.sequence>t.cursor&&(this.details.set(e.sessionId,O(t,{type:`stale`})),this.sync(e.sessionId))}this.rows=[...new Set([...e?this.rows:[],...a.sessions.map(e=>e.sessionId)])].slice(0,U),this.offset=a.offset+a.sessions.length,this.moreSessions=a.hasMore&&this.rows.length<U,this.indexError=null;let o=new Set([...this.rows,...this.details.keys(),...this.book.selectedId?[this.book.selectedId]:[]]);for(let e of this.summaries.keys())o.has(e)||this.summaries.delete(e)}catch(e){this.active&&n===this.lifetime&&t===this.indexGeneration&&(this.indexError=W(e))}finally{this.active&&n===this.lifetime&&t===this.indexGeneration&&(this.indexLoading=!1,this.notify())}}scheduleIndex(){this.active&&this.timer===void 0&&(this.timer=setTimeout(()=>{this.timer=void 0,this.readIndex()},Ce))}sync(e,t=!1){let n=this.syncing.get(e);if(n)return n;let r=this.lifetime,i=new AbortController;this.detailReads.set(e,i),this.state(e);let a=()=>this.active&&r===this.lifetime&&this.detailReads.get(e)===i&&this.details.has(e),o=(async()=>{let n=0,r=null;try{for(let o=0;o<Se&&a();o++){let o=this.state(e);if(t||!o.hydrated||o.needsSnapshot){if(++n>2)throw Error(`snapshot did not cover live updates`);t=!1,this.update(e,O(o,{type:`snapshot-start`}));let s=this.book.sessions.get(e)?.stopTarget,c=s?.outcome===`unknown`?s:null,l=await this.client.snapshot(e,i.signal);if(!a())return;r=c,this.update(e,O(this.state(e),{type:`snapshot`,snapshot:l}))}if(o=this.state(e),o.needsSnapshot)continue;let s=o.cursor,c=await this.client.events(e,s,i.signal);if(!a())return;let l=O(this.state(e),{type:`page`,page:c});if(this.update(e,l),!l.needsSnapshot){if(l.synced&&l.cursor>=(this.book.sessions.get(e)?.requiredSequence??0)){this.reconcileStop(e,r);return}if(l.cursor<=s){t=!0;continue}}}a()&&this.update(e,O(this.state(e),{type:`error`,error:`History is still catching up. Refresh to continue.`}))}catch(t){if(!a())return;if(t instanceof p&&t.code===`invalid_sequence`&&n<2){let t=await this.client.snapshot(e,i.signal).catch(()=>null);if(!a())return;if(t){this.update(e,O(this.state(e),{type:`snapshot`,snapshot:t}));return}}this.update(e,O(this.state(e),{type:`error`,error:W(t)})),t instanceof p&&t.code===`session_not_found`&&this.scheduleIndex()}})().finally(()=>{this.syncing.get(e)===o&&this.syncing.delete(e),this.detailReads.get(e)===i&&this.detailReads.delete(e),this.trimDetails()});return this.syncing.set(e,o),o}onEvent=e=>{if(!this.active)return;e.session?.sessionId===e.sessionId&&this.accept(e.session),(e.event===`code_session`||e.item?.kind===`permission_request`||e.update?.status)&&this.scheduleIndex();let t=this.book.sessions.get(e.sessionId);e.item?.kind===`user_message`&&e.item.clientTurnKey&&t?.retry?.key===e.item.clientTurnKey&&(t.requiredSequence=Math.max(t.requiredSequence,e.sequence),H(t,e.item.clientTurnKey));let n=this.details.get(e.sessionId);if(!n){this.notify();return}let r=O(n,{type:`event`,event:e});this.update(e.sessionId,r),!r.synced&&!r.hydrating&&this.sync(e.sessionId)};onTransport=e=>{this.transport=e;for(let[e,t]of this.details)this.details.set(e,O(t,{type:`stale`}));if(this.notify(),e===`connected`&&this.active){this.readIndex();for(let e of this.details.keys())this.sync(e,!0)}};refresh=async()=>{let e=this.book.selectedId;await Promise.all([this.readCatalog(),this.readIndex(),e?this.sync(e,!0):Promise.resolve(),this.readGit()])};loadMoreSessions=async()=>{this.moreSessions&&!this.indexLoading&&await this.readIndex(!0)};setFilter=e=>{this.filter={...e},this.offset=0,this.rows=[],this.moreSessions=!1,this.notify(),this.readIndex()};startAnotherSession=()=>{let e=this.book.fresh;if(this.book.selectedId!==null||!e.createUnknown)return;let t=V(e.selection);t.input=e.input,t.edit=e.edit,t.selectionEdit=e.selectionEdit,t.operation.error=`The original session may still exist. Your text is preserved; Send will create another session.`,this.book.fresh=t,this.book.navigation++,this.pickerGeneration++,this.notify()};newSession=()=>{this.book.selectedId=null,this.book.navigation++,this.gitInfo=null,this.notify(),this.readGit()};selectSession=async e=>{this.book.selectedId=e,this.book.navigation++,this.draft(e),this.state(e),this.gitInfo=null,this.notify(),await this.sync(e,!0),this.book.selectedId===e&&await this.readGit()};setInput=e=>{let t=this.draft();t.input=e,t.edit++,this.notify()};clearError=()=>{let e=this.draft();e.operation.kind===`idle`&&(e.operation={kind:`idle`,error:null}),this.indexError=null,this.book.recoveryWarning=null,this.notify()};async readGit(){let e=++this.gitGeneration,t=this.lifetime,n=this.book.selectedId,r=this.info(n)?.cwd??(n===null?this.book.fresh.selection.cwd:``);if(this.gitInfo=null,this.gitError=null,r&&this.active)try{let i=await this.client.getGitInfo(r,this.abort.signal);this.active&&t===this.lifetime&&e===this.gitGeneration&&n===this.book.selectedId&&(this.gitInfo=i,this.notify())}catch(r){this.active&&t===this.lifetime&&e===this.gitGeneration&&n===this.book.selectedId&&(this.gitError=W(r),this.notify())}}pickWorkspace=async()=>{let e=this.book.fresh;if(this.book.selectedId!==null||e.operation.kind!==`idle`||e.createUnknown)return;let t=this.book.navigation,n=e.selectionEdit,r=++this.pickerGeneration;try{let i=await this.client.pickWorkspace();if(!this.active||r!==this.pickerGeneration||t!==this.book.navigation||n!==e.selectionEdit||e!==this.book.fresh||e.operation.kind!==`idle`)return;!i.cancelled&&i.path&&(e.selection={...e.selection,cwd:i.path},e.selectionEdit++,this.notify(),await this.readGit())}catch(i){this.active&&r===this.pickerGeneration&&t===this.book.navigation&&n===e.selectionEdit&&e===this.book.fresh&&e.operation.kind===`idle`&&(e.operation.error=W(i),this.notify())}};setSelection=async e=>{let t=this.book.selectedId,n=this.info(t);if(n&&e.provider&&e.provider!==n.provider){this.newSession(),await this.setSelection({...e,cwd:n.cwd});return}let r=this.draft();if(r.operation.kind!==`idle`||r.createUnknown)return;if(n&&t){if(e.cwd!==void 0&&e.cwd!==n.cwd||e.provider&&e.provider!==n.provider){r.operation.error=`Runtime and workspace are fixed for this session. Create a new session to change them.`,this.notify();return}if(n.status!==`idle`||!this.model.synced||n.archivedAt!==null){r.operation.error=`Wait for this session to be idle and synchronized before changing settings.`,this.notify();return}await this.patch(t,{model:e.model??n.model,effort:e.effort===void 0?n.effort:e.effort,permissionMode:e.permissionMode??n.permissionMode});return}if(t)return;let i=e.provider!==void 0&&e.provider!==r.selection.provider,a={...r.selection,...e};this.catalog&&i&&(a=ge(this.catalog,a,!0));let o=this.catalog?.providers.find(e=>e.id===a.provider);a.effort!==null&&o&&!o.capabilities.efforts.includes(a.effort)&&(a.effort=null),r.selection=a,r.selectionEdit++,this.notify(),e.cwd!==void 0&&await this.readGit()};async patch(e,t,n=!1){let r=this.draft(e),i=this.info(e);if(!i||r.operation.kind!==`idle`||x(i)){let e=Error(i?`Wait for the current session action to finish before changing it.`:`Refresh this session before changing it.`);if(r.operation.error=e.message,this.notify(),n)throw e;return}let a=null;r.operation={kind:`patching`,error:null},this.notify();try{this.accept(await this.client.patchSession(e,{...t,expectedRevision:i.revision})),r.operation={kind:`idle`,error:null}}catch(t){t instanceof p&&t.session?.sessionId===e&&this.accept(t.session),a=t instanceof p?t:Error(W(t)),r.operation={kind:`idle`,error:a.message}}if(this.notify(),this.scheduleIndex(),this.active&&await this.sync(e,!0),n&&a)throw a}rename=async(e,t)=>{await this.patch(e,{title:t},!0)};archive=async(e,t)=>{await this.patch(e,{archived:t},!0)};send=async()=>{let e=this.book.selectedId,t=this.draft(e);if(t.operation.kind!==`idle`||t.createUnknown||!t.input.trim())return;let n=this.info(e);if(e&&(!n||n.status!==`idle`||n.archivedAt!==null||!this.model.synced)){t.operation.error=`Wait for the session to be idle and synchronized before sending.`,this.notify();return}let r={text:t.input,edit:t.edit,key:crypto.randomUUID()},i=this.book.navigation;if(!e){let n={...t.selection},r=this.catalog?.providers.find(e=>e.id===n.provider);if(!r?.available||!n.cwd.trim()||!r.models.includes(n.model)||!r.capabilities.permissionModes.includes(n.permissionMode)||n.effort!==null&&!r.capabilities.efforts.includes(n.effort)){t.operation.error=`Choose an available runtime, workspace, model and supported settings before sending.`,this.notify();return}t.operation={kind:`creating`,error:null},this.notify();try{let r=await this.client.createSession(n);e=r.sessionId,this.book.sessions.set(e,t),this.book.fresh===t&&(this.book.fresh=V(n)),this.book.navigation===i&&this.book.selectedId===null&&(this.book.selectedId=e,this.book.navigation++),this.accept(r),this.active&&this.state(e),this.scheduleIndex()}catch(e){t.createUnknown=!G(e),t.operation={kind:t.createUnknown?`creating`:`idle`,error:t.createUnknown?`Session creation could not be confirmed. The original session may exist. Refresh the list, or choose Start another session to keep this text in a new draft.`:W(e)},this.notify(),this.scheduleIndex();return}}t=this.draft(e),t.retry=r,await this.submit(e,t)};async submit(e,t){let n=t.retry;if(n){t.operation={kind:`sending`,error:null},this.notify();try{let r=await this.client.sendPrompt(e,{text:n.text,clientTurnKey:n.key});if(r.clientTurnKey!==n.key)throw Error(`Mismatched prompt receipt`);t.requiredSequence=Math.max(t.requiredSequence,r.sequence);let i=this.details.get(e);i&&this.details.set(e,O(i,{type:`stale`})),H(t,n.key)}catch(e){t.retry?.key===n.key&&(t.operation={kind:G(e)?`idle`:`unknown-send`,error:G(e)?W(e):`Message acceptance is unknown. Refresh, or explicitly retry the original message with the same key.`},G(e)&&(t.retry=null))}this.notify(),this.scheduleIndex(),this.active&&await this.sync(e,!0)}}retrySameSend=async()=>{let e=this.book.selectedId,t=this.draft(e);e&&this.model.canRetrySameSend&&t.operation.kind===`unknown-send`&&await this.submit(e,t)};reconcileStop(e,t){let n=this.book.sessions.get(e),r=this.details.get(e),i=this.info(e);!t||t.outcome!==`unknown`||n?.stopTarget!==t||!r?.synced||!i||i.sequence>r.cursor||i.turnId!==t.turnId||i.epoch!==t.epoch||(i.status===`starting`||i.status===`streaming`?(t.outcome=`retryable`,n.operation={kind:n.retry?`unknown-send`:`idle`,error:`Stop could not be confirmed. The same turn is still running. Press Stop to retry for this turn.`}):i.status===`stopping`&&(t.outcome=`accepted`,n.operation={kind:`stopping`,error:null}),this.notify())}stop=async()=>{let e=this.book.selectedId,t=this.info(e);if(!e||!t?.turnId||!x(t)||!t.capabilities.interrupt||t.status===`stopping`)return;let n=this.draft(e),r=n.stopTarget;if(r&&(r.outcome!==`retryable`||!this.model.synced||r.turnId!==t.turnId||r.epoch!==t.epoch))return;let i=r??{turnId:t.turnId,epoch:t.epoch,outcome:`pending`};i.outcome=`pending`,n.stopTarget=i,n.operation={kind:`stopping`,error:null},this.notify();try{let t=await this.client.cancelPrompt(e,{turnId:i.turnId,epoch:i.epoch});n.stopTarget===i&&(i.outcome=`accepted`),this.accept(t)}catch(e){n.stopTarget===i&&(i.outcome=`unknown`,n.operation={kind:`stopping`,error:W(e)},G(e)&&(n.stopTarget=null,n.operation.kind=`idle`))}this.notify(),this.scheduleIndex(),this.active&&(i.outcome===`unknown`&&await this.syncing.get(e),this.active&&await this.sync(e,!0))};resume=async()=>{let e=this.book.selectedId,t=this.info(e),n=this.draft(e);if(e&&t&&this.model.synced&&n.operation.kind===`idle`&&t.archivedAt===null&&[`suspended`,`failed`].includes(t.status)&&t.capabilities.resume&&t.resume.available&&(t.status!==`failed`||t.error?.recoverable)){n.operation={kind:`resuming`,error:null},this.notify();try{this.accept(await this.client.attachSession(e)),n.operation={kind:`idle`,error:null}}catch(e){n.operation={kind:`idle`,error:W(e)}}this.notify(),this.scheduleIndex(),this.active&&await this.sync(e,!0)}};answer=async(e,t)=>{let n=e.sessionId,r=this.details.get(n),i=this.info(n),a=this.draft(n);if(a.permissionOperations[e.permissionId]?.pending)return;let o=r?.permissions.find(t=>t.permissionId===e.permissionId);if(!r?.synced||!i||i.sequence>r.cursor||!o||o.turnId!==e.turnId||o.epoch!==e.epoch||i.turnId!==e.turnId||i.epoch!==e.epoch||!o.options.some(e=>e.optionId===t)){a.permissionOperations[e.permissionId]={pending:!1,error:`This approval is no longer current. Refresh its status.`},this.notify(),this.active&&await this.sync(n,!0);return}a.permissionOperations[e.permissionId]={pending:!0,error:null},this.notify();try{await this.client.answerPermission(e.permissionId,{sessionId:n,turnId:e.turnId,epoch:e.epoch,optionId:t}),a.permissionOperations[e.permissionId]={pending:!0,error:null}}catch(t){a.permissionOperations[e.permissionId]={pending:!0,error:W(t)}}this.notify(),this.scheduleIndex(),this.active&&await this.sync(n,!0);let s=this.details.get(n),c=!s?.synced||s.permissions.some(t=>t.permissionId===e.permissionId),l=a.permissionOperations[e.permissionId];c&&l?a.permissionOperations[e.permissionId]={pending:!1,error:l.error}:delete a.permissionOperations[e.permissionId],this.notify()};loadOlderHistory=async()=>{let e=this.book.selectedId;if(!e||this.historyLoading.has(e))return;let t=this.details.get(e);if(!t?.hydrated||!t.hasOlder||t.beforeSequence===null)return;let n=this.lifetime;this.historyLoading.add(e);try{let r=await this.client.history(e,t.beforeSequence,this.abort.signal);this.active&&n===this.lifetime&&this.details.get(e)?.beforeSequence===t.beforeSequence&&this.update(e,O(this.state(e),{type:`history`,page:r}))}catch(t){this.active&&n===this.lifetime&&(this.draft(e).operation.error=W(t),this.notify())}finally{this.historyLoading.delete(e)}}};function Ee({port:e,onEvent:t,onTransport:n}){let r=(0,u.useRef)({onEvent:t,onTransport:n});r.current={onEvent:t,onTransport:n},(0,u.useEffect)(()=>{if(!e)return;let t=!0,n=new EventSource(`${m(e)}/api/events`);return n.onopen=()=>{t&&r.current.onTransport?.(`connected`)},n.onmessage=e=>{if(!t)return;let n;try{n=JSON.parse(e.data)}catch{return}n?.topic!==`code`||typeof n.sessionId!=`string`||!Number.isSafeInteger(n.sequence)||n.sequence<1||!Number.isSafeInteger(n.epoch)||(n.event===`code_item`||n.event===`code_item_update`||n.event===`code_session`)&&r.current.onEvent(n)},n.onerror=()=>{t&&r.current.onTransport?.(n.readyState===EventSource.CLOSED?`disconnected`:`reconnecting`)},()=>{t=!1,n.close()}},[e])}function De({port:e,workingDir:t}){let n=m(e),r=(0,u.useMemo)(()=>new Te({port:e,workingDir:t}),[n,e]);return(0,u.useEffect)(()=>r.mount(),[r]),(0,u.useEffect)(()=>r.setWorkingDir(t),[r,t]),Ee({port:e,onEvent:r.onEvent,onTransport:r.onTransport}),(0,u.useSyncExternalStore)(r.subscribe,r.getModel,r.getModel)}var K={"codex-app":`Codex`,claude:`Claude`,cursor:`Cursor`,grok:`Grok`},Oe={ask:`Ask first`,auto:`Auto (YOLO)`,"read-only":`Read only`},ke={ask:`Review native permission requests before allowing actions.`,auto:`The native runtime may execute actions without asking for approval.`,"read-only":`The native runtime restricts actions to read-only access.`},Ae={idle:`Ready`,starting:`Starting`,streaming:`Running`,stopping:`Stopping`,suspended:`Suspended`,failed:`Runtime failed`};function je(e){return e.status===`starting`||e.status===`streaming`||e.status===`stopping`}function Me(e){return e.archivedAt===null&&e.capabilities.resume&&e.resume.available&&(e.status===`suspended`||e.status===`failed`&&e.error?.recoverable===!0)}function Ne(e){return e.kind===`turn_cancelled`||e.status===`cancelled`?`Stopped`:e.kind===`turn_failed`||e.status===`error`?`Failed`:e.kind===`turn_completed`?`Completed`:{pending:`Pending`,running:`Running`,done:`Done`,error:`Failed`,cancelled:`Stopped`}[e.status]}function Pe(e){return e.archivedAt===null?`active`:`archived`}function Fe(e,t){return t.createdAt-e.createdAt||e.sessionId.localeCompare(t.sessionId)}function Ie(e){let t=e.filter(e=>Pe(e)===`active`).sort(Fe),n=e.filter(e=>Pe(e)===`archived`).sort((e,t)=>(t.archivedAt??t.createdAt)-(e.archivedAt??e.createdAt)||e.sessionId.localeCompare(t.sessionId)),r=[];return t.length&&r.push({section:`active`,sessions:t}),n.length&&r.push({section:`archived`,sessions:n}),r}function Le(e){return e===void 0?{kind:`unknown`}:e>0?{kind:`approvals`,count:e}:{kind:`none`}}function Re(e){return e.kind===`unknown`?`Approval status unknown`:e.kind===`none`?`No pending approvals`:`${e.count} pending approval${e.count===1?``:`s`}`}var q=l();function ze({session:e,controller:t}){let[n,r]=(0,u.useState)(!1),[i,a]=(0,u.useState)(e.title??``),[o,s]=(0,u.useState)(!1),[c,l]=(0,u.useState)(null),d=(0,u.useRef)(!1),f=(0,u.useRef)(null),p=(0,u.useId)(),m=t.selectedId===e.sessionId,h=je(e),g=Le(m&&t.synced?t.permissions.length:e.pendingPermissionCount);async function _(e,t){if(!d.current){d.current=!0,s(!0),l(null);try{await e(),t?.()}catch(e){l(e instanceof Error?e.message:String(e))}finally{d.current=!1,s(!1)}}}function v(){r(!1),f.current?.focus()}return(0,q.jsxs)(`li`,{className:`code-session-row`,children:[(0,q.jsxs)(`button`,{ref:f,type:`button`,className:`code-session-item${m?` active`:``}`,"aria-current":m?`true`:void 0,onClick:()=>void _(()=>t.selectSession(e.sessionId)),children:[(0,q.jsx)(`span`,{className:`code-session-cwd`,children:e.title||`Untitled session`}),(0,q.jsxs)(`span`,{className:`code-session-meta`,title:e.cwd,children:[K[e.provider],` · `,e.cwd]}),(0,q.jsx)(`span`,{className:`code-session-status code-session-status-${e.status}`,"data-quiet":e.status===`idle`?`true`:void 0,children:Ae[e.status]}),(0,q.jsx)(`span`,{className:`code-session-attention code-session-attention-${g.kind}`,"data-quiet":g.kind===`none`?`true`:void 0,children:Re(g)})]}),n?(0,q.jsxs)(`form`,{className:`code-session-rename`,onSubmit:n=>{n.preventDefault(),i.trim()&&_(()=>t.rename(e.sessionId,i.trim()),v)},children:[(0,q.jsx)(`input`,{autoFocus:!0,"aria-label":`Session title`,"aria-describedby":c?p:void 0,value:i,disabled:o,onChange:e=>a(e.target.value),onKeyDown:t=>{t.key===`Escape`&&!o&&(t.preventDefault(),a(e.title??``),v())}}),(0,q.jsx)(`button`,{type:`submit`,disabled:o||!i.trim(),children:`Save`}),(0,q.jsx)(`button`,{type:`button`,disabled:o,onClick:v,children:`Cancel`})]}):(0,q.jsxs)(`details`,{className:`code-session-actions`,children:[(0,q.jsx)(`summary`,{"aria-label":`Actions for ${e.title||`Untitled session`}`,children:`Actions`}),(0,q.jsxs)(`div`,{children:[(0,q.jsx)(`button`,{type:`button`,disabled:o||h,onClick:()=>{a(e.title??``),r(!0)},children:`Rename`}),(0,q.jsx)(`button`,{type:`button`,disabled:o||h,title:h?`Stop before archiving`:void 0,onClick:()=>void _(()=>t.archive(e.sessionId,e.archivedAt===null)),children:e.archivedAt===null?`Archive`:`Restore`}),Me(e)&&(0,q.jsx)(`button`,{type:`button`,disabled:o||!m||!t.synced||t.pending,title:m?`Resume without resending a prompt`:`Select this session to resume it`,onClick:()=>void _(t.resume),children:`Resume`}),h&&(0,q.jsx)(`small`,{children:`Stop before changing session metadata.`})]})]},`${t.selectedId}:${e.sessionId}`),o&&(0,q.jsx)(`span`,{className:`code-session-view-hint`,role:`status`,children:`Updating session…`}),c&&(0,q.jsx)(`div`,{id:p,className:`code-session-list-error`,role:`alert`,children:c})]})}function Be({controller:e}){let[t,n]=(0,u.useState)(``),[r,i]=(0,u.useState)(!1),[a,o]=(0,u.useState)(null),[s,c]=(0,u.useState)(!1),l=(0,u.useRef)(!1),d=e.sessions.filter(e=>`${e.title??``} ${e.cwd} ${K[e.provider]}`.toLowerCase().includes(t.toLowerCase())),f=r?[...d.reduce((e,t)=>{let n=e.get(t.cwd)??[];return n.push(t),e.set(t.cwd,n),e},new Map)].map(([e,t])=>({title:e,key:e,sessions:t})):Ie(d).map(e=>({key:e.section,title:e.section===`archived`?`Archived`:``,sessions:e.sessions}));async function p(){if(!l.current){l.current=!0,c(!0),o(null);try{await e.loadMoreSessions()}catch(e){o(e instanceof Error?e.message:String(e))}finally{l.current=!1,c(!1)}}}return(0,q.jsxs)(`nav`,{className:`code-session-list`,"aria-label":`Code sessions`,children:[(0,q.jsxs)(`div`,{className:`code-session-list-header`,children:[(0,q.jsx)(`span`,{className:`code-session-list-title`,children:`Sessions`}),(0,q.jsx)(`button`,{type:`button`,className:`code-session-new-btn`,onClick:e.newSession,"aria-label":`New Code session`,children:`+`})]}),(0,q.jsxs)(`div`,{className:`code-session-view-toggle`,"aria-label":`Session view`,children:[(0,q.jsx)(`button`,{type:`button`,"aria-pressed":e.filter.scope===`all`,className:`code-session-view-btn${e.filter.scope===`all`?` active`:``}`,onClick:()=>e.setFilter({...e.filter,scope:`all`}),children:`All`}),(0,q.jsx)(`button`,{type:`button`,"aria-pressed":e.filter.scope===`cwd`,className:`code-session-view-btn${e.filter.scope===`cwd`?` active`:``}`,onClick:()=>e.setFilter({...e.filter,scope:`cwd`}),children:`This cwd`}),(0,q.jsx)(`button`,{type:`button`,"aria-pressed":r,className:`code-session-view-btn${r?` active`:``}`,onClick:()=>i(!r),children:`Group`})]}),(0,q.jsxs)(`label`,{className:`code-session-archive-filter`,children:[(0,q.jsx)(`input`,{type:`checkbox`,checked:e.filter.archived,onChange:t=>e.setFilter({...e.filter,archived:t.target.checked})}),`Archived`]}),(0,q.jsx)(`input`,{className:`code-session-search`,type:`search`,"aria-label":`Search loaded sessions`,placeholder:`Search loaded sessions…`,value:t,onChange:e=>n(e.target.value)}),(0,q.jsxs)(`button`,{type:`button`,className:`code-session-item${e.selectedId===null?` active`:``}`,"aria-current":e.selectedId===null?`true`:void 0,onClick:e.newSession,children:[(0,q.jsx)(`span`,{className:`code-session-cwd`,children:`New session draft`}),(0,q.jsx)(`span`,{className:`code-session-meta`,children:`Preserved unsent draft`})]}),e.loading&&(0,q.jsx)(`div`,{className:`code-session-list-loading`,role:`status`,children:`Loading sessions…`}),f.map(t=>(0,q.jsxs)(`section`,{className:`code-session-group`,children:[t.title&&(0,q.jsx)(`h3`,{className:`code-session-group-title`,title:t.title,children:t.title}),(0,q.jsx)(`ul`,{className:`code-session-list-items`,children:t.sessions.map(t=>(0,q.jsx)(ze,{session:t,controller:e},t.sessionId))})]},t.key)),!e.loading&&!d.length&&(0,q.jsx)(`p`,{className:`code-session-list-empty`,children:t?`No loaded sessions match. Clear search or load more.`:`No sessions here. Start with the new session draft.`}),e.hasMoreSessions&&(0,q.jsx)(`button`,{type:`button`,className:`code-inline-action`,disabled:s,onClick:()=>void p(),children:s?`Loading…`:`Load more sessions`}),(0,q.jsx)(`button`,{type:`button`,className:`code-inline-action`,onClick:()=>{o(null),e.refresh().catch(e=>o(e instanceof Error?e.message:String(e)))},children:`Refresh sessions`}),a&&(0,q.jsx)(`div`,{className:`code-session-list-error`,role:`alert`,children:a})]})}var Ve={"codex-app":{viewBox:`0 0 24 24`,rule:`evenodd`,d:`M9.205 8.658v-2.26c0-.19.072-.333.238-.428l4.543-2.616c.619-.357 1.356-.523 2.117-.523 2.854 0 4.662 2.212 4.662 4.566 0 .167 0 .357-.024.547l-4.71-2.759a.797.797 0 00-.856 0l-5.97 3.473zm10.609 8.8V12.06c0-.333-.143-.57-.429-.737l-5.97-3.473 1.95-1.118a.433.433 0 01.476 0l4.543 2.617c1.309.76 2.189 2.378 2.189 3.948 0 1.808-1.07 3.473-2.76 4.163zM7.802 12.703l-1.95-1.142c-.167-.095-.239-.238-.239-.428V5.899c0-2.545 1.95-4.472 4.591-4.472 1 0 1.927.333 2.712.928L8.23 5.067c-.285.166-.428.404-.428.737v6.898zM12 15.128l-2.795-1.57v-3.33L12 8.658l2.795 1.57v3.33L12 15.128zm1.796 7.23c-1 0-1.927-.332-2.712-.927l4.686-2.712c.285-.166.428-.404.428-.737v-6.898l1.974 1.142c.167.095.238.238.238.428v5.233c0 2.545-1.974 4.472-4.614 4.472zm-5.637-5.303l-4.544-2.617c-1.308-.761-2.188-2.378-2.188-3.948A4.482 4.482 0 014.21 6.327v5.423c0 .333.143.571.428.738l5.947 3.449-1.95 1.118a.432.432 0 01-.476 0zm-.262 3.9c-2.688 0-4.662-2.021-4.662-4.519 0-.19.024-.38.047-.57l4.686 2.71c.286.167.571.167.856 0l5.97-3.448v2.26c0 .19-.07.333-.237.428l-4.543 2.616c-.619.357-1.356.523-2.117.523zm5.899 2.83a5.947 5.947 0 005.827-4.756C22.287 18.339 24 15.84 24 13.296c0-1.665-.713-3.282-1.998-4.448.119-.5.19-.999.19-1.498 0-3.401-2.759-5.947-5.946-5.947-.642 0-1.26.095-1.88.31A5.962 5.962 0 0010.205 0a5.947 5.947 0 00-5.827 4.757C1.713 5.447 0 7.945 0 10.49c0 1.666.713 3.283 1.998 4.448-.119.5-.19 1-.19 1.499 0 3.401 2.759 5.946 5.946 5.946.642 0 1.26-.095 1.88-.309a5.96 5.96 0 004.162 1.713z`},claude:{viewBox:`0 0 24 24`,rule:`evenodd`,d:`M4.709 15.955l4.72-2.647.08-.23-.08-.128H9.2l-.79-.048-2.698-.073-2.339-.097-2.266-.122-.571-.121L0 11.784l.055-.352.48-.321.686.06 1.52.103 2.278.158 1.652.097 2.449.255h.389l.055-.157-.134-.098-.103-.097-2.358-1.596-2.552-1.688-1.336-.972-.724-.491-.364-.462-.158-1.008.656-.722.881.06.225.061.893.686 1.908 1.476 2.491 1.833.365.304.145-.103.019-.073-.164-.274-1.355-2.446-1.446-2.49-.644-1.032-.17-.619a2.97 2.97 0 01-.104-.729L6.283.134 6.696 0l.996.134.42.364.62 1.414 1.002 2.229 1.555 3.03.456.898.243.832.091.255h.158V9.01l.128-1.706.237-2.095.23-2.695.08-.76.376-.91.747-.492.584.28.48.685-.067.444-.286 1.851-.559 2.903-.364 1.942h.212l.243-.242.985-1.306 1.652-2.064.73-.82.85-.904.547-.431h1.033l.76 1.129-.34 1.166-1.064 1.347-.881 1.142-1.264 1.7-.79 1.36.073.11.188-.02 2.856-.606 1.543-.28 1.841-.315.833.388.091.395-.328.807-1.969.486-2.309.462-3.439.813-.042.03.049.061 1.549.146.662.036h1.622l3.02.225.79.522.474.638-.079.485-1.215.62-1.64-.389-3.829-.91-1.312-.329h-.182v.11l1.093 1.068 2.006 1.81 2.509 2.33.127.578-.322.455-.34-.049-2.205-1.657-.851-.747-1.926-1.62h-.128v.17l.444.649 2.345 3.521.122 1.08-.17.353-.608.213-.668-.122-1.374-1.925-1.415-2.167-1.143-1.943-.14.08-.674 7.254-.316.37-.729.28-.607-.461-.322-.747.322-1.476.389-1.924.315-1.53.286-1.9.17-.632-.012-.042-.14.018-1.434 1.967-2.18 2.945-1.726 1.845-.414.164-.717-.37.067-.662.401-.589 2.388-3.036 1.44-1.882.93-1.086-.006-.158h-.055L4.132 18.56l-1.13.146-.487-.456.061-.746.231-.243 1.908-1.312-.006.006z`},cursor:{viewBox:`675 357 250 286`,d:`M920.015 424.958L805.919 359.086C802.256 356.97 797.735 356.97 794.071 359.086L679.981 424.958C676.901 426.736 675 430.025 675 433.587V566.419C675 569.981 676.901 573.269 679.981 575.048L794.077 640.92C797.74 643.036 802.261 643.036 805.925 640.92L920.02 575.048C923.1 573.269 925.001 569.981 925.001 566.419V433.587C925.001 430.025 923.1 426.736 920.02 424.958H920.015ZM912.848 438.911L802.706 629.682C801.961 630.968 799.995 630.443 799.995 628.954V504.039C799.995 501.543 798.662 499.234 796.498 497.981L688.321 435.526C687.036 434.781 687.561 432.816 689.05 432.816H909.334C912.462 432.816 914.417 436.206 912.853 438.917H912.848V438.911Z`},grok:{viewBox:`0 0 24 24`,rule:`evenodd`,d:`M9.27 15.29l7.978-5.897c.391-.29.95-.177 1.137.272.98 2.369.542 5.215-1.41 7.169-1.951 1.954-4.667 2.382-7.149 1.406l-2.711 1.257c3.889 2.661 8.611 2.003 11.562-.953 2.341-2.344 3.066-5.539 2.388-8.42l.006.007c-.983-4.232.242-5.924 2.75-9.383.06-.082.12-.164.179-.248l-3.301 3.305v-.01L9.267 15.292M7.623 16.723c-2.792-2.67-2.31-6.801.071-9.184 1.761-1.763 4.647-2.483 7.166-1.425l2.705-1.25a7.808 7.808 0 00-1.829-1A8.975 8.975 0 005.984 5.83c-2.533 2.536-3.33 6.436-1.962 9.764 1.022 2.487-.653 4.246-2.34 6.022-.599.63-1.199 1.259-1.682 1.925l7.62-6.815`}};function He({provider:e}){let t=Ve[e];return(0,q.jsx)(`svg`,{className:`code-provider-glyph`,viewBox:t.viewBox,width:`16`,height:`16`,"aria-hidden":`true`,focusable:`false`,fill:`currentColor`,...t.rule?{fillRule:`evenodd`,clipRule:`evenodd`}:{},children:(0,q.jsx)(`path`,{d:t.d})})}function Ue(){return(0,q.jsx)(`svg`,{viewBox:`0 0 20 20`,width:`16`,height:`16`,"aria-hidden":`true`,focusable:`false`,children:(0,q.jsx)(`path`,{d:`M10 16V4.6M5.2 9.4 10 4.4l4.8 5`,fill:`none`,stroke:`currentColor`,strokeWidth:`1.7`,strokeLinecap:`round`,strokeLinejoin:`round`})})}function We(){return(0,q.jsx)(`svg`,{viewBox:`0 0 20 20`,width:`16`,height:`16`,"aria-hidden":`true`,focusable:`false`,children:(0,q.jsx)(`rect`,{x:`6`,y:`6`,width:`8`,height:`8`,rx:`1.6`,fill:`currentColor`})})}function Ge({muted:e}){return(0,q.jsxs)(`svg`,{viewBox:`0 0 20 20`,width:`16`,height:`16`,"aria-hidden":`true`,focusable:`false`,children:[(0,q.jsx)(`path`,{d:`M10 3.6a2 2 0 0 1 2 2v4.2a2 2 0 0 1-4 0V5.6a2 2 0 0 1 2-2ZM5.4 9.6a4.6 4.6 0 0 0 9.2 0M10 14.4V16.4`,fill:`none`,stroke:`currentColor`,strokeWidth:`1.6`,strokeLinecap:`round`,strokeLinejoin:`round`}),e&&(0,q.jsx)(`path`,{d:`M4.6 4.6 15.4 15.4`,fill:`none`,stroke:`currentColor`,strokeWidth:`1.6`,strokeLinecap:`round`})]})}function Ke(){return(0,q.jsx)(`svg`,{className:`code-footer-check`,viewBox:`0 0 20 20`,width:`16`,height:`16`,"aria-hidden":`true`,focusable:`false`,children:(0,q.jsx)(`path`,{d:`m4.8 10.4 3.3 3.3 7.1-7.4`,fill:`none`,stroke:`currentColor`,strokeWidth:`1.8`,strokeLinecap:`round`,strokeLinejoin:`round`})})}function qe(){if(typeof MediaRecorder>`u`)return``;for(let e of[`audio/webm;codecs=opus`,`audio/mp4`,`audio/ogg;codecs=opus`])if(MediaRecorder.isTypeSupported(e))return e;return``}function Je(e){return e.includes(`mp4`)?`.mp4`:e.includes(`ogg`)?`.ogg`:`.webm`}function J(e){let t=e?.name;return t===`NotAllowedError`?`Microphone access was denied.`:t===`NotFoundError`?`No microphone was found.`:t===`NotReadableError`||t===`AbortError`?`The microphone is in use by another application.`:e instanceof Error?e.message:`Dictation failed.`}function Ye(e,t){let[n,r]=(0,u.useState)(`unsupported`),[i,a]=(0,u.useState)(null),o=(0,u.useRef)(null),s=(0,u.useRef)(null),c=(0,u.useRef)([]),l=(0,u.useRef)(!0);(0,u.useEffect)(()=>{let e=typeof MediaRecorder<`u`&&typeof navigator<`u`&&!!navigator.mediaDevices?.getUserMedia;return r(e?`idle`:`unsupported`),()=>{l.current=!1,o.current?.state===`recording`&&o.current.stop(),s.current?.getTracks().forEach(e=>e.stop())}},[]);let d=(0,u.useCallback)(async(t,n)=>{r(`transcribing`);try{let r=await fetch(`/api/voice`,{method:`POST`,headers:{"Content-Type":n||`audio/webm`,"X-Voice-Ext":Je(n),"X-Stt-Only":`true`},body:t}),i=await r.json().catch(()=>null);if(!r.ok)throw Error(i?.error||`Transcription failed (${r.status}).`);let o=i?.text?.trim();if(!l.current)return;o?e(o):a(`Nothing was transcribed.`)}catch(e){l.current&&a(J(e))}finally{l.current&&r(`idle`)}},[e]),f=(0,u.useCallback)(()=>{if(!(n===`unsupported`||n===`transcribing`||t)){if(n===`recording`){o.current?.stop();return}a(null),(async()=>{let e;try{e=await navigator.mediaDevices.getUserMedia({audio:!0})}catch(e){a(J(e));return}if(!l.current){e.getTracks().forEach(e=>e.stop());return}s.current=e;let t=qe(),n;try{n=new MediaRecorder(e,t?{mimeType:t}:{})}catch(t){e.getTracks().forEach(e=>e.stop()),a(J(t));return}o.current=n,c.current=[],n.ondataavailable=e=>{e.data.size>0&&c.current.push(e.data)},n.onerror=()=>{a(`Recording failed.`)},n.onstop=()=>{e.getTracks().forEach(e=>e.stop()),s.current=null,o.current=null;let n=new Blob(c.current,{type:t||`audio/webm`});if(c.current=[],l.current){if(n.size===0){r(`idle`),a(`Nothing was recorded.`);return}d(n,t)}},n.start(),r(`recording`)})()}},[t,n,d]);return{status:n,reason:n===`unsupported`?`Dictation needs microphone access, which this browser context does not provide.`:n===`recording`?`Stop dictation`:n===`transcribing`?`Transcribing…`:`Dictation`,error:i,toggle:f}}function Xe(e){let t=(0,u.useRef)(!1),n=(0,u.useRef)(!1),r=(0,u.useRef)(!1),[i,a]=(0,u.useState)(null),o=Ye((0,u.useCallback)(t=>{let n=e.inputText;e.onInputChange(n?`${n.replace(/\s+$/,``)} ${t}`:t)},[e.inputText,e.onInputChange]),e.readOnly);async function s(){if(e.canSend&&e.inputText.trim()&&!n.current){n.current=!0,a(null);try{await e.onSubmit()}catch(e){a(e instanceof Error?e.message:String(e))}finally{n.current=!1}}}async function c(){if(e.canStop&&!r.current){r.current=!0,a(null);try{await e.onStop()}catch(e){a(e instanceof Error?e.message:String(e))}finally{r.current=!1}}}function l(e){e.nativeEvent.isComposing||t.current||e.nativeEvent.keyCode===229||e.key===`Enter`&&!e.shiftKey&&!e.altKey&&!e.ctrlKey&&!e.metaKey&&(e.preventDefault(),s())}return(0,q.jsxs)(`div`,{className:`code-composer`,children:[(0,q.jsxs)(`div`,{className:`code-composer-input-shell`,children:[(0,q.jsx)(`textarea`,{className:`code-composer-input`,"aria-label":`Code prompt`,value:e.inputText,onChange:t=>e.onInputChange(t.target.value),onKeyDown:l,onCompositionStart:()=>{t.current=!0},onCompositionEnd:()=>{t.current=!1},placeholder:e.busy?`Draft a follow-up while this turn runs…`:`Describe a task or ask a question…`,rows:2,readOnly:e.readOnly}),(0,q.jsx)(`span`,{className:`code-composer-hint`,children:`Enter to send · Shift+Enter for a new line`})]}),(0,q.jsxs)(`div`,{className:`code-composer-actions`,children:[(0,q.jsx)(`button`,{type:`button`,className:`code-composer-icon-button${o.status===`recording`?` is-recording`:``}`,"aria-label":o.status===`recording`?`Stop dictation`:`Dictation`,"aria-pressed":o.status===`recording`,disabled:o.status===`unsupported`||o.status===`transcribing`||e.readOnly,title:o.reason,onClick:o.toggle,children:(0,q.jsx)(Ge,{muted:o.status===`unsupported`})}),e.busy?(0,q.jsx)(`button`,{type:`button`,className:`code-composer-send code-composer-stop`,"aria-label":`Stop current turn`,title:e.stopping?`Stopping`:`Stop current turn`,disabled:!e.canStop||e.stopping,onClick:()=>void c(),children:(0,q.jsx)(We,{})}):(0,q.jsx)(`button`,{type:`button`,className:`code-composer-send`,"aria-label":`Send prompt`,title:e.pending?`Sending`:`Send prompt`,disabled:!e.canSend||!e.inputText.trim(),onClick:()=>void s(),children:(0,q.jsx)(Ue,{})})]}),(e.stopping||e.pending||o.status===`recording`||o.status===`transcribing`)&&(0,q.jsx)(`span`,{className:`code-composer-status`,role:`status`,children:e.stopping?`Stopping…`:e.pending?`Sending…`:o.status===`recording`?`Recording…`:`Transcribing…`}),(i||o.error)&&(0,q.jsx)(`div`,{className:`code-action-error`,role:`alert`,children:i??o.error})]})}function Ze(e){if(!e||!Number.isFinite(e.totalTokens)||e.totalTokens<0)return{state:`hidden`};let t=e.modelContextWindow;if(t===null||!Number.isFinite(t)||t<=0)return{state:`counted`,usedTokens:e.totalTokens};let n=Math.round(e.totalTokens/t*100);return{state:`measured`,usedTokens:e.totalTokens,maxTokens:t,percent:Math.min(100,n),over:n>100}}function Qe(e,t){let n=e/t;return n<10?n.toFixed(1):String(Math.round(n))}function Y(e){if(!Number.isFinite(e)||e<0)return`—`;let t=Math.round(e);if(t<1e3)return String(t);let n=Qe(t,1e3);return Number(n)<1e3?`${n}k`:`${Qe(t,1e6)}M`}function $e(e){return e===null||!Number.isFinite(e)||e<0?`—`:e.toLocaleString(`en-US`)}function X(e){return e===null?`—`:Y(e)}function et(e){return e>=90?`critical`:e>=75?`high`:`normal`}function tt(e){return e.state===`hidden`?``:e.state===`counted`?`Context: ${Y(e.usedTokens)} tokens used, window unknown`:e.over?`Context: over the window, ${Y(e.usedTokens)} of ${Y(e.maxTokens)} tokens`:`Context: ${e.percent}% used, ${Y(e.usedTokens)} of ${Y(e.maxTokens)} tokens`}function nt({usage:e}){let t=Ze(e),[n,r]=(0,u.useState)(!1),[i,a]=(0,u.useState)(!1),o=n||i,s=(0,u.useId)();if(t.state===`hidden`)return null;let c=tt(t),l=t.state===`measured`?t.over?`critical`:et(t.percent):`normal`,d=2*Math.PI*7,f=t.state===`measured`?t.percent/100*d:0;return(0,q.jsxs)(`div`,{className:`code-context-usage`,onPointerEnter:()=>r(!0),onPointerLeave:()=>r(!1),children:[(0,q.jsxs)(`button`,{type:`button`,className:`code-context-trigger is-${l}`,"aria-label":c,"aria-describedby":o?s:void 0,onFocus:()=>a(!0),onBlur:()=>a(!1),children:[t.state===`measured`?(0,q.jsxs)(`svg`,{className:`code-context-ring`,viewBox:`0 0 18 18`,"aria-hidden":`true`,children:[(0,q.jsx)(`circle`,{className:`code-context-ring-track`,cx:`9`,cy:`9`,r:`7`}),(0,q.jsx)(`circle`,{className:`code-context-ring-fill`,cx:`9`,cy:`9`,r:`7`,strokeDasharray:`${f} ${d}`})]}):null,(0,q.jsx)(`span`,{className:`code-context-value`,children:t.state===`measured`?t.over?`over`:`${t.percent}%`:Y(t.usedTokens)})]}),o&&(0,q.jsxs)(`div`,{id:s,className:`code-context-detail`,role:`note`,children:[(0,q.jsx)(`p`,{className:`code-context-detail-total`,children:t.state===`measured`?`${Y(t.usedTokens)} of ${Y(t.maxTokens)} tokens`:`${Y(t.usedTokens)} tokens used`}),t.state===`measured`&&t.over&&(0,q.jsx)(`p`,{className:`code-context-detail-note`,children:`Past the window the runtime last reported.`}),t.state===`counted`&&(0,q.jsx)(`p`,{className:`code-context-detail-note`,children:`This runtime did not report a context window.`}),(0,q.jsxs)(`dl`,{className:`code-context-breakdown`,children:[(0,q.jsxs)(`div`,{children:[(0,q.jsx)(`dt`,{children:`Used`}),(0,q.jsx)(`dd`,{children:$e(e?.totalTokens??null)})]}),(0,q.jsxs)(`div`,{children:[(0,q.jsx)(`dt`,{children:`Input`}),(0,q.jsx)(`dd`,{children:X(e?.inputTokens??null)})]}),(0,q.jsxs)(`div`,{children:[(0,q.jsx)(`dt`,{children:`Cached`}),(0,q.jsx)(`dd`,{children:X(e?.cachedInputTokens??null)})]}),(0,q.jsxs)(`div`,{children:[(0,q.jsx)(`dt`,{children:`Output`}),(0,q.jsx)(`dd`,{children:X(e?.outputTokens??null)})]}),(0,q.jsxs)(`div`,{children:[(0,q.jsx)(`dt`,{children:`Reasoning`}),(0,q.jsx)(`dd`,{children:X(e?.reasoningOutputTokens??null)})]})]}),e?.processedTokens!=null&&(0,q.jsxs)(`p`,{className:`code-context-detail-note`,children:[`Processed across the conversation: `,Y(e.processedTokens)]})]})]})}function Z({label:e,value:t,options:n,disabled:r,onChange:i,displayValue:a,triggerContent:o,filterable:s,filterPlaceholder:c,className:l,title:f}){let p=(0,u.useId)(),m=(0,u.useRef)(null),h=(0,u.useRef)(null),g=(0,u.useRef)(null),[_,v]=(0,u.useState)(null),[y,b]=(0,u.useState)(``),x=n.find(e=>e.value===t),S=(0,u.useMemo)(()=>{let e=y.trim().toLowerCase();return!s||!e?n:n.filter(t=>t.value.toLowerCase().includes(e)||t.label.toLowerCase().includes(e))},[s,n,y]);function C(e=!0){v(null),b(``),e&&m.current?.focus()}function w(){let e=m.current?.getBoundingClientRect();if(!e||r)return;let t=Math.max(192,Math.min(s?340:260,window.innerWidth-28)),n=Math.max(0,e.top-16),i=Math.max(0,window.innerHeight-e.bottom-16),a={left:Math.max(14,Math.min(e.left,window.innerWidth-t-14)),width:t};v(n>=i?{...a,bottom:window.innerHeight-e.top+8,maxHeight:Math.min(288,n)}:{...a,bottom:`auto`,top:e.bottom+8,maxHeight:Math.min(288,i)})}(0,u.useEffect)(()=>{if(!_)return;if(s)g.current?.focus();else{let e=h.current?.querySelectorAll(`button:not(:disabled)`);([...e??[]].find(e=>e.getAttribute(`aria-selected`)===`true`)??e?.[0])?.focus()}let e=e=>{!h.current?.contains(e.target)&&!m.current?.contains(e.target)&&C(!1)},t=()=>C(!1);return document.addEventListener(`pointerdown`,e),window.addEventListener(`resize`,t),()=>{document.removeEventListener(`pointerdown`,e),window.removeEventListener(`resize`,t)}},[_,s]),(0,u.useEffect)(()=>{r&&(v(null),b(``))},[r]);function T(e){if(e.key===`Escape`){e.preventDefault(),C();return}if(e.key===`Tab`){C(!1);return}let t=[...h.current?.querySelectorAll(`button:not(:disabled)`)??[]];if(t.length===0)return;let n=t.findIndex(e=>e===document.activeElement),r;if(e.key===`ArrowDown`)r=(n+1)%t.length;else if(e.key===`ArrowUp`)r=(n-1+t.length)%t.length;else if(e.key===`Home`)r=0;else if(e.key===`End`)r=t.length-1;else return;e.preventDefault(),t[r]?.focus()}let E=`${e}: ${x?.label??a??(t||`not selected`)}`;return(0,q.jsxs)(`div`,{className:`code-footer-menu${l?` ${l}`:``}`,children:[(0,q.jsx)(`button`,{ref:m,type:`button`,className:`code-footer-menu-trigger${o?` is-icon`:``}`,"aria-label":E,"aria-haspopup":`listbox`,"aria-expanded":!!_,"aria-controls":_?p:void 0,disabled:r,title:f??x?.detail??E,onClick:()=>_?C():w(),onKeyDown:e=>{(e.key===`ArrowDown`||e.key===`ArrowUp`)&&(e.preventDefault(),w())},children:o??(0,q.jsxs)(q.Fragment,{children:[(0,q.jsx)(`span`,{className:`code-footer-label`,children:e}),(0,q.jsx)(`strong`,{children:x?.label??a??(t||`Not selected`)})]})}),_&&(0,d.createPortal)((0,q.jsxs)(`div`,{ref:h,id:p,role:`listbox`,"aria-label":e,className:`code-footer-dropup code-footer-floating`,style:_,onKeyDown:T,children:[s&&(0,q.jsx)(`input`,{ref:g,type:`text`,className:`code-footer-filter`,value:y,"aria-label":`Filter ${e.toLowerCase()}`,placeholder:c??`Filter…`,onChange:e=>b(e.target.value)}),(0,q.jsxs)(`div`,{className:`code-footer-dropup-list`,children:[S.map(e=>(0,q.jsxs)(`button`,{type:`button`,role:`option`,"aria-selected":e.value===t,disabled:e.disabled,className:`code-footer-dropup-option`,title:e.detail??e.label,onClick:()=>{i(e.value),C()},children:[e.icon&&(0,q.jsx)(`span`,{className:`code-footer-option-icon`,children:e.icon}),(0,q.jsxs)(`span`,{className:`code-footer-option-text`,children:[(0,q.jsx)(`strong`,{children:e.label}),e.detail&&(0,q.jsx)(`small`,{children:e.detail})]}),e.value===t&&(0,q.jsx)(Ke,{})]},e.value)),S.length===0&&(0,q.jsxs)(`p`,{className:`code-footer-dropup-empty`,role:`note`,children:[`No match for “`,y.trim(),`”.`]})]})]}),document.body)]})}function rt({controller:e,onNotice:t}){let n=e.selection,r=e.catalog?.providers.find(e=>e.id===n.provider),i=e.session?.capabilities??r?.capabilities,a=e.selectedId!==null,o=e.pending||e.busy||e.creationUnknown||e.operation.kind!==`idle`||a&&(!e.synced||e.session?.status!==`idle`||e.session?.archivedAt!==null),[s,c]=(0,u.useState)(!1),[l,d]=(0,u.useState)(null),f=(0,u.useRef)(!1),p=(0,u.useRef)(t);p.current=t,(0,u.useEffect)(()=>{if(n.permissionMode!==`auto`){p.current?.({id:`code:permission-mode`,clear:!0});return}p.current?.({id:`code:permission-mode`,variant:`warning`,message:`Auto (YOLO): actions may run without approval.`,durationMs:1/0})},[n.permissionMode]);async function m(t){if(!(o||f.current)){f.current=!0,c(!0),d(null);try{await e.setSelection(t)}catch(e){d(e instanceof Error?e.message:String(e))}finally{f.current=!1,c(!1)}}}let h=o||s,g=r?.effortsByModel?.[n.model]??i?.efforts??[],_=e.session?.capabilities.efforts,v=_?g.filter(e=>_.includes(e)):g,y=r?.models??[];return(0,q.jsxs)(q.Fragment,{children:[(0,q.jsxs)(`div`,{className:`code-composer-footer`,children:[(0,q.jsx)(Z,{label:`Runtime`,value:n.provider,className:`code-footer-runtime`,disabled:a?!e.catalog:h||!e.catalog,triggerContent:(0,q.jsx)(He,{provider:n.provider}),title:K[n.provider],options:Object.keys(K).map(t=>{let r=e.catalog?.providers.find(e=>e.id===t);return{value:t,label:a&&t!==n.provider?`New ${K[t]} session`:K[t],disabled:!r?.available||a&&t===n.provider,icon:(0,q.jsx)(He,{provider:t}),detail:r?.reason??(r?.available?void 0:`Availability unknown`)}}),onChange:t=>{a?e.setSelection({provider:t}).catch(e=>d(e instanceof Error?e.message:String(e))):m({provider:t})}}),(0,q.jsx)(Z,{label:`Permission`,value:n.permissionMode,displayValue:Oe[n.permissionMode],disabled:h||!i?.permissions,options:(i?.permissionModes??[]).map(e=>({value:e,label:Oe[e],detail:ke[e]})),onChange:e=>void m({permissionMode:e})}),(0,q.jsx)(`span`,{className:`code-composer-footer-spacer`,"aria-hidden":`true`}),(0,q.jsx)(nt,{usage:e.session?.contextUsage}),(0,q.jsx)(Z,{label:`Model`,value:n.model,className:`code-footer-model`,disabled:h||y.length===0,filterable:!0,filterPlaceholder:`Filter models…`,displayValue:n.model||`Select model`,options:y.map(e=>({value:e,label:e})),onChange:e=>void m({model:e})}),v.length>0&&(0,q.jsx)(Z,{label:`Effort`,value:n.effort??``,className:`code-footer-effort`,displayValue:n.effort??`Default`,options:[{value:``,label:`Native default`},...v.map(e=>({value:e,label:e}))],disabled:h,onChange:e=>void m({effort:e||null})}),a&&(0,q.jsx)(`button`,{type:`button`,className:`code-inline-action`,onClick:e.newSession,children:`New session`})]}),y.length===0&&r?.available&&(0,q.jsxs)(`div`,{className:`code-selection-notice`,children:[`This runtime published no models.`,(0,q.jsx)(`button`,{type:`button`,className:`code-inline-action`,onClick:()=>{e.refresh().catch(e=>d(e instanceof Error?e.message:String(e)))},children:`Refresh catalog`})]}),!r?.available&&(0,q.jsxs)(`div`,{className:`code-selection-notice`,children:[r?.reason??`Runtime availability has not been confirmed.`,(0,q.jsx)(`button`,{type:`button`,className:`code-inline-action`,onClick:()=>{e.refresh().catch(e=>d(e instanceof Error?e.message:String(e)))},children:`Refresh availability`})]}),(s||e.operation.kind===`patching`)&&(0,q.jsx)(`span`,{role:`status`,children:`Saving settings…`}),l&&(0,q.jsx)(`div`,{className:`code-action-error`,role:`alert`,children:l})]})}function it({permission:e,operation:t,eligible:n,onAnswer:r}){let i=(0,u.useRef)(!1),[a,o]=(0,u.useState)(!1),[s,c]=(0,u.useState)(null);async function l(a){if(!(!n||i.current||t?.pending)){i.current=!0,o(!0),c(null);try{await r(e,a)}catch(e){c(e instanceof Error?e.message:String(e))}finally{i.current=!1,o(!1)}}}return(0,q.jsxs)(`section`,{className:`code-permission-card`,"aria-label":e.title,children:[(0,q.jsxs)(`div`,{className:`code-permission-title`,children:[(0,q.jsx)(`strong`,{children:e.title}),(0,q.jsx)(`p`,{children:e.detail}),!n&&(0,q.jsx)(`small`,{children:`Updating permission availability…`}),(a||t?.pending)&&(0,q.jsx)(`small`,{role:`status`,children:`Checking decision…`}),(t?.error||s)&&(0,q.jsx)(`div`,{className:`code-action-error`,role:`alert`,children:t?.error||s})]}),(0,q.jsxs)(`div`,{className:`code-permission-actions`,children:[e.options.map(e=>(0,q.jsx)(`button`,{type:`button`,className:`code-permission-btn`,disabled:!n||a||t?.pending,onClick:()=>void l(e.optionId),children:e.label},e.optionId)),e.options.length===0&&(0,q.jsx)(`span`,{children:`No native actions available. Refresh this session.`})]})]})}function at({permissions:e,operations:t,session:n,synced:r,onAnswer:i}){return e.length?(0,q.jsxs)(`aside`,{className:`code-permissions`,"aria-label":`Pending permissions`,tabIndex:-1,id:`code-pending-permissions`,children:[(0,q.jsxs)(`div`,{className:`code-permissions-heading`,role:`status`,children:[e.length,` pending · `,n?K[n.provider]:`Session updating`]}),e.map(e=>(0,q.jsx)(it,{permission:e,operation:t[e.permissionId],eligible:r&&n!==null&&n.archivedAt===null&&n.sessionId===e.sessionId&&n.turnId===e.turnId&&n.epoch===e.epoch&&(n.status===`starting`||n.status===`streaming`),onAnswer:i},`${e.sessionId}:${e.permissionId}`))]}):null}var ot=92,st=6;function ct(e){let[{virtualItems:t,totalSize:s},c]=(0,u.useState)({virtualItems:[],totalSize:0}),l=(0,u.useRef)(null);l.current||=new o({count:e.count,getScrollElement:()=>e.scrollElementRef.current,estimateSize:e.estimateSize||(()=>ot),overscan:st,getItemKey:e.getItemKey,indexAttribute:`data-code-transcript-idx`,useAnimationFrameWithResizeObserver:!0,observeElementRect:n,observeElementOffset:r,scrollToFn:i,measureElement:a,onChange:e=>{c({virtualItems:e.getVirtualItems(),totalSize:e.getTotalSize()})}});let d=l.current;return(0,u.useEffect)(()=>d._didMount(),[d]),(0,u.useEffect)(()=>{d.measure()},[d,e.resetKey]),(0,u.useEffect)(()=>()=>{l.current=null},[]),(0,u.useLayoutEffect)(()=>{d.setOptions({...d.options,count:e.count,getItemKey:e.getItemKey,estimateSize:e.estimateSize||(()=>ot)}),d._willUpdate(),c({virtualItems:d.getVirtualItems(),totalSize:d.getTotalSize()})},[e.count,e.estimateSize,e.getItemKey,d]),{restoreAnchor:(e,t)=>{let n=d.getOffsetForIndex(e,`start`);n&&d.scrollToOffset(n[0]+t,{behavior:`auto`})},measureElement:e=>{e&&d.measureElement(e)},virtualItems:t,totalSize:s}}var lt=64,ut=64;function dt({items:e,sessionKey:t,transcriptRef:n,virtual:r}){let i=(0,u.useRef)(new Map),a=(0,u.useRef)(!0),[o,s]=(0,u.useState)(!1),c=(0,u.useRef)({sessionKey:``,firstId:``}),l=(0,u.useRef)({items:e,virtual:r,sessionKey:t});l.current={items:e,virtual:r,sessionKey:t};let d=(0,u.useCallback)(()=>{a.current=!0,s(!1);let e=n.current;e&&(e.scrollTop=e.scrollHeight)},[n]);return(0,u.useLayoutEffect)(()=>{let e=n.current;if(!e)return;let t=()=>{let t=l.current,n=t.virtual.virtualItems.find(t=>t.end>e.scrollTop),r={itemId:n?t.items[n.index]?.itemId??null:null,offset:n?e.scrollTop-n.start:0,following:a.current};if(i.current.delete(t.sessionKey),i.current.set(t.sessionKey,r),i.current.size>lt){let e=i.current.keys().next().value;e!==void 0&&i.current.delete(e)}},r=()=>{l.current.items.length&&(a.current=e.scrollHeight-e.scrollTop-e.clientHeight<=ut,s(!a.current),t())};return e.addEventListener(`scroll`,r,{passive:!0}),()=>e.removeEventListener(`scroll`,r)},[n]),(0,u.useLayoutEffect)(()=>{let o=n.current;if(!o)return;let l=e[0]?.itemId??``,u=c.current.sessionKey!==t,d=!u&&c.current.firstId!==l;c.current={sessionKey:t,firstId:l};let f=i.current.get(t);if(u&&(a.current=f?.following??!0,s(!a.current)),a.current){o.scrollTop=o.scrollHeight;return}if((u||d)&&f?.itemId){let t=e.findIndex(e=>e.itemId===f.itemId);t>=0&&r.restoreAnchor(t,f.offset)}},[e,t,n,r.totalSize]),{showJump:o,jumpToLatest:d}}var ft=2e3,pt=80,mt=400;function ht(e){return e<=ft?pt:Math.min(mt,Math.round(pt*e/ft))}function gt(e,t=!1,n=``){let[r,i]=(0,u.useState)({text:e,identity:n}),a=(0,u.useRef)(0),o=t||r.identity!==n||!e.startsWith(r.text);return(0,u.useEffect)(()=>{if(r.text===e&&r.identity===n)return;let t=()=>{a.current=Date.now(),i({text:e,identity:n})},s=ht(e.length)-(Date.now()-a.current);if(o||s<=0){t();return}let c=window.setTimeout(t,s);return()=>window.clearTimeout(c)},[e,n,o,r]),o?e:r.text}var _t=[[/^(read|read_file|get_file|open_file|view|cat)$/i,`Read`,`Reading`],[/^(write|write_file|create_file|edit|edit_file|apply_patch|str_replace\w*|update_file)$/i,`Edit`,`Editing`],[/^(bash|shell|exec|exec_command|run|run_command|terminal)$/i,`Bash`,`Running`],[/^(search|grep|rg|ripgrep|glob|find|codebase_search)$/i,`Search`,`Searching`],[/^(fetch|browser\w*|web_\w*|open_url|http)$/i,`Open`,`Opening`],[/^(list|ls|list_dir|list_files)$/i,`List`,`Listing`]];function vt(e){return e===`running`||e===`pending`}function Q(e,t){let n=e.trim();if(t&&n.startsWith(t)){let e=n.slice(t.length).replace(/^[\\/]+/,``);if(e)return e}if(n.length<=64)return n;let r=n.split(/[\\/]/).filter(Boolean);return r.length>2?`…/${r.slice(-2).join(`/`)}`:`…${n.slice(-60)}`}function yt(e){let t=(e.split(/\r?\n/).find(e=>e.trim())??``).replace(/\s+/g,` `).trim();return t.length>96?`${t.slice(0,95)}…`:t}function bt(e,t){if(!e)return``;let n=e.trim();if(!n)return``;if(n.startsWith(`{`))try{let e=JSON.parse(n);for(let n of[`command`,`cmd`,`path`,`file_path`,`file`,`url`,`query`,`pattern`]){let r=e[n];if(typeof r==`string`&&r.trim())return n===`path`||n===`file`||n===`file_path`?Q(r,t):yt(r)}return``}catch{}return n.includes(`/`)&&!n.includes(` `)?Q(n,t):yt(n)}function xt(e,t){let n=vt(e.status);if(e.kind===`file_change`){let r=bt(e.tool?.input,t)||e.tool?.detail||``;return r?`${n?`Editing`:`Edit`} ${r}`:`File change`}let r=e.tool?.name?.trim()||`Tool`,i=_t.find(([e])=>e.test(r)),a=i?n?i[2]:i[1]:void 0,o=bt(e.tool?.input,t);return a?o?`${a} ${o}`:a:o?`${r} ${o}`:r}function St(e){return e.kind===`turn_cancelled`||e.status===`cancelled`?`Stopped`:e.kind===`turn_failed`||e.status===`error`?`Failed`:e.status===`running`?`Running`:e.status===`pending`?`Pending`:null}var Ct=(0,u.lazy)(()=>t(()=>import(`./MarkdownRenderer-DyVx6DxM.js`).then(e=>({default:e.MarkdownRenderer})),__vite__mapDeps([0]))),wt=new Set([`turn_started`,`turn_completed`]),Tt=44,Et=320,Dt=64;function $(e,t,n){let r=e.get(`${t}:${n.itemId}`);return r===void 0?n.status===`error`&&n.kind!==`reasoning`:r}function Ot({item:e,identity:t,onOpenLocalFile:n}){let r=gt(e.text??``,e.status!==`running`&&e.status!==`pending`,t);return r.trim()?(0,q.jsx)(u.Suspense,{fallback:(0,q.jsx)(`span`,{className:`code-plain-text`,children:r}),children:(0,q.jsx)(Ct,{markdown:r,tableMode:`linear`,onLocalFileOpen:n})}):(0,q.jsx)(`span`,{className:`code-plain-text`,children:r})}function kt({item:e,provider:t,sessionKey:n,workingDir:r=``,onOpenLocalFile:i,expanded:a,onExpandedChange:o}){let s=e.kind===`tool_call`||e.kind===`file_change`,c=e.kind===`reasoning`,l=e.kind===`assistant_message`,u=e.kind===`user_message`,d=Ne(e),f=St(e),p=e.itemId===_e,m=a??(e.status===`error`&&e.kind!==`reasoning`),h=e.status===`running`||e.status===`pending`,g=h?null:f,_=u?`You`:l?K[t]:c?`Reasoning`:e.kind===`turn_started`?`Turn started`:e.kind===`session_runtime`?`Runtime`:e.kind===`permission_request`?`Permission record`:e.kind===`notice`?`Notice`:d;return(0,q.jsxs)(`article`,{className:`code-message code-message-${s?`tool`:l?`assistant`:u?`user`:`system`} is-${e.status}${p?` is-unsent`:``}`,"data-code-item-id":e.itemId,"aria-label":`${_} · ${d}`,children:[s?(0,q.jsxs)(`details`,{className:`code-tool-card code-tool-${e.status}`,open:m,onToggle:t=>o?.(e.itemId,t.currentTarget.open),children:[(0,q.jsxs)(`summary`,{className:`code-tool-summary`,children:[(0,q.jsx)(`span`,{className:`code-tool-chevron`,"aria-hidden":`true`,children:`›`}),(0,q.jsx)(`span`,{className:`code-tool-name${h?` code-tool-name-running`:``}`,children:xt(e,r)}),g&&(0,q.jsx)(`span`,{className:`code-tool-status`,children:g})]}),m&&(0,q.jsxs)(q.Fragment,{children:[e.tool?.detail!==void 0&&(0,q.jsx)(`p`,{className:`code-tool-text`,children:e.tool.detail}),e.tool?.input!==void 0&&(0,q.jsxs)(`section`,{className:`code-tool-section`,children:[(0,q.jsx)(`span`,{className:`code-tool-section-label`,children:`Input`}),(0,q.jsx)(`pre`,{className:`code-tool-args`,children:e.tool.input})]}),e.tool?.output!==void 0&&(0,q.jsxs)(`section`,{className:`code-tool-section`,children:[(0,q.jsx)(`span`,{className:`code-tool-section-label`,children:`Output`}),(0,q.jsx)(`pre`,{className:`code-tool-output`,children:e.tool.output})]}),e.text!==void 0&&(0,q.jsx)(`pre`,{className:`code-tool-text`,children:e.text})]})]}):c?(0,q.jsxs)(`details`,{className:`code-thinking`,open:m,onToggle:t=>o?.(e.itemId,t.currentTarget.open),children:[(0,q.jsx)(`summary`,{className:`code-thinking-summary${e.status===`running`?` code-tool-name-running`:``}`,children:e.status===`running`?`Thinking…`:`Reasoning`}),m&&(0,q.jsx)(`div`,{className:`code-thinking-text`,children:e.text})]}):(0,q.jsxs)(q.Fragment,{children:[(0,q.jsxs)(`span`,{className:`code-message-role`,children:[_,l&&e.phase===`commentary`?` · Commentary`:``,f&&` · ${p?`Sending`:f}`]}),(0,q.jsx)(`div`,{className:`code-message-text`,children:l?(0,q.jsx)(Ot,{item:e,identity:`${n}:${e.itemId}`,onOpenLocalFile:i}):(0,q.jsx)(`span`,{className:`code-plain-text`,children:e.text??e.permission?.title??``})}),e.permission?.detail&&(0,q.jsx)(`p`,{className:`code-plain-text`,children:e.permission.detail})]}),(l||c)&&(e.status===`cancelled`||e.status===`error`)&&(0,q.jsxs)(`span`,{className:`code-partial-label`,children:[`Partial output · `,d]}),e.truncation&&(0,q.jsxs)(`p`,{className:`code-truncation`,role:`note`,children:[`Output truncated: `,e.truncation.storedChars.toLocaleString(),` of `,e.truncation.sourceChars.toLocaleString(),` characters retained.`]})]})}function At({items:e,provider:t,sessionKey:n,workingDir:r,loading:i,hasOlderHistory:a,loadOlderHistory:o,permissionCount:s,onOpenLocalFile:c}){let l=(0,u.useRef)(null),d=(0,u.useMemo)(()=>e.filter(e=>!wt.has(e.kind)),[e]),f=(0,u.useRef)(d);f.current=d;let[p,m]=(0,u.useState)(()=>new Map),h=(0,u.useRef)(p);h.current=p;let[g,_]=(0,u.useState)(!1),[v,y]=(0,u.useState)(null),b=(0,u.useRef)(!1),x=d[0]?.itemId,S=(0,u.useCallback)(e=>{let t=f.current[e];return t?`${n}:${t.itemId}${$(h.current,n,t)?`:open`:``}`:`${n}:${e}`},[n,x,p]),C=(0,u.useCallback)(e=>{let t=f.current[e];return t?.kind!==`tool_call`&&t?.kind!==`file_change`&&t?.kind!==`reasoning`?64+Math.min(420,(t?.text?.length??0)/6):t&&$(p,n,t)?Et:Tt},[p,n]),w=ct({count:d.length,resetKey:n,scrollElementRef:l,getItemKey:S,estimateSize:C}),{showJump:T,jumpToLatest:E}=dt({items:d,sessionKey:n,transcriptRef:l,virtual:w}),D=(0,u.useCallback)((e,t)=>{let r=`${n}:${e}`;m(e=>{if(e.get(r)===t)return e;let n=new Map(e);if(n.delete(r),n.set(r,t),n.size>Dt){let e=n.keys().next().value;e!==void 0&&n.delete(e)}return n})},[n]);async function O(){if(!b.current){b.current=!0,_(!0),y(null);try{await o()}catch(e){y({sessionKey:n,message:e instanceof Error?e.message:String(e)})}finally{b.current=!1,_(!1)}}}function k(e){if(e.target!==e.currentTarget||e.altKey||e.ctrlKey||e.metaKey)return;let t=l.current;if(!t)return;let n=Math.max(160,t.clientHeight*.78);[`j`,`d`,`PageDown`].includes(e.key)?(e.preventDefault(),t.scrollBy({top:n,behavior:`auto`})):[`k`,`u`,`PageUp`].includes(e.key)?(e.preventDefault(),t.scrollBy({top:-n,behavior:`auto`})):e.key===`End`?(e.preventDefault(),E()):e.key===`Home`&&(e.preventDefault(),t.scrollTo({top:0,behavior:`auto`}))}return(0,q.jsxs)(q.Fragment,{children:[(0,q.jsxs)(`div`,{className:`code-transcript-controls`,children:[a&&(0,q.jsx)(`button`,{type:`button`,disabled:g||i,onClick:()=>void O(),children:g?`Loading history…`:`Load older history`}),T&&(0,q.jsx)(`button`,{type:`button`,onClick:E,children:`Jump to latest`}),s>0&&(0,q.jsxs)(`button`,{type:`button`,onClick:()=>document.getElementById(`code-pending-permissions`)?.focus(),children:[`Jump to permissions (`,s,`)`]}),v?.sessionKey===n&&(0,q.jsx)(`span`,{className:`code-action-error`,role:`alert`,children:v.message})]}),(0,q.jsx)(`div`,{ref:l,className:`code-transcript`,role:`log`,"aria-label":`Code transcript`,"aria-live":`off`,tabIndex:0,onKeyDown:k,children:d.length?(0,q.jsx)(`div`,{className:`code-transcript-virtual-spacer`,style:{height:w.totalSize},children:w.virtualItems.map(e=>{let i=d[e.index];return i?(0,q.jsx)(`div`,{ref:w.measureElement,className:`code-transcript-virtual-row`,"data-code-transcript-idx":e.index,style:{transform:`translateY(${e.start}px)`},children:(0,q.jsx)(kt,{item:i,provider:t,sessionKey:n,workingDir:r,onOpenLocalFile:c,expanded:$(p,n,i),onExpandedChange:D})},e.key):null})}):(0,q.jsxs)(`div`,{className:`code-transcript-empty`,children:[(0,q.jsx)(`p`,{children:i?`Loading conversation…`:`Type a prompt below to start this conversation.`}),(0,q.jsxs)(`p`,{className:`code-transcript-cwd`,children:[`Workspace: `,r||`not set`]})]})})]})}function jt(e){return Number.isFinite(e.durationMs)&&e.durationMs>0}function Mt(e,t){let n=e.find(e=>e.id===t.id),r=e.filter(e=>e.id!==t.id);return r.push({...t,revision:(n?.revision??0)+1}),r.slice(Math.max(0,r.length-3))}function Nt(e,t){let n=e.filter(e=>e.id!==t);return n.length===e.length?e:n}function Pt(e,t){return`clear`in t?Nt(e,t.id):Mt(e,{id:t.id,message:t.message,variant:t.variant,durationMs:t.durationMs??4e3})}function Ft({toast:e,onDismiss:t}){let[n,r]=(0,u.useState)(!1),i=(0,u.useRef)(null);return(0,u.useEffect)(()=>{if(n||!jt(e))return;let r=setTimeout(()=>t(e.id),e.durationMs);return()=>clearTimeout(r)},[e.id,e.revision,e.durationMs,t,n]),(0,q.jsxs)(`div`,{ref:i,className:`code-toast code-toast-${e.variant}`,onPointerEnter:()=>r(!0),onPointerLeave:()=>r(!1),onFocusCapture:()=>r(!0),onBlurCapture:e=>{i.current?.contains(e.relatedTarget)||r(!1)},children:[(0,q.jsx)(`span`,{className:`code-toast-message`,children:e.message}),(0,q.jsx)(`button`,{type:`button`,className:`code-toast-dismiss`,"aria-label":`Dismiss notice`,onClick:()=>t(e.id),children:`×`})]})}function It({toasts:e,onDismiss:t}){return(0,q.jsx)(`div`,{className:`code-toast-host`,children:(0,q.jsx)(`div`,{className:`code-toast-region`,role:`status`,children:e.map(e=>(0,q.jsx)(Ft,{toast:e,onDismiss:t},e.id))})})}function Lt({controller:e}){let[t,n]=(0,u.useState)(!1),[r,i]=(0,u.useState)(null),a=e.session?.cwd??e.selection.cwd,o=e.selectedId!==null||e.pending||e.creationUnknown||e.operation.kind!==`idle`;async function s(){if(!(o||t)){n(!0),i(null);try{await e.pickWorkspace()}catch(e){i(e instanceof Error?e.message:String(e))}finally{n(!1)}}}return(0,q.jsxs)(`header`,{className:`code-workspace-header`,children:[(0,q.jsxs)(`div`,{className:`code-session-header`,children:[(0,q.jsx)(`span`,{className:`code-session-title`,children:e.session?.title||(e.selectedId?`Untitled session`:`New session draft`)}),(0,q.jsx)(`span`,{children:K[e.session?.provider??e.selection.provider]}),(0,q.jsxs)(`span`,{role:`status`,children:[e.session?Ae[e.session.status]:e.creationUnknown?`Creation unconfirmed`:e.operation.kind===`creating`?`Creating session`:`Draft`,e.session?.archivedAt!==null&&e.session?` · Archived`:``]})]}),(0,q.jsxs)(`div`,{className:`code-workspace-primary`,children:[o?(0,q.jsx)(`span`,{className:`code-workspace-chip`,title:a,children:a||`Workspace not set`}):(0,q.jsx)(`button`,{type:`button`,className:`code-workspace-picker`,"aria-label":`Choose Code workspace`,disabled:t,title:a||`Choose a folder`,onClick:()=>void s(),children:(0,q.jsx)(`span`,{className:`code-workspace-picker-label`,children:t?`Choosing folder…`:a||`Choose workspace`})}),e.gitInfo?.isRepo&&(0,q.jsxs)(q.Fragment,{children:[(0,q.jsxs)(`span`,{className:`code-workspace-pill`,children:[e.gitInfo.branch??`detached`,e.gitInfo.head?` · ${e.gitInfo.head}`:``]}),e.gitInfo.status&&(0,q.jsx)(`span`,{className:`code-workspace-pill${e.gitInfo.status.dirty?` is-dirty`:``}`,children:e.gitInfo.status.dirty?`${e.gitInfo.status.changed} changed · ${e.gitInfo.status.untracked} untracked`:`clean`})]}),r&&(0,q.jsx)(`span`,{className:`code-action-error`,role:`alert`,children:r})]})]})}function Rt({controller:e,endpointKey:t,onOpenLocalFile:n}){let r=`${t}:${e.selectedId??`new`}`,[i,a]=(0,u.useState)(null),[o,s]=(0,u.useState)(null),c=(0,u.useRef)(new Set),[l,d]=(0,u.useState)([]),f=(0,u.useCallback)(e=>{d(t=>Pt(t,e))},[]),p=(0,u.useCallback)(e=>d(t=>Nt(t,e)),[]),m=e.session?.archivedAt!=null,h=e.session?.status===`stopping`||e.operation.kind===`stopping`,g=e.busy||h||e.session?.status===`starting`||e.session?.status===`streaming`,_=e.catalog?.providers.find(t=>t.id===e.selection.provider),v=e.operation.kind===`unknown-send`,y=!g&&!e.pending&&!e.creationUnknown&&!m&&e.operation.kind===`idle`&&!!_?.available&&!!e.selection.cwd.trim()&&!!e.selection.model.trim()&&(e.selectedId===null||e.synced&&e.session?.status===`idle`),b=!!e.session?.turnId&&e.session.capabilities.interrupt&&g&&!h,x=!!e.session&&Me(e.session)&&e.synced&&!e.pending&&!v,S=e.operation.error||e.error||(i?.key===r?i.message:null),C=[...e.items].reverse().find(e=>e.kind===`turn_cancelled`||e.kind===`turn_failed`||e.kind===`turn_completed`),w=C&&C.kind!==`turn_completed`?e.items.find(e=>e.kind===`user_message`&&e.turnId===C.turnId)?.text:void 0;function T(e){a(null),e().catch(e=>a({key:r,message:e instanceof Error?e.message:String(e)}))}async function E(){if(e.canRetrySameSend&&!c.current.has(r)){c.current.add(r),s(r),a(null);try{await e.retrySameSend()}catch(e){a({key:r,message:e instanceof Error?e.message:String(e)})}finally{c.current.delete(r),s(e=>e===r?null:e)}}}return(0,q.jsxs)(`div`,{className:`code-canvas-main`,children:[(0,q.jsx)(Lt,{controller:e},r),(e.transport!==`connected`||e.selectedId!==null&&!e.synced)&&(0,q.jsxs)(`section`,{className:`code-transport-status is-${e.transport}`,role:`status`,children:[e.transport===`reconnecting`?`Live updates reconnecting. History may be out of date.`:e.transport===`disconnected`?`Live updates disconnected. History may be out of date.`:`Updating conversation…`,(0,q.jsx)(`button`,{type:`button`,onClick:()=>T(e.refresh),children:`Refresh`})]}),S&&(0,q.jsxs)(`section`,{className:`code-recovery-strip`,role:`alert`,children:[(0,q.jsx)(`p`,{children:S}),(0,q.jsx)(`button`,{type:`button`,onClick:()=>T(e.refresh),children:`Refresh session`}),(0,q.jsx)(`button`,{type:`button`,onClick:()=>{e.clearError(),a(null)},children:`Dismiss`})]}),e.creationUnknown&&(0,q.jsxs)(`section`,{className:`code-recovery-strip`,"aria-label":`Unconfirmed session creation`,children:[(0,q.jsx)(`strong`,{children:`Session creation not confirmed`}),(0,q.jsx)(`p`,{children:`The original session may still exist.`}),(0,q.jsx)(`p`,{children:`Your draft and choices are kept. Press Send when you are ready to create another session.`}),(0,q.jsx)(`button`,{type:`button`,onClick:e.startAnotherSession,children:`Start another session`})]}),v&&(0,q.jsxs)(`section`,{className:`code-recovery-strip`,"aria-label":`Unconfirmed send`,children:[(0,q.jsx)(`strong`,{children:`Send outcome not confirmed`}),(0,q.jsx)(`p`,{children:`Retry uses the original request. It may submit it if the server has not already accepted it.`}),(0,q.jsx)(`pre`,{className:`code-retry-preview`,"aria-label":`Original prompt`,children:e.retryText}),(0,q.jsx)(`button`,{type:`button`,disabled:!e.canRetrySameSend||o===r,onClick:()=>void E(),children:o===r?`Retrying original send…`:`Retry same send`})]}),m?(0,q.jsxs)(`section`,{className:`code-recovery-strip`,children:[(0,q.jsx)(`span`,{children:`Archived · Read-only history`}),(0,q.jsx)(`button`,{type:`button`,disabled:!e.synced||e.pending,onClick:()=>{let t=e.selectedId;t&&T(()=>e.archive(t,!1))},children:`Restore session`})]}):e.session&&(e.session.status===`failed`||e.session.status===`suspended`)&&(0,q.jsxs)(`section`,{className:`code-recovery-strip`,role:`status`,children:[(0,q.jsx)(`p`,{children:e.session.error?.message??`Native session suspended.`}),x?(0,q.jsx)(`button`,{type:`button`,onClick:()=>T(e.resume),children:`Resume session`}):(0,q.jsxs)(q.Fragment,{children:[(0,q.jsx)(`span`,{children:e.session.resume.reason??`Resume is not currently available.`}),(0,q.jsx)(`button`,{type:`button`,onClick:e.newSession,children:`New session`})]})]}),(0,q.jsx)(It,{toasts:l,onDismiss:p}),(0,q.jsx)(At,{items:e.items,provider:e.session?.provider??e.selection.provider,sessionKey:r,workingDir:e.session?.cwd??e.selection.cwd,loading:e.loading,hasOlderHistory:e.hasOlderHistory,loadOlderHistory:e.loadOlderHistory,permissionCount:e.permissions.length,onOpenLocalFile:n}),(0,q.jsx)(at,{permissions:e.permissions,operations:e.permissionOperations,session:e.session,synced:e.synced,onAnswer:e.answer}),(0,q.jsxs)(`div`,{className:`code-composer-dock`,children:[w!==void 0&&!g&&!m&&(0,q.jsxs)(`div`,{className:`code-input-recovery`,children:[(0,q.jsx)(`button`,{type:`button`,disabled:!!e.input||v,title:e.input?`Keep or clear your current draft before restoring the submitted prompt`:void 0,onClick:()=>e.setInput(w),children:`Restore submitted prompt`}),(0,q.jsx)(`span`,{children:`Restores text for editing without sending.`})]}),(0,q.jsxs)(`div`,{className:`code-composer-surface`,"aria-label":`Code composer controls`,children:[(0,q.jsx)(Xe,{inputText:e.input,canSend:y,busy:g,canStop:b,stopping:h,pending:e.pending,readOnly:m,onInputChange:e.setInput,onSubmit:e.send,onStop:e.stop},`composer:${r}`),(0,q.jsx)(rt,{controller:e,onNotice:f},`footer:${r}`)]})]})]})}function zt({port:e,workingDir:t,onWorkingDirChange:n,onOpenLocalFile:r}){let i=De({port:e,workingDir:t}),[a,o]=(0,u.useState)(null),s=(0,u.useRef)({port:e,id:i.selectedId,cwd:i.selection.cwd});(0,u.useEffect)(()=>{o(document.getElementById(`code-session-sidebar-host`))},[]),(0,u.useEffect)(()=>{let t=s.current,r={port:e,id:i.selectedId,cwd:i.selection.cwd};s.current=r,t.port===e&&t.id===null&&r.id===null&&t.cwd!==r.cwd&&n?.(r.cwd||null)},[e,i.selectedId,i.selection.cwd,n]);let c=(0,q.jsx)(Be,{controller:i},e),l=(0,q.jsx)(Rt,{controller:i,endpointKey:String(e),onOpenLocalFile:r},e);return a?(0,q.jsxs)(q.Fragment,{children:[(0,d.createPortal)((0,q.jsx)(`div`,{className:`code-manager-session-navigator-content`,children:c}),a),(0,q.jsx)(`div`,{className:`code-canvas code-canvas-workbench`,children:l})]}):(0,q.jsxs)(`div`,{className:`code-canvas`,children:[(0,q.jsx)(`div`,{className:`code-canvas-sidebar`,children:c}),l]})}export{zt as CodeCanvas};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{r as e}from"./rolldown-runtime-hePW80VL.js";import{t}from"./react-C_pPTFsM.js";import{t as n}from"./jsx-runtime-NZYk81nU.js";import{a as r,i,n as a,t as o}from"./page-shell-BeGD0rRQ.js";import{a as s,s as c}from"./fields-mlGpofqQ.js";var l=e(t(),1),u=n();function d(){return{async get(e){let t=await fetch(e);if(!t.ok)throw Error(`GET ${e} → ${t.status}`);return await t.json()},async patch(e,t){let n=await fetch(e,{method:`PATCH`,headers:{"content-type":`application/json`},body:JSON.stringify(t)});if(!n.ok)throw Error(`PATCH ${e} → ${n.status}`);return await n.json()}}}var f=[`meta.label`,`meta.group`,`meta.favorite`,`meta.hidden`,`meta.notes`];function p(e,t){let n=e?.registry?.instances?.[String(t)];return{label:n?.label??null,favorite:n?.favorite===!0,group:n?.group??null,hidden:n?.hidden===!0,notes:n?.notes??null}}function m(e){return{label:e.label||``,group:e.group||``,favorite:e.favorite,hidden:e.hidden,notes:e.notes||``}}function h(){return(0,u.jsx)(`p`,{className:`settings-empty`,role:`status`,children:`Select an instance to edit its dashboard metadata.`})}function g(e){return e.port?(0,u.jsx)(_,{...e}):(0,u.jsx)(h,{})}function _({port:e,client:t,dirty:n,registerSave:h,managerClient:g}){let{state:_,refresh:v,setData:y}=r(t,`__dashboard_meta_unused__`,[e]),[b,x]=(0,l.useState)(null),[S,C]=(0,l.useState)(null),[w,T]=(0,l.useState)({label:``,group:``,favorite:!1,hidden:!1,notes:``}),E=g||d();(0,l.useEffect)(()=>{let t=!1;return C(null),E.get(`/api/dashboard/registry`).then(n=>{t||(x(n),T(m(p(n,e))))}).catch(e=>{t||C(e instanceof Error?e.message:String(e))}),()=>{t=!0}},[e]),(0,l.useEffect)(()=>()=>{for(let e of f)n.remove(e)},[n]);let D=p(b,e),O=(0,l.useCallback)((e,t)=>n.set(e,t),[n]),k=(0,l.useCallback)(async()=>{let t=w.label.trim()||null,r=w.group.trim()||null,i=w.notes.trim()||null,a={instances:{[String(e)]:{label:t,group:r,favorite:w.favorite,hidden:w.hidden,notes:i}}},o=await E.patch(`/api/dashboard/registry`,a);x(o),T(m(p(o,e)));for(let e of f)n.remove(e)},[w,E,n,e]);return(0,l.useEffect)(()=>{if(h)return h(k),()=>h(null)},[h,k]),S?(0,u.jsx)(o,{message:S}):b?(0,u.jsx)(`form`,{className:`settings-page-form settings-form`,onSubmit:e=>{e.preventDefault(),k()},children:(0,u.jsxs)(i,{title:`Dashboard meta`,hint:`Manager-side metadata for this instance. Stored in the dashboard registry.`,children:[(0,u.jsx)(c,{id:`dashmeta-label`,label:`Label`,value:w.label,placeholder:`(unset — falls back to home folder name)`,onChange:e=>{T({...w,label:e}),O(`meta.label`,{value:e,original:D.label||``,valid:!0})}}),(0,u.jsx)(c,{id:`dashmeta-group`,label:`Group`,value:w.group,placeholder:`e.g. work, personal`,onChange:e=>{T({...w,group:e}),O(`meta.group`,{value:e,original:D.group||``,valid:!0})}}),(0,u.jsx)(s,{id:`dashmeta-favorite`,label:`Pin favorite`,value:w.favorite,onChange:e=>{T({...w,favorite:e}),O(`meta.favorite`,{value:e,original:D.favorite,valid:!0})}}),(0,u.jsx)(s,{id:`dashmeta-hidden`,label:`Hide by default`,description:`Hide from the default instance list.`,value:w.hidden,onChange:e=>{T({...w,hidden:e}),O(`meta.hidden`,{value:e,original:D.hidden,valid:!0})}}),(0,u.jsxs)(`label`,{className:`settings-field`,htmlFor:`dashmeta-notes`,children:[(0,u.jsx)(`span`,{className:`settings-field-label`,children:`Notes`}),(0,u.jsx)(`textarea`,{id:`dashmeta-notes`,rows:4,value:w.notes,placeholder:`Free-form notes only the dashboard remembers.`,onChange:e=>{let t=e.target.value;T({...w,notes:t}),O(`meta.notes`,{value:t,original:D.notes||``,valid:!0})}})]})]})}):(0,u.jsx)(a,{label:`Loading dashboard registry…`})}var v={readInstance:p,toDraft:m,META_KEYS:f};export{v as __test__,g as default};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{t as e}from"./jsx-runtime-NZYk81nU.js";import{i as t,n}from"./manager-shortcuts-jsiX-zV6.js";import{a as r,c as i,i as a,n as o,r as s,s as c,t as l}from"./shared-BI-LEt7g.js";var u=e();function d({manager:e}){if(!e)return null;let d=e,f=c(d.ui.locale),p=l[f];function m(e,t){d.onUiPatch({dashboardShortcutKeymap:{...d.ui.dashboardShortcutKeymap,[e]:t}})}return(0,u.jsxs)(`section`,{className:`dashboard-settings-section`,children:[(0,u.jsxs)(`header`,{children:[(0,u.jsx)(`h3`,{children:p.displayTitle}),(0,u.jsx)(`p`,{children:p.displayDescription})]}),(0,u.jsxs)(`div`,{className:`dashboard-settings-field-list`,children:[(0,u.jsx)(s,{id:`dashboard-show-activity-title`,label:p.fields.activity.label,scope:p.fields.activity.scope,value:d.ui.showLatestActivityTitles,description:p.fields.activity.description,onChange:e=>d.onUiPatch({showLatestActivityTitles:e})}),(0,u.jsx)(s,{id:`dashboard-show-label-editor`,label:p.fields.rename.label,scope:p.fields.rename.scope,value:d.ui.showInlineLabelEditor,description:p.fields.rename.description,onChange:e=>d.onUiPatch({showInlineLabelEditor:e})}),(0,u.jsx)(s,{id:`dashboard-show-runtime-line`,label:p.fields.runtime.label,scope:p.fields.runtime.scope,value:d.ui.showSidebarRuntimeLine,description:p.fields.runtime.description,onChange:e=>d.onUiPatch({showSidebarRuntimeLine:e})}),(0,u.jsx)(s,{id:`dashboard-show-row-actions`,label:p.fields.actions.label,scope:p.fields.actions.scope,value:d.ui.showSelectedRowActions,description:p.fields.actions.description,onChange:e=>d.onUiPatch({showSelectedRowActions:e})}),(0,u.jsx)(o,{id:`dashboard-locale`,label:p.fields.language.label,scope:p.fields.language.scope,value:f,options:r,description:p.fields.language.description,onChange:e=>d.onUiPatch({locale:e})}),(0,u.jsx)(s,{id:`dashboard-shortcuts-enabled`,label:p.fields.shortcuts.label,scope:p.fields.shortcuts.scope,value:d.ui.dashboardShortcutsEnabled,description:p.fields.shortcuts.description,onChange:e=>d.onUiPatch({dashboardShortcutsEnabled:e})}),n.map(e=>{let n=p.fields[i(e)];return(0,u.jsx)(a,{action:e,label:n.label,scope:n.scope,value:d.ui.dashboardShortcutKeymap[e],description:`${n.description} Current: ${t(d.ui.dashboardShortcutKeymap[e])}`,onChange:m},e)})]})]})}export{d as default};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{a as e,i as t,n,o as r,r as i,s as a,t as o}from"./Permissions-
|
|
1
|
+
import{a as e,i as t,n,o as r,r as i,s as a,t as o}from"./Permissions-DzNJCt8K.js";export{n as configuredPolicyLabel,o as default,i as isAllowlistValid,t as isPermissionToken,e as isPermissionsAuto,r as parsePermissionsValue,a as seedAutoAllowlist};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{r as e}from"./rolldown-runtime-hePW80VL.js";import{t}from"./react-C_pPTFsM.js";import{t as n}from"./jsx-runtime-NZYk81nU.js";import{a as r,i,n as a,r as o,t as s}from"./page-shell-BeGD0rRQ.js";import{i as c,n as l}from"./fields-mlGpofqQ.js";import{t as u}from"./InlineWarn-DIMbcbzk.js";var d=e(t(),1),f=n(),p=/^[a-zA-Z0-9._:*-]+$/,m=[`bash`,`read`,`write`,`edit`,`mcp.*`];function h(e){return e===`auto`?`Auto (YOLO)`:e===`safe`?`Safe`:e==null?`Not provided`:Array.isArray(e)&&e.every(e=>typeof e==`string`)?`Custom (${e.length} ${e.length===1?`entry`:`entries`})`:`Unrecognized`}function g(e){return e===`auto`}function _(e){return g(e)?{mode:`auto`}:e===`safe`?{mode:`safe`}:Array.isArray(e)?{mode:`custom`,tokens:e.filter(e=>typeof e==`string`).map(e=>e.trim()).filter(e=>e.length>0)}:{mode:`unknown`}}function v(e){return typeof e!=`string`||e.length===0||e.length>64?!1:p.test(e)}function y(e){return Array.isArray(e)&&e.length>0?Array.from(new Set(e.filter(v))):[...m]}function b(e){return e.length!==0&&e.every(v)}var x=[{value:`auto`,label:`Auto (YOLO)`},{value:`safe`,label:`Safe`},{value:`custom`,label:`Custom — explicit allowlist below`}];function S({port:e,client:t,dirty:n,registerSave:p}){let{state:m,refresh:g,setData:S}=r(t,`/api/settings`),[C,w]=(0,d.useState)(`auto`),[T,E]=(0,d.useState)([]),D=(0,d.useMemo)(()=>m.kind===`ready`?_(m.data.permissions):null,[m]);(0,d.useEffect)(()=>{if(m.kind!==`ready`)return;let e=_(m.data.permissions);e.mode===`custom`?(w(`custom`),E(e.tokens)):(w(e.mode===`safe`?`safe`:`auto`),E([]))},[m]),(0,d.useEffect)(()=>()=>{n.remove(`permissions`)},[n]);let O=(0,d.useCallback)(e=>n.set(`permissions`,e),[n]),k=(0,d.useMemo)(()=>D?D.mode===`custom`?D.tokens:D.mode===`safe`?`safe`:`auto`:`auto`,[D]),A=(0,d.useCallback)(e=>{if(e===`auto`){w(`auto`),E([]),O({value:`auto`,original:k,valid:!0});return}if(e===`safe`){w(`safe`),E([]),O({value:`safe`,original:k,valid:!0});return}if(e===`custom`){w(`custom`);let e=D&&D.mode===`custom`&&D.tokens.length>0?[...D.tokens]:y(null);E(e),O({value:e,original:k,valid:b(e)})}},[D,k,O]),j=(0,d.useCallback)(e=>{let t=e.map(e=>e.trim()).filter(e=>e.length>0);E(t),O({value:t,original:k,valid:b(t)})},[k,O]),M=(0,d.useCallback)(async()=>{let e=n.saveBundle();if(Object.keys(e).length===0)return;let r=await t.put(`/api/settings`,e),i=r&&typeof r==`object`&&`data`in r?r.data:r;n.clear();let a=_(i.permissions);a.mode===`custom`?(w(`custom`),E(a.tokens)):(w(a.mode===`safe`?`safe`:`auto`),E([])),S(i),await g()},[t,n,g,S]);if((0,d.useEffect)(()=>{if(p)return p(M),()=>p(null)},[p,M]),m.kind===`loading`)return(0,f.jsx)(a,{});if(m.kind===`offline`)return(0,f.jsx)(o,{port:e});if(m.kind===`error`)return(0,f.jsx)(s,{message:m.message});let N=T.filter(e=>!v(e)),P=N.length>0,F=C===`custom`&&T.length===0,I=h(m.data.permissions);return(0,f.jsxs)(`form`,{className:`settings-page-form`,onSubmit:e=>e.preventDefault(),children:[(0,f.jsxs)(i,{title:`Permissions`,hint:`Selecting a value changes the draft. Save applies it. Auto (YOLO) requests automatic approval or permission bypass. Behavior varies by runtime.`,children:[(0,f.jsx)(c,{id:`permissions-mode`,label:`Change policy to`,value:C,options:x,onChange:A}),C===`custom`&&(0,f.jsxs)(f.Fragment,{children:[(0,f.jsx)(l,{id:`permissions-allowlist`,label:`Allowlist`,value:T,onChange:j,placeholder:`bash, read, mcp.*`,error:P?`Invalid token${N.length===1?``:`s`}: ${N.join(`, `)}`:F?`Allowlist cannot be empty in Custom mode.`:null}),(0,f.jsxs)(`p`,{className:`settings-section-hint`,children:[`Each chip is a permission token. Examples: `,(0,f.jsx)(`code`,{children:`bash`}),`,`,(0,f.jsx)(`code`,{children:` read`}),`, `,(0,f.jsx)(`code`,{children:` write`}),`, `,(0,f.jsx)(`code`,{children:` mcp.*`}),`.`]}),F&&(0,f.jsx)(u,{role:`alert`,children:`An empty Custom allowlist cannot be saved. Add at least one token or switch back to Auto (YOLO).`})]})]}),(0,f.jsxs)(i,{title:`Saved policy`,hint:`Shows the saved permission policy.`,children:[(0,f.jsxs)(`p`,{className:`settings-readonly-line`,children:[(0,f.jsx)(`span`,{className:`settings-field-label`,children:`Configured policy:`}),` `,(0,f.jsx)(`span`,{children:I})]}),D?.mode===`unknown`?(0,f.jsx)(`p`,{className:`settings-section-hint`,children:`Use Agent to change this configured policy.`}):null]})]})}export{g as a,v as i,h as n,_ as o,b as r,y as s,S as t};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
:root{--surface-1:#ffffff08;--surface-2:#ffffff0a;--surface-3:#ffffff0f;--border-alpha:#ffffff14;--border-strong:#ffffff1f;--text-muted-60:color-mix(in oklab, var(--text) 60%, transparent);--font-sans-system:-apple-system, BlinkMacSystemFont, "Segoe UI", system-ui, "Apple SD Gothic Neo", "Pretendard", "Noto Sans KR", sans-serif;--font-mono-system:ui-monospace, "SF Mono", Menlo, Consolas, "Liberation Mono", monospace;--radius-ctl:8px;--focus-ring-shadow:0 0 0 2px color-mix(in oklab, var(--accent) 70%, transparent);--bg:oklch(7% .01 280);--surface:oklch(11% .01 280);--border:oklch(17% .01 270);--text:oklch(92% .01 270);--text-dim:oklch(53% .02 270);--accent:oklch(78% .14 200);--accent2:oklch(70% .13 200);--green:oklch(78% .16 150);--user-bg:oklch(15% .02 270);--agent-bg:oklch(9% .01 270);--status-idle-bg:oklch(15% .02 150);--status-running-bg:oklch(17% .02 75);--status-running-color:oklch(81% .14 85);--status-steering-bg:oklch(17% .02 250);--status-steering-color:oklch(78% .12 250);--code-bg:oklch(9% .01 250);--link-color:oklch(72% .12 250);--table-border:oklch(70% .13 200);--stop-btn:var(--error);--stop-btn-hover:oklch(57% .21 25);--toggle-off:oklch(35% 0 0);--toggle-on:oklch(100% 0 0);--delete-color:var(--error);--code-label-color:oklch(66% .01 250);--modal-bg:oklch(0% 0 0/.6);--font-display:"Chakra Petch", "Outfit", "Pretendard", "Noto Sans CJK SC", "Noto Sans CJK JP", "Noto Sans KR", "Apple SD Gothic Neo", "Malgun Gothic", system-ui, sans-serif;--font-ui:var(--font-sans-system);--font-mono:"SF Mono", "JetBrains Mono", "Fira Code", monospace;--sidebar-left-w:220px;--sidebar-right-w:260px;--sidebar-collapsed-w:48px;--activity-row-h:28px;--activity-icon:16px;--activity-chevron:14px;--activity-chevron-sm:12px;--activity-indent:24px;--activity-gap:6px;--activity-muted:color-mix(in oklab, var(--text) 60%, transparent);--activity-border:color-mix(in oklab, var(--text) 8%, transparent);--activity-output-max:144px;--activity-output-fade:32px;--activity-group-max:min(288px, 50dvh);--motion-fast:.15s;--motion-base:.2s;--space-1:4px;--space-2:8px;--space-3:12px;--space-4:16px;--space-5:20px;--space-6:24px;--space-8:32px;--space-10:40px;--space-12:48px;--text-xs:11px;--text-sm:13px;--text-base:16px;--text-md:17px;--text-lg:19px;--text-xl:22px;--text-2xl:26px;--text-3xl:34px;--radius-sm:4px;--radius-md:8px;--radius-lg:12px;--radius-xl:16px;--radius-full:9999px;--ease-out-expo:cubic-bezier(.16, 1, .3, 1);--ease-spring:cubic-bezier(.34, 1.56, .64, 1);--duration-fast:.15s;--duration-base:.25s;--duration-slow:.4s;--error:oklch(63% .21 25);--error-dim:oklch(63% .21 25/.15);--success:oklch(72% .17 150);--success-dim:oklch(72% .17 150/.15);--warning:oklch(78% .16 75);--warning-dim:oklch(78% .16 75/.15);--info:oklch(72% .12 220);--phase-1:#60a5fa;--phase-2:#a78bfa;--phase-3:#34d399;--phase-4:#fbbf24;--phase-5:#f472b6;--text-on-accent:#000;--noise-opacity:.03;--scanline-pct:1.2%;--glow-strength:5%;--toggle-w:36px;--toggle-h:20px;--toggle-knob:16px;--orc-glow:transparent;--orc-glow-I:oklch(70% .15 200);--orc-glow-P:oklch(63% .17 260);--orc-glow-A:oklch(78% .16 75);--orc-glow-B:oklch(72% .17 150);--orc-glow-C:oklch(60% .2 300);--orc-glow-D:transparent}*{box-sizing:border-box;margin:0;padding:0}body{font-family:var(--font-ui);background:var(--bg);color:var(--text);grid-template-columns:var(--sidebar-left-w) 1fr var(--sidebar-right-w);height:100vh;transition:grid-template-columns .2s cubic-bezier(.4,0,.2,1),background-color .2s,color .2s;display:grid}:lang(zh),:lang(ja){letter-spacing:0}body.left-collapsed{--sidebar-left-w:var(--sidebar-collapsed-w)}body.right-collapsed{--sidebar-right-w:var(--sidebar-collapsed-w)}[data-theme=light]{--surface-1:#00000008;--surface-2:#0000000a;--surface-3:#0000000f;--border-alpha:oklch(92% .004 286.32);--border-strong:oklch(87.1% .006 286.286);--text-muted-60:color-mix(in oklab, var(--text) 60%, transparent);--font-sans-system:-apple-system, BlinkMacSystemFont, "Segoe UI", system-ui, "Apple SD Gothic Neo", "Pretendard", "Noto Sans KR", sans-serif;--font-mono-system:ui-monospace, "SF Mono", Menlo, Consolas, "Liberation Mono", monospace;--radius-ctl:8px;--focus-ring-shadow:0 0 0 2px color-mix(in oklab, var(--accent) 70%, transparent);--bg:oklch(99.2% 0 0);--surface:oklch(100% 0 0);--border:var(--border-alpha);--text:oklch(15% .02 270);--text-dim:oklch(53% .02 270);--accent:oklch(62% .11 200);--accent2:oklch(52% .1 200);--green:oklch(62% .16 150);--user-bg:oklch(95% .01 270);--agent-bg:oklch(98% .005 270);--status-idle-bg:oklch(96% .04 150);--status-running-bg:oklch(97% .06 90);--status-running-color:oklch(56% .12 70);--status-steering-bg:oklch(96% .04 250);--status-steering-color:oklch(50% .14 250);--code-bg:oklch(96% .005 250);--link-color:oklch(56% .18 260);--table-border:oklch(56% .18 260);--stop-btn:var(--error);--stop-btn-hover:oklch(48% .19 25);--toggle-off:oklch(80% 0 0);--toggle-on:oklch(100% 0 0);--delete-color:var(--error);--code-label-color:oklch(53% .02 270);--modal-bg:oklch(0% 0 0/.3);--error:oklch(57% .21 25);--error-dim:oklch(57% .21 25/.15);--success:oklch(62% .16 150);--success-dim:oklch(62% .16 150/.15);--warning:oklch(63% .15 70);--warning-dim:oklch(63% .15 70/.15);--info:oklch(56% .12 220);--phase-1:#3b82f6;--phase-2:#8b5cf6;--phase-3:#10b981;--phase-4:#f59e0b;--phase-5:#ec4899;--text-on-accent:#fff;--noise-opacity:.015;--scanline-pct:0.8%;--glow-strength:3%;--orc-glow-I:oklch(58% .14 200);--orc-glow-P:oklch(56% .18 260);--orc-glow-A:oklch(63% .15 70);--orc-glow-B:oklch(62% .16 150);--orc-glow-C:oklch(53% .22 300);--orc-glow-D:transparent}label{color:var(--text-dim);margin-bottom:4px;font-size:11px;display:block}select,input[type=text]{background:var(--bg);border:1px solid var(--border);width:100%;color:var(--text);border-radius:6px;padding:6px 10px;font-family:inherit;font-size:12px}::-webkit-scrollbar{width:6px;height:6px}::-webkit-scrollbar-track{background:0 0}::-webkit-scrollbar-thumb{background:var(--border-alpha);border-radius:3px}::-webkit-scrollbar-thumb:hover{background:var(--border-strong)}*{scrollbar-width:thin;scrollbar-color:var(--border-alpha) transparent}:focus-visible{outline:2px solid var(--accent);outline-offset:2px}button:focus-visible,input:focus-visible,textarea:focus-visible,select:focus-visible{outline:2px solid var(--accent);outline-offset:1px}@keyframes revealUp{0%{opacity:0;transform:translateY(12px)}to{opacity:1;transform:translateY(0)}}@keyframes revealLeft{0%{opacity:0;transform:translate(-16px)}to{opacity:1;transform:translate(0)}}@keyframes revealRight{0%{opacity:0;transform:translate(16px)}to{opacity:1;transform:translate(0)}}@keyframes breathe{0%,to{opacity:.5}50%{opacity:.8}}@keyframes dotPing{0%,to{opacity:1}50%{opacity:.4}}@media (prefers-reduced-motion:reduce){*,:before,:after{scroll-behavior:auto!important;transition-duration:.01ms!important;animation-duration:.01ms!important;animation-iteration-count:1!important}}.hidden{display:none}.gap-1{gap:var(--space-1)}.gap-2{gap:var(--space-2)}.gap-3{gap:var(--space-3)}.gap-4{gap:var(--space-4)}.flex{display:flex}.flex-col{flex-direction:column}.items-center{align-items:center}.justify-between{justify-content:space-between}.flex-1{flex:1}.flex-wrap{flex-wrap:wrap}.w-full{width:100%}.text-xs{font-size:var(--text-xs)}.text-sm{font-size:var(--text-sm)}.text-dim{color:var(--text-dim)}.mono{font-family:var(--font-mono)}.fallback-desc{margin:2px 0 6px}.mt-1{margin-top:var(--space-1)}.mt-2{margin-top:var(--space-2)}.ml-6{margin-left:var(--space-6)}.mr-auto{margin-right:auto}.p-1{padding:var(--space-1)}.p-2{padding:var(--space-2)}.py-1{padding-top:var(--space-1);padding-bottom:var(--space-1)}.px-4{padding-left:var(--space-4);padding-right:var(--space-4)}.w-auto{width:auto}.input-sm{width:100%;padding:var(--space-1) var(--space-2);font-size:11px}.input-compact{width:100px;padding:3px var(--space-2);background:var(--surface);color:var(--text);border:1px solid var(--border);border-radius:var(--radius-sm);font-size:11px}.btn-action-sm{padding:var(--space-1) var(--space-3);margin:0;font-size:11px}.btn-action-block{width:100%;padding:var(--space-2);font-size:var(--text-sm);margin:0}.hr-divider{border:none;border-top:1px solid var(--border);margin:var(--space-1) 0}.btn-modal-close{color:var(--text-dim);cursor:pointer;background:0 0;border:none;font-size:16px}.btn-refresh{justify-content:center;align-items:center;gap:var(--space-1);flex:1;height:32px;margin:0;padding:6px;font-size:11px;display:flex}.select-sm{padding:var(--space-1);background:var(--surface);color:var(--text);border:1px solid var(--border);border-radius:var(--radius-sm);font-size:11px}.select-status-interval{min-width:60px;height:32px;padding:6px 8px}.input-agent-name{font-family:var(--font-display);font-size:var(--text-base);padding:var(--space-1) var(--space-2);flex:1;font-weight:600}.perm-auto{cursor:default;width:100%;padding:6px 14px}.text-status{color:var(--text-dim);font-size:11px}.text-shortcut-hint{color:var(--text-dim);font-size:9px}.mono-path{font-family:var(--font-mono);word-break:break-all}.label-wide{min-width:120px;font-size:11px}.mem-tab-btn{color:var(--text-dim);cursor:pointer;background:0 0;border:none;border-bottom:2px solid #0000;padding:6px 12px;font-size:12px}.mem-tab-btn.active,.mem-tab.active .mem-tab-btn{color:var(--text)}.info-box{margin-top:var(--space-2);background:var(--bg);border-radius:var(--radius-sm);color:var(--text-dim);padding:6px;font-size:11px}.adv-status-banner{border-bottom:1px solid var(--border);color:var(--text-dim);padding:10px 12px;font-size:11px}.tab-strip{border-bottom:1px solid var(--border);padding:0 12px;display:flex}.section-header{margin-bottom:6px;font-size:12px;font-weight:600}.px-3{padding-left:var(--space-3);padding-right:var(--space-3)}.pb-3{padding-bottom:var(--space-3)}.p-3{padding:var(--space-3)}.mt-3{margin-top:var(--space-3)}.modal-template{flex-direction:column;width:640px;max-width:90vw;max-height:85vh;display:flex}.modal-scrollable{max-height:80vh;overflow-y:auto}.template-tree-area{flex:1;padding:12px 16px;overflow-y:auto}.template-editor-view{flex-direction:column}.template-editor-bar{align-items:center;gap:var(--space-2);padding:var(--space-2) var(--space-4);border-bottom:1px solid var(--border);display:flex}.btn-back{border:1px solid var(--border);color:var(--text-dim);padding:var(--space-1) var(--space-2);border-radius:var(--radius-sm);cursor:pointer;background:0 0;font-size:11px}.btn-dev-toggle{background:var(--bg);border:1px solid var(--border);color:var(--text-dim);padding:var(--space-1) var(--space-3);border-radius:var(--radius-sm);cursor:pointer;font-size:11px}.template-textarea{min-height:350px;font-family:var(--font-mono);flex:1;font-size:12px}.template-hint{padding:var(--space-2) 0;color:var(--text-dim);font-size:11px}.queue-badge{background:var(--warning);color:var(--bg);border-radius:var(--radius-full);font-size:var(--text-xs);z-index:10;min-width:18px;height:18px;box-shadow:0 0 0 2px var(--bg);justify-content:center;align-items:center;font-weight:700;display:flex;position:absolute;top:6px;right:6px}.sidebar-left{background:var(--surface-1);border-right:1px solid var(--border-alpha);box-shadow:none;animation:revealLeft .4s var(--ease-out-expo) 50ms both;flex-direction:column;gap:16px;padding:48px 16px 16px;display:flex;overflow-y:auto}.sidebar-left:before,.sidebar-right:before{content:none;pointer-events:none;z-index:0;background:repeating-linear-gradient(0deg, transparent, transparent 2px, color-mix(in oklch, var(--accent) var(--scanline-pct), transparent) 2px, color-mix(in oklch, var(--accent) var(--scanline-pct), transparent) 4px), linear-gradient(180deg, color-mix(in oklch, var(--accent) var(--glow-strength), transparent) 0%, transparent 200px);position:absolute;inset:0}.logo{color:var(--accent);font-size:26px;font-weight:700;font-family:var(--font-display);letter-spacing:1px;text-shadow:0 0 20px color-mix(in oklch, var(--accent) 30%, transparent)}.section-title{color:var(--text-dim);text-transform:uppercase;letter-spacing:1.5px;font-size:11px;font-family:var(--font-display);margin-bottom:4px;font-weight:600}.memory-list{font-size:12px;list-style:none}.memory-list li{border-bottom:1px solid var(--border);padding:4px 0}.memory-key{color:var(--accent2)}.stat{color:var(--text-dim);margin:2px 0;font-size:12px}.status-badge{letter-spacing:.5px;font-size:10px;font-weight:600;font-family:var(--font-display);border-radius:10px;align-items:center;padding:2px 8px;transition:background .3s,color .3s;display:inline-flex}.status-idle{background:var(--status-idle-bg);color:var(--green);box-shadow:0 0 6px color-mix(in oklch, var(--success) 20%, transparent)}.status-running{background:var(--status-running-bg);color:var(--status-running-color);box-shadow:0 0 6px color-mix(in oklch, var(--warning) 30%, transparent)}.btn-clear{border:1px solid var(--border);color:var(--text-dim);cursor:pointer;font-size:12px;font-family:var(--font-display);background:0 0;border-radius:6px;margin-top:auto;padding:8px;transition:border-color .15s,color .15s,transform .1s}.btn-clear:hover{border-color:var(--accent);color:var(--accent);transform:translateY(-1px)}.btn-clear:active{transform:translateY(0)}.sidebar-right{background:var(--surface-1);border-left:1px solid var(--border-alpha);box-shadow:none;animation:revealRight .4s var(--ease-out-expo) .1s both;flex-direction:column;padding-top:48px;display:flex;overflow-y:auto}.tab-bar{border:1px solid var(--border-alpha);border-radius:var(--radius-ctl);background:var(--surface-1);flex-shrink:0;gap:2px;margin:0 8px 6px;padding:3px;display:flex}.tab-btn{border-radius:var(--radius-ctl);min-height:28px;color:var(--text-muted-60);font-size:11px;font-family:var(--font-ui);cursor:pointer;text-transform:uppercase;letter-spacing:1px;background:0 0;border:none;flex:1;padding:4px 8px;transition:color .15s,background-color .15s}.tab-btn:hover{background:var(--surface-2);color:var(--text)}.tab-btn.active{color:var(--text);background:var(--surface-3)}.tab-btn:focus-visible{box-shadow:var(--focus-ring-shadow)}.tab-content{flex-direction:column;gap:12px;padding:16px;display:none}.tab-content.active{display:flex}.sidebar-save-bar{border-bottom:1px solid var(--border);flex-shrink:0;padding:6px 16px}.btn-save{background:var(--accent);color:#fff;width:100%;font-size:11px;font-family:var(--font-display);cursor:pointer;border:none;border-radius:6px;padding:6px;font-weight:600}.btn-save:hover{opacity:.9}.sidebar-hb-btn{background:var(--surface);border:1px solid var(--border);width:100%;color:var(--text);cursor:pointer;text-align:left;font-size:12px;font-family:var(--font-display);border-radius:6px;align-items:center;gap:4px;padding:6px;transition:border-color .15s,box-shadow .15s;display:inline-flex}.sidebar-hb-btn.w-auto{flex-shrink:0;width:auto}.sidebar-hb-btn:hover{border-color:var(--accent);box-shadow:0 0 0 1px var(--accent)}.sidebar-lang-row{align-items:center;width:100%;display:flex;position:relative}.sidebar-lang-row .sidebar-lang-icon{pointer-events:none;color:var(--text);align-items:center;display:inline-flex;position:absolute;top:50%;left:8px;transform:translateY(-50%)}.sidebar-lang-select{-webkit-appearance:none;appearance:none;background-image:linear-gradient(45deg, transparent 50%, var(--text-dim) 50%), linear-gradient(135deg, var(--text-dim) 50%, transparent 50%);background-position:calc(100% - 12px),calc(100% - 8px);background-repeat:no-repeat;background-size:4px 4px,4px 4px;padding-left:26px;padding-right:22px}.sidebar-lang-select:focus{border-color:var(--accent);box-shadow:0 0 0 1px var(--accent);outline:none}.sidebar-toggle{border:1px solid var(--border);color:var(--text-dim);cursor:pointer;background:0 0;border-radius:6px;flex-shrink:0;justify-content:center;align-items:center;width:28px;height:28px;font-size:12px;transition:border-color .15s,color .15s;display:flex}.sidebar-toggle:hover{border-color:var(--accent);color:var(--accent)}.sidebar-bottom{border-top:1px solid var(--border);flex-direction:column;gap:6px;margin-top:auto;padding-top:12px;display:flex}.avatar-row{justify-content:center;gap:12px;display:flex}.avatar-card{flex-direction:column;flex:1;align-items:center;gap:6px;min-width:0;display:flex}.avatar-preview{cursor:default;width:48px;height:48px;font-size:28px;line-height:48px}.avatar-card-label{color:var(--text-dim);text-transform:uppercase;letter-spacing:.5px;font-size:10px;font-weight:500}.avatar-card-actions{gap:4px;display:flex}.avatar-action-btn{border:1px solid var(--border);border-radius:var(--radius-sm);background:var(--surface);width:28px;height:28px;color:var(--text-dim);cursor:pointer;transition:all var(--duration-fast);place-items:center;display:grid}.avatar-action-btn:hover{background:var(--surface-hover,color-mix(in oklch, var(--surface) 90%, var(--accent) 10%));color:var(--text);border-color:var(--accent)}.sidebar-left,.sidebar-right{contain:layout style;position:relative}.sidebar-left>:not(.sidebar-toggle),.sidebar-right>:not(.sidebar-toggle){opacity:1;transition:opacity .15s ease-in 50ms}.sidebar-left .sidebar-toggle,.sidebar-right .sidebar-toggle{z-index:2;position:absolute;top:10px}.sidebar-left .sidebar-toggle{left:10px}.sidebar-right .sidebar-toggle{right:10px}body.left-collapsed .sidebar-left>:not(.sidebar-toggle){opacity:0;pointer-events:none;transition:opacity .1s ease-out}body.left-collapsed .sidebar-left{padding:16px 10px;overflow:hidden}body.right-collapsed .sidebar-right>:not(.sidebar-toggle){opacity:0;pointer-events:none;transition:opacity .1s ease-out}body.right-collapsed .sidebar-right{padding:16px 10px;overflow:hidden}@media (width<=900px){body:not(.left-expanded){--sidebar-left-w:var(--sidebar-collapsed-w)}body:not(.left-expanded) .sidebar-left>:not(.sidebar-toggle){opacity:0;pointer-events:none}body:not(.left-expanded) .sidebar-left{padding:16px 10px;overflow:hidden}body:not(.right-expanded){--sidebar-right-w:var(--sidebar-collapsed-w)}body:not(.right-expanded) .sidebar-right>:not(.sidebar-toggle){opacity:0;pointer-events:none}body:not(.right-expanded) .sidebar-right{padding:16px 10px;overflow:hidden}}@media (width<=768px){body{grid-template-columns:1fr;grid-template-areas:"main";height:100dvh}.sidebar-left,.sidebar-right{z-index:100;width:min(280px,80vw);transition:transform .25s var(--ease-out-expo);padding-top:calc(48px + env(safe-area-inset-top,0px));padding-bottom:env(safe-area-inset-bottom,0px);visibility:hidden;pointer-events:none;position:fixed;top:0;bottom:0;transform:translate(-100%);min-width:unset!important}.sidebar-right{left:auto;right:0;transform:translate(100%)}body.left-expanded .sidebar-left,body.right-expanded .sidebar-right{visibility:visible;pointer-events:auto;transform:translate(0)}body.left-expanded:after,body.right-expanded:after{content:"";background:var(--modal-bg);z-index:99;animation:.2s fadeIn;position:fixed;inset:0}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}body:not(.left-expanded) .sidebar-left>:not(.sidebar-toggle){display:block}.sidebar-toggle{display:none}.chat-input-area{padding-bottom:env(safe-area-inset-bottom,0px)}.message.agent-message,.message.user-message{max-width:95%!important}}.mobile-nav{display:none}:is(.sidebar-left,.sidebar-right,.chat-header) :is(button,a,input,select,textarea,summary,[tabindex]):focus-visible{box-shadow:var(--focus-ring-shadow);outline:2px solid var(--accent);outline-offset:2px}@media (prefers-reduced-motion:reduce){:is(.sidebar-left,.sidebar-right,.chat-header),:is(.sidebar-left,.sidebar-right,.chat-header) *,:is(.sidebar-left,.sidebar-right,.chat-header):before,:is(.sidebar-left,.sidebar-right,.chat-header):after,:is(.sidebar-left,.sidebar-right,.chat-header) :before,:is(.sidebar-left,.sidebar-right,.chat-header) :after,body.left-expanded:after,body.right-expanded:after{scroll-behavior:auto!important;transition:none!important;animation:none!important}}.lucide,[data-icon] svg,.icon-hydrated svg,.cli-provider-icon svg,.skill-emoji svg{vertical-align:-.125em;flex-shrink:0;width:1em;height:1em;display:inline-block}[data-icon],.icon-hydrated{align-items:center;line-height:1;display:inline-flex}.sidebar-right:has(#tabSettings.active){overflow:hidden}.sidebar-right:has(#tabSettings.active) .sidebar-save-bar{display:none}@media (width<=768px){.sidebar-right:has(#tabSettings.active){width:min(92vw,760px)}}.chat-header{flex-shrink:0;height:44px}@media (width<=900px){.chat-header{height:auto;min-height:44px}}body[data-settings-open=true] .chat-area,body[data-settings-open=true] .sidebar-left,body[data-settings-open=true] .sidebar-right{display:none}body[data-settings-open=true].left-expanded:after,body[data-settings-open=true].right-expanded:after{content:none}#settingsPage{background:var(--bg);flex-direction:column;grid-area:1/1/auto/-1;min-width:0;min-height:0;display:flex;overflow:hidden}#settingsPage[hidden]{display:none}#settingsPage>iframe{border:0;flex:1;width:100%;height:100%;min-height:0;display:block}#settingsPage>.chat-header{width:100%}.header-icon-btn{width:32px;height:32px;color:var(--text-dim);cursor:pointer;background:0 0;border:0;border-radius:8px;justify-content:center;align-items:center;padding:0;display:inline-flex}.header-icon-btn svg{width:16px;height:16px}.header-icon-btn:hover{background:var(--surface-3);color:var(--text)}.header-icon-btn[aria-pressed=true]{color:var(--accent);background:var(--surface-2)}.header-icon-btn:focus-visible{box-shadow:var(--focus-ring-shadow);outline:none}@media (prefers-reduced-motion:no-preference){#settingsPage:not([hidden]){animation:.12s settingsPageEnter}}@keyframes settingsPageEnter{0%{opacity:0}to{opacity:1}}.chat-area{border-left:1px solid var(--border-alpha);border-right:1px solid var(--border-alpha);background:var(--bg);flex-direction:column;min-height:0;display:flex;position:relative;overflow:hidden}.chat-area:after{content:none;pointer-events:none;z-index:0;opacity:var(--noise-opacity);mix-blend-mode:overlay;background-image:url("data:image/svg+xml,%3Csvg viewBox='0 0 256 256' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.85' numOctaves='4' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)'/%3E%3C/svg%3E");background-repeat:repeat;position:absolute;inset:0}[data-theme=light] .chat-area:after{display:none}.theme-switch{border:1px solid var(--border-alpha);background:var(--surface-1);cursor:pointer;border-radius:12px;flex-shrink:0;width:44px;height:24px;padding:0;transition:background .3s,border-color .3s;position:relative}.theme-switch:hover{border-color:var(--border-strong)}.theme-switch-knob{background:var(--text);border-radius:50%;width:16px;height:16px;transition:left .3s cubic-bezier(.4,0,.2,1),background .3s;position:absolute;top:3px;left:3px}.theme-switch-knob:after{content:"";width:10px;height:10px;box-shadow:-3px 0 0 var(--surface);background:0 0;border-radius:50%;transition:all .3s;position:absolute;top:3px;left:5px}.theme-switch.is-light .theme-switch-knob{background:var(--warning);left:23px}.theme-switch.is-light .theme-switch-knob:after{box-shadow:none;background:color-mix(in oklch, var(--warning) 80%, #fff);width:4px;height:4px;top:6px;left:6px}.chat-header{padding:6px var(--space-5);border-bottom:1px solid var(--border-alpha);background:var(--surface-1);font-size:14px;font-weight:600;font-family:var(--font-ui);letter-spacing:0;box-shadow:none;z-index:2;justify-content:space-between;align-items:center;gap:var(--space-2);animation:revealUp .35s var(--ease-out-expo) .15s both;flex-wrap:wrap;display:flex;position:relative}.chat-header-actions{align-items:center;gap:var(--space-2);flex-wrap:wrap;min-width:0;max-width:100%;display:inline-flex}#headerCli{overflow-wrap:anywhere;align-items:center;gap:4px;min-width:0;max-width:100%;display:inline-flex}#headerCli svg{flex-shrink:0;width:1.1em;height:1.1em}.chat-header>span:first-child{flex-wrap:wrap;align-items:center;gap:6px;min-width:0;max-width:100%;display:inline-flex}@media (width>=901px){.chat-header,.chat-header-actions,.chat-header>span:first-child{flex-wrap:nowrap}.chat-header>span:first-child{overflow:hidden}}.header-project{color:var(--text-muted-60);letter-spacing:.2px;text-overflow:ellipsis;white-space:nowrap;cursor:pointer;border-radius:var(--radius-ctl);border:1px solid #0000;flex-shrink:1;max-width:280px;margin-left:4px;padding:2px 8px;font-size:12px;font-weight:400;transition:color .15s,border-color .15s,background .15s;overflow:hidden}.header-project:hover{color:var(--text);border-color:var(--border-alpha);background:var(--surface-2)}.header-project.is-empty{border:1px dashed var(--border-strong);opacity:.8}.header-project.is-picking{opacity:.5;pointer-events:none}.header-git-status{text-overflow:ellipsis;white-space:nowrap;min-width:0;max-width:220px;color:var(--text-muted-60);font-family:var(--font-mono-system);letter-spacing:0;border-radius:var(--radius-ctl);border:1px solid var(--border-alpha);background:var(--surface-3);flex-shrink:0;align-items:center;padding:2px 7px;font-size:12px;font-weight:500;display:inline-flex;overflow:hidden}.header-git-status[hidden]{display:none}@media (width<=860px){.header-git-status{display:none}}@media (width<=680px){.header-project{display:none}}.chat-messages{padding:var(--space-4) var(--space-5);gap:var(--space-3);z-index:1;animation:revealUp .4s var(--ease-out-expo) .2s both;contain:layout style paint;overflow-anchor:none;flex-direction:column;flex:1;display:flex;position:relative;overflow-y:auto}.chat-messages.vs-active{gap:0}.chat-restore-indicator{left:50%;bottom:var(--space-4);z-index:3;align-items:center;gap:var(--space-2);border:1px solid var(--border);border-radius:var(--radius-md);background:color-mix(in oklch, var(--surface) 88%, transparent);color:var(--text-dim);box-shadow:var(--shadow-md);font-size:var(--text-xs);pointer-events:none;padding:6px 10px;display:inline-flex;position:absolute;transform:translate(-50%)}.chat-restore-dot{background:var(--accent);border-radius:50%;width:6px;height:6px;animation:1.2s ease-in-out infinite processDotPulse}.scroll-to-bottom-fab{background:var(--surface);border:1px solid var(--border);width:36px;height:36px;color:var(--text-dim);cursor:pointer;opacity:0;pointer-events:none;z-index:10;border-radius:50%;justify-content:center;align-items:center;transition:opacity .2s,transform .2s;display:flex;position:absolute;bottom:80px;right:20px;transform:translateY(8px);box-shadow:0 2px 8px #0000001f}.scroll-to-bottom-fab.visible{opacity:1;pointer-events:auto;transform:translateY(0)}.scroll-to-bottom-fab:hover{color:var(--text);border-color:var(--accent)}.scroll-to-bottom-fab:active{transform:scale(.92)}.chat-messages.vs-active>.vs-inner{flex:none;width:100%;position:relative}.vs-active .vs-inner>.msg{margin-bottom:var(--space-3);contain:style;position:absolute;top:0;left:0;right:0}.vs-active .vs-inner>.msg-user{left:auto}.vs-active .vs-inner>.msg-system{width:fit-content;margin-left:auto;margin-right:auto;left:0;right:0}.msg{padding:var(--space-3) var(--space-4);border-radius:var(--radius-lg);font-size:var(--text-base);word-wrap:break-word;overflow-wrap:break-word;max-width:85%;transition:box-shadow var(--duration-base);contain:layout style;line-height:1.75;position:relative}@keyframes msgEnterAgent{0%{opacity:0;transform:translate(-8px)translateY(4px)}to{opacity:1;transform:none}}@keyframes msgEnterUser{0%{opacity:0;transform:translate(8px)translateY(4px)}to{opacity:1;transform:none}}@keyframes msgEnterSystem{0%{opacity:0;transform:translateY(6px)}to{opacity:1;transform:none}}.msg-user{background:color-mix(in oklch, var(--accent) 10%, var(--surface));border:1px solid color-mix(in oklch, var(--accent) 18%, var(--border));border-radius:var(--radius-lg) var(--radius-lg) var(--radius-sm) var(--radius-lg);white-space:pre-wrap;align-self:flex-end;gap:var(--space-2);max-width:75%;animation:.25s cubic-bezier(.16,1,.3,1) msgEnterUser;display:flex}.user-icon{text-align:center;width:24px;height:24px;transition:opacity var(--duration-fast);flex-shrink:0;margin-top:2px;font-size:18px;line-height:24px}.user-body{flex:1;min-width:0;position:relative}.msg-agent{align-self:flex-start;gap:var(--space-2);max-width:100%;padding:var(--space-2) 0;transition:padding var(--duration-base);background:0 0;border:none;border-radius:0;animation:.25s cubic-bezier(.16,1,.3,1) msgEnterAgent;display:flex}.agent-icon{text-align:center;width:24px;height:24px;transition:opacity var(--duration-fast);flex-shrink:0;margin-top:2px;font-size:18px;line-height:24px}.agent-icon,.user-icon{background:color-mix(in oklch, var(--surface) 88%, var(--accent) 12%);box-shadow:inset 0 0 0 1px color-mix(in oklch, var(--border) 80%, var(--accent) 20%);border-radius:999px;place-items:center;display:grid;overflow:hidden}.avatar-image{object-fit:cover;border-radius:inherit;width:100%;height:100%;display:block}.agent-body{flex:1;min-width:0;position:relative}.msg-system{border:1px dashed var(--border);text-align:center;font-size:var(--text-xs);color:var(--text-dim);padding:var(--space-1) var(--space-3);background:0 0;align-self:center;max-width:80%;animation:.2s ease-out msgEnterSystem}.msg-goal-boundary{border:1px dashed color-mix(in oklch, var(--accent) 35%, var(--border));max-width:60%;font-size:var(--text-xs);color:var(--text-dim);padding:var(--space-1) var(--space-3);background:0 0;align-self:center;animation:.2s ease-out msgEnterSystem}.msg-goal-boundary .msg-label,.msg-goal-boundary .user-icon,.msg-goal-boundary .msg-actions{display:none}.msg-goal-boundary:after{content:none}.msg-user:after{content:"";top:var(--space-2);bottom:var(--space-2);background:var(--accent);opacity:0;width:3px;transition:opacity var(--duration-fast);border-radius:2px;position:absolute}.msg-agent:after{content:"";top:var(--space-2);bottom:var(--space-2);background:var(--accent);opacity:0;width:2px;transition:opacity var(--duration-fast);border-radius:1px;position:absolute;left:-4px}.msg-user:after{right:calc(-1 * var(--space-2))}.msg-agent:hover:after,.msg-user:hover:after{opacity:.3}.msg-user:hover{box-shadow:0 2px 12px color-mix(in oklch, var(--bg) 85%, transparent)}.msg-agent:hover{box-shadow:none}.msg-label{font-size:var(--text-xs);letter-spacing:.5px;text-transform:uppercase;color:var(--text-dim);margin-bottom:var(--space-1);align-items:center;gap:var(--space-1);font-weight:600;display:flex}.msg-user .msg-label:before{content:"";background:var(--success);border-radius:50%;width:6px;height:6px}.msg-type-success{border-color:var(--success);color:var(--success)}.msg-type-error{border-color:var(--error);color:var(--error)}.msg-type-info{border-color:var(--link-color);color:var(--link-color)}.msg-error{border-left:3px solid var(--error);background:var(--error-dim);padding:var(--space-3) var(--space-4);border-radius:var(--radius-sm) var(--radius-md) var(--radius-md) var(--radius-sm)}.msg-error .msg-label,.msg-error .msg-content a{color:var(--error)}.msg-error .msg-content code{border-color:var(--error)}.elicitation-block,.elicitation-pending{margin:var(--space-3) 0;padding:var(--space-3);border:1px solid var(--border);border-radius:var(--radius-md);background:color-mix(in oklch, var(--surface) 94%, var(--accent))}.elicitation-loading,.elicitation-error-text{color:var(--text-dim);font-size:var(--text-sm)}.elicitation-error{border-color:color-mix(in oklch, var(--error) 45%, var(--border));background:var(--error-dim)}.elicitation-complete{border-color:color-mix(in oklch, var(--success) 40%, var(--border));background:color-mix(in oklch, var(--success) 8%, var(--surface))}.elicitation-complete-title{margin-bottom:var(--space-2);color:var(--text-dim);font-size:var(--text-xs);font-weight:700}.elicitation-complete-row{align-items:center;display:flex}.elicitation-complete-button{min-height:32px;padding:0 var(--space-3);border:1px solid color-mix(in oklch, var(--success) 42%, var(--border));border-radius:var(--radius-sm);background:color-mix(in oklch, var(--success) 12%, var(--surface));color:var(--text);cursor:default;font:inherit;font-size:var(--text-xs);font-weight:700}.elicitation-complete-list{gap:var(--space-1);padding-left:var(--space-4);margin:0;display:grid}.elicitation-complete-list li{color:var(--text-dim);font-size:var(--text-sm);line-height:1.45}.elicitation-complete-question{color:var(--text);font-weight:600}.elicitation-complete-answer:before{content:": "}.elicitation-top{justify-content:space-between;align-items:center;gap:var(--space-2);margin-bottom:var(--space-2);display:flex}.elicitation-progress{color:var(--text-dim);font-size:var(--text-xs);letter-spacing:.04em;text-transform:uppercase;font-weight:700}.elicitation-question{margin-bottom:var(--space-3);color:var(--text);font-size:var(--text-sm);font-weight:600;line-height:1.45}.elicitation-options{gap:var(--space-2);display:grid}.elicitation-option,.elicitation-submit,.elicitation-skip{border:1px solid var(--border);border-radius:var(--radius-sm);background:color-mix(in oklch, var(--surface) 96%, var(--text));color:var(--text);cursor:pointer;font:inherit;transition:border-color var(--duration-fast), background var(--duration-fast), transform var(--duration-fast)}.elicitation-option{width:100%;min-height:36px;padding:var(--space-2) var(--space-3);text-align:left;flex-direction:column;align-items:flex-start;gap:2px;display:flex}.elicitation-option:hover,.elicitation-submit:hover,.elicitation-skip:hover{border-color:color-mix(in oklch, var(--accent) 45%, var(--border));background:color-mix(in oklch, var(--accent) 8%, var(--surface))}.elicitation-option:focus-visible,.elicitation-submit:focus-visible,.elicitation-skip:focus-visible,.elicitation-input:focus-visible{outline:2px solid color-mix(in oklch, var(--accent) 70%, white);outline-offset:2px}.elicitation-option.is-selected,.elicitation-option[aria-pressed=true]{border-color:color-mix(in oklch, var(--accent) 60%, var(--border));background:color-mix(in oklch, var(--accent) 12%, var(--surface))}.elicitation-option-label{font-size:var(--text-sm);font-weight:600}.elicitation-option-description{color:var(--text-dim);font-size:var(--text-xs);line-height:1.4}.elicitation-input-row{gap:var(--space-2);margin-top:var(--space-3);grid-template-columns:minmax(0,1fr) auto;display:grid}.elicitation-input{min-width:0;min-height:36px;padding:0 var(--space-3);border:1px solid var(--border);border-radius:var(--radius-sm);background:var(--bg);color:var(--text);font:inherit}.elicitation-submit,.elicitation-skip{min-height:32px;padding:0 var(--space-3);font-size:var(--text-xs);font-weight:700}.elicitation-block>.elicitation-submit{width:100%;margin-top:var(--space-2)}.search-results-block,.search-results-pending,.link-preview-card{margin:var(--space-3) 0;border:1px solid var(--border);border-radius:var(--radius-md);background:color-mix(in oklch, var(--surface) 96%, var(--text))}.search-results-block,.search-results-pending{padding:var(--space-3)}.search-results-loading,.search-results-error-text,.search-results-empty{color:var(--text-dim);font-size:var(--text-sm)}.search-results-header{margin-bottom:var(--space-2);gap:2px;display:grid}.search-results-title{color:var(--text);font-size:var(--text-sm);font-weight:700}.search-results-query{color:var(--text-dim);font-size:var(--text-xs)}.search-results-list{gap:var(--space-2);display:grid}.search-result-card{gap:var(--space-2);padding:var(--space-2);border:1px solid var(--border);border-radius:var(--radius-sm);color:var(--text);grid-template-columns:22px minmax(0,1fr);text-decoration:none;display:grid}.search-result-card:hover,.link-preview-card:hover{border-color:color-mix(in oklch, var(--accent) 45%, var(--border));background:color-mix(in oklch, var(--accent) 7%, var(--surface))}.search-result-card:focus-visible,.link-preview-card:focus-visible{outline:2px solid color-mix(in oklch, var(--accent) 70%, white);outline-offset:2px}.search-result-index{color:var(--text-dim);font-family:var(--font-mono);font-size:var(--text-xs)}.search-result-body,.link-preview-body{gap:2px;min-width:0;display:grid}.search-result-title,.link-preview-title{-webkit-line-clamp:1;overflow-wrap:anywhere;color:var(--text);font-size:var(--text-sm);-webkit-box-orient:vertical;font-weight:700;line-height:1.35;display:-webkit-box;overflow:hidden}.search-result-snippet,.link-preview-description{-webkit-line-clamp:1;overflow-wrap:anywhere;color:var(--text-dim);font-size:var(--text-xs);-webkit-box-orient:vertical;line-height:1.4;display:-webkit-box;overflow:hidden}.search-result-source,.link-preview-url,.link-preview-meta{color:var(--text-dim);font-size:var(--text-xs);text-overflow:ellipsis;white-space:nowrap;line-height:1.3;overflow:hidden}.link-preview-card{align-items:center;gap:var(--space-2);max-width:min(560px,100%);min-height:74px;padding:var(--space-2);color:var(--text);grid-template-columns:88px minmax(0,1fr);grid-template-areas:"image body";text-decoration:none;display:grid}.link-preview-image{border-radius:var(--radius-sm);background:var(--bg);object-fit:cover;grid-area:image;width:88px;height:66px}.link-preview-image-empty{border:1px solid var(--border)}.link-preview-body{grid-area:body}.link-preview-meta{align-items:center;gap:var(--space-1);min-width:0;display:inline-flex}.link-preview-meta>span{text-overflow:ellipsis;min-width:0;overflow:hidden}.link-preview-separator{flex:none}.link-preview-favicon{border-radius:3px;width:14px;height:14px}@media (width<=520px){.link-preview-card{grid-template-columns:64px minmax(0,1fr)}.link-preview-image{width:64px;height:56px}}.compose-block-pending,.compose-block,.diff-viewer,.dataframe-pending,.dataframe-block,.chart-json-pending,.chart-json-block{margin:var(--space-3) 0;border:1px solid var(--border);border-radius:var(--radius-md);background:color-mix(in oklch, var(--surface) 96%, var(--text));color:var(--text)}.compose-block-pending,.compose-block,.dataframe-pending,.dataframe-block,.chart-json-pending,.chart-json-block{padding:var(--space-3)}.compose-loading,.dataframe-loading,.chart-json-loading,.compose-error-text,.dataframe-error-text,.chart-json-error-text{color:var(--text-dim);font-size:var(--text-sm)}.compose-block{gap:var(--space-2);display:grid}.compose-block-header,.dataframe-toolbar,.chart-json-header{gap:2px;display:grid}.compose-title,.dataframe-title,.chart-json-title{color:var(--text);font-size:var(--text-sm);font-weight:700}.compose-kind,.chart-json-description{color:var(--text-dim);font-size:var(--text-xs)}.compose-subject-row{align-items:center;gap:var(--space-2);color:var(--text-dim);font-size:var(--text-xs);grid-template-columns:64px minmax(0,1fr);display:grid}.compose-followup{gap:var(--space-2);border-top:1px solid var(--border);padding-top:var(--space-2);display:grid}.compose-followup-row{align-items:start;gap:var(--space-2);color:var(--text-dim);font-size:var(--text-xs);grid-template-columns:64px minmax(0,1fr);display:grid}.compose-subject-input,.compose-body,.compose-followup-input,.dataframe-filter{border:1px solid var(--border);border-radius:var(--radius-sm);background:var(--bg);min-width:0;color:var(--text);font:inherit}.compose-subject-input,.dataframe-filter{height:32px;padding:0 var(--space-2)}.compose-body{width:100%;min-height:132px;max-height:260px;padding:var(--space-2);resize:vertical;line-height:1.5}.compose-followup-input{width:100%;min-height:58px;max-height:140px;padding:var(--space-2);resize:vertical;line-height:1.45}.compose-tabs,.compose-actions,.compose-followup-actions,.dataframe-pagination,.chart-json-legend{align-items:center;gap:var(--space-2);flex-wrap:wrap;display:flex}.compose-followup-actions{justify-content:flex-end}.compose-followup-error{min-height:18px;color:var(--text-dim);font-size:var(--text-xs);flex:220px}.compose-followup-error[data-state=error]{color:var(--danger)}.compose-followup-error[data-state=success]{color:var(--success)}.compose-tab,.compose-btn,.dataframe-page-btn,.dataframe-sort-btn,.dataframe-cell{border:1px solid var(--border);border-radius:var(--radius-sm);background:var(--surface);color:var(--text);font:inherit}.compose-tab,.compose-btn,.dataframe-page-btn{min-height:30px;padding:0 var(--space-2);font-size:var(--text-xs);font-weight:700}.compose-tab.is-active{border-color:color-mix(in oklch, var(--accent) 55%, var(--border));background:color-mix(in oklch, var(--accent) 12%, var(--surface))}.compose-subject-input:focus-visible,.compose-body:focus-visible,.compose-followup-input:focus-visible,.compose-tab:focus-visible,.compose-btn:focus-visible,.dataframe-filter:focus-visible,.dataframe-page-btn:focus-visible,.dataframe-sort-btn:focus-visible,.dataframe-cell:focus-visible{outline:2px solid color-mix(in oklch, var(--accent) 70%, white);outline-offset:2px}.diff-viewer{max-height:460px;padding:var(--space-2) 0;font-family:var(--font-mono);font-size:var(--text-xs);overflow:auto}.diff-line{grid-template-columns:48px minmax(0,1fr);min-width:max-content;line-height:1.45;display:grid}.diff-ln{padding:0 var(--space-2);color:var(--text-dim);text-align:right;user-select:none}.diff-code{padding:0 var(--space-3) 0 var(--space-2);white-space:pre}.diff-file,.diff-hunk{color:var(--text);font-weight:700}.diff-add{background:oklch(62.7052% .169912 149.214/.12)}.diff-del{background:oklch(57.7099% .215157 27.325/.12)}.diff-hunk{background:color-mix(in oklch, var(--accent) 10%, transparent)}.diff-omitted{padding:var(--space-2) var(--space-3);color:var(--text-dim)}.dataframe-block{gap:var(--space-2);display:grid}.dataframe-toolbar{grid-template-columns:minmax(0,1fr) minmax(140px,220px);align-items:center}.dataframe-table-wrap{border:1px solid var(--border);border-radius:var(--radius-sm);max-height:360px;overflow:auto}.dataframe-table{border-collapse:collapse;width:100%;min-width:420px;font-size:var(--text-xs)}.dataframe-table th,.dataframe-table td{border-bottom:1px solid var(--border);text-align:left;vertical-align:top}.dataframe-table th{z-index:1;background:var(--surface);position:sticky;top:0}.dataframe-sort-btn,.dataframe-cell{width:100%;padding:var(--space-2);text-align:left;background:0 0;border:0;border-radius:0;display:block}.dataframe-cell{text-overflow:ellipsis;white-space:nowrap;max-width:320px;overflow:hidden}.dataframe-page-info{color:var(--text-dim);font-size:var(--text-xs)}.dataframe-empty{padding:var(--space-3);color:var(--text-dim)}.chart-json-block{gap:var(--space-2);max-width:min(560px,100%);display:grid}.chart-json-frame{border:1px solid var(--border);border-radius:var(--radius-sm);background:var(--bg);overflow:hidden}.chart-json-svg{width:100%;height:190px;display:block}.chart-json-legend{color:var(--text-dim);font-size:var(--text-xs)}.chart-json-legend-item{align-items:center;gap:var(--space-1);min-width:0;display:inline-flex}.chart-json-swatch{border-radius:2px;flex:none;width:10px;height:10px}.chart-json-swatch-0{background:#2563eb}.chart-json-swatch-1{background:#16a34a}.chart-json-swatch-2{background:#dc2626}.chart-json-swatch-3{background:#9333ea}.chart-json-swatch-4{background:#ca8a04}.chart-json-swatch-5{background:#0891b2}@media (width<=520px){.compose-subject-row,.compose-followup-row,.dataframe-toolbar{grid-template-columns:1fr}.compose-followup-actions{justify-content:stretch}.compose-send-btn{width:100%}}.msg-actions{bottom:var(--space-2);align-items:center;gap:var(--space-2);opacity:0;transition:opacity var(--duration-fast);display:inline-flex;position:absolute}.msg-agent .msg-actions{right:0}.msg-user .msg-actions{left:var(--space-2)}.msg:hover .msg-actions,.msg-actions:focus-within{opacity:.85}.msg-copy,.msg-pin-reminder{cursor:pointer;opacity:.9;width:12px;height:12px;transition:transform .1s, background var(--duration-fast), border-color var(--duration-fast);background:0 0;padding:0;position:relative}.msg-copy{border:1.5px solid var(--text-dim);border-radius:2px}.msg-pin-reminder{color:var(--text-dim);border:0}.msg-pin-reminder:before{content:"";border:1.5px solid;border-bottom:0;width:6px;height:8px;position:absolute;top:1px;left:3px;transform:skew(-8deg)}.msg-pin-reminder:after{content:"";background:currentColor;width:1.5px;height:4px;position:absolute;top:8px;left:5px}.msg-copy:hover,.msg-pin-reminder:hover{color:var(--text);transform:scale(1.35)}.msg-copy:active{background:var(--accent);border-color:var(--accent);transform:scale(.75)}.msg-copy.copied{background:var(--accent);border-color:var(--accent);color:var(--bg);text-align:center;width:auto;min-width:12px;font-size:10px;line-height:12px;opacity:1!important}.msg-pin-reminder.is-pinning{opacity:1;color:var(--accent)}.msg-pin-reminder.is-pinned{color:var(--success)}.stream-cursor{background:color-mix(in oklch, var(--accent) 40%, transparent);vertical-align:text-bottom;border-radius:2px;width:3px;height:1.1em;margin-left:2px;animation:1s ease-in-out infinite cursorPulse;display:inline-block}@keyframes cursorPulse{0%,to{opacity:.3}50%{opacity:.8}}.math-placeholder{color:var(--text-dim);opacity:.7;font-family:KaTeX_Math,Times New Roman,serif}div.math-placeholder{text-align:center;padding:.5em 0;display:block}.empty-state{justify-content:center;align-items:center;gap:var(--space-3);opacity:.4;user-select:none;flex-direction:column;height:100%;display:none}.chat-messages:empty~.empty-state,.empty-state.visible{display:flex}.empty-icon{font-size:48px;font-family:var(--font-display);color:var(--accent);text-shadow:0 0 20px color-mix(in oklch, var(--accent) 30%, transparent)}.empty-title{font-family:var(--font-display);font-size:var(--text-2xl);letter-spacing:2px;color:var(--text);font-weight:700}.empty-subtitle{font-size:var(--text-sm);color:var(--text-dim)}.skeleton-msg{padding:var(--space-4);border-radius:var(--radius-lg) var(--radius-lg) var(--radius-lg) var(--radius-sm);background:var(--agent-bg);border:1px solid var(--border);max-width:65%}.skeleton-line{background:linear-gradient(90deg, var(--border) 0%, color-mix(in oklch, var(--accent) 15%, var(--border)) 40%, var(--border) 80%);height:10px;margin-bottom:var(--space-2);background-size:300% 100%;border-radius:5px;animation:2s ease-in-out infinite shimmer}.skeleton-line:last-child{width:55%;margin-bottom:0}.skeleton-line:nth-child(2){width:80%;animation-delay:.15s}@keyframes shimmer{0%{background-position:300% 0}to{background-position:-100% 0}}@media (prefers-reduced-motion:reduce){.msg-agent,.msg-user,.msg-system,.stream-cursor,.skeleton-line{animation:none}}.chat-input-area{padding:var(--space-3) var(--space-5);border-top:1px solid var(--border);gap:var(--space-2);z-index:1;animation:revealUp .35s var(--ease-out-expo) .3s both;display:flex;position:relative;box-shadow:0 -1px 3px #00000026}.voice-shortcut-hint{padding:0 var(--space-5) var(--space-2);color:var(--text-dim);font-size:var(--text-xs)}.chat-input-shell{flex:1;min-width:0;display:flex;position:relative}.chat-input{background:var(--surface);border:1px solid var(--border);width:100%;color:var(--text);border-radius:var(--radius-md);font-size:var(--text-sm);font-family:var(--font-mono);resize:none;max-height:192px;transition:height .1s ease, border-color var(--duration-fast), box-shadow var(--duration-base);flex:1;padding:10px 42px 10px 14px;overflow-y:auto}.chat-input:focus{border-color:var(--accent);box-shadow:0 0 0 3px color-mix(in oklch, var(--accent) 12%, transparent), 0 0 20px color-mix(in oklch, var(--accent) 8%, transparent);outline:none}.chat-input:disabled{opacity:.5}.chat-input-help-trigger{z-index:2;position:absolute;top:8px;right:10px}.btn-send{background:linear-gradient(135deg, var(--accent) 0%, var(--accent2) 100%);color:#fff;border-radius:var(--radius-md);cursor:pointer;font-size:var(--text-base);font-weight:700;font-family:var(--font-display);letter-spacing:.5px;transition:transform var(--duration-fast), box-shadow var(--duration-base), filter var(--duration-fast);border:none;padding:10px 18px;position:relative;overflow:visible}.btn-send:hover{box-shadow:0 4px 20px color-mix(in oklch, var(--accent) 45%, transparent), 0 0 40px color-mix(in oklch, var(--accent) 15%, transparent);filter:brightness(1.15);transform:translateY(-2px)}.btn-send:active{box-shadow:0 0 30px color-mix(in oklch, var(--accent) 50%, transparent);filter:brightness(1.3);transform:scale(.95)}.btn-send.stop-mode{background:var(--stop-btn);font-size:16px;transition:background .2s}.btn-send.stop-mode:hover{background:var(--stop-btn-hover)}.btn-send:disabled{opacity:.4;cursor:not-allowed}.btn-attach{border:1px solid var(--border);color:var(--text-dim);cursor:pointer;background:0 0;border-radius:8px;padding:10px 12px;font-size:16px;line-height:1;transition:border-color .2s,color .2s}.btn-attach:hover{border-color:var(--accent);color:var(--accent)}.drag-overlay{background:var(--error-dim);border:2px dashed var(--accent);z-index:100;color:var(--accent);pointer-events:none;border-radius:8px;justify-content:center;align-items:center;font-size:14px;display:none;position:absolute;inset:0}.drag-overlay.visible{display:flex}.pending-queue{border-top:1px solid var(--border);background:var(--surface);color:var(--text-dim);flex-direction:column;gap:2px;max-height:35vh;padding:4px 12px 6px;font-size:12px;display:none;overflow-y:auto}.pending-queue.visible{display:flex}.pending-queue-header{justify-content:space-between;align-items:center;padding:2px 4px;display:flex}.pending-queue-title{text-transform:uppercase;letter-spacing:.5px;align-items:center;gap:6px;font-size:10px;font-weight:600;display:inline-flex}.pending-queue-title svg{width:12px;height:12px}.pending-queue-count{background:var(--bg);border:1px solid var(--border);color:var(--text);border-radius:10px;padding:0 6px;font-size:10px;line-height:1.4}.pending-queue-list{flex-direction:column;gap:2px;display:flex}.pending-row{background:var(--bg);border:1px solid var(--border);border-radius:6px;align-items:center;gap:6px;min-height:26px;padding:3px 8px;line-height:1.4;animation:.15s ease-out msgEnterSystem;display:flex}.pending-row--busy{opacity:.5;pointer-events:none}.pending-row-text{text-overflow:ellipsis;white-space:nowrap;min-width:0;color:var(--text);flex:auto;font-size:12px;overflow:hidden}.pending-row-source{text-transform:uppercase;letter-spacing:.5px;color:var(--text-dim);border:1px solid var(--border);border-radius:8px;flex:none;padding:0 5px;font-size:10px}.pending-row-btn{cursor:pointer;color:var(--text-dim);isolation:isolate;background:0 0;border:1px solid #0000;border-radius:4px;flex:none;justify-content:center;align-items:center;padding:2px 6px;transition:color .15s,background .15s,border-color .15s;display:inline-flex;position:relative;overflow:hidden}.pending-row-btn svg{width:14px;height:14px}.pending-btn-content{z-index:1;align-items:center;gap:4px;display:inline-flex;position:relative}.pending-steer-label{font-size:11px;font-weight:500}.pending-steer-arrow{font-size:12px;line-height:1}.pending-row-steer:hover{color:var(--accent);background:var(--surface)}.pending-row-delete:hover{color:var(--delete-color);background:var(--error-dim)}.pending-arm-fill{transform-origin:0;pointer-events:none;opacity:0;z-index:0;position:absolute;inset:0;transform:scaleX(0)}.pending-row-btn.armed{border-color:currentColor}.pending-row-steer.armed{color:var(--accent)}.pending-row-delete.armed{color:var(--delete-color)}.pending-row-steer.armed .pending-arm-fill{background:color-mix(in oklch, var(--accent) 28%, transparent)}.pending-row-delete.armed .pending-arm-fill{background:color-mix(in oklch, var(--delete-color) 28%, transparent)}.pending-row-btn.armed .pending-arm-fill{opacity:1;animation:3s linear forwards pendingArmFill}@keyframes pendingArmFill{0%{transform:scaleX(0)}to{transform:scaleX(1)}}.file-preview{border-top:1px solid var(--border);background:var(--surface);color:var(--text-dim);flex-direction:column;gap:6px;padding:6px 20px;font-size:12px;display:none}.file-preview.visible{display:flex}.file-preview-header{justify-content:space-between;align-items:center;display:flex}.file-preview-title-group{align-items:center;gap:6px;display:flex}.file-preview-title{text-transform:uppercase;letter-spacing:.5px;font-size:11px;font-weight:600}.file-preview-clear{color:var(--delete-color);cursor:pointer;background:0 0;border:none;border-radius:4px;padding:2px 6px;font-size:11px;transition:background .15s}.file-preview-clear:hover{background:var(--error-dim)}.file-preview-list{flex-wrap:wrap;gap:6px;display:flex}.file-chip{background:var(--bg);border:1px solid var(--border);border-radius:6px;align-items:center;gap:6px;padding:4px 8px;font-size:11px;animation:.15s ease-out msgEnterSystem;display:inline-flex}.file-chip-thumb{border-radius:3px;height:24px}.file-chip-name{text-overflow:ellipsis;white-space:nowrap;max-width:180px;overflow:hidden}.file-chip-remove{color:var(--text-dim);cursor:pointer;background:0 0;border:none;padding:0 2px;font-size:12px;line-height:1;transition:color .15s}.file-chip-remove:hover{color:var(--delete-color)}.btn-voice{border:1px solid var(--border);cursor:pointer;min-width:44px;min-height:44px;color:var(--text);background:0 0;border-radius:8px;flex-shrink:0;justify-content:center;align-items:center;padding:6px 10px;font-size:1.1rem;transition:all .2s;display:inline-flex}.btn-voice svg{width:20px;height:20px}.btn-voice:hover{border-color:var(--accent);background:var(--surface)}.btn-voice.recording{background:var(--error-dim);border-color:var(--error);animation:1.5s ease-in-out infinite pulse-recording}.btn-voice.arming{background:var(--surface);border-color:var(--accent);cursor:progress;opacity:.75}@keyframes pulse-recording{0%,to{box-shadow:0 0 0 0 color-mix(in oklch, var(--error) 40%, transparent)}50%{box-shadow:0 0 0 6px color-mix(in oklch, var(--error) 0%, transparent)}}.voice-timer{font-family:var(--font-mono);color:var(--error);text-align:center;min-width:36px;font-size:11px;animation:1.5s ease-in-out infinite pulse-recording}.btn-voice-cancel{background:var(--error-dim);border:1px solid var(--error);cursor:pointer;min-width:44px;min-height:44px;color:var(--error);border-radius:8px;flex-shrink:0;padding:8px 12px;font-size:.9rem;transition:all .2s}.btn-voice-cancel:hover{background:color-mix(in oklch, var(--error) 30%, transparent)}.cmd-dropdown{background:var(--surface);border:1px solid var(--border);z-index:150;opacity:0;pointer-events:none;border-radius:10px 10px 0 0;max-height:280px;transition:opacity .15s ease-out,transform .15s ease-out;position:absolute;bottom:calc(100% + 2px);left:20px;right:20px;overflow-y:auto;transform:translateY(4px);box-shadow:0 -4px 14px #00000040}.cmd-dropdown.visible{opacity:1;pointer-events:auto;transform:translateY(0)}.cmd-item{cursor:pointer;border-left:3px solid #0000;align-items:center;gap:10px;padding:9px 12px;display:flex}.cmd-item:hover,.cmd-item.selected{background:color-mix(in oklch, var(--accent) 10%, transparent)}.cmd-item.selected{border-left-color:var(--accent);scroll-margin-block:4px}.cmd-name{min-width:96px;color:var(--accent);font-weight:700;font-family:var(--font-mono);flex-shrink:0}.cmd-desc{min-width:0;color:var(--text-dim);text-overflow:ellipsis;white-space:nowrap;flex:1;font-size:12px;overflow:hidden}.cmd-meta{flex-wrap:wrap;flex-shrink:0;align-items:center;gap:4px;min-width:0;display:inline-flex}.cmd-chip{border:1px solid var(--border);color:var(--text-dim);white-space:nowrap;border-radius:6px;padding:1px 5px;font-size:11px;line-height:1.4}.cmd-risk-high{color:var(--error,#b42318)}.cmd-risk-medium{color:var(--warning,#925400)}.cmd-args{color:var(--text-dim);opacity:.8;white-space:nowrap;flex-shrink:0;font-size:11px}.cmd-info-btn{border:1px solid var(--border);background:var(--surface);width:20px;min-width:20px;height:20px;color:var(--text-dim);cursor:pointer;opacity:.6;border-radius:999px;flex-shrink:0;justify-content:center;align-items:center;margin:0;padding:0;font-size:11px;line-height:1;transition:border-color .15s,color .15s,background .15s,opacity .15s;display:inline-flex}.cmd-info-btn:hover{border-color:var(--accent);color:var(--accent);background:color-mix(in oklch, var(--accent) 8%, transparent);opacity:1}.cmd-empty{color:var(--text-dim);cursor:default;font-style:italic}.cmd-dropdown::-webkit-scrollbar{width:6px}.cmd-dropdown::-webkit-scrollbar-thumb{background:var(--border-alpha);border-radius:3px}.cmd-dropdown::-webkit-scrollbar-thumb:hover{background:var(--border-strong)}.cmd-recovery{border:1px solid var(--border);background:color-mix(in oklch, var(--surface) 80%, var(--bg));border-radius:8px;margin-top:8px;padding:8px}.cmd-recovery-label{color:var(--text-dim);margin-bottom:4px;font-size:11px;font-weight:700}.cmd-recovery-text{white-space:pre-wrap;overflow-wrap:anywhere;max-height:160px;color:var(--text);font-family:var(--font-mono);margin:0;font-size:12px;line-height:1.45;overflow:auto}.cmd-recovery-suggestions{flex-wrap:wrap;gap:4px;margin-top:6px;display:flex}.cmd-recovery-suggestions code{border:1px solid var(--border);color:var(--text-dim);border-radius:6px;padding:1px 5px;font-size:11px}.cmd-recovery-actions{flex-wrap:wrap;gap:6px;margin-top:8px;display:flex}.cmd-recovery-btn{border:1px solid var(--border);background:var(--surface);min-height:28px;color:var(--text);cursor:pointer;border-radius:6px;padding:3px 8px;font-size:12px}.cmd-recovery-btn:hover,.cmd-recovery-btn:focus-visible{border-color:var(--accent)}.typing-indicator{align-items:center;gap:4px;padding:8px 14px;display:none}.typing-indicator.active{display:flex}.typing-indicator .label{color:var(--text-dim);margin-right:6px;font-size:11px}.typing-dot{background:var(--accent);border-radius:50%;width:6px;height:6px;animation:1.2s ease-in-out infinite bounce}.typing-dot:nth-child(3){animation-delay:.15s}.typing-dot:nth-child(4){animation-delay:.3s}.typing-dot:nth-child(5){animation-delay:.45s}@keyframes bounce{0%,60%,to{opacity:.3;transform:translateY(0)}30%{opacity:.7;transform:translateY(-3px)}}.streaming-shimmer{background:linear-gradient(90deg, transparent, var(--accent), transparent);background-size:200% 100%;border-radius:2px;height:3px;animation:1.5s ease-in-out infinite streaming-shimmer}@keyframes streaming-shimmer{0%{background-position:-200% 0}to{background-position:200% 0}}.status-badge{transition:background-color var(--duration-base) ease, scale .15s ease}.status-badge.status-running{animation:none}.status-badge.status-running:before{content:"";background:var(--status-running-color,var(--warning));border-radius:50%;width:6px;height:6px;margin-right:4px;animation:1.5s ease-in-out infinite dotPing;display:inline-block}.status-badge.status-idle{opacity:.7;animation:none}.status-badge.status-steering{animation:none}.status-badge.status-steering:before{content:"";background:var(--status-steering-color,var(--primary));border-radius:50%;width:6px;height:6px;margin-right:4px;animation:1s ease-in-out infinite dotPing;display:inline-block}::view-transition-old(root),::view-transition-new(root){animation-duration:.2s}@supports (animation-timeline:view()){.chat-messages:not(.vs-active) .msg{animation:linear both scroll-fade-in view();animation-range:entry entry 30%}@keyframes scroll-fade-in{0%{opacity:0;transform:translateY(12px)}to{opacity:1;transform:translateY(0)}}}.file-path-link{cursor:pointer;color:var(--accent);text-underline-offset:3px;border-radius:2px;margin:0 -2px;padding:0 2px;text-decoration:underline 1px dotted;transition:background .15s,text-decoration-style .15s}.file-path-link:hover,.file-path-link:focus-visible{background:color-mix(in oklch, var(--accent) 12%, transparent);outline:none;text-decoration-style:solid}.file-path-link:active{background:color-mix(in oklch, var(--accent) 20%, transparent)}.file-path-link.opening{opacity:.6;animation:.6s ease-in-out infinite alternate file-path-pulse}.file-path-link.opened{background:oklch(72.2746% .192007 149.579/.15);text-decoration-color:#22c55e}.file-path-link.open-failed{background:oklch(63.6834% .207849 25.3313/.15);text-decoration-style:wavy;text-decoration-color:#ef4444}@keyframes file-path-pulse{0%{opacity:.6}to{opacity:1}}.chat-inline-img{cursor:pointer;object-fit:contain;background:color-mix(in oklch, var(--surface) 75%, var(--border));border-radius:8px;max-width:100%;min-height:120px;max-height:360px;margin:8px 0;display:block}.chat-inline-img-error{border:1px dashed color-mix(in oklch, var(--error) 45%, var(--border));background:var(--error-dim);max-width:100%;min-height:120px;color:var(--text-dim);font-size:var(--text-sm);text-align:center;border-radius:8px;justify-content:center;align-items:center;margin:8px 0;padding:16px;display:flex}.chat-inline-video{border-radius:8px;max-width:100%;max-height:360px;margin:8px 0;display:block}.media-lightbox{z-index:9999;justify-content:center;align-items:center;display:flex;position:fixed;inset:0}.media-lightbox.hidden{display:none}.media-lightbox-backdrop{background:#000000d9;position:absolute;inset:0}.media-lightbox-content{flex-direction:column;align-items:center;display:flex;position:relative}.media-lightbox-img{object-fit:contain;cursor:pointer;border-radius:8px;max-width:90vw;max-height:85vh}.media-lightbox-controls{gap:8px;display:flex;position:absolute;top:8px;right:8px}.media-lightbox-controls button{color:#fff;cursor:pointer;background:#0009;border:none;border-radius:4px;padding:6px 12px;font-size:14px}.media-lightbox-controls button:hover{background:#000000e6}.bgtask-badge{--bgtask-accent:color-mix(in oklch, var(--accent) 30%, oklch(62% .2 305) 70%);border-top:1px solid var(--border);background:var(--surface);flex-direction:column;padding:3px 12px 4px;display:none}.bgtask-badge.visible{display:flex}.bgtask-header{cursor:pointer;color:var(--bgtask-accent);background:0 0;border:none;align-self:flex-start;align-items:center;gap:6px;padding:2px 4px;font-size:10px;font-weight:600;display:inline-flex}.bgtask-header svg{width:11px;height:11px}.bgtask-count{background:color-mix(in oklch, var(--bgtask-accent) 20%, transparent);min-width:14px;color:var(--bgtask-accent);text-align:center;border-radius:7px;padding:0 4px}.bgtask-count-pop{animation:.3s bgtaskPop}@keyframes bgtaskPop{0%{transform:scale(1)}50%{transform:scale(1.4)}to{transform:scale(1)}}.bgtask-chevron{color:var(--bgtask-accent);opacity:.7}.bgtask-list{flex-direction:column;gap:1px;padding:2px 4px 0;animation:.15s bgtaskDropUp;display:flex}@keyframes bgtaskDropUp{0%{opacity:0;transform:translateY(4px)}to{opacity:1;transform:translateY(0)}}.bgtask-row{color:var(--text);border-radius:4px;align-items:center;gap:8px;padding:2px 4px;font-size:11px;display:flex}.bgtask-row-kind{color:var(--bgtask-accent);font-weight:600}.bgtask-row-id,.bgtask-row-elapsed,.bgtask-row-status{color:var(--text-dim,var(--text));opacity:.7;font-variant-numeric:tabular-nums}.bgtask-row-elapsed{margin-left:auto}.bgtask-row-recent{opacity:.78}.bgtask-spinner{border:2px solid var(--bgtask-accent);border-top-color:#0000;border-radius:50%;flex:none;width:10px;height:10px;animation:.8s linear infinite bgtaskSpin}@keyframes bgtaskSpin{to{transform:rotate(360deg)}}.bgtask-status-icon.ok{color:var(--success,#3da35d)}.bgtask-status-icon.err{color:var(--danger,#d04545)}.bgtask-status-icon.dim{opacity:.6}.bgtask-flash-ok{animation:1.2s bgtaskFlashOk}.bgtask-flash-err{animation:1.2s bgtaskFlashErr}@keyframes bgtaskFlashOk{0%{background:color-mix(in oklch, var(--success,#3da35d) 30%, transparent)}to{background:0 0}}@keyframes bgtaskFlashErr{0%{background:color-mix(in oklch, var(--danger,#d04545) 30%, transparent)}to{background:0 0}}@media (prefers-reduced-motion:reduce){.bgtask-spinner,.bgtask-count-pop,.bgtask-list,.bgtask-flash-ok,.bgtask-flash-err{animation:none}}.native-requests{min-width:0;min-height:0;max-height:min(40dvh,24rem);padding:var(--space-3);border-block-start:1px solid var(--border);background:var(--surface);color:var(--text);font-family:var(--font-ui);font-size:var(--text-sm);word-break:keep-all;overflow-wrap:anywhere;flex:0 auto;line-height:1.5;overflow-y:auto}.native-requests[hidden]{display:none}.native-request-announcer{clip-path:inset(50%);white-space:nowrap;width:1px;height:1px;position:absolute;overflow:hidden}.native-request-title{font-size:var(--text-base);text-wrap:balance;margin:0;font-weight:600}.native-request-status,.native-request-context{margin-block:var(--space-1) var(--space-2);text-wrap:balance}.native-request-controls fieldset{margin-block:var(--space-2);border:0;min-width:0;padding:0}.native-request-controls legend{white-space:pre-wrap;font-weight:600}.native-request-controls label{color:inherit;font-size:inherit;align-items:flex-start;gap:var(--space-2);margin-block:var(--space-1);display:flex}.native-request-controls label:has(textarea){display:block}.native-request-controls input{accent-color:var(--accent);flex-shrink:0}.native-requests button,.native-requests textarea{border:1px solid var(--text-dim);border-radius:var(--radius-sm);background:var(--bg);color:var(--text);font:inherit;padding:var(--space-2);overflow-wrap:anywhere;max-width:100%}.native-requests button{margin:var(--space-1);cursor:pointer}.native-requests button:hover:not(:disabled){background:var(--surface)}.native-requests button:active:not(:disabled){border-color:var(--accent)}.native-requests button[aria-disabled=true],.native-requests button:disabled{opacity:.65;cursor:default}.native-requests textarea{resize:vertical;width:100%;min-height:4rem;display:block}.native-requests :is(button,input,textarea):focus-visible{outline:2px solid var(--accent);outline-offset:2px}@media (pointer:coarse){.native-requests button{min-width:44px}.native-requests button,.native-request-controls label{min-height:44px}}:root:not([data-presentation-mode=legacy]) .msg-agent[data-activity-key] .process-block,:root:not([data-presentation-mode=legacy]) .msg-agent[data-activity-key][data-activity-live=true] .msg-content,:root:not([data-presentation-mode=legacy]) .msg-agent[data-activity-recovering=true]:not([data-activity-saved=true]) .msg-content,:root[data-presentation-mode=legacy] .activity-turn{display:none}:root[data-presentation-mode=legacy] .activity-turn[data-status=stopped],:root[data-presentation-mode=legacy] .activity-turn[data-status=error]{display:block}:root[data-presentation-mode=legacy] .activity-turn>:not(.activity-status):not(.activity-error){display:none}.activity-turn{min-width:0;max-width:100%;margin-block:0 var(--space-2);color:var(--text);font-family:var(--font-ui);font-size:var(--text-sm);overflow-wrap:anywhere;word-break:normal;line-height:1.5}.activity-turn details,.activity-turn summary,.activity-turn .activity-list{min-width:0;max-width:100%}.activity-turn .activity-status{margin-block:0 var(--space-1);font-weight:600}.activity-turn .activity-disclosure{border-inline-start:0;padding-inline-start:0}.activity-turn summary{padding:var(--space-2) var(--space-1);cursor:pointer;white-space:normal;overflow-wrap:anywhere;border-radius:var(--radius-sm);display:list-item}.activity-turn .activity-status.sr-only{clip-path:inset(50%);white-space:nowrap;border:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}:root[data-presentation-mode=legacy] .activity-turn:is([data-status=stopped],[data-status=error])>.activity-status{width:auto;height:auto;margin:0 0 var(--space-1);clip-path:none;white-space:normal;position:static;overflow:visible}.activity-turn .activity-summary{align-items:center;gap:var(--activity-gap);box-sizing:border-box;min-height:var(--activity-row-h);white-space:nowrap;overflow-wrap:normal;flex-wrap:nowrap;padding:4px;font-weight:500;list-style:none;display:flex}.activity-summary::-webkit-details-marker{display:none}.activity-summary::marker{content:""}.activity-chevron{flex:0 0 var(--activity-chevron);color:var(--activity-muted);transition:transform var(--motion-fast) ease;display:inline-flex;transform:rotate(0)}.activity-chevron svg{width:var(--activity-chevron);height:var(--activity-chevron);stroke-width:1.8px}.activity-disclosure[open]>.activity-summary>.activity-chevron{transform:rotate(90deg)}.activity-status-label{flex:none;font-weight:600}.activity-status-label:after{content:"·";color:var(--activity-muted);margin-inline-start:var(--activity-gap);font-weight:400}.activity-summary-text{text-overflow:ellipsis;min-width:0;color:var(--activity-muted);flex:auto;overflow:hidden}.activity-accessory{color:var(--activity-muted);font-variant-numeric:tabular-nums;flex:none}.activity-accessory:after{content:attr(data-unit)}.activity-steer-pill{color:var(--status-steering-color);background:var(--status-steering-bg);border-radius:4px;flex:none;align-items:center;gap:4px;padding:2px 6px;display:inline-flex}.activity-footer{margin-block:var(--space-2)}.activity-disclosure>:not(summary){margin-inline-start:var(--activity-indent)}.activity-turn .activity-summary:hover{text-decoration:none}.activity-turn .activity-group,.activity-turn .activity-row{min-width:0;max-width:100%}.activity-turn .activity-item-summary,.activity-turn .activity-group-summary{align-items:center;gap:var(--activity-gap);width:100%;min-height:var(--activity-row-h);padding:0 var(--space-1);color:var(--text);text-align:start;background:0 0;border:0;display:flex}.activity-turn .activity-item-summary{list-style:none}.activity-turn .activity-item-summary::-webkit-details-marker{display:none}.activity-row-icon,.activity-chevron-sm{color:var(--activity-muted);flex-shrink:0;display:inline-flex}.activity-row-icon,.activity-row-icon svg{width:var(--activity-icon);height:var(--activity-icon)}.activity-chevron-sm,.activity-chevron-sm svg{width:var(--activity-chevron-sm);height:var(--activity-chevron-sm)}.activity-row-icon svg,.activity-chevron-sm svg{stroke-width:1.8px}.activity-chevron-sm{transition:transform var(--motion-fast)}.activity-item[open]>summary>.activity-chevron-sm,.activity-group-summary[aria-expanded=true]>.activity-chevron-sm{transform:rotate(180deg)}.activity-row-label{white-space:nowrap;text-overflow:ellipsis;flex:1;min-width:0;overflow:hidden}.activity-row[data-kind=command] .activity-row-label{font-family:var(--font-mono)}.activity-row-status{color:var(--activity-muted);flex-shrink:0;font-size:12px}.activity-row[data-status=running] .activity-row-status:before{content:"";width:6px;height:6px;background:currentColor;border-radius:50%;margin-inline-end:var(--activity-gap);animation:1s ease-in-out infinite activity-running-pulse;display:inline-block}@keyframes activity-running-pulse{50%{opacity:.35}}@keyframes activity-body-reveal{0%{opacity:0}to{opacity:1}}.activity-turn .activity-item[open]>.activity-item-text,.activity-turn .activity-group-body:not([hidden]){animation:activity-body-reveal var(--motion-base) ease-out}.activity-group-body{border-inline-start:1px solid var(--activity-border);max-height:var(--activity-group-max);scrollbar-gutter:stable;scroll-padding-block:var(--activity-indent);margin-inline-start:var(--activity-indent);padding-inline-start:var(--activity-gap);overflow:auto}.activity-turn .activity-item-text{box-sizing:border-box;min-width:0;max-width:100%;max-height:var(--activity-output-max);margin:var(--space-1) 0 var(--space-2) var(--activity-indent);padding:var(--space-2);padding-bottom:calc(var(--space-2) + var(--activity-output-fade));background:var(--code-bg);color:var(--text);font-family:var(--font-mono), var(--font-ui);white-space:pre-wrap;overflow-wrap:anywhere;tab-size:4;mask-image:linear-gradient(to bottom, #000 calc(100% - var(--activity-output-fade)), transparent);font-size:12px;line-height:1.6;overflow:auto}.activity-turn .activity-row-reasoning .activity-item-text{font-family:var(--font-ui);color:var(--activity-muted);max-height:140px}.activity-turn .activity-row-message .activity-item-text{font-family:var(--font-ui)}.activity-turn .activity-row-reasoning .activity-row-label{color:var(--activity-muted)}.activity-turn .activity-group-body:focus-visible,.activity-turn .activity-item-text:focus-visible{box-shadow:var(--focus-ring-shadow);outline:2px solid var(--accent);outline-offset:-2px}.activity-turn .activity-pages{align-items:center;gap:var(--space-2);margin-block:var(--space-2);flex-wrap:wrap;display:flex}.activity-turn button{min-width:0;max-width:100%;padding:var(--space-2);border:1px solid var(--text-dim);border-radius:var(--radius-sm);background:var(--surface);color:var(--text);font:inherit;white-space:normal;overflow-wrap:anywhere;cursor:pointer}.activity-turn button:disabled{color:var(--text-dim);cursor:default}.activity-turn summary:hover,.activity-turn button:not(:disabled):hover{background:var(--surface);text-decoration:underline}.activity-turn summary:focus-visible,.activity-turn button:focus-visible{box-shadow:var(--focus-ring-shadow);outline:2px solid var(--accent);outline-offset:2px}.activity-turn .activity-empty,.activity-turn .activity-degraded,.activity-turn .activity-connection,.activity-turn .activity-omitted,.activity-turn .activity-choice-notice,.activity-turn .activity-requests{margin-block:var(--space-2)}.activity-turn [hidden]{display:none}@media (pointer:coarse){.activity-turn .activity-summary,.activity-turn summary,.activity-turn button{min-width:44px;min-height:44px}}@media (prefers-reduced-motion:reduce){.activity-turn,.activity-turn *,.activity-turn :before,.activity-turn :after{scroll-behavior:auto!important;transition:none!important;animation:none!important}}.activity-turn .activity-error{margin-block:var(--space-2);color:var(--text);overflow-wrap:anywhere}:root[data-presentation-mode=legacy] .activity-read-control,:root[data-presentation-mode=legacy] .activity-read-capacity{display:none}.activity-read-control,.activity-read-capacity,.activity-legacy-cache{min-width:0;max-width:100%;margin-block:var(--space-2);color:var(--text);font:var(--text-sm)/1.5 var(--font-ui);overflow-wrap:anywhere}.activity-unavailable{margin-block:0 var(--space-2);color:var(--activity-muted);font:var(--text-sm)/1.5 var(--font-ui);overflow-wrap:anywhere}.activity-read-control p{margin-block:var(--space-2)}.activity-read-control p:empty{display:none}.activity-legacy-cache>summary{cursor:pointer;padding-block:var(--space-2)}.activity-read-control button{max-width:100%;padding:var(--space-2);border:1px solid var(--text-dim);border-radius:var(--radius-sm);color:var(--text);background:var(--surface);font:inherit;white-space:normal;overflow-wrap:anywhere;cursor:pointer}.activity-read-control button:disabled{color:var(--text-dim);cursor:default}.activity-read-control button:focus-visible,.activity-legacy-cache summary:focus-visible{outline:2px solid var(--accent);outline-offset:2px}.activity-legacy-cache pre{white-space:pre-wrap;overflow-wrap:anywhere;max-height:24rem;overflow:auto}.activity-read-control[hidden],.activity-read-control [hidden]{display:none}@media (pointer:coarse){.activity-read-control button,.activity-legacy-cache summary{min-height:44px}.activity-turn .activity-item-summary,.activity-turn .activity-group-summary{min-width:44px;min-height:44px}}@media (prefers-reduced-motion:reduce){.activity-turn .activity-chevron-sm{transition:none}.activity-turn .activity-item[open]>.activity-item-text,.activity-turn .activity-group-body:not([hidden]),.activity-row[data-status=running] .activity-row-status:before{animation:none}}.chat-search-trigger{cursor:pointer;border-radius:var(--radius-sm);opacity:.6;transition:opacity var(--duration-fast);background:0 0;border:none;padding:2px 4px;font-size:14px;line-height:1}.chat-search-trigger:hover{opacity:1}.chat-search{align-items:center;display:none;position:relative}.chat-search.open{flex-direction:column;display:flex}.chat-search-input-wrap{align-items:center;gap:var(--space-2);background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-md);padding:var(--space-1) var(--space-3);min-width:260px;transition:border-color var(--duration-fast);display:flex}.chat-search-input-wrap:focus-within{border-color:var(--accent)}.chat-search-icon{opacity:.5;font-size:var(--text-sm);flex-shrink:0}.chat-search-icon:before{content:"🔍";font-size:12px}.chat-search-input{color:var(--text);font-family:var(--font-ui);font-size:var(--text-sm);background:0 0;border:none;outline:none;width:100%;min-width:160px}.chat-search-input::placeholder{color:var(--text-dim)}.chat-search-count{font-size:var(--text-xs);color:var(--text-dim);white-space:nowrap;flex-shrink:0}.chat-search-close{color:var(--text-dim);cursor:pointer;font-size:var(--text-base);padding:0 var(--space-1);transition:color var(--duration-fast);background:0 0;border:none;line-height:1}.chat-search-close:hover{color:var(--text)}.chat-search-results{z-index:100;background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-md);margin-top:var(--space-1);overscroll-behavior:contain;width:380px;max-height:320px;display:none;position:absolute;top:100%;left:0;right:auto;overflow-y:auto;box-shadow:0 4px 16px #0000004d}.chat-search-results.has-results{display:block}.chat-search-result{padding:var(--space-2) var(--space-3);cursor:pointer;border-bottom:1px solid var(--border);transition:background var(--duration-fast);flex-direction:column;gap:2px;display:flex}.chat-search-result:last-child{border-bottom:none}.chat-search-result:hover,.chat-search-result.active{background:oklch(15% .02 270)}.chat-search-result-meta{align-items:center;gap:var(--space-2);font-size:var(--text-xs);color:var(--text-dim);display:flex}.chat-search-result-role{text-transform:uppercase;letter-spacing:.5px;font-weight:600}.chat-search-result-role.user{color:var(--accent)}.chat-search-result-role.agent{color:var(--green)}.chat-search-result-badge{border-radius:var(--radius-sm);background:var(--warning-dim);color:var(--warning);padding:1px 5px;font-size:10px}.chat-search-result-snippet{font-size:var(--text-sm);color:var(--text);text-overflow:ellipsis;-webkit-line-clamp:2;-webkit-box-orient:vertical;line-height:1.4;display:-webkit-box;overflow:hidden}.chat-search-result-snippet mark{color:var(--warning);background:oklch(78% .16 75/.3);border-radius:2px;padding:0 1px}.msg.search-highlight{animation:1.5s ease-out searchPulse}@keyframes searchPulse{0%{box-shadow:inset 0 0 0 2px var(--accent)}to{box-shadow:inset 0 0 0 2px #0000}}@media (prefers-reduced-motion:reduce){.msg.search-highlight{box-shadow:inset 0 0 0 2px var(--accent);animation:none}}@media (width<=768px){.chat-search{flex:260px;min-width:0;max-width:100%;position:static}.chat-search-input-wrap{width:100%;min-width:0;max-width:100%}.chat-search-input{min-width:0}.chat-search-results{left:var(--space-5);max-width:calc(100vw - 2 * var(--space-5));right:auto}}#chatMessages{transition:box-shadow .4s,border-color .4s}body[data-orc-state] #chatMessages{box-shadow:inset 0 0 30px -10px var(--orc-glow);border-color:var(--orc-glow)}body[data-orc-state] .chat-input-area{border-top:2px solid var(--orc-glow)}body:not([data-orc-state]) .chat-input-area{border-top:2px solid #0000;transition:border-color .4s}@keyframes orc-pulse{0%{box-shadow:inset 0 0 60px -10px var(--orc-glow)}50%{box-shadow:inset 0 0 20px -10px var(--orc-glow)}to{box-shadow:inset 0 0 30px -10px var(--orc-glow)}}body[data-orc-state].orc-pulse #chatMessages{animation:.6s ease-out orc-pulse}.orc-state-badge{font-size:10px;font-weight:700;font-family:var(--font-mono);letter-spacing:1px;background:color-mix(in oklch, var(--orc-glow) 20%, var(--surface));color:var(--orc-glow);border:1px solid var(--orc-glow);text-transform:uppercase;border-radius:4px;padding:2px 8px;display:inline-block}.pabc-roadmap{background:linear-gradient(135deg, var(--surface) 0%, color-mix(in oklch, var(--surface) 90%, #000) 100%);border:1px solid var(--border);border-radius:10px;align-items:center;padding:12px 22px;display:none;position:relative;overflow:visible;box-shadow:0 2px 16px #0000004d,inset 0 1px #ffffff08}.pabc-roadmap.visible{animation:.5s cubic-bezier(.22,1,.36,1) pabc-fadeSlideIn;display:flex}@keyframes pabc-fadeSlideIn{0%{opacity:0;transform:translateY(-12px)scale(.98)}to{opacity:1;transform:translateY(0)scale(1)}}.pabc-dot{width:26px;height:26px;font-family:var(--font-display,var(--font-mono));z-index:2;letter-spacing:.5px;border-radius:50%;flex-shrink:0;justify-content:center;align-items:center;font-size:10px;font-weight:700;transition:all .5s cubic-bezier(.22,1,.36,1);display:flex}.pabc-dot.future{background:var(--surface);color:var(--text-dim);border:1px solid var(--border)}.pabc-dot.active{color:var(--bg);border:2px solid;transform:scale(1.1);box-shadow:0 0 14px -3px,0 0 4px -1px}.pabc-dot.done{color:color-mix(in oklch, var(--bg) 90%, transparent);border:1px solid color-mix(in oklch, var(--text) 10%, transparent);opacity:.65}.pabc-dot[data-phase=I].active,.pabc-dot[data-phase=I].done{background:var(--orc-glow-I)}.pabc-dot[data-phase=P].active,.pabc-dot[data-phase=P].done{background:var(--orc-glow-P)}.pabc-dot[data-phase=A].active,.pabc-dot[data-phase=A].done{background:var(--orc-glow-A)}.pabc-dot[data-phase=B].active,.pabc-dot[data-phase=B].done{background:var(--orc-glow-B)}.pabc-dot[data-phase=C].active,.pabc-dot[data-phase=C].done{background:var(--orc-glow-C)}.pabc-connector{background:linear-gradient(90deg, var(--border) 0%, color-mix(in oklch, var(--border) 60%, var(--surface)) 50%, var(--border) 100%);border-radius:1px;flex:1;min-width:44px;height:2px;transition:all .5s}.pabc-connector.done{background:linear-gradient(90deg, var(--text-dim) 0%, color-mix(in oklch, var(--text-dim) 70%, var(--surface)) 50%, var(--text-dim) 100%);box-shadow:0 0 6px -2px var(--text-dim)}.pabc-center{flex-direction:column;flex-shrink:0;align-items:center;padding:0 20px;display:flex}.pabc-brand{font-family:var(--font-display,var(--font-mono));letter-spacing:4px;background:linear-gradient(90deg, var(--orc-glow-I), var(--orc-glow-P), var(--orc-glow-A), var(--orc-glow-B), var(--orc-glow-C));-webkit-text-fill-color:transparent;filter:brightness(1.1);-webkit-background-clip:text;background-clip:text;font-size:13px;font-weight:700}.pabc-tagline{font-family:var(--font-mono);color:var(--text-dim);letter-spacing:2px;text-transform:uppercase;opacity:.7;margin-top:2px;font-size:7px}.shark-runner{z-index:10;pointer-events:none;filter:drop-shadow(0 2px 4px #0006);background:url(/dist/assets/shark-sprite-B3AAuERd.png) 0 0/360px 24px no-repeat;width:36px;height:24px;transition:transform 1.4s cubic-bezier(.25,.46,.45,.94);display:none;position:absolute;top:-13px;left:0}.shark-runner.running{animation:1s steps(10,end) infinite shark-run;display:block}@keyframes shark-run{to{background-position:-360px 0}}@keyframes pabc-shimmer{0%{opacity:1;filter:brightness()}25%{opacity:1;filter:brightness(1.4);box-shadow:0 0 24px #a855f733}to{opacity:0;transform:translateY(-8px)scale(.98)}}.pabc-roadmap.shimmer-out{animation:1s ease-out forwards pabc-shimmer}.pabc-meta{min-height:22px;font-family:var(--font-mono);color:var(--text-dim);align-items:center;gap:8px;padding:4px 18px 0;font-size:10px;display:flex}.pabc-meta span[hidden]{display:none}.pabc-anchor,.pabc-heartbeat-status{text-overflow:ellipsis;white-space:nowrap;border:1px solid var(--border);background:color-mix(in oklch, var(--surface) 88%, var(--text) 12%);border-radius:4px;max-width:min(42vw,420px);padding:3px 7px;overflow:hidden}.pabc-heartbeat-status{color:var(--orc-glow-A);border-color:color-mix(in oklch, var(--orc-glow-A) 45%, var(--border))}[data-theme=light] .pabc-roadmap{background:linear-gradient(135deg, var(--surface) 0%, color-mix(in oklch, var(--surface) 90%, #000) 100%);box-shadow:0 2px 12px #00000014,inset 0 1px #fff9}[data-theme=light] .pabc-dot.future{background:var(--surface);color:var(--text-dim)}[data-theme=light] .pabc-dot.active{color:var(--bg)}[data-theme=light] .pabc-dot.done{color:var(--bg);border-color:#0000000f}[data-theme=light] .pabc-connector{background:linear-gradient(90deg, var(--border) 0%, color-mix(in oklch, var(--border) 60%, var(--surface)) 50%, var(--border) 100%)}[data-theme=light] .pabc-connector.done{background:linear-gradient(90deg, var(--text-dim) 0%, color-mix(in oklch, var(--text-dim) 70%, var(--surface)) 50%, var(--text-dim) 100%);box-shadow:none}[data-theme=light] .shark-runner{filter:drop-shadow(0 1px 2px #00000026)}.interview-panel{max-width:100%;margin:0 auto 8px;font-size:.82rem}.interview-panel[hidden]{display:none}.iv-toggle{background:var(--bg-secondary,#ffffff0a);border:1px solid var(--border-color,#ffffff14);cursor:pointer;width:100%;color:var(--text-secondary,inherit);font:inherit;text-align:left;border-radius:8px;align-items:center;gap:6px;padding:8px 14px;font-size:.82rem;display:flex}.iv-toggle:hover{background:var(--bg-hover,#ffffff14)}.iv-chevron{opacity:.65;font-size:1.1em;transition:transform .15s;display:inline-block}.interview-panel:not(.collapsed) .iv-chevron{transform:rotate(90deg)}.iv-summary{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.iv-known-count{color:var(--accent-green,#4caf50)}.iv-unknown-count{color:var(--accent-yellow,#ff9800)}.iv-body{gap:12px;max-height:280px;margin-top:6px;display:flex;overflow-y:auto}.interview-panel.collapsed .iv-body{display:none}.iv-section{min-width:0}.iv-section-ambiguity{flex:0 0 160px}.iv-section-known{flex:3 1 0}.iv-section-unknown{flex:2 1 0}.iv-section-unknown:empty{flex:0;display:none}.iv-section ul{margin:4px 0;padding:0;list-style:none}.iv-known:before{content:"✓ ";color:var(--accent-green,#4caf50)}.iv-unknown:before{content:"? ";color:var(--accent-yellow,#ff9800)}.goal-cockpit{font-family:var(--font-mono);background:color-mix(in oklch, var(--surface) 92%, var(--orc-glow-I) 8%);border-bottom:1px solid var(--border);align-items:center;gap:8px;min-height:0;padding:6px 16px;font-size:11px;display:flex;overflow:hidden}.goal-cockpit[hidden]{display:none}.goal-objective{text-overflow:ellipsis;white-space:nowrap;min-width:0;color:var(--text);flex:1 1 0;font-weight:600;overflow:hidden}.goal-status{text-transform:uppercase;letter-spacing:.5px;border-radius:3px;flex-shrink:0;padding:1px 6px;font-size:9px;font-weight:700}.goal-status--active{background:color-mix(in oklch, var(--orc-glow-P) 20%, var(--surface));color:var(--orc-glow-P);border:1px solid var(--orc-glow-P)}.goal-status--paused{background:color-mix(in oklch, var(--orc-glow-A) 20%, var(--surface));color:var(--orc-glow-A);border:1px solid var(--orc-glow-A)}.goal-status--blocked{background:color-mix(in oklch, oklch(65% .2 30) 20%, var(--surface));color:oklch(65% .2 30);border:1px solid oklch(65% .2 30)}.goal-next{text-overflow:ellipsis;white-space:nowrap;max-width:min(30vw,280px);color:var(--text-dim);flex-shrink:0;font-size:10px;overflow:hidden}[data-theme=light] .goal-cockpit{background:color-mix(in oklch, var(--surface) 95%, var(--orc-glow-I) 5%)}.cli-status-header{cursor:pointer;user-select:none;border-radius:var(--radius-ctl);justify-content:space-between;align-items:center;min-height:28px;display:flex}.cli-status-header:after{content:"▸";color:var(--text-dim);margin-left:8px;font-size:12px}.sidebar-left .cli-status-header:hover{background:var(--surface-2)}.sidebar-left .cli-status-header.expanded{background:var(--surface-3)}.cli-status-header.expanded:after{content:"▾"}.cli-status-toolbar{align-items:center;gap:var(--space-2);display:flex}.cli-status-toolbar .cli-status-header{flex:1;min-width:0}.btn-refresh{transition:color var(--duration-fast), border-color var(--duration-fast), background var(--duration-fast), transform var(--duration-fast)}.btn-refresh:active:not(:disabled){transform:translateY(1px)}.btn-refresh:disabled{cursor:wait;opacity:.72}.btn-refresh.is-refreshing{color:var(--accent);border-color:color-mix(in oklch, var(--accent) 38%, var(--border));background:color-mix(in oklch, var(--accent) 10%, transparent)}.btn-refresh.is-refreshing svg{animation:.85s linear infinite cliRefreshSpin}.btn-refresh.is-success{color:var(--success);border-color:color-mix(in oklch, var(--success) 42%, var(--border));background:var(--success-dim)}.btn-refresh.is-error{color:var(--error);border-color:color-mix(in oklch, var(--error) 42%, var(--border));background:var(--error-dim)}.cli-refresh-state{max-width:86px;min-height:13px;color:var(--text-dim);font-family:var(--font-mono);text-align:right;text-overflow:ellipsis;white-space:nowrap;font-size:10px;line-height:1.2;overflow:hidden}.cli-refresh-state[data-state=refreshing]{color:var(--accent)}.cli-refresh-state[data-state=success]{color:var(--success)}.cli-refresh-state[data-state=error]{color:var(--error)}@keyframes cliRefreshSpin{to{transform:rotate(360deg)}}@media (prefers-reduced-motion:reduce){.btn-refresh.is-refreshing svg{animation:none}}.cli-status-row{align-items:center;gap:8px;min-height:28px;padding:4px 0;font-size:12px;display:flex}.cli-dot{border-radius:50%;flex-shrink:0;width:8px;height:8px}.cli-dot.ok{background:var(--green)}.cli-dot.warn{background:var(--warning);animation:2s ease-in-out infinite pulse-warn}@keyframes pulse-warn{0%,to{opacity:1}50%{opacity:.5}}.cli-dot.missing{background:var(--error)}.cli-provider-icon{flex-shrink:0;align-items:center;width:16px;height:16px;display:inline-flex}.cli-provider-icon svg{width:100%;height:100%}.cli-name{flex:1}.cli-path{color:var(--text-dim);text-overflow:ellipsis;white-space:nowrap;max-width:120px;font-size:10px;overflow:hidden}.settings-group{border:1px solid var(--border);border-radius:6px;padding:10px;transition:border-color .2s}.settings-group:hover{border-color:color-mix(in oklch, var(--border) 60%, var(--accent))}.settings-group h4{color:var(--text-dim);font-size:11px;font-family:var(--font-display);letter-spacing:.5px;align-items:center;gap:4px;margin-bottom:8px;display:flex}.settings-row{margin-bottom:6px}.settings-row:last-child{margin-bottom:0}.sub-row{border-left:2px solid var(--border);padding-left:8px}.perm-toggle{gap:8px;display:flex}.perm-btn{border:1px solid var(--border);color:var(--text-dim);cursor:pointer;text-align:center;background:0 0;border-radius:6px;flex:1;padding:6px;font-family:inherit;font-size:11px}.perm-selector{padding:0;display:block;position:relative}.perm-selector select{width:100%;color:inherit;font:inherit;cursor:pointer;background-color:#0000;border:0;margin:0;padding:6px 18px 6px 22px}.perm-selector>:first-child{pointer-events:none;position:absolute;top:50%;left:6px;transform:translateY(-50%)}.perm-selector:focus-within{outline:2px solid var(--accent);outline-offset:2px}.perm-save-error{color:var(--text-dim);margin-top:6px;font-size:11px}.perm-btn.active{border-color:var(--accent);color:var(--accent);background:color-mix(in oklch, var(--accent) 10%, var(--bg))}.perm-btn:disabled,.perm-selector:has(select:disabled){border-color:var(--border);color:var(--text-dim);cursor:not-allowed;opacity:.55;background:0 0}.perm-selector select:disabled{cursor:not-allowed}.channel-transport-status .transport-status-block+.transport-status-block{margin-top:10px}.slack-field-error{color:var(--error,#e5534b);margin-top:3px;font-size:11px}.settings-managed-notice{border:1px solid color-mix(in oklch, var(--accent) 45%, var(--border));color:var(--text-dim);background:color-mix(in oklch, var(--accent) 7%, var(--bg));border-radius:6px;margin-bottom:8px;padding:7px 8px;font-size:11px;line-height:1.4}.input-sm.input-error{border-color:var(--error,#e5534b)}.slack-advanced{margin-top:4px}.slack-advanced>summary{color:var(--text-dim);cursor:pointer;margin-bottom:6px;font-size:11px}.section-title-actions{align-items:center;gap:6px;margin-left:auto;display:inline-flex}.onboard-trigger{white-space:nowrap;flex:none;padding:3px 8px;font-size:10px}.onboarding-box{flex-direction:column;gap:10px;max-width:460px;padding:16px;display:flex}.onboarding-head{justify-content:space-between;align-items:center;gap:8px;display:flex}.onboarding-progress{color:var(--text-dim);font-variant-numeric:tabular-nums;margin-left:auto;margin-right:4px;font-size:11px}.onboarding-steps{gap:6px;display:flex}.onboarding-dot{background:var(--border);border-radius:2px;flex:1;height:3px}.onboarding-dot.is-done{background:color-mix(in oklch, var(--accent) 55%, var(--border))}.onboarding-dot.is-active{background:var(--accent)}.onboarding-step-title{color:var(--text);font-size:12px}.onboarding-footer{justify-content:flex-end;margin-top:2px}.onboarding-title{color:var(--text);font-size:14px;font-family:var(--font-display)}.onboarding-guide{color:var(--text-dim);margin:0;font-size:12px;line-height:1.6}.onboarding-field{flex-direction:column;gap:4px;display:flex}.onboarding-field label{color:var(--text-dim);font-size:11px}.onboarding-error{color:var(--error,#e5534b);font-size:11px}.onboarding-hint{color:var(--text-dim);font-size:10px}.onboarding-manifest-status{color:var(--accent);align-self:center;font-size:10px}.onboarding-manifest-status.is-error{color:var(--error,#e5534b)}.onboarding-scopes{font-family:var(--font-mono,monospace);color:var(--text);word-break:break-all;margin-top:4px;font-size:11px;display:block}.onboarding-identity{color:var(--accent);font-size:11px}.onboarding-next{color:var(--text);margin:0;font-size:12px;line-height:1.6}.onboarding-actions{gap:8px;display:flex}.transport-status-label{color:var(--text-dim);margin-bottom:4px;font-size:11px}.transport-status-chips{flex-wrap:wrap;gap:6px;display:flex}.transport-status-chip{border:1px solid var(--border);background:var(--surface);color:var(--text);border-radius:999px;align-items:center;padding:2px 8px;font-size:10px;display:inline-flex}.transport-status-hint{color:var(--text-dim);margin:6px 0 0;font-size:10px;line-height:1.4}textarea.prompt-editor{background:var(--bg);border:1px solid var(--border);width:100%;height:120px;color:var(--text);resize:vertical;border-radius:6px;padding:8px;font-family:inherit;font-size:11px}.skill-search{background:var(--bg);border:1px solid var(--border);border-radius:8px;align-items:center;gap:7px;width:100%;margin-bottom:8px;padding:6px 9px;transition:border-color .2s,box-shadow .2s;display:flex}.skill-search:focus-within{border-color:var(--accent);box-shadow:0 0 0 2px color-mix(in oklch, var(--accent) 14%, transparent)}.skill-search-icon{width:14px;height:14px;color:var(--text-dim);flex-shrink:0;justify-content:center;align-items:center;display:inline-flex}.skill-search-input{width:100%;min-width:0;color:var(--text);font:inherit;background:0 0;border:0;outline:0;font-size:11px}.skill-search-input::placeholder{color:var(--text-dim)}.skill-filter{border:1px solid var(--border);color:var(--text-dim);cursor:pointer;background:0 0;border-radius:12px;padding:4px 10px;font-family:inherit;font-size:10px}.skill-filter.active{border-color:var(--accent);color:var(--accent);background:color-mix(in oklch, var(--accent) 10%, var(--bg))}.skill-empty{color:var(--text-dim);text-align:center;padding:12px 4px;font-size:11px}.skill-card{background:var(--bg);border:1px solid var(--border);border-radius:8px;margin-bottom:8px;padding:10px;transition:border-color .2s,transform .15s,box-shadow .15s}.skill-card:hover{border-color:var(--accent2);transform:translateY(-1px);box-shadow:0 2px 8px #0003}.skill-card.enabled{border-left:3px solid var(--green)}.skill-card-header{align-items:center;gap:8px;margin-bottom:4px;display:flex}.skill-emoji{flex-shrink:0;align-items:center;width:20px;height:20px;font-size:16px;display:inline-flex}.skill-name{flex:1;font-size:12px;font-weight:600}.skill-toggle{width:var(--toggle-w);height:var(--toggle-h);border-radius:calc(var(--toggle-h) / 2);cursor:pointer;border:none;transition:background .2s;position:relative}.skill-toggle.on{background:var(--green)}.skill-toggle.off{background:var(--toggle-off)}.skill-toggle:after{content:"";top:calc((var(--toggle-h) - var(--toggle-knob)) / 2);width:var(--toggle-knob);height:var(--toggle-knob);background:var(--toggle-on);border-radius:50%;transition:left .2s;position:absolute}.skill-toggle.on:after{left:calc(var(--toggle-w) - var(--toggle-knob) - (var(--toggle-h) - var(--toggle-knob)) / 2)}.skill-toggle.off:after{left:calc((var(--toggle-h) - var(--toggle-knob)) / 2)}.skill-desc{color:var(--text-dim);margin-bottom:4px;font-size:11px;line-height:1.4}.skill-req{color:var(--accent2);font-size:10px}.custom-model-input{background:var(--surface);width:100%;color:var(--text);border:1px solid var(--accent);font-size:11px;font-family:var(--font-mono);border-radius:4px;margin-top:4px;padding:4px 6px}.custom-model-input:focus{border-color:var(--accent2);outline:none}.cwd-display{font-family:var(--font-mono);color:var(--text-dim);background:var(--bg);border:1px solid var(--border);text-overflow:ellipsis;white-space:nowrap;border-radius:6px;padding:6px 8px;font-size:11px;display:block;overflow:hidden}.settings-fieldset{border:1px solid var(--border);border-radius:var(--radius-md);padding:var(--space-3);margin-bottom:var(--space-3)}.settings-fieldset legend{font-weight:600;font-size:var(--text-sm);padding:0 var(--space-2);color:var(--text)}.sidebar-left .section-title{color:var(--text-muted-60);font-family:var(--font-ui)}.sidebar-left .sidebar-hb-btn{border-radius:var(--radius-ctl);background-color:var(--surface-1);min-height:28px;font-family:var(--font-ui);border-color:#0000;padding-block:4px}.sidebar-left .sidebar-hb-btn:hover{background-color:var(--surface-2);box-shadow:none;border-color:#0000}.sidebar-left .sidebar-hb-btn:active{background-color:var(--surface-3)}.sidebar-left .sidebar-hb-btn:focus-visible{box-shadow:var(--focus-ring-shadow)}.modal-overlay{background:var(--modal-bg);-webkit-backdrop-filter:blur(10px)saturate(1.2);z-index:999;justify-content:center;align-items:center;display:none;position:fixed;inset:0}.modal-overlay.open{animation:.2s ease-out overlayIn;display:flex}@keyframes overlayIn{0%{opacity:0}to{opacity:1}}.modal-box{background:color-mix(in oklch, var(--surface) 85%, transparent);-webkit-backdrop-filter:blur(24px)saturate(1.5);border:1px solid color-mix(in oklch, var(--accent) 10%, var(--border));border-radius:var(--radius-xl);box-shadow:0 16px 48px #00000080, 0 0 0 1px #ffffff0a inset, 0 0 60px -20px color-mix(in oklch, var(--accent) 6%, transparent);width:500px;max-width:90vw;max-height:80vh;animation:modalBounce .35s var(--ease-spring);flex-direction:column;display:flex}@keyframes modalBounce{0%{opacity:0;transform:translateY(24px)scale(.96)}to{opacity:1;transform:translateY(0)scale(1)}}.modal-header{border-bottom:1px solid var(--border);justify-content:space-between;align-items:center;padding:12px 16px;font-size:13px;font-weight:600;display:flex}.modal-textarea{background:var(--bg);min-height:250px;color:var(--text);resize:none;border:none;flex:1;padding:12px 16px;font-family:inherit;font-size:12px}.modal-footer{border-top:1px solid var(--border);justify-content:flex-end;gap:8px;padding:10px 16px;display:flex}.modal-footer .btn-save{width:auto;padding:6px 20px}.label-with-help,.section-title-row,.sidebar-action-row{align-items:center;gap:6px;display:flex}.label-with-help,.section-title-row{justify-content:space-between}.sidebar-action-row .sidebar-hb-btn{flex:1}.help-trigger{--help-trigger-visual-size:20px;--help-trigger-hit-size:44px;width:var(--help-trigger-visual-size);height:var(--help-trigger-visual-size);min-width:var(--help-trigger-visual-size);border:1px solid var(--border);background:var(--surface);color:var(--text-dim);cursor:pointer;opacity:.78;border-radius:999px;justify-content:center;align-items:center;margin:0;padding:0;font-size:11px;line-height:1;transition:border-color .15s,color .15s,background .15s,opacity .15s;display:inline-flex}.help-trigger:hover{border-color:var(--accent);color:var(--accent);background:color-mix(in oklch, var(--accent) 8%, transparent);opacity:1}.help-trigger:focus-visible{outline:2px solid var(--accent);outline-offset:2px;opacity:1}.help-dialog-box{background:var(--surface);-webkit-backdrop-filter:none;width:640px;max-width:calc(100vw - 32px);max-height:min(80vh,640px)}.help-dialog-body{padding:14px 16px;overflow-y:auto}.help-dialog-content{min-width:0}.help-dialog-layout{grid-template-columns:minmax(132px,.34fr) minmax(0,1fr);align-items:start;gap:16px;display:grid}.help-dialog-nav{border:1px solid var(--border);border-radius:var(--radius-md);background:var(--bg);flex-direction:column;gap:4px;padding:4px;display:flex}.help-dialog-nav-item{border-radius:var(--radius-sm);color:var(--text-dim);cursor:pointer;font:inherit;text-align:left;background:0 0;border:none;padding:8px 9px;font-size:12px;line-height:1.3}.help-dialog-nav-item:hover,.help-dialog-nav-item.active{background:color-mix(in oklch, var(--accent) 10%, transparent);color:var(--text)}.help-dialog-nav-item:focus-visible{outline:2px solid var(--accent);outline-offset:1px}.help-dialog-section{margin-bottom:14px}.help-dialog-section:last-child{margin-bottom:0}.help-dialog-section h3{color:var(--text);margin:0 0 6px;font-size:12px;font-weight:600}.help-dialog-section p,.help-dialog-section li{color:var(--text-dim);font-size:12px;line-height:1.55}.help-effect-text,.help-example-list{margin:0}.help-dialog-list,.help-related-list,.help-example-list{margin:0;padding-left:18px}.help-howto-list{margin:0;padding-left:1.6em;list-style:decimal}.help-howto-list li{margin-bottom:3px;line-height:1.5}.help-subcmd-list{margin:0;padding:0}.help-subcmd-list dt{margin-top:8px}.help-subcmd-list dt:first-child{margin-top:0}.help-subcmd-list dt code{font-family:var(--mono);background:var(--code-bg,#0000000f);color:var(--text);border-radius:3px;padding:2px 6px;font-size:11px}.help-subcmd-list dd{color:var(--text-dim);margin:2px 0 0 14px;font-size:11px;line-height:1.5}.help-dialog-done{width:auto;padding:6px 18px}.help-doc-links-nav{flex-wrap:wrap;gap:8px;margin-bottom:4px;display:flex}.help-doc-link{background:var(--accent,#22d3ee);color:var(--surface,#1a1a2e);border-radius:6px;align-items:center;gap:4px;padding:6px 14px;font-size:.85rem;font-weight:600;text-decoration:none;transition:opacity .15s;display:inline-flex}.help-doc-link:hover{opacity:.85}.help-doc-link-icon{opacity:.7;font-size:.75rem}@media (width<=768px){.help-trigger{width:var(--help-trigger-visual-size);height:var(--help-trigger-visual-size);min-width:var(--help-trigger-visual-size);position:relative}.help-trigger:before{content:"";inset:calc((var(--help-trigger-visual-size) - var(--help-trigger-hit-size)) / 2);position:absolute}.help-dialog-box{max-width:calc(100vw - 24px);max-height:min(84vh,640px)}.help-dialog-layout{grid-template-columns:1fr;gap:12px}.help-dialog-nav{flex-direction:row;overflow-x:auto}.help-dialog-nav-item{white-space:nowrap}}.hb-job-card{background:var(--surface);border:1px solid var(--border);border-radius:8px;margin-bottom:8px;padding:10px}.hb-job-header{align-items:center;gap:6px;margin-bottom:6px;display:flex}.hb-job-header input[type=text]{background:var(--bg);border:1px solid var(--border);color:var(--text);border-radius:4px;flex:1;padding:4px 6px;font-size:11px}.hb-job-header select,.hb-job-header input[type=number]{background:var(--bg);border:1px solid var(--border);color:var(--text);border-radius:4px;padding:4px;font-size:11px}.hb-job-header input[type=number]{width:50px}.hb-job-schedule{flex-wrap:wrap;align-items:center;gap:6px;margin-bottom:6px;display:flex}.hb-job-schedule select,.hb-job-schedule input[type=number],.hb-job-schedule input[type=text]{background:var(--bg);border:1px solid var(--border);color:var(--text);border-radius:4px;padding:4px 6px;font-size:11px}.hb-job-schedule input[type=number]{width:72px}.hb-job-schedule input[type=text]{flex:120px}.hb-chip{color:var(--text-dim);font-size:11px}.hb-schedule-meta{margin:-2px 0 6px;font-size:11px}.hb-help{color:var(--text-dim)}.hb-error{color:var(--error)}.hb-toggle{width:var(--toggle-w);height:var(--toggle-h);border-radius:calc(var(--toggle-h) / 2);cursor:pointer;border:none;transition:background .2s;position:relative}.hb-toggle.on{background:var(--accent)}.hb-toggle.off{background:var(--toggle-off)}.hb-toggle:after{content:"";top:calc((var(--toggle-h) - var(--toggle-knob)) / 2);width:var(--toggle-knob);height:var(--toggle-knob);background:var(--toggle-on);border-radius:50%;transition:left .2s;position:absolute}.hb-toggle.on:after{left:calc(var(--toggle-w) - var(--toggle-knob) - 2px)}.hb-toggle.off:after{left:2px}.hb-del{color:var(--delete-color);cursor:pointer;background:0 0;border:none;font-size:14px}.hb-prompt{background:var(--bg);border:1px solid var(--border);width:100%;color:var(--text);resize:vertical;border-radius:4px;padding:4px 6px;font-size:11px}.hb-add{background:var(--accent);color:#fff;cursor:pointer;border:none;border-radius:6px;width:100%;margin-top:4px;padding:8px;font-size:12px}.hb-add:hover{opacity:.9}.mcp-modal-overlay{-webkit-backdrop-filter:blur(16px);background:#000000d9}.mcp-modal-box{background:var(--surface);-webkit-backdrop-filter:none;width:620px;max-height:85vh}.mcp-modal-box .modal-header{font-size:14px}.mcp-active-row{border-bottom:1px solid var(--border);align-items:flex-start;gap:8px;padding:10px 0;display:flex}.mcp-active-name{min-width:80px;font-weight:600}.mcp-active-detail{opacity:.6;word-break:break-all;flex:1;font-size:.9em}.mcp-active-tag{opacity:.5;white-space:nowrap;font-size:.85em}.mcp-active-remove{color:var(--color-error);white-space:nowrap;font-size:.85em}.mcp-help-inner{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-xl);z-index:1001;max-width:460px;max-height:70vh;padding:16px;position:relative;overflow-y:auto;box-shadow:0 8px 32px #0006}.mcp-help-overlay{z-index:1000;background:#0009;justify-content:center;align-items:center;display:flex;position:fixed;inset:0}.mcp-help-inner h4{margin:0 0 8px;font-size:13px}.mcp-help-inner p{opacity:.85;margin:4px 0;font-size:12px}.mcp-help-inner code{background:var(--bg);border-radius:3px;padding:1px 4px;font-size:11px}.mcp-help-inner pre{background:var(--bg);border-radius:6px;margin:6px 0;padding:8px;font-size:11px;overflow-x:auto}.table-wrapper{margin:var(--space-3) 0;border:1px solid var(--border);border-radius:var(--radius-md);overflow-x:auto}.table-wrapper table{border-collapse:collapse;width:100%;font-size:var(--text-sm);border:none;margin:0}.table-wrapper th,.table-wrapper td{padding:var(--space-2) var(--space-3);text-align:left;border-bottom:1px solid var(--border)}.table-wrapper th{background:color-mix(in oklch, var(--accent) 8%, var(--surface));white-space:nowrap;border-bottom:2px solid color-mix(in oklch, var(--accent) 25%, var(--border));font-weight:600}.table-wrapper tr:nth-child(2n) td{background:color-mix(in oklch, var(--text) 2%, transparent)}.msg-content table{border-collapse:collapse;width:auto;font-size:var(--text-sm);border:1px solid var(--border);margin:8px 0}.msg-content th,.msg-content td{border:1px solid var(--border);text-align:left;padding:5px 12px}.msg-content th{background:color-mix(in oklch, var(--accent) 8%, var(--surface));white-space:nowrap;border-bottom:2px solid var(--border);font-weight:600}.msg-content tr:nth-child(2n){background:color-mix(in oklch, var(--text) 2%, transparent)}.code-block{border:1px solid var(--border);border-radius:var(--radius-md);margin:var(--space-3) 0;overflow:hidden}.code-header{padding:var(--space-1) var(--space-3);background:color-mix(in oklch, var(--text) 8%, var(--surface));border-bottom:1px solid var(--border);font-family:var(--font-mono);font-size:var(--text-xs);color:var(--text-dim);letter-spacing:.5px;justify-content:space-between;align-items:center;display:flex}.code-copy-btn{align-items:center;gap:var(--space-1);color:var(--text-dim);cursor:pointer;padding:2px var(--space-2);border-radius:var(--radius-sm);font-size:var(--text-xs);font-family:var(--font-mono);transition:color var(--duration-fast), background var(--duration-fast);opacity:0;background:0 0;border:none;display:flex}.code-block:hover .code-copy-btn{opacity:1}.code-copy-btn:hover{color:var(--text);background:color-mix(in oklch, var(--text) 8%, transparent)}.code-copy-btn.copied{color:var(--success)}.code-block pre{padding:var(--space-3) var(--space-4);background:var(--code-bg);font-family:var(--font-mono);font-size:var(--text-sm);border-radius:0;margin:0;line-height:1.5;overflow-x:auto}.code-block pre code{font-family:var(--font-mono);background:0 0;border-radius:0;padding:0}.msg-content pre:not(.code-block pre){background:var(--code-bg);border-radius:var(--radius-md);font-size:var(--text-sm);margin:8px 0;padding:12px;line-height:1.45;overflow-x:auto}.msg-content pre:not(.code-block pre) code{font-family:var(--font-mono);background:0 0;border-radius:0;padding:0}.msg-content .code-block pre{padding:var(--space-3) var(--space-4);background:var(--code-bg);font-family:var(--font-mono);font-size:var(--text-sm);border-radius:0;margin:0;line-height:1.5;overflow-x:auto}.msg-content code:not(pre code){font-family:var(--font-mono);background:color-mix(in oklch, var(--accent) 6%, var(--surface));padding:1px var(--space-1);border-radius:var(--radius-sm);border:1px solid var(--border);color:var(--text);word-break:break-word;overflow-wrap:break-word;font-size:.875em}.msg-content blockquote{border-left:3px solid var(--accent);color:var(--text-dim);background:color-mix(in oklch, var(--text) 2%, transparent);border-radius:0 var(--radius-sm) var(--radius-sm) 0;margin:8px 0;padding:4px 12px}.msg-content ul,.msg-content ol{margin:4px 0;padding-left:20px}.msg-content li{margin:2px 0}.msg-content a{color:var(--link-color);text-decoration:none}.msg-content a:hover{text-decoration:underline}.msg-content hr{border:none;border-top:1px solid var(--border);margin:12px 0}.msg-content h1{font-size:var(--text-xl);margin:var(--space-5) 0 var(--space-2);letter-spacing:-.02em;color:var(--text);font-weight:700;line-height:1.3}.msg-content h2{font-size:var(--text-lg);margin:var(--space-4) 0 var(--space-2);letter-spacing:-.01em;color:var(--text);font-weight:600}.msg-content h3{font-size:var(--text-md);margin:var(--space-3) 0 var(--space-1);color:var(--text);font-weight:600}.msg-content h4,.msg-content h5,.msg-content h6{font-size:var(--text-base);margin:var(--space-2) 0 var(--space-1);color:var(--text-dim);font-weight:600}.msg-content p{margin:.75em 0}.msg-content p:first-child{margin-top:0}.msg-content p:last-child{margin-bottom:0}.msg-content .katex-display{margin:var(--space-3) 0;padding:var(--space-2) 0;overflow:auto hidden}.msg-content .katex{font-size:1em}.msg-content .katex-display>.katex{font-size:1.1em}.msg-content .mermaid-container{text-align:center;background:color-mix(in oklch, var(--surface) 60%, transparent);border:1px solid var(--border);border-radius:var(--radius-lg);margin:8px 0;padding:16px 12px;position:relative;overflow-x:auto}.msg-content .mermaid-container svg{max-width:100%;height:auto}.msg-content .mermaid-container.mermaid-type-wide svg{min-width:600px;max-width:none}.msg-content .mermaid-container svg text{dominant-baseline:central}.mermaid-skeleton{color:var(--text-dim);justify-content:center;align-items:center;gap:12px;padding:24px 12px;display:flex}.mermaid-skeleton-spinner{border:2px solid color-mix(in oklch, var(--text) 15%, transparent);border-top-color:var(--accent);border-radius:50%;width:16px;height:16px;animation:.8s linear infinite mermaid-spin}.mermaid-skeleton-text{font-size:13px;font-style:italic}@keyframes mermaid-spin{to{transform:rotate(360deg)}}.mermaid-zoom-btn{background:color-mix(in oklch, var(--text) 10%, transparent);border:1px solid color-mix(in oklch, var(--text) 15%, transparent);color:var(--text-dim);border-radius:var(--radius-md);cursor:pointer;width:28px;height:28px;transition:background var(--duration-fast), color var(--duration-fast);z-index:2;justify-content:center;align-items:center;font-size:14px;display:flex;position:absolute;top:6px;right:6px}.mermaid-zoom-btn:hover{background:color-mix(in oklch, var(--text) 20%, transparent);color:var(--text)}.mermaid-copy-btn,.mermaid-save-btn{background:color-mix(in oklch, var(--text) 10%, transparent);border:1px solid color-mix(in oklch, var(--text) 15%, transparent);color:var(--text-dim);border-radius:var(--radius-md);cursor:pointer;opacity:0;pointer-events:none;width:28px;height:28px;transition:opacity var(--duration-fast), background var(--duration-fast), color var(--duration-fast);z-index:2;justify-content:center;align-items:center;display:flex;position:absolute;top:6px}.mermaid-copy-btn{right:38px}.mermaid-save-btn{right:70px}.mermaid-container:hover .mermaid-zoom-btn,.mermaid-container:hover .mermaid-copy-btn,.mermaid-container:hover .mermaid-save-btn{opacity:1;pointer-events:auto}.mermaid-copy-btn:hover,.mermaid-save-btn:hover{background:color-mix(in oklch, var(--text) 20%, transparent);color:var(--text)}.mermaid-copy-btn.copied,.mermaid-save-btn.copied{color:var(--success)}.mermaid-overlay{z-index:9999;justify-content:center;align-items:center;display:flex;position:fixed;inset:0}.mermaid-overlay-backdrop{backdrop-filter:blur(6px);background:#000000bf;position:absolute;inset:0}.mermaid-overlay-content{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-lg);max-width:95vw;max-height:95vh;padding:20px;animation:.2s ease-out mermaid-pop;position:relative;overflow:auto;box-shadow:0 20px 60px #00000080}@keyframes mermaid-pop{0%{opacity:0;transform:scale(.95)}to{opacity:1;transform:scale(1)}}.mermaid-overlay-close{background:color-mix(in oklch, var(--text) 15%, transparent);color:var(--text);border-radius:var(--radius-lg);cursor:pointer;width:36px;height:36px;transition:background var(--duration-fast);z-index:10;pointer-events:auto;border:none;justify-content:center;align-items:center;font-size:18px;display:flex;position:absolute;top:8px;right:8px}.mermaid-overlay-close:hover{background:color-mix(in oklch, var(--text) 30%, transparent);color:var(--text)}.mermaid-overlay-svg{z-index:0;justify-content:center;align-items:center;min-width:min(400px,90vw);min-height:200px;display:flex;position:relative}.msg-content .code-block-wrapper{position:relative}.msg-content .code-lang-label{font-size:var(--text-xs);color:var(--code-label-color);background:color-mix(in oklch, var(--text) 5%, transparent);border-radius:0 var(--radius-md) 0 var(--radius-sm);font-family:var(--font-mono);cursor:pointer;user-select:none;transition:background var(--duration-fast), transform var(--duration-fast), color var(--duration-fast);padding:2px 8px;position:absolute;top:0;right:0}.msg-content .code-lang-label:hover{background:color-mix(in oklch, var(--text) 12%, transparent);transform:scale(1.05)}.msg-content .code-lang-label.copied{color:var(--success)}.mermaid-error{border:1px solid var(--error);border-radius:var(--radius-md);padding:var(--space-2);margin:var(--space-1) 0}.mermaid-error-title{color:var(--error);font-size:var(--text-xs);margin-bottom:var(--space-1)}.mermaid-error-msg{color:var(--warning);font-size:var(--text-xs);margin-bottom:var(--space-2)}.mermaid-error-code{font-size:var(--text-xs);margin:0;overflow-x:auto}.tool-group{margin:0 0 var(--space-3);font-size:var(--text-sm)}.tool-group-summary{align-items:center;gap:var(--space-2);border:1px dashed var(--border);border-radius:var(--radius-md);color:var(--text-dim);cursor:pointer;padding:var(--space-1) var(--space-3);font-family:var(--font-ui);font-size:var(--text-xs);transition:color var(--duration-fast), border-color var(--duration-fast);text-align:left;background:0 0;width:100%;display:flex}.tool-group-summary:hover{color:var(--text);border-color:color-mix(in oklch, var(--accent) 40%, var(--border))}.tool-group-summary-text{flex:1}.tool-group-duration{font-family:var(--font-mono);font-size:var(--text-xs);color:var(--text-dim)}.tool-group-chevron{font-size:var(--text-xs);transition:transform var(--duration-fast);display:inline-block}.tool-group.expanded .tool-group-chevron{transform:rotate(180deg)}.tool-status-dot,.tool-dot{border-radius:50%;flex-shrink:0;width:8px;height:8px;display:inline-block}.tool-status-dot.running,.tool-dot.running{background:var(--warning);animation:1.5s ease-in-out infinite toolDotPulse}.tool-status-dot.done,.tool-dot.done{background:var(--success)}.tool-dot.pending{background:var(--text-dim);opacity:.5}.tool-status-dot.error,.tool-dot.error{background:var(--error)}@keyframes toolDotPulse{0%,to{opacity:1}50%{opacity:.4}}.tool-details{max-height:2000px;transition:max-height var(--duration-slow) ease-out, opacity var(--duration-base);padding-left:var(--space-4);border-left:1px solid var(--border);margin-left:var(--space-1);margin-top:var(--space-1);overflow:hidden}.tool-details.collapsed{opacity:0;pointer-events:none;max-height:0;margin-top:0}.tool-item{padding:var(--space-1) 0}.tool-item+.tool-item{border-top:1px solid color-mix(in oklch, var(--border) 50%, transparent)}.tool-item-header{align-items:center;gap:var(--space-2);font-size:var(--text-xs);display:flex}.tool-item-icon{flex-shrink:0}.tool-item-label{font-family:var(--font-mono);font-size:var(--text-xs);color:var(--text);text-overflow:ellipsis;white-space:nowrap;flex:1;overflow:hidden}.tool-item-toggle{align-items:start;gap:var(--space-2);width:100%;color:inherit;text-align:left;cursor:pointer;font-size:var(--text-xs);background:0 0;border:0;grid-template-columns:auto minmax(0,1fr) auto;padding:0;display:grid}.tool-item-main{gap:2px;min-width:0;display:grid}.tool-item-expandable .tool-item-label{white-space:normal;word-break:break-word}.tool-item-snippet{font-family:var(--font-mono);font-size:var(--text-xs);color:var(--text-dim);word-break:break-word;-webkit-line-clamp:2;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.tool-item-chevron{color:var(--text-dim);transition:transform var(--duration-fast);font-size:10px}.tool-item.expanded .tool-item-chevron{transform:rotate(90deg)}.tool-item-details{border-left:1px solid color-mix(in oklch, var(--border) 70%, transparent);background:color-mix(in oklch, var(--surface) 70%, transparent);border-radius:0 var(--radius-sm) var(--radius-sm) 0;margin-left:22px;padding:8px 10px}.tool-item-details.collapsed{display:none}.tool-item-full{font-family:var(--font-mono);font-size:var(--text-xs);color:var(--text-dim);white-space:pre-wrap;word-break:break-word;max-height:260px;margin:0;overflow-x:auto}.tool-item-time{font-family:var(--font-mono);font-size:var(--text-xs);color:var(--text-dim);flex-shrink:0}.tool-activity-live{align-items:center;gap:var(--space-2);padding:var(--space-1) var(--space-3);font-size:var(--text-xs);color:var(--text-dim);border:1px dashed var(--border);border-radius:var(--radius-md);margin-bottom:var(--space-2);animation:.2s ease-out msgEnterAgent;display:flex}.tool-activity-live .tool-status-dot{background:var(--warning);animation:1.5s ease-in-out infinite toolDotPulse}.tool-summary{font-size:var(--text-xs);color:var(--text-dim);margin-bottom:var(--space-2);border:1px dashed var(--border);border-radius:var(--radius-md);padding:var(--space-1) var(--space-3)}.tool-summary summary{cursor:pointer;user-select:none;align-items:center;gap:var(--space-1);display:flex}.tool-summary summary:before{content:"";background:var(--success);border-radius:50%;flex-shrink:0;width:8px;height:8px;display:inline-block}.tool-summary .tool-log{margin-top:var(--space-1);padding-top:var(--space-1);border-top:1px dashed var(--border);white-space:pre-wrap;line-height:1.6;font-family:var(--font-mono)}.vs-active .tool-details{transition:none}@media (prefers-reduced-motion:reduce){.tool-status-dot.running,.tool-dot.running,.tool-activity-live .tool-status-dot{animation:none}}.process-block{margin:0 0 var(--space-1);font-size:var(--text-sm);white-space:normal;line-height:1.3}.process-block+.msg-content .orchestrate-placeholder{display:none}.orchestrate-placeholder{font-size:var(--text-xs);opacity:.6}.process-summary{align-items:center;gap:var(--space-2);background:color-mix(in oklch, var(--surface) 50%, transparent);border:1px solid var(--border);border-radius:var(--radius-md);width:100%;color:var(--text-dim);cursor:pointer;padding:var(--space-1) var(--space-3);font-size:var(--text-xs);transition:border-color var(--duration-fast);display:flex}.process-summary:hover{border-color:color-mix(in oklch, var(--accent) 40%, var(--border))}.process-dot{border-radius:50%;flex-shrink:0;width:6px;height:6px}.process-dot.running{background:var(--warning);will-change:opacity;animation:1.5s ease-in-out infinite processDotPulse}.process-dot.done{background:var(--success)}@keyframes processDotPulse{0%,to{opacity:1}50%{opacity:.4}}.process-summary-text{text-align:left;flex:1}.process-duration{font-family:var(--font-mono);font-size:var(--text-xs);color:var(--text-dim)}.process-chevron{color:var(--text-dim);transition:transform var(--duration-fast);font-size:10px}.process-details{padding-left:var(--space-3);border-left:1px solid var(--border);transition:grid-template-rows var(--duration-slow);grid-template-rows:1fr;margin-top:2px;margin-left:3px;display:grid}.process-block.collapsed .process-details{grid-template-rows:0fr}.process-details>.process-steps-inner{overflow:hidden}.process-step{font-size:var(--text-xs);gap:4px;padding:2px 0;display:grid}.process-step-toggle{align-items:start;gap:var(--space-2);width:100%;color:inherit;text-align:left;cursor:pointer;background:0 0;border:0;grid-template-columns:auto 16px auto minmax(0,1fr) auto auto;padding:0;display:grid}.process-step-dot{border-radius:50%;flex-shrink:0;width:5px;height:5px}.process-step-dot.running{background:var(--warning);animation:1.5s ease-in-out infinite processDotPulse}.process-step-dot.done{background:var(--success)}.process-step-dot.error{background:var(--error)}.process-step-icon{width:16px;height:16px;color:var(--text-dim);justify-content:center;align-items:center;display:flex}.process-step-icon svg{width:14px;height:14px}.process-step-badge{letter-spacing:.5px;text-transform:uppercase;font-size:9px;font-weight:700;font-family:var(--font-mono);border-radius:3px;padding:1px 5px}.process-step-badge.thinking{background:color-mix(in oklch, var(--accent) 15%, transparent);color:var(--accent)}.process-step-badge.tool{background:color-mix(in oklch, var(--warning) 15%, transparent);color:var(--warning)}.process-step-badge.search{background:color-mix(in oklch, var(--success) 15%, transparent);color:var(--success)}.process-step-badge.subagent{background:color-mix(in oklch, var(--accent) 12%, transparent);color:var(--accent)}.process-step-main{gap:2px;min-width:0;display:grid}.process-step-label{color:var(--text);word-break:break-word}.process-step-snippet{color:var(--text-dim);word-break:break-word;-webkit-line-clamp:1;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.process-step-chevron{color:var(--text-dim);transition:transform var(--duration-fast);place-self:start end}.process-step.expanded .process-step-chevron{transform:rotate(90deg)}.process-step-details{border-left:1px solid color-mix(in oklch, var(--border) 70%, transparent);background:color-mix(in oklch, var(--surface) 70%, transparent);border-radius:0 var(--radius-sm) var(--radius-sm) 0;margin-left:22px;padding:8px 10px}.process-step-details.collapsed{display:none}.process-step-full{font-family:var(--font-mono);font-size:var(--text-xs);color:var(--text-dim);white-space:pre-wrap;word-break:break-word;max-height:600px;margin:0;overflow-x:auto}.process-step-label{word-break:break-word;overflow-wrap:break-word;white-space:normal}.vs-active .process-details{transition:none}@media (prefers-reduced-motion:reduce){.process-dot.running,.process-step-dot.running{animation:none}}details.tool-block summary{cursor:pointer;align-items:center;gap:var(--space-2);padding:var(--space-1) var(--space-2);font-size:var(--text-sm);color:var(--text-dim);border-radius:var(--radius-sm);transition:background var(--duration-fast);list-style:none;display:flex}details.tool-block summary:hover{background:color-mix(in oklch, var(--accent) 8%, transparent)}details.tool-block summary:before{content:"";width:.5em;height:.5em;transition:transform var(--duration-fast);border-bottom:2px solid;border-right:2px solid;flex-shrink:0;display:inline-block;transform:rotate(-45deg)}details.tool-block[open] summary:before{transform:rotate(45deg)}details.tool-block .tool-content{content-visibility:auto;contain-intrinsic-size:auto 200px}.trace-drawer-overlay{z-index:120;background:oklch(0% 0 0/.42);display:none;position:fixed;inset:0}.trace-drawer-overlay.open{display:block}.trace-drawer{background:var(--bg);border-left:1px solid var(--border);grid-template-rows:auto auto minmax(0,1fr) auto;grid-template-columns:minmax(0,1fr);width:min(980px,94vw);height:100dvh;display:grid;position:absolute;top:0;right:0;box-shadow:-20px 0 60px oklch(0% 0 0/.28)}.trace-drawer-header,.trace-drawer-footer{border-bottom:1px solid var(--border);justify-content:space-between;align-items:center;gap:12px;padding:14px 16px;display:flex}.trace-drawer-footer{border-top:1px solid var(--border);border-bottom:0;flex-wrap:wrap}.trace-page-status{overflow-wrap:anywhere;min-width:0}.trace-drawer-kicker{color:var(--text);font:600 var(--text-xs)/1 var(--font-mono);margin:0 0 2px}.trace-drawer h2{font-size:var(--text-lg);margin:0}.trace-drawer-close,.trace-page-button,.process-step-trace{border:1px solid var(--border);background:var(--surface);color:var(--text);cursor:pointer}.trace-drawer-close{border-radius:6px;width:34px;height:34px;font-size:22px}.trace-drawer-meta{border-bottom:1px solid var(--border);flex-wrap:wrap;gap:8px;padding:10px 16px;display:flex}.trace-drawer-meta span,.process-step-trace{color:var(--text-muted);font:600 var(--text-xs)/1.2 var(--font-mono);white-space:nowrap;border-radius:6px;align-self:start;padding:4px 7px}.trace-drawer-meta span{white-space:normal;overflow-wrap:anywhere;min-width:0;max-width:100%}.trace-drawer-meta b{color:var(--text);margin-right:6px}.trace-drawer-body{grid-template-columns:minmax(260px,.42fr) minmax(0,.58fr);min-height:0;display:grid}.trace-event-list{border-right:1px solid var(--border);overflow:auto}.trace-event-row{border:0;border-bottom:1px solid var(--border);width:100%;color:var(--text);text-align:left;cursor:pointer;background:0 0;grid-template-columns:52px 74px 110px minmax(0,1fr);gap:8px;padding:9px 10px;display:grid}.trace-event-row:hover,.process-step-trace:hover{background:var(--surface-hover)}.trace-event-row.selected,.trace-event-row[aria-current=true]{background:color-mix(in oklch, var(--accent) 14%, transparent);box-shadow:inset 3px 0 0 var(--accent)}.trace-event-seq,.trace-event-source,.trace-event-type{color:var(--text);font:600 var(--text-xs)/1.4 var(--font-mono)}.trace-event-preview{white-space:nowrap;text-overflow:ellipsis;min-width:0;font-size:var(--text-sm);overflow:hidden}.trace-event-raw{min-width:0;color:var(--text);background:var(--code-bg);font:500 var(--text-sm)/1.55 var(--font-mono);white-space:pre-wrap;word-break:break-word;margin:0;padding:14px;overflow:auto}.trace-page-button{font:600 var(--text-sm)/1 var(--font-mono);border-radius:6px;padding:7px 10px}.trace-page-button:disabled,.trace-page-button[aria-disabled=true]{opacity:.4;cursor:default}.trace-page-button:focus-visible{outline:2px solid var(--accent);outline-offset:2px}@media (width<=760px){.trace-drawer{width:100vw}.trace-drawer-body{grid-template-rows:minmax(0,.42fr) minmax(0,.58fr);grid-template-columns:1fr}.trace-event-list{border-right:0;border-bottom:1px solid var(--border)}.trace-event-row{grid-template-columns:46px 64px minmax(0,1fr)}.trace-event-type{display:none}}@media (pointer:coarse){.trace-drawer-close,.trace-page-button{min-width:44px;min-height:44px}}.diagram-container{border-radius:var(--radius-md);margin:1rem 0;position:relative;overflow:hidden}.diagram-svg{background:var(--surface);border:1px solid var(--border);padding:var(--space-4);max-width:calc(680px + 2 * var(--space-4))}.diagram-svg svg{width:100%;height:auto;max-height:80vh;display:block}.diagram-widget{border:1px solid var(--border);border-radius:var(--radius-md);overflow:hidden}.diagram-widget iframe{border:none;width:100%;min-height:60px;display:block}.diagram-loading{background:var(--surface);border:1px solid var(--border);justify-content:center;align-items:center;min-height:120px;display:flex}.diagram-spinner{border:2px solid var(--border);border-top-color:var(--accent);border-radius:50%;width:24px;height:24px;animation:.8s linear infinite diagram-spin}@keyframes diagram-spin{to{transform:rotate(360deg)}}@media (prefers-reduced-motion:reduce){.diagram-spinner{animation:none}}.diagram-error{padding:var(--space-4);color:var(--text-dim);text-align:center;font-size:14px}.diagram-widget-pending{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-md);justify-content:center;align-items:center;min-height:120px;display:flex}.diagram-zoom-btn{top:var(--space-2);right:var(--space-2);background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-sm);width:32px;height:32px;color:var(--text-dim);cursor:pointer;opacity:0;pointer-events:none;transition:opacity var(--duration-fast);z-index:2;justify-content:center;align-items:center;font-size:16px;display:flex;position:absolute}.diagram-container:hover .diagram-zoom-btn,.diagram-container:focus-within .diagram-zoom-btn{opacity:1;pointer-events:auto}.diagram-zoom-btn:hover{background:var(--bg);color:var(--text)}.diagram-copy-btn,.diagram-save-btn{top:var(--space-2);right:var(--space-2);background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-sm);width:32px;height:32px;color:var(--text-dim);cursor:pointer;opacity:0;pointer-events:none;transition:opacity var(--duration-fast), color var(--duration-fast);z-index:2;justify-content:center;align-items:center;display:flex;position:absolute}.diagram-widget .diagram-zoom-btn{right:var(--space-2)}.diagram-widget .diagram-copy-btn{right:calc(var(--space-2) + 36px)}.diagram-widget .diagram-save-btn{right:calc(var(--space-2) + 72px)}.diagram-svg .diagram-copy-btn{right:calc(var(--space-2) + 36px)}.diagram-svg .diagram-save-btn{right:calc(var(--space-2) + 72px)}.diagram-container:hover .diagram-copy-btn,.diagram-container:hover .diagram-save-btn,.diagram-container:focus-within .diagram-copy-btn,.diagram-container:focus-within .diagram-save-btn{opacity:1;pointer-events:auto}.diagram-copy-btn:hover,.diagram-save-btn:hover{background:var(--bg);color:var(--text)}.diagram-copy-btn.copied,.diagram-save-btn.copied{color:var(--success)}.diagram-overlay{z-index:9999;backdrop-filter:blur(4px);background:#000000b3;justify-content:center;align-items:center;display:flex;position:fixed;inset:0}.diagram-overlay-content{background:var(--surface);border-radius:var(--radius-lg);min-width:min(680px,90vw);max-width:95vw;max-height:90vh;padding:var(--space-6);overflow:auto;box-shadow:0 20px 60px #00000080}.diagram-overlay-content svg{width:100%;max-width:1200px;height:auto;display:block}.diagram-widget-overlay .diagram-overlay-content{width:min(1100px,94vw)}.diagram-widget-overlay.maximized .diagram-overlay-content{width:min(1500px,98vw);height:min(1000px,94vh)}.diagram-widget-expanded{margin:0}.diagram-widget-expanded iframe{min-height:420px}.diagram-widget-overlay.maximized .diagram-widget-expanded,.diagram-widget-overlay.maximized .diagram-widget-expanded iframe{height:100%}.diagram-size-toggle-btn{top:var(--space-4);right:calc(var(--space-4) + 48px);background:var(--surface);border:1px solid var(--border);width:40px;height:40px;color:var(--text);cursor:pointer;z-index:10000;border-radius:50%;justify-content:center;align-items:center;font-size:18px;display:flex;position:absolute}.diagram-size-toggle-btn:hover{background:var(--bg)}.diagram-overlay-close{top:var(--space-4);right:var(--space-4);background:var(--surface);border:1px solid var(--border);width:40px;height:40px;color:var(--text);cursor:pointer;border-radius:50%;justify-content:center;align-items:center;font-size:20px;display:flex;position:absolute}.diagram-overlay-close:hover{background:var(--bg)}.c-blue-fill{fill:#1e3a5f}.c-blue-stroke{stroke:#3b82f6;fill:none}.c-blue-text{fill:#93c5fd}.c-blue-bg{fill:#1e3a5f;stroke:#3b82f6;stroke-width:.5px}.c-purple-fill{fill:#3b1f5e}.c-purple-stroke{stroke:#8b5cf6;fill:none}.c-purple-text{fill:#c4b5fd}.c-purple-bg{fill:#3b1f5e;stroke:#8b5cf6;stroke-width:.5px}.c-green-fill{fill:#14532d}.c-green-stroke{stroke:#22c55e;fill:none}.c-green-text{fill:#86efac}.c-green-bg{fill:#14532d;stroke:#22c55e;stroke-width:.5px}.c-amber-fill{fill:#451a03}.c-amber-stroke{stroke:#f59e0b;fill:none}.c-amber-text{fill:#fcd34d}.c-amber-bg{fill:#451a03;stroke:#f59e0b;stroke-width:.5px}.c-red-fill{fill:#450a0a}.c-red-stroke{stroke:#ef4444;fill:none}.c-red-text{fill:#fca5a5}.c-red-bg{fill:#450a0a;stroke:#ef4444;stroke-width:.5px}.c-cyan-fill{fill:#083344}.c-cyan-stroke{stroke:#06b6d4;fill:none}.c-cyan-text{fill:#67e8f9}.c-cyan-bg{fill:#083344;stroke:#06b6d4;stroke-width:.5px}.c-pink-fill{fill:#500724}.c-pink-stroke{stroke:#ec4899;fill:none}.c-pink-text{fill:#f9a8d4}.c-pink-bg{fill:#500724;stroke:#ec4899;stroke-width:.5px}.c-slate-fill{fill:#1e293b}.c-slate-stroke{stroke:#64748b;fill:none}.c-slate-text{fill:#94a3b8}.c-slate-bg{fill:#1e293b;stroke:#64748b;stroke-width:.5px}.c-orange-fill{fill:#431407}.c-orange-stroke{stroke:#f97316;fill:none}.c-orange-text{fill:#fdba74}.c-orange-bg{fill:#431407;stroke:#f97316;stroke-width:.5px}:where(.diagram-svg,.diagram-svg-overlay) .node{rx:8;ry:8}:where(.diagram-svg,.diagram-svg-overlay) .connector{stroke:var(--text-dim);stroke-width:.5px;fill:none}:where(.diagram-svg,.diagram-svg-overlay) .label{text-anchor:middle;dominant-baseline:central;font-size:14px}:where(.diagram-svg,.diagram-svg-overlay) .label-start{text-anchor:start;dominant-baseline:central;font-size:14px}:where(.diagram-svg,.diagram-svg-overlay) .diagram-title{text-anchor:middle;font-size:16px;font-weight:600}[data-theme=light] .c-blue-fill{fill:#dbeafe}[data-theme=light] .c-blue-stroke{stroke:#2563eb}[data-theme=light] .c-blue-text{fill:#1e40af}[data-theme=light] .c-blue-bg{fill:#dbeafe;stroke:#2563eb}[data-theme=light] .c-purple-fill{fill:#ede9fe}[data-theme=light] .c-purple-stroke{stroke:#7c3aed}[data-theme=light] .c-purple-text{fill:#5b21b6}[data-theme=light] .c-purple-bg{fill:#ede9fe;stroke:#7c3aed}[data-theme=light] .c-green-fill{fill:#dcfce7}[data-theme=light] .c-green-stroke{stroke:#16a34a}[data-theme=light] .c-green-text{fill:#15803d}[data-theme=light] .c-green-bg{fill:#dcfce7;stroke:#16a34a}[data-theme=light] .c-amber-fill{fill:#fef3c7}[data-theme=light] .c-amber-stroke{stroke:#d97706}[data-theme=light] .c-amber-text{fill:#92400e}[data-theme=light] .c-amber-bg{fill:#fef3c7;stroke:#d97706}[data-theme=light] .c-red-fill{fill:#fee2e2}[data-theme=light] .c-red-stroke{stroke:#dc2626}[data-theme=light] .c-red-text{fill:#991b1b}[data-theme=light] .c-red-bg{fill:#fee2e2;stroke:#dc2626}[data-theme=light] .c-cyan-fill{fill:#cffafe}[data-theme=light] .c-cyan-stroke{stroke:#0891b2}[data-theme=light] .c-cyan-text{fill:#155e75}[data-theme=light] .c-cyan-bg{fill:#cffafe;stroke:#0891b2}[data-theme=light] .c-pink-fill{fill:#fce7f3}[data-theme=light] .c-pink-stroke{stroke:#db2777}[data-theme=light] .c-pink-text{fill:#9d174d}[data-theme=light] .c-pink-bg{fill:#fce7f3;stroke:#db2777}[data-theme=light] .c-slate-fill{fill:#f1f5f9}[data-theme=light] .c-slate-stroke{stroke:#475569}[data-theme=light] .c-slate-text{fill:#334155}[data-theme=light] .c-slate-bg{fill:#f1f5f9;stroke:#475569}[data-theme=light] .c-orange-fill{fill:#ffedd5}[data-theme=light] .c-orange-stroke{stroke:#ea580c}[data-theme=light] .c-orange-text{fill:#9a3412}[data-theme=light] .c-orange-bg{fill:#ffedd5;stroke:#ea580c}[data-theme=light] :where(.diagram-svg,.diagram-svg-overlay) .connector{stroke:#64748b}body.session-hub-mode{height:auto;min-height:100vh;display:block}body.session-hub-mode>:not(#sessionHub):not(script){display:none!important}.session-hub{background:var(--bg);min-height:100vh;color:var(--text);padding:var(--space-8) var(--space-4)}.session-hub-shell{width:min(960px,100%);margin:0 auto}.session-hub-header{justify-content:space-between;align-items:end;gap:var(--space-6);padding-bottom:var(--space-5);border-bottom:1px solid var(--border);display:flex}.session-hub-header h1{font:600 var(--text-lg)/1.2 var(--font-display)}.session-hub-header>p{max-width:44ch;color:var(--text-dim);font-size:var(--text-sm);text-wrap:balance}.session-hub-kicker{margin-bottom:var(--space-1);color:var(--accent);font:600 var(--text-xs)/1 var(--font-display);letter-spacing:.08em}.session-grid{gap:var(--space-2);margin-top:var(--space-4);display:grid}.session-card-skeleton{gap:var(--space-2);padding:var(--space-4);border:1px solid var(--border);border-radius:var(--radius-md);background:var(--surface);display:grid}.session-card-skeleton span{border-radius:var(--radius-sm);background:var(--border);width:30%;height:10px;display:block}.session-card-skeleton span:nth-child(2){width:55%;height:16px}.session-card-skeleton span:nth-child(3){width:42%}.session-card{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-md);grid-template-columns:minmax(0,1fr) auto;align-items:center;display:grid;position:relative}.session-card.is-active{border-inline-start:3px solid var(--accent)}.session-card-link{min-width:0;padding:var(--space-3) var(--space-4);color:inherit;text-decoration:none}.session-card-link:focus-visible,.session-delete:focus-visible,.session-hub-empty a:focus-visible,.session-readonly-notice button:focus-visible{outline:2px solid var(--accent);outline-offset:2px}.session-card-heading,.session-card-meta,.session-card-meta>div{align-items:center;display:flex}.session-card-heading{gap:var(--space-2);margin-bottom:var(--space-1)}.session-seq{color:var(--accent);font:600 var(--text-xs)/1 var(--font-mono)}.session-source{padding:2px var(--space-2);border:1px solid var(--border);border-radius:var(--radius-full);color:var(--text-dim);font-size:var(--text-xs)}.session-card h2{font:500 var(--text-base)/1.3 var(--font-ui);text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.session-card-meta{gap:var(--space-2) var(--space-5);margin-top:var(--space-2);color:var(--text-dim);font-size:var(--text-xs);flex-wrap:wrap}.session-card-meta>div{gap:var(--space-1)}.session-card-meta dt:after{content:":"}.session-card-meta dd{color:var(--text)}.session-delete{min-width:44px;min-height:44px;padding:var(--space-2) var(--space-3);border:1px solid color-mix(in oklch, var(--delete-color), transparent 55%);border-radius:var(--radius-sm);color:var(--delete-color);font:500 var(--text-xs)/1 var(--font-ui);cursor:pointer;background:0 0;margin-inline-end:var(--space-3)}.session-delete:disabled{opacity:.45;cursor:not-allowed}.session-hub-empty{margin-top:var(--space-4);padding:var(--space-4);border:1px solid var(--border);border-radius:var(--radius-md);background:var(--surface)}.session-hub-empty h2{font-size:var(--text-base)}.session-hub-empty p{margin-top:var(--space-1);color:var(--text-dim);font-size:var(--text-sm)}.session-hub-empty a{margin-top:var(--space-3);color:var(--accent);font-size:var(--text-sm);display:inline-block}.session-hub-error{min-height:1.4em;margin-top:var(--space-3);color:var(--error);font-size:var(--text-sm)}.session-view-label{color:var(--text-dim);font-size:var(--text-xs);margin-inline-start:var(--space-2)}.session-readonly-notice{justify-content:space-between;align-items:center;gap:var(--space-3);padding:var(--space-2) var(--space-3);border-top:1px solid var(--warning);background:var(--warning-dim);color:var(--text);font-size:var(--text-sm);display:flex}.session-readonly-notice button{min-height:36px;padding:var(--space-2) var(--space-3);border:1px solid var(--warning);border-radius:var(--radius-sm);background:var(--surface);color:var(--text);font:inherit;cursor:pointer;flex:none}.elicitation-readonly-notice{margin-top:var(--space-2);color:var(--error);font-size:var(--text-sm)}@media (width<=640px){.session-hub{padding:var(--space-5) var(--space-3)}.session-hub-header{display:block}.session-hub-header>p{margin-top:var(--space-2)}.session-readonly-notice{flex-direction:column;align-items:stretch}}
|