@orion-agents/orion-code 0.3.17 → 0.3.19

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.
@@ -1,4 +1,4 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/TerminalPanel-DnWh3Vp2.js","assets/TerminalPanel-DLuoa74B.css","assets/FilesPanel-BARQCmne.js","assets/useAutoNotice-DfQi4G1X.js","assets/GitPanel-DjB9eSiJ.js","assets/ReviewPanel-YhEGlp-G.js"])))=>i.map(i=>d[i]);
1
+ const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/TerminalPanel-DPSMepio.js","assets/TerminalPanel-DLuoa74B.css","assets/FilesPanel-DGWgLv6R.js","assets/useAutoNotice-h7c0Iz1E.js","assets/GitPanel-DIuJNXoB.js","assets/ReviewPanel-YWZXJdm5.js"])))=>i.map(i=>d[i]);
2
2
  var ym=Object.defineProperty;var xm=(n,r,o)=>r in n?ym(n,r,{enumerable:!0,configurable:!0,writable:!0,value:o}):n[r]=o;var Ht=(n,r,o)=>xm(n,typeof r!="symbol"?r+"":r,o);(function(){const r=document.createElement("link").relList;if(r&&r.supports&&r.supports("modulepreload"))return;for(const d of document.querySelectorAll('link[rel="modulepreload"]'))a(d);new MutationObserver(d=>{for(const p of d)if(p.type==="childList")for(const f of p.addedNodes)f.tagName==="LINK"&&f.rel==="modulepreload"&&a(f)}).observe(document,{childList:!0,subtree:!0});function o(d){const p={};return d.integrity&&(p.integrity=d.integrity),d.referrerPolicy&&(p.referrerPolicy=d.referrerPolicy),d.crossOrigin==="use-credentials"?p.credentials="include":d.crossOrigin==="anonymous"?p.credentials="omit":p.credentials="same-origin",p}function a(d){if(d.ep)return;d.ep=!0;const p=o(d);fetch(d.href,p)}})();function Qf(n){return n&&n.__esModule&&Object.prototype.hasOwnProperty.call(n,"default")?n.default:n}var Wa={exports:{}},ei={},Fa={exports:{}},Pe={};var Bd;function wm(){if(Bd)return Pe;Bd=1;var n=Symbol.for("react.element"),r=Symbol.for("react.portal"),o=Symbol.for("react.fragment"),a=Symbol.for("react.strict_mode"),d=Symbol.for("react.profiler"),p=Symbol.for("react.provider"),f=Symbol.for("react.context"),g=Symbol.for("react.forward_ref"),w=Symbol.for("react.suspense"),x=Symbol.for("react.memo"),E=Symbol.for("react.lazy"),C=Symbol.iterator;function R(v){return v===null||typeof v!="object"?null:(v=C&&v[C]||v["@@iterator"],typeof v=="function"?v:null)}var _={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},A=Object.assign,L={};function W(v,O,ue){this.props=v,this.context=O,this.refs=L,this.updater=ue||_}W.prototype.isReactComponent={},W.prototype.setState=function(v,O){if(typeof v!="object"&&typeof v!="function"&&v!=null)throw Error("setState(...): takes an object of state variables to update or a function which returns an object of state variables.");this.updater.enqueueSetState(this,v,O,"setState")},W.prototype.forceUpdate=function(v){this.updater.enqueueForceUpdate(this,v,"forceUpdate")};function ie(){}ie.prototype=W.prototype;function B(v,O,ue){this.props=v,this.context=O,this.refs=L,this.updater=ue||_}var Se=B.prototype=new ie;Se.constructor=B,A(Se,W.prototype),Se.isPureReactComponent=!0;var re=Array.isArray,ne=Object.prototype.hasOwnProperty,b={current:null},D={key:!0,ref:!0,__self:!0,__source:!0};function ee(v,O,ue){var he,we={},J=null,me=null;if(O!=null)for(he in O.ref!==void 0&&(me=O.ref),O.key!==void 0&&(J=""+O.key),O)ne.call(O,he)&&!D.hasOwnProperty(he)&&(we[he]=O[he]);var Ce=arguments.length-2;if(Ce===1)we.children=ue;else if(1<Ce){for(var ae=Array(Ce),Oe=0;Oe<Ce;Oe++)ae[Oe]=arguments[Oe+2];we.children=ae}if(v&&v.defaultProps)for(he in Ce=v.defaultProps,Ce)we[he]===void 0&&(we[he]=Ce[he]);return{$$typeof:n,type:v,key:J,ref:me,props:we,_owner:b.current}}function X(v,O){return{$$typeof:n,type:v.type,key:O,ref:v.ref,props:v.props,_owner:v._owner}}function oe(v){return typeof v=="object"&&v!==null&&v.$$typeof===n}function Q(v){var O={"=":"=0",":":"=2"};return"$"+v.replace(/[=:]/g,function(ue){return O[ue]})}var xe=/\/+/g;function se(v,O){return typeof v=="object"&&v!==null&&v.key!=null?Q(""+v.key):O.toString(36)}function Ie(v,O,ue,he,we){var J=typeof v;(J==="undefined"||J==="boolean")&&(v=null);var me=!1;if(v===null)me=!0;else switch(J){case"string":case"number":me=!0;break;case"object":switch(v.$$typeof){case n:case r:me=!0}}if(me)return me=v,we=we(me),v=he===""?"."+se(me,0):he,re(we)?(ue="",v!=null&&(ue=v.replace(xe,"$&/")+"/"),Ie(we,O,ue,"",function(Oe){return Oe})):we!=null&&(oe(we)&&(we=X(we,ue+(!we.key||me&&me.key===we.key?"":(""+we.key).replace(xe,"$&/")+"/")+v)),O.push(we)),1;if(me=0,he=he===""?".":he+":",re(v))for(var Ce=0;Ce<v.length;Ce++){J=v[Ce];var ae=he+se(J,Ce);me+=Ie(J,O,ue,ae,we)}else if(ae=R(v),typeof ae=="function")for(v=ae.call(v),Ce=0;!(J=v.next()).done;)J=J.value,ae=he+se(J,Ce++),me+=Ie(J,O,ue,ae,we);else if(J==="object")throw O=String(v),Error("Objects are not valid as a React child (found: "+(O==="[object Object]"?"object with keys {"+Object.keys(v).join(", ")+"}":O)+"). If you meant to render a collection of children, use an array instead.");return me}function $(v,O,ue){if(v==null)return v;var he=[],we=0;return Ie(v,he,"","",function(J){return O.call(ue,J,we++)}),he}function pe(v){if(v._status===-1){var O=v._result;O=O(),O.then(function(ue){(v._status===0||v._status===-1)&&(v._status=1,v._result=ue)},function(ue){(v._status===0||v._status===-1)&&(v._status=2,v._result=ue)}),v._status===-1&&(v._status=0,v._result=O)}if(v._status===1)return v._result.default;throw v._result}var V={current:null},z={transition:null},te={ReactCurrentDispatcher:V,ReactCurrentBatchConfig:z,ReactCurrentOwner:b};function q(){throw Error("act(...) is not supported in production builds of React.")}return Pe.Children={map:$,forEach:function(v,O,ue){$(v,function(){O.apply(this,arguments)},ue)},count:function(v){var O=0;return $(v,function(){O++}),O},toArray:function(v){return $(v,function(O){return O})||[]},only:function(v){if(!oe(v))throw Error("React.Children.only expected to receive a single React element child.");return v}},Pe.Component=W,Pe.Fragment=o,Pe.Profiler=d,Pe.PureComponent=B,Pe.StrictMode=a,Pe.Suspense=w,Pe.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED=te,Pe.act=q,Pe.cloneElement=function(v,O,ue){if(v==null)throw Error("React.cloneElement(...): The argument must be a React element, but you passed "+v+".");var he=A({},v.props),we=v.key,J=v.ref,me=v._owner;if(O!=null){if(O.ref!==void 0&&(J=O.ref,me=b.current),O.key!==void 0&&(we=""+O.key),v.type&&v.type.defaultProps)var Ce=v.type.defaultProps;for(ae in O)ne.call(O,ae)&&!D.hasOwnProperty(ae)&&(he[ae]=O[ae]===void 0&&Ce!==void 0?Ce[ae]:O[ae])}var ae=arguments.length-2;if(ae===1)he.children=ue;else if(1<ae){Ce=Array(ae);for(var Oe=0;Oe<ae;Oe++)Ce[Oe]=arguments[Oe+2];he.children=Ce}return{$$typeof:n,type:v.type,key:we,ref:J,props:he,_owner:me}},Pe.createContext=function(v){return v={$$typeof:f,_currentValue:v,_currentValue2:v,_threadCount:0,Provider:null,Consumer:null,_defaultValue:null,_globalName:null},v.Provider={$$typeof:p,_context:v},v.Consumer=v},Pe.createElement=ee,Pe.createFactory=function(v){var O=ee.bind(null,v);return O.type=v,O},Pe.createRef=function(){return{current:null}},Pe.forwardRef=function(v){return{$$typeof:g,render:v}},Pe.isValidElement=oe,Pe.lazy=function(v){return{$$typeof:E,_payload:{_status:-1,_result:v},_init:pe}},Pe.memo=function(v,O){return{$$typeof:x,type:v,compare:O===void 0?null:O}},Pe.startTransition=function(v){var O=z.transition;z.transition={};try{v()}finally{z.transition=O}},Pe.unstable_act=q,Pe.useCallback=function(v,O){return V.current.useCallback(v,O)},Pe.useContext=function(v){return V.current.useContext(v)},Pe.useDebugValue=function(){},Pe.useDeferredValue=function(v){return V.current.useDeferredValue(v)},Pe.useEffect=function(v,O){return V.current.useEffect(v,O)},Pe.useId=function(){return V.current.useId()},Pe.useImperativeHandle=function(v,O,ue){return V.current.useImperativeHandle(v,O,ue)},Pe.useInsertionEffect=function(v,O){return V.current.useInsertionEffect(v,O)},Pe.useLayoutEffect=function(v,O){return V.current.useLayoutEffect(v,O)},Pe.useMemo=function(v,O){return V.current.useMemo(v,O)},Pe.useReducer=function(v,O,ue){return V.current.useReducer(v,O,ue)},Pe.useRef=function(v){return V.current.useRef(v)},Pe.useState=function(v){return V.current.useState(v)},Pe.useSyncExternalStore=function(v,O,ue){return V.current.useSyncExternalStore(v,O,ue)},Pe.useTransition=function(){return V.current.useTransition()},Pe.version="18.3.1",Pe}var qd;function cc(){return qd||(qd=1,Fa.exports=wm()),Fa.exports}var Ud;function km(){if(Ud)return ei;Ud=1;var n=cc(),r=Symbol.for("react.element"),o=Symbol.for("react.fragment"),a=Object.prototype.hasOwnProperty,d=n.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner,p={key:!0,ref:!0,__self:!0,__source:!0};function f(g,w,x){var E,C={},R=null,_=null;x!==void 0&&(R=""+x),w.key!==void 0&&(R=""+w.key),w.ref!==void 0&&(_=w.ref);for(E in w)a.call(w,E)&&!p.hasOwnProperty(E)&&(C[E]=w[E]);if(g&&g.defaultProps)for(E in w=g.defaultProps,w)C[E]===void 0&&(C[E]=w[E]);return{$$typeof:r,type:g,key:R,ref:_,props:C,_owner:d.current}}return ei.Fragment=o,ei.jsx=f,ei.jsxs=f,ei}var Hd;function jm(){return Hd||(Hd=1,Wa.exports=km()),Wa.exports}var i=jm(),m=cc();const Sm=Qf(m);var No={},Ba={exports:{}},St={},qa={exports:{}},Ua={};var Vd;function Cm(){return Vd||(Vd=1,(function(n){function r(z,te){var q=z.length;z.push(te);e:for(;0<q;){var v=q-1>>>1,O=z[v];if(0<d(O,te))z[v]=te,z[q]=O,q=v;else break e}}function o(z){return z.length===0?null:z[0]}function a(z){if(z.length===0)return null;var te=z[0],q=z.pop();if(q!==te){z[0]=q;e:for(var v=0,O=z.length,ue=O>>>1;v<ue;){var he=2*(v+1)-1,we=z[he],J=he+1,me=z[J];if(0>d(we,q))J<O&&0>d(me,we)?(z[v]=me,z[J]=q,v=J):(z[v]=we,z[he]=q,v=he);else if(J<O&&0>d(me,q))z[v]=me,z[J]=q,v=J;else break e}}return te}function d(z,te){var q=z.sortIndex-te.sortIndex;return q!==0?q:z.id-te.id}if(typeof performance=="object"&&typeof performance.now=="function"){var p=performance;n.unstable_now=function(){return p.now()}}else{var f=Date,g=f.now();n.unstable_now=function(){return f.now()-g}}var w=[],x=[],E=1,C=null,R=3,_=!1,A=!1,L=!1,W=typeof setTimeout=="function"?setTimeout:null,ie=typeof clearTimeout=="function"?clearTimeout:null,B=typeof setImmediate<"u"?setImmediate:null;typeof navigator<"u"&&navigator.scheduling!==void 0&&navigator.scheduling.isInputPending!==void 0&&navigator.scheduling.isInputPending.bind(navigator.scheduling);function Se(z){for(var te=o(x);te!==null;){if(te.callback===null)a(x);else if(te.startTime<=z)a(x),te.sortIndex=te.expirationTime,r(w,te);else break;te=o(x)}}function re(z){if(L=!1,Se(z),!A)if(o(w)!==null)A=!0,pe(ne);else{var te=o(x);te!==null&&V(re,te.startTime-z)}}function ne(z,te){A=!1,L&&(L=!1,ie(ee),ee=-1),_=!0;var q=R;try{for(Se(te),C=o(w);C!==null&&(!(C.expirationTime>te)||z&&!Q());){var v=C.callback;if(typeof v=="function"){C.callback=null,R=C.priorityLevel;var O=v(C.expirationTime<=te);te=n.unstable_now(),typeof O=="function"?C.callback=O:C===o(w)&&a(w),Se(te)}else a(w);C=o(w)}if(C!==null)var ue=!0;else{var he=o(x);he!==null&&V(re,he.startTime-te),ue=!1}return ue}finally{C=null,R=q,_=!1}}var b=!1,D=null,ee=-1,X=5,oe=-1;function Q(){return!(n.unstable_now()-oe<X)}function xe(){if(D!==null){var z=n.unstable_now();oe=z;var te=!0;try{te=D(!0,z)}finally{te?se():(b=!1,D=null)}}else b=!1}var se;if(typeof B=="function")se=function(){B(xe)};else if(typeof MessageChannel<"u"){var Ie=new MessageChannel,$=Ie.port2;Ie.port1.onmessage=xe,se=function(){$.postMessage(null)}}else se=function(){W(xe,0)};function pe(z){D=z,b||(b=!0,se())}function V(z,te){ee=W(function(){z(n.unstable_now())},te)}n.unstable_IdlePriority=5,n.unstable_ImmediatePriority=1,n.unstable_LowPriority=4,n.unstable_NormalPriority=3,n.unstable_Profiling=null,n.unstable_UserBlockingPriority=2,n.unstable_cancelCallback=function(z){z.callback=null},n.unstable_continueExecution=function(){A||_||(A=!0,pe(ne))},n.unstable_forceFrameRate=function(z){0>z||125<z?console.error("forceFrameRate takes a positive int between 0 and 125, forcing frame rates higher than 125 fps is not supported"):X=0<z?Math.floor(1e3/z):5},n.unstable_getCurrentPriorityLevel=function(){return R},n.unstable_getFirstCallbackNode=function(){return o(w)},n.unstable_next=function(z){switch(R){case 1:case 2:case 3:var te=3;break;default:te=R}var q=R;R=te;try{return z()}finally{R=q}},n.unstable_pauseExecution=function(){},n.unstable_requestPaint=function(){},n.unstable_runWithPriority=function(z,te){switch(z){case 1:case 2:case 3:case 4:case 5:break;default:z=3}var q=R;R=z;try{return te()}finally{R=q}},n.unstable_scheduleCallback=function(z,te,q){var v=n.unstable_now();switch(typeof q=="object"&&q!==null?(q=q.delay,q=typeof q=="number"&&0<q?v+q:v):q=v,z){case 1:var O=-1;break;case 2:O=250;break;case 5:O=1073741823;break;case 4:O=1e4;break;default:O=5e3}return O=q+O,z={id:E++,callback:te,priorityLevel:z,startTime:q,expirationTime:O,sortIndex:-1},q>v?(z.sortIndex=q,r(x,z),o(w)===null&&z===o(x)&&(L?(ie(ee),ee=-1):L=!0,V(re,q-v))):(z.sortIndex=O,r(w,z),A||_||(A=!0,pe(ne))),z},n.unstable_shouldYield=Q,n.unstable_wrapCallback=function(z){var te=R;return function(){var q=R;R=te;try{return z.apply(this,arguments)}finally{R=q}}}})(Ua)),Ua}var Kd;function bm(){return Kd||(Kd=1,qa.exports=Cm()),qa.exports}var Gd;function Nm(){if(Gd)return St;Gd=1;var n=cc(),r=bm();function o(e){for(var t="https://reactjs.org/docs/error-decoder.html?invariant="+e,s=1;s<arguments.length;s++)t+="&args[]="+encodeURIComponent(arguments[s]);return"Minified React error #"+e+"; visit "+t+" for the full message or use the non-minified dev environment for full errors and additional helpful warnings."}var a=new Set,d={};function p(e,t){f(e,t),f(e+"Capture",t)}function f(e,t){for(d[e]=t,e=0;e<t.length;e++)a.add(t[e])}var g=!(typeof window>"u"||typeof window.document>"u"||typeof window.document.createElement>"u"),w=Object.prototype.hasOwnProperty,x=/^[:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD][:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD\-.0-9\u00B7\u0300-\u036F\u203F-\u2040]*$/,E={},C={};function R(e){return w.call(C,e)?!0:w.call(E,e)?!1:x.test(e)?C[e]=!0:(E[e]=!0,!1)}function _(e,t,s,l){if(s!==null&&s.type===0)return!1;switch(typeof t){case"function":case"symbol":return!0;case"boolean":return l?!1:s!==null?!s.acceptsBooleans:(e=e.toLowerCase().slice(0,5),e!=="data-"&&e!=="aria-");default:return!1}}function A(e,t,s,l){if(t===null||typeof t>"u"||_(e,t,s,l))return!0;if(l)return!1;if(s!==null)switch(s.type){case 3:return!t;case 4:return t===!1;case 5:return isNaN(t);case 6:return isNaN(t)||1>t}return!1}function L(e,t,s,l,c,u,h){this.acceptsBooleans=t===2||t===3||t===4,this.attributeName=l,this.attributeNamespace=c,this.mustUseProperty=s,this.propertyName=e,this.type=t,this.sanitizeURL=u,this.removeEmptyString=h}var W={};"children dangerouslySetInnerHTML defaultValue defaultChecked innerHTML suppressContentEditableWarning suppressHydrationWarning style".split(" ").forEach(function(e){W[e]=new L(e,0,!1,e,null,!1,!1)}),[["acceptCharset","accept-charset"],["className","class"],["htmlFor","for"],["httpEquiv","http-equiv"]].forEach(function(e){var t=e[0];W[t]=new L(t,1,!1,e[1],null,!1,!1)}),["contentEditable","draggable","spellCheck","value"].forEach(function(e){W[e]=new L(e,2,!1,e.toLowerCase(),null,!1,!1)}),["autoReverse","externalResourcesRequired","focusable","preserveAlpha"].forEach(function(e){W[e]=new L(e,2,!1,e,null,!1,!1)}),"allowFullScreen async autoFocus autoPlay controls default defer disabled disablePictureInPicture disableRemotePlayback formNoValidate hidden loop noModule noValidate open playsInline readOnly required reversed scoped seamless itemScope".split(" ").forEach(function(e){W[e]=new L(e,3,!1,e.toLowerCase(),null,!1,!1)}),["checked","multiple","muted","selected"].forEach(function(e){W[e]=new L(e,3,!0,e,null,!1,!1)}),["capture","download"].forEach(function(e){W[e]=new L(e,4,!1,e,null,!1,!1)}),["cols","rows","size","span"].forEach(function(e){W[e]=new L(e,6,!1,e,null,!1,!1)}),["rowSpan","start"].forEach(function(e){W[e]=new L(e,5,!1,e.toLowerCase(),null,!1,!1)});var ie=/[\-:]([a-z])/g;function B(e){return e[1].toUpperCase()}"accent-height alignment-baseline arabic-form baseline-shift cap-height clip-path clip-rule color-interpolation color-interpolation-filters color-profile color-rendering dominant-baseline enable-background fill-opacity fill-rule flood-color flood-opacity font-family font-size font-size-adjust font-stretch font-style font-variant font-weight glyph-name glyph-orientation-horizontal glyph-orientation-vertical horiz-adv-x horiz-origin-x image-rendering letter-spacing lighting-color marker-end marker-mid marker-start overline-position overline-thickness paint-order panose-1 pointer-events rendering-intent shape-rendering stop-color stop-opacity strikethrough-position strikethrough-thickness stroke-dasharray stroke-dashoffset stroke-linecap stroke-linejoin stroke-miterlimit stroke-opacity stroke-width text-anchor text-decoration text-rendering underline-position underline-thickness unicode-bidi unicode-range units-per-em v-alphabetic v-hanging v-ideographic v-mathematical vector-effect vert-adv-y vert-origin-x vert-origin-y word-spacing writing-mode xmlns:xlink x-height".split(" ").forEach(function(e){var t=e.replace(ie,B);W[t]=new L(t,1,!1,e,null,!1,!1)}),"xlink:actuate xlink:arcrole xlink:role xlink:show xlink:title xlink:type".split(" ").forEach(function(e){var t=e.replace(ie,B);W[t]=new L(t,1,!1,e,"http://www.w3.org/1999/xlink",!1,!1)}),["xml:base","xml:lang","xml:space"].forEach(function(e){var t=e.replace(ie,B);W[t]=new L(t,1,!1,e,"http://www.w3.org/XML/1998/namespace",!1,!1)}),["tabIndex","crossOrigin"].forEach(function(e){W[e]=new L(e,1,!1,e.toLowerCase(),null,!1,!1)}),W.xlinkHref=new L("xlinkHref",1,!1,"xlink:href","http://www.w3.org/1999/xlink",!0,!1),["src","href","action","formAction"].forEach(function(e){W[e]=new L(e,1,!1,e.toLowerCase(),null,!0,!0)});function Se(e,t,s,l){var c=W.hasOwnProperty(t)?W[t]:null;(c!==null?c.type!==0:l||!(2<t.length)||t[0]!=="o"&&t[0]!=="O"||t[1]!=="n"&&t[1]!=="N")&&(A(t,s,c,l)&&(s=null),l||c===null?R(t)&&(s===null?e.removeAttribute(t):e.setAttribute(t,""+s)):c.mustUseProperty?e[c.propertyName]=s===null?c.type===3?!1:"":s:(t=c.attributeName,l=c.attributeNamespace,s===null?e.removeAttribute(t):(c=c.type,s=c===3||c===4&&s===!0?"":""+s,l?e.setAttributeNS(l,t,s):e.setAttribute(t,s))))}var re=n.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED,ne=Symbol.for("react.element"),b=Symbol.for("react.portal"),D=Symbol.for("react.fragment"),ee=Symbol.for("react.strict_mode"),X=Symbol.for("react.profiler"),oe=Symbol.for("react.provider"),Q=Symbol.for("react.context"),xe=Symbol.for("react.forward_ref"),se=Symbol.for("react.suspense"),Ie=Symbol.for("react.suspense_list"),$=Symbol.for("react.memo"),pe=Symbol.for("react.lazy"),V=Symbol.for("react.offscreen"),z=Symbol.iterator;function te(e){return e===null||typeof e!="object"?null:(e=z&&e[z]||e["@@iterator"],typeof e=="function"?e:null)}var q=Object.assign,v;function O(e){if(v===void 0)try{throw Error()}catch(s){var t=s.stack.trim().match(/\n( *(at )?)/);v=t&&t[1]||""}return`
3
3
  `+v+e}var ue=!1;function he(e,t){if(!e||ue)return"";ue=!0;var s=Error.prepareStackTrace;Error.prepareStackTrace=void 0;try{if(t)if(t=function(){throw Error()},Object.defineProperty(t.prototype,"props",{set:function(){throw Error()}}),typeof Reflect=="object"&&Reflect.construct){try{Reflect.construct(t,[])}catch(T){var l=T}Reflect.construct(e,[],t)}else{try{t.call()}catch(T){l=T}e.call(t.prototype)}else{try{throw Error()}catch(T){l=T}e()}}catch(T){if(T&&l&&typeof T.stack=="string"){for(var c=T.stack.split(`
4
4
  `),u=l.stack.split(`
@@ -17,4 +17,4 @@ ${o.text}`:o.text})),requestAnimationFrame(()=>_.current?.focus()))},[A,W,o,d]);
17
17
  /`:"/")}),i.jsx(nc,{label:Og(n),accessibleLabel:"工作模式",disabled:!ne,value:n.composer?.mode.baseMode??n.mode.baseMode,options:[{value:"interactive",label:"BUILD",detail:"执行、修改并验证当前任务"},{value:"plan",label:"PLAN",detail:"生成计划并等待你的审核"},{value:"auto",label:"AUTO",detail:"自主执行,仍受权限与沙箱约束"}],onSelect:se=>{se==="auto"?w("auto"):bt(r.setMode(se))}}),i.jsx(nc,{label:Mg(n),accessibleLabel:"会话权限",disabled:!ne,value:n.composer?.permission.override??"inherit",options:[{value:"inherit",label:"继承项目",detail:`当前 ${n.composer?.permission.projectDefault??"ask"}`},{value:"ask",label:"ASK",detail:"高风险工具逐次请求批准"},{value:"allow",label:"ALLOW",detail:"允许策略许可的工具,不绕过沙箱"},{value:"deny",label:"DENY",detail:"拒绝需要授权的工具"}],onSelect:se=>{se==="allow"?w("allow"):bt(r.setPermissionOverride(se==="inherit"?null:se))}})]}),i.jsxs("div",{className:"composer-actions composer-control-actions",children:[i.jsx(Cg,{state:n,actions:r,disabled:!ne}),i.jsx(Ng,{state:n,actions:r,disabled:!ne}),n.processing?i.jsxs(i.Fragment,{children:[i.jsxs("button",{type:"button",className:"icon-text-button stop-button",onClick:()=>bt(r.interrupt()),disabled:!ne,children:[i.jsx(Y,{name:"stop",size:14}),"停止"]}),i.jsx("button",{type:"button",className:"secondary-button",onClick:()=>{oe("submit")},disabled:!b.trim()||!ne,children:"Steer"})]}):null,Se?i.jsx("button",{type:"button",className:"secondary-button",onClick:()=>bt(r.cancelQueuedTurn()),disabled:!re,children:"取消排队"}):null,i.jsx("button",{type:"submit",className:"send-button composer-send-icon","aria-label":n.processing?"加入消息队列":"发送消息",disabled:!ne||!b.trim(),children:i.jsx(Y,{name:"arrow-up",size:17})})]})]}),D.length>0||x||n.composer?.lastError?i.jsxs("div",{className:"composer-footline",children:[D.length>0?i.jsxs("span",{children:[D.length," 个 Context 引用"]}):null,x?i.jsx("span",{role:"alert",children:x}):n.composer?.lastError?i.jsx("span",{role:"alert",children:n.composer.lastError.message}):null]}):null]}),g?i.jsx(Pg,{kind:g,onCancel:()=>w(null),onConfirm:()=>{const se=g;w(null),bt(se==="auto"?r.setMode("auto"):r.setPermissionOverride("allow"))}}):null]})}function Cg({state:n,actions:r,disabled:o}){const a=n.composer?.model,d=["auto",...a?.effort.supportedLevels??[]];return i.jsxs("div",{className:"model-control-cluster",children:[i.jsx(bg,{state:n,actions:r,disabled:o}),a?.effort.supported?i.jsx(nc,{label:n.composer?.pending.model?`${_o(a.effort.requested)} → ${_o(n.composer.pending.model.effort)}`:_o(a.effort.requested),accessibleLabel:"推理强度",disabled:o,value:a.effort.requested,options:d.map(p=>({value:p,label:_o(p),detail:p==="auto"?"采用模型或项目默认值":`请求 ${p} reasoning effort`})),onSelect:p=>bt(r.selectModel(a.modelId,p))}):null]})}function bg({state:n,actions:r,disabled:o}){const[a,d]=m.useState(!1),[p,f]=m.useState(""),g=m.useRef(null),w=m.useRef(null),x=m.useRef(null),E=n.composer?.model,C=n.modelCatalog,R=n.composer?.pending.model?`${E?.modelId??"模型"} → ${n.composer.pending.model.modelId}`:E?.modelId??"模型",_=p.trim().toLowerCase(),A=new Set((C?.unavailableProviders??[]).map(B=>B.id)),L=(C?.items??[]).filter(B=>!A.has(B.providerId)).filter(B=>[B.id,B.label,B.providerId,B.providerLabel].some(Se=>Se.toLowerCase().includes(_))).slice(0,80),W=new Map;for(const B of L){const Se=B.providerLabel||B.providerId;W.set(Se,[...W.get(Se)??[],B])}const ie=()=>{d(!1),f(""),w.current?.focus()};return Jo(a,g,ie),i.jsxs("div",{className:"control-menu",ref:g,children:[i.jsxs("button",{ref:w,type:"button",className:"composer-control-trigger","aria-label":"会话模型","aria-haspopup":"menu","aria-expanded":a,disabled:o,onClick:()=>{a?ie():(d(!0),C||bt(r.loadModelCatalog()))},children:[i.jsx("span",{children:R}),i.jsx(Y,{name:"chevron",size:12})]}),a?i.jsxs("div",{className:"control-menu-popover model-catalog-popover",role:"menu","aria-label":"会话模型",ref:x,onKeyDown:B=>pc(B,ie),children:[(C?.items.length??0)>8?i.jsxs("label",{className:"model-catalog-search",children:[i.jsx("span",{className:"sr-only",children:"筛选模型"}),i.jsx("input",{type:"search",value:p,placeholder:"筛选模型…",onChange:B=>f(B.target.value),onKeyDown:B=>{B.key==="ArrowDown"?(B.preventDefault(),tp(x.current)):B.key==="Escape"&&(B.stopPropagation(),ie())}})]}):null,C===null?i.jsx("p",{role:"status",children:"正在加载模型…"}):null,C&&L.length===0?i.jsx("p",{children:"没有匹配的可用模型"}):null,[...W.entries()].map(([B,Se])=>i.jsxs("section",{role:"group","aria-label":B,children:[i.jsx("div",{className:"model-provider-heading",children:B}),Se.map(re=>i.jsxs("button",{type:"button",role:"menuitemradio","aria-checked":re.id===E?.modelId,onClick:()=>{ie(),bt(r.selectModel(re.id))},children:[i.jsxs("span",{children:[i.jsx("strong",{children:re.label}),i.jsxs("small",{children:[ls(re.contextWindow)," context",re.reasoning?" · reasoning":""]})]}),re.id===E?.modelId?i.jsx(Y,{name:"check",size:14}):null]},re.id))]},B)),C?.unavailableProviders.map(B=>i.jsxs("section",{role:"group","aria-label":`${B.id} 不可用`,children:[i.jsxs("div",{className:"model-provider-heading state-error",children:[B.id," · 不可用"]}),i.jsx("p",{children:B.reason}),i.jsx("button",{type:"button",role:"menuitem",onClick:()=>bt(r.loadModelCatalog()),children:"Retry"})]},B.id)),(C?.items.length??0)>80&&!_?i.jsx("p",{children:"显示前 80 项;输入关键词继续筛选。"}):null]}):null]})}function Ng({state:n,actions:r,disabled:o}){const[a,d]=m.useState(!1),p=m.useRef(null),f=m.useRef(null),g=n.composer?.contextUsage,w=g?Math.max(0,Math.min(100,g.percent)):null,x=g?.source==="estimated",E=!!(g&&g.percent>=g.warningThresholdPercent);return Jo(a,p,()=>{d(!1),f.current?.focus()}),i.jsxs("div",{className:"context-meter-wrap",ref:p,children:[i.jsxs("button",{ref:f,type:"button",className:"context-meter-button","aria-label":g?`Context ${x?"估算 ":""}${g.usedTokens} / ${g.safeInputBudget??g.contextWindow} tokens,${g.percent}%${E?",接近压缩阈值":""}`:"Context 用量不可用","aria-haspopup":"dialog","aria-expanded":a,disabled:o,onClick:()=>d(C=>!C),children:[i.jsx("span",{className:"context-meter-ring",style:{"--context-percent":`${w??0}%`},"aria-hidden":"true"}),i.jsx("span",{children:g?`${x?"~":""}${g.percent}%${E?" !":""}`:"Context"})]}),a?i.jsxs("section",{className:"context-popover",role:"dialog","aria-label":"Context 用量详情",children:[i.jsxs("header",{children:[i.jsx("strong",{children:"Context"}),i.jsx("button",{type:"button",className:"icon-button",onClick:()=>d(!1),"aria-label":"关闭 Context 详情",children:i.jsx(Y,{name:"close",size:14})})]}),g?i.jsxs("dl",{children:[i.jsxs("div",{children:[i.jsx("dt",{children:"当前模型"}),i.jsx("dd",{children:g.modelId})]}),i.jsxs("div",{children:[i.jsx("dt",{children:"已使用"}),i.jsx("dd",{children:ls(g.usedTokens)})]}),i.jsxs("div",{children:[i.jsx("dt",{children:"安全输入预算"}),i.jsx("dd",{children:ls(g.safeInputBudget??g.contextWindow)})]}),i.jsxs("div",{children:[i.jsx("dt",{children:"原始窗口"}),i.jsx("dd",{children:ls(g.contextWindow)})]}),i.jsxs("div",{children:[i.jsx("dt",{children:"输出预留"}),i.jsx("dd",{children:ls(g.reservedOutputTokens??0)})]}),i.jsxs("div",{children:[i.jsx("dt",{children:"安全余量"}),i.jsx("dd",{children:ls(g.safetyMarginTokens??0)})]}),i.jsxs("div",{children:[i.jsx("dt",{children:"来源"}),i.jsx("dd",{children:g.source==="estimated"?"估算 ~":g.source})]}),i.jsxs("div",{children:[i.jsx("dt",{children:"警告阈值"}),i.jsxs("dd",{children:[g.warningThresholdPercent,"%"]})]}),i.jsxs("div",{children:[i.jsx("dt",{children:"自动压缩"}),i.jsx("dd",{children:g.autoCompactEnabled?`${g.autoCompactThresholdPercent}%`:"关闭"})]})]}):i.jsx("p",{children:"Runtime 尚未提供当前模型的 Context 计数。"}),n.composer?.compactAvailable?i.jsx("button",{type:"button",className:"secondary-button",disabled:!g||n.processing,onClick:()=>bt(r.compactContext()),children:"立即压缩"}):null]}):null]})}function Ig({state:n,actions:r,disabled:o,references:a,onChange:d,onInsertCommand:p}){const[f,g]=m.useState(!1),[w,x]=m.useState("root"),[E,C]=m.useState([]),[R,_]=m.useState(!1),[A,L]=m.useState(""),W=m.useRef(null),ie=m.useRef(null);Jo(f,W,()=>g(!1));const B=b=>{a.some(D=>D.kind===b.kind&&D.id===b.id)||d([...a,b]),g(!1),x("root")},Se=async()=>{x("files"),_(!0),L("");try{const b=await r.listFiles();C(b.items.filter(D=>D.readable&&!D.sensitive))}catch(b){L(b instanceof Error?b.message:"文件列表加载失败。")}finally{_(!1)}},re=async b=>{_(!0),L("");try{if(nf(b)){const D=await r.listFiles(b.id);B({kind:"folder",id:b.id,label:b.name,revision:D.revision})}else if(Lg(b)){const D=await r.readFileContent(b.id);if(D.binary||D.sensitive)throw new Error("该文件不能加入模型 Context。");B({kind:"file",id:b.id,label:b.name,revision:D.revision})}}catch(D){L(D instanceof Error?D.message:"Context 引用加载失败。")}finally{_(!1)}},ne=async()=>{_(!0);try{const b=await r.review();B({kind:"review",id:"working-tree",label:b.truncated?`Review · ${b.totalChangedFiles} files · ${b.changedFiles.length} visible`:`Review · ${b.totalChangedFiles} files`,gitRevision:b.repositoryRevision})}catch(b){L(b instanceof Error?b.message:"Review Context 加载失败。")}finally{_(!1)}};return i.jsxs("div",{className:"control-menu context-launcher",ref:W,children:[i.jsx("button",{type:"button",className:"context-add-button","aria-label":"添加 Context","aria-haspopup":"menu","aria-expanded":f,disabled:o,onClick:()=>{const b=!f;g(b),b&&requestAnimationFrame(()=>tp(ie.current))},children:i.jsx(Y,{name:"add",size:17})}),f?i.jsxs("div",{className:"control-menu-popover context-launcher-menu",role:"menu","aria-label":"添加 Context",ref:ie,onKeyDown:b=>pc(b,()=>g(!1)),children:[w!=="root"?i.jsx("button",{type:"button",role:"menuitem",onClick:()=>x("root"),children:"← 返回"}):null,w==="root"?i.jsxs(i.Fragment,{children:[i.jsx(bn,{label:"文件或目录",detail:"Workspace 内受控读取",onClick:()=>{Se()}}),i.jsx(bn,{label:"当前 Review",detail:"绑定 exact Git revision",onClick:()=>{ne()}}),i.jsx(bn,{label:"历史 Session",detail:"引用受控摘要",onClick:()=>x("sessions")}),i.jsx(bn,{label:"Skill",detail:"绑定已加载能力 digest",onClick:()=>x("skills")}),i.jsx(bn,{label:"命令",detail:"插入 / 命令入口",onClick:()=>{p(),g(!1)}}),a.length>0?i.jsx(bn,{label:"清除 Context",detail:"移除当前草稿全部引用",onClick:()=>{d([]),g(!1)}}):null]}):null,w==="files"?E.map(b=>i.jsx(bn,{label:b.name,detail:nf(b)?"目录":`${b.sizeBytes??0} bytes`,onClick:()=>{re(b)}},b.id)):null,w==="sessions"?n.sessions.filter(b=>b.id!==n.activeSessionId).map(b=>i.jsx(bn,{label:b.name||`Session ${b.id.slice(0,8)}`,detail:`${b.messageCount} 条消息`,onClick:()=>B({kind:"session",id:b.id,label:b.name||`Session ${b.id.slice(0,8)}`,digest:b.contextDigest})},b.id)):null,w==="skills"?n.skills.filter(b=>b.userInvocable).map(b=>i.jsx(bn,{label:b.name,detail:b.description,onClick:()=>B({kind:"skill",id:b.id,label:b.name,digest:b.digest})},b.id)):null,R?i.jsx("p",{role:"status",children:"正在加载…"}):null,A?i.jsx("p",{role:"alert",children:A}):null]}):null]})}function _g({references:n,invalidReferenceKeys:r,onChange:o}){return i.jsx("div",{className:"context-tray","aria-label":"当前 Context 引用",children:n.map(a=>i.jsxs("span",{className:`context-chip${r.has(oi(a))?" state-stale":""}`,children:[i.jsx("small",{children:Ag(a.kind)}),i.jsx("span",{children:a.label}),r.has(oi(a))?i.jsx("span",{className:"context-chip-state",children:"已失效,请移除后重新添加"}):null,i.jsx("button",{type:"button","aria-label":`移除 Context ${a.label}`,onClick:()=>o(n.filter(d=>d!==a)),children:i.jsx(Y,{name:"close",size:12})})]},oi(a)))})}function Eg({state:n,actions:r}){const o=n.composer.planReview,[a,d]=m.useState(!1),[p,f]=m.useState(""),g=!!n.pendingAction||n.connection!=="live"||!Pr(n);return i.jsxs("section",{className:"plan-review-card","aria-labelledby":"plan-review-title",children:[i.jsxs("div",{children:[i.jsx("span",{className:"eyebrow",children:"PLAN REVIEW"}),i.jsx("h2",{id:"plan-review-title",children:"计划已保存,尚未执行"}),i.jsxs("p",{children:["由 ",o.createdModel," 创建 · digest ",o.planDigest.slice(0,12)]})]}),a?i.jsxs("label",{children:["继续规划反馈",i.jsx("textarea",{rows:2,value:p,onChange:w=>f(w.target.value)})]}):null,i.jsxs("div",{className:"plan-review-actions",children:[i.jsx("button",{type:"button",className:"danger-ghost-button",disabled:g,onClick:()=>bt(r.reviewPlan(o.planDigest,"cancel")),children:"取消计划"}),a?i.jsx("button",{type:"button",className:"secondary-button",disabled:g||!p.trim(),onClick:()=>bt(r.reviewPlan(o.planDigest,"continue",p.trim())),children:"提交反馈"}):i.jsx("button",{type:"button",className:"secondary-button",disabled:g,onClick:()=>d(!0),children:"继续规划"}),i.jsx("button",{type:"button",className:"primary-button",disabled:g,onClick:()=>bt(r.reviewPlan(o.planDigest,"approve")),children:"批准并进入 BUILD"})]})]})}function nc({label:n,accessibleLabel:r,value:o,options:a,disabled:d,emptyLabel:p,onOpen:f,onSelect:g}){const[w,x]=m.useState(!1),E=m.useRef(null),C=m.useRef(null),R=m.useRef(null),_=m.useId(),A=()=>{x(!1),C.current?.focus()},L=()=>{x(!0),f?.(),requestAnimationFrame(()=>Rg(R.current))};return Jo(w,E,A),i.jsxs("div",{className:"control-menu",ref:E,children:[i.jsxs("button",{ref:C,type:"button",className:"composer-control-trigger","aria-label":r,"aria-haspopup":"menu","aria-expanded":w,"aria-controls":w?_:void 0,disabled:d,onClick:()=>{w?A():L()},onKeyDown:W=>{W.key==="ArrowDown"&&(W.preventDefault(),L())},children:[i.jsx("span",{children:n}),i.jsx(Y,{name:"chevron",size:12})]}),w?i.jsx("div",{id:_,ref:R,className:"control-menu-popover",role:"menu","aria-label":r,onKeyDown:W=>pc(W,A),children:a.length===0?i.jsx("p",{children:p??"没有选项"}):a.map(W=>i.jsxs("button",{type:"button",role:"menuitemradio","aria-checked":W.value===o,onClick:()=>{A(),g(W.value)},children:[i.jsxs("span",{children:[i.jsx("strong",{children:W.label}),i.jsx("small",{children:W.detail})]}),W.value===o?i.jsx(Y,{name:"check",size:14}):null]},W.value))}):null]})}function bn({label:n,detail:r,onClick:o}){return i.jsx("button",{type:"button",role:"menuitem",onClick:o,children:i.jsxs("span",{children:[i.jsx("strong",{children:n}),i.jsx("small",{children:r})]})})}function Pg({kind:n,onCancel:r,onConfirm:o}){const[a,d]=m.useState(!1),p=m.useRef(null),f=m.useRef(null);return m.useEffect(()=>{const g=document.querySelector(n==="auto"?'[aria-label="工作模式"]':'[aria-label="会话权限"]');return f.current?.focus(),()=>g?.focus()},[n]),i.jsx("div",{className:"modal-backdrop",onPointerDown:g=>{g.target===g.currentTarget&&r()},children:i.jsxs("section",{ref:p,className:"risk-confirmation",role:"alertdialog","aria-modal":"true","aria-labelledby":"risk-title","aria-describedby":"risk-description",onKeyDown:g=>Tg(g,p.current,r),children:[i.jsx("h2",{id:"risk-title",children:n==="auto"?"启用 AUTO 模式?":"启用会话 ALLOW?"}),i.jsx("p",{id:"risk-description",children:n==="auto"?"Orion 会自主执行多个步骤,但仍受 ToolGateway、沙箱与 Workspace containment 约束。":"策略允许的工具将不再逐次询问;硬拒绝、沙箱和 Workspace 边界仍然生效。"}),i.jsxs("label",{children:[i.jsx("input",{type:"checkbox",checked:a,onChange:g=>d(g.target.checked)}),"我理解这会扩大本会话的默认执行范围"]}),i.jsxs("div",{children:[i.jsx("button",{ref:f,type:"button",className:"secondary-button",onClick:r,children:"取消"}),i.jsx("button",{type:"button",className:"primary-button",disabled:!a,onClick:o,children:"确认启用"})]})]})})}function fc(n){return n?[...n.querySelectorAll('[role="menuitem"], [role="menuitemradio"]')].filter(r=>!r.disabled):[]}function tp(n){fc(n)[0]?.focus()}function Rg(n){const r=fc(n);(r.find(o=>o.getAttribute("aria-checked")==="true")??r[0])?.focus()}function pc(n,r){if(n.key==="Escape"){n.preventDefault(),r();return}if(!["ArrowDown","ArrowUp","Home","End"].includes(n.key))return;n.preventDefault();const o=fc(n.currentTarget);if(o.length===0)return;const a=o.indexOf(document.activeElement),d=n.key==="Home"?0:n.key==="End"?o.length-1:n.key==="ArrowDown"?(Math.max(0,a)+1)%o.length:(a<=0?o.length:a)-1;o[d]?.focus()}function Tg(n,r,o){if(n.key==="Escape"){n.preventDefault(),o();return}if(n.key!=="Tab"||!r)return;const a=[...r.querySelectorAll('button:not(:disabled), input:not(:disabled), textarea:not(:disabled), [tabindex]:not([tabindex="-1"])')];if(a.length===0)return;const d=a[0],p=a.at(-1);n.shiftKey&&document.activeElement===d?(n.preventDefault(),p.focus()):!n.shiftKey&&document.activeElement===p&&(n.preventDefault(),d.focus())}function Jo(n,r,o){m.useEffect(()=>{if(!n)return;const a=p=>{r.current?.contains(p.target)||o()},d=p=>{p.key==="Escape"&&o()};return document.addEventListener("pointerdown",a),document.addEventListener("keydown",d),()=>{document.removeEventListener("pointerdown",a),document.removeEventListener("keydown",d)}},[o,n,r])}function tf(n){return n==="plan"?"PLAN":n==="auto"?"AUTO":"BUILD"}function Og(n){const r=n.composer?.mode??n.mode,o=tf(r.baseMode);return r.pendingBaseMode?`${o} → ${tf(r.pendingBaseMode)}`:o}function Mg(n){const r=n.composer?.permission,o=r?.source==="session"?"Session":"Project",a=`${r?.effective.toUpperCase()??"ASK"} · ${o}`;if((n.composer?.mode.baseMode??n.mode.baseMode)==="auto"&&r?.effective!=="deny")return"AUTO · hard policy";const d=n.composer?.pending.permission;return d?`${a} → ${(d.override??r?.projectDefault??"ask").toUpperCase()} · Session`:a}function _o(n){return n==="auto"?"Effort 自动":`Effort ${n}`}function nf(n){return n.kind==="directory"||n.kind==="symlink"&&n.targetKind==="directory"}function Lg(n){return n.kind==="file"||n.kind==="symlink"&&n.targetKind==="file"}function Ag(n){return n==="file"?"FILE":n==="folder"?"FOLDER":n==="review"?"REVIEW":n==="session"?"SESSION":"SKILL"}function oi(n){return`${n.kind}:${n.id}`}function bt(n){n.catch(()=>{})}function ls(n){return n>=1e3?`${Math.round(n/1e3)}k`:String(n)}const $g=48,Dg=64,zg=new Set(["user","assistant"]);function Wg(n,r={}){const o=Bg(r.maxBuckets),a=[...n].filter(g=>Number.isFinite(g.order)).sort((g,w)=>g.order-w.order);if(a.length===0)return Object.freeze({anchors:Object.freeze([]),buckets:Object.freeze([]),minOrder:0,maxOrder:0});const d=Math.min(a.length,o),p=Math.ceil(a.length/d),f=[];for(let g=0;g<d;g+=1){const w=a.slice(g*p,(g+1)*p);if(w.length===0)break;f.push(Fg(g,w))}return Object.freeze({anchors:Object.freeze(a),buckets:Object.freeze(f),minOrder:f[0]?.startOrder??0,maxOrder:f.at(-1)?.endOrder??0})}function Fg(n,r){const o=[],a=new Set;let d=!1,p=null;for(const f of r)a.has(f.kind)||(a.add(f.kind),o.push(f.kind)),f.priority==="error"&&(d=!0,(!p||f.priority==="error")&&(p=f));if(!p){let f=null;for(const g of r)zg.has(g.kind)&&(f=g);p=f??r[Math.floor((r.length-1)/2)]}return Object.freeze({index:n,startOrder:r[0].order,endOrder:r.at(-1).order,orders:Object.freeze(r.map(f=>f.order)),kinds:Object.freeze(o),hasError:d,jumpOrder:p.order})}function Bg(n){return typeof n!="number"||!Number.isFinite(n)?$g:Math.min(Dg,Math.max(1,Math.round(n)))}function qg(n){switch(n){case"user":return"用户任务";case"assistant":return"Orion 回复";case"tool":return"工具活动";case"edit":return"文件修改";case"subtask":return"子任务";case"research":return"研究";case"system":return"系统/错误"}}function Ug(n,r){const o=n.buckets.findIndex(p=>r>=p.startOrder&&r<=p.endOrder),a=o>=0?n.buckets[o]:void 0,d=a?.kinds.includes("assistant")?"assistant":a?.kinds.includes("user")?"user":a?.kinds[0]??"system";return{bucketIndex:o>=0?o+1:0,bucketCount:n.buckets.length,kindLabel:d?qg(d):"未知"}}function rf(n,r){return r<=0?0:r===1?.5:Math.max(0,Math.min(r-1,n))/(r-1)}function Eo(n,r){const o=n.buckets.findIndex(a=>r>=a.startOrder&&r<=a.endOrder);return o>=0?o:null}function Hg(n){const r=n.kind==="tool"||n.kind==="edit"||n.kind==="subtask"||n.kind==="research"?160:240,o=n.label.length,a=.35+Math.log2(1+o/r)*.55;return Math.max(.15,Math.min(1,a))}const Vg=220,Kg=400;function Gg(n,r={}){const o=typeof r.maxTicks=="number"&&Number.isFinite(r.maxTicks)?Math.max(1,Math.min(Kg,Math.round(r.maxTicks))):Vg,a=[...n].filter(f=>Number.isFinite(f.order)).sort((f,g)=>f.order-g.order);if(a.length===0)return Object.freeze([]);const d=[];if(a.length<=o)for(const f of a)d.push([f]);else{const f=Math.ceil(a.length/o);for(let g=0;g<a.length;g+=f)d.push(a.slice(g,g+f))}const p=d.map((f,g)=>{const w=f.some(_=>_.priority==="error");let E=f.reduce((_,A)=>A.order>_.order?A:_,f[0]),C=-1;for(const _ of f){const A=_.priority==="error"?2:_.priority==="turn"?1:0;A>=C&&(C=A,E=_)}const R=Math.max(.15,Math.min(1,f.reduce((_,A)=>_+Hg(A),0)/f.length+(w?.1:0)));return{index:g,orders:Object.freeze(f.map(_=>_.order)),jumpOrder:E.order,weight:R,hasError:w}});return Object.freeze(p)}function Qg(n){return n>=.72?"history-tick-l":n>=.45?"history-tick-m":"history-tick-s"}function sf(n){const{clientY:r,railTop:o,railHeight:a,tickCount:d}=n;if(!Number.isFinite(a)||a<=0||d<=0)return 0;const p=(r-o)/a;return Math.max(0,Math.min(d-1,Math.round(p*(d-1))))}function Yg(n,r){let o=null;for(const a of n)a.topInViewport<r-1||(!o||a.topInViewport<o.topInViewport)&&(o=a);return o?.order??null}function Xg(n,r){if(n.anchors.length===0)return null;let o=n.anchors[0].order,a=Number.POSITIVE_INFINITY;for(const d of n.anchors){const p=Math.abs(d.order-r);(p<a||p===a&&d.order>o)&&(o=d.order,a=p)}return o}function Jg(n){const{key:r,currentIndex:o,bucketCount:a,model:d}=n;if(a<=0)return null;const p=n.shiftKey?5:1;if(r==="Home")return d.buckets[0]?.jumpOrder??null;if(r==="End")return d.buckets.at(-1)?.jumpOrder??null;let f;if(r==="ArrowUp"||r==="ArrowLeft")f=o-p;else if(r==="ArrowDown"||r==="ArrowRight")f=o+p;else if(r==="PageUp")f=o-5;else if(r==="PageDown")f=o+5;else return null;const g=Math.max(0,Math.min(a-1,f));return d.buckets[g]?.jumpOrder??null}function Zg({model:n,activeOrder:r,span:o,hasEarlierHistory:a,processing:d,reduceMotion:p,onJumpToOrder:f,onJumpToLatest:g}){const w=m.useRef(null),x=m.useRef(null),E=m.useRef(!1),C=m.useRef(null),R=m.useRef(null),[_,A]=m.useState(!1),[L,W]=m.useState(null),ie=m.useMemo(()=>Gg(n.anchors),[n.anchors]),B=ie.length,Se=m.useMemo(()=>{if(r===null||B===0)return 0;const $=Eo(n,r);return $!==null?$+1:0},[r,n,B]),re=m.useMemo(()=>r===null?null:Ug(n,r),[r,n]),ne=o!==null?Eo(n,o.firstOrder)??0:null,b=o!==null?Eo(n,o.lastOrder)??n.buckets.length-1:null,D=m.useMemo(()=>ie.map($=>Eo(n,$.jumpOrder)),[n,ie]),ee=m.useCallback(()=>{C.current!==null&&(window.clearTimeout(C.current),C.current=null),W(null)},[]),X=m.useCallback($=>{const pe=w.current;if(!pe)return;const V=pe.getBoundingClientRect(),z=sf({clientY:$,railTop:V.top,railHeight:V.height,tickCount:B}),te=ie[z];if(!te)return;const q=n.anchors.find(ue=>ue.order===te.jumpOrder);let v=q?.preview;if(q?.kind==="user"){const he=n.anchors.find(we=>we.order>q.order&&we.kind==="assistant")?.preview;he&&(v=v?`${v}
18
18
 
19
19
  ${he}`:he)}const O=rf(z,B)*V.height;W({title:Pn(q?.label??""),preview:v?Pn(v):null,top:Math.max(8,Math.min(V.height-140,O))})},[n,B,ie]),oe=m.useCallback($=>{R.current=$,C.current!==null&&window.clearTimeout(C.current),C.current=window.setTimeout(()=>{C.current=null;const pe=R.current;pe===null||x.current!==null||E.current||X(pe)},120)},[X]);m.useEffect(()=>{const $=()=>{E.current||ee()};return window.addEventListener("scroll",$,!0),()=>window.removeEventListener("scroll",$,!0)},[ee]),m.useEffect(()=>()=>{C.current!==null&&window.clearTimeout(C.current)},[]);const Q=m.useCallback(($,pe)=>{const V=w.current;if(!V)return;const z=V.getBoundingClientRect(),te=sf({clientY:$,railTop:z.top,railHeight:z.height,tickCount:B}),q=ie[te];q&&f(q.jumpOrder,pe)},[f,B,ie]),xe=$=>{$.button!==0||x.current!==null||($.preventDefault(),x.current=$.pointerId,$.currentTarget.setPointerCapture($.pointerId),document.documentElement.dataset.historyScrubbing="1",E.current=!0,A(!0),ee(),Q($.clientY,"auto"))},se=$=>{x.current===$.pointerId&&($.currentTarget.hasPointerCapture($.pointerId)&&$.currentTarget.releasePointerCapture($.pointerId),x.current=null,E.current=!1,delete document.documentElement.dataset.historyScrubbing,A(!1),ee())},Ie=$=>{const pe=Jg({key:$.key,shiftKey:$.shiftKey,currentIndex:Se-1,bucketCount:n.buckets.length,model:n});pe!==null&&($.preventDefault(),f(pe,p?"auto":"smooth"))};return B===0?null:i.jsx("nav",{className:"history-rail","aria-label":"会话历史定位",children:i.jsxs("div",{className:"history-rail-inner",ref:w,children:[i.jsxs("div",{className:"history-slider",role:"slider","aria-label":"已加载会话历史位置","aria-valuemin":0,"aria-valuemax":Math.max(0,n.buckets.length-1),"aria-valuenow":Math.max(0,Se-1),"aria-valuetext":re?`已加载 ${re.bucketIndex}/${re.bucketCount} 个关键节点,当前为${re.kindLabel}${a?";更早历史可在正文顶部加载":""}`:`已加载 ${n.buckets.length} 个关键节点${a?";更早历史可在正文顶部加载":""}`,tabIndex:0,onKeyDown:Ie,onPointerDown:xe,onPointerMove:$=>{if(x.current===$.pointerId){Q($.clientY,"auto");return}oe($.clientY)},onPointerLeave:ee,onPointerUp:se,onPointerCancel:se,onLostPointerCapture:se,onDoubleClick:g,children:[i.jsx("div",{className:"history-ticks","aria-hidden":"true",children:ie.map(($,pe)=>{const V=D[pe],z=V!==null&&ne!==null&&b!==null&&V>=ne&&V<=b;return i.jsx("span",{className:["history-tick",Qg($.weight),z?"is-viewport":"",$.hasError?"is-error":"",_?"is-scrubbing":""].filter(Boolean).join(" "),style:{top:`${rf($.index,B)*100}%`}},$.index)})}),d?i.jsx("span",{className:"history-live-bar","aria-hidden":"true"}):null]}),L?i.jsxs("div",{className:"history-preview-card",style:{top:L.top},"aria-hidden":"true",children:[i.jsx("strong",{children:L.title}),L.preview?i.jsx("p",{children:L.preview}):null]}):null]})})}const ev=10;function tv(n){const{viewportRef:r,model:o,activeSessionId:a,onUserNavigate:d}=n,p=m.useRef(new Map),f=m.useRef(null),g=m.useRef([]),w=m.useRef(null),[x,E]=m.useState(null),[C,R]=m.useState(null),_=m.useRef(d);_.current=d;const A=m.useRef(a),L=m.useRef(o);L.current=o;const W=()=>{if(w.current=null,g.current.length===0)return;const ne=g.current;if(g.current=[],ne.length===0)return;const D=r.current?.getBoundingClientRect().top??0,ee=Yg(ne,D);let X=Number.POSITIVE_INFINITY,oe=Number.NEGATIVE_INFINITY;for(const Q of ne)Q.topInViewport>=D-1&&(Q.order<X&&(X=Q.order),Q.order>oe&&(oe=Q.order));E(Q=>Q===ee?Q:ee),R(Q=>{if(!Number.isFinite(X)||!Number.isFinite(oe))return Q;const xe={firstOrder:X,lastOrder:oe};return Q?.firstOrder===xe.firstOrder&&Q?.lastOrder===xe.lastOrder?Q:xe})},ie=()=>{w.current===null&&(w.current=requestAnimationFrame(W))},B=()=>{f.current&&(f.current.disconnect(),f.current=null),w.current!==null&&(cancelAnimationFrame(w.current),w.current=null),g.current=[],p.current.clear(),E(null),R(null)};m.useEffect(()=>{if(A.current===a&&f.current)return;A.current=a,B();const ne=r.current;if(!ne||!o.anchors.length||typeof IntersectionObserver>"u")return;const b=new IntersectionObserver(D=>{const X=r.current?.getBoundingClientRect().top??0;for(const oe of D){const Q=Number(oe.target.dataset.order);Number.isFinite(Q)&&oe.isIntersecting&&g.current.push({order:Q,topInViewport:oe.boundingClientRect.top-X})}ie()},{root:ne,threshold:[0,.2,.6]});return f.current=b,p.current.clear(),ne.querySelectorAll("li[data-order]").forEach(D=>{const ee=Number(D.dataset.order);Number.isFinite(ee)&&(p.current.set(ee,D),b.observe(D))}),()=>B()},[r,a,o.anchors.length,o.anchors[o.anchors.length-1]?.order]);const Se=m.useCallback((ne,b)=>{if(b){if(p.current.get(ne)===b)return;p.current.set(ne,b),f.current?.observe(b);return}const D=p.current.get(ne);D&&(f.current?.unobserve(D),p.current.delete(ne))},[]);return{activeOrder:x,span:C,registerItem:Se,scrollToOrder:(ne,b="smooth")=>{const D=r.current,ee=Xg(L.current,ne),X=ee!==null?p.current.get(ee):void 0;if(!D||!X){if(!D||L.current.anchors.length===0)return;const Q=(ne-L.current.minOrder)/(L.current.maxOrder-L.current.minOrder||1);D.scrollTo({top:Math.max(0,Math.min(1,Q))*(D.scrollHeight-D.clientHeight),behavior:b}),_.current?.();return}const oe=X.getBoundingClientRect().top-D.getBoundingClientRect().top+D.scrollTop-ev;D.scrollTo({top:Math.max(0,oe),behavior:b}),_.current?.()}}}const Va=40;function Cr(n){if(n.length===0)return 0;let r=1;for(let o=0;o<n.length;o+=1)n.charCodeAt(o)===10&&(r+=1);return r}function nv(n){return!!n&&typeof n=="object"&&!Array.isArray(n)}function rv(n){if(n==null)return null;const r=n.trim();if(r.length===0)return{format:"plain",displayText:n,isEnvelope:!1,lineCount:0,isLong:!1};let o;try{o=JSON.parse(r)}catch{return{format:"plain",displayText:n,isEnvelope:!1,lineCount:Cr(n),isLong:Cr(n)>Va}}if(nv(o)&&typeof o.output=="string"){const a=o.output;return{format:"envelope",displayText:a,isEnvelope:!0,lineCount:Cr(a),isLong:Cr(a)>Va}}try{const a=JSON.stringify(o,null,2);return{format:"json",displayText:a,isEnvelope:!1,lineCount:Cr(a),isLong:Cr(a)>Va}}catch{return{format:"plain",displayText:n,isEnvelope:!1,lineCount:Cr(n),isLong:!1}}}function np({text:n,defaultOpen:r=!1,note:o=null}){const a=rv(n),d=r||!a?.isLong,[p,f]=m.useState(d),[g,w]=m.useState(!1),x=m.useRef(null);if(m.useEffect(()=>()=>{x.current!==null&&window.clearTimeout(x.current)},[]),a===null)return null;const E=Pn(a.displayText),C=async()=>{try{await navigator.clipboard.writeText(a.displayText),w(!0),x.current!==null&&window.clearTimeout(x.current),x.current=window.setTimeout(()=>w(!1),1400)}catch{}},R=i.jsx("pre",{className:"tool-output-text",tabIndex:0,children:E});if(!a.isLong||r)return i.jsxs("div",{className:"tool-output-preview tool-output-preview-open",children:[R,o?i.jsx("p",{className:"truncation-note",children:o}):null]});const _=`${a.lineCount} 行 · ${a.format==="envelope"?"已解包":"文本"}`;return i.jsx("div",{className:"tool-output-preview",children:i.jsxs("details",{className:"tool-output-fold",open:p,onToggle:A=>f(A.target.open),children:[i.jsxs("summary",{children:[i.jsxs("span",{children:[_,a.isEnvelope?" · 输出已安全还原换行":""]}),i.jsx("button",{type:"button",className:"text-button",onClick:A=>{A.preventDefault(),C()},children:g?"已复制":"复制原始响应"})]}),R,o?i.jsx("p",{className:"truncation-note",children:o}):null]})})}const of=320,sv=300;function iv({state:n,actions:r,onRevealSettings:o,onCreateSession:a,composerInsertion:d}){const p=Qo(n),f=m.useMemo(()=>ov(n),[n.edits,n.research,n.subtasks,n.tools,n.transcript]),[g,w]=m.useState(of),x=f.slice(-g),E=m.useRef(null),C=m.useRef(null),R=m.useRef(!0),_=m.useRef(null),[A,L]=m.useState(!0),[W,ie]=m.useState(!1),B=m.useMemo(()=>x.map(lv).filter(X=>X!==null),[x]),Se=m.useMemo(()=>Wg(B),[B]),re=tv({viewportRef:E,model:Se,activeSessionId:n.activeSessionId,onUserNavigate:()=>{R.current=!1,L(!1)}});m.useEffect(()=>{const X=window.matchMedia("(prefers-reduced-motion: reduce)");ie(X.matches);const oe=Q=>ie(Q.matches);return X.addEventListener("change",oe),()=>X.removeEventListener("change",oe)},[]),m.useEffect(()=>{w(of),R.current=!0,L(!0)},[n.activeSessionId]),m.useLayoutEffect(()=>{const X=E.current;if(X){if(_.current){const oe=_.current;X.scrollTop=oe.top+(X.scrollHeight-oe.height),_.current=null;return}R.current&&(X.scrollTop=X.scrollHeight)}},[x.length,n.processing]),m.useLayoutEffect(()=>{const X=E.current,oe=C.current;if(!X||!oe||typeof ResizeObserver>"u")return;const Q=new ResizeObserver(()=>{R.current&&(X.scrollTop=X.scrollHeight)});return Q.observe(oe),()=>Q.disconnect()},[n.activeSessionId]);const ne=()=>{const X=E.current;if(!X)return;const oe=X.scrollHeight-X.scrollTop-X.clientHeight<72;R.current=oe,L(oe)},b=!!n.sessionSnapshot?.transcript.nextCursor,D=async()=>{const X=E.current;if(X&&(_.current={height:X.scrollHeight,top:X.scrollTop}),f.length>x.length){w(oe=>oe+sv);return}if(b)try{await r.loadOlderTranscript(),w(oe=>oe+100)}catch{_.current=null}},ee=()=>{const X=E.current;X&&(R.current=!0,L(!0),X.scrollTo({top:X.scrollHeight,behavior:"smooth"}))};return i.jsxs("main",{className:"conversation-column",id:"main-content",children:[n.bootstrap?.configured?null:i.jsxs("div",{className:"configuration-banner",role:"status",children:[i.jsx(Y,{name:"warning"}),i.jsxs("div",{children:[i.jsx("strong",{children:"模型尚未配置"}),i.jsx("span",{children:"请在 Orion 配置文件或环境变量中设置凭证。API Key 不会进入浏览器。"})]}),i.jsx("button",{type:"button",className:"secondary-button",onClick:o,children:"转到设置"})]}),i.jsxs("div",{className:"transcript-stage",children:[i.jsx("div",{className:"transcript-viewport",ref:E,role:"region","aria-label":"会话记录",tabIndex:0,onScroll:ne,"aria-busy":n.processing,children:i.jsxs("div",{className:"transcript-content",ref:C,children:[f.length>x.length||b?i.jsx("button",{type:"button",className:"load-history",onClick:()=>{D()},disabled:!!n.pendingAction,children:f.length>x.length?`加载更早内容 · 还剩 ${f.length-x.length} 项`:"从持久记录加载更早内容"}):null,n.activeSessionId?p.status==="failed"&&x.length===0?i.jsx(Po,{icon:"warning",title:"会话快照加载失败",detail:p.error??"请重试当前会话快照。"}):(p.status==="loading"||p.status==="refreshing")&&x.length===0?i.jsx(Po,{icon:"refresh",title:"正在同步会话",detail:"本地 Web Host 正在读取最近的会话快照。"}):x.length===0?i.jsx(Po,{icon:"spark",title:"准备好开始了",detail:"描述要构建、修复或调查的任务。Orion 会实时展示工具、文件变化与验证结果。"}):i.jsx("ol",{className:"timeline","aria-label":"会话记录",children:x.map(X=>i.jsx("li",{id:`conversation-item-${n.activeSessionId??"none"}-${rc(X)}`,"data-event-id":X.order,"data-order":X.order,ref:oe=>re.registerItem(X.order,oe),children:cv(X,n)},rc(X)))}):i.jsx(Po,{icon:"workspace",title:"选择或创建一个会话",detail:"Orion 会在当前工作区运行,并沿用 CLI/TUI 的权限与持久化状态。",action:"创建会话",onAction:a}),n.processing?i.jsxs("div",{className:"thinking-indicator",role:"status",children:[i.jsx("span",{}),i.jsx("span",{}),i.jsx("span",{}),i.jsx("span",{children:n.statusMessage||"Orion 正在处理…"})]}):null]})}),i.jsx(Zg,{model:Se,activeOrder:re.activeOrder,span:re.span,hasEarlierHistory:f.length>x.length||b,processing:n.processing,reduceMotion:W,onJumpToOrder:(X,oe)=>re.scrollToOrder(X,oe),onJumpToLatest:ee})]}),!A&&x.length>0?i.jsxs("button",{type:"button",className:"jump-latest",onClick:ee,children:[i.jsx(Y,{name:"arrow-up",size:15}),"回到最新"]}):null,i.jsxs("div",{className:"input-dock",children:[n.permission||n.queue.items.length>0?i.jsxs("div",{className:"input-transients",children:[n.permission?i.jsx(gv,{state:n,actions:r}):null,n.queue.items.length>0?i.jsx(vv,{state:n,actions:r}):null]}):null,i.jsx(Sg,{state:n,actions:r,insertion:d})]})]})}function ov(n){const r=new Set(n.tools.map(a=>a.callId));return[...n.transcript.filter(a=>!a.toolActivity?.callId||!r.has(a.toolActivity.callId)).map(a=>({kind:"transcript",order:a.order,value:a})),...n.tools.map(a=>({kind:"tool",order:a.order,value:a})),...n.edits.map(a=>({kind:"edit",order:a.order,value:a})),...n.subtasks.map(a=>({kind:"subtask",order:a.order,value:a})),...n.research.map(a=>({kind:"research",order:a.order,value:a}))].sort((a,d)=>a.order-d.order)}function rc(n){return n.kind==="transcript"?`entry-${n.value.id}`:n.kind==="tool"?`tool-${n.value.callId}`:n.kind==="edit"?`edit-${n.order}`:n.kind==="subtask"?`subtask-${n.value.taskId}`:`research-${n.value.packetId}`}function lv(n){const r=n.order,o=rc(n);if(n.kind==="tool")return{order:r,key:o,kind:"tool",label:ti(n.value.summary)||n.value.name,preview:is(n.value.summary),priority:n.value.state==="error"?"error":"activity"};if(n.kind==="edit")return{order:r,key:o,kind:"edit",label:n.value.request.path,preview:is(`${n.value.request.path}
20
- ${n.value.request.newString??""}`),priority:"activity"};if(n.kind==="subtask")return{order:r,key:o,kind:"subtask",label:ti(n.value.objective)||n.value.role,preview:is(n.value.summary||n.value.objective),priority:av.has(n.value.state)?"error":"activity"};if(n.kind==="research")return{order:r,key:o,kind:"research",label:ti(n.value.objective)||"Research",preview:is(n.value.conclusion||n.value.objective),priority:n.value.stage==="failed"?"error":"activity"};const a=n.value;if(a.toolActivity){const g=a.toolActivity;return{order:r,key:o,kind:"tool",label:ti(g.summary)||g.name||g.detail||"工具活动",preview:is(g.summary||g.body),priority:g.state==="error"?"error":"activity"}}const d=a.role;let p;return d==="user"||d==="assistant"?p="turn":p=d==="error"||d==="command"&&a.command?.success===!1?"error":"activity",(a.errorLayer||a.budgetStop)&&(p="error"),{order:r,key:o,kind:d==="user"?"user":d==="assistant"?"assistant":"system",priority:p,label:ti(a.content)||a.title||(d==="user"?"用户任务":d==="assistant"?"Orion 回复":sc(d)),preview:is(a.content)}}const av=new Set(["failed","timed_out","rejected","cancelled"]);function ti(n){if(!n)return null;const r=n.replace(/\s+/gu," ").trim();return r.length>80?`${r.slice(0,80)}…`:r}function is(n){if(!n)return;const r=n.trim();if(r)return r.length<=280?r:`${r.slice(0,280)}…`}function cv(n,r){if(n.kind==="transcript")return i.jsx(uv,{entry:n.value});if(n.kind==="tool"){const o=r.transcript.find(a=>a.toolActivity?.callId===n.value.callId)?.toolActivity;return i.jsx(dv,{tool:n.value,activity:o})}return n.kind==="edit"?i.jsx(pv,{edit:n.value}):n.kind==="subtask"?i.jsx(hv,{subtask:n.value}):i.jsx(mv,{research:n.value})}function uv({entry:n}){if(n.toolActivity)return i.jsx(fv,{entry:n});if(xv(n))return i.jsxs("details",{className:"reasoning-card",children:[i.jsxs("summary",{children:[i.jsx(dc,{state:n.live?"running":"ready",describe:!1}),i.jsx("span",{children:n.live?"正在分析":n.title||"推理摘要"}),i.jsx("span",{className:"reasoning-hint",children:"展开查看 Runtime 提供的摘要"})]}),i.jsx(li,{children:n.content})]});const r=n.role;return i.jsxs("article",{className:`message-card role-${r}`,"aria-label":sc(r),children:[i.jsxs("header",{children:[i.jsx("span",{className:"message-avatar","aria-hidden":"true",children:wv(r)}),i.jsx("span",{children:n.title||sc(r)}),n.live?i.jsx("span",{className:"streaming-label",children:"生成中"}):null,n.command?i.jsx("span",{className:`command-state ${n.command.success?"success":"error"}`,children:n.command.success?"成功":"失败"}):null]}),i.jsx("div",{className:"message-body",children:r==="user"?i.jsx("p",{className:"literal-message",children:n.content}):i.jsx(li,{children:n.content})}),n.budgetStop?i.jsxs("div",{className:"budget-stop",role:"status",children:[i.jsx(Y,{name:"pause",size:15}),i.jsxs("span",{children:[n.budgetStop.reason," · 状态已保留"]})]}):null]})}function dv({tool:n,activity:r}){const o=n.workspaceMutation?.phase==="queued"?`等待工作树写入${n.workspaceMutation.queuePosition?`(第 ${n.workspaceMutation.queuePosition} 位)`:""}`:n.workspaceMutation?.phase==="running"?"正在写入工作树":n.state==="running"?"运行中":n.state==="success"?"完成":n.state==="skipped"?"跳过":"失败",a=r?.outputView?.preview||r?.body||n.error||n.summary;return i.jsxs("article",{className:`tool-card tool-${n.state}`,"aria-label":`工具 ${n.name}:${o}`,children:[i.jsxs("div",{className:"tool-card-header",children:[i.jsx("span",{className:`tool-state-icon ${n.state}`,"aria-hidden":"true",children:n.state==="running"?i.jsx("span",{className:"spinner"}):i.jsx(Y,{name:n.state==="success"?"check":n.state==="skipped"?"pause":"warning",size:15})}),i.jsxs("div",{className:"tool-title",children:[i.jsx("strong",{children:n.name}),i.jsxs("span",{children:["#",n.sequence," · ",o,n.duration!==void 0?` · ${rp(n.duration)}`:""]})]}),n.outputBytes!==void 0?i.jsx("span",{className:"byte-pill",children:ic(n.outputBytes)}):null]}),n.summary||n.error?i.jsx("p",{className:n.error?"tool-error-copy":"tool-summary",children:Pn(n.error||n.summary||"")}):null,i.jsxs("details",{className:"tool-details",open:n.state==="error",children:[i.jsx("summary",{children:"输入与详情"}),i.jsxs("dl",{className:"tool-meta-grid",children:[i.jsxs("div",{children:[i.jsx("dt",{children:"授权"}),i.jsx("dd",{children:n.authorization?`${n.authorization.approved?"允许":"拒绝"} · ${n.authorization.source}`:"等待 Runtime 记录"})]}),n.artifactId?i.jsxs("div",{children:[i.jsx("dt",{children:"产物"}),i.jsx("dd",{children:i.jsx("code",{children:n.artifactId})})]}):null]}),i.jsxs("div",{className:"tool-detail-section",children:[i.jsx("span",{className:"micro-label",children:"参数(已脱敏)"}),i.jsx("pre",{tabIndex:0,children:uc(n.args)})]}),a?i.jsxs("div",{className:"tool-detail-section",children:[i.jsx("span",{className:"micro-label",children:"输出预览"}),i.jsx(np,{text:a,defaultOpen:n.state==="error",note:r?.outputView?.omittedBytes?`另有 ${ic(r.outputView.omittedBytes)} 已折叠,可在 Inspector 中查看产物。`:null})]}):null]})]})}function fv({entry:n}){const r=n.toolActivity;return i.jsxs("article",{className:`tool-card tool-${r.state}`,children:[i.jsxs("div",{className:"tool-card-header",children:[i.jsx("span",{className:`tool-state-icon ${r.state}`,"aria-hidden":"true",children:i.jsx(Y,{name:"terminal",size:15})}),i.jsxs("div",{className:"tool-title",children:[i.jsx("strong",{children:r.name}),i.jsx("span",{children:r.detail})]})]}),r.summary?i.jsx("p",{className:"tool-summary",children:r.summary}):null,r.outputView?.preview||r.body?i.jsxs("div",{className:"tool-detail-section tool-output-section",children:[i.jsx("span",{className:"micro-label",children:"输出"}),i.jsx(np,{text:r.outputView?.preview||r.body,defaultOpen:r.state==="error",note:r.outputView?.omittedBytes?`另有 ${ic(r.outputView.omittedBytes)} 已折叠,可在 Inspector 中查看产物。`:null})]}):null]})}function pv({edit:n}){const r=n.request;return i.jsxs("article",{className:"edit-card",children:[i.jsxs("header",{children:[i.jsx("span",{className:"edit-icon",children:i.jsx(Y,{name:"edit",size:15})}),i.jsxs("div",{children:[i.jsx("strong",{children:"文件修改预览"}),i.jsxs("span",{children:[r.kind," · ",r.candidates.length," 个候选"]})]})]}),i.jsx("code",{className:"path-chip",title:r.path,children:r.path}),i.jsxs("details",{children:[i.jsx("summary",{children:"查看替换内容"}),i.jsx("pre",{tabIndex:0,children:Pn(r.newString)})]})]})}function hv({subtask:n}){return i.jsxs("details",{className:`activity-card subtask-card state-${n.state}`,children:[i.jsxs("summary",{children:[i.jsx(Y,{name:"branch",size:16}),i.jsxs("span",{children:[i.jsx("strong",{children:n.role}),i.jsx("small",{children:n.state})]}),n.durationMs!==void 0?i.jsx("time",{children:rp(n.durationMs)}):null]}),i.jsx("p",{children:n.objective}),n.summary?i.jsx(li,{children:n.summary}):null]})}function mv({research:n}){return i.jsxs("details",{className:`activity-card research-card state-${n.stage}`,children:[i.jsxs("summary",{children:[i.jsx(Y,{name:"search",size:16}),i.jsxs("span",{children:[i.jsx("strong",{children:"Research"}),i.jsxs("small",{children:[n.stage," · ",n.sources.length," sources"]})]})]}),n.objective?i.jsx("p",{children:n.objective}):null,n.conclusion?i.jsx(li,{children:n.conclusion}):null,n.sources.length>0?i.jsx("ul",{className:"source-list",children:n.sources.map(r=>i.jsxs("li",{children:[i.jsx(dc,{state:r.status}),i.jsx("span",{children:r.title||r.location||r.id}),i.jsxs("small",{children:[r.provider," · ",r.status]})]},r.id))}):null]})}function gv({state:n,actions:r}){const o=n.permission,a=m.useRef(null),d=m.useRef("");m.useEffect(()=>{d.current!==o.id&&(d.current=o.id,a.current?.focus())},[o.id]);const p=!!n.pendingAction||n.connection!=="live"||!Pr(n);return i.jsxs("section",{ref:a,className:"approval-card",role:"region","aria-live":"assertive","aria-labelledby":"approval-title","aria-describedby":"approval-reason",tabIndex:-1,children:[i.jsxs("div",{className:"approval-heading",children:[i.jsx("span",{className:"approval-icon",children:i.jsx(Y,{name:"warning",size:17})}),i.jsxs("div",{children:[i.jsx("span",{className:"eyebrow",children:"需要你的确认"}),i.jsxs("h2",{id:"approval-title",children:["允许 ",o.name,"?"]})]})]}),i.jsx("p",{id:"approval-reason",children:o.reason||"该工具需要在当前权限策略下获得明确授权。"}),i.jsxs("details",{className:"approval-args",children:[i.jsx("summary",{children:"查看脱敏参数"}),i.jsx("pre",{tabIndex:0,children:uc(o.args,6e3)})]}),i.jsxs("div",{className:"approval-actions",children:[i.jsx("button",{type:"button",className:"danger-ghost-button",onClick:()=>En(r.answerPermission(!1)),disabled:p,children:"拒绝"}),i.jsx("button",{type:"button",className:"secondary-button",onClick:()=>En(r.answerPermission(!0,"once")),disabled:p,children:"仅本次"}),i.jsx("button",{type:"button",className:"secondary-button",onClick:()=>En(r.answerPermission(!0,"project")),disabled:p,children:"允许此项目"}),i.jsx("button",{type:"button",className:"primary-button",onClick:()=>En(r.answerPermission(!0,"global")),disabled:p,children:"始终允许"})]}),i.jsx("p",{className:"approval-footnote",children:"项目与全局授权会写入 Orion 配置;拒绝不会丢失当前会话。"})]})}function vv({state:n,actions:r}){const o=!!n.pendingAction||n.connection!=="live"||!Pr(n);return i.jsxs("details",{className:"queue-dock",children:[i.jsxs("summary",{children:[i.jsxs("span",{children:[n.queue.items.length," 条排队消息"]}),i.jsx("span",{children:"执行时采用最新 Composer 控制"})]}),i.jsxs("div",{className:"queue-list",children:[n.queue.items.map((a,d)=>i.jsx(yv,{item:a,index:d,count:n.queue.items.length,disabled:o,actions:r},a.id)),i.jsx("button",{type:"button",className:"text-button queue-clear",onClick:()=>En(r.clearQueue()),disabled:o,children:"清空队列"})]})]})}function yv({item:n,index:r,count:o,disabled:a,actions:d}){const[p,f]=m.useState(!1),[g,w]=m.useState(n.text);m.useEffect(()=>w(n.text),[n.text]);const x=async()=>{const E=g.trim();E&&(await d.editQueued(n.id,n.revision,E),f(!1))};return i.jsxs("div",{className:"queue-row",children:[i.jsx("span",{className:"queue-index",children:r+1}),p?i.jsx("textarea",{rows:2,value:g,"aria-label":`编辑排队消息 ${r+1}`,onChange:E=>w(E.target.value)}):i.jsx("p",{children:n.text}),i.jsxs("div",{className:"queue-row-actions",children:[i.jsx("button",{type:"button",className:"icon-button","aria-label":`上移排队消息 ${r+1}`,onClick:()=>En(d.moveQueued(n.id,n.revision,r-1)),disabled:a||r===0,children:i.jsx(Y,{name:"arrow-up",size:13})}),i.jsx("button",{type:"button",className:"icon-button queue-move-down","aria-label":`下移排队消息 ${r+1}`,onClick:()=>En(d.moveQueued(n.id,n.revision,r+1)),disabled:a||r===o-1,children:i.jsx(Y,{name:"arrow-up",size:13})}),p?i.jsx("button",{type:"button",className:"text-button",onClick:()=>En(x()),disabled:a||!g.trim(),children:"保存"}):i.jsx("button",{type:"button",className:"text-button",onClick:()=>f(!0),disabled:a,children:"编辑"}),i.jsx("button",{type:"button",className:"icon-button","aria-label":`移除排队消息 ${r+1}`,onClick:()=>En(d.removeQueued(n.id,n.revision)),disabled:a,children:i.jsx(Y,{name:"trash",size:14})})]})]})}function Po({icon:n,title:r,detail:o,action:a,onAction:d}){return i.jsxs("section",{className:"empty-conversation",children:[i.jsx("div",{className:"empty-orbit",children:i.jsx(Y,{name:n,size:26})}),i.jsx("h2",{children:r}),i.jsx("p",{children:o}),a&&d?i.jsx("button",{type:"button",className:"primary-button",onClick:d,children:a}):null]})}function xv(n){const r=`${n.title??""}`.toLocaleLowerCase();return r.includes("reason")||r.includes("think")||r.includes("analysis")||r.includes("推理")||r.includes("思考")}function sc(n){return n==="user"?"你":n==="assistant"?"Orion":n==="command"?"命令":n==="error"?"错误":n==="system"?"系统":n==="status"?"状态":"工具"}function wv(n){return n==="user"?"Y":n==="assistant"?"O":n==="error"?"!":n==="command"?"›":"·"}function En(n){n.catch(()=>{})}function rp(n){return n<1e3?`${Math.round(n)}ms`:n<6e4?`${(n/1e3).toFixed(n<1e4?1:0)}s`:`${Math.floor(n/6e4)}m ${Math.round(n%6e4/1e3)}s`}function ic(n){return n<1024?`${n} B`:n<1048576?`${(n/1024).toFixed(1)} KB`:`${(n/1048576).toFixed(1)} MB`}const kv=.02,jv=.1;function us(n,r,o){const a=Number.isFinite(n)?Math.round(n):r;return Math.min(o,Math.max(r,a))}function Sv({side:n,clientX:r,bounds:o,minWidth:a,maxWidth:d}){const p=n==="left"?r-o.left:o.right-r;return us(p,a,d)}function Cv(n,r,o){const a=o-r;if(a<=0)return 0;const d=(us(n,r,o)-r)/a;return Math.round(d*100)}function bv(n){const{key:r,minWidth:o,maxWidth:a,defaultWidth:d,currentWidth:p,side:f}=n,g=C=>us(C,o,a);if(r==="Home")return g(o);if(r==="End")return g(a);if(r==="Enter"||r===" ")return g(d);if(r!=="ArrowLeft"&&r!=="ArrowRight")return null;const w=n.shiftKey?jv:kv,x=Math.max(1,Math.round((a-o)*w)),E=(r==="ArrowRight"?1:-1)*(f==="left"?1:-1);return g(p+E*x)}function sp({side:n,className:r,minWidth:o,maxWidth:a,defaultWidth:d,label:p,width:f,controls:g,boundsRef:w,resizingScope:x="workbench",onPreview:E,onCommit:C}){const R=m.useRef(us(f??d,o,a)),_=m.useRef(null),A=m.useRef(null),L=m.useRef(null),W=()=>{L.current!==null&&cancelAnimationFrame(L.current),L.current=null},ie=()=>{_.current=null,A.current=null,W(),delete document.documentElement.dataset.panelResizing};m.useEffect(()=>ie,[]),m.useEffect(()=>{f===void 0||_.current!==null||(R.current=us(f,o,a))},[f,o,a]);const B=Q=>{R.current=Q,A.current=Q,L.current===null&&(L.current=requestAnimationFrame(()=>{L.current=null;const xe=A.current;A.current=null,xe!==null&&E(xe)}))},Se=Q=>{let xe;if(w?.current){const se=w.current.getBoundingClientRect();xe={left:se.left,right:se.right}}else xe=Q.currentTarget.closest(".workbench-shell")?.getBoundingClientRect()??{left:0,right:window.innerWidth};return Sv({side:n,clientX:Q.clientX,bounds:xe,minWidth:o,maxWidth:a})},re=Q=>{if(Q.button!==0||_.current!==null)return;Q.preventDefault(),_.current=Q.pointerId,Q.currentTarget.setPointerCapture(Q.pointerId);const xe=x==="resource-split"?"resource-split":n;document.documentElement.dataset.panelResizing=xe,B(Se(Q))},ne=Q=>{_.current===Q.pointerId&&B(Se(Q))},b=Q=>{if(_.current!==Q.pointerId)return;Q.currentTarget.hasPointerCapture(Q.pointerId)&&Q.currentTarget.releasePointerCapture(Q.pointerId);const xe=A.current??R.current;ie(),E(xe),C(xe)},D=Q=>{if(_.current!==Q.pointerId)return;const xe=A.current??R.current;ie(),E(xe),C(xe)},ee=Q=>{R.current=Q,E(Q),C(Q)},X=Q=>{const xe=bv({key:Q.key,shiftKey:Q.shiftKey,minWidth:o,maxWidth:a,defaultWidth:d,currentWidth:R.current,side:n});xe!==null&&(Q.preventDefault(),ee(xe))},oe=Cv(R.current,o,a);return i.jsx("div",{className:`panel-resize-handle panel-resize-handle-${n}${r?` ${r}`:""}`,role:"separator","aria-orientation":"vertical","aria-label":p,"aria-valuemin":0,"aria-valuemax":100,"aria-valuenow":oe,"aria-valuetext":`${R.current} 像素`,"aria-controls":g,tabIndex:0,title:`${p};方向键调整,Shift 加速,Enter 恢复默认,双击亦可恢复`,onPointerDown:re,onPointerMove:ne,onPointerUp:b,onPointerCancel:b,onLostPointerCapture:D,onKeyDown:X,onDoubleClick:()=>ee(us(d,o,a)),children:i.jsx("span",{})})}const Nv=["ArrowDown","ArrowUp","Home","End","Escape"];function Iv({label:n,items:r,disabled:o=!1}){const[a,d]=m.useState(!1),p=m.useRef(null),f=m.useRef(null),g=m.useRef([]),w=m.useId(),x=()=>{d(!1),f.current?.focus()};m.useEffect(()=>{if(!a)return;const C=R=>{p.current?.contains(R.target)||d(!1)};return document.addEventListener("pointerdown",C),()=>document.removeEventListener("pointerdown",C)},[a]),m.useEffect(()=>{if(!a)return;const C=r.findIndex(R=>!R.disabled);g.current[C>=0?C:0]?.focus()},[a]);const E=C=>{if(!Nv.includes(C.key))return;if(C.preventDefault(),C.key==="Escape"){x();return}const R=r.map((L,W)=>({item:L,index:W})).filter(L=>!L.item.disabled);if(!R.length)return;const _=R.findIndex(L=>g.current[L.index]===document.activeElement);let A=0;if(C.key==="Home")A=0;else if(C.key==="End")A=R.length-1;else{const L=C.key==="ArrowDown"?1:-1;A=_<0?0:(_+L+R.length)%R.length}g.current[R[A].index]?.focus()};return i.jsxs("div",{className:"session-row-menu",ref:p,children:[i.jsx("button",{ref:f,type:"button",className:"icon-button session-row-menu-trigger","aria-label":n,"aria-haspopup":"menu","aria-expanded":a,disabled:o,onClick:()=>d(C=>!C),onKeyDown:C=>{if(C.key==="ArrowDown"||C.key==="Enter"||C.key===" "){if(a)return;C.preventDefault(),d(!0)}},children:i.jsx(Y,{name:"more",size:15})}),a?i.jsx("div",{className:"session-menu",role:"menu","aria-label":n,onKeyDown:E,children:r.map((C,R)=>i.jsxs("button",{ref:_=>{g.current[R]=_},type:"button",role:"menuitem",className:`session-menu-item${C.danger?" danger":""}`,tabIndex:-1,disabled:C.disabled,"aria-describedby":C.hint?`${w}-${C.id}`:void 0,onClick:()=>{d(!1),C.onSelect()},children:[C.label,C.hint?i.jsx("span",{id:`${w}-${C.id}`,className:"session-menu-hint",children:C.hint}):null]},C.id))}):null]})}const hc=240,Zo=280,ip=480,lf=48,mc=320,gc=420,op=3200,Ge=48,af=560,lp="orion.web.workbench-layout.v2",_v="orion.web.work-panel.v1",oc=["agent","review","terminal","files","git"],Er=Object.freeze({schemaVersion:2,projectNavigation:Object.freeze({expanded:!0,widthPx:Zo}),workPanel:Object.freeze({expanded:!0,widthPx:gc,activePanel:"agent",agentPanel:"goal"})});function Ro(n,r){const o=Ov(n),a=ap(r.projectNavigation.widthPx),d=ci(r.workPanel.widthPx);if(o<=760)return Object.freeze({projectNavigation:Object.freeze({mode:"drawer",widthPx:0}),conversationWidthPx:o,workPanel:Object.freeze({mode:"drawer",widthPx:0})});if(o<=1180){const x=o-af,C=r.projectNavigation.expanded&&x>=hc?"dock":r.projectNavigation.expanded?"drawer":"rail",R=C==="dock"?Math.min(a,x):C==="rail"?lf:0;return Object.freeze({projectNavigation:Object.freeze({mode:C,widthPx:R}),conversationWidthPx:Math.max(0,o-R),workPanel:Object.freeze({mode:"drawer",widthPx:0})})}const p=r.projectNavigation.expanded?a:lf,f=o-p-af,g=r.workPanel.expanded&&f>=mc,w=g?Math.min(d,f):Ge;return Object.freeze({projectNavigation:Object.freeze({mode:r.projectNavigation.expanded?"dock":"rail",widthPx:p}),conversationWidthPx:Math.max(0,o-p-w),workPanel:Object.freeze({mode:g?"dock":"rail",widthPx:w})})}function ap(n){const r=Number.isFinite(n)?Math.round(n):Zo;return Math.min(ip,Math.max(hc,r))}function ci(n){const r=Number.isFinite(n)?Math.round(n):gc;return Math.min(op,Math.max(mc,r))}function Ev(n,r=null){if(!n)return Tv(r);try{const o=JSON.parse(n);if(!Ao(o)||o.schemaVersion!==2)return Er;const a=Ao(o.projectNavigation)?o.projectNavigation:{},d=Ao(o.workPanel)?o.workPanel:{};return cp({schemaVersion:2,projectNavigation:{expanded:typeof a.expanded=="boolean"?a.expanded:!0,widthPx:ap(Number(a.widthPx))},workPanel:{expanded:typeof d.expanded=="boolean"?d.expanded:!0,widthPx:ci(Number(d.widthPx)),activePanel:ui(d.activePanel)?d.activePanel:"agent",agentPanel:dp(d.agentPanel)?d.agentPanel:"goal",order:Mv(d.order)}})}catch{return Er}}function Pv(){const n=up();if(!n)return Er;try{return Ev(n.localStorage.getItem(lp),n.localStorage.getItem(_v))}catch{return Er}}function Rv(n){const r=up();if(r)try{r.localStorage.setItem(lp,JSON.stringify(n))}catch{}}function Tv(n){if(!n)return Er;try{const r=JSON.parse(n);return!Ao(r)||r.schemaVersion!==1?Er:cp({schemaVersion:2,projectNavigation:{expanded:!0,widthPx:Zo},workPanel:{expanded:typeof r.expanded=="boolean"?r.expanded:!0,widthPx:ci(Number(r.widthPx)),activePanel:ui(r.activePanel)?r.activePanel:"agent",agentPanel:dp(r.agentPanel)?r.agentPanel:"goal"}})}catch{return Er}}function cp(n){return Object.freeze({schemaVersion:2,projectNavigation:Object.freeze({...n.projectNavigation}),workPanel:Object.freeze({...n.workPanel})})}function Ov(n){return!Number.isFinite(n)||n<=0?1440:Math.max(320,Math.round(n))}function up(){return globalThis.window??null}function Mv(n){if(!Array.isArray(n)||n.length!==oc.length)return;const r=new Set;for(const o of n){if(!ui(o)||r.has(o))return;r.add(o)}return Object.freeze([...n])}function ui(n){return["agent","review","terminal","files","git"].includes(String(n))}function dp(n){return["goal","activity","integrations","diagnostics"].includes(String(n))}function Ao(n){return!!n&&typeof n=="object"&&!Array.isArray(n)}function fp({size:n=20,className:r,pixel:o=!1}){const a=m.useId(),d=`orion-bar-a-${a}`,p=`orion-bar-b-${a}`,f=`orion-bar-c-${a}`;return i.jsx("span",{className:r?`orion-brand-mark ${o?"orion-brand-mark-pixel ":""}${r}`:`orion-brand-mark${o?" orion-brand-mark-pixel":""}`,"aria-hidden":"true",style:{width:n,height:n},children:i.jsxs("svg",{viewBox:"0 0 20 20",width:n,height:n,focusable:"false",role:"presentation",shapeRendering:o?"crispEdges":void 0,children:[i.jsxs("defs",{children:[i.jsxs("linearGradient",{id:d,x1:"0",y1:"0",x2:"0",y2:"1",children:[i.jsx("stop",{offset:"0",className:"orion-mark-stop orion-mark-stop-primary"}),i.jsx("stop",{offset:"1",className:"orion-mark-stop orion-mark-stop-secondary"})]}),i.jsxs("linearGradient",{id:p,x1:"0",y1:"0",x2:"0",y2:"1",children:[i.jsx("stop",{offset:"0",className:"orion-mark-stop orion-mark-stop-primary"}),i.jsx("stop",{offset:"1",className:"orion-mark-stop orion-mark-stop-secondary"})]}),i.jsxs("linearGradient",{id:f,x1:"0",y1:"0",x2:"0",y2:"1",children:[i.jsx("stop",{offset:"0",className:"orion-mark-stop orion-mark-stop-primary"}),i.jsx("stop",{offset:"1",className:"orion-mark-stop orion-mark-stop-secondary"})]})]}),o?[{x:2,y:9,h:9},{x:8,y:4,h:14},{x:14,y:7,h:11}].map(g=>i.jsxs(m.Fragment,{children:[i.jsx("rect",{x:g.x,y:g.y,width:"4",height:Math.max(1,g.h-1),rx:0,style:{fill:"var(--accent)"}}),g.h>1?i.jsx("rect",{x:g.x,y:g.y+g.h-1,width:"4",height:"1",rx:0,style:{fill:"var(--accent-2)"}}):null]},g.x)):i.jsxs(i.Fragment,{children:[i.jsx("rect",{className:"orion-mark-bar",x:"2",y:"9",width:"4",height:"9",rx:2,fill:`url(#${d})`}),i.jsx("rect",{className:"orion-mark-bar",x:"8",y:"4",width:"4",height:"14",rx:2,fill:`url(#${p})`}),i.jsx("rect",{className:"orion-mark-bar",x:"14",y:"7",width:"4",height:"11",rx:2,fill:`url(#${f})`})]})]})})}const $o=5,cf=7,lc=1,Lv=Object.freeze({c:[".....",".....",".###.","#....","#....","#....",".###."],d:["....#","....#",".####","#...#","#...#","#...#",".####"],e:[".....",".....",".###.","#...#","#####","#....",".###."],i:["..#..",".....","..#..","..#..","..#..","..#..","..#.."],n:[".....",".....","#.##.","##..#","#...#","#...#","#...#"],o:[".....",".....",".###.","#...#","#...#","#...#",".###."],r:[".....",".....","#.##.","##..#","#....","#....","#...."],"-":[".....",".....",".....",".###.",".....",".....","....."]});function Av(n){const r=[];let o=0;for(const a of n.toLocaleLowerCase()){const d=Lv[a];d&&d.forEach((p,f)=>{let g=-1;for(let w=0;w<=$o;w+=1){const x=w<$o&&p[w]==="#";x&&g<0?g=w:!x&&g>=0&&(r.push({x:o+g,y:f,w:w-g}),g=-1)}}),o+=$o+lc}return r}function $v({text:n,scale:r=2,className:o}){const a=m.useMemo(()=>Av(n),[n]),d=n.length*($o+lc)-lc;return a.length?i.jsx("svg",{className:o?`pixel-wordmark ${o}`:"pixel-wordmark",viewBox:`0 0 ${d} ${cf}`,width:d*r,height:cf*r,shapeRendering:"crispEdges",role:"img","aria-label":n,children:a.map(p=>i.jsx("rect",{x:p.x,y:p.y,width:p.w,height:1,style:{fill:"var(--text)"}},`${p.x}-${p.y}`))}):null}const br=40;function Dv({state:n,drawerOpen:r,dockVisible:o,collapsed:a,resizable:d,width:p,onExpand:f,onCollapse:g,onOpenWorkspaceDialog:w,onOpenSettings:x,onLoadMoreWorkspaces:E,onCreateSession:C,onLoadWorkspaceSessions:R,onActivateContext:_,onSetPinned:A,onRemoveWorkspace:L,onRefreshSummary:W,onRenameSession:ie,onSessionTags:B,onArchiveSession:Se,onDeleteSession:re,onRestoreSession:ne,onWidthPreview:b,onWidthCommit:D}){const[ee,X]=m.useState(""),[oe,Q]=m.useState(0),[xe,se]=m.useState(new Set(n.workspaceId?[n.workspaceId]:[])),Ie=m.useDeferredValue(ee.trim().toLocaleLowerCase()),$=!!n.pendingAction,pe=$||n.processing;m.useEffect(()=>{n.workspaceId&&se(v=>new Set([...v,n.workspaceId]))},[n.workspaceId]),m.useEffect(()=>Q(0),[Ie]);const V=m.useMemo(()=>{const v=[...n.workspaces].sort(zv);return Ie?v.filter(O=>df(O,Ie)?!0:(n.workspaceSessions[O.id]?.items??[]).some(ue=>[ue.name,ue.taskSummary,ue.id].filter(he=>!!he).some(he=>he.toLocaleLowerCase().includes(Ie)))):v},[Ie,n.workspaceSessions,n.workspaces]);m.useEffect(()=>{const v=V.findIndex(O=>O.id===n.workspaceId);v<0||Q(O=>v<O||v>=O+br?Math.floor(v/br)*br:O)},[V,n.workspaceId]);const z=V.slice(oe,oe+br),te=!!(Ie&&(n.workspaceNextCursor||Object.values(n.workspaceSessions).some(v=>!!v.nextCursor))),q=v=>{const O=new Set(xe);O.has(v.id)?O.delete(v.id):(O.add(v.id),n.workspaceSessions[v.id]?W(v.id):R(v.id)),se(O)};if(a&&!r){const v=n.workspaces.find(O=>O.id===n.workspaceId);return i.jsxs("aside",{id:"workspace-rail",className:"workspace-rail project-navigator project-navigator-collapsed","aria-label":"项目与会话",hidden:!o,children:[i.jsx("div",{className:"project-rail-brand","aria-hidden":"true",children:i.jsx(fp,{size:22})}),i.jsx("button",{type:"button",className:"icon-button project-rail-action","aria-label":"展开项目导航",title:"展开项目导航(⌘/Ctrl+B)",onClick:f,children:i.jsx(Y,{name:"sidebar",size:17})}),i.jsx("button",{type:"button",className:"icon-button project-rail-action","aria-label":"新建会话",title:"新建会话",onClick:C,disabled:$||!n.workspaceId,children:i.jsx(Y,{name:"add",size:18})}),i.jsx("button",{type:"button",className:"icon-button project-rail-action project-rail-workspace","aria-label":v?`打开项目 ${v.label}`:"打开项目导航",title:v?.label??"打开项目导航",onClick:f,children:i.jsx(Y,{name:"workspace",size:17})}),i.jsx("span",{className:"project-rail-spacer"}),i.jsx("button",{type:"button",className:"icon-button project-rail-action","aria-label":"打开设置",title:"设置",onClick:x,children:i.jsx(Y,{name:"settings",size:17})}),i.jsx("span",{className:`connection-dot project-rail-connection ${n.connection}`,"aria-label":Ka(n.connection),title:Ka(n.connection)})]})}return i.jsxs("aside",{id:"project-navigation",className:`workspace-rail project-navigator ${r?"drawer-open":""}`,"aria-label":"项目与会话",hidden:!o,children:[i.jsxs("div",{className:"project-toolbar",children:[i.jsxs("div",{className:"project-toolbar-brand",children:[i.jsx($v,{text:"orion-code",scale:2}),i.jsx("h2",{className:"sr-only",children:"项目"})]}),i.jsxs("div",{className:"project-toolbar-actions",children:[i.jsx("button",{type:"button",className:"icon-button","aria-label":"收起项目导航",title:"收起项目导航(⌘/Ctrl+B)",onClick:g,children:i.jsx(Y,{name:"chevron-left"})}),i.jsx("button",{type:"button",className:"icon-button","aria-label":"选择其他工作区",title:"打开其他项目",onClick:w,disabled:pe,children:i.jsx(Y,{name:"add"})})]})]}),i.jsxs("label",{className:"project-search",children:[i.jsx("span",{className:"sr-only",children:"搜索项目和会话"}),i.jsx(Y,{name:"search",size:15}),i.jsx("input",{type:"search",value:ee,onChange:v=>X(v.target.value),placeholder:"搜索项目和会话"}),ee?i.jsx("button",{type:"button","aria-label":"清除搜索",onClick:()=>X(""),children:i.jsx(Y,{name:"close",size:13})}):null]}),i.jsxs("nav",{className:"project-tree","aria-label":"已知项目","aria-description":te?"搜索仅覆盖已加载的项目和会话;仍有分页内容未加载。":void 0,children:[z.map((v,O)=>{const ue=oe+O,he=V[ue-1],we=xe.has(v.id)||!!Ie,J=n.workspaceSessions[v.id],me=n.workspaceProjectSummaries[v.id],Ce=df(v,Ie)?J?.items??[]:Wv(J?.items??[],Ie);return i.jsxs(m.Fragment,{children:[ue===0||he?.pinnedOrder!==void 0&&v.pinnedOrder===void 0?i.jsx("h3",{className:"project-group-heading",role:"presentation",children:v.pinnedOrder===void 0?"RECENT":"PINNED"}):null,i.jsxs("section",{className:`project-node ${v.active?"active":""} ${v.available?"":"unavailable"}`,children:[i.jsxs("div",{className:"project-row",children:[i.jsxs("button",{id:`project-${v.id}`,type:"button",className:"project-toggle","aria-expanded":we,"aria-controls":`project-${v.id}-sessions`,"aria-current":v.active?"page":void 0,onClick:()=>q(v),onKeyDown:ae=>{if(ae.key==="ArrowRight"){ae.preventDefault(),we?ae.currentTarget.closest(".project-node")?.querySelector(".project-session-main")?.focus():q(v);return}if(ae.key==="ArrowLeft"&&we){ae.preventDefault(),q(v);return}uf(ae)},children:[i.jsx(Y,{name:"chevron",size:13}),i.jsx("span",{className:"workspace-icon",children:i.jsx(Y,{name:"workspace",size:15})}),i.jsxs("span",{className:"project-copy",children:[i.jsx("strong",{children:v.label}),i.jsx("span",{title:v.path,children:me?`${me.detached?me.head||"detached":me.branch||"Git"} · ${me.dirtyCount?`M${me.dirtyCount}`:"clean"}`:Fv(v.path)})]})]}),i.jsx("button",{type:"button",className:"icon-button project-pin","aria-label":`${v.pinnedOrder===void 0?"置顶":"取消置顶"}项目 ${v.label}`,"aria-pressed":v.pinnedOrder!==void 0,onClick:()=>A(v.id,v.pinnedOrder===void 0),disabled:$,children:i.jsx("span",{"aria-hidden":"true",children:v.pinnedOrder===void 0?"○":"●"})}),!v.available&&!v.active?i.jsx("button",{type:"button",className:"icon-button project-remove","aria-label":`移除不可用项目 ${v.label}`,onClick:()=>L(v.id),disabled:$,children:i.jsx(Y,{name:"close",size:13})}):i.jsx("button",{type:"button",className:"icon-button project-add-session","aria-label":`在 ${v.label} 新建会话`,disabled:$||!v.available||!v.active,onClick:C,title:v.active?"新建会话":"先激活项目后新建会话",children:i.jsx(Y,{name:"add",size:14})})]}),we?i.jsxs(m.Fragment,{children:[i.jsxs("div",{id:`project-${v.id}-sessions`,className:"project-sessions",role:"list","aria-label":`${v.label} 的会话`,children:[J?.status==="loading"&&!J.items.length?i.jsx("p",{className:"project-loading",role:"listitem",children:"正在加载会话…"}):null,J?.status==="error"?i.jsx("div",{role:"listitem",children:i.jsx("button",{type:"button",className:"project-load-error",onClick:()=>R(v.id),children:"加载失败,重试"})}):null,Ce.map(ae=>{const Oe=v.active&&ae.id===n.activeSessionId,Qe=n.sessionRuntimeById[ae.id],Je=qv(Qe),It=!v.active&&pe,lt=Hv(Qe?.phase),Lt=ae.tags??[];return i.jsxs("div",{className:`project-session-row ${Oe?"active":""}`,role:"listitem",children:[i.jsxs("button",{type:"button",className:"project-session-main","aria-current":Oe?"page":void 0,"aria-disabled":Oe||It||!v.available,onClick:()=>{Oe||_(v.id,ae.id)},disabled:It||!v.available,onKeyDown:gt=>{if(gt.key==="ArrowLeft"){gt.preventDefault(),document.getElementById(`project-${v.id}`)?.focus();return}uf(gt)},children:[i.jsx("span",{className:`session-state ${Je.tone}`,"aria-hidden":"true"}),i.jsxs("span",{children:[i.jsx("strong",{children:ds(ae)}),i.jsxs("small",{children:[ff(ae.updatedAt)," · ",ae.messageCount," 条"]}),Lt.length>0?i.jsxs("small",{className:"project-session-tags","aria-label":"会话标签",children:[Lt.slice(0,3).map(gt=>i.jsx("span",{className:"session-tag-badge",children:gt},gt)),Lt.length>3?i.jsxs("span",{className:"session-tag-more",children:["+",Lt.length-3]}):null]}):null,Je.label?i.jsx("small",{className:"project-session-status",children:Je.label}):null]})]}),v.active?i.jsx(Iv,{label:`会话 ${ds(ae)} 操作`,disabled:$,items:[{id:"rename",label:"重命名…",onSelect:()=>ie(ae)},{id:"tags",label:"管理标签…",onSelect:()=>B(ae)},{id:"archive",label:"归档",disabled:lt,hint:lt?"会话运行中":void 0,onSelect:()=>Se(ae)},{id:"delete",label:"删除…",danger:!0,disabled:lt,hint:lt?"会话运行中":void 0,onSelect:()=>re(ae)}]}):null]},ae.id)}),J?.status==="ready"&&!Ce.length?i.jsx("div",{role:"listitem",children:i.jsx("button",{type:"button",className:"project-empty-session",disabled:pe||!v.available,onClick:()=>_(v.id,null),children:Ie?"没有匹配会话":"打开项目"})}):null,J?.nextCursor?i.jsx("div",{role:"listitem",children:i.jsx("button",{type:"button",className:"text-button project-load-more",onClick:()=>R(v.id,!0),children:"加载更多会话"})}):null]}),v.active&&(n.archivedSessions.items.length>0||n.archivedSessions.status==="loading")?i.jsxs("details",{className:"archived-section",children:[i.jsxs("summary",{children:["已归档(",n.archivedSessions.items.length,n.archivedSessions.status==="loading"?"…":"",")"]}),i.jsx("div",{className:"archived-list",role:"list","aria-label":"已归档会话",children:n.archivedSessions.items.map(ae=>i.jsxs("div",{className:"archived-row",role:"listitem",children:[i.jsxs("span",{className:"archived-copy",children:[i.jsx("strong",{children:ds(ae)}),i.jsx("small",{children:ff(ae.updatedAt)})]}),i.jsx("button",{type:"button",className:"text-button",disabled:$,onClick:()=>ne(ae),children:"还原"}),i.jsx("button",{type:"button",className:"text-button archived-delete",disabled:$,onClick:()=>re(ae),children:"删除"})]},ae.id))})]}):null]}):null]})]},v.id)}),V.length?null:i.jsxs("div",{className:"empty-rail",children:[i.jsx(Y,{name:"search"}),i.jsx("p",{children:"没有匹配的项目或会话"})]}),oe>0?i.jsx("button",{type:"button",className:"text-button project-window-more",onClick:()=>Q(v=>Math.max(0,v-br)),children:"上一批项目"}):null,oe+br<V.length?i.jsx("button",{type:"button",className:"text-button project-window-more",onClick:()=>Q(v=>v+br),children:"下一批项目"}):n.workspaceNextCursor?i.jsx("button",{type:"button",className:"text-button project-window-more",onClick:E,children:"加载更多项目"}):null]}),i.jsxs("footer",{className:"rail-footer",children:[i.jsx("span",{className:`connection-dot ${n.connection}`,"aria-hidden":"true"}),i.jsx("span",{"data-testid":"runtime-connection-state","data-state":n.connection,title:Bv(n.connection),children:Ka(n.connection)}),i.jsx("button",{type:"button",className:"icon-button rail-settings","aria-label":"打开设置",onClick:x,children:i.jsx(Y,{name:"settings",size:14})}),n.bootstrap?.productVersion?i.jsxs("span",{className:"version",children:["v",n.bootstrap.productVersion]}):null]}),d?i.jsx(sp,{side:"left",minWidth:hc,maxWidth:ip,defaultWidth:Zo,label:"拖动或按方向键调整项目导航宽度",width:p,controls:"workspace-rail",onPreview:b,onCommit:D}):null]})}function uf(n){if(!["ArrowDown","ArrowUp","Home","End"].includes(n.key))return;const r=n.currentTarget.closest(".project-tree");if(!r)return;const o=Array.from(r.querySelectorAll(".project-toggle:not(:disabled), .project-session-main:not(:disabled)")).filter(p=>p.getClientRects().length>0),a=o.indexOf(n.currentTarget);if(a<0||o.length===0)return;const d=n.key==="Home"?0:n.key==="End"?o.length-1:Math.max(0,Math.min(o.length-1,a+(n.key==="ArrowDown"?1:-1)));n.preventDefault(),o[d]?.focus()}function zv(n,r){return n.pinnedOrder!==void 0||r.pinnedOrder!==void 0?n.pinnedOrder===void 0?1:r.pinnedOrder===void 0?-1:n.pinnedOrder-r.pinnedOrder:Date.parse(r.lastActivatedAt)-Date.parse(n.lastActivatedAt)}function df(n,r){return!!(r&&(n.label.toLocaleLowerCase().includes(r)||n.path.toLocaleLowerCase().includes(r)))}function Wv(n,r){return r?n.filter(o=>[o.name,o.taskSummary,o.id,o.model].filter(a=>!!a).some(a=>a.toLocaleLowerCase().includes(r))):n}function ds(n){return n.name||n.taskSummary||`会话 ${n.id.slice(0,8)}`}function pp(n){const r=n.replace(/[\\/]+$/,"");return r.split(/[\\/]/).filter(Boolean).at(-1)??r}function Fv(n){return n.length<=31?n:`…${n.slice(-30)}`}function ff(n){const r=Date.parse(n);if(!Number.isFinite(r))return"未知";const o=Math.max(0,Math.floor((Date.now()-r)/6e4));if(o<1)return"刚刚";if(o<60)return`${o} 分钟前`;const a=Math.floor(o/60);if(a<24)return`${a} 小时前`;const d=Math.floor(a/24);return d<30?`${d} 天前`:new Date(r).toLocaleDateString("zh-CN")}function Ka(n){return n==="live"?"已连接":n==="offline"?"离线":n==="replay-required"?"事件流需恢复":n==="closed"?"已关闭":n==="connecting"?"正在连接…":"正在重连…"}function Bv(n){return n==="live"?"本地 Web Host 已连接":n==="offline"?"浏览器离线":n==="replay-required"?"Web Host 事件流需要恢复":n==="closed"?"本地 Web Host 已关闭":n==="connecting"?"正在连接本地 Web Host":"正在重连本地 Web Host"}function qv(n){return!n||n.phase==="cold"?{label:"",tone:""}:n.pendingApprovalCount>0||n.phase==="waiting_approval"?{label:"等待审批",tone:"approval"}:n.phase==="running"||n.phase==="starting"?{label:n.phase==="starting"?"正在启动":"运行中",tone:"running"}:n.phase==="queued"?{label:n.queuePosition?`排队 ${n.queuePosition}`:"排队中",tone:"queued"}:n.phase==="failed"?{label:"失败",tone:"failed"}:n.phase==="interrupted"?{label:"已中断",tone:"failed"}:n.phase==="stopping"?{label:"正在停止",tone:"running"}:{label:"已就绪",tone:"ready"}}const Uv=new Set(["starting","queued","running","waiting_approval","stopping"]);function Hv(n){return n?Uv.has(n):!1}const Vv={available:"可用",missing:"目录不存在",not_directory:"不是文件夹",unreadable:"无法读取"},pf=["prepare","runtime","session"],Kv={prepare:"准备项目",runtime:"加载本地 Runtime",session:"恢复会话(如有)"};function Gv({candidate:n,busy:r,stage:o="prepare",error:a,onCancel:d,onOpen:p}){const f=n.availability==="available"&&!n.isActive,g=n.isActive?"当前项目":n.availability!=="available"?"不可打开":r?"正在打开…":"打开项目",w=pf.indexOf(o);return i.jsxs("section",{className:"workspace-confirm","aria-label":"已选择本地项目",children:[i.jsxs("header",{className:"workspace-confirm-head",children:[i.jsx("span",{className:"workspace-confirm-name",title:n.canonicalPath,children:n.label}),i.jsxs("span",{className:"workspace-confirm-meta",children:[n.kind==="git"?"Git 项目":"本地文件夹"," ·"," ",Vv[n.availability],typeof n.sessionCount=="number"?` · ${n.sessionCount} 个会话`:n.sessionCountStatus==="deferred"?" · 会话数读取中":""]})]}),i.jsx("p",{className:"workspace-confirm-path",children:n.canonicalPath}),i.jsx("p",{className:"workspace-confirm-note",children:"已解析真实路径;此操作不会读取目录外的文件。"}),r?i.jsx("ol",{className:"workspace-confirm-stages","aria-label":"打开进度",children:pf.map((x,E)=>i.jsx("li",{className:"workspace-confirm-stage","aria-current":x===o?"step":void 0,"data-state":E<w?"done":E===w?"current":"todo",children:Kv[x]},x))}):null,a?i.jsx("p",{className:"field-error",role:"alert",children:a}):null,i.jsxs("footer",{className:"workspace-confirm-actions",children:[i.jsx("button",{type:"button",className:"text-button",onClick:d,disabled:r,children:"取消"}),i.jsx("button",{type:"button",className:"primary-button",onClick:p,disabled:r||!f,"aria-busy":r,children:g})]})]})}const hp=Object.freeze({phase:"browse",candidate:null,pendingPath:null,error:null,pickerReturned:!1});function Qv(n,r){switch(r.type){case"picker-started":return{...n,phase:"picker-pending",error:null,pickerReturned:!1};case"picker-cancelled":return{...n,phase:"browse",error:null,pendingPath:null,pickerReturned:!0};case"picker-unavailable":return{...n,phase:"browse",error:r.reason,pendingPath:null,pickerReturned:!0};case"inspect-started":return{...n,phase:"inspect-pending",pendingPath:r.path,candidate:null,error:null,pickerReturned:!1};case"inspect-succeeded":return{...n,phase:"confirm",candidate:r.candidate,pendingPath:null,error:null};case"activate-started":return n.phase!=="confirm"||!n.candidate?n:{...n,phase:"activate-pending",error:null};case"failed":return{...n,phase:n.candidate?"confirm":"browse",error:r.message,pendingPath:null};case"back-to-browse":return{...n,phase:"browse",candidate:null,pendingPath:null,error:null};case"reset":return hp;default:return n}}function Yv(n){return n.phase==="picker-pending"||n.phase==="inspect-pending"||n.phase==="activate-pending"}function di({open:n,onClose:r,labelledBy:o,describedBy:a,className:d="",children:p}){const f=m.useRef(null);m.useEffect(()=>{const w=f.current;w&&(n&&!w.open&&w.showModal(),!n&&w.open&&w.close())},[n]);const g=w=>{w.target===w.currentTarget&&r()};return i.jsx("dialog",{ref:f,className:`modal ${d}`.trim(),"aria-labelledby":o,"aria-describedby":a,onCancel:w=>{w.preventDefault(),r()},onClose:r,onClick:g,children:p})}function Xv({open:n,onClose:r,state:o,onSelect:a,onLoadMore:d,onPickDirectory:p,onInspect:f}){const[g,w]=m.useState(""),[x,E]=m.useState(!1),[C,R]=m.useState(""),[_,A]=m.useReducer(Qv,hp);m.useEffect(()=>{n&&(w(""),E(!1),R(""),A({type:"reset"}))},[n]);const L=Yv(_),W=!!o.pendingAction||L,B=_.phase==="confirm"||_.phase==="activate-pending"?_.candidate:null,Se=C.trim().toLocaleLowerCase(),re=V=>!Se||V.label.toLocaleLowerCase().includes(Se)||V.path.toLocaleLowerCase().includes(Se),ne=o.workspaces.filter(re),b=ne.filter(V=>V.pinnedOrder!==void 0),D=ne.filter(V=>V.pinnedOrder===void 0),ee=3,X=x?D:D.slice(0,ee),oe=D.length-X.length,Q=b.length>0||D.length>0,xe=async(V,z)=>{A({type:"inspect-started",path:V});try{const te=await f(V);A({type:"inspect-succeeded",candidate:{...te,source:z}})}catch(te){A({type:"failed",message:te instanceof Error?te.message:"无法读取该目录。"})}},se=async()=>{A({type:"picker-started"});try{const V=await p();if(V.outcome==="cancelled"){A({type:"picker-cancelled"});return}if(V.outcome!=="selected"||!V.path){A({type:"picker-unavailable",reason:"系统目录选择器不可用,请在高级选项中粘贴绝对路径。"});return}await xe(V.path,"picker")}catch(V){A({type:"picker-unavailable",reason:V instanceof Error?V.message:"无法打开系统目录选择器。"})}},Ie=async V=>{A({type:"activate-started"});try{await a(V.canonicalPath),r()}catch(z){A({type:"failed",message:z instanceof Error?z.message:"工作区切换失败。"})}},$=V=>{xe(V.path,V.pinnedOrder!==void 0?"pinned":"recent")},pe=V=>{V.preventDefault();const z=g.trim();z&&xe(z,"manual")};return i.jsxs(di,{open:n,onClose:r,labelledBy:"workspace-dialog-title",describedBy:"workspace-dialog-description",className:"workspace-modal",children:[i.jsxs("div",{className:"modal-header",children:[i.jsxs("div",{children:[i.jsx("span",{className:"eyebrow",children:"LOCAL WORKSPACE"}),i.jsx("h2",{id:"workspace-dialog-title",children:"打开或新增项目"}),i.jsx("p",{id:"workspace-dialog-description",children:"选择一个本地目录作为项目;Host 会解析真实路径并拒绝无效目录。"})]}),i.jsx("button",{type:"button",className:"icon-button",onClick:r,"aria-label":"关闭工作区选择",children:i.jsx(Y,{name:"close"})})]}),i.jsxs("div",{className:"workspace-picker",children:[i.jsxs("label",{className:"workspace-search",children:[i.jsx("span",{className:"sr-only",children:"搜索最近项目"}),i.jsx(Y,{name:"search",size:15}),i.jsx("input",{type:"search",value:C,onChange:V=>R(V.target.value),placeholder:"搜索最近项目…",disabled:W})]}),i.jsxs("button",{type:"button",className:"workspace-pick-folder primary-button",onClick:()=>{se()},disabled:_.phase==="picker-pending"||W&&!L,"aria-busy":_.phase==="picker-pending",children:[i.jsx(Y,{name:"workspace",size:16}),_.phase==="picker-pending"?"正在打开 Finder…":"从 Finder 选择文件夹…"]}),_.error?i.jsx("p",{className:"field-error",role:"alert",children:_.error}):null,_.phase==="inspect-pending"?i.jsxs("p",{className:"workspace-inspect-pending",role:"status",children:["正在解析 ",_.pendingPath,"…"]}):null]}),B?i.jsx(Gv,{candidate:B,busy:_.phase==="activate-pending",stage:_.phase==="activate-pending"?"runtime":"prepare",error:_.error,onCancel:()=>A({type:"back-to-browse"}),onOpen:()=>{Ie(B)}}):null,i.jsxs("div",{className:"workspace-options",role:"group","aria-label":"常用工作区",children:[b.length>0?i.jsxs(i.Fragment,{children:[i.jsx("h3",{className:"workspace-group-heading",children:"固定项目"}),b.map(V=>i.jsx(hf,{workspace:V,locked:W,onOpen:$},V.id))]}):null,D.length>0?i.jsxs(i.Fragment,{children:[i.jsx("h3",{className:"workspace-group-heading",children:b.length>0?"最近打开":"最近项目"}),X.map(V=>i.jsx(hf,{workspace:V,locked:W,onOpen:$},V.id))]}):null,Q?null:i.jsx("p",{className:"workspace-empty",children:"没有匹配的项目。"}),oe>0||x&&D.length>ee?i.jsx("button",{type:"button",className:"text-button workspace-toggle-all","aria-expanded":x,onClick:()=>E(V=>!V),children:x?"收起其他项目":`其他项目(${oe})`}):null,o.workspaceNextCursor?i.jsx("button",{type:"button",className:"text-button",onClick:()=>{d()},disabled:W,children:"加载更多工作区"}):null]}),i.jsxs("details",{className:"workspace-advanced",children:[i.jsx("summary",{children:"高级:粘贴绝对路径"}),i.jsxs("form",{className:"workspace-path-form",onSubmit:pe,children:[i.jsx("label",{htmlFor:"workspace-path-input",children:"打开其他本地目录"}),i.jsxs("div",{className:"path-input-row",children:[i.jsx("input",{id:"workspace-path-input",value:g,onChange:V=>w(V.target.value),placeholder:"/Users/name/project",spellCheck:!1,autoComplete:"off"}),i.jsx("button",{type:"submit",className:"primary-button",disabled:!g.trim()||W,children:"打开"})]})]})]})]})}function hf({workspace:n,locked:r,onOpen:o}){return i.jsxs("button",{type:"button",className:`workspace-option ${n.active?"active":""}`,disabled:n.active||!n.available||r,onClick:()=>o(n),children:[i.jsx("span",{className:"workspace-icon",children:i.jsx(Y,{name:"workspace",size:17})}),i.jsxs("span",{children:[i.jsx("strong",{children:n.label||pp(n.path)}),i.jsx("small",{title:n.path,children:n.path})]}),n.active?i.jsx("span",{className:"current-pill",children:"当前"}):n.available?i.jsx(Y,{name:"chevron",size:15}):i.jsx("span",{className:"current-pill",children:"不可用"})]})}function Jv({open:n,onClose:r,session:o,pending:a,onRename:d}){const[p,f]=m.useState(""),[g,w]=m.useState(""),x=o?.id;m.useEffect(()=>{n&&o&&(f(ds(o)),w(""))},[n,x]);const E=async C=>{if(C.preventDefault(),!(!o||!p.trim())){w("");try{await d(o.id,p.trim()),r()}catch(R){w(R instanceof Error?R.message:"重命名失败,请重试。")}}};return i.jsx(di,{open:n,onClose:r,labelledBy:"rename-title",className:"rename-modal",children:i.jsxs("form",{onSubmit:E,children:[i.jsxs("header",{className:"modal-header",children:[i.jsxs("div",{children:[i.jsx("span",{className:"eyebrow",children:"SESSION"}),i.jsx("h2",{id:"rename-title",children:"重命名会话"})]}),i.jsx("button",{type:"button",className:"icon-button",onClick:r,"aria-label":"关闭重命名窗口",children:i.jsx(Y,{name:"close"})})]}),i.jsxs("div",{className:"rename-body",children:[i.jsx("label",{htmlFor:"session-name",children:"会话名称"}),i.jsx("input",{id:"session-name",value:p,onChange:C=>{f(C.target.value),g&&w("")},maxLength:120,autoFocus:!0}),g?i.jsx("p",{className:"field-error",role:"alert",children:g}):null]}),i.jsxs("footer",{className:"modal-footer",children:[i.jsx("button",{type:"button",className:"secondary-button",onClick:r,children:"取消"}),i.jsx("button",{type:"submit",className:"primary-button",disabled:a||!p.trim(),children:a?"保存中…":"保存"})]})]})})}const mf=8;function Zv({open:n,onClose:r,session:o,pending:a,onSave:d}){const[p,f]=m.useState(()=>o?.tags?[...o.tags]:[]),[g,w]=m.useState(""),[x,E]=m.useState(""),C=o?.id;m.useEffect(()=>{n&&o&&(f(o.tags??[]),w(""),E(""))},[n,C]);const R=()=>{const L=g.trim().slice(0,32);if(w(""),!!L&&!p.includes(L)){if(p.length>=mf){E(`最多 ${mf} 个标签。`);return}f([...p,L]),E("")}},_=L=>f(p.filter(W=>W!==L)),A=async L=>{if(L.preventDefault(),!!o){E("");try{await d(o.id,p),r()}catch(W){E(W instanceof Error?W.message:"保存标签失败,请重试。")}}};return i.jsx(di,{open:n,onClose:r,labelledBy:"session-tags-title",className:"tags-modal",children:i.jsxs("form",{onSubmit:A,children:[i.jsxs("header",{className:"modal-header",children:[i.jsxs("div",{children:[i.jsx("span",{className:"eyebrow",children:"SESSION"}),i.jsx("h2",{id:"session-tags-title",children:"管理会话标签"})]}),i.jsx("button",{type:"button",className:"icon-button",onClick:r,"aria-label":"关闭标签窗口",children:i.jsx(Y,{name:"close"})})]}),i.jsxs("div",{className:"session-tags-body",children:[o?i.jsx("p",{className:"modal-description",children:ds(o)}):null,i.jsx("div",{className:"session-tags-chips",role:"list","aria-label":"当前标签",children:p.length===0?i.jsx("span",{className:"session-tags-empty",children:"还没有标签,输入后回车添加。"}):p.map(L=>i.jsxs("span",{className:"session-tag-chip",role:"listitem",children:[L,i.jsx("button",{type:"button",className:"icon-button session-tag-remove","aria-label":`移除标签 ${L}`,onClick:()=>_(L),children:i.jsx(Y,{name:"close",size:11})})]},L))}),i.jsx("label",{htmlFor:"session-tag-input",children:"新标签"}),i.jsx("input",{id:"session-tag-input",value:g,onChange:L=>{w(L.target.value),x&&E("")},onKeyDown:L=>{(L.key==="Enter"||L.key===","||L.key===",")&&(L.preventDefault(),R())},placeholder:"回车或逗号添加",maxLength:32,autoFocus:!0}),x?i.jsx("p",{className:"field-error",role:"alert",children:x}):null]}),i.jsxs("footer",{className:"modal-footer",children:[i.jsx("button",{type:"button",className:"secondary-button",onClick:r,children:"取消"}),i.jsx("button",{type:"submit",className:"primary-button",disabled:a,children:a?"保存中…":"保存"})]})]})})}function ey({open:n,onClose:r,title:o,body:a,confirmLabel:d,danger:p=!1,pending:f=!1,onConfirm:g}){const w=m.useId(),x=async()=>{if(!f)try{await g(),r()}catch{}};return i.jsxs(di,{open:n,onClose:r,labelledBy:w,className:"confirm-modal",children:[i.jsxs("header",{className:"modal-header",children:[i.jsx("h2",{id:w,children:o}),i.jsx("button",{type:"button",className:"icon-button",onClick:r,"aria-label":"关闭确认窗口",children:i.jsx(Y,{name:"close"})})]}),i.jsx("p",{className:"confirm-body",children:a}),i.jsxs("footer",{className:"modal-footer",children:[i.jsx("button",{type:"button",className:"secondary-button",autoFocus:!0,onClick:r,children:"取消"}),i.jsx("button",{type:"button",className:p?"danger-button":"primary-button",disabled:f,onClick:()=>{x()},children:f?"处理中…":d})]})]})}function ty({open:n,onClose:r,session:o,pending:a,onConfirm:d}){const p=async()=>{if(o)try{await d(o.id),r()}catch{}};return i.jsxs(di,{open:n,onClose:r,labelledBy:"confirm-delete-title",describedBy:"confirm-delete-description",className:"delete-modal",children:[i.jsxs("div",{className:"modal-header",children:[i.jsxs("div",{children:[i.jsx("span",{className:"eyebrow",children:"SESSION"}),i.jsx("h2",{id:"confirm-delete-title",children:"删除会话"})]}),i.jsx("button",{type:"button",className:"icon-button",onClick:r,"aria-label":"关闭删除确认",children:i.jsx(Y,{name:"close"})})]}),i.jsxs("p",{id:"confirm-delete-description",className:"confirm-delete-body",children:["将永久删除会话",i.jsx("strong",{children:o?`「${ds(o)}」`:""}),"及其全部记录(消息、文件变更、目标与检查点)。此操作不可恢复。"]}),i.jsxs("footer",{className:"modal-footer",children:[i.jsx("button",{type:"button",className:"secondary-button",onClick:r,children:"取消"}),i.jsx("button",{type:"button",className:"danger-button",disabled:a,onClick:()=>{p()},children:a?"删除中…":"永久删除"})]})]})}const ny=["appearance.style","appearance.theme","appearance.motion","defaults.model","defaults.effort","permissions.toolConfirmation"];function Bo(n,r){return r==="appearance.style"?n.sections.appearance.style:r==="appearance.theme"?n.sections.appearance.theme:r==="appearance.motion"?n.sections.appearance.motion:r==="defaults.model"?n.sections.defaults.model:r==="defaults.effort"?n.sections.defaults.effort:n.sections.permissions.toolConfirmation}function ry(n){return{"appearance.style":n.sections.appearance.style.effectiveValue,"appearance.theme":n.sections.appearance.theme.effectiveValue,"appearance.motion":n.sections.appearance.motion.effectiveValue,"defaults.model":n.sections.defaults.model.effectiveValue,"defaults.effort":n.sections.defaults.effort.effectiveValue,"permissions.toolConfirmation":n.sections.permissions.toolConfirmation.effectiveValue}}function Ir(n){return{openedAtRevision:n.revision,workspace:n.workspace,base:n,values:ly(n),intents:{},serverLatest:null}}function mp(n,r,o){const a=_n(n.base,r),d={...n.values,[r]:o},p={...n.intents};return Object.is(o,a)?delete p[r]:p[r]={op:"set",value:o},{...n,values:d,intents:p,serverLatest:null}}function gp(n,r){const o=Bo(n.base,r),a={...n.intents};return o.explicitValue===void 0?(delete a[r],{...n,values:{...n.values,[r]:_n(n.base,r)},intents:a,serverLatest:null}):(a[r]={op:"unset"},{...n,values:{...n.values,[r]:o.inheritedValue??o.effectiveValue},intents:a,serverLatest:null})}function gf(n,r){return{...n,serverLatest:r}}function sy(n){const r=n.serverLatest;if(!r)return n;let o=Ir(r);for(const a of Rr(n)){const d=n.intents[a];if(d){if(d.op==="unset"){o=gp(o,a);continue}o=mp(o,a,d.value)}}return o}function Rr(n){return ny.filter(r=>n.intents[r]!==void 0)}function iy(n){return Rr(n).map(r=>{const o=n.intents[r];return o.op==="unset"?{op:"unset",key:r}:{op:"set",key:r,value:o.value}})}function oy(n){return n.serverLatest?Rr(n).filter(r=>{const o=Bo(n.base,r),a=Bo(n.serverLatest,r);return!Object.is(o.effectiveValue,a.effectiveValue)||!Object.is(o.explicitValue,a.explicitValue)||o.overridden!==a.overridden||o.source!==a.source}):[]}function _n(n,r){const o=Bo(n,r);return o.explicitValue??o.effectiveValue}function ly(n){const r=ry(n);return{"appearance.style":_n(n,"appearance.style")??r["appearance.style"],"appearance.theme":_n(n,"appearance.theme")??r["appearance.theme"],"appearance.motion":_n(n,"appearance.motion")??r["appearance.motion"],"defaults.model":_n(n,"defaults.model")??r["defaults.model"],"defaults.effort":_n(n,"defaults.effort")??r["defaults.effort"],"permissions.toolConfirmation":_n(n,"permissions.toolConfirmation")??r["permissions.toolConfirmation"]}}const qo={phase:"closed",section:"general",draft:null,message:null,problemCode:null,confirmDiscard:!1};function ay(n,r){switch(r.type){case"open":return{...qo,phase:"ready",draft:Ir(r.document)};case"close":return qo;case"select_section":return{...n,section:r.section,confirmDiscard:!1};case"set_value":return!n.draft||n.phase==="saving"?n:{...n,phase:"ready",draft:mp(n.draft,r.key,r.value),message:null,problemCode:null,confirmDiscard:!1};case"reset_value":return!n.draft||n.phase==="saving"?n:{...n,phase:"ready",draft:gp(n.draft,r.key),message:null,problemCode:null,confirmDiscard:!1};case"save_started":return{...n,phase:"saving",message:"正在原子应用设置…",problemCode:null,confirmDiscard:!1};case"save_succeeded":return{...n,phase:"success",draft:Ir(r.document),message:"设置已安全保存并应用。",problemCode:null,confirmDiscard:!1};case"save_failed":{if(!n.draft)return n;const o=r.code==="settings_revision_conflict";return{...n,phase:o?"conflict":"rejected",draft:r.latest?gf(n.draft,r.latest):n.draft,message:r.message,problemCode:r.code,confirmDiscard:!1}}case"server_updated":{if(!n.draft)return{...n,phase:"ready",draft:Ir(r.document)};if(n.phase==="saving")return n;if(n.draft.base.revision===r.document.revision){const o=Rr(n.draft).length>0;return{...n,draft:o?{...n.draft,base:r.document}:Ir(r.document)}}return n.draft.workspace!==r.document.workspace||Rr(n.draft).length===0?{...n,phase:"ready",draft:Ir(r.document),message:"已采用 Host 的最新设置。",problemCode:null,confirmDiscard:!1}:{...n,phase:"conflict",draft:gf(n.draft,r.document),message:"Host 设置已更新。你的草稿仍被保留,请选择如何继续。",problemCode:"settings_revision_conflict",confirmDiscard:!1}}case"adopt_server":return n.draft?.serverLatest?{...n,phase:"ready",draft:Ir(n.draft.serverLatest),message:"已采用服务器最新值。",problemCode:null}:n;case"rebase":return n.draft?.serverLatest?{...n,phase:"ready",draft:sy(n.draft),message:"草稿已基于服务器最新值重放;请确认后再次应用。",problemCode:null}:n;case"request_discard":return{...n,confirmDiscard:!0};case"cancel_discard":return{...n,confirmDiscard:!1};case"clear_status":return{...n,phase:"ready",message:null,problemCode:null}}}const cy=["auto","none","minimal","low","medium","high","xhigh","max"],uy=[{id:"general",label:"General",icon:"settings"},{id:"models",label:"Models & Reasoning",icon:"spark"},{id:"permissions",label:"Permissions",icon:"warning"},{id:"advanced",label:"Advanced",icon:"diagnostics"}];function dy({open:n,onClose:r,state:o,actions:a,onGoToSessionControls:d}){const p=m.useRef(null),f=m.useRef(null),g=m.useRef(null),w=m.useRef(null),x=m.useRef(null),E=m.useRef(!1),C=m.useRef(null),R=m.useRef(qo.phase),[_,A]=m.useReducer(ay,qo),[L,W]=m.useState(!1),[ie,B]=m.useState(!1),[Se,re]=m.useState(null),ne=o.settings??o.settingsMirror.lastGood,b=ne&&(!o.workspace||ne.workspace===o.workspace)?ne:null;m.useEffect(()=>{const $=p.current;$&&(n&&!$.open&&$.showModal(),!n&&$.open&&$.close())},[n]),m.useEffect(()=>{if(n&&!E.current)b&&(A({type:"open",document:b}),x.current=b),W(!1),B(!1),re(null);else if(n&&b&&x.current===null)A({type:"open",document:b}),x.current=b;else if(n&&b&&x.current!==null&&x.current!==b){if(_.phase==="saving")return;x.current=b,A({type:"server_updated",document:b})}else!n&&E.current&&(A({type:"close"}),x.current=null,C.current=null);E.current=n},[b,_.phase,n]),m.useEffect(()=>{_.confirmDiscard&&g.current?.focus()},[_.confirmDiscard]),m.useEffect(()=>{const $=R.current;if(R.current=_.phase,!n||$!=="saving"||_.phase!=="success")return;const pe=wf();p.current?.contains(pe)||f.current?.focus()},[_.phase,n]),m.useEffect(()=>{!n||b||o.settingsMirror.status==="loading"||a.refreshSettings().catch(()=>{})},[a,b,n,o.settingsMirror.status]),m.useEffect(()=>{!n||!_.draft||!o.workspace||_.draft.workspace!==o.workspace&&(A({type:"close"}),x.current=null)},[_.draft,n,o.workspace]);const D=_.draft,ee=D?Rr(D):[],X=ee.length>0,oe=o.processing&&ee.some($=>["defaults.effort","permissions.toolConfirmation"].includes($)),Q=()=>{if(_.phase!=="saving"){if(X){const $=wf();w.current=$ instanceof HTMLElement?$:null,A({type:"request_discard"});return}A({type:"close"}),r()}},xe=()=>{A({type:"close"}),r()},se=async $=>{if($.preventDefault(),!D||!X||_.phase==="saving"||_.phase==="conflict")return;const pe=iy(D),V=C.current??$e();C.current=V,A({type:"save_started"});try{const z=await a.updateSettings(D.base.revision,pe,V);C.current=null,x.current=z.settings,A({type:"save_succeeded",document:z.settings})}catch(z){const te=z instanceof Ee?z.code??"settings_rejected":"network";let q;te==="settings_revision_conflict"?(C.current=null,q=await a.refreshSettings().catch(()=>{}),q&&(x.current=q)):z instanceof Ee&&z.status<500&&(C.current=null);const v=te==="settings_revision_conflict"&&!q?"settings_recovery_required":te;A({type:"save_failed",code:v,message:xy(v,z),...q?{latest:q}:{}})}},Ie=$=>{$.target===$.currentTarget&&Q()};return i.jsx("dialog",{id:"settings-dialog",ref:p,className:"modal settings-modal","aria-modal":"true","aria-labelledby":"settings-title","aria-describedby":"settings-description",onCancel:$=>{$.preventDefault(),Q()},onClick:Ie,children:i.jsxs("form",{onSubmit:se,children:[i.jsxs("header",{className:"modal-header settings-header",children:[i.jsxs("div",{children:[i.jsx("span",{className:"eyebrow",children:"HOST SETTINGS"}),i.jsx("h2",{id:"settings-title",children:"设置"}),i.jsx("p",{id:"settings-description",children:"由本地 Host 读取、校验并原子保存。"})]}),i.jsx("button",{ref:f,type:"button",className:"icon-button",onClick:Q,"aria-label":"关闭设置",disabled:_.phase==="saving",children:i.jsx(Y,{name:"close"})})]}),i.jsxs("div",{className:"settings-layout",children:[i.jsx("nav",{className:"settings-navigation","aria-label":"设置类别",children:uy.map($=>i.jsxs("button",{type:"button",className:_.section===$.id?"active":"","aria-current":_.section===$.id?"page":void 0,onClick:()=>A({type:"select_section",section:$.id}),children:[i.jsx(Y,{name:$.icon,size:16}),i.jsx("span",{children:$.label})]},$.id))}),i.jsxs("div",{className:"settings-content",children:[i.jsx(vy,{state:o}),D?i.jsxs(i.Fragment,{children:[_.phase==="conflict"?i.jsx(yy,{draft:D,onAdopt:()=>{C.current=null,A({type:"adopt_server"})},onRebase:()=>{C.current=null,A({type:"rebase"})}}):null,_.message&&_.phase!=="conflict"?i.jsxs("div",{className:`settings-inline-message settings-message-${_.phase}`,role:_.phase==="rejected"?"alert":"status","aria-live":_.phase==="rejected"?"assertive":"polite",children:[i.jsx(Y,{name:_.phase==="success"?"check":"info",size:16}),i.jsx("span",{children:_.message})]}):null,_.section==="general"?i.jsx(fy,{document:D.base,draft:D.values,dirtyKeys:ee,saving:_.phase==="saving",onSet:($,pe)=>A({type:"set_value",key:$,value:pe}),onReset:$=>A({type:"reset_value",key:$})}):null,_.section==="models"?i.jsx(hy,{document:D.base,draft:D.values,dirtyKeys:ee,runtimeBusy:o.processing,saving:_.phase==="saving",onGoToSessionControls:d,onSet:($,pe)=>A({type:"set_value",key:$,value:pe}),onReset:$=>A({type:"reset_value",key:$})}):null,_.section==="permissions"?i.jsx(my,{document:D.base,value:D.values["permissions.toolConfirmation"],dirtyKeys:ee,runtimeBusy:o.processing,saving:_.phase==="saving",confirmAllow:L,allowAcknowledged:ie,onAllowRequested:()=>{B(!1),W(!0)},onAllowAcknowledged:B,onConfirmAllow:()=>{A({type:"set_value",key:"permissions.toolConfirmation",value:"allow"}),W(!1),B(!1)},onCancelAllow:()=>{W(!1),B(!1)},onSet:$=>A({type:"set_value",key:"permissions.toolConfirmation",value:$}),onReset:()=>A({type:"reset_value",key:"permissions.toolConfirmation"})}):null,_.section==="advanced"?i.jsx(gy,{state:o,document:D.base,documentAction:Se,onOpenDocument:()=>{re({tone:"status",message:"正在请求 Host 打开设置文件…"}),a.openSettingsDocument().then(()=>re({tone:"status",message:"已交给系统默认编辑器打开。"})).catch($=>re({tone:"error",message:$ instanceof Error?$.message:"无法打开设置文件。"}))},onRefresh:()=>{re({tone:"status",message:"正在重新载入 Host 设置…"}),a.refreshSettings().then(()=>re({tone:"status",message:"已载入最新设置。"})).catch($=>re({tone:"error",message:$ instanceof Error?$.message:"重新载入失败。"}))}}):null]}):i.jsxs("section",{className:"settings-empty","aria-live":"polite",children:[i.jsx(Y,{name:"refresh"}),i.jsx("h3",{children:"正在读取设置"}),i.jsx("p",{children:"等待本地 Host 返回可验证的设置快照。"})]})]})]}),_.confirmDiscard?i.jsxs("div",{className:"settings-discard-confirm",role:"alertdialog","aria-labelledby":"settings-discard-title","aria-describedby":"settings-discard-description",children:[i.jsxs("div",{children:[i.jsx("strong",{id:"settings-discard-title",children:"放弃未应用的更改?"}),i.jsxs("p",{id:"settings-discard-description",children:["你的 ",ee.length," 项草稿尚未写入 Host。"]})]}),i.jsxs("div",{children:[i.jsx("button",{ref:g,type:"button",className:"secondary-button",onClick:()=>{A({type:"cancel_discard"});const $=w.current;requestAnimationFrame(()=>$?.focus())},children:"继续编辑"}),i.jsx("button",{type:"button",className:"danger-ghost-button",onClick:xe,children:"放弃更改"})]})]}):null,i.jsxs("footer",{className:"modal-footer settings-footer",children:[i.jsx("span",{className:"settings-dirty-summary","aria-live":"polite",children:X?`${ee.length} 项未应用`:"没有未应用的更改"}),i.jsx("button",{type:"button",className:"secondary-button",onClick:Q,disabled:_.phase==="saving",children:"取消"}),i.jsx("button",{type:"submit",className:"primary-button",disabled:!D||!X||_.phase==="saving"||_.phase==="conflict"||oe||D.base.state!=="ready"||!D.base.writable,children:_.phase==="saving"?"应用中…":`应用 ${ee.length} 项`})]})]})})}function fy({document:n,draft:r,dirtyKeys:o,saving:a,onSet:d,onReset:p}){const f=n.sections.appearance.style,g=n.sections.appearance.theme,w=n.sections.appearance.motion;return i.jsxs(el,{heading:"通用",detail:"外观偏好由 Host 保存,并在所有 Workbench 窗口保持一致。",children:[i.jsx(fs,{id:"settings-style",label:"视觉风格",description:"选择内置的方块工坊外观,或切回经典工作台。",field:f,dirty:o.includes("appearance.style"),onReset:()=>p("appearance.style"),disabled:a||!rn(n,f),children:i.jsxs("select",{id:"settings-style",value:r["appearance.style"],disabled:a||!rn(n,f),onChange:x=>d("appearance.style",x.target.value),children:[i.jsx("option",{value:"orion-blocksmith",children:"方块工坊(内置,默认)"}),i.jsx("option",{value:"classic",children:"经典"})]})}),i.jsx(fs,{id:"settings-theme",label:"主题",description:"跟随系统或固定使用浅色、深色。",field:g,dirty:o.includes("appearance.theme"),onReset:()=>p("appearance.theme"),disabled:a||!rn(n,g),children:i.jsxs("select",{id:"settings-theme",value:r["appearance.theme"],disabled:a||!rn(n,g),onChange:x=>d("appearance.theme",x.target.value),children:[i.jsx("option",{value:"system",children:"跟随系统"}),i.jsx("option",{value:"dark",children:"深色"}),i.jsx("option",{value:"light",children:"浅色"})]})}),i.jsxs("figure",{className:"appearance-preview","data-preview-style":r["appearance.style"],"data-preview-theme":r["appearance.theme"],"aria-label":`外观预览:${r["appearance.style"]==="orion-blocksmith"?"方块工坊":"经典工作台"},${py(r["appearance.theme"])}`,children:[i.jsxs("div",{className:"appearance-preview-frame","aria-hidden":"true",children:[i.jsx("span",{className:"appearance-preview-rail"}),i.jsxs("span",{className:"appearance-preview-main",children:[i.jsx("i",{}),i.jsx("i",{})]}),i.jsx("span",{className:"appearance-preview-panel"})]}),i.jsx("figcaption",{children:"纯 CSS 预览 · 均为内置外观,不支持安装或卸载。"})]}),i.jsx(fs,{id:"settings-motion",label:"动效",description:"减少非必要动画,保留状态变化。",field:w,dirty:o.includes("appearance.motion"),onReset:()=>p("appearance.motion"),disabled:a||!rn(n,w),children:i.jsxs("select",{id:"settings-motion",value:r["appearance.motion"],disabled:a||!rn(n,w),onChange:x=>d("appearance.motion",x.target.value),children:[i.jsx("option",{value:"system",children:"跟随系统"}),i.jsx("option",{value:"reduced",children:"减少动效"})]})})]})}function py(n){return n==="light"?"浅色":n==="dark"?"深色":"跟随系统"}function hy({document:n,draft:r,dirtyKeys:o,saving:a,runtimeBusy:d,onSet:p,onReset:f,onGoToSessionControls:g}){const w=n.sections.defaults.model,x=n.sections.defaults.effort,E=n.models.some(C=>C.id===r["defaults.model"])?n.models:[{id:r["defaults.model"],label:r["defaults.model"]},...n.models];return i.jsxs(el,{heading:"模型与推理",detail:"项目默认值通常从下一逻辑请求开始生效;当前会话覆盖保持可见。",children:[d?i.jsx(vp,{detail:"当前回合正在运行;项目推理强度暂时锁定,默认模型仍可用于新会话。"}):null,i.jsx(fs,{id:"settings-model",label:"默认模型",description:"仅展示 Host 提供的可用模型标识。",field:w,dirty:o.includes("defaults.model"),onReset:()=>f("defaults.model"),disabled:a||!rn(n,w),children:i.jsx("select",{id:"settings-model",value:r["defaults.model"],disabled:a||!rn(n,w),onChange:C=>p("defaults.model",C.target.value),children:E.map(C=>i.jsxs("option",{value:C.id,children:[C.label,C.provider?` · ${C.provider}`:""]},C.id))})}),i.jsx(fs,{id:"settings-effort",label:"默认推理强度",description:"模型不支持的强度会由 Host 拒绝,不会静默降级。",field:x,dirty:o.includes("defaults.effort"),onReset:()=>f("defaults.effort"),disabled:a||d||!rn(n,x),children:i.jsx("select",{id:"settings-effort",value:r["defaults.effort"],disabled:a||d||!rn(n,x),onChange:C=>p("defaults.effort",C.target.value),children:cy.map(C=>i.jsx("option",{value:C,children:C==="auto"?"Auto":C},C))})}),n.currentSession?i.jsxs("div",{className:"settings-readonly-card","aria-label":"当前会话设置",children:[i.jsxs("div",{children:[i.jsx("span",{children:"当前会话"}),i.jsx("strong",{children:n.currentSession.model})]}),i.jsxs("div",{children:[i.jsx("span",{children:"Effort"}),i.jsx("strong",{children:n.currentSession.effort})]}),i.jsx("p",{children:n.currentSession.overridesProjectEffort?"当前会话覆盖了项目推理强度。":"当前会话沿用项目默认值。"}),i.jsx("small",{children:"可在会话输入框使用 /model 或 /effort 调整当前会话。"}),i.jsx("button",{type:"button",className:"text-button",onClick:g,"aria-controls":"orion-composer",children:"转到会话控制"})]}):null,i.jsxs("div",{className:"credential-note",children:[i.jsx(Y,{name:"check",size:16}),i.jsxs("div",{children:[i.jsx("strong",{children:"凭证始终留在 Host"}),i.jsx("p",{children:"浏览器只接收 ready / missing / unavailable 状态,不提供 API Key 输入框。"})]})]})]})}function my({document:n,value:r,dirtyKeys:o,runtimeBusy:a,saving:d,confirmAllow:p,allowAcknowledged:f,onAllowRequested:g,onAllowAcknowledged:w,onConfirmAllow:x,onCancelAllow:E,onSet:C,onReset:R}){const _=m.useRef(null),A=m.useRef(null),L=n.sections.permissions.toolConfirmation,W=d||a||!rn(n,L);return m.useEffect(()=>{p&&A.current?.focus()},[p]),i.jsxs(el,{heading:"权限",detail:"默认确认策略不改变工作区边界、硬拒绝和高风险保护。",children:[a?i.jsx(vp,{}):null,i.jsx(fs,{id:"settings-tool-confirmation",label:"工具确认",description:"Ask 逐次询问;Deny 默认拒绝;Allow 仍受 Host 安全策略约束。",field:L,labelControl:!1,dirty:o.includes("permissions.toolConfirmation"),onReset:R,disabled:W,children:i.jsxs("fieldset",{id:"settings-tool-confirmation",className:"segmented-field",disabled:W,children:[i.jsx("legend",{className:"sr-only",children:"默认工具确认策略"}),["ask","allow","deny"].map(ie=>i.jsxs("label",{children:[i.jsx("input",{ref:ie==="allow"?_:void 0,type:"radio",name:"settings-permission",value:ie,checked:r===ie,onChange:()=>ie==="allow"?g():C(ie)}),i.jsx("span",{children:ie==="ask"?"Ask":ie==="allow"?"Allow":"Deny"})]},ie))]})}),p?i.jsxs("div",{className:"settings-risk-confirm",role:"alertdialog","aria-labelledby":"allow-confirm-title","aria-describedby":"allow-confirm-description",children:[i.jsx("strong",{id:"allow-confirm-title",children:"确认启用 Allow"}),i.jsx("p",{id:"allow-confirm-description",children:"Orion 会减少常规工具询问,但硬拒绝、工作区边界和风险检查仍然生效。"}),i.jsxs("label",{children:[i.jsx("input",{ref:A,type:"checkbox",checked:f,onChange:ie=>w(ie.target.checked)}),i.jsx("span",{children:"我理解这会扩大默认授权范围"})]}),i.jsxs("div",{children:[i.jsx("button",{type:"button",className:"secondary-button",onClick:()=>{E(),requestAnimationFrame(()=>_.current?.focus())},children:"保持当前策略"}),i.jsx("button",{type:"button",className:"primary-button",disabled:!f,onClick:x,children:"启用 Allow"})]})]}):null,i.jsx("p",{className:"settings-help",children:"Agent 的 BUILD / PLAN / AUTO 模式与工具确认策略互相独立。"})]})}function gy({state:n,document:r,documentAction:o,onOpenDocument:a,onRefresh:d}){return i.jsxs(el,{heading:"高级",detail:"配置状态、凭证可用性和集成清单均为只读摘要。",children:[r.diagnostic?i.jsxs("div",{className:"settings-diagnostic",role:"alert",children:[i.jsx(Y,{name:"warning",size:16}),i.jsxs("div",{children:[i.jsx("strong",{children:Pn(r.diagnostic.code)}),i.jsx("p",{children:Pn(r.diagnostic.message)})]})]}):null,i.jsxs("dl",{className:"settings-facts",children:[i.jsxs("div",{children:[i.jsx("dt",{children:"状态"}),i.jsx("dd",{children:Ny(r.state)})]}),i.jsxs("div",{children:[i.jsx("dt",{children:"工作区"}),i.jsx("dd",{title:"仅显示目录名",children:pp(r.workspace)||"—"})]}),i.jsxs("div",{children:[i.jsx("dt",{children:"文档"}),i.jsx("dd",{children:r.hasDocument?"已创建":"尚未创建"})]}),i.jsxs("div",{children:[i.jsx("dt",{children:"版本"}),i.jsx("dd",{title:r.revision,children:yf(r.revision)})]}),i.jsxs("div",{children:[i.jsx("dt",{children:"Last good"}),i.jsx("dd",{children:n.settingsMirror.lastGood?yf(n.settingsMirror.lastGood.revision):"无"})]}),i.jsxs("div",{children:[i.jsx("dt",{children:"Mirror"}),i.jsxs("dd",{children:[n.settingsMirror.status," · g",n.settingsMirror.generation]})]})]}),i.jsxs("div",{className:"settings-advanced-actions",children:[i.jsxs("button",{type:"button",className:"secondary-button",onClick:d,children:[i.jsx(Y,{name:"refresh",size:15}),"重新载入设置"]}),i.jsxs("button",{type:"button",className:"secondary-button",onClick:a,children:[i.jsx(Y,{name:"edit",size:15}),"打开配置文件"]})]}),o?i.jsx("div",{className:`settings-document-action ${o.tone}`,role:o.tone==="error"?"alert":"status",children:o.message}):null,i.jsxs("section",{className:"settings-subsection","aria-labelledby":"credential-status-heading",children:[i.jsx("h4",{id:"credential-status-heading",children:"凭证状态"}),i.jsx("p",{children:"仅显示来源类别与可用性;密钥值、环境变量名和认证头不会进入浏览器。"}),r.credentials.length?i.jsx("ul",{className:"settings-readonly-list",children:r.credentials.map(p=>i.jsxs("li",{children:[i.jsx("span",{children:p.providerId}),i.jsx("span",{className:`settings-state-badge state-${p.state}`,children:p.state}),i.jsx("small",{children:by(p.source)})]},p.providerId))}):i.jsx("p",{className:"settings-empty-line",children:"Host 未报告凭证槽位。"})]}),i.jsxs("section",{className:"settings-subsection","aria-labelledby":"integration-status-heading",children:[i.jsx("h4",{id:"integration-status-heading",children:"只读能力"}),i.jsx("p",{children:"Skills 与 MCP 在专用配置中管理,此处用于确认 Host 实际加载结果。"}),i.jsxs("div",{className:"settings-capability-grid",children:[i.jsx(vf,{title:"Skills",count:n.skills.length,names:n.skills.map(p=>p.name)}),i.jsx(vf,{title:"MCP",count:n.mcpServers.length,names:n.mcpServers.map(p=>p.name)})]})]})]})}function vy({state:n}){const{settingsMirror:r}=n;return r.status==="loading"?i.jsxs("div",{className:"settings-availability",role:"status",children:[i.jsx(Y,{name:"refresh",size:15})," 正在与 Host 同步设置…"]}):r.error?i.jsxs("div",{className:"settings-availability error",role:"alert",children:[i.jsx(Y,{name:"warning",size:15})," 设置同步失败:",r.error," 当前显示上一次可用值。"]}):r.stale?i.jsxs("div",{className:"settings-availability",role:"status",children:[i.jsx(Y,{name:"refresh",size:15})," Host 已更新设置,正在载入;当前显示上一次可用值。"]}):r.document?.state==="invalid"?i.jsxs("div",{className:"settings-availability error",role:"alert",children:[i.jsx(Y,{name:"warning",size:15})," 设置文档无效。控件已锁定,并保留上一次可用值供参考。"]}):r.document?.state==="read-only"?i.jsxs("div",{className:"settings-availability",role:"status",children:[i.jsx(Y,{name:"info",size:15})," 设置当前为只读状态。"]}):r.document?.state==="unavailable"?i.jsxs("div",{className:"settings-availability error",role:"alert",children:[i.jsx(Y,{name:"warning",size:15})," Host 设置暂不可用;当前显示上一次可用值。"]}):null}function el({heading:n,detail:r,children:o}){return i.jsxs("section",{className:"settings-section","aria-labelledby":`settings-${xf(n)}-heading`,children:[i.jsxs("header",{className:"settings-section-heading",children:[i.jsx("h3",{id:`settings-${xf(n)}-heading`,children:n}),i.jsx("p",{children:r})]}),i.jsx("div",{className:"settings-section-fields",children:o})]})}function fs({id:n,label:r,description:o,field:a,labelControl:d=!0,dirty:p,disabled:f,onReset:g,children:w}){return i.jsxs("div",{className:`settings-field-card ${p?"dirty":""}`,children:[i.jsxs("div",{className:"settings-field-copy",children:[d?i.jsx("label",{htmlFor:n,children:r}):i.jsx("strong",{children:r}),i.jsx("p",{children:o}),i.jsxs("div",{className:"settings-field-meta","aria-label":`${r} 设置来源`,children:[i.jsx("span",{children:wy(a.source)}),i.jsx("span",{children:ky(a.scope)}),i.jsx("span",{children:jy(a.applies)}),p?i.jsx("strong",{children:"草稿"}):null]}),a.blockedReason?i.jsx("small",{className:"settings-blocked-reason",children:Sy(a.blockedReason)}):null]}),i.jsxs("div",{className:"settings-field-control",children:[w,i.jsx("button",{type:"button",className:"text-button",onClick:g,disabled:f||a.explicitValue===void 0&&!p,"aria-label":`重置${r}为继承值`,children:"重置"})]})]})}function yy({draft:n,onAdopt:r,onRebase:o}){const a=oy(n),d=Rr(n),p=n.serverLatest;return i.jsxs("div",{className:"settings-conflict",role:"alert",children:[i.jsx(Y,{name:"warning",size:17}),i.jsxs("div",{children:[i.jsx("strong",{children:"Host 设置已在其他位置更新"}),i.jsxs("p",{children:["草稿仍被保留",a.length?`;${a.length} 个草稿字段的服务器值发生变化`:"","。"]}),p?i.jsxs("div",{className:"settings-conflict-values","aria-label":"服务器值与我的草稿",children:[i.jsxs("div",{className:"settings-conflict-value-heading","aria-hidden":"true",children:[i.jsx("span",{children:"字段"}),i.jsx("span",{children:"服务器最新值"}),i.jsx("span",{children:"我的草稿"})]}),d.map(f=>i.jsxs("div",{children:[i.jsx("strong",{children:Cy(f)}),i.jsx("span",{"data-label":"服务器最新值",children:String(_n(p,f))}),i.jsxs("span",{"data-label":"我的草稿",children:[String(n.values[f]),n.intents[f]?.op==="unset"?"(重置)":""]})]},f))]}):null,i.jsxs("div",{children:[i.jsx("button",{type:"button",className:"secondary-button",onClick:r,children:"采用服务器值"}),i.jsx("button",{type:"button",className:"primary-button",onClick:o,children:"基于最新值重试"})]})]})]})}function vp({detail:n="当前回合正在运行;相关设置会在 Runtime 空闲后解锁。"}={}){return i.jsxs("div",{className:"settings-busy",role:"status",children:[i.jsx(Y,{name:"activity",size:15})," ",n]})}function vf({title:n,count:r,names:o}){return i.jsxs("div",{className:"settings-capability-card",children:[i.jsx("span",{children:n}),i.jsx("strong",{children:r}),i.jsx("small",{children:o.slice(0,3).join(" · ")||"未加载"})]})}function rn(n,r){return n.state==="ready"&&n.writable&&r.writable&&!r.blockedReason}function xy(n,r){const o=r instanceof Error?r.message:"Host 拒绝了设置变更。";switch(n){case"settings_revision_conflict":return"设置已在其他位置更新。你的草稿没有丢失。";case"runtime_busy":return"Runtime 正在处理任务。请等待当前回合结束后再次应用。";case"settings_document_invalid":return"配置文件无效。请在高级页查看 Host 提供的安全诊断。";case"settings_write_forbidden":return"当前设置来源为只读,Host 未执行任何变更。";case"request_id_conflict":return"保存请求标识与先前内容冲突,请重新应用。";case"settings_recovery_required":return"Host 报告设置冲突,但最新设置暂时无法载入。草稿已保留,请重新载入后再试。";case"network":return"未能确认 Host 是否收到请求;保留草稿,可安全重试。";default:return o}}function wy(n){return`来源:${n==="internal"?"内置":n==="model"?"模型":n==="global"?"全局":n==="project"?"项目":"会话"}`}function ky(n){return`作用域:${n==="global"?"全局":n==="project"?"项目":"会话"}`}function jy(n){return`生效:${n==="live"?"立即":n==="next-logical-request"?"下次请求":n==="new-session"?"新会话":"重启后"}`}function Sy(n){return n==="runtime_busy"?"Runtime 正在运行,暂不可修改。":n==="read_only"?"此字段来自只读配置。":"设置文档无效,修复前不可修改。"}function Cy(n){return n==="appearance.style"?"视觉风格":n==="appearance.theme"?"主题":n==="appearance.motion"?"动效":n==="defaults.model"?"默认模型":n==="defaults.effort"?"默认推理强度":"工具确认"}function by(n){return n==="environment"?"环境提供":n==="legacy"?"Host 旧配置":"未配置"}function Ny(n){return n==="ready"?"可用":n==="invalid"?"无效":n==="read-only"?"只读":"不可用"}function yf(n){return n.length>24?`${n.slice(0,20)}…`:n}function xf(n){return n.replace(/[^a-z0-9]+/gi,"-").replace(/^-|-$/g,"").toLowerCase()||"section"}function wf(){return typeof document>"u"?null:document.activeElement}const Iy=["导航","面板","编辑","浮层"],yp=Object.freeze([{id:"toggle-project-navigation",tokens:["Mod","B"],group:"导航",description:"展开或折叠项目导航"},{id:"toggle-work-panel",tokens:["Mod","Shift","B"],group:"导航",description:"展开或折叠右侧工作面板"},{id:"focus-work-panel-1",tokens:["Mod","Shift","1"],group:"面板",description:"切换到 Agent 面板"},{id:"focus-work-panel-2",tokens:["Mod","Shift","2"],group:"面板",description:"切换到审阅面板"},{id:"focus-work-panel-3",tokens:["Mod","Shift","3"],group:"面板",description:"切换到终端面板"},{id:"focus-work-panel-4",tokens:["Mod","Shift","4"],group:"面板",description:"切换到文件面板"},{id:"focus-work-panel-5",tokens:["Mod","Shift","5"],group:"面板",description:"切换到 Git 面板"},{id:"work-panel-tab-nav",tokens:["←","→"],group:"面板",description:"在面板标签之间移动(Home / End 跳到首尾)"},{id:"resize-panel",tokens:["←","→"],group:"面板",description:"聚焦分隔条后按 2% 步长调整宽度,配合 Shift 为 10%"},{id:"resize-panel-reset",tokens:["Enter"],group:"面板",description:"分隔条聚焦时恢复默认宽度(Home 最窄,End 最宽)"},{id:"submit-composer",tokens:["Enter"],group:"编辑",description:"在输入框中发送当前内容"},{id:"newline-composer",tokens:["Shift","Enter"],group:"编辑",description:"在输入框中插入换行而不发送"},{id:"force-submit-composer",tokens:["Mod","Enter"],group:"编辑",description:"Agent 运行中时立即提交(否则进入队列)"},{id:"project-tree-nav",tokens:["↑","↓"],group:"面板",description:"在项目与会话树中移动焦点"},{id:"close-overlay",tokens:["Esc"],group:"浮层",description:"关闭抽屉、对话框或快捷键面板"},{id:"open-shortcut-help",tokens:["Mod","/"],group:"浮层",description:"打开或关闭本快捷键面板"}]);function _y(){if(typeof navigator>"u")return!1;const n=navigator.platform??"";return/mac|iphone|ipad|ipod/i.test(n)||/Mac/i.test(navigator.userAgent??"")}function Ey(n,r=_y()){return n.map(a=>a==="Mod"?r?"⌘":"Ctrl":a==="Shift"?r?"⇧":"Shift":a==="Alt"?r?"⌥":"Alt":a.toUpperCase()).join(r?" ":"+")}function Uo(n,r){let o=!1,a=!1,d=!1,p=null;for(const x of r)x==="Mod"?o=!0:x==="Shift"?a=!0:x==="Alt"?d=!0:p=x;if(o!==(n.metaKey||n.ctrlKey)||a!==n.shiftKey||d!==n.altKey||p===null)return!1;const f=n.code??"";if(/^[a-z]$/i.test(p))return f===`Key${p.toUpperCase()}`;if(/^[0-9]$/.test(p))return f===`Digit${p}`;const w=Object.freeze({esc:"escape"})[p.toLowerCase()]??p.toLowerCase();return n.key.toLowerCase()===w}function Ho(n){return yp.find(r=>r.id===n)}function Py(){return Iy.map(n=>({group:n,items:yp.filter(r=>r.group===n)})).filter(n=>n.items.length>0)}function Ry({open:n,onClose:r}){const o=m.useRef(null),a="shortcut-help-title";m.useEffect(()=>{const f=o.current;f&&(n&&!f.open&&f.showModal(),!n&&f.open&&f.close())},[n]);const d=f=>{f.target===f.currentTarget&&r()},p=Py();return i.jsxs("dialog",{ref:o,id:"shortcut-help",className:"modal shortcut-help","aria-labelledby":a,onCancel:f=>{f.preventDefault(),r()},onClose:r,onClick:d,children:[i.jsxs("header",{className:"shortcut-help-header",children:[i.jsxs("div",{children:[i.jsx("span",{className:"eyebrow",children:"KEYBOARD"}),i.jsx("h2",{id:a,children:"键盘快捷键"})]}),i.jsx("button",{type:"button",className:"icon-button",onClick:r,"aria-label":"关闭快捷键面板",children:i.jsx(Y,{name:"close",size:15})})]}),i.jsx("div",{className:"shortcut-help-body",children:p.map(({group:f,items:g})=>i.jsxs("section",{className:"shortcut-help-group",children:[i.jsx("h3",{children:f}),i.jsx("dl",{children:g.map(w=>i.jsxs("div",{className:"shortcut-row",children:[i.jsx("dt",{children:w.description}),i.jsx("dd",{children:i.jsx("kbd",{children:Ey(w.tokens)})})]},w.id))})]},f))}),i.jsx("footer",{className:"shortcut-help-footer",children:i.jsxs("p",{children:["按 ",i.jsx("kbd",{children:"Esc"})," 关闭本面板,焦点会回到打开它的位置。"]})})]})}const Ty="modulepreload",Oy=function(n){return"/"+n},kf={},tl=function(r,o,a){let d=Promise.resolve();if(o&&o.length>0){let w=function(x){return Promise.all(x.map(E=>Promise.resolve(E).then(C=>({status:"fulfilled",value:C}),C=>({status:"rejected",reason:C}))))};document.getElementsByTagName("link");const f=document.querySelector("meta[property=csp-nonce]"),g=f?.nonce||f?.getAttribute("nonce");d=w(o.map(x=>{if(x=Oy(x),x in kf)return;kf[x]=!0;const E=x.endsWith(".css"),C=E?'[rel="stylesheet"]':"";if(document.querySelector(`link[href="${x}"]${C}`))return;const R=document.createElement("link");if(R.rel=E?"stylesheet":Ty,E||(R.as="script"),R.crossOrigin="",R.href=x,g&&R.setAttribute("nonce",g),document.head.appendChild(R),E)return new Promise((_,A)=>{R.addEventListener("load",_),R.addEventListener("error",()=>A(new Error(`Unable to preload CSS for ${x}`)))})}))}function p(f){const g=new Event("vite:preloadError",{cancelable:!0});if(g.payload=f,window.dispatchEvent(g),!g.defaultPrevented)throw f}return d.then(f=>{for(const g of f||[])g.status==="rejected"&&p(g.reason);return r().catch(p)})},Nr=[{id:"goal",label:"Goal",icon:"goal"},{id:"activity",label:"活动",icon:"activity"},{id:"integrations",label:"能力",icon:"branch"},{id:"diagnostics",label:"诊断",icon:"diagnostics"}];function My({state:n,actions:r,tab:o,onTabChange:a}){const d=m.useId(),p=f=>{if(f.key!=="ArrowLeft"&&f.key!=="ArrowRight"&&f.key!=="Home"&&f.key!=="End")return;f.preventDefault();const g=Nr.findIndex(x=>x.id===o),w=f.key==="Home"?0:f.key==="End"?Nr.length-1:(g+(f.key==="ArrowRight"?1:-1)+Nr.length)%Nr.length;a(Nr[w].id),requestAnimationFrame(()=>document.getElementById(`${d}-tab-${Nr[w].id}`)?.focus())};return i.jsxs("div",{className:"agent-panel",children:[i.jsx("div",{className:"inspector-tabs",role:"tablist","aria-label":"详情类别",onKeyDown:p,children:Nr.map(f=>i.jsxs("button",{id:`${d}-tab-${f.id}`,type:"button",role:"tab","aria-selected":o===f.id,"aria-controls":`${d}-panel`,tabIndex:o===f.id?0:-1,onClick:()=>a(f.id),children:[i.jsx(Y,{name:f.icon,size:15}),i.jsx("span",{children:f.label})]},f.id))}),i.jsxs("div",{id:`${d}-panel`,className:"inspector-body",role:"tabpanel","aria-labelledby":`${d}-tab-${o}`,tabIndex:0,children:[o==="goal"?i.jsx(Ly,{state:n,actions:r}):null,o==="activity"?i.jsx($y,{state:n,actions:r}):null,o==="integrations"?i.jsx(Wy,{state:n,actions:r}):null,o==="diagnostics"?i.jsx(Fy,{state:n,actions:r}):null]})]})}function Ly({state:n,actions:r}){const o=n.goal,a=n.plan?.body??(typeof n.diagnostics?.plan=="string"?n.diagnostics.plan:""),d=!!n.pendingAction,p=d||n.connection!=="live"||!Pr(n),[f,g]=m.useState(!1);if(!o)return i.jsxs("div",{className:"inspector-stack",children:[i.jsxs("section",{className:"inspector-empty-card",children:[i.jsx("div",{className:"empty-mini-icon",children:i.jsx(Y,{name:"goal"})}),i.jsx("h3",{children:"没有活动 Goal"}),i.jsx("p",{children:"Goal 会跨回合保存目标、计划、证据和预算状态。"})]}),i.jsx(Ay,{onCreate:x=>r.controlGoal("create",x),disabled:p||!n.activeSessionId}),i.jsx(jf,{mode:n.mode.baseMode,plan:a})]});const w=o.criteria?.total?Math.round(o.criteria.passed/o.criteria.total*100):0;return i.jsxs("div",{className:"inspector-stack",children:[i.jsxs("section",{className:"goal-card",children:[i.jsxs("header",{children:[i.jsx("span",{className:`goal-status status-${o.status}`,children:o.status.replace(/_/g," ")}),i.jsxs("span",{children:["rev ",o.revision]})]}),i.jsx("h3",{children:o.objective}),o.criteria?i.jsxs("div",{className:"goal-progress",children:[i.jsxs("div",{children:[i.jsx("span",{children:"成功条件"}),i.jsxs("strong",{children:[o.criteria.passed," / ",o.criteria.total]})]}),i.jsx("progress",{value:o.criteria.passed,max:Math.max(1,o.criteria.total),"aria-label":`Goal 条件完成 ${w}%`}),i.jsxs("div",{className:"goal-breakdown",children:[i.jsxs("span",{children:[w,"% 完成"]}),i.jsxs("span",{children:[o.criteria.failed," 失败 · ",o.criteria.stale," 过期"]})]})]}):null,i.jsxs("dl",{className:"metric-grid",children:[i.jsxs("div",{children:[i.jsx("dt",{children:"Tokens"}),i.jsxs("dd",{children:[Sf(o.tokensUsed),o.tokenBudget?` / ${Sf(o.tokenBudget)}`:""]})]}),i.jsxs("div",{children:[i.jsx("dt",{children:"用时"}),i.jsx("dd",{children:qy(o.timeUsedMs)})]}),i.jsxs("div",{children:[i.jsx("dt",{children:"续跑"}),i.jsx("dd",{children:o.continuationCount})]}),i.jsxs("div",{children:[i.jsx("dt",{children:"Plan"}),i.jsx("dd",{children:o.planRevision?`r${o.planRevision}`:"—"})]})]}),o.nextAction?i.jsxs("div",{className:"next-action",children:[i.jsx("span",{children:"下一步"}),i.jsx("p",{children:o.nextAction})]}):null,o.auditRemaining?.length?i.jsxs("details",{className:"remaining-audit",children:[i.jsxs("summary",{children:["仍需验证 ",o.auditRemaining.length," 项"]}),i.jsx("ul",{children:o.auditRemaining.map((x,E)=>i.jsx("li",{children:x},`${x}-${E}`))})]}):null,i.jsxs("div",{className:"goal-actions",children:[o.status==="active"?i.jsxs("button",{type:"button",className:"secondary-button",onClick:()=>{r.controlGoal("pause")},disabled:p,children:[i.jsx(Y,{name:"pause",size:14}),"暂停"]}):o.status!=="complete"?i.jsxs("button",{type:"button",className:"secondary-button",onClick:()=>{r.controlGoal("resume")},disabled:p,children:[i.jsx(Y,{name:"refresh",size:14}),"恢复"]}):null,i.jsx("button",{type:"button",className:"danger-ghost-button",onClick:()=>g(!0),disabled:p,children:"清除"})]})]}),n.goalEvidence.length>0?i.jsxs("section",{className:"inspector-section",children:[i.jsxs("div",{className:"inspector-section-heading",children:[i.jsx("h3",{children:"最近证据"}),i.jsx("span",{children:n.goalEvidence.length})]}),i.jsx("ul",{className:"evidence-list",children:n.goalEvidence.slice(-8).reverse().map(x=>i.jsxs("li",{children:[i.jsx("span",{className:`evidence-state ${x.result}`,"aria-hidden":"true",children:i.jsx(Y,{name:x.result==="passed"?"check":x.result==="failed"?"close":"more",size:12})}),i.jsxs("div",{children:[i.jsx("strong",{children:x.subject}),i.jsxs("span",{children:[x.kind," · ",x.result]})]})]},x.id))})]}):null,i.jsx(jf,{mode:n.mode.baseMode,plan:a,goalPhase:o.planPhase}),n.goalActivity.length>0?i.jsxs("section",{className:"inspector-section",children:[i.jsx("div",{className:"inspector-section-heading",children:i.jsx("h3",{children:"Goal 轨迹"})}),i.jsx("ol",{className:"compact-timeline",children:n.goalActivity.slice(-10).reverse().map((x,E)=>i.jsxs("li",{children:[i.jsx("span",{className:"timeline-pin","aria-hidden":"true"}),i.jsxs("div",{children:[i.jsx("strong",{children:x.type.replace(/_/g," ")}),i.jsx("p",{children:x.message}),i.jsx("time",{children:Uy(x.timestamp)})]})]},`${x.timestamp}-${E}`))})]}):null,i.jsx(ey,{open:f,onClose:()=>g(!1),title:"清除此 Goal?",body:"Goal 的目标与进度会从当前会话移除,会话记录仍会保留。",confirmLabel:"清除 Goal",danger:!0,pending:d,onConfirm:()=>r.controlGoal("clear")})]})}function Ay({onCreate:n,disabled:r}){const[o,a]=m.useState(""),d=async p=>{if(p.preventDefault(),!!o.trim())try{await n(o.trim()),a("")}catch{}};return i.jsxs("form",{className:"goal-create",onSubmit:d,children:[i.jsx("label",{htmlFor:"goal-objective",children:"创建 Goal"}),i.jsx("textarea",{id:"goal-objective",rows:3,value:o,onChange:p=>a(p.target.value),placeholder:"输入一个可验证、可持续执行的目标…",disabled:r}),i.jsxs("button",{type:"submit",className:"primary-button",disabled:r||!o.trim(),children:[i.jsx(Y,{name:"goal",size:15}),"开始 Goal"]})]})}function jf({mode:n,plan:r,goalPhase:o}){return i.jsxs("section",{className:"inspector-section plan-section",children:[i.jsxs("div",{className:"inspector-section-heading",children:[i.jsx("h3",{children:"Plan"}),i.jsx("span",{className:`mode-badge mode-${n}`,children:n==="plan"?"PLAN MODE":o||"READ ONLY"})]}),r?i.jsx(li,{children:r}):i.jsx("p",{className:"muted-copy",children:"还没有保存的计划。切换到 PLAN 模式后提交任务,Runtime 会生成并保存计划。"})]})}function $y({state:n,actions:r}){const o=m.useMemo(()=>n.tools.filter(a=>By(a)),[n.tools]);return i.jsxs("div",{className:"inspector-stack",children:[i.jsxs("section",{className:"inspector-section",children:[i.jsxs("div",{className:"inspector-section-heading",children:[i.jsx("h3",{children:"工具调用"}),i.jsx("span",{children:n.tools.length})]}),n.tools.length?i.jsx("ul",{className:"activity-list",children:n.tools.slice(-20).reverse().map(a=>i.jsx(Dy,{tool:a},a.callId))}):i.jsx(Do,{text:"还没有工具活动"})]}),i.jsx(zy,{state:n,actions:r}),i.jsxs("section",{className:"inspector-section",children:[i.jsxs("div",{className:"inspector-section-heading",children:[i.jsx("h3",{children:"文件变化"}),i.jsx("span",{children:o.length+n.edits.length})]}),o.length||n.edits.length?i.jsxs("ul",{className:"change-list",children:[n.edits.slice(-8).reverse().map(a=>i.jsxs("li",{children:[i.jsx(Y,{name:"edit",size:14}),i.jsxs("div",{children:[i.jsx("strong",{children:xp(a.request.path)}),i.jsxs("span",{children:[a.request.kind," · ",a.request.candidates.length," candidates"]})]})]},a.eventId)),o.slice(-8).reverse().map(a=>i.jsxs("li",{children:[i.jsx(Y,{name:"code",size:14}),i.jsxs("div",{children:[i.jsx("strong",{children:a.name}),i.jsx("span",{children:a.summary||a.state})]})]},a.callId))]}):i.jsx(Do,{text:"还没有文件变化"})]}),i.jsxs("section",{className:"inspector-section",children:[i.jsxs("div",{className:"inspector-section-heading",children:[i.jsx("h3",{children:"子代理与研究"}),i.jsx("span",{children:n.subtasks.length+n.research.length})]}),n.subtasks.length?i.jsx("ul",{className:"activity-list",children:n.subtasks.slice(-8).reverse().map(a=>i.jsxs("li",{children:[i.jsx("span",{className:`state-dot state-${a.state}`,"aria-hidden":"true"}),i.jsxs("div",{children:[i.jsx("strong",{children:a.role}),i.jsx("span",{children:a.objective})]}),i.jsx("small",{children:a.state})]},a.taskId))}):null,n.research.length?i.jsx("ul",{className:"activity-list",children:n.research.slice(-6).reverse().map(a=>i.jsxs("li",{children:[i.jsx("span",{className:`state-dot state-${a.stage}`,"aria-hidden":"true"}),i.jsxs("div",{children:[i.jsx("strong",{children:"Research"}),i.jsx("span",{children:a.objective||a.packetId})]}),i.jsx("small",{children:a.stage})]},a.packetId))}):null,!n.subtasks.length&&!n.research.length?i.jsx(Do,{text:"还没有子代理或研究活动"}):null]})]})}function Dy({tool:n}){return i.jsxs("li",{children:[i.jsx("span",{className:`state-dot state-${n.state}`,"aria-hidden":"true"}),i.jsxs("div",{children:[i.jsx("strong",{children:n.name}),i.jsx("span",{children:n.summary||`调用 #${n.sequence}`})]}),i.jsx("small",{children:n.duration!==void 0?`${Math.round(n.duration)}ms`:n.state})]})}function zy({state:n,actions:r}){const[o,a]=m.useState(""),[d,p]=m.useState(""),[f,g]=m.useState(),[w,x]=m.useState(0),[E,C]=m.useState(!1),[R,_]=m.useState("");m.useEffect(()=>{a(""),p(""),g(void 0),_("")},[n.activeSessionId]);const A=async(L,W=0)=>{C(!0),_("");try{const ie=await r.readToolDetail(L,W);a(L),p(B=>W===0?ie.content:`${B}${ie.content}`),g(ie.nextOffsetBytes),x(ie.totalBytes)}catch(ie){_(ie instanceof Error?ie.message:"工具详情读取失败。")}finally{C(!1)}};return i.jsxs("section",{className:"inspector-section tool-detail-browser",children:[i.jsxs("div",{className:"inspector-section-heading",children:[i.jsx("h3",{children:"持久化输出"}),i.jsxs("button",{type:"button",className:"icon-text-button",onClick:()=>{r.refreshToolDetails()},disabled:!!n.pendingAction,children:[i.jsx(Y,{name:"refresh",size:13}),"刷新"]})]}),n.toolDetails.length?i.jsx("div",{className:"detail-selector",role:"group","aria-label":"工具输出详情",children:n.toolDetails.slice(-20).reverse().map(L=>i.jsxs("button",{type:"button",className:o&&L.artifactId===o?"active":"",disabled:!L.artifactId||E,onClick:()=>L.artifactId&&void A(L.artifactId),children:[i.jsxs("span",{children:[i.jsx("strong",{children:L.toolName}),i.jsxs("small",{children:["#",L.sequence," · ",Cf(L.outputBytes)]})]}),i.jsx(Y,{name:"chevron",size:13})]},`${L.callId}:${L.sequence}`))}):i.jsx(Do,{text:"没有可读取的持久化输出"}),n.toolDetailNextCursor?i.jsx("button",{type:"button",className:"text-button",onClick:()=>{r.loadMoreToolDetails()},disabled:!!n.pendingAction,children:"加载更多输出记录"}):null,R?i.jsx("p",{className:"field-error",role:"alert",children:R}):null,o?i.jsxs("div",{className:"detail-output",children:[i.jsxs("div",{children:[i.jsxs("span",{children:[Cf(w)," · 已脱敏"]}),i.jsx("code",{children:o})]}),i.jsx("pre",{tabIndex:0,children:Pn(d)}),f!==void 0?i.jsx("button",{type:"button",className:"secondary-button",disabled:E,onClick:()=>{A(o,f)},children:E?"读取中…":"加载更多"}):null]}):null]})}function Wy({state:n,actions:r}){const o=n.skills,a=n.mcpServers;return i.jsxs("div",{className:"inspector-stack",children:[i.jsxs("section",{className:"capability-card",children:[i.jsxs("header",{children:[i.jsx("span",{className:"capability-icon",children:i.jsx(Y,{name:"spark",size:17})}),i.jsxs("div",{children:[i.jsx("h3",{children:"Skills"}),i.jsx("p",{children:"安全描述符,只读"})]}),i.jsx("span",{className:`readiness-pill ${o.length?"ready":""}`,children:o.length?`${o.length} 可用`:"未发现"})]}),o.length?i.jsx("ul",{className:"skill-list",children:o.map(d=>i.jsxs("li",{children:[i.jsxs("div",{children:[i.jsx("strong",{children:d.name}),i.jsxs("span",{children:[d.sourceScope," · ",d.providerId]})]}),i.jsx("p",{children:d.description}),d.requestedCapabilities.length?i.jsx("small",{children:d.requestedCapabilities.join(" · ")}):null]},d.id))}):i.jsx("p",{className:"muted-copy",children:"当前 Runtime 没有公开可用的 Skill 描述符。"})]}),i.jsxs("section",{className:"capability-card",children:[i.jsxs("header",{children:[i.jsx("span",{className:"capability-icon mcp",children:i.jsx(Y,{name:"branch",size:17})}),i.jsxs("div",{children:[i.jsx("h3",{children:"MCP Servers"}),i.jsx("p",{children:"只读配置与运行状态"})]}),i.jsx("span",{className:`readiness-pill ${a.length?"ready":""}`,children:a.length?`${a.length} 已配置`:"未配置"})]}),a.length?i.jsx("ul",{className:"server-list",children:a.map(d=>i.jsxs("li",{children:[i.jsx("span",{className:`state-dot state-${d.state}`,"aria-hidden":"true"}),i.jsxs("div",{children:[i.jsx("code",{children:d.name}),i.jsxs("small",{children:[d.transport," · ",d.toolCount," tools"]})]}),i.jsx("span",{children:d.disabled?"Disabled":d.state})]},d.id))}):i.jsx("p",{className:"muted-copy",children:"没有可用的 MCP Server。浏览器不会接收环境变量或认证 Header。"})]}),n.skillNextCursor||n.mcpNextCursor?i.jsx("button",{type:"button",className:"secondary-button",onClick:()=>{r.loadMoreCapabilities()},disabled:!!n.pendingAction,children:"加载更多能力"}):null,i.jsxs("section",{className:"security-note",children:[i.jsx(Y,{name:"info",size:16}),i.jsxs("p",{children:[i.jsx("strong",{children:"能力边界由 Runtime 管理。"})," Web 端只展示描述符和状态,不加载外部插件代码,也不会绕过 ToolGateway。"]})]})]})}function Fy({state:n,actions:r}){const o=n.diagnostics,a=Qo(n);return i.jsxs("div",{className:"inspector-stack",children:[i.jsxs("div",{className:"diagnostics-toolbar",children:[i.jsxs("div",{children:[i.jsx("span",{className:`connection-dot ${n.connection}`,"aria-hidden":"true"}),i.jsx("strong",{children:Hy(n.connection)})]}),i.jsxs("button",{type:"button",className:"icon-text-button",onClick:()=>{r.refreshDiagnostics()},disabled:!!n.pendingAction,children:[i.jsx(Y,{name:"refresh",size:14}),"刷新"]})]}),i.jsxs("section",{className:"inspector-section",children:[i.jsx("div",{className:"inspector-section-heading",children:i.jsx("h3",{children:"Runtime"})}),i.jsxs("dl",{className:"diagnostic-list",children:[i.jsx(Ct,{label:"版本",value:n.bootstrap?.productVersion??"—"}),i.jsx(Ct,{label:"工作区",value:xp(n.workspace)||"—"}),i.jsx(Ct,{label:"会话",value:n.activeSessionId?.slice(0,12)??"未选择"}),i.jsx(Ct,{label:"模式",value:String(o?.agentMode??n.mode.baseMode)}),i.jsx(Ct,{label:"权限",value:String(o?.permissionMode??n.settings?.sections.permissions.toolConfirmation.effectiveValue??"—")}),i.jsx(Ct,{label:"事件游标",value:`${n.lastCursor}`}),i.jsx(Ct,{label:"事件 UUID",value:n.lastEventId?.slice(0,12)??"—"}),i.jsx(Ct,{label:"会话快照",value:a.status}),i.jsx(Ct,{label:"保留事件",value:`${o?.eventStream?.retained??"—"}`}),i.jsx(Ct,{label:"快照请求",value:o?.session?`${o.session.snapshotRequests} 次 / 失败 ${o.session.snapshotFailures}`:"—"}),i.jsx(Ct,{label:"快照时延",value:o?.session?`${o.session.snapshotLastMs} ms(累计 ${o.session.snapshotTotalMs} ms)`:"—"}),i.jsx(Ct,{label:"Session actor",value:o?.session?`${o.session.actors.actorsCreated} 分配 / ${o.session.actors.actorsEvicted} LRU 驱逐`:"—"}),i.jsx(Ct,{label:"control plane",value:o?.session?`${o.session.controlPlaneInstalls} 次装载 / ${o.session.controlPlaneShutdowns} 次关闭`:"—"}),i.jsx(Ct,{label:"浏览器切换",value:`${n.clientTelemetry.sessionSwitches} 次 / 缓存命中 ${n.clientTelemetry.snapshotCacheHits} / 加载 ${n.clientTelemetry.snapshotLoads}`})]})]}),o?.contextUsage?i.jsx(To,{title:"Context usage",value:o.contextUsage}):null,o?.tokenUsage?i.jsx(To,{title:"Token usage",value:o.tokenUsage}):null,o?.harness?i.jsx(To,{title:"Harness",value:o.harness}):null,n.loopStats?i.jsx(To,{title:"Loop statistics",value:n.loopStats}):null,i.jsxs("section",{className:"security-note",children:[i.jsx(Y,{name:"check",size:16}),i.jsx("p",{title:"API Key、认证 Header 和环境值不会返回浏览器。",children:"诊断载荷由 Host 脱敏。"})]})]})}function Ct({label:n,value:r}){return i.jsxs("div",{children:[i.jsx("dt",{children:n}),i.jsx("dd",{title:r,children:r})]})}function To({title:n,value:r}){return i.jsxs("details",{className:"json-section",children:[i.jsx("summary",{children:n}),i.jsx("pre",{tabIndex:0,children:uc(r,12e3)})]})}function Do({text:n}){return i.jsxs("div",{className:"empty-small",children:[i.jsx("span",{className:"empty-line","aria-hidden":"true"}),i.jsx("p",{children:n})]})}function By(n){return/write|edit|patch|delete|move|rename|mkdir|create/i.test(n.name)}function xp(n){const r=n.replace(/[\\/]+$/,"");return r.split(/[\\/]/).filter(Boolean).at(-1)??r}function Sf(n){return new Intl.NumberFormat("zh-CN",{notation:n>99999?"compact":"standard"}).format(n)}function qy(n){return n<1e3?`${Math.round(n)}ms`:n<6e4?`${Math.round(n/1e3)}s`:`${Math.floor(n/6e4)}m ${Math.round(n%6e4/1e3)}s`}function Cf(n){return n<1024?`${n} B`:n<1048576?`${(n/1024).toFixed(1)} KB`:`${(n/1048576).toFixed(1)} MB`}function Uy(n){const r=Date.parse(n);return Number.isFinite(r)?new Date(r).toLocaleTimeString("zh-CN",{hour:"2-digit",minute:"2-digit"}):""}function Hy(n){return n==="live"?"本地 Web Host 连接正常":n==="offline"?"浏览器离线":n==="replay-required"?"Web Host 事件流需要恢复":n==="closed"?"本地 Web Host 已关闭":n==="connecting"?"正在连接本地 Web Host":"正在重新连接本地 Web Host"}function Vy({width:n,onPreview:r,onCommit:o,maxWidth:a=op}){return i.jsx(sp,{side:"right",className:"work-panel-resize-handle",minWidth:mc,maxWidth:a,defaultWidth:gc,label:"拖动或按方向键调整工作面板宽度",width:n,controls:"work-panel-detail",onPreview:r,onCommit:o})}const Ky=["agent","review","terminal","files","git"],Gy=Object.freeze({agent:{label:"Agent",icon:"spark",kind:"task"},review:{label:"审阅",icon:"edit",kind:"resource"},terminal:{label:"终端",icon:"terminal",kind:"resource"},files:{label:"文件",icon:"workspace",kind:"resource"},git:{label:"Git",icon:"branch",kind:"resource"}}),Qy=new Map(Ky.map(n=>{const r=Gy[n];return[n,Object.freeze({id:n,label:r.label,icon:r.icon,kind:r.kind})]})),Yy=m.lazy(()=>tl(()=>import("./TerminalPanel-DnWh3Vp2.js"),__vite__mapDeps([0,1])).then(n=>({default:n.TerminalPanel}))),Xy=m.lazy(()=>tl(()=>import("./FilesPanel-BARQCmne.js"),__vite__mapDeps([2,3])).then(n=>({default:n.FilesPanel}))),Jy=m.lazy(()=>tl(()=>import("./GitPanel-DjB9eSiJ.js"),__vite__mapDeps([4,3])).then(n=>({default:n.GitPanel}))),Zy=m.lazy(()=>tl(()=>import("./ReviewPanel-YhEGlp-G.js"),__vite__mapDeps([5,3])).then(n=>({default:n.ReviewPanel}))),ex=["focus-work-panel-1","focus-work-panel-2","focus-work-panel-3","focus-work-panel-4","focus-work-panel-5"],bf=Object.freeze(Object.fromEntries([...Qy].map(([n,r])=>[n,{label:r.label,icon:r.icon}]))),tx=new Set(["starting","running","stopping","queued","waiting_approval","interrupted","failed"]);function nx(n,r){return n?tx.has(n)?n==="failed"||n==="interrupted"?"failed":n==="queued"||n==="waiting_approval"?"queued":"running":null:r?"running":null}const Ga=["system","light","dark"],rx={system:"monitor",light:"sun",dark:"moon"},Nf={system:"跟随系统",light:"浅色",dark:"深色"};function sx(n){const r=n??"system",o=Ga.indexOf(r),a=Ga[(o+1)%Ga.length];return{current:r,next:a}}function ix({state:n,actions:r,mode:o,expanded:a,themePreference:d,onCycleTheme:p,onToggleInspector:f,onShowShortcutHelp:g,activePanel:w,panelOrder:x,agentPanel:E,onExpand:C,onCollapse:R,onPanelChange:_,onAgentPanelChange:A,onWidthPreview:L,onWidthCommit:W,width:ie,maxWidthPx:B,revealFileRequest:Se,onRevealInFiles:re,onSendToComposer:ne,resourceNavigatorWidths:b,onResourceNavigatorWidthCommit:D}){const ee=m.useRef(null),X=m.useRef(null),oe=m.useRef(a),Q=m.useId(),xe=m.useRef(new Set([w]));xe.current.add(w);const se=m.useRef(w==="terminal"||xe.current.has("terminal"));w==="terminal"&&(se.current=!0);const[Ie,$]=m.useState(!1),pe=x&&x.length===oc.length?x:oc,V=n.workspaceResourceEpochs[n.workspaceId]??{files:0,git:0,review:0},z=n.sessionRuntimeById[n.activeSessionId??""]?.phase,te=nx(z,n.processing),q=sx(d);m.useEffect(()=>{const J=oe.current;if(oe.current=a,!(o!=="dock"||J===a)){if(!a){requestAnimationFrame(()=>ee.current?.querySelector(`[data-work-panel-id="${w}"]`)?.focus());return}Ie&&($(!1),requestAnimationFrame(()=>X.current?.focus()))}},[w,a,o,Ie]),m.useEffect(()=>{const J=Ho("toggle-work-panel"),me=Ce=>{if(J&&Uo(Ce,J.tokens)){Ce.preventDefault(),a?R():($(!0),C());return}const ae=ex.findIndex(Qe=>{const Je=Ho(Qe);return Je?Uo(Ce,Je.tokens):!1}),Oe=pe[ae];Oe&&(Ce.preventDefault(),!(a&&w===Oe)&&(_(Oe),a||C()))};return window.addEventListener("keydown",me),()=>window.removeEventListener("keydown",me)},[a,o,R,C,_]);const v=J=>{if(J.key==="Escape"&&a&&!J.target.closest('[role="alertdialog"], .terminal-host, input, textarea, [contenteditable]')){J.preventDefault(),R();return}if(o!=="overlay"||!a||J.key!=="Tab")return;const me=ox(ee.current);if(!me.length){J.preventDefault(),ee.current?.focus();return}const Ce=me.indexOf(document.activeElement);J.shiftKey&&Ce<=0?(J.preventDefault(),me.at(-1)?.focus()):!J.shiftKey&&(Ce<0||Ce===me.length-1)&&(J.preventDefault(),me[0].focus())},O=J=>{if(o==="overlay"){_(J),a||($(!0),C());return}if(a&&w===J){R();return}a||$(!0),_(J),C()},ue=(J=!1)=>i.jsxs("nav",{className:J?"work-panel-rail work-panel-rail-overlay":"work-panel-rail","aria-label":"工作面板快捷入口","aria-orientation":J?"horizontal":"vertical",children:[pe.map((me,Ce)=>{const ae=bf[me],Oe=w===me;return i.jsxs("button",{type:"button",className:"work-panel-rail-button","data-work-panel-id":me,"aria-label":`打开${ae.label}面板`,"aria-current":Oe?"page":void 0,title:`${ae.label} · ⌘⇧${Ce+1}`,onClick:()=>O(me),children:[i.jsx(Y,{name:ae.icon,size:17}),me==="terminal"&&te?i.jsx(dc,{state:te,className:"rail-status-dot",describe:!1}):null]},me)}),i.jsx("div",{className:"work-panel-rail-spacer"}),i.jsx("button",{type:"button",className:"icon-button shortcut-help-button",onClick:g,"aria-label":"查看键盘快捷键",title:"键盘快捷键(⌘/Ctrl+/)",children:i.jsx(Y,{name:"keyboard",size:17})}),i.jsx("button",{type:"button",className:"icon-button theme-cycle-button",onClick:p,"aria-label":`主题:${Nf[q.current]},点击切换为${Nf[q.next]}`,children:i.jsx(Y,{name:rx[q.current],size:17})}),i.jsx("button",{type:"button",className:"icon-button inspector-toggle",onClick:f,"aria-label":a?"关闭工作面板":"打开工作面板","aria-controls":"work-panel","aria-expanded":a,children:i.jsx(Y,{name:"sidebar",size:17})})]}),he=J=>i.jsxs("div",{id:`${Q}-${J}`,className:"work-panel-pane",role:"tabpanel","aria-label":bf[J].label,hidden:J!==w,children:[J==="agent"?i.jsx(My,{state:n,actions:r,tab:E,onTabChange:A}):null,J==="review"?i.jsx(Zy,{workspaceId:n.workspaceId,refreshEpoch:V.review,actions:r,onSendToComposer:ne,navigatorWidthPx:b.review,onNavigatorWidthCommit:me=>D("review",me)}):null,J==="terminal"?i.jsx(Yy,{workspaceId:n.workspaceId,workspacePath:n.workspace,styleNonce:n.bootstrap?.nonce??"",available:!!n.bootstrap?.capabilities.terminal,actions:r}):null,J==="files"?i.jsx(Xy,{workspaceId:n.workspaceId,refreshEpoch:V.files,actions:r,revealRequest:Se??null,navigatorWidthPx:b.files,onNavigatorWidthCommit:me=>D("files",me)}):null,J==="git"?i.jsx(Jy,{workspaceId:n.workspaceId,refreshEpoch:V.git,actions:r,onRevealInFiles:re,onSendToComposer:ne,navigatorWidthPx:b.git,onNavigatorWidthCommit:me=>D("git",me)}):null]},J),we=w==="terminal"||!se.current?[w]:[w,"terminal"];return i.jsxs("aside",{ref:ee,id:"work-panel",className:`work-panel work-panel-${o} ${a?"drawer-open work-panel-expanded":"work-panel-collapsed"}`,role:o==="overlay"?"dialog":void 0,"aria-modal":o==="overlay"&&a?!0:void 0,"aria-label":"工作面板","data-mode":o,"data-state":a?"expanded":"collapsed",tabIndex:o==="overlay"&&a?-1:void 0,onKeyDownCapture:v,children:[o==="dock"?i.jsxs("div",{className:"work-panel-dock-body",children:[a?i.jsx("section",{ref:X,id:"work-panel-detail",className:"work-panel-detail","aria-label":"工作面板内容",tabIndex:-1,children:i.jsx("div",{className:"work-panel-content",children:i.jsx(m.Suspense,{fallback:i.jsx("p",{className:"resource-loading",children:"正在加载工作面板…"}),children:we.map(J=>he(J))})})}):null,ue()]}):i.jsxs("div",{id:"work-panel-detail",className:"work-panel-detail",hidden:!a,children:[ue(!0),i.jsx("div",{className:"work-panel-content",children:i.jsx(m.Suspense,{fallback:i.jsx("p",{className:"resource-loading",children:"正在加载工作面板…"}),children:we.map(J=>he(J))})})]}),o==="dock"&&a?i.jsx(Vy,{width:ie,maxWidth:B,onPreview:L,onCommit:W}):null]})}function ox(n){return n?Array.from(n.querySelectorAll('a[href], button, input, select, textarea, summary, [tabindex]:not([tabindex="-1"])')).filter(r=>!r.hasAttribute("disabled")&&!r.closest("[inert]")&&!r.closest("[hidden]")&&r.getClientRects().length>0):[]}const wp="orion.web.right-workspace.v3",Vo=4,zo=300,kp=160,jp=420,lx=280,ax=["files","git","review"],Ko=Object.freeze({files:zo,git:zo,review:zo});function Sp(n){return Number.isFinite(n)?Math.min(jp,Math.max(kp,Math.round(n))):zo}function uw(n){const r=Number.isFinite(n)?n:0,o=Math.min(jp,r*.48,r-lx);return Math.max(kp,Math.floor(o))}const Cp=Object.freeze({expanded:!0,activePanel:"agent",detailWidthPx:560,taskSubview:"overview",resourceNavigatorWidthPx:Ko}),cx=Cp;function If(){return Object.freeze({schemaVersion:Vo,projectNavigation:Object.freeze({expanded:!0,widthPx:280}),workPanel:Object.freeze({byWorkspace:Object.freeze({}),fallback:cx})})}function ux(n){const r=vc(n.agentPanel);return Object.freeze({expanded:n.expanded!==!1,activePanel:ui(n.activePanel)?n.activePanel:"agent",detailWidthPx:Math.max(320,ci(Number.isFinite(n.widthPx)?Number(n.widthPx)-Ge:560)),taskSubview:r,resourceNavigatorWidthPx:Ko})}function dx(n,r){return n.workPanel.byWorkspace[r]??n.workPanel.fallback}function bp(n,r,o){const a=n.workPanel.byWorkspace[r]??n.workPanel.fallback,d=Object.freeze({...a,...o,resourceNavigatorWidthPx:o.resourceNavigatorWidthPx??a.resourceNavigatorWidthPx}),p={schemaVersion:Vo,projectNavigation:n.projectNavigation,workPanel:{...n.workPanel,byWorkspace:Object.freeze({...n.workPanel.byWorkspace,[r]:d})}};return Object.freeze(p)}function fx(n,r,o,a){const d=dx(n,r);return bp(n,r,{...d,resourceNavigatorWidthPx:Object.freeze({...d.resourceNavigatorWidthPx,[o]:Sp(a)})})}function px(n){if(!n)return null;try{const r=JSON.parse(n);if(!_r(r))return null;const o=r.schemaVersion;if(o!==3&&o!==Vo)return null;const a=_r(r.projectNavigation)?r.projectNavigation:{},d=_r(r.workPanel)?r.workPanel:{},p=_r(d.byWorkspace)?d.byWorkspace:{},f=_r(d.fallback)?d.fallback:{},g={};for(const[w,x]of Object.entries(p))_r(x)&&(g[w]=_f(x));return Object.freeze({schemaVersion:Vo,projectNavigation:Object.freeze({expanded:a.expanded!==!1,widthPx:ci(Number(a.widthPx)||280)}),workPanel:Object.freeze({byWorkspace:Object.freeze(g),fallback:_f(f)})})}catch{return null}}function _f(n){return Object.freeze({expanded:n.expanded!==!1,activePanel:ui(n.activePanel)?n.activePanel:"agent",detailWidthPx:Np(Number(n.detailWidthPx)),taskSubview:vc(n.taskSubview),resourceNavigatorWidthPx:hx(n.resourceNavigatorWidthPx)})}function hx(n){if(!_r(n))return Ko;const r={...Ko};for(const o of ax){const a=Number(n[o]);Number.isFinite(a)&&(r[o]=Sp(a))}return Object.freeze(r)}function Np(n){return Number.isFinite(n)?Math.min(3200,Math.max(360,Math.round(n))):Cp.detailWidthPx}function vc(n){const r=String(n);return r==="goal"||r==="overview"?"overview":r==="activity"?"activity":r==="integrations"||r==="capabilities"?"capabilities":r==="diagnostics"?"diagnostics":"overview"}function mx(n){switch(n){case"overview":return"goal";case"activity":return"activity";case"capabilities":return"integrations";case"diagnostics":return"diagnostics"}}function _r(n){return!!n&&typeof n=="object"&&!Array.isArray(n)}function gx(n){return["agent","review","terminal","files","git"].includes(n)}function vx(){const n=globalThis;try{return px(n.window?.localStorage.getItem(wp)??null)}catch{return null}}function Ef(n){const r=globalThis;try{r.window?.localStorage.setItem(wp,JSON.stringify(n))}catch{}}function yx(n,r){const[o,a]=m.useState(vx),d=n??"__fallback__",p=m.useMemo(()=>ux(r),[]),f=m.useMemo(()=>{const x=o?.workPanel.byWorkspace[d]??o?.workPanel.fallback??p;return{workspaceId:d,expanded:x.expanded,activePanel:gx(x.activePanel)?x.activePanel:"agent",agentPanel:mx(x.taskSubview),detailWidthPx:x.detailWidthPx,resourceNavigatorWidthPx:x.resourceNavigatorWidthPx}},[o,d,p]),g=m.useCallback(x=>{a(E=>{const C=E??If(),R=C.workPanel.byWorkspace[d]??C.workPanel.fallback??p,_={expanded:x.expanded??R.expanded,activePanel:x.activePanel??R.activePanel,detailWidthPx:x.detailWidthPx??R.detailWidthPx,taskSubview:x.agentPanel?vc(x.agentPanel):R.taskSubview,resourceNavigatorWidthPx:R.resourceNavigatorWidthPx},A=bp(C,d,_);return Ef(A),A})},[d,p]),w=m.useCallback((x,E)=>{a(C=>{const R=C??If(),_=fx(R,d,x,E);return Ef(_),_})},[d]);return{value:f,update:g,setResourceNavigatorWidth:w}}const yc=320,Pf=360,xx=1024,wx=768,kx=.8;function Ip(n){return Number.isFinite(n)&&n>0?Math.round(n):1440}function _p(n){const r=Math.floor(n*kx),o=n-yc-Ge;return Math.max(0,Math.min(r,o))}function Rf(n){const r=Ip(n.containerWidth),o=Math.max(0,Math.round(n.leftWidthPx)),a=Math.max(0,r-o);if(r<wx)return Object.freeze({mode:"drawer",detailWidthPx:0,conversationWidthPx:a,canResize:!1});if(r<xx)return n.expanded?Object.freeze({mode:"drawer",detailWidthPx:0,conversationWidthPx:a,canResize:!0}):Object.freeze({mode:"rail",detailWidthPx:0,conversationWidthPx:a,canResize:!1});if(!n.expanded)return Object.freeze({mode:"rail",detailWidthPx:Ge,conversationWidthPx:a-Ge,canResize:!1});const d=_p(a);if(d<Pf)return Object.freeze({mode:"rail",detailWidthPx:Ge,conversationWidthPx:a-Ge,canResize:!1});const p=Math.max(Pf,Math.min(Np(n.storedDetailWidthPx),d)),f=a-p-Ge;return f<yc?Object.freeze({mode:"rail",detailWidthPx:Ge,conversationWidthPx:a-Ge,canResize:!1}):Object.freeze({mode:"dock",detailWidthPx:p,conversationWidthPx:f,canResize:d>p})}function Tf(n){const r=Ip(n.containerWidth),o=n.navigationExpanded?Math.max(240,Math.min(480,Math.round(n.navigationWidthPx))):Ge;let a=Rf({containerWidth:r,leftWidthPx:o,expanded:n.workExpanded,storedDetailWidthPx:n.workDetailWidthPx});const d=Rf({containerWidth:r,leftWidthPx:Ge,expanded:n.workExpanded,storedDetailWidthPx:n.workDetailWidthPx});return n.navigationExpanded&&(a.mode==="dock"&&a.conversationWidthPx<yc||a.mode!=="dock"&&d.mode==="dock")?(a=d,Object.freeze({projectNavigation:Object.freeze({mode:"rail",widthPx:Ge}),conversationWidthPx:a.conversationWidthPx,workPanel:Object.freeze({mode:a.mode,widthPx:a.mode==="dock"?a.detailWidthPx+Ge:a.detailWidthPx})})):Object.freeze({projectNavigation:Object.freeze({mode:n.navigationExpanded?"dock":"rail",widthPx:o}),conversationWidthPx:a.conversationWidthPx,workPanel:Object.freeze({mode:a.mode,widthPx:a.mode==="dock"?a.detailWidthPx+Ge:a.detailWidthPx})})}function jx(n,r,o){const a=r==="light"||r==="system"&&o;return n==="orion-blocksmith"?a?"#d7d0c1":"#15191b":a?"#f4f5f8":"#090b10"}function tr(n,r){return n.some(o=>o.id===r.id)?n.map(o=>o.id===r.id?r:o):[r,...n]}const Go=1e4,Sx=256,Cx=256,bx=128,Nx=8,Ep=8*1024*1024,Ix=64;function _x(n=Yf,r){switch(r.type){case"baseline_loaded":{const o=n.workspaceId!==r.bootstrap.workspaceId||n.activeSessionId!==r.bootstrap.activeSessionId?ai(n):n,a=Ff(r.diagnostics,o.mode);return{...o,boot:"ready",bootError:void 0,bootstrap:r.bootstrap,contextRevision:r.bootstrap.contextRevision,workspaceId:r.bootstrap.workspaceId,workspace:r.workspaces.activePath||r.bootstrap.workspace,workspaces:r.workspaces.workspaces,sessions:r.sessions,workspaceSessions:{...o.workspaceSessions,[r.bootstrap.workspaceId]:{status:"ready",items:r.sessions,nextCursor:r.sessionNextCursor}},workspaceNextCursor:r.workspaces.nextCursor,sessionNextCursor:r.sessionNextCursor,activeSessionId:r.bootstrap.activeSessionId,sessionSync:r.bootstrap.activeSessionId?{...o.sessionSync,[r.bootstrap.activeSessionId]:{status:o.sessionProjectionById[r.bootstrap.activeSessionId]?"refreshing":"loading",requestId:null}}:o.sessionSync,settings:r.settings,diagnostics:r.diagnostics,skills:r.skills,skillNextCursor:r.skillNextCursor,mcpServers:r.mcpServers,mcpNextCursor:r.mcpNextCursor,toolDetails:r.toolDetails,toolDetailNextCursor:r.toolDetailNextCursor,notice:o.notice?.domain==="session-snapshot"?null:o.notice,processing:!!r.diagnostics.processing,mode:a,statusMessage:r.bootstrap.configured?"本地 Web Host 已就绪":"模型尚未配置,任务提交已停用",announcement:r.bootstrap.configured?"本地 Web Host 已就绪":"Orion 尚未配置模型"}}case"boot_failed":return{...n,boot:"error",bootError:r.message,connection:$x()?"reconnecting":"offline",announcement:`启动失败:${r.message}`};case"connection_changed":return n.connection==="replay-required"?n:{...n,connection:r.phase,connectionAttempt:r.attempt,announcement:Dx(r.phase,r.attempt)};case"event_received":return Ex(n,r.envelope);case"session_snapshot_started":return n.contextRevision!==r.contextRevision||n.workspaceId!==r.workspaceId?n:Oo(si(n,r.sessionId,{status:r.cached?"refreshing":"loading",requestId:r.requestId}),{snapshotLoads:1});case"session_snapshot_loaded":{const o=r.snapshot.session.id;return!Wf(n,r.contextRevision,r.workspaceId)||!zf(n,o,r.requestId)?n:n.activeSessionId!==o?r.requestId===void 0?n:Df(Mf(n,r.snapshot),o):Df(Of(n,r.snapshot,r.advanceEventCursor!==!1),o)}case"composer_loaded":return r.composer.sessionId!==n.activeSessionId||r.composer.workspaceId!==n.workspaceId||r.composer.contextRevision!==n.contextRevision?n:Pp(n,r.composer);case"model_catalog_loaded":return{...n,modelCatalog:r.catalog};case"durable_session_metadata_loaded":return n.contextRevision!==r.contextRevision||n.workspaceId!==r.workspaceId?n:n.activeSessionId!==r.snapshot.session.id?Mf(n,r.snapshot):r.snapshot.runtime.active!==!0?n:Tx(n,r.snapshot);case"older_transcript_loaded":{if(n.activeSessionId!==r.snapshot.session.id||!n.sessionSnapshot)return n;const o=new Set(n.transcript.map(d=>d.id)),a=Rp(r.snapshot).filter(d=>!o.has(d.id));return{...n,transcript:[...a,...n.transcript].sort((d,p)=>d.order-p.order).slice(-Go),sessionSnapshot:{...n.sessionSnapshot,transcript:{items:n.sessionSnapshot.transcript.items,nextCursor:r.snapshot.transcript.nextCursor}},announcement:`已加载 ${a.length} 条更早记录`}}case"sessions_loaded":return{...n,sessions:r.append?er(n.sessions,r.sessions,o=>o.id):r.sessions,sessionNextCursor:r.nextCursor,workspaceSessions:n.workspaceId?{...n.workspaceSessions,[n.workspaceId]:{status:"ready",items:r.append?er(n.sessions,r.sessions,o=>o.id):r.sessions,nextCursor:r.nextCursor}}:n.workspaceSessions};case"workspaces_loaded":return{...n,workspaceId:r.value.activeId||n.workspaceId,workspace:r.value.activePath||n.workspace,workspaces:r.append?er(n.workspaces,r.value.workspaces,o=>o.id):r.value.workspaces,workspaceNextCursor:r.value.nextCursor};case"workspace_sessions_loading":return{...n,workspaceSessions:{...n.workspaceSessions,[r.workspaceId]:{status:"loading",items:n.workspaceSessions[r.workspaceId]?.items??[],nextCursor:n.workspaceSessions[r.workspaceId]?.nextCursor??null}}};case"workspace_sessions_loaded":{const o=n.workspaceSessions[r.workspaceId],a=r.append?er(o?.items??[],r.sessions,d=>d.id):r.sessions;return{...n,sessions:r.workspaceId===n.workspaceId?a:n.sessions,sessionNextCursor:r.workspaceId===n.workspaceId?r.nextCursor:n.sessionNextCursor,workspaceSessions:{...n.workspaceSessions,[r.workspaceId]:{status:"ready",items:a,nextCursor:r.nextCursor}}}}case"workspace_sessions_failed":return{...n,workspaceSessions:{...n.workspaceSessions,[r.workspaceId]:{status:"error",items:n.workspaceSessions[r.workspaceId]?.items??[],nextCursor:n.workspaceSessions[r.workspaceId]?.nextCursor??null,error:r.detail}}};case"session_updated":return Af(n,a=>Ox(a,r.session));case"session_archived":{const o=Lf(n,r.session.id),a=n.archivedSessions.items.some(d=>d.id===r.session.id);return{...o,archivedSessions:a?o.archivedSessions:{...o.archivedSessions,status:"ready",items:[r.session,...o.archivedSessions.items]}}}case"session_restored":{const o=Af(n,a=>[r.session,...a.filter(d=>d.id!==r.session.id)]);return{...o,archivedSessions:{...o.archivedSessions,items:o.archivedSessions.items.filter(a=>a.id!==r.session.id)}}}case"session_deleted":{const o={...n.sessionRuntimeById};return delete o[r.sessionId],{...Lf(n,r.sessionId),sessionRuntimeById:o,archivedSessions:{...n.archivedSessions,items:n.archivedSessions.items.filter(a=>a.id!==r.sessionId)}}}case"archived_sessions_loading":return r.workspaceId!==n.workspaceId?n:{...n,archivedSessions:{status:"loading",items:n.archivedSessions.ownerWorkspaceId===r.workspaceId?n.archivedSessions.items:[],nextCursor:n.archivedSessions.nextCursor,ownerWorkspaceId:n.archivedSessions.ownerWorkspaceId}};case"archived_sessions_loaded":{if(r.workspaceId!==n.workspaceId)return n;const o=r.append?er(n.archivedSessions.items,r.sessions,a=>a.id):r.sessions;return{...n,archivedSessions:{status:"ready",items:o,nextCursor:r.nextCursor,ownerWorkspaceId:r.workspaceId}}}case"archived_sessions_failed":return r.workspaceId!==n.workspaceId?n:{...n,archivedSessions:{...n.archivedSessions,status:"error",ownerWorkspaceId:r.workspaceId,error:r.detail}};case"workspace_project_summary_loaded":return{...n,workspaceProjectSummaries:{...n.workspaceProjectSummaries,[r.summary.workspaceId]:r.summary}};case"settings_loaded":return{...n,settings:r.settings};case"settings_mirror_changed":return{...n,settings:r.snapshot.document??r.snapshot.lastGood,settingsMirror:r.snapshot};case"diagnostics_loaded":return{...n,diagnostics:r.diagnostics,processing:!!(r.diagnostics.processing??n.processing),mode:Ff(r.diagnostics,n.mode)};case"capabilities_loaded":return{...n,skills:r.append?er(n.skills,r.skills,o=>o.id):r.skills,skillNextCursor:r.skillNextCursor,mcpServers:r.append?er(n.mcpServers,r.mcpServers,o=>o.id):r.mcpServers,mcpNextCursor:r.mcpNextCursor};case"tool_details_loaded":return{...n,toolDetails:r.append?er(n.toolDetails,r.details,o=>`${o.sequence}:${o.callId}`):r.details,toolDetailNextCursor:r.nextCursor};case"pending_action":return{...n,pendingAction:r.label};case"notice":return{...n,notice:r.notice};case"approval_resolved":return n.permission?.id!==r.requestId?n:{...n,permission:null,announcement:r.approved?"工具权限已授予":"工具请求已拒绝"};case"snapshot_failed":{if(!Wf(n,r.contextRevision,r.workspaceId))return n;if(!r.sessionId)return n.connection==="replay-required"?n:{...n,notice:{id:r.requestId??n.lastCursor,tone:"warning",title:"会话状态尚未同步",detail:r.detail},announcement:"会话状态尚未同步"};if(!zf(n,r.sessionId,r.requestId)||r.sessionId!==n.activeSessionId&&r.requestId===void 0)return n;const o=Oo(si(n,r.sessionId,{status:"failed",requestId:r.requestId??n.sessionSync[r.sessionId]?.requestId??null,error:r.detail}),{snapshotFailures:1});return r.sessionId!==n.activeSessionId||n.connection==="replay-required"?o:{...o,statusMessage:n.sessionSnapshot?.session.id===r.sessionId?"会话刷新失败,当前显示最近状态":"会话快照加载失败",notice:{id:r.requestId??n.lastCursor,tone:"warning",title:"会话快照尚未同步",detail:r.detail,domain:"session-snapshot",sessionId:r.sessionId},announcement:"当前会话快照尚未同步,写操作已暂停"}}case"reset_session_view":{const o=!!r.activeSessionId&&r.activeSessionId!==n.activeSessionId,a=!!(r.activeSessionId&&n.sessionProjectionById[r.activeSessionId]),d={...o?{sessionSwitches:1}:{},...a?{snapshotCacheHits:1}:{}};if(r.activeSessionId&&n.sessionProjectionById[r.activeSessionId]){const g=r.activeSessionId,w=Of({...n,activeSessionId:g},n.sessionProjectionById[g],!1);return Oo({...si(w,g,{status:"refreshing",requestId:n.sessionSync[g]?.requestId??null}),notice:n.notice?.domain==="session-snapshot"&&n.notice.sessionId!==g?null:n.notice,statusMessage:"已显示最近会话状态,正在同步…",announcement:"已切换到缓存会话,正在同步最新状态"},d)}const p={...ai(n),activeSessionId:r.activeSessionId,notice:n.notice?.domain==="session-snapshot"&&n.notice.sessionId!==r.activeSessionId?null:n.notice,statusMessage:r.activeSessionId?"正在加载会话快照…":"请选择会话",announcement:r.activeSessionId?"正在加载会话快照":"会话已清除"},f=r.activeSessionId?si(p,r.activeSessionId,{status:"loading",requestId:n.sessionSync[r.activeSessionId]?.requestId??null}):p;return Oo(f,d)}case"recovering":return{...n,connection:"connecting",replayReason:void 0,notice:null,announcement:"正在重新加载会话状态"}}}function Ex(n,r){if(r.type==="replay_reset")return{...n,lastCursor:r.cursor,lastEventId:r.eventId,connection:"replay-required",replayReason:r.payload.reason,notice:{id:r.cursor,tone:"warning",title:"需要重新载入会话",detail:r.payload.reason,domain:"transport"},announcement:"事件历史已超出保留窗口,需要重新载入会话"};if(n.connection==="replay-required"||r.cursor<=n.lastCursor)return n;const o={...n,lastCursor:r.cursor,lastEventId:r.eventId};if(r.type==="settings_invalidated")return{...o,announcement:r.payload.revision===n.settings?.revision?"Host 设置已同步":r.payload.state==="invalid"?"设置文档无效,仍保留上一次可用值":"Host 设置已更新,正在刷新"};if(r.type==="workspace_resource_invalidated"){const d={...n.workspaceResourceEpochs[r.payload.workspaceId]??{files:0,git:0,review:0}};for(const p of r.payload.resources)d[p]=r.cursor;return{...o,workspaceResourceEpochs:{...n.workspaceResourceEpochs,[r.payload.workspaceId]:d},announcement:"项目资源已变化,可用面板正在刷新"}}if(r.type==="workbench_state"){const a=n.workspaceId!==""&&n.workspaceId!==r.payload.workspaceId||n.workspace!==""&&n.workspace!==r.payload.workspace;return{...a?ai(o):o,contextRevision:r.payload.contextRevision,workspaceId:r.payload.workspaceId,workspace:r.payload.workspace,activeSessionId:a?null:n.activeSessionId}}if(r.type==="composer_state_changed"){const a=r.payload.state;return a.sessionId!==o.activeSessionId||a.workspaceId!==o.workspaceId||a.contextRevision!==o.contextRevision?o:Pp(o,a)}if(r.type==="session_runtime_changed"){const a=r.payload.runtime,d=o.sessionProjectionById[a.sessionId],p=rl(o.sessionRuntimeById,a),f=d?nl(o.sessionProjectionById,{...d,sessionRuntime:a}):o.sessionProjectionById;return a.sessionId!==o.activeSessionId?{...o,sessionProjectionById:f,sessionRuntimeById:p}:{...o,sessionProjectionById:f,sessionRuntimeById:p,processing:["running","waiting_approval","stopping"].includes(a.phase),sessionSnapshot:o.sessionSnapshot?.session.id===a.sessionId?{...o.sessionSnapshot,sessionRuntime:a}:o.sessionSnapshot,composer:o.composer?.sessionId===a.sessionId?{...o.composer,sessionRuntime:a}:o.composer}}if(r.type==="workspace_mutation_changed"){if(r.sessionId!==o.activeSessionId)return o;const a=o.tools.find(p=>p.callId===r.payload.state.callId);if(!a)return o;const d={phase:r.payload.state.phase,...r.payload.state.queuePosition===void 0?{}:{queuePosition:r.payload.state.queuePosition}};return{...o,tools:ac(o.tools,{...a,workspaceMutation:d}),announcement:d.phase==="queued"?`工具 ${a.name} 正在等待工作树写入`:d.phase==="running"?`工具 ${a.name} 已获得工作树写入权限`:o.announcement}}return r.sessionId!==null&&r.sessionId!==o.activeSessionId?o:r.type==="thread_event"?Px(o,r.payload.value):Rx(o,r.payload.value,r.eventId,r.cursor,r.timestamp)}function Px(n,r){const o=r.payload;switch(o.type){case"thread.started":case"thread.resumed":return{...n,statusMessage:"会话线程已就绪"};case"thread.forked":return{...n,statusMessage:"分支线程已就绪"};case"turn.started":return{...n,processing:!0,statusMessage:o.data.mode==="plan"?"正在制定计划…":"Orion 正在处理…",announcement:"新回合已开始"};case"turn.queued":return{...n,statusMessage:"消息已进入 Runtime 队列"};case"turn.queue_expired":return{...n,notice:{id:n.lastCursor,tone:"warning",title:"一条排队消息已过期",detail:`队列项 ${o.data.queueId} 未在时限内开始。`}};case"turn.steered":return{...n,statusMessage:"已将补充指令送入当前回合"};case"turn.interrupt_requested":return{...n,statusMessage:"正在中断当前回合…"};case"turn.committed":return{...n,statusMessage:"回合结果已持久化"};case"plan.review_requested":return{...n,processing:!1,statusMessage:"计划已保存,等待审核",announcement:"计划已准备好,请审核后再执行"};case"plan.review_resolved":return{...n,statusMessage:o.data.action==="approve"?"计划已批准,正在进入 BUILD":o.data.action==="continue"?"已提交继续规划反馈":"计划已取消"};case"turn.completed":return{...n,processing:!1,permission:null,statusMessage:"任务已完成",announcement:"当前回合已完成"};case"turn.failed":return{...n,processing:!1,permission:null,statusMessage:"当前回合失败",notice:{id:n.lastCursor,tone:"error",title:"当前回合失败",detail:o.data.error},announcement:"当前回合失败"};case"turn.interrupted":return{...n,processing:!1,permission:null,statusMessage:"当前回合已中断",announcement:"当前回合已中断"};case"compact.started":return{...n,statusMessage:"正在压缩上下文…"};case"compact.completed":return{...n,statusMessage:"上下文压缩完成"};case"compact.failed":return{...n,statusMessage:"上下文压缩失败",notice:{id:n.lastCursor,tone:"warning",title:"上下文压缩失败",detail:o.data.error}};case"approval.requested":return{...n,statusMessage:`等待确认:${o.data.toolName}`};case"item.started":case"item.delta":case"item.completed":case"item.failed":case"item.interrupted":case"item.indeterminate":case"step.snapshot":case"capability.receipt":case"tool.receipt":return n}}function Rx(n,r,o,a,d){switch(r.type){case"transcript_append":{const p={...r.entry,id:`web-entry-${a}`,eventId:o,order:a,receivedAt:d};return{...n,transcript:Wo(n.transcript,p,Go)}}case"transcript_update":if(r.contentDelta!==void 0){const p=n.transcript.find(f=>f.id===r.id);if(!p||r.contentStart===void 0||(p.content??"").length!==r.contentStart){const f="流式回复基线已变化,需要重新载入会话。";return{...n,connection:"replay-required",replayReason:f,notice:{id:a,tone:"warning",title:"需要重新载入会话",detail:f},announcement:f}}}return{...n,transcript:n.transcript.map(p=>p.id===r.id?{...p,...r.patch,...r.contentDelta===void 0?{}:{content:`${p.content??""}${r.contentDelta}`}}:p)};case"transcript_finalize":return{...n,transcript:n.transcript.map(p=>p.id===r.id?{...p,...r.patch,live:!1}:p)};case"transcript_remove":return{...n,transcript:n.transcript.filter(p=>p.id!==r.id)};case"transcript_replace":{const p=Math.max(1,r.entries.length);return{...n,transcript:r.entries.slice(-Go).map((f,g)=>({...f,eventId:`${o}:${g}`,order:a-1+(g+1)/(p+1),receivedAt:d,live:!1}))}}case"transcript_clear":return{...ai(n),activeSessionId:n.activeSessionId,statusMessage:"新会话已就绪"};case"status_changed":return{...n,statusMessage:r.message};case"permission_requested":return{...n,permission:{...r.request,eventId:o},announcement:`需要确认工具权限:${r.request.name}`};case"tool_started":{const p={callId:r.event.callId,eventId:o,order:a,name:r.event.name,args:r.event.args,sequence:r.event.sequence,state:"running",startedAt:d};return{...n,tools:ac(n.tools,p),announcement:`工具 ${p.name} 已开始`}}case"tool_finished":{const p=n.tools.find(g=>g.callId===r.event.callId),f={callId:r.event.callId,eventId:p?.eventId??o,order:p?.order??a,name:r.event.name,args:r.event.args,sequence:r.event.sequence,state:r.event.skipped?"skipped":r.event.success?"success":"error",startedAt:p?.startedAt,finishedAt:d,duration:r.event.duration,summary:r.event.summary,error:r.event.error,outputBytes:r.event.outputBytes,artifactId:r.event.artifactRef?.id,authorization:r.event.authorization};return{...n,tools:ac(n.tools,f),announcement:`工具 ${f.name} ${f.state==="success"?"已完成":f.state==="skipped"?"已跳过":"失败"}`}}case"edit_preview_requested":{const p={eventId:o,order:a,receivedAt:d,request:r.request};return{...n,edits:Wo(n.edits,p,Sx)}}case"session_restored":return{...n,activeSessionId:r.event.sessionId,statusMessage:`已恢复 ${r.event.restoredMessages} 条消息`,announcement:"会话恢复完成",notice:r.event.warnings&&r.event.warnings.length>0?{id:a,tone:"warning",title:"会话已恢复,但有注意事项",detail:r.event.warnings.join(" ")}:n.notice};case"loop_stats_updated":return{...n,loopStats:r.stats};case"trace_event_recorded":return{...n,traces:Wo(n.traces,r.event,Cx)};case"harness_diagnostics_updated":return{...n,diagnostics:{...n.diagnostics??{},harness:r.diagnostics}};case"subtask_event":{const p={...r.event,eventId:o,order:a,updatedAt:d},f=[...n.subtasks.filter(g=>g.taskId!==p.taskId),p].slice(-256);return{...n,subtasks:f}}case"research_event":return{...n,research:Lx(n.research,r.event,o,a,d)};case"goal_event":return Mx(n,r.event,d);case"effort_event":return{...n,effort:r.event};case"followup_queue_changed":return{...n,queue:r.snapshot};case"processing_changed":return{...n,processing:r.processing,permission:r.processing?n.permission:null,announcement:r.processing?"Orion 开始处理任务":"Orion 已完成当前处理"};case"agent_mode_changed":return{...n,mode:r.snapshot};case"clear_view":return{...n,transcript:[],tools:[],edits:[]};case"shutdown_requested":return{...n,connection:"closed",processing:!1,permission:null,statusMessage:r.reason??"Web Host 已关闭",announcement:"Orion Web Host 已关闭"};case"session_picker_requested":case"model_picker_requested":return n}}function Of(n,r,o=!0){const a=Rp(r).slice(-Go),d=Op(r.runtime.agentMode)?r.runtime.agentMode:n.mode.baseMode,p=r.pendingApprovals[0],f=Tp(r.goal);return{...ai(n),lastCursor:o?Math.max(n.lastCursor,r.eventCursor):n.lastCursor,activeSessionId:r.session.id,sessionProjectionById:nl(n.sessionProjectionById,r),sessionRuntimeById:rl(n.sessionRuntimeById,r.sessionRuntime),sessions:tr(n.sessions,r.session),workspaceSessions:n.workspaceId?{...n.workspaceSessions,[n.workspaceId]:{status:"ready",items:tr(n.workspaceSessions[n.workspaceId]?.items??n.sessions,r.session),nextCursor:n.workspaceSessions[n.workspaceId]?.nextCursor??n.sessionNextCursor}}:n.workspaceSessions,transcript:a,permission:p?{id:p.id,name:p.toolName,reason:p.reason,args:{...p.sanitizedArguments},eventId:`snapshot:${p.id}`}:null,processing:r.runtime.processing,statusMessage:r.runtime.status,mode:r.composer.mode??{baseMode:d,pendingBaseMode:null},queue:{items:r.composer.queue.items.map(g=>({...g})),limit:r.composer.queue.limit},goal:f,plan:r.plan??null,composer:r.composer,sessionSnapshot:r,diagnostics:{...n.diagnostics??{},activeSessionId:r.session.id,processing:r.runtime.processing,agentMode:d,permissionMode:r.runtime.permissionMode,contextUsage:r.runtime.contextUsage,tokenUsage:r.runtime.tokenUsage,plan:r.plan?.body??null,recoveryDiagnostics:r.recoveryDiagnostics},announcement:"会话快照已同步"}}function Mf(n,r){const o=n.workspaceId?{...n.workspaceSessions,[n.workspaceId]:{status:"ready",items:tr(n.workspaceSessions[n.workspaceId]?.items??n.sessions,r.session),nextCursor:n.workspaceSessions[n.workspaceId]?.nextCursor??n.sessionNextCursor}}:n.workspaceSessions;return{...n,sessionProjectionById:nl(n.sessionProjectionById,r),sessionRuntimeById:rl(n.sessionRuntimeById,r.sessionRuntime),sessions:tr(n.sessions,r.session),workspaceSessions:o}}function Pp(n,r){const o=n.sessionProjectionById[r.sessionId],a=o?nl(n.sessionProjectionById,{...o,sessionRuntime:r.sessionRuntime,composer:r}):n.sessionProjectionById;return{...n,composer:r,sessionSnapshot:n.sessionSnapshot?.session.id===r.sessionId?{...n.sessionSnapshot,sessionRuntime:r.sessionRuntime,composer:r}:n.sessionSnapshot,sessionProjectionById:a,sessionRuntimeById:rl(n.sessionRuntimeById,r.sessionRuntime),processing:r.processing,mode:r.mode,queue:{items:r.queue.items.map(d=>({...d})),limit:r.queue.limit},diagnostics:{...n.diagnostics??{},contextUsage:r.contextUsage,agentMode:r.mode.baseMode}}}function Tx(n,r){const o=tr(n.sessions,r.session),a=n.workspaceSessions[n.workspaceId],d=!n.composer||n.composer.controlRevision===r.composer.controlRevision?r.composer:n.composer;return{...n,sessions:o,workspaceSessions:{...n.workspaceSessions,[n.workspaceId]:{status:"ready",items:tr(a?.items??n.sessions,r.session),nextCursor:a?.nextCursor??n.sessionNextCursor}},goal:Tp(r.goal),plan:r.plan,composer:d,sessionSnapshot:n.sessionSnapshot?.session.id===r.session.id?{...n.sessionSnapshot,session:r.session,goal:r.goal,plan:r.plan,composer:d,recoveryDiagnostics:r.recoveryDiagnostics}:n.sessionSnapshot,diagnostics:{...n.diagnostics??{},plan:r.plan?.body??null,recoveryDiagnostics:r.recoveryDiagnostics}}}function Rp(n){return n.transcript.items.map((r,o)=>{const a=Number.parseInt(r.id.split(":").at(-1)??"",10);return{id:r.id,role:r.role,content:r.content,eventId:`snapshot:${r.id}`,order:-1e9+(Number.isSafeInteger(a)?a:o),receivedAt:Ax(r.timestamp),live:!1}})}function Tp(n){if(!n||!ni(n.state))return null;const r=n.state;if(typeof r.goalId!="string"||typeof r.objective!="string"||typeof r.status!="string")return null;const o=ni(r.budget)?r.budget:null,a=ni(r.lastStopDecision)?r.lastStopDecision:null,d=a&&ni(a.reason)?Mo(a.reason.message):Mo(r.stopReason),p=ni(r.criteria)?{passed:nn(r.criteria.passed),total:nn(r.criteria.total),failed:nn(r.criteria.failed),stale:nn(r.criteria.stale)}:void 0;return{goalId:r.goalId,revision:nn(r.revision,nn(r.generation,1)),objective:r.objective,status:r.status,tokenBudget:Qa(r.tokenBudget)??Qa(o?.maxTokens),tokensUsed:nn(r.tokensUsed),timeUsedMs:nn(r.timeUsedMs,nn(r.elapsedMs)),continuationCount:nn(r.continuationCount),updatedAt:nn(r.updatedAt),stopReason:d,criteria:p,planRevision:Qa(r.planRevision),planPhase:Mo(r.planPhase),nextAction:Mo(r.nextAction),auditRemaining:Array.isArray(r.auditRemaining)?r.auditRemaining.filter(f=>typeof f=="string"):void 0}}function er(n,r,o){const a=new Map(n.map(d=>[o(d),d]));for(const d of r)a.set(o(d),d);return[...a.values()]}function Ox(n,r){const o=n.findIndex(d=>d.id===r.id);if(o<0)return[r,...n];const a=[...n];return a[o]=r,a}function Lf(n,r){const o=n.workspaceId,a=o?n.workspaceSessions[o]:void 0,d=(a?.items??n.sessions).filter(p=>p.id!==r);return{...n,sessions:o?d:n.sessions,workspaceSessions:o?{...n.workspaceSessions,[o]:{status:(a?.status??"ready")==="error"?"error":"ready",items:d,nextCursor:a?.nextCursor??null,error:a?.error}}:n.workspaceSessions}}function Af(n,r){const o=n.workspaceId,a=o?n.workspaceSessions[o]:void 0,d=a?.items??n.sessions,p=r(d),f=a?.status==="error"?"error":a?.status==="loading"?"loading":"ready";return{...n,sessions:o?p:n.sessions,workspaceSessions:o?{...n.workspaceSessions,[o]:{status:f,items:p,nextCursor:a?.nextCursor??null,error:a?.error}}:n.workspaceSessions}}function Mx(n,r,o){switch(r.type){case"goal_updated":case"goal_restored":return{...n,goal:r.goal,goalActivity:os(n.goalActivity,r.type,"Goal 状态已更新",o)};case"goal_completed":return{...n,goal:r.goal,goalActivity:os(n.goalActivity,r.type,r.audit.verificationSummary,o),announcement:"Goal 已完成并通过运行时审计"};case"goal_cleared":return{...n,goal:null,goalEvidence:[],goalActivity:os(n.goalActivity,r.type,r.reason,o)};case"goal_plan_updated":return{...n,goal:n.goal?{...n.goal,planRevision:r.planRevision,planPhase:r.phase,nextAction:r.nextAction}:n.goal,goalActivity:os(n.goalActivity,r.type,r.nextAction??`Plan phase: ${r.phase}`,o)};case"goal_evidence_recorded":{const a=r.evidence;return{...n,goalEvidence:[...n.goalEvidence.filter(d=>d.id!==a.id),a].slice(-256)}}case"goal_continuation":return{...n,goalActivity:os(n.goalActivity,`${r.type}:${r.phase}`,r.reason,o)};case"goal_audit_failed":return{...n,goalActivity:os(n.goalActivity,r.type,r.summary,o),notice:{id:Date.parse(o),tone:"warning",title:"Goal 审计尚未通过",detail:r.summary}}}}function Lx(n,r,o,a,d){const f=n.find(w=>w.packetId===r.packetId)??{packetId:r.packetId,eventId:o,order:a,updatedAt:d,stage:"running",sources:[],conflicts:[]};let g;switch(r.type){case"research_started":g={...f,eventId:o,order:a,updatedAt:d,objective:r.objective,mode:r.mode,stage:"running"};break;case"research_source":{const w={id:r.sourceId,provider:r.provider,status:r.status,title:r.title,location:r.displayUrl??r.canonicalUrl??r.projectPath,failureReason:r.failureReason};g={...f,eventId:o,order:a,updatedAt:d,sources:[...f.sources.filter(x=>x.id!==w.id),w].slice(-64)};break}case"research_conflict":g={...f,eventId:o,order:a,updatedAt:d,conflicts:[...f.conflicts.filter(w=>w!==r.claimId),r.claimId].slice(-64)};break;case"research_completed":g={...f,eventId:o,order:a,updatedAt:d,stage:r.stage,auditStatus:r.auditStatus,conclusion:r.conclusion,summary:r.summary};break}return[...n.filter(w=>w.packetId!==r.packetId),g].slice(-128)}function ac(n,r){return[...n.filter(o=>o.callId!==r.callId),r].sort((o,a)=>o.order-a.order).slice(-1e3)}function nl(n,r){const o=Object.entries(n).filter(([d])=>d!==r.session.id);o.push([r.session.id,r]);let a=o.reduce((d,[,p])=>d+$f(p),0);for(;o.length>1&&(o.length>Nx||a>Ep);){const d=o.shift();d&&(a-=$f(d[1]))}return Object.freeze(Object.fromEntries(o))}function rl(n,r){const o=Object.entries(n).filter(([a])=>a!==r.sessionId);return o.push([r.sessionId,r]),Object.freeze(Object.fromEntries(o.slice(-64)))}function $f(n){try{return JSON.stringify(n).length*2}catch{return Ep}}function ai(n){return{...n,transcript:[],tools:[],edits:[],subtasks:[],research:[],permission:null,processing:!1,statusMessage:"",queue:{items:[],limit:16},goal:null,goalEvidence:[],goalActivity:[],sessionSnapshot:null,composer:null,modelCatalog:null,plan:null,loopStats:null,traces:[]}}function si(n,r,o){const a={...n.sessionSync};delete a[r],a[r]=o;const d=Object.keys(a).length-Ix;return d>0&&Object.keys(a).filter(p=>p!==n.activeSessionId&&p!==r).slice(0,d).forEach(p=>delete a[p]),{...n,sessionSync:a}}function Oo(n,r){const o={sessionSwitches:n.clientTelemetry.sessionSwitches+(r.sessionSwitches??0),snapshotCacheHits:n.clientTelemetry.snapshotCacheHits+(r.snapshotCacheHits??0),snapshotLoads:n.clientTelemetry.snapshotLoads+(r.snapshotLoads??0),snapshotFailures:n.clientTelemetry.snapshotFailures+(r.snapshotFailures??0)};return{...n,clientTelemetry:o}}function Df(n,r){const o=si(n,r,{status:"ready",requestId:n.sessionSync[r]?.requestId??null});return o.notice?.domain!=="session-snapshot"||o.notice.sessionId!==r?o:{...o,notice:null}}function zf(n,r,o){return o===void 0||n.sessionSync[r]?.requestId===o}function Wf(n,r,o){return(r===void 0||n.contextRevision===r)&&(o===void 0||n.workspaceId===o)}function os(n,r,o,a){return Wo(n,{type:r,message:o,timestamp:a},bx)}function Wo(n,r,o){const a=[...n,r];return a.length<=o?a:a.slice(a.length-o)}function Ff(n,r){const o=n.agentMode;return Op(o)?{baseMode:o,pendingBaseMode:null}:r}function Op(n){return n==="interactive"||n==="plan"||n==="auto"}function Ax(n){const r=new Date(n);return Number.isFinite(r.getTime())?r.toISOString():new Date(0).toISOString()}function ni(n){return!!n&&typeof n=="object"&&!Array.isArray(n)}function nn(n,r=0){return typeof n=="number"&&Number.isFinite(n)?n:r}function Qa(n){return typeof n=="number"&&Number.isFinite(n)?n:void 0}function Mo(n){return typeof n=="string"&&n?n:void 0}function $x(){return typeof navigator>"u"||navigator.onLine}function Dx(n,r){return n==="live"?"本地 Web Host 事件流已连接":n==="offline"?"浏览器已离线,本地 Web Host 将在网络恢复后重连":n==="reconnecting"?`正在重新连接本地 Web Host,第 ${Math.max(1,r)} 次尝试`:n==="connecting"?"正在连接本地 Web Host":n==="replay-required"?"本地 Web Host 事件历史需要重新载入":"本地 Web Host 已关闭"}const Bf="orion.web.theme",qf="orion.web.motion";function zx(n){const r=Hf(Bf),o=Hf(qf),a=Wx(r),d=Fx(o),p=[],f=[];return r!==null&&f.push(Bf),o!==null&&f.push(qf),n.sections.appearance.theme.explicitValue===void 0&&a&&p.push({op:"set",key:"appearance.theme",value:a}),n.sections.appearance.motion.explicitValue===void 0&&d&&p.push({op:"set",key:"appearance.motion",value:d}),{operations:p,keysToClear:f}}function Uf(n){if(!(typeof window>"u"))for(const r of n)try{window.localStorage.removeItem(r)}catch{}}function Hf(n){if(typeof window>"u")return null;try{return window.localStorage.getItem(n)}catch{return null}}function Wx(n){return n==="system"||n==="light"||n==="dark"?n:null}function Fx(n){return n==="system"||n==="reduced"?n:null}class Bx{constructor(r){Ht(this,"read");Ht(this,"snapshot",Object.freeze({status:"idle",document:null,lastGood:null,stale:!1,error:null,generation:0}));Ht(this,"listeners",new Set);Ht(this,"inFlight",null);Ht(this,"rerun",!1);Ht(this,"generation",0);Ht(this,"disposed",!1);this.read=r}getSnapshot(){return this.snapshot}subscribe(r){return this.listeners.add(r),()=>this.listeners.delete(r)}ensure(){return this.snapshot.document||this.inFlight?this.inFlight??Promise.resolve(this.snapshot):this.refresh()}refresh(){if(this.disposed)return Promise.resolve(this.snapshot);if(this.inFlight)return this.rerun=!0,this.inFlight;const r=Promise.resolve().then(()=>this.run());return this.inFlight=r,r}accept(r){return this.disposed?this.snapshot:(this.generation+=1,this.inFlight&&(this.rerun=!0),this.publishDocument(r))}invalidate(r,o){return this.snapshot.document?.revision===r&&(o==="ready"?this.snapshot.document.state==="ready":this.snapshot.document.state==="invalid")?Promise.resolve(this.snapshot):(this.setSnapshot({...this.snapshot,stale:!0}),this.refresh())}reset(){this.disposed||(this.generation+=1,this.rerun=!1,this.setSnapshot({status:"idle",document:null,lastGood:null,stale:!1,error:null,generation:this.generation}))}dispose(){this.disposed=!0,this.generation+=1,this.listeners.clear()}async run(){try{do{this.rerun=!1;const r=++this.generation;this.setSnapshot({...this.snapshot,status:this.snapshot.document?"ready":"loading",error:null,generation:r});try{const o=await this.read();if(this.disposed)return this.snapshot;if(r!==this.generation)continue;this.publishDocument(o)}catch(o){if(this.disposed)return this.snapshot;if(r!==this.generation)continue;this.setSnapshot({...this.snapshot,status:this.snapshot.document?"ready":"unavailable",stale:!0,error:o instanceof Error?o.message:"设置读取失败。",generation:r})}}while(this.rerun&&!this.disposed);return this.snapshot}finally{if(this.inFlight=null,this.rerun&&!this.disposed)return this.refresh()}}publishDocument(r){const o=r.state==="ready"?r:this.snapshot.lastGood;return this.setSnapshot({status:"ready",document:r,lastGood:o,stale:!1,error:null,generation:this.generation}),this.snapshot}setSnapshot(r){this.snapshot=Object.freeze(r);for(const o of this.listeners)o()}}function qx(n,r,o){if(n)return n;const a=new Set(r.map(d=>d.id));return o&&a.has(o)?o:r[0]?.id??null}const Ux=7,Hx=2;function Vx(){const n=m.useMemo(()=>new wg,[]),r=m.useMemo(()=>new Bx(()=>n.settings()),[n]),[o,a]=m.useReducer(_x,Yf),[d,p]=m.useState(0),f=m.useRef(o),g=m.useRef(null),w=m.useRef(0),x=m.useRef(0),E=m.useRef(new Map),C=m.useRef(0),R=m.useRef(0),_=m.useRef(new Map),A=m.useRef(()=>{}),L=m.useRef(!1);f.current=o,m.useEffect(()=>r.subscribe(()=>{a({type:"settings_mirror_changed",snapshot:r.getSnapshot()})}),[r]);const W=m.useCallback((k,N=ye(f.current),M={})=>{const Z=`${N.workspaceId}:${N.expectedContextRevision}:${k}`,ve=_.current.get(Z);if(ve&&!M.force)return ve.promise;const Ae=++R.current;a({type:"session_snapshot_started",sessionId:k,requestId:Ae,cached:!!f.current.sessionProjectionById[k],contextRevision:N.expectedContextRevision,workspaceId:N.workspaceId});const Ze=n.sessionSnapshot(k,N).then(et=>(Vf(et,k,N),a({type:"session_snapshot_loaded",snapshot:et,requestId:Ae,contextRevision:N.expectedContextRevision,workspaceId:N.workspaceId,advanceEventCursor:g.current===null}),et)).catch(et=>{const cn=as(et);throw a({type:"snapshot_failed",sessionId:k,detail:cn,requestId:Ae,contextRevision:N.expectedContextRevision,workspaceId:N.workspaceId}),new Ee(cn,et instanceof Ee?et.status:503,"session_snapshot_sync_failed",et instanceof Ee?et.type:void 0)}).finally(()=>{_.current.get(Z)?.requestId===Ae&&_.current.delete(Z)});return _.current.set(Z,{requestId:Ae,promise:Ze}),Ze},[n]),ie=m.useCallback(async k=>{const N=++x.current;try{const M=await n.bootstrap(),Z={expectedContextRevision:M.contextRevision,workspaceId:M.workspaceId};r.reset(),r.accept(M.settings);const Ae=k!==void 0&&k.activeId!==""&&k.activeId===M.workspaceId?k:void 0,Ze=Ae?Promise.resolve(Ae):n.listWorkspaces(Z),[et,cn,cr]=await Promise.all([Ze,n.listSessions(Z),r.refresh()]),tt=Gx(M.workspaceId,cn.sessions,M.activeSessionId);ri(M.workspaceId,tt);const il=Object.freeze({...M,activeSessionId:tt}),Pt=await Kx(n,r,cr.document??cr.lastGood??M.settings,Z);if(N!==x.current)return;a({type:"baseline_loaded",bootstrap:il,workspaces:et,sessions:cn.sessions,sessionNextCursor:cn.nextCursor,diagnostics:{},settings:Pt,skills:[],skillNextCursor:null,mcpServers:[],mcpNextCursor:null,toolDetails:[],toolDetailNextCursor:null}),tt&&n.sessionSnapshot(tt,Z).then(at=>{N===x.current&&(Vf(at,tt,Z),a({type:"session_snapshot_loaded",snapshot:at,contextRevision:Z.expectedContextRevision,workspaceId:Z.workspaceId}))}).catch(at=>{N===x.current&&a({type:"snapshot_failed",sessionId:tt,detail:as(at),contextRevision:Z.expectedContextRevision,workspaceId:Z.workspaceId})}),A.current();const ol=cn.sessions.map(at=>at.id).filter(at=>at!==tt).slice(0,Ux);A.current=tw(()=>{N===x.current&&nw(ol,Hx,async at=>{N===x.current&&await W(at,Z).catch(()=>{})})}),n.workspaceProjectSummary(M.workspaceId,Z).then(at=>{N===x.current&&a({type:"workspace_project_summary_loaded",summary:at})}).catch(()=>{}),Promise.all([n.diagnostics(Z).catch(()=>({})),n.skills(Z).catch(()=>({skills:[],nextCursor:null})),n.mcp(Z).catch(()=>({servers:[],nextCursor:null})),n.toolDetails(Z).catch(()=>({details:[],nextCursor:null}))]).then(([at,Si,ur,dr])=>{N===x.current&&(a({type:"diagnostics_loaded",diagnostics:at}),a({type:"capabilities_loaded",skills:Si.skills,skillNextCursor:Si.nextCursor,mcpServers:ur.servers,mcpNextCursor:ur.nextCursor}),a({type:"tool_details_loaded",details:dr.details,nextCursor:dr.nextCursor}))})}catch(M){throw M}},[n,W,r]),B=m.useCallback(async k=>{let N;for(let M=0;M<3;M+=1)try{await ie(k);return}catch(Z){if(N=Z,!Zx(Z)||M===2)break;await ew(100*3**M)}throw a({type:"boot_failed",message:as(N)}),N},[ie]);m.useEffect(()=>{if(L.current)return;L.current=!0;let k=!0;return B().catch(()=>{}),()=>{k=!1}},[B]),m.useEffect(()=>()=>{A.current()},[]);const Se=o.bootstrap!==null;m.useEffect(()=>{if(!Se)return;const k=n.connectEvents({cursor:f.current.lastCursor,onEvent:N=>{if(a({type:"event_received",envelope:N}),rw(N)){const M=f.current;if(N.sessionId&&M.contextRevision&&M.workspaceId){const Z=N.sessionId,ve=++C.current;E.current.set(Z,ve);const Ae=M.contextRevision,Ze=M.workspaceId;n.sessionSnapshot(Z,{expectedContextRevision:Ae,workspaceId:Ze}).then(et=>{E.current.get(Z)===ve&&a({type:"durable_session_metadata_loaded",snapshot:et,contextRevision:Ae,workspaceId:Ze})}).catch(()=>{}).finally(()=>{E.current.get(Z)===ve&&E.current.delete(Z)})}}N.type==="settings_invalidated"&&r.invalidate(N.payload.revision,N.payload.state)},onStatus:(N,M)=>a({type:"connection_changed",phase:N,attempt:M}),onProtocolError:N=>a({type:"notice",notice:{id:Date.now(),tone:"error",title:"收到无法识别的 Web Host 事件流消息",detail:N}})});return g.current=k,()=>{k.close(),g.current===k&&(g.current=null)}},[n,Se,r,d]);const re=m.useCallback(()=>{g.current?.close(),g.current=null},[]),ne=m.useCallback(()=>{p(k=>k+1)},[]);m.useEffect(()=>{!o.workspace||o.boot!=="ready"||o.pendingAction||o.bootstrap?.workspace!==o.workspace&&(re(),B().catch(k=>Gf(a,"工作区刷新失败",k)).finally(ne))},[B,re,ne,o.boot,o.bootstrap?.workspace,o.pendingAction,o.workspace]),m.useEffect(()=>{o.boot==="ready"&&(o.pendingAction||!o.activeSessionId||o.bootstrap?.workspace===o.workspace&&o.sessionSnapshot?.session.id!==o.activeSessionId&&W(o.activeSessionId).catch(()=>{}))},[W,o.activeSessionId,o.boot,o.bootstrap?.workspace,o.pendingAction,o.sessionSnapshot,o.workspace]);const b=m.useCallback(async(k,N)=>{const M=++w.current;a({type:"pending_action",label:k});try{return await N()}catch(Z){throw Jx(Z)||Gf(a,`${k}失败`,Z),Z}finally{w.current===M&&a({type:"pending_action",label:null})}},[]),D=m.useCallback(async(k,N)=>b(k,async()=>{if(f.current.connection!=="live")throw new Ee("本地 Web Host 连接尚未就绪,请在连接恢复后重试。",409,"session_not_synchronized");const M=f.current.activeSessionId;if(!M)throw new Ee("当前没有可接收命令的活动会话。",409,"active_session_changed");const Z=f.current.sessionSnapshot;if(!Z||!Pr(f.current))throw new Ee("当前会话快照尚未同步,请刷新后重试。",409,"session_runtime_revision_conflict");try{const ve=await n.command({...N,workspaceId:f.current.workspaceId,expectedContextRevision:f.current.contextRevision,expectedSessionId:M,expectedSessionRuntimeRevision:Z.sessionRuntime.runtimeRevision});return Yx(ve),ve}catch(ve){throw ve instanceof Ee&&["context_revision_conflict","active_session_changed","session_runtime_revision_conflict"].includes(ve.code??"")?(a({type:"snapshot_failed",sessionId:M,detail:ve.message,contextRevision:f.current.contextRevision,workspaceId:f.current.workspaceId}),new Ee(ve.message,ve.status,"session_runtime_revision_conflict",ve.type)):ve}}),[n,b]),ee=m.useCallback(async(k,N)=>b(k,async()=>{const M=f.current,Z=M.composer;if(M.connection!=="live"||!M.activeSessionId||!Pr(M)||!Z||Z.sessionId!==M.activeSessionId)throw new Ee("Composer 控制状态尚未与活动会话同步。",409,"composer_control_conflict");try{const ve=await n.composerAction(M.activeSessionId,{...N,workspaceId:M.workspaceId,expectedContextRevision:M.contextRevision,expectedSessionId:M.activeSessionId,expectedSessionRuntimeRevision:Z.sessionRuntime.runtimeRevision,expectedControlRevision:Z.controlRevision});return a({type:"composer_loaded",composer:ve.state}),ve}catch(ve){throw ve instanceof Ee&&["composer_control_conflict","context_revision_conflict","active_session_changed","session_runtime_revision_conflict"].includes(ve.code??"")?(a({type:"snapshot_failed",sessionId:M.activeSessionId,detail:ve.message,contextRevision:M.contextRevision,workspaceId:M.workspaceId}),new Ee(ve.message,ve.status,"composer_control_conflict",ve.type)):ve}}),[n,b]),X=m.useCallback(()=>b("重新连接",B),[B,b]),oe=m.useCallback(()=>b("刷新诊断",async()=>{const k=++x.current,N=await n.diagnostics(ye(f.current));k===x.current&&a({type:"diagnostics_loaded",diagnostics:N})}),[n,b]),Q=m.useCallback(()=>b("刷新工具详情",async()=>{const k=++x.current,N=await n.toolDetails(ye(f.current));k===x.current&&a({type:"tool_details_loaded",details:N.details,nextCursor:N.nextCursor})}),[n,b]),xe=m.useCallback(()=>b("加载更多工作区",async()=>{const k=ye(f.current),N=f.current.workspaceNextCursor;if(N)try{const M=await n.listWorkspaces(k,N);a({type:"workspaces_loaded",value:M,append:!0})}catch(M){if(!Lo(M))throw M;a({type:"workspaces_loaded",value:await n.listWorkspaces(k)})}}),[n,b]),se=m.useCallback(()=>b("加载更多会话",async()=>{const k=f.current.sessionNextCursor;if(!k)return;const N=ye(f.current);try{const M=await n.listSessions(N,k);a({type:"sessions_loaded",sessions:M.sessions,nextCursor:M.nextCursor,append:!0})}catch(M){if(!Lo(M))throw M;const Z=await n.listSessions(N);a({type:"sessions_loaded",sessions:Z.sessions,nextCursor:Z.nextCursor})}}),[n,b]),Ie=m.useCallback(async(k,N=!1)=>{const M=ye(f.current),Z=f.current.workspaceSessions[k],ve=N?Z?.nextCursor:void 0;if(N&&!ve)return;a({type:"workspace_sessions_loading",workspaceId:k});const Ae=n.workspaceProjectSummary(k,M).catch(()=>null);try{const Ze=await n.listWorkspaceSessions(k,M,ve??void 0);a({type:"workspace_sessions_loaded",workspaceId:k,sessions:Ze.sessions,nextCursor:Ze.nextCursor,append:N});const et=await Ae;et&&a({type:"workspace_project_summary_loaded",summary:et})}catch(Ze){throw a({type:"workspace_sessions_failed",workspaceId:k,detail:as(Ze)}),Ze}},[n]),$=m.useCallback(async k=>{const N=await n.workspaceProjectSummary(k,ye(f.current));a({type:"workspace_project_summary_loaded",summary:N})},[n]),pe=m.useCallback(()=>b("加载更多能力",async()=>{const k=ye(f.current),N=f.current.skillNextCursor,M=f.current.mcpNextCursor;if(!(!N&&!M))try{const[Z,ve]=await Promise.all([N?n.skills(k,N):Promise.resolve({skills:[],nextCursor:null}),M?n.mcp(k,M):Promise.resolve({servers:[],nextCursor:null})]);a({type:"capabilities_loaded",skills:Z.skills,skillNextCursor:Z.nextCursor,mcpServers:ve.servers,mcpNextCursor:ve.nextCursor,append:!0})}catch(Z){if(!Lo(Z))throw Z;const[ve,Ae]=await Promise.all([n.skills(k),n.mcp(k)]);a({type:"capabilities_loaded",skills:ve.skills,skillNextCursor:ve.nextCursor,mcpServers:Ae.servers,mcpNextCursor:Ae.nextCursor})}}),[n,b]),V=m.useCallback(()=>b("加载更多工具详情",async()=>{const k=ye(f.current),N=f.current.toolDetailNextCursor;if(N)try{const M=await n.toolDetails(k,N);a({type:"tool_details_loaded",details:M.details,nextCursor:M.nextCursor,append:!0})}catch(M){if(!Lo(M))throw M;const Z=await n.toolDetails(k);a({type:"tool_details_loaded",details:Z.details,nextCursor:Z.nextCursor})}}),[n,b]),z=m.useCallback(async()=>{const k=f.current;if(k.connection!=="replay-required"){if(!k.activeSessionId)return;await W(k.activeSessionId,ye(k),{force:!0});return}await b("恢复本地 Web Host 事件流",async()=>{re(),a({type:"recovering"});try{await B()}finally{ne()}})},[B,W,re,ne,b]),te=m.useCallback(k=>b("切换工作区",async()=>{re();try{const N=await n.activateWorkspace(k,ye(f.current));a({type:"workspaces_loaded",value:N}),a({type:"reset_session_view",activeSessionId:null}),await B(N)}finally{ne()}}),[n,B,re,ne,b]),q=m.useCallback(()=>n.pickDirectory({}),[n]),v=m.useCallback(k=>n.inspectWorkspace(k,"picker"),[n]),O=m.useCallback(k=>{const N=f.current;if(N.activeSessionId===k&&N.sessionSnapshot&&N.sessionSync[k]?.status==="ready")return Promise.resolve();const M=ye(N);return(async()=>{ri(M.workspaceId,k),a({type:"reset_session_view",activeSessionId:k}),await W(k,M)})()},[W]),ue=m.useCallback((k,N)=>k===f.current.workspaceId&&N?O(N):b("切换项目上下文",async()=>{const M=f.current,Z=M.contextRevision;if(!Z)throw new Ee("工作区上下文尚未完成同步。",409,"context_revision_conflict");if(k===M.workspaceId){ri(k,N),a({type:"reset_session_view",activeSessionId:N}),N&&await W(N,ye(M));return}ri(k,N),re(),++x.current;try{const ve=await n.activateContext({expectedContextRevision:Z,workspaceId:k,sessionId:N});if(ve.contextRevision!==ve.bootstrap.contextRevision||ve.bootstrap.workspaceId!==k)throw new Ee("Host 返回的项目上下文不一致。",502,"context_response_invalid");a({type:"reset_session_view",activeSessionId:N}),await B()}catch(ve){throw ve instanceof Ee&&(ve.code==="context_revision_conflict"||ve.code==="active_session_changed")&&a({type:"snapshot_failed",sessionId:null,detail:ve.message}),ve}finally{ne()}}),[n,B,W,re,ne,b,O]),he=m.useCallback((k,N)=>b(N?"置顶项目":"取消置顶",async()=>{await n.setWorkspacePinned(k,N,ye(f.current)),a({type:"workspaces_loaded",value:await n.listWorkspaces(ye(f.current))})}),[n,b]),we=m.useCallback(k=>b("移除项目",async()=>{const N=f.current;if(!N.contextRevision)throw new Ee("工作区上下文尚未完成同步。",409,"context_revision_conflict");await n.removeWorkspace(k,ye(N)),Um(k),a({type:"workspaces_loaded",value:await n.listWorkspaces(ye(f.current))})}),[n,b]),J=m.useCallback(()=>b("创建会话",async()=>{const k=ye(f.current),N=await n.createSession(k);ri(k.workspaceId,N.id),a({type:"sessions_loaded",sessions:tr(f.current.sessions,N),nextCursor:f.current.sessionNextCursor}),a({type:"reset_session_view",activeSessionId:N.id}),await W(N.id,k)}),[n,W,b]),me=O,Ce=m.useCallback(()=>b("加载更早记录",async()=>{const k=f.current.sessionSnapshot,N=f.current.activeSessionId,M=k?.transcript.nextCursor;if(!(!k||!N||!M))try{const Z=await n.sessionSnapshot(N,ye(f.current),M);if(Z.session.id!==k.session.id||Z.threadId!==k.threadId||Z.threadCursor!==k.threadCursor||Z.projectionDigest!==k.projectionDigest)throw new Ee("加载历史记录时会话快照发生变化,正在恢复最新快照。",409,"transcript_cursor_stale");a({type:"older_transcript_loaded",snapshot:Z})}catch(Z){if(!(Z instanceof Ee)||Z.code!=="transcript_cursor_stale")throw Z;re(),a({type:"recovering"});try{await W(N,ye(f.current),{force:!0})}finally{ne()}}}),[n,W,re,ne,b]),ae=m.useCallback((k,N)=>b("重命名会话",async()=>{const M=await n.renameSession(k,N,ye(f.current)),Z=tr(f.current.sessions,M);a({type:"sessions_loaded",sessions:Z,nextCursor:f.current.sessionNextCursor})}),[n,b]),Oe=m.useCallback((k,N)=>b("更新会话标签",async()=>{const M=await n.updateSessionTags(k,N,ye(f.current));a({type:"session_updated",session:M})}),[n,b]),Qe=m.useCallback(k=>b("归档会话",async()=>{const N=await n.archiveSession(k,ye(f.current));a({type:"session_archived",session:N})}),[n,b]),Je=m.useCallback(k=>b("还原会话",async()=>{const N=await n.restoreSession(k,ye(f.current));a({type:"session_restored",session:N})}),[n,b]),It=m.useCallback(k=>b("删除会话",async()=>{await n.deleteSession(k,ye(f.current)),a({type:"session_deleted",sessionId:k})}),[n,b]),lt=m.useCallback(async(k,N=!1)=>{const M=ye(f.current),Z=f.current.archivedSessions,ve=N?Z?.nextCursor:void 0;if(!(N&&!ve)){a({type:"archived_sessions_loading",workspaceId:k});try{const Ae=await n.listArchivedWorkspaceSessions(k,M,ve??void 0);a({type:"archived_sessions_loaded",workspaceId:k,sessions:Ae.sessions,nextCursor:Ae.nextCursor,append:N})}catch(Ae){throw a({type:"archived_sessions_failed",workspaceId:k,detail:as(Ae)}),Ae}}},[n]),Lt=m.useCallback((k,N)=>D("提交任务",{type:"submit",text:k,contextReferences:N}),[D]),gt=m.useCallback((k,N)=>D("加入队列",{type:"queue_followup",text:k,contextReferences:N}),[D]),_t=m.useCallback(async(k,N)=>{await ee("移除排队消息",{type:"remove_queue_item",itemId:k,expectedItemRevision:N})},[ee]),Et=m.useCallback(async(k,N,M)=>{await ee("编辑排队消息",{type:"edit_queue_item",itemId:k,expectedItemRevision:N,text:M})},[ee]),vt=m.useCallback(async(k,N,M)=>{await ee("移动排队消息",{type:"move_queue_item",itemId:k,expectedItemRevision:N,targetIndex:M})},[ee]),At=m.useCallback(async()=>{await D("清空队列",{type:"clear_followups"})},[D]),$t=m.useCallback(async()=>{const k=f.current.sessionSnapshot?.sessionRuntime;if(!k||k.phase!=="queued"||!k.queueId)throw new Ee("排队任务已变化,请等待状态同步后重试。",409,"session_queue_conflict");await D("取消排队任务",{type:"cancel_queued_turn",queueId:k.queueId})},[D]),Rn=m.useCallback(async()=>{await D("中断任务",{type:"interrupt"})},[D]),nr=m.useCallback(async k=>{f.current.mode.baseMode===k&&!f.current.mode.pendingBaseMode||await ee("切换模式",{type:"set_agent_mode",mode:k})},[ee]),rr=m.useCallback(async k=>{await ee(k===null?"继承项目权限":"切换会话权限",k===null?{type:"clear_permission_override"}:{type:"set_permission_override",value:k})},[ee]),pt=m.useCallback(()=>b("加载模型目录",async()=>{const k=f.current;if(!k.activeSessionId)return;const N=await n.modelCatalog(k.activeSessionId,ye(k));a({type:"model_catalog_loaded",catalog:N})}),[n,b]),sr=m.useCallback(async(k,N)=>{await ee("切换会话模型",{type:"select_model",modelId:k,...N?{effort:N}:{}})},[ee]),Tn=m.useCallback(async()=>{await ee("压缩上下文",{type:"compact_context"})},[ee]),Dt=m.useCallback(async(k,N,M)=>{await ee("审核计划",{type:"review_plan",planDigest:k,action:N,...M?{feedback:M}:{}})},[ee]),On=m.useCallback(async(k,N="once")=>{const M=f.current.permission;M&&(await D(k?"确认工具权限":"拒绝工具权限",{type:"permission_decision",requestPermissionId:M.id,approved:k,scope:N}),a({type:"approval_resolved",requestId:M.id,approved:k}))},[D]),on=m.useCallback(async(k,N)=>{await D("更新 Goal",{type:"goal_control",goalAction:k,objective:N});const M=++x.current;re();try{const Z=f.current.activeSessionId,ve=ye(f.current),[Ae]=await Promise.all([n.diagnostics(ve),Z?W(Z,ve,{force:!0}):Promise.resolve()]);if(M!==x.current)return;a({type:"diagnostics_loaded",diagnostics:Ae})}finally{ne()}},[n,W,re,ne,D]),K=m.useCallback(async()=>{const k=await r.refresh(),N=k.document??k.lastGood;if(!N)throw new Ee(k.error??"设置尚不可用。",503);return N},[r]),be=m.useCallback(async(k,N,M)=>{if(N.length<1||N.length>20)throw new Ee("设置变更必须包含 1 到 20 个字段。",400,"settings_invalid_operation");const Z=await n.updateSettings(k,N,ye(f.current),M);return r.accept(Z.settings),Z},[n,r]),_e=m.useCallback(async()=>{await n.openSettingsDocument()},[n]),ze=m.useCallback((k,N=0)=>n.readToolDetail(k,ye(f.current),N),[n]),Gt=m.useCallback((k,N)=>n.listFiles(ye(f.current),k,N),[n]),ln=m.useCallback((k,N)=>n.readFileContent(k,ye(f.current),N),[n]),mn=m.useCallback((k,N,M)=>n.writeFileContent(ye(f.current),k,N,M),[n]),Qt=m.useCallback((k,N)=>n.gitStatus(ye(f.current),k,N),[n]),Tr=m.useCallback(k=>n.gitLog(ye(f.current),k),[n]),Or=m.useCallback((k,N)=>n.gitDiff(k,ye(f.current),N),[n]),gn=m.useCallback((k,N,M,Z)=>n.gitDiffDocument(k,ye(f.current),N,M,Z),[n]),Mn=m.useCallback(()=>n.gitRefs(ye(f.current)),[n]),fi=m.useCallback(k=>n.gitCompare(ye(f.current),k),[n]),pi=m.useCallback(k=>n.gitCompareFileDiff(ye(f.current),k),[n]),hi=m.useCallback(k=>n.gitHistory(ye(f.current),k),[n]),mi=m.useCallback((k,N=0)=>n.gitCommitDetail(ye(f.current),k,N),[n]),gi=m.useCallback((k,N=0)=>n.gitCommitFiles(ye(f.current),k,N),[n]),hs=m.useCallback(k=>n.gitCommitDiff(ye(f.current),k),[n]),vi=m.useCallback(k=>n.gitFilesTarget(ye(f.current),k),[n]),ir=m.useCallback((k=200)=>n.gitGraph(ye(f.current),k),[n]),ms=m.useCallback(k=>n.gitConflictVersions(ye(f.current),k),[n]),or=m.useCallback(k=>n.gitBlob(ye(f.current),k),[n]),sl=m.useCallback(()=>n.gitSubmodules(ye(f.current)),[n]),lr=m.useCallback(k=>n.gitBlame(ye(f.current),k),[n]),Mr=m.useCallback(k=>n.gitFileHistory(ye(f.current),k),[n]),ar=m.useCallback(()=>n.gitCommitPreview(ye(f.current)),[n]),Lr=m.useCallback((k,N)=>n.gitStage(ye(f.current),k,N),[n]),yi=m.useCallback((k,N)=>n.gitUnstage(ye(f.current),k,N),[n]),xi=m.useCallback(k=>n.gitApplyPatch(ye(f.current),k),[n]),wi=m.useCallback(k=>n.gitCommit(ye(f.current),k),[n]),an=m.useCallback(()=>n.review(ye(f.current)),[n]),gs=m.useCallback(async()=>(await n.terminals(ye(f.current))).terminals,[n]),vs=m.useCallback(async(k,N)=>{const M=f.current;if(!M.contextRevision||!M.workspaceId)throw new Ee("工作区上下文尚未完成同步。",409,"context_revision_conflict");return n.createTerminal({expectedContextRevision:M.contextRevision,workspaceId:M.workspaceId,cols:k,rows:N})},[n]),ki=m.useCallback(async k=>{const N=f.current;if(!N.contextRevision||!N.workspaceId)throw new Ee("工作区上下文尚未完成同步。",409,"context_revision_conflict");return n.terminalAttachTicket(k,{expectedContextRevision:N.contextRevision,workspaceId:N.workspaceId})},[n]),ys=m.useCallback(async k=>{const N=f.current;if(!N.contextRevision||!N.workspaceId)throw new Ee("工作区上下文尚未完成同步。",409,"context_revision_conflict");await n.closeTerminal(k,{expectedContextRevision:N.contextRevision,workspaceId:N.workspaceId})},[n]),xs=m.useCallback(k=>n.terminalSocket(k),[n]),ws=m.useCallback(()=>a({type:"notice",notice:null}),[]),ji=m.useMemo(()=>({retryBoot:X,refreshDiagnostics:oe,refreshToolDetails:Q,loadMoreWorkspaces:xe,loadMoreSessions:se,loadWorkspaceSessions:Ie,refreshWorkspaceProjectSummary:$,loadMoreCapabilities:pe,loadMoreToolDetails:V,recoverSession:z,switchWorkspace:te,pickWorkspaceDirectory:q,inspectWorkspacePath:v,activateContext:ue,setWorkspacePinned:he,removeWorkspace:we,createSession:J,activateSession:me,loadOlderTranscript:Ce,renameSession:ae,updateSessionTags:Oe,archiveSession:Qe,restoreSession:Je,deleteSession:It,loadArchivedWorkspaceSessions:lt,submit:Lt,queue:gt,removeQueued:_t,editQueued:Et,moveQueued:vt,clearQueue:At,cancelQueuedTurn:$t,interrupt:Rn,setMode:nr,setPermissionOverride:rr,loadModelCatalog:pt,selectModel:sr,compactContext:Tn,reviewPlan:Dt,answerPermission:On,controlGoal:on,refreshSettings:K,updateSettings:be,openSettingsDocument:_e,readToolDetail:ze,listFiles:Gt,readFileContent:ln,writeFileContent:mn,gitStatus:Qt,gitLog:Tr,gitDiff:Or,gitDiffDocument:gn,gitCommitPreview:ar,gitRefs:Mn,gitCompare:fi,gitCompareFileDiff:pi,gitHistory:hi,gitCommitDetail:mi,gitCommitFiles:gi,gitCommitDiff:hs,gitFilesTarget:vi,gitGraph:ir,gitConflictVersions:ms,gitBlob:or,gitSubmodules:sl,gitBlame:lr,gitFileHistory:Mr,gitStage:Lr,gitUnstage:yi,gitApplyPatch:xi,gitCommit:wi,review:an,terminals:gs,createTerminal:vs,terminalAttachTicket:ki,closeTerminal:ys,terminalSocket:xs,dismissNotice:ws}),[me,ue,ys,vs,Or,gn,ar,Lr,yi,xi,wi,Tr,Qt,Gt,Ce,pe,se,V,xe,pt,Ie,On,At,$t,Tn,Dt,on,J,ws,Et,Rn,gt,ln,ze,an,z,oe,K,Q,$,_t,we,ae,Je,Oe,Qe,It,lt,X,nr,rr,sr,he,Lt,te,q,v,vt,ki,xs,gs,be,_e]);return{state:o,actions:ji}}async function Kx(n,r,o,a){let d=o;for(let p=0;p<2;p+=1){const f=zx(d);if(f.keysToClear.length===0||d.state!=="ready"||!d.writable)return d;if(f.operations.length===0)return Uf(f.keysToClear),d;try{const g=await n.updateSettings(d.revision,f.operations,a,$e());return r.accept(g.settings),Uf(f.keysToClear),g.settings}catch(g){if(p===0&&g instanceof Ee&&g.code==="settings_revision_conflict"){const w=await r.refresh(),x=w.document??w.lastGood;if(x){d=x;continue}}return d}}return d}function ye(n){if(!n.contextRevision||!n.workspaceId)throw new Ee("工作区上下文尚未完成同步。",409,"context_revision_conflict");return{expectedContextRevision:n.contextRevision,workspaceId:n.workspaceId}}function Vf(n,r,o){if(!(n.session.id===r&&n.sessionRuntime.sessionId===r&&n.sessionRuntime.workspaceId===o.workspaceId&&n.composer.sessionId===r&&n.composer.workspaceId===o.workspaceId&&n.composer.contextRevision===o.expectedContextRevision))throw new Ee("Host 返回的会话快照身份与当前项目上下文不一致。",502,"session_snapshot_identity_mismatch")}const Kf="orion.web.view-id.v1",Mp="orion.web.foreground-session.v1:";function Gx(n,r,o){const a=Lp(`${Mp}${n}`);return qx(a,r,o)}function ri(n,r){Qx();const o=`${Mp}${n}`;try{r?globalThis.sessionStorage?.setItem(o,r):globalThis.sessionStorage?.removeItem(o)}catch{}}function Qx(){const n=Lp(Kf);if(n)return n;const r=globalThis.crypto?.randomUUID?.()??`view-${Date.now().toString(36)}`;try{globalThis.sessionStorage?.setItem(Kf,r)}catch{}return r}function Lp(n){try{return globalThis.sessionStorage?.getItem(n)??null}catch{return null}}function Yx(n){if(n.result.includes("failed")||n.result.includes("invalid")||n.result.includes("rejected")||n.result.includes("ignored")||n.result.includes("full")||n.result==="empty")throw new Ee(Xx(n),409)}function Xx(n){if(n.detail)try{const r=JSON.parse(n.detail);if(typeof r.reason=="string")return r.reason}catch{}return`Runtime 未接受操作:${n.result}`}function Gf(n,r,o,a="error"){n({type:"notice",notice:{id:Date.now(),tone:a,title:r,detail:as(o)}})}function as(n){return n instanceof Ee||n instanceof Error?n.message:"发生未知错误。"}function Lo(n){return n instanceof Ee&&n.code==="collection_cursor_stale"}function Jx(n){return n instanceof Ee&&["composer_control_conflict","session_runtime_revision_conflict","session_snapshot_sync_failed"].includes(n.code??"")}function Zx(n){return n instanceof Ee&&["context_revision_conflict","runtime_busy","active_session_changed"].includes(n.code??"")}function ew(n){return new Promise(r=>{globalThis.setTimeout(r,n)})}function tw(n){if(typeof window<"u"&&"requestIdleCallback"in window){const o=window.requestIdleCallback(n,{timeout:1500});return()=>window.cancelIdleCallback(o)}const r=globalThis.setTimeout(n,150);return()=>globalThis.clearTimeout(r)}async function nw(n,r,o){let a=0;const d=Array.from({length:Math.min(Math.max(1,r),n.length)},async()=>{for(;a<n.length;){const p=n[a];a+=1,p!==void 0&&await o(p)}});await Promise.all(d)}function rw(n){return n.sessionId?n.type==="runtime_event"?n.payload.value.type==="permission_requested":n.type!=="thread_event"?!1:["approval.requested","plan.review_requested","turn.completed","turn.failed","turn.interrupted"].includes(n.payload.value.payload.type):!1}const sw=5e3;function iw(n,r){return r||n.tone==="error"?null:sw}function ow({uid:n,notice:r,reconnectNeeded:o,snapshotRetryNeeded:a,pendingAction:d,onDismiss:p,onRecover:f}){const g=o||a,w=!g,x=m.useRef(p);m.useEffect(()=>{x.current=p},[p]);const E=iw(r,g);m.useEffect(()=>{if(E===null)return;const _=window.setTimeout(()=>x.current(n),E);return()=>window.clearTimeout(_)},[E,n]);const C=`notice-${n}`,R=r.tone==="success"?"check":r.tone==="info"?"info":"warning";return i.jsxs("aside",{className:`workbench-notice notice-${r.tone}`,role:r.tone==="error"?"alert":"status","aria-labelledby":C,children:[i.jsx("span",{className:"notice-icon","aria-hidden":"true",children:i.jsx(Y,{name:R,size:17})}),i.jsxs("div",{children:[i.jsx("strong",{id:C,children:r.title}),r.detail?i.jsx("p",{children:r.detail}):null]}),o?i.jsx("button",{type:"button",className:"secondary-button",onClick:()=>f(n),disabled:d,children:"重建连接"}):null,a?i.jsx("button",{type:"button",className:"secondary-button",onClick:()=>f(n),disabled:d,children:"重试同步"}):null,w?i.jsx("button",{type:"button",className:"icon-button",onClick:()=>p(n),"aria-label":"关闭通知",children:i.jsx(Y,{name:"close",size:15})}):null]})}function lw(){const{state:n,actions:r}=Vx(),[o,a]=m.useState(!1),[d,p]=m.useState(Pv),{value:f,update:g,setResourceNavigatorWidth:w}=yx(n.workspaceId,d.workPanel),[x,E]=m.useState(!1),[C,R]=m.useState(!1),[_,A]=m.useState(!1),[L,W]=m.useState(null),[ie,B]=m.useState(null),[Se,re]=m.useState(null),[ne,b]=m.useState(!1),[D,ee]=m.useState([]),X=m.useRef(0),oe=m.useRef(n.notice),Q=m.useRef(null),[xe,se]=m.useState(null),[Ie,$]=m.useState(null),pe=m.useRef(null),V=m.useRef(!1),z=m.useRef(!1),te=m.useRef(null),q=aw(te),v=q>1180,O=v?Tf({containerWidth:q,navigationExpanded:d.projectNavigation.expanded,navigationWidthPx:d.projectNavigation.widthPx,workExpanded:f.expanded,workDetailWidthPx:f.detailWidthPx}):Ro(q,d),ue=O.projectNavigation.mode==="drawer",he=O.workPanel.mode==="drawer",we=O.workPanel.mode==="rail"&&f.expanded,J=he||we&&x,me=he||we?x:O.workPanel.mode==="dock",Ce=J&&x,ae=ue&&o,Oe=ae||Ce,Qe=n.settings?.state==="ready"?n.settings:n.settingsMirror.lastGood??n.settings,Je=Qe?.sections.appearance.theme.effectiveValue,It=Qe?.sections.appearance.motion.effectiveValue,lt=Qe?.sections.appearance.style.effectiveValue??"orion-blocksmith",Lt=Qo(n),gt=m.useCallback(()=>{if(!n.workspace)return;const K=Qe?.revision;if(!K)return;const be=Qe?.sections.appearance.theme.effectiveValue??"system",_e=be==="system"?"light":be==="light"?"dark":"system";r.updateSettings(K,[{op:"set",key:"appearance.theme",value:_e}],$e()).catch(ze=>{console.warn("[theme] 主题切换写入失败",ze)})},[r,Qe,n.workspace]),_t=m.useCallback(K=>{p(be=>{const _e={...be,projectNavigation:{...be.projectNavigation,...K}};return Rv(_e),_e})},[]),Et=m.useCallback(K=>{g({...K,detailWidthPx:K.widthPx===void 0?void 0:Math.max(360,K.widthPx-Ge)})},[g]),vt=m.useCallback(()=>{pe.current=document.activeElement instanceof HTMLElement?document.activeElement:null},[]),At=m.useCallback(()=>{requestAnimationFrame(()=>document.querySelector(".project-search input")?.focus())},[]),$t=m.useCallback(()=>{requestAnimationFrame(()=>document.querySelector('.workspace-rail [aria-label="打开设置"]')?.focus())},[]),Rn=m.useCallback(()=>{ue&&(vt(),E(!1),a(!0)),$t()},[$t,ue,vt]),nr=m.useCallback(()=>{V.current=ae,ae&&(a(!1),E(!1),pe.current=null),R(!0)},[ae]),rr=m.useCallback(()=>{R(!1),V.current&&(V.current=!1,z.current=!0,a(!0))},[]),pt=m.useCallback(()=>{a(!1),E(!1),z.current=!1;const K=pe.current;pe.current=null,K&&requestAnimationFrame(()=>K.focus())},[]);m.useLayoutEffect(()=>{document.documentElement.dataset.theme=Je??"system",document.documentElement.dataset.motion=It??"system",document.documentElement.dataset.uiStyle=lt},[It,Je,lt]),m.useEffect(()=>{oe.current=n.notice;const K=n.notice;K&&Q.current!==K.id&&(Q.current=K.id,ee(be=>be.some(_e=>_e.notice.id===K.id)?be:[...be,{uid:++X.current,notice:K}].slice(-4)))},[n.notice]),m.useEffect(()=>{const K=n.workspaceId;if(!K)return;const be=n.workspaceSessions[K],_e=n.archivedSessions;be?.status==="ready"&&(_e.ownerWorkspaceId===K&&_e.status!=="idle"||r.loadArchivedWorkspaceSessions(K).catch(()=>{}))},[r,n.archivedSessions,n.workspaceId,n.workspaceSessions]);const sr=m.useCallback(K=>{const be=D.find(_e=>_e.uid===K);be&&(oe.current?.id===be.notice.id&&r.dismissNotice(),ee(_e=>_e.filter(ze=>ze.uid!==K)))},[r,D]),Tn=m.useCallback(K=>{const be=D.find(_e=>_e.uid===K);be&&(oe.current?.id===be.notice.id&&r.dismissNotice(),ee(_e=>_e.filter(ze=>ze.uid!==K)),r.recoverSession())},[r,D]);m.useEffect(()=>{const K=window.matchMedia("(prefers-color-scheme: light)"),be=document.querySelector('meta[name="theme-color"]'),_e=()=>{be&&(be.content=jx(lt,Je??"system",K.matches))};return _e(),K.addEventListener("change",_e),()=>K.removeEventListener("change",_e)},[Je,lt]),m.useEffect(()=>{a(!1),E(!1),pe.current=null,V.current=!1,z.current=!1},[n.activeSessionId,n.workspace]),m.useLayoutEffect(()=>{a(!1),E(!1),pe.current=null,z.current=!1},[O.projectNavigation.mode,O.workPanel.mode,ue,he]),m.useEffect(()=>{const K=be=>{const _e=Ho("toggle-project-navigation");if(_e&&Uo(be,_e.tokens)){if(be.preventDefault(),ue){if(o){pt();return}vt(),E(!1),a(!0);return}const ze=!d.projectNavigation.expanded,Gt=!!(!ze&&document.activeElement?.closest(".workspace-rail")),ln=Ro(q,{...d,projectNavigation:{...d.projectNavigation,expanded:ze}});if(ze&&ln.projectNavigation.mode==="drawer"){_t({expanded:ze}),vt(),E(!1),a(!0);return}_t({expanded:ze}),ze?At():Gt&&requestAnimationFrame(()=>{(document.querySelector('.project-navigator-collapsed [aria-label="展开项目导航"]')??document.querySelector(".mobile-nav-toggle"))?.focus()})}};return window.addEventListener("keydown",K),()=>window.removeEventListener("keydown",K)},[pt,At,o,ue,d.projectNavigation,vt,q,_t]),m.useEffect(()=>{const K=Ho("open-shortcut-help");if(!K)return;const be=_e=>{Uo(_e,K.tokens)&&(_e.preventDefault(),b(ze=>!ze))};return window.addEventListener("keydown",be),()=>window.removeEventListener("keydown",be)},[]),m.useEffect(()=>{if(!Oe)return;const K=document.querySelector(".conversation-column"),be=document.querySelector(".workspace-rail"),_e=document.querySelector(".work-panel"),ze=document.querySelector(".workbench-notice-stack"),Gt=document.querySelector(".skip-link");K&&(K.inert=!0),be&&(be.inert=Ce),_e&&(_e.inert=o),ze&&(ze.inert=!0),Gt&&(Gt.inert=!0);const ln=window.setTimeout(()=>{const Qt=Ce?_e?.querySelector('[aria-label="关闭工作面板"]'):z.current?be?.querySelector('[aria-label="打开设置"]'):be?.querySelector(".drawer-close");z.current=!1,Qt?.focus()},0),mn=Qt=>{Qt.key==="Escape"&&!Qt.target?.closest?.('[role="alertdialog"]')&&pt()};return window.addEventListener("keydown",mn),()=>{K&&(K.inert=!1),be&&(be.inert=!1),_e&&(_e.inert=!1),ze&&(ze.inert=!1),Gt&&(Gt.inert=!1),window.clearTimeout(ln),window.removeEventListener("keydown",mn)}},[pt,Oe,o,Ce,n.notice]);const Dt=m.useCallback(()=>{requestAnimationFrame(()=>document.querySelector("#main-content h1")?.focus())},[]),On=()=>{a(!1),r.createSession().then(Dt,Dt)},on=()=>{V.current=!1,z.current=!1,R(!1),requestAnimationFrame(()=>document.querySelector("#orion-composer")?.focus())};return i.jsxs(i.Fragment,{children:[i.jsx("a",{className:"skip-link",href:"#main-content",children:"跳到主要内容"}),i.jsxs("div",{ref:te,className:`workbench-shell project-navigation-${O.projectNavigation.mode} work-panel-mode-${O.workPanel.mode} ${we&&x?"work-panel-transient-overlay":""}`,style:{"--project-navigation-width":`${O.projectNavigation.widthPx}px`,"--project-navigation-preferred-width":`${d.projectNavigation.widthPx}px`,"--work-panel-width":`${O.workPanel.widthPx}px`,"--work-panel-preferred-width":`${f.detailWidthPx+Ge}px`},"aria-busy":n.boot==="loading",children:[i.jsx(Dv,{state:n,drawerOpen:ae,dockVisible:!0,collapsed:O.projectNavigation.mode==="rail",resizable:O.projectNavigation.mode==="dock",width:O.projectNavigation.widthPx,onExpand:()=>{ue?(vt(),E(!1),a(!0)):(_t({expanded:!0}),At())},onCollapse:()=>{ue?pt():_t({expanded:!1})},onOpenWorkspaceDialog:()=>A(!0),onOpenSettings:nr,onLoadMoreWorkspaces:()=>{r.loadMoreWorkspaces()},onCreateSession:On,onLoadWorkspaceSessions:(K,be)=>{r.loadWorkspaceSessions(K,be)},onActivateContext:(K,be)=>{a(!1),r.activateContext(K,be).then(Dt,Dt)},onSetPinned:(K,be)=>{r.setWorkspacePinned(K,be)},onRemoveWorkspace:K=>{r.removeWorkspace(K)},onRefreshSummary:K=>{r.refreshWorkspaceProjectSummary(K)},onRenameSession:W,onSessionTags:B,onArchiveSession:K=>{r.archiveSession(K.id)},onDeleteSession:re,onRestoreSession:K=>{r.restoreSession(K.id)},onWidthPreview:K=>{const be=Ro(q,{...d,projectNavigation:{...d.projectNavigation,widthPx:K}});te.current?.style.setProperty("--project-navigation-width",`${be.projectNavigation.widthPx}px`)},onWidthCommit:K=>_t({widthPx:K})}),i.jsx(iv,{state:n,actions:r,onRevealSettings:Rn,onCreateSession:On,composerInsertion:Ie}),i.jsx(ix,{state:n,actions:r,mode:J?"overlay":"dock",expanded:me,themePreference:Je,onCycleTheme:gt,onShowShortcutHelp:()=>b(!0),onToggleInspector:()=>{if(he||we){if(x){pt();return}vt(),a(!1),E(!0);return}Et({expanded:!f.expanded})},activePanel:f.activePanel,panelOrder:d.workPanel.order,agentPanel:f.agentPanel,onExpand:()=>{he||we?E(!0):Et({expanded:!0})},onCollapse:()=>{J?pt():Et({expanded:!1})},onPanelChange:K=>Et({activePanel:K}),onAgentPanelChange:K=>Et({agentPanel:K}),onWidthPreview:K=>{const be=v?Tf({containerWidth:q,navigationExpanded:d.projectNavigation.expanded,navigationWidthPx:d.projectNavigation.widthPx,workExpanded:!0,workDetailWidthPx:Math.max(360,K-Ge)}):Ro(q,{...d,workPanel:{...d.workPanel,widthPx:K}});te.current?.style.setProperty("--work-panel-width",`${be.workPanel.widthPx}px`)},onWidthCommit:K=>Et({widthPx:K}),width:O.workPanel.widthPx,maxWidthPx:v?_p(q-(d.projectNavigation.expanded?d.projectNavigation.widthPx:Ge))+Ge:void 0,revealFileRequest:xe,onRevealInFiles:K=>{(he||we)&&E(!0),se({id:Date.now(),fileId:K.filesToken,displayPath:K.path}),Et({activePanel:"files"})},onSendToComposer:K=>{$({id:Date.now(),text:K}),he&&pt(),requestAnimationFrame(()=>document.querySelector("#orion-composer")?.focus())},resourceNavigatorWidths:f.resourceNavigatorWidthPx,onResourceNavigatorWidthCommit:w}),Oe?i.jsx("button",{type:"button",className:"drawer-scrim","aria-label":"关闭侧边面板",tabIndex:-1,onClick:pt}):null,D.length>0?i.jsx("div",{className:"workbench-notice-stack","aria-live":"polite",children:D.map(K=>i.jsx(ow,{uid:K.uid,notice:K.notice,reconnectNeeded:n.connection==="replay-required",snapshotRetryNeeded:K.notice.domain==="session-snapshot"&&Lt.status==="failed",pendingAction:!!n.pendingAction,onDismiss:sr,onRecover:Tn},K.uid))}):null,n.boot!=="ready"?i.jsxs("section",{className:"boot-screen",role:n.boot==="error"?"alert":"status",children:[i.jsx(fp,{className:"boot-mark",size:34}),n.boot==="loading"?i.jsxs(i.Fragment,{children:[i.jsx("h1",{children:"正在启动 Orion Workbench"}),i.jsx("p",{children:"建立本地安全握手并恢复工作区状态…"}),i.jsx("span",{className:"boot-loader","aria-hidden":"true"})]}):i.jsxs(i.Fragment,{children:[i.jsx("h1",{children:"无法连接本地 Web Host"}),i.jsx("p",{children:n.bootError||"请确认 Orion Web Host 仍在运行。"}),i.jsxs("button",{type:"button",className:"primary-button",onClick:()=>{r.retryBoot()},disabled:!!n.pendingAction,children:[i.jsx(Y,{name:"refresh",size:15}),"重新连接"]})]})]}):null,i.jsx("div",{className:"sr-only","aria-live":"polite","aria-atomic":"true",children:n.announcement})]}),i.jsx(dy,{open:C,onClose:rr,state:n,actions:r,onGoToSessionControls:on}),i.jsx(Xv,{open:_,onClose:()=>A(!1),state:n,onSelect:r.switchWorkspace,onLoadMore:r.loadMoreWorkspaces,onPickDirectory:r.pickWorkspaceDirectory,onInspect:r.inspectWorkspacePath}),i.jsx(Jv,{open:!!L,onClose:()=>W(null),session:L,pending:!!n.pendingAction,onRename:r.renameSession}),i.jsx(Zv,{open:!!ie,onClose:()=>B(null),session:ie,pending:!!n.pendingAction,onSave:r.updateSessionTags}),i.jsx(ty,{open:!!Se,onClose:()=>re(null),session:Se,pending:!!n.pendingAction,onConfirm:r.deleteSession}),i.jsx(Ry,{open:ne,onClose:()=>b(!1)})]})}function aw(n){const[r,o]=m.useState(()=>typeof window>"u"?1440:Math.max(320,Math.round(window.innerWidth)));return m.useEffect(()=>{const a=n.current;if(!a)return;const d=()=>{const p=Math.max(320,Math.round(a.getBoundingClientRect().width));o(f=>f===p?f:p)};if(d(),typeof ResizeObserver<"u"){const p=new ResizeObserver(d);return p.observe(a),()=>p.disconnect()}return window.addEventListener("resize",d),()=>window.removeEventListener("resize",d)},[n]),r}const Ap=document.getElementById("root");if(!Ap)throw new Error("Orion Web root element was not found.");Pm.createRoot(Ap).render(i.jsx(Sm.StrictMode,{children:i.jsx(lw,{})}));export{ey as C,Y as I,sp as P,zo as R,Ee as W,$e as a,kp as b,Sp as c,uw as d,i as j,m as r,Pn as s};
20
+ ${n.value.request.newString??""}`),priority:"activity"};if(n.kind==="subtask")return{order:r,key:o,kind:"subtask",label:ti(n.value.objective)||n.value.role,preview:is(n.value.summary||n.value.objective),priority:av.has(n.value.state)?"error":"activity"};if(n.kind==="research")return{order:r,key:o,kind:"research",label:ti(n.value.objective)||"Research",preview:is(n.value.conclusion||n.value.objective),priority:n.value.stage==="failed"?"error":"activity"};const a=n.value;if(a.toolActivity){const g=a.toolActivity;return{order:r,key:o,kind:"tool",label:ti(g.summary)||g.name||g.detail||"工具活动",preview:is(g.summary||g.body),priority:g.state==="error"?"error":"activity"}}const d=a.role;let p;return d==="user"||d==="assistant"?p="turn":p=d==="error"||d==="command"&&a.command?.success===!1?"error":"activity",(a.errorLayer||a.budgetStop)&&(p="error"),{order:r,key:o,kind:d==="user"?"user":d==="assistant"?"assistant":"system",priority:p,label:ti(a.content)||a.title||(d==="user"?"用户任务":d==="assistant"?"Orion 回复":sc(d)),preview:is(a.content)}}const av=new Set(["failed","timed_out","rejected","cancelled"]);function ti(n){if(!n)return null;const r=n.replace(/\s+/gu," ").trim();return r.length>80?`${r.slice(0,80)}…`:r}function is(n){if(!n)return;const r=n.trim();if(r)return r.length<=280?r:`${r.slice(0,280)}…`}function cv(n,r){if(n.kind==="transcript")return i.jsx(uv,{entry:n.value});if(n.kind==="tool"){const o=r.transcript.find(a=>a.toolActivity?.callId===n.value.callId)?.toolActivity;return i.jsx(dv,{tool:n.value,activity:o})}return n.kind==="edit"?i.jsx(pv,{edit:n.value}):n.kind==="subtask"?i.jsx(hv,{subtask:n.value}):i.jsx(mv,{research:n.value})}function uv({entry:n}){if(n.toolActivity)return i.jsx(fv,{entry:n});if(xv(n))return i.jsxs("details",{className:"reasoning-card",children:[i.jsxs("summary",{children:[i.jsx(dc,{state:n.live?"running":"ready",describe:!1}),i.jsx("span",{children:n.live?"正在分析":n.title||"推理摘要"}),i.jsx("span",{className:"reasoning-hint",children:"展开查看 Runtime 提供的摘要"})]}),i.jsx(li,{children:n.content})]});const r=n.role;return i.jsxs("article",{className:`message-card role-${r}`,"aria-label":sc(r),children:[i.jsxs("header",{children:[i.jsx("span",{className:"message-avatar","aria-hidden":"true",children:wv(r)}),i.jsx("span",{children:n.title||sc(r)}),n.live?i.jsx("span",{className:"streaming-label",children:"生成中"}):null,n.command?i.jsx("span",{className:`command-state ${n.command.success?"success":"error"}`,children:n.command.success?"成功":"失败"}):null]}),i.jsx("div",{className:"message-body",children:r==="user"?i.jsx("p",{className:"literal-message",children:n.content}):i.jsx(li,{children:n.content})}),n.budgetStop?i.jsxs("div",{className:"budget-stop",role:"status",children:[i.jsx(Y,{name:"pause",size:15}),i.jsxs("span",{children:[n.budgetStop.reason," · 状态已保留"]})]}):null]})}function dv({tool:n,activity:r}){const o=n.workspaceMutation?.phase==="queued"?`等待工作树写入${n.workspaceMutation.queuePosition?`(第 ${n.workspaceMutation.queuePosition} 位)`:""}`:n.workspaceMutation?.phase==="running"?"正在写入工作树":n.state==="running"?"运行中":n.state==="success"?"完成":n.state==="skipped"?"跳过":"失败",a=r?.outputView?.preview||r?.body||n.error||n.summary;return i.jsxs("article",{className:`tool-card tool-${n.state}`,"aria-label":`工具 ${n.name}:${o}`,children:[i.jsxs("div",{className:"tool-card-header",children:[i.jsx("span",{className:`tool-state-icon ${n.state}`,"aria-hidden":"true",children:n.state==="running"?i.jsx("span",{className:"spinner"}):i.jsx(Y,{name:n.state==="success"?"check":n.state==="skipped"?"pause":"warning",size:15})}),i.jsxs("div",{className:"tool-title",children:[i.jsx("strong",{children:n.name}),i.jsxs("span",{children:["#",n.sequence," · ",o,n.duration!==void 0?` · ${rp(n.duration)}`:""]})]}),n.outputBytes!==void 0?i.jsx("span",{className:"byte-pill",children:ic(n.outputBytes)}):null]}),n.summary||n.error?i.jsx("p",{className:n.error?"tool-error-copy":"tool-summary",children:Pn(n.error||n.summary||"")}):null,i.jsxs("details",{className:"tool-details",open:n.state==="error",children:[i.jsx("summary",{children:"输入与详情"}),i.jsxs("dl",{className:"tool-meta-grid",children:[i.jsxs("div",{children:[i.jsx("dt",{children:"授权"}),i.jsx("dd",{children:n.authorization?`${n.authorization.approved?"允许":"拒绝"} · ${n.authorization.source}`:"等待 Runtime 记录"})]}),n.artifactId?i.jsxs("div",{children:[i.jsx("dt",{children:"产物"}),i.jsx("dd",{children:i.jsx("code",{children:n.artifactId})})]}):null]}),i.jsxs("div",{className:"tool-detail-section",children:[i.jsx("span",{className:"micro-label",children:"参数(已脱敏)"}),i.jsx("pre",{tabIndex:0,children:uc(n.args)})]}),a?i.jsxs("div",{className:"tool-detail-section",children:[i.jsx("span",{className:"micro-label",children:"输出预览"}),i.jsx(np,{text:a,defaultOpen:n.state==="error",note:r?.outputView?.omittedBytes?`另有 ${ic(r.outputView.omittedBytes)} 已折叠,可在 Inspector 中查看产物。`:null})]}):null]})]})}function fv({entry:n}){const r=n.toolActivity;return i.jsxs("article",{className:`tool-card tool-${r.state}`,children:[i.jsxs("div",{className:"tool-card-header",children:[i.jsx("span",{className:`tool-state-icon ${r.state}`,"aria-hidden":"true",children:i.jsx(Y,{name:"terminal",size:15})}),i.jsxs("div",{className:"tool-title",children:[i.jsx("strong",{children:r.name}),i.jsx("span",{children:r.detail})]})]}),r.summary?i.jsx("p",{className:"tool-summary",children:r.summary}):null,r.outputView?.preview||r.body?i.jsxs("div",{className:"tool-detail-section tool-output-section",children:[i.jsx("span",{className:"micro-label",children:"输出"}),i.jsx(np,{text:r.outputView?.preview||r.body,defaultOpen:r.state==="error",note:r.outputView?.omittedBytes?`另有 ${ic(r.outputView.omittedBytes)} 已折叠,可在 Inspector 中查看产物。`:null})]}):null]})}function pv({edit:n}){const r=n.request;return i.jsxs("article",{className:"edit-card",children:[i.jsxs("header",{children:[i.jsx("span",{className:"edit-icon",children:i.jsx(Y,{name:"edit",size:15})}),i.jsxs("div",{children:[i.jsx("strong",{children:"文件修改预览"}),i.jsxs("span",{children:[r.kind," · ",r.candidates.length," 个候选"]})]})]}),i.jsx("code",{className:"path-chip",title:r.path,children:r.path}),i.jsxs("details",{children:[i.jsx("summary",{children:"查看替换内容"}),i.jsx("pre",{tabIndex:0,children:Pn(r.newString)})]})]})}function hv({subtask:n}){return i.jsxs("details",{className:`activity-card subtask-card state-${n.state}`,children:[i.jsxs("summary",{children:[i.jsx(Y,{name:"branch",size:16}),i.jsxs("span",{children:[i.jsx("strong",{children:n.role}),i.jsx("small",{children:n.state})]}),n.durationMs!==void 0?i.jsx("time",{children:rp(n.durationMs)}):null]}),i.jsx("p",{children:n.objective}),n.summary?i.jsx(li,{children:n.summary}):null]})}function mv({research:n}){return i.jsxs("details",{className:`activity-card research-card state-${n.stage}`,children:[i.jsxs("summary",{children:[i.jsx(Y,{name:"search",size:16}),i.jsxs("span",{children:[i.jsx("strong",{children:"Research"}),i.jsxs("small",{children:[n.stage," · ",n.sources.length," sources"]})]})]}),n.objective?i.jsx("p",{children:n.objective}):null,n.conclusion?i.jsx(li,{children:n.conclusion}):null,n.sources.length>0?i.jsx("ul",{className:"source-list",children:n.sources.map(r=>i.jsxs("li",{children:[i.jsx(dc,{state:r.status}),i.jsx("span",{children:r.title||r.location||r.id}),i.jsxs("small",{children:[r.provider," · ",r.status]})]},r.id))}):null]})}function gv({state:n,actions:r}){const o=n.permission,a=m.useRef(null),d=m.useRef("");m.useEffect(()=>{d.current!==o.id&&(d.current=o.id,a.current?.focus())},[o.id]);const p=!!n.pendingAction||n.connection!=="live"||!Pr(n);return i.jsxs("section",{ref:a,className:"approval-card",role:"region","aria-live":"assertive","aria-labelledby":"approval-title","aria-describedby":"approval-reason",tabIndex:-1,children:[i.jsxs("div",{className:"approval-heading",children:[i.jsx("span",{className:"approval-icon",children:i.jsx(Y,{name:"warning",size:17})}),i.jsxs("div",{children:[i.jsx("span",{className:"eyebrow",children:"需要你的确认"}),i.jsxs("h2",{id:"approval-title",children:["允许 ",o.name,"?"]})]})]}),i.jsx("p",{id:"approval-reason",children:o.reason||"该工具需要在当前权限策略下获得明确授权。"}),i.jsxs("details",{className:"approval-args",children:[i.jsx("summary",{children:"查看脱敏参数"}),i.jsx("pre",{tabIndex:0,children:uc(o.args,6e3)})]}),i.jsxs("div",{className:"approval-actions",children:[i.jsx("button",{type:"button",className:"danger-ghost-button",onClick:()=>En(r.answerPermission(!1)),disabled:p,children:"拒绝"}),i.jsx("button",{type:"button",className:"secondary-button",onClick:()=>En(r.answerPermission(!0,"once")),disabled:p,children:"仅本次"}),i.jsx("button",{type:"button",className:"secondary-button",onClick:()=>En(r.answerPermission(!0,"project")),disabled:p,children:"允许此项目"}),i.jsx("button",{type:"button",className:"primary-button",onClick:()=>En(r.answerPermission(!0,"global")),disabled:p,children:"始终允许"})]}),i.jsx("p",{className:"approval-footnote",children:"项目与全局授权会写入 Orion 配置;拒绝不会丢失当前会话。"})]})}function vv({state:n,actions:r}){const o=!!n.pendingAction||n.connection!=="live"||!Pr(n);return i.jsxs("details",{className:"queue-dock",children:[i.jsxs("summary",{children:[i.jsxs("span",{children:[n.queue.items.length," 条排队消息"]}),i.jsx("span",{children:"执行时采用最新 Composer 控制"})]}),i.jsxs("div",{className:"queue-list",children:[n.queue.items.map((a,d)=>i.jsx(yv,{item:a,index:d,count:n.queue.items.length,disabled:o,actions:r},a.id)),i.jsx("button",{type:"button",className:"text-button queue-clear",onClick:()=>En(r.clearQueue()),disabled:o,children:"清空队列"})]})]})}function yv({item:n,index:r,count:o,disabled:a,actions:d}){const[p,f]=m.useState(!1),[g,w]=m.useState(n.text);m.useEffect(()=>w(n.text),[n.text]);const x=async()=>{const E=g.trim();E&&(await d.editQueued(n.id,n.revision,E),f(!1))};return i.jsxs("div",{className:"queue-row",children:[i.jsx("span",{className:"queue-index",children:r+1}),p?i.jsx("textarea",{rows:2,value:g,"aria-label":`编辑排队消息 ${r+1}`,onChange:E=>w(E.target.value)}):i.jsx("p",{children:n.text}),i.jsxs("div",{className:"queue-row-actions",children:[i.jsx("button",{type:"button",className:"icon-button","aria-label":`上移排队消息 ${r+1}`,onClick:()=>En(d.moveQueued(n.id,n.revision,r-1)),disabled:a||r===0,children:i.jsx(Y,{name:"arrow-up",size:13})}),i.jsx("button",{type:"button",className:"icon-button queue-move-down","aria-label":`下移排队消息 ${r+1}`,onClick:()=>En(d.moveQueued(n.id,n.revision,r+1)),disabled:a||r===o-1,children:i.jsx(Y,{name:"arrow-up",size:13})}),p?i.jsx("button",{type:"button",className:"text-button",onClick:()=>En(x()),disabled:a||!g.trim(),children:"保存"}):i.jsx("button",{type:"button",className:"text-button",onClick:()=>f(!0),disabled:a,children:"编辑"}),i.jsx("button",{type:"button",className:"icon-button","aria-label":`移除排队消息 ${r+1}`,onClick:()=>En(d.removeQueued(n.id,n.revision)),disabled:a,children:i.jsx(Y,{name:"trash",size:14})})]})]})}function Po({icon:n,title:r,detail:o,action:a,onAction:d}){return i.jsxs("section",{className:"empty-conversation",children:[i.jsx("div",{className:"empty-orbit",children:i.jsx(Y,{name:n,size:26})}),i.jsx("h2",{children:r}),i.jsx("p",{children:o}),a&&d?i.jsx("button",{type:"button",className:"primary-button",onClick:d,children:a}):null]})}function xv(n){const r=`${n.title??""}`.toLocaleLowerCase();return r.includes("reason")||r.includes("think")||r.includes("analysis")||r.includes("推理")||r.includes("思考")}function sc(n){return n==="user"?"你":n==="assistant"?"Orion":n==="command"?"命令":n==="error"?"错误":n==="system"?"系统":n==="status"?"状态":"工具"}function wv(n){return n==="user"?"Y":n==="assistant"?"O":n==="error"?"!":n==="command"?"›":"·"}function En(n){n.catch(()=>{})}function rp(n){return n<1e3?`${Math.round(n)}ms`:n<6e4?`${(n/1e3).toFixed(n<1e4?1:0)}s`:`${Math.floor(n/6e4)}m ${Math.round(n%6e4/1e3)}s`}function ic(n){return n<1024?`${n} B`:n<1048576?`${(n/1024).toFixed(1)} KB`:`${(n/1048576).toFixed(1)} MB`}const kv=.02,jv=.1;function us(n,r,o){const a=Number.isFinite(n)?Math.round(n):r;return Math.min(o,Math.max(r,a))}function Sv({side:n,clientX:r,bounds:o,minWidth:a,maxWidth:d}){const p=n==="left"?r-o.left:o.right-r;return us(p,a,d)}function Cv(n,r,o){const a=o-r;if(a<=0)return 0;const d=(us(n,r,o)-r)/a;return Math.round(d*100)}function bv(n){const{key:r,minWidth:o,maxWidth:a,defaultWidth:d,currentWidth:p,side:f}=n,g=C=>us(C,o,a);if(r==="Home")return g(o);if(r==="End")return g(a);if(r==="Enter"||r===" ")return g(d);if(r!=="ArrowLeft"&&r!=="ArrowRight")return null;const w=n.shiftKey?jv:kv,x=Math.max(1,Math.round((a-o)*w)),E=(r==="ArrowRight"?1:-1)*(f==="left"?1:-1);return g(p+E*x)}function sp({side:n,className:r,minWidth:o,maxWidth:a,defaultWidth:d,label:p,width:f,controls:g,boundsRef:w,resizingScope:x="workbench",onPreview:E,onCommit:C}){const R=m.useRef(us(f??d,o,a)),_=m.useRef(null),A=m.useRef(null),L=m.useRef(null),W=()=>{L.current!==null&&cancelAnimationFrame(L.current),L.current=null},ie=()=>{_.current=null,A.current=null,W(),delete document.documentElement.dataset.panelResizing};m.useEffect(()=>ie,[]),m.useEffect(()=>{f===void 0||_.current!==null||(R.current=us(f,o,a))},[f,o,a]);const B=Q=>{R.current=Q,A.current=Q,L.current===null&&(L.current=requestAnimationFrame(()=>{L.current=null;const xe=A.current;A.current=null,xe!==null&&E(xe)}))},Se=Q=>{let xe;if(w?.current){const se=w.current.getBoundingClientRect();xe={left:se.left,right:se.right}}else xe=Q.currentTarget.closest(".workbench-shell")?.getBoundingClientRect()??{left:0,right:window.innerWidth};return Sv({side:n,clientX:Q.clientX,bounds:xe,minWidth:o,maxWidth:a})},re=Q=>{if(Q.button!==0||_.current!==null)return;Q.preventDefault(),_.current=Q.pointerId,Q.currentTarget.setPointerCapture(Q.pointerId);const xe=x==="resource-split"?"resource-split":n;document.documentElement.dataset.panelResizing=xe,B(Se(Q))},ne=Q=>{_.current===Q.pointerId&&B(Se(Q))},b=Q=>{if(_.current!==Q.pointerId)return;Q.currentTarget.hasPointerCapture(Q.pointerId)&&Q.currentTarget.releasePointerCapture(Q.pointerId);const xe=A.current??R.current;ie(),E(xe),C(xe)},D=Q=>{if(_.current!==Q.pointerId)return;const xe=A.current??R.current;ie(),E(xe),C(xe)},ee=Q=>{R.current=Q,E(Q),C(Q)},X=Q=>{const xe=bv({key:Q.key,shiftKey:Q.shiftKey,minWidth:o,maxWidth:a,defaultWidth:d,currentWidth:R.current,side:n});xe!==null&&(Q.preventDefault(),ee(xe))},oe=Cv(R.current,o,a);return i.jsx("div",{className:`panel-resize-handle panel-resize-handle-${n}${r?` ${r}`:""}`,role:"separator","aria-orientation":"vertical","aria-label":p,"aria-valuemin":0,"aria-valuemax":100,"aria-valuenow":oe,"aria-valuetext":`${R.current} 像素`,"aria-controls":g,tabIndex:0,title:`${p};方向键调整,Shift 加速,Enter 恢复默认,双击亦可恢复`,onPointerDown:re,onPointerMove:ne,onPointerUp:b,onPointerCancel:b,onLostPointerCapture:D,onKeyDown:X,onDoubleClick:()=>ee(us(d,o,a)),children:i.jsx("span",{})})}const Nv=["ArrowDown","ArrowUp","Home","End","Escape"];function Iv({label:n,items:r,disabled:o=!1}){const[a,d]=m.useState(!1),p=m.useRef(null),f=m.useRef(null),g=m.useRef([]),w=m.useId(),x=()=>{d(!1),f.current?.focus()};m.useEffect(()=>{if(!a)return;const C=R=>{p.current?.contains(R.target)||d(!1)};return document.addEventListener("pointerdown",C),()=>document.removeEventListener("pointerdown",C)},[a]),m.useEffect(()=>{if(!a)return;const C=r.findIndex(R=>!R.disabled);g.current[C>=0?C:0]?.focus()},[a]);const E=C=>{if(!Nv.includes(C.key))return;if(C.preventDefault(),C.key==="Escape"){x();return}const R=r.map((L,W)=>({item:L,index:W})).filter(L=>!L.item.disabled);if(!R.length)return;const _=R.findIndex(L=>g.current[L.index]===document.activeElement);let A=0;if(C.key==="Home")A=0;else if(C.key==="End")A=R.length-1;else{const L=C.key==="ArrowDown"?1:-1;A=_<0?0:(_+L+R.length)%R.length}g.current[R[A].index]?.focus()};return i.jsxs("div",{className:"session-row-menu",ref:p,children:[i.jsx("button",{ref:f,type:"button",className:"icon-button session-row-menu-trigger","aria-label":n,"aria-haspopup":"menu","aria-expanded":a,disabled:o,onClick:()=>d(C=>!C),onKeyDown:C=>{if(C.key==="ArrowDown"||C.key==="Enter"||C.key===" "){if(a)return;C.preventDefault(),d(!0)}},children:i.jsx(Y,{name:"more",size:15})}),a?i.jsx("div",{className:"session-menu",role:"menu","aria-label":n,onKeyDown:E,children:r.map((C,R)=>i.jsxs("button",{ref:_=>{g.current[R]=_},type:"button",role:"menuitem",className:`session-menu-item${C.danger?" danger":""}`,tabIndex:-1,disabled:C.disabled,"aria-describedby":C.hint?`${w}-${C.id}`:void 0,onClick:()=>{d(!1),C.onSelect()},children:[C.label,C.hint?i.jsx("span",{id:`${w}-${C.id}`,className:"session-menu-hint",children:C.hint}):null]},C.id))}):null]})}const hc=240,Zo=280,ip=480,lf=48,mc=320,gc=420,op=3200,Ge=48,af=560,lp="orion.web.workbench-layout.v2",_v="orion.web.work-panel.v1",oc=["agent","review","terminal","files","git"],Er=Object.freeze({schemaVersion:2,projectNavigation:Object.freeze({expanded:!0,widthPx:Zo}),workPanel:Object.freeze({expanded:!0,widthPx:gc,activePanel:"agent",agentPanel:"goal"})});function Ro(n,r){const o=Ov(n),a=ap(r.projectNavigation.widthPx),d=ci(r.workPanel.widthPx);if(o<=760)return Object.freeze({projectNavigation:Object.freeze({mode:"drawer",widthPx:0}),conversationWidthPx:o,workPanel:Object.freeze({mode:"drawer",widthPx:0})});if(o<=1180){const x=o-af,C=r.projectNavigation.expanded&&x>=hc?"dock":r.projectNavigation.expanded?"drawer":"rail",R=C==="dock"?Math.min(a,x):C==="rail"?lf:0;return Object.freeze({projectNavigation:Object.freeze({mode:C,widthPx:R}),conversationWidthPx:Math.max(0,o-R),workPanel:Object.freeze({mode:"drawer",widthPx:0})})}const p=r.projectNavigation.expanded?a:lf,f=o-p-af,g=r.workPanel.expanded&&f>=mc,w=g?Math.min(d,f):Ge;return Object.freeze({projectNavigation:Object.freeze({mode:r.projectNavigation.expanded?"dock":"rail",widthPx:p}),conversationWidthPx:Math.max(0,o-p-w),workPanel:Object.freeze({mode:g?"dock":"rail",widthPx:w})})}function ap(n){const r=Number.isFinite(n)?Math.round(n):Zo;return Math.min(ip,Math.max(hc,r))}function ci(n){const r=Number.isFinite(n)?Math.round(n):gc;return Math.min(op,Math.max(mc,r))}function Ev(n,r=null){if(!n)return Tv(r);try{const o=JSON.parse(n);if(!Ao(o)||o.schemaVersion!==2)return Er;const a=Ao(o.projectNavigation)?o.projectNavigation:{},d=Ao(o.workPanel)?o.workPanel:{};return cp({schemaVersion:2,projectNavigation:{expanded:typeof a.expanded=="boolean"?a.expanded:!0,widthPx:ap(Number(a.widthPx))},workPanel:{expanded:typeof d.expanded=="boolean"?d.expanded:!0,widthPx:ci(Number(d.widthPx)),activePanel:ui(d.activePanel)?d.activePanel:"agent",agentPanel:dp(d.agentPanel)?d.agentPanel:"goal",order:Mv(d.order)}})}catch{return Er}}function Pv(){const n=up();if(!n)return Er;try{return Ev(n.localStorage.getItem(lp),n.localStorage.getItem(_v))}catch{return Er}}function Rv(n){const r=up();if(r)try{r.localStorage.setItem(lp,JSON.stringify(n))}catch{}}function Tv(n){if(!n)return Er;try{const r=JSON.parse(n);return!Ao(r)||r.schemaVersion!==1?Er:cp({schemaVersion:2,projectNavigation:{expanded:!0,widthPx:Zo},workPanel:{expanded:typeof r.expanded=="boolean"?r.expanded:!0,widthPx:ci(Number(r.widthPx)),activePanel:ui(r.activePanel)?r.activePanel:"agent",agentPanel:dp(r.agentPanel)?r.agentPanel:"goal"}})}catch{return Er}}function cp(n){return Object.freeze({schemaVersion:2,projectNavigation:Object.freeze({...n.projectNavigation}),workPanel:Object.freeze({...n.workPanel})})}function Ov(n){return!Number.isFinite(n)||n<=0?1440:Math.max(320,Math.round(n))}function up(){return globalThis.window??null}function Mv(n){if(!Array.isArray(n)||n.length!==oc.length)return;const r=new Set;for(const o of n){if(!ui(o)||r.has(o))return;r.add(o)}return Object.freeze([...n])}function ui(n){return["agent","review","terminal","files","git"].includes(String(n))}function dp(n){return["goal","activity","integrations","diagnostics"].includes(String(n))}function Ao(n){return!!n&&typeof n=="object"&&!Array.isArray(n)}function fp({size:n=20,className:r,pixel:o=!1}){const a=m.useId(),d=`orion-bar-a-${a}`,p=`orion-bar-b-${a}`,f=`orion-bar-c-${a}`;return i.jsx("span",{className:r?`orion-brand-mark ${o?"orion-brand-mark-pixel ":""}${r}`:`orion-brand-mark${o?" orion-brand-mark-pixel":""}`,"aria-hidden":"true",style:{width:n,height:n},children:i.jsxs("svg",{viewBox:"0 0 20 20",width:n,height:n,focusable:"false",role:"presentation",shapeRendering:o?"crispEdges":void 0,children:[i.jsxs("defs",{children:[i.jsxs("linearGradient",{id:d,x1:"0",y1:"0",x2:"0",y2:"1",children:[i.jsx("stop",{offset:"0",className:"orion-mark-stop orion-mark-stop-primary"}),i.jsx("stop",{offset:"1",className:"orion-mark-stop orion-mark-stop-secondary"})]}),i.jsxs("linearGradient",{id:p,x1:"0",y1:"0",x2:"0",y2:"1",children:[i.jsx("stop",{offset:"0",className:"orion-mark-stop orion-mark-stop-primary"}),i.jsx("stop",{offset:"1",className:"orion-mark-stop orion-mark-stop-secondary"})]}),i.jsxs("linearGradient",{id:f,x1:"0",y1:"0",x2:"0",y2:"1",children:[i.jsx("stop",{offset:"0",className:"orion-mark-stop orion-mark-stop-primary"}),i.jsx("stop",{offset:"1",className:"orion-mark-stop orion-mark-stop-secondary"})]})]}),o?[{x:2,y:9,h:9},{x:8,y:4,h:14},{x:14,y:7,h:11}].map(g=>i.jsxs(m.Fragment,{children:[i.jsx("rect",{x:g.x,y:g.y,width:"4",height:Math.max(1,g.h-1),rx:0,style:{fill:"var(--accent)"}}),g.h>1?i.jsx("rect",{x:g.x,y:g.y+g.h-1,width:"4",height:"1",rx:0,style:{fill:"var(--accent-2)"}}):null]},g.x)):i.jsxs(i.Fragment,{children:[i.jsx("rect",{className:"orion-mark-bar",x:"2",y:"9",width:"4",height:"9",rx:2,fill:`url(#${d})`}),i.jsx("rect",{className:"orion-mark-bar",x:"8",y:"4",width:"4",height:"14",rx:2,fill:`url(#${p})`}),i.jsx("rect",{className:"orion-mark-bar",x:"14",y:"7",width:"4",height:"11",rx:2,fill:`url(#${f})`})]})]})})}const $o=5,cf=7,lc=1,Lv=Object.freeze({c:[".....",".....",".###.","#....","#....","#....",".###."],d:["....#","....#",".####","#...#","#...#","#...#",".####"],e:[".....",".....",".###.","#...#","#####","#....",".###."],i:["..#..",".....","..#..","..#..","..#..","..#..","..#.."],n:[".....",".....","#.##.","##..#","#...#","#...#","#...#"],o:[".....",".....",".###.","#...#","#...#","#...#",".###."],r:[".....",".....","#.##.","##..#","#....","#....","#...."],"-":[".....",".....",".....",".###.",".....",".....","....."]});function Av(n){const r=[];let o=0;for(const a of n.toLocaleLowerCase()){const d=Lv[a];d&&d.forEach((p,f)=>{let g=-1;for(let w=0;w<=$o;w+=1){const x=w<$o&&p[w]==="#";x&&g<0?g=w:!x&&g>=0&&(r.push({x:o+g,y:f,w:w-g}),g=-1)}}),o+=$o+lc}return r}function $v({text:n,scale:r=2,className:o}){const a=m.useMemo(()=>Av(n),[n]),d=n.length*($o+lc)-lc;return a.length?i.jsx("svg",{className:o?`pixel-wordmark ${o}`:"pixel-wordmark",viewBox:`0 0 ${d} ${cf}`,width:d*r,height:cf*r,shapeRendering:"crispEdges",role:"img","aria-label":n,children:a.map(p=>i.jsx("rect",{x:p.x,y:p.y,width:p.w,height:1,style:{fill:"var(--text)"}},`${p.x}-${p.y}`))}):null}const br=40;function Dv({state:n,drawerOpen:r,dockVisible:o,collapsed:a,resizable:d,width:p,onExpand:f,onCollapse:g,onOpenWorkspaceDialog:w,onOpenSettings:x,onLoadMoreWorkspaces:E,onCreateSession:C,onLoadWorkspaceSessions:R,onActivateContext:_,onSetPinned:A,onRemoveWorkspace:L,onRefreshSummary:W,onRenameSession:ie,onSessionTags:B,onArchiveSession:Se,onDeleteSession:re,onRestoreSession:ne,onWidthPreview:b,onWidthCommit:D}){const[ee,X]=m.useState(""),[oe,Q]=m.useState(0),[xe,se]=m.useState(new Set(n.workspaceId?[n.workspaceId]:[])),Ie=m.useDeferredValue(ee.trim().toLocaleLowerCase()),$=!!n.pendingAction,pe=$||n.processing;m.useEffect(()=>{n.workspaceId&&se(v=>new Set([...v,n.workspaceId]))},[n.workspaceId]),m.useEffect(()=>Q(0),[Ie]);const V=m.useMemo(()=>{const v=[...n.workspaces].sort(zv);return Ie?v.filter(O=>df(O,Ie)?!0:(n.workspaceSessions[O.id]?.items??[]).some(ue=>[ue.name,ue.taskSummary,ue.id].filter(he=>!!he).some(he=>he.toLocaleLowerCase().includes(Ie)))):v},[Ie,n.workspaceSessions,n.workspaces]);m.useEffect(()=>{const v=V.findIndex(O=>O.id===n.workspaceId);v<0||Q(O=>v<O||v>=O+br?Math.floor(v/br)*br:O)},[V,n.workspaceId]);const z=V.slice(oe,oe+br),te=!!(Ie&&(n.workspaceNextCursor||Object.values(n.workspaceSessions).some(v=>!!v.nextCursor))),q=v=>{const O=new Set(xe);O.has(v.id)?O.delete(v.id):(O.add(v.id),n.workspaceSessions[v.id]?W(v.id):R(v.id)),se(O)};if(a&&!r){const v=n.workspaces.find(O=>O.id===n.workspaceId);return i.jsxs("aside",{id:"workspace-rail",className:"workspace-rail project-navigator project-navigator-collapsed","aria-label":"项目与会话",hidden:!o,children:[i.jsx("div",{className:"project-rail-brand","aria-hidden":"true",children:i.jsx(fp,{size:22})}),i.jsx("button",{type:"button",className:"icon-button project-rail-action","aria-label":"展开项目导航",title:"展开项目导航(⌘/Ctrl+B)",onClick:f,children:i.jsx(Y,{name:"sidebar",size:17})}),i.jsx("button",{type:"button",className:"icon-button project-rail-action","aria-label":"新建会话",title:"新建会话",onClick:C,disabled:$||!n.workspaceId,children:i.jsx(Y,{name:"add",size:18})}),i.jsx("button",{type:"button",className:"icon-button project-rail-action project-rail-workspace","aria-label":v?`打开项目 ${v.label}`:"打开项目导航",title:v?.label??"打开项目导航",onClick:f,children:i.jsx(Y,{name:"workspace",size:17})}),i.jsx("span",{className:"project-rail-spacer"}),i.jsx("button",{type:"button",className:"icon-button project-rail-action","aria-label":"打开设置",title:"设置",onClick:x,children:i.jsx(Y,{name:"settings",size:17})}),i.jsx("span",{className:`connection-dot project-rail-connection ${n.connection}`,"aria-label":Ka(n.connection),title:Ka(n.connection)})]})}return i.jsxs("aside",{id:"project-navigation",className:`workspace-rail project-navigator ${r?"drawer-open":""}`,"aria-label":"项目与会话",hidden:!o,children:[i.jsxs("div",{className:"project-toolbar",children:[i.jsxs("div",{className:"project-toolbar-brand",children:[i.jsx($v,{text:"orion-code",scale:2}),i.jsx("h2",{className:"sr-only",children:"项目"})]}),i.jsxs("div",{className:"project-toolbar-actions",children:[i.jsx("button",{type:"button",className:"icon-button","aria-label":"收起项目导航",title:"收起项目导航(⌘/Ctrl+B)",onClick:g,children:i.jsx(Y,{name:"chevron-left"})}),i.jsx("button",{type:"button",className:"icon-button","aria-label":"选择其他工作区",title:"打开其他项目",onClick:w,disabled:pe,children:i.jsx(Y,{name:"add"})})]})]}),i.jsxs("label",{className:"project-search",children:[i.jsx("span",{className:"sr-only",children:"搜索项目和会话"}),i.jsx(Y,{name:"search",size:15}),i.jsx("input",{type:"search",value:ee,onChange:v=>X(v.target.value),placeholder:"搜索项目和会话"}),ee?i.jsx("button",{type:"button","aria-label":"清除搜索",onClick:()=>X(""),children:i.jsx(Y,{name:"close",size:13})}):null]}),i.jsxs("nav",{className:"project-tree","aria-label":"已知项目","aria-description":te?"搜索仅覆盖已加载的项目和会话;仍有分页内容未加载。":void 0,children:[z.map((v,O)=>{const ue=oe+O,he=V[ue-1],we=xe.has(v.id)||!!Ie,J=n.workspaceSessions[v.id],me=n.workspaceProjectSummaries[v.id],Ce=df(v,Ie)?J?.items??[]:Wv(J?.items??[],Ie);return i.jsxs(m.Fragment,{children:[ue===0||he?.pinnedOrder!==void 0&&v.pinnedOrder===void 0?i.jsx("h3",{className:"project-group-heading",role:"presentation",children:v.pinnedOrder===void 0?"RECENT":"PINNED"}):null,i.jsxs("section",{className:`project-node ${v.active?"active":""} ${v.available?"":"unavailable"}`,children:[i.jsxs("div",{className:"project-row",children:[i.jsxs("button",{id:`project-${v.id}`,type:"button",className:"project-toggle","aria-expanded":we,"aria-controls":`project-${v.id}-sessions`,"aria-current":v.active?"page":void 0,onClick:()=>q(v),onKeyDown:ae=>{if(ae.key==="ArrowRight"){ae.preventDefault(),we?ae.currentTarget.closest(".project-node")?.querySelector(".project-session-main")?.focus():q(v);return}if(ae.key==="ArrowLeft"&&we){ae.preventDefault(),q(v);return}uf(ae)},children:[i.jsx(Y,{name:"chevron",size:13}),i.jsx("span",{className:"workspace-icon",children:i.jsx(Y,{name:"workspace",size:15})}),i.jsxs("span",{className:"project-copy",children:[i.jsx("strong",{children:v.label}),i.jsx("span",{title:v.path,children:me?`${me.detached?me.head||"detached":me.branch||"Git"} · ${me.dirtyCount?`M${me.dirtyCount}`:"clean"}`:Fv(v.path)})]})]}),i.jsx("button",{type:"button",className:"icon-button project-pin","aria-label":`${v.pinnedOrder===void 0?"置顶":"取消置顶"}项目 ${v.label}`,"aria-pressed":v.pinnedOrder!==void 0,onClick:()=>A(v.id,v.pinnedOrder===void 0),disabled:$,children:i.jsx("span",{"aria-hidden":"true",children:v.pinnedOrder===void 0?"○":"●"})}),!v.available&&!v.active?i.jsx("button",{type:"button",className:"icon-button project-remove","aria-label":`移除不可用项目 ${v.label}`,onClick:()=>L(v.id),disabled:$,children:i.jsx(Y,{name:"close",size:13})}):i.jsx("button",{type:"button",className:"icon-button project-add-session","aria-label":`在 ${v.label} 新建会话`,disabled:$||!v.available||!v.active,onClick:C,title:v.active?"新建会话":"先激活项目后新建会话",children:i.jsx(Y,{name:"add",size:14})})]}),we?i.jsxs(m.Fragment,{children:[i.jsxs("div",{id:`project-${v.id}-sessions`,className:"project-sessions",role:"list","aria-label":`${v.label} 的会话`,children:[J?.status==="loading"&&!J.items.length?i.jsx("p",{className:"project-loading",role:"listitem",children:"正在加载会话…"}):null,J?.status==="error"?i.jsx("div",{role:"listitem",children:i.jsx("button",{type:"button",className:"project-load-error",onClick:()=>R(v.id),children:"加载失败,重试"})}):null,Ce.map(ae=>{const Oe=v.active&&ae.id===n.activeSessionId,Qe=n.sessionRuntimeById[ae.id],Je=qv(Qe),It=!v.active&&pe,lt=Hv(Qe?.phase),Lt=ae.tags??[];return i.jsxs("div",{className:`project-session-row ${Oe?"active":""}`,role:"listitem",children:[i.jsxs("button",{type:"button",className:"project-session-main","aria-current":Oe?"page":void 0,"aria-disabled":Oe||It||!v.available,onClick:()=>{Oe||_(v.id,ae.id)},disabled:It||!v.available,onKeyDown:gt=>{if(gt.key==="ArrowLeft"){gt.preventDefault(),document.getElementById(`project-${v.id}`)?.focus();return}uf(gt)},children:[i.jsx("span",{className:`session-state ${Je.tone}`,"aria-hidden":"true"}),i.jsxs("span",{children:[i.jsx("strong",{children:ds(ae)}),i.jsxs("small",{children:[ff(ae.updatedAt)," · ",ae.messageCount," 条"]}),Lt.length>0?i.jsxs("small",{className:"project-session-tags","aria-label":"会话标签",children:[Lt.slice(0,3).map(gt=>i.jsx("span",{className:"session-tag-badge",children:gt},gt)),Lt.length>3?i.jsxs("span",{className:"session-tag-more",children:["+",Lt.length-3]}):null]}):null,Je.label?i.jsx("small",{className:"project-session-status",children:Je.label}):null]})]}),v.active?i.jsx(Iv,{label:`会话 ${ds(ae)} 操作`,disabled:$,items:[{id:"rename",label:"重命名…",onSelect:()=>ie(ae)},{id:"tags",label:"管理标签…",onSelect:()=>B(ae)},{id:"archive",label:"归档",disabled:lt,hint:lt?"会话运行中":void 0,onSelect:()=>Se(ae)},{id:"delete",label:"删除…",danger:!0,disabled:lt,hint:lt?"会话运行中":void 0,onSelect:()=>re(ae)}]}):null]},ae.id)}),J?.status==="ready"&&!Ce.length?i.jsx("div",{role:"listitem",children:i.jsx("button",{type:"button",className:"project-empty-session",disabled:pe||!v.available,onClick:()=>_(v.id,null),children:Ie?"没有匹配会话":"打开项目"})}):null,J?.nextCursor?i.jsx("div",{role:"listitem",children:i.jsx("button",{type:"button",className:"text-button project-load-more",onClick:()=>R(v.id,!0),children:"加载更多会话"})}):null]}),v.active&&(n.archivedSessions.items.length>0||n.archivedSessions.status==="loading")?i.jsxs("details",{className:"archived-section",children:[i.jsxs("summary",{children:["已归档(",n.archivedSessions.items.length,n.archivedSessions.status==="loading"?"…":"",")"]}),i.jsx("div",{className:"archived-list",role:"list","aria-label":"已归档会话",children:n.archivedSessions.items.map(ae=>i.jsxs("div",{className:"archived-row",role:"listitem",children:[i.jsxs("span",{className:"archived-copy",children:[i.jsx("strong",{children:ds(ae)}),i.jsx("small",{children:ff(ae.updatedAt)})]}),i.jsx("button",{type:"button",className:"text-button",disabled:$,onClick:()=>ne(ae),children:"还原"}),i.jsx("button",{type:"button",className:"text-button archived-delete",disabled:$,onClick:()=>re(ae),children:"删除"})]},ae.id))})]}):null]}):null]})]},v.id)}),V.length?null:i.jsxs("div",{className:"empty-rail",children:[i.jsx(Y,{name:"search"}),i.jsx("p",{children:"没有匹配的项目或会话"})]}),oe>0?i.jsx("button",{type:"button",className:"text-button project-window-more",onClick:()=>Q(v=>Math.max(0,v-br)),children:"上一批项目"}):null,oe+br<V.length?i.jsx("button",{type:"button",className:"text-button project-window-more",onClick:()=>Q(v=>v+br),children:"下一批项目"}):n.workspaceNextCursor?i.jsx("button",{type:"button",className:"text-button project-window-more",onClick:E,children:"加载更多项目"}):null]}),i.jsxs("footer",{className:"rail-footer",children:[i.jsx("span",{className:`connection-dot ${n.connection}`,"aria-hidden":"true"}),i.jsx("span",{"data-testid":"runtime-connection-state","data-state":n.connection,title:Bv(n.connection),children:Ka(n.connection)}),i.jsx("button",{type:"button",className:"icon-button rail-settings","aria-label":"打开设置",onClick:x,children:i.jsx(Y,{name:"settings",size:14})}),n.bootstrap?.productVersion?i.jsxs("span",{className:"version",children:["v",n.bootstrap.productVersion]}):null]}),d?i.jsx(sp,{side:"left",minWidth:hc,maxWidth:ip,defaultWidth:Zo,label:"拖动或按方向键调整项目导航宽度",width:p,controls:"workspace-rail",onPreview:b,onCommit:D}):null]})}function uf(n){if(!["ArrowDown","ArrowUp","Home","End"].includes(n.key))return;const r=n.currentTarget.closest(".project-tree");if(!r)return;const o=Array.from(r.querySelectorAll(".project-toggle:not(:disabled), .project-session-main:not(:disabled)")).filter(p=>p.getClientRects().length>0),a=o.indexOf(n.currentTarget);if(a<0||o.length===0)return;const d=n.key==="Home"?0:n.key==="End"?o.length-1:Math.max(0,Math.min(o.length-1,a+(n.key==="ArrowDown"?1:-1)));n.preventDefault(),o[d]?.focus()}function zv(n,r){return n.pinnedOrder!==void 0||r.pinnedOrder!==void 0?n.pinnedOrder===void 0?1:r.pinnedOrder===void 0?-1:n.pinnedOrder-r.pinnedOrder:Date.parse(r.lastActivatedAt)-Date.parse(n.lastActivatedAt)}function df(n,r){return!!(r&&(n.label.toLocaleLowerCase().includes(r)||n.path.toLocaleLowerCase().includes(r)))}function Wv(n,r){return r?n.filter(o=>[o.name,o.taskSummary,o.id,o.model].filter(a=>!!a).some(a=>a.toLocaleLowerCase().includes(r))):n}function ds(n){return n.name||n.taskSummary||`会话 ${n.id.slice(0,8)}`}function pp(n){const r=n.replace(/[\\/]+$/,"");return r.split(/[\\/]/).filter(Boolean).at(-1)??r}function Fv(n){return n.length<=31?n:`…${n.slice(-30)}`}function ff(n){const r=Date.parse(n);if(!Number.isFinite(r))return"未知";const o=Math.max(0,Math.floor((Date.now()-r)/6e4));if(o<1)return"刚刚";if(o<60)return`${o} 分钟前`;const a=Math.floor(o/60);if(a<24)return`${a} 小时前`;const d=Math.floor(a/24);return d<30?`${d} 天前`:new Date(r).toLocaleDateString("zh-CN")}function Ka(n){return n==="live"?"已连接":n==="offline"?"离线":n==="replay-required"?"事件流需恢复":n==="closed"?"已关闭":n==="connecting"?"正在连接…":"正在重连…"}function Bv(n){return n==="live"?"本地 Web Host 已连接":n==="offline"?"浏览器离线":n==="replay-required"?"Web Host 事件流需要恢复":n==="closed"?"本地 Web Host 已关闭":n==="connecting"?"正在连接本地 Web Host":"正在重连本地 Web Host"}function qv(n){return!n||n.phase==="cold"?{label:"",tone:""}:n.pendingApprovalCount>0||n.phase==="waiting_approval"?{label:"等待审批",tone:"approval"}:n.phase==="running"||n.phase==="starting"?{label:n.phase==="starting"?"正在启动":"运行中",tone:"running"}:n.phase==="queued"?{label:n.queuePosition?`排队 ${n.queuePosition}`:"排队中",tone:"queued"}:n.phase==="failed"?{label:"失败",tone:"failed"}:n.phase==="interrupted"?{label:"已中断",tone:"failed"}:n.phase==="stopping"?{label:"正在停止",tone:"running"}:{label:"已就绪",tone:"ready"}}const Uv=new Set(["starting","queued","running","waiting_approval","stopping"]);function Hv(n){return n?Uv.has(n):!1}const Vv={available:"可用",missing:"目录不存在",not_directory:"不是文件夹",unreadable:"无法读取"},pf=["prepare","runtime","session"],Kv={prepare:"准备项目",runtime:"加载本地 Runtime",session:"恢复会话(如有)"};function Gv({candidate:n,busy:r,stage:o="prepare",error:a,onCancel:d,onOpen:p}){const f=n.availability==="available"&&!n.isActive,g=n.isActive?"当前项目":n.availability!=="available"?"不可打开":r?"正在打开…":"打开项目",w=pf.indexOf(o);return i.jsxs("section",{className:"workspace-confirm","aria-label":"已选择本地项目",children:[i.jsxs("header",{className:"workspace-confirm-head",children:[i.jsx("span",{className:"workspace-confirm-name",title:n.canonicalPath,children:n.label}),i.jsxs("span",{className:"workspace-confirm-meta",children:[n.kind==="git"?"Git 项目":"本地文件夹"," ·"," ",Vv[n.availability],typeof n.sessionCount=="number"?` · ${n.sessionCount} 个会话`:n.sessionCountStatus==="deferred"?" · 会话数读取中":""]})]}),i.jsx("p",{className:"workspace-confirm-path",children:n.canonicalPath}),i.jsx("p",{className:"workspace-confirm-note",children:"已解析真实路径;此操作不会读取目录外的文件。"}),r?i.jsx("ol",{className:"workspace-confirm-stages","aria-label":"打开进度",children:pf.map((x,E)=>i.jsx("li",{className:"workspace-confirm-stage","aria-current":x===o?"step":void 0,"data-state":E<w?"done":E===w?"current":"todo",children:Kv[x]},x))}):null,a?i.jsx("p",{className:"field-error",role:"alert",children:a}):null,i.jsxs("footer",{className:"workspace-confirm-actions",children:[i.jsx("button",{type:"button",className:"text-button",onClick:d,disabled:r,children:"取消"}),i.jsx("button",{type:"button",className:"primary-button",onClick:p,disabled:r||!f,"aria-busy":r,children:g})]})]})}const hp=Object.freeze({phase:"browse",candidate:null,pendingPath:null,error:null,pickerReturned:!1});function Qv(n,r){switch(r.type){case"picker-started":return{...n,phase:"picker-pending",error:null,pickerReturned:!1};case"picker-cancelled":return{...n,phase:"browse",error:null,pendingPath:null,pickerReturned:!0};case"picker-unavailable":return{...n,phase:"browse",error:r.reason,pendingPath:null,pickerReturned:!0};case"inspect-started":return{...n,phase:"inspect-pending",pendingPath:r.path,candidate:null,error:null,pickerReturned:!1};case"inspect-succeeded":return{...n,phase:"confirm",candidate:r.candidate,pendingPath:null,error:null};case"activate-started":return n.phase!=="confirm"||!n.candidate?n:{...n,phase:"activate-pending",error:null};case"failed":return{...n,phase:n.candidate?"confirm":"browse",error:r.message,pendingPath:null};case"back-to-browse":return{...n,phase:"browse",candidate:null,pendingPath:null,error:null};case"reset":return hp;default:return n}}function Yv(n){return n.phase==="picker-pending"||n.phase==="inspect-pending"||n.phase==="activate-pending"}function di({open:n,onClose:r,labelledBy:o,describedBy:a,className:d="",children:p}){const f=m.useRef(null);m.useEffect(()=>{const w=f.current;w&&(n&&!w.open&&w.showModal(),!n&&w.open&&w.close())},[n]);const g=w=>{w.target===w.currentTarget&&r()};return i.jsx("dialog",{ref:f,className:`modal ${d}`.trim(),"aria-labelledby":o,"aria-describedby":a,onCancel:w=>{w.preventDefault(),r()},onClose:r,onClick:g,children:p})}function Xv({open:n,onClose:r,state:o,onSelect:a,onLoadMore:d,onPickDirectory:p,onInspect:f}){const[g,w]=m.useState(""),[x,E]=m.useState(!1),[C,R]=m.useState(""),[_,A]=m.useReducer(Qv,hp);m.useEffect(()=>{n&&(w(""),E(!1),R(""),A({type:"reset"}))},[n]);const L=Yv(_),W=!!o.pendingAction||L,B=_.phase==="confirm"||_.phase==="activate-pending"?_.candidate:null,Se=C.trim().toLocaleLowerCase(),re=V=>!Se||V.label.toLocaleLowerCase().includes(Se)||V.path.toLocaleLowerCase().includes(Se),ne=o.workspaces.filter(re),b=ne.filter(V=>V.pinnedOrder!==void 0),D=ne.filter(V=>V.pinnedOrder===void 0),ee=3,X=x?D:D.slice(0,ee),oe=D.length-X.length,Q=b.length>0||D.length>0,xe=async(V,z)=>{A({type:"inspect-started",path:V});try{const te=await f(V);A({type:"inspect-succeeded",candidate:{...te,source:z}})}catch(te){A({type:"failed",message:te instanceof Error?te.message:"无法读取该目录。"})}},se=async()=>{A({type:"picker-started"});try{const V=await p();if(V.outcome==="cancelled"){A({type:"picker-cancelled"});return}if(V.outcome!=="selected"||!V.path){A({type:"picker-unavailable",reason:"系统目录选择器不可用,请在高级选项中粘贴绝对路径。"});return}await xe(V.path,"picker")}catch(V){A({type:"picker-unavailable",reason:V instanceof Error?V.message:"无法打开系统目录选择器。"})}},Ie=async V=>{A({type:"activate-started"});try{await a(V.canonicalPath),r()}catch(z){A({type:"failed",message:z instanceof Error?z.message:"工作区切换失败。"})}},$=V=>{xe(V.path,V.pinnedOrder!==void 0?"pinned":"recent")},pe=V=>{V.preventDefault();const z=g.trim();z&&xe(z,"manual")};return i.jsxs(di,{open:n,onClose:r,labelledBy:"workspace-dialog-title",describedBy:"workspace-dialog-description",className:"workspace-modal",children:[i.jsxs("div",{className:"modal-header",children:[i.jsxs("div",{children:[i.jsx("span",{className:"eyebrow",children:"LOCAL WORKSPACE"}),i.jsx("h2",{id:"workspace-dialog-title",children:"打开或新增项目"}),i.jsx("p",{id:"workspace-dialog-description",children:"选择一个本地目录作为项目;Host 会解析真实路径并拒绝无效目录。"})]}),i.jsx("button",{type:"button",className:"icon-button",onClick:r,"aria-label":"关闭工作区选择",children:i.jsx(Y,{name:"close"})})]}),i.jsxs("div",{className:"workspace-picker",children:[i.jsxs("label",{className:"workspace-search",children:[i.jsx("span",{className:"sr-only",children:"搜索最近项目"}),i.jsx(Y,{name:"search",size:15}),i.jsx("input",{type:"search",value:C,onChange:V=>R(V.target.value),placeholder:"搜索最近项目…",disabled:W})]}),i.jsxs("button",{type:"button",className:"workspace-pick-folder primary-button",onClick:()=>{se()},disabled:_.phase==="picker-pending"||W&&!L,"aria-busy":_.phase==="picker-pending",children:[i.jsx(Y,{name:"workspace",size:16}),_.phase==="picker-pending"?"正在打开 Finder…":"从 Finder 选择文件夹…"]}),_.error?i.jsx("p",{className:"field-error",role:"alert",children:_.error}):null,_.phase==="inspect-pending"?i.jsxs("p",{className:"workspace-inspect-pending",role:"status",children:["正在解析 ",_.pendingPath,"…"]}):null]}),B?i.jsx(Gv,{candidate:B,busy:_.phase==="activate-pending",stage:_.phase==="activate-pending"?"runtime":"prepare",error:_.error,onCancel:()=>A({type:"back-to-browse"}),onOpen:()=>{Ie(B)}}):null,i.jsxs("div",{className:"workspace-options",role:"group","aria-label":"常用工作区",children:[b.length>0?i.jsxs(i.Fragment,{children:[i.jsx("h3",{className:"workspace-group-heading",children:"固定项目"}),b.map(V=>i.jsx(hf,{workspace:V,locked:W,onOpen:$},V.id))]}):null,D.length>0?i.jsxs(i.Fragment,{children:[i.jsx("h3",{className:"workspace-group-heading",children:b.length>0?"最近打开":"最近项目"}),X.map(V=>i.jsx(hf,{workspace:V,locked:W,onOpen:$},V.id))]}):null,Q?null:i.jsx("p",{className:"workspace-empty",children:"没有匹配的项目。"}),oe>0||x&&D.length>ee?i.jsx("button",{type:"button",className:"text-button workspace-toggle-all","aria-expanded":x,onClick:()=>E(V=>!V),children:x?"收起其他项目":`其他项目(${oe})`}):null,o.workspaceNextCursor?i.jsx("button",{type:"button",className:"text-button",onClick:()=>{d()},disabled:W,children:"加载更多工作区"}):null]}),i.jsxs("details",{className:"workspace-advanced",children:[i.jsx("summary",{children:"高级:粘贴绝对路径"}),i.jsxs("form",{className:"workspace-path-form",onSubmit:pe,children:[i.jsx("label",{htmlFor:"workspace-path-input",children:"打开其他本地目录"}),i.jsxs("div",{className:"path-input-row",children:[i.jsx("input",{id:"workspace-path-input",value:g,onChange:V=>w(V.target.value),placeholder:"/Users/name/project",spellCheck:!1,autoComplete:"off"}),i.jsx("button",{type:"submit",className:"primary-button",disabled:!g.trim()||W,children:"打开"})]})]})]})]})}function hf({workspace:n,locked:r,onOpen:o}){return i.jsxs("button",{type:"button",className:`workspace-option ${n.active?"active":""}`,disabled:n.active||!n.available||r,onClick:()=>o(n),children:[i.jsx("span",{className:"workspace-icon",children:i.jsx(Y,{name:"workspace",size:17})}),i.jsxs("span",{children:[i.jsx("strong",{children:n.label||pp(n.path)}),i.jsx("small",{title:n.path,children:n.path})]}),n.active?i.jsx("span",{className:"current-pill",children:"当前"}):n.available?i.jsx(Y,{name:"chevron",size:15}):i.jsx("span",{className:"current-pill",children:"不可用"})]})}function Jv({open:n,onClose:r,session:o,pending:a,onRename:d}){const[p,f]=m.useState(""),[g,w]=m.useState(""),x=o?.id;m.useEffect(()=>{n&&o&&(f(ds(o)),w(""))},[n,x]);const E=async C=>{if(C.preventDefault(),!(!o||!p.trim())){w("");try{await d(o.id,p.trim()),r()}catch(R){w(R instanceof Error?R.message:"重命名失败,请重试。")}}};return i.jsx(di,{open:n,onClose:r,labelledBy:"rename-title",className:"rename-modal",children:i.jsxs("form",{onSubmit:E,children:[i.jsxs("header",{className:"modal-header",children:[i.jsxs("div",{children:[i.jsx("span",{className:"eyebrow",children:"SESSION"}),i.jsx("h2",{id:"rename-title",children:"重命名会话"})]}),i.jsx("button",{type:"button",className:"icon-button",onClick:r,"aria-label":"关闭重命名窗口",children:i.jsx(Y,{name:"close"})})]}),i.jsxs("div",{className:"rename-body",children:[i.jsx("label",{htmlFor:"session-name",children:"会话名称"}),i.jsx("input",{id:"session-name",value:p,onChange:C=>{f(C.target.value),g&&w("")},maxLength:120,autoFocus:!0}),g?i.jsx("p",{className:"field-error",role:"alert",children:g}):null]}),i.jsxs("footer",{className:"modal-footer",children:[i.jsx("button",{type:"button",className:"secondary-button",onClick:r,children:"取消"}),i.jsx("button",{type:"submit",className:"primary-button",disabled:a||!p.trim(),children:a?"保存中…":"保存"})]})]})})}const mf=8;function Zv({open:n,onClose:r,session:o,pending:a,onSave:d}){const[p,f]=m.useState(()=>o?.tags?[...o.tags]:[]),[g,w]=m.useState(""),[x,E]=m.useState(""),C=o?.id;m.useEffect(()=>{n&&o&&(f(o.tags??[]),w(""),E(""))},[n,C]);const R=()=>{const L=g.trim().slice(0,32);if(w(""),!!L&&!p.includes(L)){if(p.length>=mf){E(`最多 ${mf} 个标签。`);return}f([...p,L]),E("")}},_=L=>f(p.filter(W=>W!==L)),A=async L=>{if(L.preventDefault(),!!o){E("");try{await d(o.id,p),r()}catch(W){E(W instanceof Error?W.message:"保存标签失败,请重试。")}}};return i.jsx(di,{open:n,onClose:r,labelledBy:"session-tags-title",className:"tags-modal",children:i.jsxs("form",{onSubmit:A,children:[i.jsxs("header",{className:"modal-header",children:[i.jsxs("div",{children:[i.jsx("span",{className:"eyebrow",children:"SESSION"}),i.jsx("h2",{id:"session-tags-title",children:"管理会话标签"})]}),i.jsx("button",{type:"button",className:"icon-button",onClick:r,"aria-label":"关闭标签窗口",children:i.jsx(Y,{name:"close"})})]}),i.jsxs("div",{className:"session-tags-body",children:[o?i.jsx("p",{className:"modal-description",children:ds(o)}):null,i.jsx("div",{className:"session-tags-chips",role:"list","aria-label":"当前标签",children:p.length===0?i.jsx("span",{className:"session-tags-empty",children:"还没有标签,输入后回车添加。"}):p.map(L=>i.jsxs("span",{className:"session-tag-chip",role:"listitem",children:[L,i.jsx("button",{type:"button",className:"icon-button session-tag-remove","aria-label":`移除标签 ${L}`,onClick:()=>_(L),children:i.jsx(Y,{name:"close",size:11})})]},L))}),i.jsx("label",{htmlFor:"session-tag-input",children:"新标签"}),i.jsx("input",{id:"session-tag-input",value:g,onChange:L=>{w(L.target.value),x&&E("")},onKeyDown:L=>{(L.key==="Enter"||L.key===","||L.key===",")&&(L.preventDefault(),R())},placeholder:"回车或逗号添加",maxLength:32,autoFocus:!0}),x?i.jsx("p",{className:"field-error",role:"alert",children:x}):null]}),i.jsxs("footer",{className:"modal-footer",children:[i.jsx("button",{type:"button",className:"secondary-button",onClick:r,children:"取消"}),i.jsx("button",{type:"submit",className:"primary-button",disabled:a,children:a?"保存中…":"保存"})]})]})})}function ey({open:n,onClose:r,title:o,body:a,confirmLabel:d,danger:p=!1,pending:f=!1,onConfirm:g}){const w=m.useId(),x=async()=>{if(!f)try{await g(),r()}catch{}};return i.jsxs(di,{open:n,onClose:r,labelledBy:w,className:"confirm-modal",children:[i.jsxs("header",{className:"modal-header",children:[i.jsx("h2",{id:w,children:o}),i.jsx("button",{type:"button",className:"icon-button",onClick:r,"aria-label":"关闭确认窗口",children:i.jsx(Y,{name:"close"})})]}),i.jsx("p",{className:"confirm-body",children:a}),i.jsxs("footer",{className:"modal-footer",children:[i.jsx("button",{type:"button",className:"secondary-button",autoFocus:!0,onClick:r,children:"取消"}),i.jsx("button",{type:"button",className:p?"danger-button":"primary-button",disabled:f,onClick:()=>{x()},children:f?"处理中…":d})]})]})}function ty({open:n,onClose:r,session:o,pending:a,onConfirm:d}){const p=async()=>{if(o)try{await d(o.id),r()}catch{}};return i.jsxs(di,{open:n,onClose:r,labelledBy:"confirm-delete-title",describedBy:"confirm-delete-description",className:"delete-modal",children:[i.jsxs("div",{className:"modal-header",children:[i.jsxs("div",{children:[i.jsx("span",{className:"eyebrow",children:"SESSION"}),i.jsx("h2",{id:"confirm-delete-title",children:"删除会话"})]}),i.jsx("button",{type:"button",className:"icon-button",onClick:r,"aria-label":"关闭删除确认",children:i.jsx(Y,{name:"close"})})]}),i.jsxs("p",{id:"confirm-delete-description",className:"confirm-delete-body",children:["将永久删除会话",i.jsx("strong",{children:o?`「${ds(o)}」`:""}),"及其全部记录(消息、文件变更、目标与检查点)。此操作不可恢复。"]}),i.jsxs("footer",{className:"modal-footer",children:[i.jsx("button",{type:"button",className:"secondary-button",onClick:r,children:"取消"}),i.jsx("button",{type:"button",className:"danger-button",disabled:a,onClick:()=>{p()},children:a?"删除中…":"永久删除"})]})]})}const ny=["appearance.style","appearance.theme","appearance.motion","defaults.model","defaults.effort","permissions.toolConfirmation"];function Bo(n,r){return r==="appearance.style"?n.sections.appearance.style:r==="appearance.theme"?n.sections.appearance.theme:r==="appearance.motion"?n.sections.appearance.motion:r==="defaults.model"?n.sections.defaults.model:r==="defaults.effort"?n.sections.defaults.effort:n.sections.permissions.toolConfirmation}function ry(n){return{"appearance.style":n.sections.appearance.style.effectiveValue,"appearance.theme":n.sections.appearance.theme.effectiveValue,"appearance.motion":n.sections.appearance.motion.effectiveValue,"defaults.model":n.sections.defaults.model.effectiveValue,"defaults.effort":n.sections.defaults.effort.effectiveValue,"permissions.toolConfirmation":n.sections.permissions.toolConfirmation.effectiveValue}}function Ir(n){return{openedAtRevision:n.revision,workspace:n.workspace,base:n,values:ly(n),intents:{},serverLatest:null}}function mp(n,r,o){const a=_n(n.base,r),d={...n.values,[r]:o},p={...n.intents};return Object.is(o,a)?delete p[r]:p[r]={op:"set",value:o},{...n,values:d,intents:p,serverLatest:null}}function gp(n,r){const o=Bo(n.base,r),a={...n.intents};return o.explicitValue===void 0?(delete a[r],{...n,values:{...n.values,[r]:_n(n.base,r)},intents:a,serverLatest:null}):(a[r]={op:"unset"},{...n,values:{...n.values,[r]:o.inheritedValue??o.effectiveValue},intents:a,serverLatest:null})}function gf(n,r){return{...n,serverLatest:r}}function sy(n){const r=n.serverLatest;if(!r)return n;let o=Ir(r);for(const a of Rr(n)){const d=n.intents[a];if(d){if(d.op==="unset"){o=gp(o,a);continue}o=mp(o,a,d.value)}}return o}function Rr(n){return ny.filter(r=>n.intents[r]!==void 0)}function iy(n){return Rr(n).map(r=>{const o=n.intents[r];return o.op==="unset"?{op:"unset",key:r}:{op:"set",key:r,value:o.value}})}function oy(n){return n.serverLatest?Rr(n).filter(r=>{const o=Bo(n.base,r),a=Bo(n.serverLatest,r);return!Object.is(o.effectiveValue,a.effectiveValue)||!Object.is(o.explicitValue,a.explicitValue)||o.overridden!==a.overridden||o.source!==a.source}):[]}function _n(n,r){const o=Bo(n,r);return o.explicitValue??o.effectiveValue}function ly(n){const r=ry(n);return{"appearance.style":_n(n,"appearance.style")??r["appearance.style"],"appearance.theme":_n(n,"appearance.theme")??r["appearance.theme"],"appearance.motion":_n(n,"appearance.motion")??r["appearance.motion"],"defaults.model":_n(n,"defaults.model")??r["defaults.model"],"defaults.effort":_n(n,"defaults.effort")??r["defaults.effort"],"permissions.toolConfirmation":_n(n,"permissions.toolConfirmation")??r["permissions.toolConfirmation"]}}const qo={phase:"closed",section:"general",draft:null,message:null,problemCode:null,confirmDiscard:!1};function ay(n,r){switch(r.type){case"open":return{...qo,phase:"ready",draft:Ir(r.document)};case"close":return qo;case"select_section":return{...n,section:r.section,confirmDiscard:!1};case"set_value":return!n.draft||n.phase==="saving"?n:{...n,phase:"ready",draft:mp(n.draft,r.key,r.value),message:null,problemCode:null,confirmDiscard:!1};case"reset_value":return!n.draft||n.phase==="saving"?n:{...n,phase:"ready",draft:gp(n.draft,r.key),message:null,problemCode:null,confirmDiscard:!1};case"save_started":return{...n,phase:"saving",message:"正在原子应用设置…",problemCode:null,confirmDiscard:!1};case"save_succeeded":return{...n,phase:"success",draft:Ir(r.document),message:"设置已安全保存并应用。",problemCode:null,confirmDiscard:!1};case"save_failed":{if(!n.draft)return n;const o=r.code==="settings_revision_conflict";return{...n,phase:o?"conflict":"rejected",draft:r.latest?gf(n.draft,r.latest):n.draft,message:r.message,problemCode:r.code,confirmDiscard:!1}}case"server_updated":{if(!n.draft)return{...n,phase:"ready",draft:Ir(r.document)};if(n.phase==="saving")return n;if(n.draft.base.revision===r.document.revision){const o=Rr(n.draft).length>0;return{...n,draft:o?{...n.draft,base:r.document}:Ir(r.document)}}return n.draft.workspace!==r.document.workspace||Rr(n.draft).length===0?{...n,phase:"ready",draft:Ir(r.document),message:"已采用 Host 的最新设置。",problemCode:null,confirmDiscard:!1}:{...n,phase:"conflict",draft:gf(n.draft,r.document),message:"Host 设置已更新。你的草稿仍被保留,请选择如何继续。",problemCode:"settings_revision_conflict",confirmDiscard:!1}}case"adopt_server":return n.draft?.serverLatest?{...n,phase:"ready",draft:Ir(n.draft.serverLatest),message:"已采用服务器最新值。",problemCode:null}:n;case"rebase":return n.draft?.serverLatest?{...n,phase:"ready",draft:sy(n.draft),message:"草稿已基于服务器最新值重放;请确认后再次应用。",problemCode:null}:n;case"request_discard":return{...n,confirmDiscard:!0};case"cancel_discard":return{...n,confirmDiscard:!1};case"clear_status":return{...n,phase:"ready",message:null,problemCode:null}}}const cy=["auto","none","minimal","low","medium","high","xhigh","max"],uy=[{id:"general",label:"General",icon:"settings"},{id:"models",label:"Models & Reasoning",icon:"spark"},{id:"permissions",label:"Permissions",icon:"warning"},{id:"advanced",label:"Advanced",icon:"diagnostics"}];function dy({open:n,onClose:r,state:o,actions:a,onGoToSessionControls:d}){const p=m.useRef(null),f=m.useRef(null),g=m.useRef(null),w=m.useRef(null),x=m.useRef(null),E=m.useRef(!1),C=m.useRef(null),R=m.useRef(qo.phase),[_,A]=m.useReducer(ay,qo),[L,W]=m.useState(!1),[ie,B]=m.useState(!1),[Se,re]=m.useState(null),ne=o.settings??o.settingsMirror.lastGood,b=ne&&(!o.workspace||ne.workspace===o.workspace)?ne:null;m.useEffect(()=>{const $=p.current;$&&(n&&!$.open&&$.showModal(),!n&&$.open&&$.close())},[n]),m.useEffect(()=>{if(n&&!E.current)b&&(A({type:"open",document:b}),x.current=b),W(!1),B(!1),re(null);else if(n&&b&&x.current===null)A({type:"open",document:b}),x.current=b;else if(n&&b&&x.current!==null&&x.current!==b){if(_.phase==="saving")return;x.current=b,A({type:"server_updated",document:b})}else!n&&E.current&&(A({type:"close"}),x.current=null,C.current=null);E.current=n},[b,_.phase,n]),m.useEffect(()=>{_.confirmDiscard&&g.current?.focus()},[_.confirmDiscard]),m.useEffect(()=>{const $=R.current;if(R.current=_.phase,!n||$!=="saving"||_.phase!=="success")return;const pe=wf();p.current?.contains(pe)||f.current?.focus()},[_.phase,n]),m.useEffect(()=>{!n||b||o.settingsMirror.status==="loading"||a.refreshSettings().catch(()=>{})},[a,b,n,o.settingsMirror.status]),m.useEffect(()=>{!n||!_.draft||!o.workspace||_.draft.workspace!==o.workspace&&(A({type:"close"}),x.current=null)},[_.draft,n,o.workspace]);const D=_.draft,ee=D?Rr(D):[],X=ee.length>0,oe=o.processing&&ee.some($=>["defaults.effort","permissions.toolConfirmation"].includes($)),Q=()=>{if(_.phase!=="saving"){if(X){const $=wf();w.current=$ instanceof HTMLElement?$:null,A({type:"request_discard"});return}A({type:"close"}),r()}},xe=()=>{A({type:"close"}),r()},se=async $=>{if($.preventDefault(),!D||!X||_.phase==="saving"||_.phase==="conflict")return;const pe=iy(D),V=C.current??$e();C.current=V,A({type:"save_started"});try{const z=await a.updateSettings(D.base.revision,pe,V);C.current=null,x.current=z.settings,A({type:"save_succeeded",document:z.settings})}catch(z){const te=z instanceof Ee?z.code??"settings_rejected":"network";let q;te==="settings_revision_conflict"?(C.current=null,q=await a.refreshSettings().catch(()=>{}),q&&(x.current=q)):z instanceof Ee&&z.status<500&&(C.current=null);const v=te==="settings_revision_conflict"&&!q?"settings_recovery_required":te;A({type:"save_failed",code:v,message:xy(v,z),...q?{latest:q}:{}})}},Ie=$=>{$.target===$.currentTarget&&Q()};return i.jsx("dialog",{id:"settings-dialog",ref:p,className:"modal settings-modal","aria-modal":"true","aria-labelledby":"settings-title","aria-describedby":"settings-description",onCancel:$=>{$.preventDefault(),Q()},onClick:Ie,children:i.jsxs("form",{onSubmit:se,children:[i.jsxs("header",{className:"modal-header settings-header",children:[i.jsxs("div",{children:[i.jsx("span",{className:"eyebrow",children:"HOST SETTINGS"}),i.jsx("h2",{id:"settings-title",children:"设置"}),i.jsx("p",{id:"settings-description",children:"由本地 Host 读取、校验并原子保存。"})]}),i.jsx("button",{ref:f,type:"button",className:"icon-button",onClick:Q,"aria-label":"关闭设置",disabled:_.phase==="saving",children:i.jsx(Y,{name:"close"})})]}),i.jsxs("div",{className:"settings-layout",children:[i.jsx("nav",{className:"settings-navigation","aria-label":"设置类别",children:uy.map($=>i.jsxs("button",{type:"button",className:_.section===$.id?"active":"","aria-current":_.section===$.id?"page":void 0,onClick:()=>A({type:"select_section",section:$.id}),children:[i.jsx(Y,{name:$.icon,size:16}),i.jsx("span",{children:$.label})]},$.id))}),i.jsxs("div",{className:"settings-content",children:[i.jsx(vy,{state:o}),D?i.jsxs(i.Fragment,{children:[_.phase==="conflict"?i.jsx(yy,{draft:D,onAdopt:()=>{C.current=null,A({type:"adopt_server"})},onRebase:()=>{C.current=null,A({type:"rebase"})}}):null,_.message&&_.phase!=="conflict"?i.jsxs("div",{className:`settings-inline-message settings-message-${_.phase}`,role:_.phase==="rejected"?"alert":"status","aria-live":_.phase==="rejected"?"assertive":"polite",children:[i.jsx(Y,{name:_.phase==="success"?"check":"info",size:16}),i.jsx("span",{children:_.message})]}):null,_.section==="general"?i.jsx(fy,{document:D.base,draft:D.values,dirtyKeys:ee,saving:_.phase==="saving",onSet:($,pe)=>A({type:"set_value",key:$,value:pe}),onReset:$=>A({type:"reset_value",key:$})}):null,_.section==="models"?i.jsx(hy,{document:D.base,draft:D.values,dirtyKeys:ee,runtimeBusy:o.processing,saving:_.phase==="saving",onGoToSessionControls:d,onSet:($,pe)=>A({type:"set_value",key:$,value:pe}),onReset:$=>A({type:"reset_value",key:$})}):null,_.section==="permissions"?i.jsx(my,{document:D.base,value:D.values["permissions.toolConfirmation"],dirtyKeys:ee,runtimeBusy:o.processing,saving:_.phase==="saving",confirmAllow:L,allowAcknowledged:ie,onAllowRequested:()=>{B(!1),W(!0)},onAllowAcknowledged:B,onConfirmAllow:()=>{A({type:"set_value",key:"permissions.toolConfirmation",value:"allow"}),W(!1),B(!1)},onCancelAllow:()=>{W(!1),B(!1)},onSet:$=>A({type:"set_value",key:"permissions.toolConfirmation",value:$}),onReset:()=>A({type:"reset_value",key:"permissions.toolConfirmation"})}):null,_.section==="advanced"?i.jsx(gy,{state:o,document:D.base,documentAction:Se,onOpenDocument:()=>{re({tone:"status",message:"正在请求 Host 打开设置文件…"}),a.openSettingsDocument().then(()=>re({tone:"status",message:"已交给系统默认编辑器打开。"})).catch($=>re({tone:"error",message:$ instanceof Error?$.message:"无法打开设置文件。"}))},onRefresh:()=>{re({tone:"status",message:"正在重新载入 Host 设置…"}),a.refreshSettings().then(()=>re({tone:"status",message:"已载入最新设置。"})).catch($=>re({tone:"error",message:$ instanceof Error?$.message:"重新载入失败。"}))}}):null]}):i.jsxs("section",{className:"settings-empty","aria-live":"polite",children:[i.jsx(Y,{name:"refresh"}),i.jsx("h3",{children:"正在读取设置"}),i.jsx("p",{children:"等待本地 Host 返回可验证的设置快照。"})]})]})]}),_.confirmDiscard?i.jsxs("div",{className:"settings-discard-confirm",role:"alertdialog","aria-labelledby":"settings-discard-title","aria-describedby":"settings-discard-description",children:[i.jsxs("div",{children:[i.jsx("strong",{id:"settings-discard-title",children:"放弃未应用的更改?"}),i.jsxs("p",{id:"settings-discard-description",children:["你的 ",ee.length," 项草稿尚未写入 Host。"]})]}),i.jsxs("div",{children:[i.jsx("button",{ref:g,type:"button",className:"secondary-button",onClick:()=>{A({type:"cancel_discard"});const $=w.current;requestAnimationFrame(()=>$?.focus())},children:"继续编辑"}),i.jsx("button",{type:"button",className:"danger-ghost-button",onClick:xe,children:"放弃更改"})]})]}):null,i.jsxs("footer",{className:"modal-footer settings-footer",children:[i.jsx("span",{className:"settings-dirty-summary","aria-live":"polite",children:X?`${ee.length} 项未应用`:"没有未应用的更改"}),i.jsx("button",{type:"button",className:"secondary-button",onClick:Q,disabled:_.phase==="saving",children:"取消"}),i.jsx("button",{type:"submit",className:"primary-button",disabled:!D||!X||_.phase==="saving"||_.phase==="conflict"||oe||D.base.state!=="ready"||!D.base.writable,children:_.phase==="saving"?"应用中…":`应用 ${ee.length} 项`})]})]})})}function fy({document:n,draft:r,dirtyKeys:o,saving:a,onSet:d,onReset:p}){const f=n.sections.appearance.style,g=n.sections.appearance.theme,w=n.sections.appearance.motion;return i.jsxs(el,{heading:"通用",detail:"外观偏好由 Host 保存,并在所有 Workbench 窗口保持一致。",children:[i.jsx(fs,{id:"settings-style",label:"视觉风格",description:"选择内置的方块工坊外观,或切回经典工作台。",field:f,dirty:o.includes("appearance.style"),onReset:()=>p("appearance.style"),disabled:a||!rn(n,f),children:i.jsxs("select",{id:"settings-style",value:r["appearance.style"],disabled:a||!rn(n,f),onChange:x=>d("appearance.style",x.target.value),children:[i.jsx("option",{value:"orion-blocksmith",children:"方块工坊(内置,默认)"}),i.jsx("option",{value:"classic",children:"经典"})]})}),i.jsx(fs,{id:"settings-theme",label:"主题",description:"跟随系统或固定使用浅色、深色。",field:g,dirty:o.includes("appearance.theme"),onReset:()=>p("appearance.theme"),disabled:a||!rn(n,g),children:i.jsxs("select",{id:"settings-theme",value:r["appearance.theme"],disabled:a||!rn(n,g),onChange:x=>d("appearance.theme",x.target.value),children:[i.jsx("option",{value:"system",children:"跟随系统"}),i.jsx("option",{value:"dark",children:"深色"}),i.jsx("option",{value:"light",children:"浅色"})]})}),i.jsxs("figure",{className:"appearance-preview","data-preview-style":r["appearance.style"],"data-preview-theme":r["appearance.theme"],"aria-label":`外观预览:${r["appearance.style"]==="orion-blocksmith"?"方块工坊":"经典工作台"},${py(r["appearance.theme"])}`,children:[i.jsxs("div",{className:"appearance-preview-frame","aria-hidden":"true",children:[i.jsx("span",{className:"appearance-preview-rail"}),i.jsxs("span",{className:"appearance-preview-main",children:[i.jsx("i",{}),i.jsx("i",{})]}),i.jsx("span",{className:"appearance-preview-panel"})]}),i.jsx("figcaption",{children:"纯 CSS 预览 · 均为内置外观,不支持安装或卸载。"})]}),i.jsx(fs,{id:"settings-motion",label:"动效",description:"减少非必要动画,保留状态变化。",field:w,dirty:o.includes("appearance.motion"),onReset:()=>p("appearance.motion"),disabled:a||!rn(n,w),children:i.jsxs("select",{id:"settings-motion",value:r["appearance.motion"],disabled:a||!rn(n,w),onChange:x=>d("appearance.motion",x.target.value),children:[i.jsx("option",{value:"system",children:"跟随系统"}),i.jsx("option",{value:"reduced",children:"减少动效"})]})})]})}function py(n){return n==="light"?"浅色":n==="dark"?"深色":"跟随系统"}function hy({document:n,draft:r,dirtyKeys:o,saving:a,runtimeBusy:d,onSet:p,onReset:f,onGoToSessionControls:g}){const w=n.sections.defaults.model,x=n.sections.defaults.effort,E=n.models.some(C=>C.id===r["defaults.model"])?n.models:[{id:r["defaults.model"],label:r["defaults.model"]},...n.models];return i.jsxs(el,{heading:"模型与推理",detail:"项目默认值通常从下一逻辑请求开始生效;当前会话覆盖保持可见。",children:[d?i.jsx(vp,{detail:"当前回合正在运行;项目推理强度暂时锁定,默认模型仍可用于新会话。"}):null,i.jsx(fs,{id:"settings-model",label:"默认模型",description:"仅展示 Host 提供的可用模型标识。",field:w,dirty:o.includes("defaults.model"),onReset:()=>f("defaults.model"),disabled:a||!rn(n,w),children:i.jsx("select",{id:"settings-model",value:r["defaults.model"],disabled:a||!rn(n,w),onChange:C=>p("defaults.model",C.target.value),children:E.map(C=>i.jsxs("option",{value:C.id,children:[C.label,C.provider?` · ${C.provider}`:""]},C.id))})}),i.jsx(fs,{id:"settings-effort",label:"默认推理强度",description:"模型不支持的强度会由 Host 拒绝,不会静默降级。",field:x,dirty:o.includes("defaults.effort"),onReset:()=>f("defaults.effort"),disabled:a||d||!rn(n,x),children:i.jsx("select",{id:"settings-effort",value:r["defaults.effort"],disabled:a||d||!rn(n,x),onChange:C=>p("defaults.effort",C.target.value),children:cy.map(C=>i.jsx("option",{value:C,children:C==="auto"?"Auto":C},C))})}),n.currentSession?i.jsxs("div",{className:"settings-readonly-card","aria-label":"当前会话设置",children:[i.jsxs("div",{children:[i.jsx("span",{children:"当前会话"}),i.jsx("strong",{children:n.currentSession.model})]}),i.jsxs("div",{children:[i.jsx("span",{children:"Effort"}),i.jsx("strong",{children:n.currentSession.effort})]}),i.jsx("p",{children:n.currentSession.overridesProjectEffort?"当前会话覆盖了项目推理强度。":"当前会话沿用项目默认值。"}),i.jsx("small",{children:"可在会话输入框使用 /model 或 /effort 调整当前会话。"}),i.jsx("button",{type:"button",className:"text-button",onClick:g,"aria-controls":"orion-composer",children:"转到会话控制"})]}):null,i.jsxs("div",{className:"credential-note",children:[i.jsx(Y,{name:"check",size:16}),i.jsxs("div",{children:[i.jsx("strong",{children:"凭证始终留在 Host"}),i.jsx("p",{children:"浏览器只接收 ready / missing / unavailable 状态,不提供 API Key 输入框。"})]})]})]})}function my({document:n,value:r,dirtyKeys:o,runtimeBusy:a,saving:d,confirmAllow:p,allowAcknowledged:f,onAllowRequested:g,onAllowAcknowledged:w,onConfirmAllow:x,onCancelAllow:E,onSet:C,onReset:R}){const _=m.useRef(null),A=m.useRef(null),L=n.sections.permissions.toolConfirmation,W=d||a||!rn(n,L);return m.useEffect(()=>{p&&A.current?.focus()},[p]),i.jsxs(el,{heading:"权限",detail:"默认确认策略不改变工作区边界、硬拒绝和高风险保护。",children:[a?i.jsx(vp,{}):null,i.jsx(fs,{id:"settings-tool-confirmation",label:"工具确认",description:"Ask 逐次询问;Deny 默认拒绝;Allow 仍受 Host 安全策略约束。",field:L,labelControl:!1,dirty:o.includes("permissions.toolConfirmation"),onReset:R,disabled:W,children:i.jsxs("fieldset",{id:"settings-tool-confirmation",className:"segmented-field",disabled:W,children:[i.jsx("legend",{className:"sr-only",children:"默认工具确认策略"}),["ask","allow","deny"].map(ie=>i.jsxs("label",{children:[i.jsx("input",{ref:ie==="allow"?_:void 0,type:"radio",name:"settings-permission",value:ie,checked:r===ie,onChange:()=>ie==="allow"?g():C(ie)}),i.jsx("span",{children:ie==="ask"?"Ask":ie==="allow"?"Allow":"Deny"})]},ie))]})}),p?i.jsxs("div",{className:"settings-risk-confirm",role:"alertdialog","aria-labelledby":"allow-confirm-title","aria-describedby":"allow-confirm-description",children:[i.jsx("strong",{id:"allow-confirm-title",children:"确认启用 Allow"}),i.jsx("p",{id:"allow-confirm-description",children:"Orion 会减少常规工具询问,但硬拒绝、工作区边界和风险检查仍然生效。"}),i.jsxs("label",{children:[i.jsx("input",{ref:A,type:"checkbox",checked:f,onChange:ie=>w(ie.target.checked)}),i.jsx("span",{children:"我理解这会扩大默认授权范围"})]}),i.jsxs("div",{children:[i.jsx("button",{type:"button",className:"secondary-button",onClick:()=>{E(),requestAnimationFrame(()=>_.current?.focus())},children:"保持当前策略"}),i.jsx("button",{type:"button",className:"primary-button",disabled:!f,onClick:x,children:"启用 Allow"})]})]}):null,i.jsx("p",{className:"settings-help",children:"Agent 的 BUILD / PLAN / AUTO 模式与工具确认策略互相独立。"})]})}function gy({state:n,document:r,documentAction:o,onOpenDocument:a,onRefresh:d}){return i.jsxs(el,{heading:"高级",detail:"配置状态、凭证可用性和集成清单均为只读摘要。",children:[r.diagnostic?i.jsxs("div",{className:"settings-diagnostic",role:"alert",children:[i.jsx(Y,{name:"warning",size:16}),i.jsxs("div",{children:[i.jsx("strong",{children:Pn(r.diagnostic.code)}),i.jsx("p",{children:Pn(r.diagnostic.message)})]})]}):null,i.jsxs("dl",{className:"settings-facts",children:[i.jsxs("div",{children:[i.jsx("dt",{children:"状态"}),i.jsx("dd",{children:Ny(r.state)})]}),i.jsxs("div",{children:[i.jsx("dt",{children:"工作区"}),i.jsx("dd",{title:"仅显示目录名",children:pp(r.workspace)||"—"})]}),i.jsxs("div",{children:[i.jsx("dt",{children:"文档"}),i.jsx("dd",{children:r.hasDocument?"已创建":"尚未创建"})]}),i.jsxs("div",{children:[i.jsx("dt",{children:"版本"}),i.jsx("dd",{title:r.revision,children:yf(r.revision)})]}),i.jsxs("div",{children:[i.jsx("dt",{children:"Last good"}),i.jsx("dd",{children:n.settingsMirror.lastGood?yf(n.settingsMirror.lastGood.revision):"无"})]}),i.jsxs("div",{children:[i.jsx("dt",{children:"Mirror"}),i.jsxs("dd",{children:[n.settingsMirror.status," · g",n.settingsMirror.generation]})]})]}),i.jsxs("div",{className:"settings-advanced-actions",children:[i.jsxs("button",{type:"button",className:"secondary-button",onClick:d,children:[i.jsx(Y,{name:"refresh",size:15}),"重新载入设置"]}),i.jsxs("button",{type:"button",className:"secondary-button",onClick:a,children:[i.jsx(Y,{name:"edit",size:15}),"打开配置文件"]})]}),o?i.jsx("div",{className:`settings-document-action ${o.tone}`,role:o.tone==="error"?"alert":"status",children:o.message}):null,i.jsxs("section",{className:"settings-subsection","aria-labelledby":"credential-status-heading",children:[i.jsx("h4",{id:"credential-status-heading",children:"凭证状态"}),i.jsx("p",{children:"仅显示来源类别与可用性;密钥值、环境变量名和认证头不会进入浏览器。"}),r.credentials.length?i.jsx("ul",{className:"settings-readonly-list",children:r.credentials.map(p=>i.jsxs("li",{children:[i.jsx("span",{children:p.providerId}),i.jsx("span",{className:`settings-state-badge state-${p.state}`,children:p.state}),i.jsx("small",{children:by(p.source)})]},p.providerId))}):i.jsx("p",{className:"settings-empty-line",children:"Host 未报告凭证槽位。"})]}),i.jsxs("section",{className:"settings-subsection","aria-labelledby":"integration-status-heading",children:[i.jsx("h4",{id:"integration-status-heading",children:"只读能力"}),i.jsx("p",{children:"Skills 与 MCP 在专用配置中管理,此处用于确认 Host 实际加载结果。"}),i.jsxs("div",{className:"settings-capability-grid",children:[i.jsx(vf,{title:"Skills",count:n.skills.length,names:n.skills.map(p=>p.name)}),i.jsx(vf,{title:"MCP",count:n.mcpServers.length,names:n.mcpServers.map(p=>p.name)})]})]})]})}function vy({state:n}){const{settingsMirror:r}=n;return r.status==="loading"?i.jsxs("div",{className:"settings-availability",role:"status",children:[i.jsx(Y,{name:"refresh",size:15})," 正在与 Host 同步设置…"]}):r.error?i.jsxs("div",{className:"settings-availability error",role:"alert",children:[i.jsx(Y,{name:"warning",size:15})," 设置同步失败:",r.error," 当前显示上一次可用值。"]}):r.stale?i.jsxs("div",{className:"settings-availability",role:"status",children:[i.jsx(Y,{name:"refresh",size:15})," Host 已更新设置,正在载入;当前显示上一次可用值。"]}):r.document?.state==="invalid"?i.jsxs("div",{className:"settings-availability error",role:"alert",children:[i.jsx(Y,{name:"warning",size:15})," 设置文档无效。控件已锁定,并保留上一次可用值供参考。"]}):r.document?.state==="read-only"?i.jsxs("div",{className:"settings-availability",role:"status",children:[i.jsx(Y,{name:"info",size:15})," 设置当前为只读状态。"]}):r.document?.state==="unavailable"?i.jsxs("div",{className:"settings-availability error",role:"alert",children:[i.jsx(Y,{name:"warning",size:15})," Host 设置暂不可用;当前显示上一次可用值。"]}):null}function el({heading:n,detail:r,children:o}){return i.jsxs("section",{className:"settings-section","aria-labelledby":`settings-${xf(n)}-heading`,children:[i.jsxs("header",{className:"settings-section-heading",children:[i.jsx("h3",{id:`settings-${xf(n)}-heading`,children:n}),i.jsx("p",{children:r})]}),i.jsx("div",{className:"settings-section-fields",children:o})]})}function fs({id:n,label:r,description:o,field:a,labelControl:d=!0,dirty:p,disabled:f,onReset:g,children:w}){return i.jsxs("div",{className:`settings-field-card ${p?"dirty":""}`,children:[i.jsxs("div",{className:"settings-field-copy",children:[d?i.jsx("label",{htmlFor:n,children:r}):i.jsx("strong",{children:r}),i.jsx("p",{children:o}),i.jsxs("div",{className:"settings-field-meta","aria-label":`${r} 设置来源`,children:[i.jsx("span",{children:wy(a.source)}),i.jsx("span",{children:ky(a.scope)}),i.jsx("span",{children:jy(a.applies)}),p?i.jsx("strong",{children:"草稿"}):null]}),a.blockedReason?i.jsx("small",{className:"settings-blocked-reason",children:Sy(a.blockedReason)}):null]}),i.jsxs("div",{className:"settings-field-control",children:[w,i.jsx("button",{type:"button",className:"text-button",onClick:g,disabled:f||a.explicitValue===void 0&&!p,"aria-label":`重置${r}为继承值`,children:"重置"})]})]})}function yy({draft:n,onAdopt:r,onRebase:o}){const a=oy(n),d=Rr(n),p=n.serverLatest;return i.jsxs("div",{className:"settings-conflict",role:"alert",children:[i.jsx(Y,{name:"warning",size:17}),i.jsxs("div",{children:[i.jsx("strong",{children:"Host 设置已在其他位置更新"}),i.jsxs("p",{children:["草稿仍被保留",a.length?`;${a.length} 个草稿字段的服务器值发生变化`:"","。"]}),p?i.jsxs("div",{className:"settings-conflict-values","aria-label":"服务器值与我的草稿",children:[i.jsxs("div",{className:"settings-conflict-value-heading","aria-hidden":"true",children:[i.jsx("span",{children:"字段"}),i.jsx("span",{children:"服务器最新值"}),i.jsx("span",{children:"我的草稿"})]}),d.map(f=>i.jsxs("div",{children:[i.jsx("strong",{children:Cy(f)}),i.jsx("span",{"data-label":"服务器最新值",children:String(_n(p,f))}),i.jsxs("span",{"data-label":"我的草稿",children:[String(n.values[f]),n.intents[f]?.op==="unset"?"(重置)":""]})]},f))]}):null,i.jsxs("div",{children:[i.jsx("button",{type:"button",className:"secondary-button",onClick:r,children:"采用服务器值"}),i.jsx("button",{type:"button",className:"primary-button",onClick:o,children:"基于最新值重试"})]})]})]})}function vp({detail:n="当前回合正在运行;相关设置会在 Runtime 空闲后解锁。"}={}){return i.jsxs("div",{className:"settings-busy",role:"status",children:[i.jsx(Y,{name:"activity",size:15})," ",n]})}function vf({title:n,count:r,names:o}){return i.jsxs("div",{className:"settings-capability-card",children:[i.jsx("span",{children:n}),i.jsx("strong",{children:r}),i.jsx("small",{children:o.slice(0,3).join(" · ")||"未加载"})]})}function rn(n,r){return n.state==="ready"&&n.writable&&r.writable&&!r.blockedReason}function xy(n,r){const o=r instanceof Error?r.message:"Host 拒绝了设置变更。";switch(n){case"settings_revision_conflict":return"设置已在其他位置更新。你的草稿没有丢失。";case"runtime_busy":return"Runtime 正在处理任务。请等待当前回合结束后再次应用。";case"settings_document_invalid":return"配置文件无效。请在高级页查看 Host 提供的安全诊断。";case"settings_write_forbidden":return"当前设置来源为只读,Host 未执行任何变更。";case"request_id_conflict":return"保存请求标识与先前内容冲突,请重新应用。";case"settings_recovery_required":return"Host 报告设置冲突,但最新设置暂时无法载入。草稿已保留,请重新载入后再试。";case"network":return"未能确认 Host 是否收到请求;保留草稿,可安全重试。";default:return o}}function wy(n){return`来源:${n==="internal"?"内置":n==="model"?"模型":n==="global"?"全局":n==="project"?"项目":"会话"}`}function ky(n){return`作用域:${n==="global"?"全局":n==="project"?"项目":"会话"}`}function jy(n){return`生效:${n==="live"?"立即":n==="next-logical-request"?"下次请求":n==="new-session"?"新会话":"重启后"}`}function Sy(n){return n==="runtime_busy"?"Runtime 正在运行,暂不可修改。":n==="read_only"?"此字段来自只读配置。":"设置文档无效,修复前不可修改。"}function Cy(n){return n==="appearance.style"?"视觉风格":n==="appearance.theme"?"主题":n==="appearance.motion"?"动效":n==="defaults.model"?"默认模型":n==="defaults.effort"?"默认推理强度":"工具确认"}function by(n){return n==="environment"?"环境提供":n==="legacy"?"Host 旧配置":"未配置"}function Ny(n){return n==="ready"?"可用":n==="invalid"?"无效":n==="read-only"?"只读":"不可用"}function yf(n){return n.length>24?`${n.slice(0,20)}…`:n}function xf(n){return n.replace(/[^a-z0-9]+/gi,"-").replace(/^-|-$/g,"").toLowerCase()||"section"}function wf(){return typeof document>"u"?null:document.activeElement}const Iy=["导航","面板","编辑","浮层"],yp=Object.freeze([{id:"toggle-project-navigation",tokens:["Mod","B"],group:"导航",description:"展开或折叠项目导航"},{id:"toggle-work-panel",tokens:["Mod","Shift","B"],group:"导航",description:"展开或折叠右侧工作面板"},{id:"focus-work-panel-1",tokens:["Mod","Shift","1"],group:"面板",description:"切换到 Agent 面板"},{id:"focus-work-panel-2",tokens:["Mod","Shift","2"],group:"面板",description:"切换到审阅面板"},{id:"focus-work-panel-3",tokens:["Mod","Shift","3"],group:"面板",description:"切换到终端面板"},{id:"focus-work-panel-4",tokens:["Mod","Shift","4"],group:"面板",description:"切换到文件面板"},{id:"focus-work-panel-5",tokens:["Mod","Shift","5"],group:"面板",description:"切换到 Git 面板"},{id:"work-panel-tab-nav",tokens:["←","→"],group:"面板",description:"在面板标签之间移动(Home / End 跳到首尾)"},{id:"resize-panel",tokens:["←","→"],group:"面板",description:"聚焦分隔条后按 2% 步长调整宽度,配合 Shift 为 10%"},{id:"resize-panel-reset",tokens:["Enter"],group:"面板",description:"分隔条聚焦时恢复默认宽度(Home 最窄,End 最宽)"},{id:"submit-composer",tokens:["Enter"],group:"编辑",description:"在输入框中发送当前内容"},{id:"newline-composer",tokens:["Shift","Enter"],group:"编辑",description:"在输入框中插入换行而不发送"},{id:"force-submit-composer",tokens:["Mod","Enter"],group:"编辑",description:"Agent 运行中时立即提交(否则进入队列)"},{id:"project-tree-nav",tokens:["↑","↓"],group:"面板",description:"在项目与会话树中移动焦点"},{id:"close-overlay",tokens:["Esc"],group:"浮层",description:"关闭抽屉、对话框或快捷键面板"},{id:"open-shortcut-help",tokens:["Mod","/"],group:"浮层",description:"打开或关闭本快捷键面板"}]);function _y(){if(typeof navigator>"u")return!1;const n=navigator.platform??"";return/mac|iphone|ipad|ipod/i.test(n)||/Mac/i.test(navigator.userAgent??"")}function Ey(n,r=_y()){return n.map(a=>a==="Mod"?r?"⌘":"Ctrl":a==="Shift"?r?"⇧":"Shift":a==="Alt"?r?"⌥":"Alt":a.toUpperCase()).join(r?" ":"+")}function Uo(n,r){let o=!1,a=!1,d=!1,p=null;for(const x of r)x==="Mod"?o=!0:x==="Shift"?a=!0:x==="Alt"?d=!0:p=x;if(o!==(n.metaKey||n.ctrlKey)||a!==n.shiftKey||d!==n.altKey||p===null)return!1;const f=n.code??"";if(/^[a-z]$/i.test(p))return f===`Key${p.toUpperCase()}`;if(/^[0-9]$/.test(p))return f===`Digit${p}`;const w=Object.freeze({esc:"escape"})[p.toLowerCase()]??p.toLowerCase();return n.key.toLowerCase()===w}function Ho(n){return yp.find(r=>r.id===n)}function Py(){return Iy.map(n=>({group:n,items:yp.filter(r=>r.group===n)})).filter(n=>n.items.length>0)}function Ry({open:n,onClose:r}){const o=m.useRef(null),a="shortcut-help-title";m.useEffect(()=>{const f=o.current;f&&(n&&!f.open&&f.showModal(),!n&&f.open&&f.close())},[n]);const d=f=>{f.target===f.currentTarget&&r()},p=Py();return i.jsxs("dialog",{ref:o,id:"shortcut-help",className:"modal shortcut-help","aria-labelledby":a,onCancel:f=>{f.preventDefault(),r()},onClose:r,onClick:d,children:[i.jsxs("header",{className:"shortcut-help-header",children:[i.jsxs("div",{children:[i.jsx("span",{className:"eyebrow",children:"KEYBOARD"}),i.jsx("h2",{id:a,children:"键盘快捷键"})]}),i.jsx("button",{type:"button",className:"icon-button",onClick:r,"aria-label":"关闭快捷键面板",children:i.jsx(Y,{name:"close",size:15})})]}),i.jsx("div",{className:"shortcut-help-body",children:p.map(({group:f,items:g})=>i.jsxs("section",{className:"shortcut-help-group",children:[i.jsx("h3",{children:f}),i.jsx("dl",{children:g.map(w=>i.jsxs("div",{className:"shortcut-row",children:[i.jsx("dt",{children:w.description}),i.jsx("dd",{children:i.jsx("kbd",{children:Ey(w.tokens)})})]},w.id))})]},f))}),i.jsx("footer",{className:"shortcut-help-footer",children:i.jsxs("p",{children:["按 ",i.jsx("kbd",{children:"Esc"})," 关闭本面板,焦点会回到打开它的位置。"]})})]})}const Ty="modulepreload",Oy=function(n){return"/"+n},kf={},tl=function(r,o,a){let d=Promise.resolve();if(o&&o.length>0){let w=function(x){return Promise.all(x.map(E=>Promise.resolve(E).then(C=>({status:"fulfilled",value:C}),C=>({status:"rejected",reason:C}))))};document.getElementsByTagName("link");const f=document.querySelector("meta[property=csp-nonce]"),g=f?.nonce||f?.getAttribute("nonce");d=w(o.map(x=>{if(x=Oy(x),x in kf)return;kf[x]=!0;const E=x.endsWith(".css"),C=E?'[rel="stylesheet"]':"";if(document.querySelector(`link[href="${x}"]${C}`))return;const R=document.createElement("link");if(R.rel=E?"stylesheet":Ty,E||(R.as="script"),R.crossOrigin="",R.href=x,g&&R.setAttribute("nonce",g),document.head.appendChild(R),E)return new Promise((_,A)=>{R.addEventListener("load",_),R.addEventListener("error",()=>A(new Error(`Unable to preload CSS for ${x}`)))})}))}function p(f){const g=new Event("vite:preloadError",{cancelable:!0});if(g.payload=f,window.dispatchEvent(g),!g.defaultPrevented)throw f}return d.then(f=>{for(const g of f||[])g.status==="rejected"&&p(g.reason);return r().catch(p)})},Nr=[{id:"goal",label:"Goal",icon:"goal"},{id:"activity",label:"活动",icon:"activity"},{id:"integrations",label:"能力",icon:"branch"},{id:"diagnostics",label:"诊断",icon:"diagnostics"}];function My({state:n,actions:r,tab:o,onTabChange:a}){const d=m.useId(),p=f=>{if(f.key!=="ArrowLeft"&&f.key!=="ArrowRight"&&f.key!=="Home"&&f.key!=="End")return;f.preventDefault();const g=Nr.findIndex(x=>x.id===o),w=f.key==="Home"?0:f.key==="End"?Nr.length-1:(g+(f.key==="ArrowRight"?1:-1)+Nr.length)%Nr.length;a(Nr[w].id),requestAnimationFrame(()=>document.getElementById(`${d}-tab-${Nr[w].id}`)?.focus())};return i.jsxs("div",{className:"agent-panel",children:[i.jsx("div",{className:"inspector-tabs",role:"tablist","aria-label":"详情类别",onKeyDown:p,children:Nr.map(f=>i.jsxs("button",{id:`${d}-tab-${f.id}`,type:"button",role:"tab","aria-selected":o===f.id,"aria-controls":`${d}-panel`,tabIndex:o===f.id?0:-1,onClick:()=>a(f.id),children:[i.jsx(Y,{name:f.icon,size:15}),i.jsx("span",{children:f.label})]},f.id))}),i.jsxs("div",{id:`${d}-panel`,className:"inspector-body",role:"tabpanel","aria-labelledby":`${d}-tab-${o}`,tabIndex:0,children:[o==="goal"?i.jsx(Ly,{state:n,actions:r}):null,o==="activity"?i.jsx($y,{state:n,actions:r}):null,o==="integrations"?i.jsx(Wy,{state:n,actions:r}):null,o==="diagnostics"?i.jsx(Fy,{state:n,actions:r}):null]})]})}function Ly({state:n,actions:r}){const o=n.goal,a=n.plan?.body??(typeof n.diagnostics?.plan=="string"?n.diagnostics.plan:""),d=!!n.pendingAction,p=d||n.connection!=="live"||!Pr(n),[f,g]=m.useState(!1);if(!o)return i.jsxs("div",{className:"inspector-stack",children:[i.jsxs("section",{className:"inspector-empty-card",children:[i.jsx("div",{className:"empty-mini-icon",children:i.jsx(Y,{name:"goal"})}),i.jsx("h3",{children:"没有活动 Goal"}),i.jsx("p",{children:"Goal 会跨回合保存目标、计划、证据和预算状态。"})]}),i.jsx(Ay,{onCreate:x=>r.controlGoal("create",x),disabled:p||!n.activeSessionId}),i.jsx(jf,{mode:n.mode.baseMode,plan:a})]});const w=o.criteria?.total?Math.round(o.criteria.passed/o.criteria.total*100):0;return i.jsxs("div",{className:"inspector-stack",children:[i.jsxs("section",{className:"goal-card",children:[i.jsxs("header",{children:[i.jsx("span",{className:`goal-status status-${o.status}`,children:o.status.replace(/_/g," ")}),i.jsxs("span",{children:["rev ",o.revision]})]}),i.jsx("h3",{children:o.objective}),o.criteria?i.jsxs("div",{className:"goal-progress",children:[i.jsxs("div",{children:[i.jsx("span",{children:"成功条件"}),i.jsxs("strong",{children:[o.criteria.passed," / ",o.criteria.total]})]}),i.jsx("progress",{value:o.criteria.passed,max:Math.max(1,o.criteria.total),"aria-label":`Goal 条件完成 ${w}%`}),i.jsxs("div",{className:"goal-breakdown",children:[i.jsxs("span",{children:[w,"% 完成"]}),i.jsxs("span",{children:[o.criteria.failed," 失败 · ",o.criteria.stale," 过期"]})]})]}):null,i.jsxs("dl",{className:"metric-grid",children:[i.jsxs("div",{children:[i.jsx("dt",{children:"Tokens"}),i.jsxs("dd",{children:[Sf(o.tokensUsed),o.tokenBudget?` / ${Sf(o.tokenBudget)}`:""]})]}),i.jsxs("div",{children:[i.jsx("dt",{children:"用时"}),i.jsx("dd",{children:qy(o.timeUsedMs)})]}),i.jsxs("div",{children:[i.jsx("dt",{children:"续跑"}),i.jsx("dd",{children:o.continuationCount})]}),i.jsxs("div",{children:[i.jsx("dt",{children:"Plan"}),i.jsx("dd",{children:o.planRevision?`r${o.planRevision}`:"—"})]})]}),o.nextAction?i.jsxs("div",{className:"next-action",children:[i.jsx("span",{children:"下一步"}),i.jsx("p",{children:o.nextAction})]}):null,o.auditRemaining?.length?i.jsxs("details",{className:"remaining-audit",children:[i.jsxs("summary",{children:["仍需验证 ",o.auditRemaining.length," 项"]}),i.jsx("ul",{children:o.auditRemaining.map((x,E)=>i.jsx("li",{children:x},`${x}-${E}`))})]}):null,i.jsxs("div",{className:"goal-actions",children:[o.status==="active"?i.jsxs("button",{type:"button",className:"secondary-button",onClick:()=>{r.controlGoal("pause")},disabled:p,children:[i.jsx(Y,{name:"pause",size:14}),"暂停"]}):o.status!=="complete"?i.jsxs("button",{type:"button",className:"secondary-button",onClick:()=>{r.controlGoal("resume")},disabled:p,children:[i.jsx(Y,{name:"refresh",size:14}),"恢复"]}):null,i.jsx("button",{type:"button",className:"danger-ghost-button",onClick:()=>g(!0),disabled:p,children:"清除"})]})]}),n.goalEvidence.length>0?i.jsxs("section",{className:"inspector-section",children:[i.jsxs("div",{className:"inspector-section-heading",children:[i.jsx("h3",{children:"最近证据"}),i.jsx("span",{children:n.goalEvidence.length})]}),i.jsx("ul",{className:"evidence-list",children:n.goalEvidence.slice(-8).reverse().map(x=>i.jsxs("li",{children:[i.jsx("span",{className:`evidence-state ${x.result}`,"aria-hidden":"true",children:i.jsx(Y,{name:x.result==="passed"?"check":x.result==="failed"?"close":"more",size:12})}),i.jsxs("div",{children:[i.jsx("strong",{children:x.subject}),i.jsxs("span",{children:[x.kind," · ",x.result]})]})]},x.id))})]}):null,i.jsx(jf,{mode:n.mode.baseMode,plan:a,goalPhase:o.planPhase}),n.goalActivity.length>0?i.jsxs("section",{className:"inspector-section",children:[i.jsx("div",{className:"inspector-section-heading",children:i.jsx("h3",{children:"Goal 轨迹"})}),i.jsx("ol",{className:"compact-timeline",children:n.goalActivity.slice(-10).reverse().map((x,E)=>i.jsxs("li",{children:[i.jsx("span",{className:"timeline-pin","aria-hidden":"true"}),i.jsxs("div",{children:[i.jsx("strong",{children:x.type.replace(/_/g," ")}),i.jsx("p",{children:x.message}),i.jsx("time",{children:Uy(x.timestamp)})]})]},`${x.timestamp}-${E}`))})]}):null,i.jsx(ey,{open:f,onClose:()=>g(!1),title:"清除此 Goal?",body:"Goal 的目标与进度会从当前会话移除,会话记录仍会保留。",confirmLabel:"清除 Goal",danger:!0,pending:d,onConfirm:()=>r.controlGoal("clear")})]})}function Ay({onCreate:n,disabled:r}){const[o,a]=m.useState(""),d=async p=>{if(p.preventDefault(),!!o.trim())try{await n(o.trim()),a("")}catch{}};return i.jsxs("form",{className:"goal-create",onSubmit:d,children:[i.jsx("label",{htmlFor:"goal-objective",children:"创建 Goal"}),i.jsx("textarea",{id:"goal-objective",rows:3,value:o,onChange:p=>a(p.target.value),placeholder:"输入一个可验证、可持续执行的目标…",disabled:r}),i.jsxs("button",{type:"submit",className:"primary-button",disabled:r||!o.trim(),children:[i.jsx(Y,{name:"goal",size:15}),"开始 Goal"]})]})}function jf({mode:n,plan:r,goalPhase:o}){return i.jsxs("section",{className:"inspector-section plan-section",children:[i.jsxs("div",{className:"inspector-section-heading",children:[i.jsx("h3",{children:"Plan"}),i.jsx("span",{className:`mode-badge mode-${n}`,children:n==="plan"?"PLAN MODE":o||"READ ONLY"})]}),r?i.jsx(li,{children:r}):i.jsx("p",{className:"muted-copy",children:"还没有保存的计划。切换到 PLAN 模式后提交任务,Runtime 会生成并保存计划。"})]})}function $y({state:n,actions:r}){const o=m.useMemo(()=>n.tools.filter(a=>By(a)),[n.tools]);return i.jsxs("div",{className:"inspector-stack",children:[i.jsxs("section",{className:"inspector-section",children:[i.jsxs("div",{className:"inspector-section-heading",children:[i.jsx("h3",{children:"工具调用"}),i.jsx("span",{children:n.tools.length})]}),n.tools.length?i.jsx("ul",{className:"activity-list",children:n.tools.slice(-20).reverse().map(a=>i.jsx(Dy,{tool:a},a.callId))}):i.jsx(Do,{text:"还没有工具活动"})]}),i.jsx(zy,{state:n,actions:r}),i.jsxs("section",{className:"inspector-section",children:[i.jsxs("div",{className:"inspector-section-heading",children:[i.jsx("h3",{children:"文件变化"}),i.jsx("span",{children:o.length+n.edits.length})]}),o.length||n.edits.length?i.jsxs("ul",{className:"change-list",children:[n.edits.slice(-8).reverse().map(a=>i.jsxs("li",{children:[i.jsx(Y,{name:"edit",size:14}),i.jsxs("div",{children:[i.jsx("strong",{children:xp(a.request.path)}),i.jsxs("span",{children:[a.request.kind," · ",a.request.candidates.length," candidates"]})]})]},a.eventId)),o.slice(-8).reverse().map(a=>i.jsxs("li",{children:[i.jsx(Y,{name:"code",size:14}),i.jsxs("div",{children:[i.jsx("strong",{children:a.name}),i.jsx("span",{children:a.summary||a.state})]})]},a.callId))]}):i.jsx(Do,{text:"还没有文件变化"})]}),i.jsxs("section",{className:"inspector-section",children:[i.jsxs("div",{className:"inspector-section-heading",children:[i.jsx("h3",{children:"子代理与研究"}),i.jsx("span",{children:n.subtasks.length+n.research.length})]}),n.subtasks.length?i.jsx("ul",{className:"activity-list",children:n.subtasks.slice(-8).reverse().map(a=>i.jsxs("li",{children:[i.jsx("span",{className:`state-dot state-${a.state}`,"aria-hidden":"true"}),i.jsxs("div",{children:[i.jsx("strong",{children:a.role}),i.jsx("span",{children:a.objective})]}),i.jsx("small",{children:a.state})]},a.taskId))}):null,n.research.length?i.jsx("ul",{className:"activity-list",children:n.research.slice(-6).reverse().map(a=>i.jsxs("li",{children:[i.jsx("span",{className:`state-dot state-${a.stage}`,"aria-hidden":"true"}),i.jsxs("div",{children:[i.jsx("strong",{children:"Research"}),i.jsx("span",{children:a.objective||a.packetId})]}),i.jsx("small",{children:a.stage})]},a.packetId))}):null,!n.subtasks.length&&!n.research.length?i.jsx(Do,{text:"还没有子代理或研究活动"}):null]})]})}function Dy({tool:n}){return i.jsxs("li",{children:[i.jsx("span",{className:`state-dot state-${n.state}`,"aria-hidden":"true"}),i.jsxs("div",{children:[i.jsx("strong",{children:n.name}),i.jsx("span",{children:n.summary||`调用 #${n.sequence}`})]}),i.jsx("small",{children:n.duration!==void 0?`${Math.round(n.duration)}ms`:n.state})]})}function zy({state:n,actions:r}){const[o,a]=m.useState(""),[d,p]=m.useState(""),[f,g]=m.useState(),[w,x]=m.useState(0),[E,C]=m.useState(!1),[R,_]=m.useState("");m.useEffect(()=>{a(""),p(""),g(void 0),_("")},[n.activeSessionId]);const A=async(L,W=0)=>{C(!0),_("");try{const ie=await r.readToolDetail(L,W);a(L),p(B=>W===0?ie.content:`${B}${ie.content}`),g(ie.nextOffsetBytes),x(ie.totalBytes)}catch(ie){_(ie instanceof Error?ie.message:"工具详情读取失败。")}finally{C(!1)}};return i.jsxs("section",{className:"inspector-section tool-detail-browser",children:[i.jsxs("div",{className:"inspector-section-heading",children:[i.jsx("h3",{children:"持久化输出"}),i.jsxs("button",{type:"button",className:"icon-text-button",onClick:()=>{r.refreshToolDetails()},disabled:!!n.pendingAction,children:[i.jsx(Y,{name:"refresh",size:13}),"刷新"]})]}),n.toolDetails.length?i.jsx("div",{className:"detail-selector",role:"group","aria-label":"工具输出详情",children:n.toolDetails.slice(-20).reverse().map(L=>i.jsxs("button",{type:"button",className:o&&L.artifactId===o?"active":"",disabled:!L.artifactId||E,onClick:()=>L.artifactId&&void A(L.artifactId),children:[i.jsxs("span",{children:[i.jsx("strong",{children:L.toolName}),i.jsxs("small",{children:["#",L.sequence," · ",Cf(L.outputBytes)]})]}),i.jsx(Y,{name:"chevron",size:13})]},`${L.callId}:${L.sequence}`))}):i.jsx(Do,{text:"没有可读取的持久化输出"}),n.toolDetailNextCursor?i.jsx("button",{type:"button",className:"text-button",onClick:()=>{r.loadMoreToolDetails()},disabled:!!n.pendingAction,children:"加载更多输出记录"}):null,R?i.jsx("p",{className:"field-error",role:"alert",children:R}):null,o?i.jsxs("div",{className:"detail-output",children:[i.jsxs("div",{children:[i.jsxs("span",{children:[Cf(w)," · 已脱敏"]}),i.jsx("code",{children:o})]}),i.jsx("pre",{tabIndex:0,children:Pn(d)}),f!==void 0?i.jsx("button",{type:"button",className:"secondary-button",disabled:E,onClick:()=>{A(o,f)},children:E?"读取中…":"加载更多"}):null]}):null]})}function Wy({state:n,actions:r}){const o=n.skills,a=n.mcpServers;return i.jsxs("div",{className:"inspector-stack",children:[i.jsxs("section",{className:"capability-card",children:[i.jsxs("header",{children:[i.jsx("span",{className:"capability-icon",children:i.jsx(Y,{name:"spark",size:17})}),i.jsxs("div",{children:[i.jsx("h3",{children:"Skills"}),i.jsx("p",{children:"安全描述符,只读"})]}),i.jsx("span",{className:`readiness-pill ${o.length?"ready":""}`,children:o.length?`${o.length} 可用`:"未发现"})]}),o.length?i.jsx("ul",{className:"skill-list",children:o.map(d=>i.jsxs("li",{children:[i.jsxs("div",{children:[i.jsx("strong",{children:d.name}),i.jsxs("span",{children:[d.sourceScope," · ",d.providerId]})]}),i.jsx("p",{children:d.description}),d.requestedCapabilities.length?i.jsx("small",{children:d.requestedCapabilities.join(" · ")}):null]},d.id))}):i.jsx("p",{className:"muted-copy",children:"当前 Runtime 没有公开可用的 Skill 描述符。"})]}),i.jsxs("section",{className:"capability-card",children:[i.jsxs("header",{children:[i.jsx("span",{className:"capability-icon mcp",children:i.jsx(Y,{name:"branch",size:17})}),i.jsxs("div",{children:[i.jsx("h3",{children:"MCP Servers"}),i.jsx("p",{children:"只读配置与运行状态"})]}),i.jsx("span",{className:`readiness-pill ${a.length?"ready":""}`,children:a.length?`${a.length} 已配置`:"未配置"})]}),a.length?i.jsx("ul",{className:"server-list",children:a.map(d=>i.jsxs("li",{children:[i.jsx("span",{className:`state-dot state-${d.state}`,"aria-hidden":"true"}),i.jsxs("div",{children:[i.jsx("code",{children:d.name}),i.jsxs("small",{children:[d.transport," · ",d.toolCount," tools"]})]}),i.jsx("span",{children:d.disabled?"Disabled":d.state})]},d.id))}):i.jsx("p",{className:"muted-copy",children:"没有可用的 MCP Server。浏览器不会接收环境变量或认证 Header。"})]}),n.skillNextCursor||n.mcpNextCursor?i.jsx("button",{type:"button",className:"secondary-button",onClick:()=>{r.loadMoreCapabilities()},disabled:!!n.pendingAction,children:"加载更多能力"}):null,i.jsxs("section",{className:"security-note",children:[i.jsx(Y,{name:"info",size:16}),i.jsxs("p",{children:[i.jsx("strong",{children:"能力边界由 Runtime 管理。"})," Web 端只展示描述符和状态,不加载外部插件代码,也不会绕过 ToolGateway。"]})]})]})}function Fy({state:n,actions:r}){const o=n.diagnostics,a=Qo(n);return i.jsxs("div",{className:"inspector-stack",children:[i.jsxs("div",{className:"diagnostics-toolbar",children:[i.jsxs("div",{children:[i.jsx("span",{className:`connection-dot ${n.connection}`,"aria-hidden":"true"}),i.jsx("strong",{children:Hy(n.connection)})]}),i.jsxs("button",{type:"button",className:"icon-text-button",onClick:()=>{r.refreshDiagnostics()},disabled:!!n.pendingAction,children:[i.jsx(Y,{name:"refresh",size:14}),"刷新"]})]}),i.jsxs("section",{className:"inspector-section",children:[i.jsx("div",{className:"inspector-section-heading",children:i.jsx("h3",{children:"Runtime"})}),i.jsxs("dl",{className:"diagnostic-list",children:[i.jsx(Ct,{label:"版本",value:n.bootstrap?.productVersion??"—"}),i.jsx(Ct,{label:"工作区",value:xp(n.workspace)||"—"}),i.jsx(Ct,{label:"会话",value:n.activeSessionId?.slice(0,12)??"未选择"}),i.jsx(Ct,{label:"模式",value:String(o?.agentMode??n.mode.baseMode)}),i.jsx(Ct,{label:"权限",value:String(o?.permissionMode??n.settings?.sections.permissions.toolConfirmation.effectiveValue??"—")}),i.jsx(Ct,{label:"事件游标",value:`${n.lastCursor}`}),i.jsx(Ct,{label:"事件 UUID",value:n.lastEventId?.slice(0,12)??"—"}),i.jsx(Ct,{label:"会话快照",value:a.status}),i.jsx(Ct,{label:"保留事件",value:`${o?.eventStream?.retained??"—"}`}),i.jsx(Ct,{label:"快照请求",value:o?.session?`${o.session.snapshotRequests} 次 / 失败 ${o.session.snapshotFailures}`:"—"}),i.jsx(Ct,{label:"快照时延",value:o?.session?`${o.session.snapshotLastMs} ms(累计 ${o.session.snapshotTotalMs} ms)`:"—"}),i.jsx(Ct,{label:"Session actor",value:o?.session?`${o.session.actors.actorsCreated} 分配 / ${o.session.actors.actorsEvicted} LRU 驱逐`:"—"}),i.jsx(Ct,{label:"control plane",value:o?.session?`${o.session.controlPlaneInstalls} 次装载 / ${o.session.controlPlaneShutdowns} 次关闭`:"—"}),i.jsx(Ct,{label:"浏览器切换",value:`${n.clientTelemetry.sessionSwitches} 次 / 缓存命中 ${n.clientTelemetry.snapshotCacheHits} / 加载 ${n.clientTelemetry.snapshotLoads}`})]})]}),o?.contextUsage?i.jsx(To,{title:"Context usage",value:o.contextUsage}):null,o?.tokenUsage?i.jsx(To,{title:"Token usage",value:o.tokenUsage}):null,o?.harness?i.jsx(To,{title:"Harness",value:o.harness}):null,n.loopStats?i.jsx(To,{title:"Loop statistics",value:n.loopStats}):null,i.jsxs("section",{className:"security-note",children:[i.jsx(Y,{name:"check",size:16}),i.jsx("p",{title:"API Key、认证 Header 和环境值不会返回浏览器。",children:"诊断载荷由 Host 脱敏。"})]})]})}function Ct({label:n,value:r}){return i.jsxs("div",{children:[i.jsx("dt",{children:n}),i.jsx("dd",{title:r,children:r})]})}function To({title:n,value:r}){return i.jsxs("details",{className:"json-section",children:[i.jsx("summary",{children:n}),i.jsx("pre",{tabIndex:0,children:uc(r,12e3)})]})}function Do({text:n}){return i.jsxs("div",{className:"empty-small",children:[i.jsx("span",{className:"empty-line","aria-hidden":"true"}),i.jsx("p",{children:n})]})}function By(n){return/write|edit|patch|delete|move|rename|mkdir|create/i.test(n.name)}function xp(n){const r=n.replace(/[\\/]+$/,"");return r.split(/[\\/]/).filter(Boolean).at(-1)??r}function Sf(n){return new Intl.NumberFormat("zh-CN",{notation:n>99999?"compact":"standard"}).format(n)}function qy(n){return n<1e3?`${Math.round(n)}ms`:n<6e4?`${Math.round(n/1e3)}s`:`${Math.floor(n/6e4)}m ${Math.round(n%6e4/1e3)}s`}function Cf(n){return n<1024?`${n} B`:n<1048576?`${(n/1024).toFixed(1)} KB`:`${(n/1048576).toFixed(1)} MB`}function Uy(n){const r=Date.parse(n);return Number.isFinite(r)?new Date(r).toLocaleTimeString("zh-CN",{hour:"2-digit",minute:"2-digit"}):""}function Hy(n){return n==="live"?"本地 Web Host 连接正常":n==="offline"?"浏览器离线":n==="replay-required"?"Web Host 事件流需要恢复":n==="closed"?"本地 Web Host 已关闭":n==="connecting"?"正在连接本地 Web Host":"正在重新连接本地 Web Host"}function Vy({width:n,onPreview:r,onCommit:o,maxWidth:a=op}){return i.jsx(sp,{side:"right",className:"work-panel-resize-handle",minWidth:mc,maxWidth:a,defaultWidth:gc,label:"拖动或按方向键调整工作面板宽度",width:n,controls:"work-panel-detail",onPreview:r,onCommit:o})}const Ky=["agent","review","terminal","files","git"],Gy=Object.freeze({agent:{label:"Agent",icon:"spark",kind:"task"},review:{label:"审阅",icon:"edit",kind:"resource"},terminal:{label:"终端",icon:"terminal",kind:"resource"},files:{label:"文件",icon:"workspace",kind:"resource"},git:{label:"Git",icon:"branch",kind:"resource"}}),Qy=new Map(Ky.map(n=>{const r=Gy[n];return[n,Object.freeze({id:n,label:r.label,icon:r.icon,kind:r.kind})]})),Yy=m.lazy(()=>tl(()=>import("./TerminalPanel-DPSMepio.js"),__vite__mapDeps([0,1])).then(n=>({default:n.TerminalPanel}))),Xy=m.lazy(()=>tl(()=>import("./FilesPanel-DGWgLv6R.js"),__vite__mapDeps([2,3])).then(n=>({default:n.FilesPanel}))),Jy=m.lazy(()=>tl(()=>import("./GitPanel-DIuJNXoB.js"),__vite__mapDeps([4,3])).then(n=>({default:n.GitPanel}))),Zy=m.lazy(()=>tl(()=>import("./ReviewPanel-YWZXJdm5.js"),__vite__mapDeps([5,3])).then(n=>({default:n.ReviewPanel}))),ex=["focus-work-panel-1","focus-work-panel-2","focus-work-panel-3","focus-work-panel-4","focus-work-panel-5"],bf=Object.freeze(Object.fromEntries([...Qy].map(([n,r])=>[n,{label:r.label,icon:r.icon}]))),tx=new Set(["starting","running","stopping","queued","waiting_approval","interrupted","failed"]);function nx(n,r){return n?tx.has(n)?n==="failed"||n==="interrupted"?"failed":n==="queued"||n==="waiting_approval"?"queued":"running":null:r?"running":null}const Ga=["system","light","dark"],rx={system:"monitor",light:"sun",dark:"moon"},Nf={system:"跟随系统",light:"浅色",dark:"深色"};function sx(n){const r=n??"system",o=Ga.indexOf(r),a=Ga[(o+1)%Ga.length];return{current:r,next:a}}function ix({state:n,actions:r,mode:o,expanded:a,themePreference:d,onCycleTheme:p,onToggleInspector:f,onShowShortcutHelp:g,activePanel:w,panelOrder:x,agentPanel:E,onExpand:C,onCollapse:R,onPanelChange:_,onAgentPanelChange:A,onWidthPreview:L,onWidthCommit:W,width:ie,maxWidthPx:B,revealFileRequest:Se,onRevealInFiles:re,onSendToComposer:ne,resourceNavigatorWidths:b,onResourceNavigatorWidthCommit:D}){const ee=m.useRef(null),X=m.useRef(null),oe=m.useRef(a),Q=m.useId(),xe=m.useRef(new Set([w]));xe.current.add(w);const se=m.useRef(w==="terminal"||xe.current.has("terminal"));w==="terminal"&&(se.current=!0);const[Ie,$]=m.useState(!1),pe=x&&x.length===oc.length?x:oc,V=n.workspaceResourceEpochs[n.workspaceId]??{files:0,git:0,review:0},z=n.sessionRuntimeById[n.activeSessionId??""]?.phase,te=nx(z,n.processing),q=sx(d);m.useEffect(()=>{const J=oe.current;if(oe.current=a,!(o!=="dock"||J===a)){if(!a){requestAnimationFrame(()=>ee.current?.querySelector(`[data-work-panel-id="${w}"]`)?.focus());return}Ie&&($(!1),requestAnimationFrame(()=>X.current?.focus()))}},[w,a,o,Ie]),m.useEffect(()=>{const J=Ho("toggle-work-panel"),me=Ce=>{if(J&&Uo(Ce,J.tokens)){Ce.preventDefault(),a?R():($(!0),C());return}const ae=ex.findIndex(Qe=>{const Je=Ho(Qe);return Je?Uo(Ce,Je.tokens):!1}),Oe=pe[ae];Oe&&(Ce.preventDefault(),!(a&&w===Oe)&&(_(Oe),a||C()))};return window.addEventListener("keydown",me),()=>window.removeEventListener("keydown",me)},[a,o,R,C,_]);const v=J=>{if(J.key==="Escape"&&a&&!J.target.closest('[role="alertdialog"], .terminal-host, input, textarea, [contenteditable]')){J.preventDefault(),R();return}if(o!=="overlay"||!a||J.key!=="Tab")return;const me=ox(ee.current);if(!me.length){J.preventDefault(),ee.current?.focus();return}const Ce=me.indexOf(document.activeElement);J.shiftKey&&Ce<=0?(J.preventDefault(),me.at(-1)?.focus()):!J.shiftKey&&(Ce<0||Ce===me.length-1)&&(J.preventDefault(),me[0].focus())},O=J=>{if(o==="overlay"){_(J),a||($(!0),C());return}if(a&&w===J){R();return}a||$(!0),_(J),C()},ue=(J=!1)=>i.jsxs("nav",{className:J?"work-panel-rail work-panel-rail-overlay":"work-panel-rail","aria-label":"工作面板快捷入口","aria-orientation":J?"horizontal":"vertical",children:[pe.map((me,Ce)=>{const ae=bf[me],Oe=w===me;return i.jsxs("button",{type:"button",className:"work-panel-rail-button","data-work-panel-id":me,"aria-label":`打开${ae.label}面板`,"aria-current":Oe?"page":void 0,title:`${ae.label} · ⌘⇧${Ce+1}`,onClick:()=>O(me),children:[i.jsx(Y,{name:ae.icon,size:17}),me==="terminal"&&te?i.jsx(dc,{state:te,className:"rail-status-dot",describe:!1}):null]},me)}),i.jsx("div",{className:"work-panel-rail-spacer"}),i.jsx("button",{type:"button",className:"icon-button shortcut-help-button",onClick:g,"aria-label":"查看键盘快捷键",title:"键盘快捷键(⌘/Ctrl+/)",children:i.jsx(Y,{name:"keyboard",size:17})}),i.jsx("button",{type:"button",className:"icon-button theme-cycle-button",onClick:p,"aria-label":`主题:${Nf[q.current]},点击切换为${Nf[q.next]}`,children:i.jsx(Y,{name:rx[q.current],size:17})}),i.jsx("button",{type:"button",className:"icon-button inspector-toggle",onClick:f,"aria-label":a?"关闭工作面板":"打开工作面板","aria-controls":"work-panel","aria-expanded":a,children:i.jsx(Y,{name:"sidebar",size:17})})]}),he=J=>i.jsxs("div",{id:`${Q}-${J}`,className:"work-panel-pane",role:"tabpanel","aria-label":bf[J].label,hidden:J!==w,children:[J==="agent"?i.jsx(My,{state:n,actions:r,tab:E,onTabChange:A}):null,J==="review"?i.jsx(Zy,{workspaceId:n.workspaceId,refreshEpoch:V.review,actions:r,onSendToComposer:ne,navigatorWidthPx:b.review,onNavigatorWidthCommit:me=>D("review",me)}):null,J==="terminal"?i.jsx(Yy,{workspaceId:n.workspaceId,workspacePath:n.workspace,styleNonce:n.bootstrap?.nonce??"",available:!!n.bootstrap?.capabilities.terminal,actions:r}):null,J==="files"?i.jsx(Xy,{workspaceId:n.workspaceId,refreshEpoch:V.files,actions:r,revealRequest:Se??null,navigatorWidthPx:b.files,onNavigatorWidthCommit:me=>D("files",me)}):null,J==="git"?i.jsx(Jy,{workspaceId:n.workspaceId,refreshEpoch:V.git,actions:r,onRevealInFiles:re,onSendToComposer:ne,navigatorWidthPx:b.git,onNavigatorWidthCommit:me=>D("git",me)}):null]},J),we=w==="terminal"||!se.current?[w]:[w,"terminal"];return i.jsxs("aside",{ref:ee,id:"work-panel",className:`work-panel work-panel-${o} ${a?"drawer-open work-panel-expanded":"work-panel-collapsed"}`,role:o==="overlay"?"dialog":void 0,"aria-modal":o==="overlay"&&a?!0:void 0,"aria-label":"工作面板","data-mode":o,"data-state":a?"expanded":"collapsed",tabIndex:o==="overlay"&&a?-1:void 0,onKeyDownCapture:v,children:[o==="dock"?i.jsxs("div",{className:"work-panel-dock-body",children:[a?i.jsx("section",{ref:X,id:"work-panel-detail",className:"work-panel-detail","aria-label":"工作面板内容",tabIndex:-1,children:i.jsx("div",{className:"work-panel-content",children:i.jsx(m.Suspense,{fallback:i.jsx("p",{className:"resource-loading",children:"正在加载工作面板…"}),children:we.map(J=>he(J))})})}):null,ue()]}):i.jsxs("div",{id:"work-panel-detail",className:"work-panel-detail",hidden:!a,children:[ue(!0),i.jsx("div",{className:"work-panel-content",children:i.jsx(m.Suspense,{fallback:i.jsx("p",{className:"resource-loading",children:"正在加载工作面板…"}),children:we.map(J=>he(J))})})]}),o==="dock"&&a?i.jsx(Vy,{width:ie,maxWidth:B,onPreview:L,onCommit:W}):null]})}function ox(n){return n?Array.from(n.querySelectorAll('a[href], button, input, select, textarea, summary, [tabindex]:not([tabindex="-1"])')).filter(r=>!r.hasAttribute("disabled")&&!r.closest("[inert]")&&!r.closest("[hidden]")&&r.getClientRects().length>0):[]}const wp="orion.web.right-workspace.v3",Vo=4,zo=300,kp=160,jp=420,lx=280,ax=["files","git","review"],Ko=Object.freeze({files:zo,git:zo,review:zo});function Sp(n){return Number.isFinite(n)?Math.min(jp,Math.max(kp,Math.round(n))):zo}function uw(n){const r=Number.isFinite(n)?n:0,o=Math.min(jp,r*.48,r-lx);return Math.max(kp,Math.floor(o))}const Cp=Object.freeze({expanded:!0,activePanel:"agent",detailWidthPx:560,taskSubview:"overview",resourceNavigatorWidthPx:Ko}),cx=Cp;function If(){return Object.freeze({schemaVersion:Vo,projectNavigation:Object.freeze({expanded:!0,widthPx:280}),workPanel:Object.freeze({byWorkspace:Object.freeze({}),fallback:cx})})}function ux(n){const r=vc(n.agentPanel);return Object.freeze({expanded:n.expanded!==!1,activePanel:ui(n.activePanel)?n.activePanel:"agent",detailWidthPx:Math.max(320,ci(Number.isFinite(n.widthPx)?Number(n.widthPx)-Ge:560)),taskSubview:r,resourceNavigatorWidthPx:Ko})}function dx(n,r){return n.workPanel.byWorkspace[r]??n.workPanel.fallback}function bp(n,r,o){const a=n.workPanel.byWorkspace[r]??n.workPanel.fallback,d=Object.freeze({...a,...o,resourceNavigatorWidthPx:o.resourceNavigatorWidthPx??a.resourceNavigatorWidthPx}),p={schemaVersion:Vo,projectNavigation:n.projectNavigation,workPanel:{...n.workPanel,byWorkspace:Object.freeze({...n.workPanel.byWorkspace,[r]:d})}};return Object.freeze(p)}function fx(n,r,o,a){const d=dx(n,r);return bp(n,r,{...d,resourceNavigatorWidthPx:Object.freeze({...d.resourceNavigatorWidthPx,[o]:Sp(a)})})}function px(n){if(!n)return null;try{const r=JSON.parse(n);if(!_r(r))return null;const o=r.schemaVersion;if(o!==3&&o!==Vo)return null;const a=_r(r.projectNavigation)?r.projectNavigation:{},d=_r(r.workPanel)?r.workPanel:{},p=_r(d.byWorkspace)?d.byWorkspace:{},f=_r(d.fallback)?d.fallback:{},g={};for(const[w,x]of Object.entries(p))_r(x)&&(g[w]=_f(x));return Object.freeze({schemaVersion:Vo,projectNavigation:Object.freeze({expanded:a.expanded!==!1,widthPx:ci(Number(a.widthPx)||280)}),workPanel:Object.freeze({byWorkspace:Object.freeze(g),fallback:_f(f)})})}catch{return null}}function _f(n){return Object.freeze({expanded:n.expanded!==!1,activePanel:ui(n.activePanel)?n.activePanel:"agent",detailWidthPx:Np(Number(n.detailWidthPx)),taskSubview:vc(n.taskSubview),resourceNavigatorWidthPx:hx(n.resourceNavigatorWidthPx)})}function hx(n){if(!_r(n))return Ko;const r={...Ko};for(const o of ax){const a=Number(n[o]);Number.isFinite(a)&&(r[o]=Sp(a))}return Object.freeze(r)}function Np(n){return Number.isFinite(n)?Math.min(3200,Math.max(360,Math.round(n))):Cp.detailWidthPx}function vc(n){const r=String(n);return r==="goal"||r==="overview"?"overview":r==="activity"?"activity":r==="integrations"||r==="capabilities"?"capabilities":r==="diagnostics"?"diagnostics":"overview"}function mx(n){switch(n){case"overview":return"goal";case"activity":return"activity";case"capabilities":return"integrations";case"diagnostics":return"diagnostics"}}function _r(n){return!!n&&typeof n=="object"&&!Array.isArray(n)}function gx(n){return["agent","review","terminal","files","git"].includes(n)}function vx(){const n=globalThis;try{return px(n.window?.localStorage.getItem(wp)??null)}catch{return null}}function Ef(n){const r=globalThis;try{r.window?.localStorage.setItem(wp,JSON.stringify(n))}catch{}}function yx(n,r){const[o,a]=m.useState(vx),d=n??"__fallback__",p=m.useMemo(()=>ux(r),[]),f=m.useMemo(()=>{const x=o?.workPanel.byWorkspace[d]??o?.workPanel.fallback??p;return{workspaceId:d,expanded:x.expanded,activePanel:gx(x.activePanel)?x.activePanel:"agent",agentPanel:mx(x.taskSubview),detailWidthPx:x.detailWidthPx,resourceNavigatorWidthPx:x.resourceNavigatorWidthPx}},[o,d,p]),g=m.useCallback(x=>{a(E=>{const C=E??If(),R=C.workPanel.byWorkspace[d]??C.workPanel.fallback??p,_={expanded:x.expanded??R.expanded,activePanel:x.activePanel??R.activePanel,detailWidthPx:x.detailWidthPx??R.detailWidthPx,taskSubview:x.agentPanel?vc(x.agentPanel):R.taskSubview,resourceNavigatorWidthPx:R.resourceNavigatorWidthPx},A=bp(C,d,_);return Ef(A),A})},[d,p]),w=m.useCallback((x,E)=>{a(C=>{const R=C??If(),_=fx(R,d,x,E);return Ef(_),_})},[d]);return{value:f,update:g,setResourceNavigatorWidth:w}}const yc=320,Pf=360,xx=1024,wx=768,kx=.8;function Ip(n){return Number.isFinite(n)&&n>0?Math.round(n):1440}function _p(n){const r=Math.floor(n*kx),o=n-yc-Ge;return Math.max(0,Math.min(r,o))}function Rf(n){const r=Ip(n.containerWidth),o=Math.max(0,Math.round(n.leftWidthPx)),a=Math.max(0,r-o);if(r<wx)return Object.freeze({mode:"drawer",detailWidthPx:0,conversationWidthPx:a,canResize:!1});if(r<xx)return n.expanded?Object.freeze({mode:"drawer",detailWidthPx:0,conversationWidthPx:a,canResize:!0}):Object.freeze({mode:"rail",detailWidthPx:0,conversationWidthPx:a,canResize:!1});if(!n.expanded)return Object.freeze({mode:"rail",detailWidthPx:Ge,conversationWidthPx:a-Ge,canResize:!1});const d=_p(a);if(d<Pf)return Object.freeze({mode:"rail",detailWidthPx:Ge,conversationWidthPx:a-Ge,canResize:!1});const p=Math.max(Pf,Math.min(Np(n.storedDetailWidthPx),d)),f=a-p-Ge;return f<yc?Object.freeze({mode:"rail",detailWidthPx:Ge,conversationWidthPx:a-Ge,canResize:!1}):Object.freeze({mode:"dock",detailWidthPx:p,conversationWidthPx:f,canResize:d>p})}function Tf(n){const r=Ip(n.containerWidth),o=n.navigationExpanded?Math.max(240,Math.min(480,Math.round(n.navigationWidthPx))):Ge;let a=Rf({containerWidth:r,leftWidthPx:o,expanded:n.workExpanded,storedDetailWidthPx:n.workDetailWidthPx});const d=Rf({containerWidth:r,leftWidthPx:Ge,expanded:n.workExpanded,storedDetailWidthPx:n.workDetailWidthPx});return n.navigationExpanded&&(a.mode==="dock"&&a.conversationWidthPx<yc||a.mode!=="dock"&&d.mode==="dock")?(a=d,Object.freeze({projectNavigation:Object.freeze({mode:"rail",widthPx:Ge}),conversationWidthPx:a.conversationWidthPx,workPanel:Object.freeze({mode:a.mode,widthPx:a.mode==="dock"?a.detailWidthPx+Ge:a.detailWidthPx})})):Object.freeze({projectNavigation:Object.freeze({mode:n.navigationExpanded?"dock":"rail",widthPx:o}),conversationWidthPx:a.conversationWidthPx,workPanel:Object.freeze({mode:a.mode,widthPx:a.mode==="dock"?a.detailWidthPx+Ge:a.detailWidthPx})})}function jx(n,r,o){const a=r==="light"||r==="system"&&o;return n==="orion-blocksmith"?a?"#d7d0c1":"#15191b":a?"#f4f5f8":"#090b10"}function tr(n,r){return n.some(o=>o.id===r.id)?n.map(o=>o.id===r.id?r:o):[r,...n]}const Go=1e4,Sx=256,Cx=256,bx=128,Nx=8,Ep=8*1024*1024,Ix=64;function _x(n=Yf,r){switch(r.type){case"baseline_loaded":{const o=n.workspaceId!==r.bootstrap.workspaceId||n.activeSessionId!==r.bootstrap.activeSessionId?ai(n):n,a=Ff(r.diagnostics,o.mode);return{...o,boot:"ready",bootError:void 0,bootstrap:r.bootstrap,contextRevision:r.bootstrap.contextRevision,workspaceId:r.bootstrap.workspaceId,workspace:r.workspaces.activePath||r.bootstrap.workspace,workspaces:r.workspaces.workspaces,sessions:r.sessions,workspaceSessions:{...o.workspaceSessions,[r.bootstrap.workspaceId]:{status:"ready",items:r.sessions,nextCursor:r.sessionNextCursor}},workspaceNextCursor:r.workspaces.nextCursor,sessionNextCursor:r.sessionNextCursor,activeSessionId:r.bootstrap.activeSessionId,sessionSync:r.bootstrap.activeSessionId?{...o.sessionSync,[r.bootstrap.activeSessionId]:{status:o.sessionProjectionById[r.bootstrap.activeSessionId]?"refreshing":"loading",requestId:null}}:o.sessionSync,settings:r.settings,diagnostics:r.diagnostics,skills:r.skills,skillNextCursor:r.skillNextCursor,mcpServers:r.mcpServers,mcpNextCursor:r.mcpNextCursor,toolDetails:r.toolDetails,toolDetailNextCursor:r.toolDetailNextCursor,notice:o.notice?.domain==="session-snapshot"?null:o.notice,processing:!!r.diagnostics.processing,mode:a,statusMessage:r.bootstrap.configured?"本地 Web Host 已就绪":"模型尚未配置,任务提交已停用",announcement:r.bootstrap.configured?"本地 Web Host 已就绪":"Orion 尚未配置模型"}}case"boot_failed":return{...n,boot:"error",bootError:r.message,connection:$x()?"reconnecting":"offline",announcement:`启动失败:${r.message}`};case"connection_changed":return n.connection==="replay-required"?n:{...n,connection:r.phase,connectionAttempt:r.attempt,announcement:Dx(r.phase,r.attempt)};case"event_received":return Ex(n,r.envelope);case"session_snapshot_started":return n.contextRevision!==r.contextRevision||n.workspaceId!==r.workspaceId?n:Oo(si(n,r.sessionId,{status:r.cached?"refreshing":"loading",requestId:r.requestId}),{snapshotLoads:1});case"session_snapshot_loaded":{const o=r.snapshot.session.id;return!Wf(n,r.contextRevision,r.workspaceId)||!zf(n,o,r.requestId)?n:n.activeSessionId!==o?r.requestId===void 0?n:Df(Mf(n,r.snapshot),o):Df(Of(n,r.snapshot,r.advanceEventCursor!==!1),o)}case"composer_loaded":return r.composer.sessionId!==n.activeSessionId||r.composer.workspaceId!==n.workspaceId||r.composer.contextRevision!==n.contextRevision?n:Pp(n,r.composer);case"model_catalog_loaded":return{...n,modelCatalog:r.catalog};case"durable_session_metadata_loaded":return n.contextRevision!==r.contextRevision||n.workspaceId!==r.workspaceId?n:n.activeSessionId!==r.snapshot.session.id?Mf(n,r.snapshot):r.snapshot.runtime.active!==!0?n:Tx(n,r.snapshot);case"older_transcript_loaded":{if(n.activeSessionId!==r.snapshot.session.id||!n.sessionSnapshot)return n;const o=new Set(n.transcript.map(d=>d.id)),a=Rp(r.snapshot).filter(d=>!o.has(d.id));return{...n,transcript:[...a,...n.transcript].sort((d,p)=>d.order-p.order).slice(-Go),sessionSnapshot:{...n.sessionSnapshot,transcript:{items:n.sessionSnapshot.transcript.items,nextCursor:r.snapshot.transcript.nextCursor}},announcement:`已加载 ${a.length} 条更早记录`}}case"sessions_loaded":return{...n,sessions:r.append?er(n.sessions,r.sessions,o=>o.id):r.sessions,sessionNextCursor:r.nextCursor,workspaceSessions:n.workspaceId?{...n.workspaceSessions,[n.workspaceId]:{status:"ready",items:r.append?er(n.sessions,r.sessions,o=>o.id):r.sessions,nextCursor:r.nextCursor}}:n.workspaceSessions};case"workspaces_loaded":return{...n,workspaceId:r.value.activeId||n.workspaceId,workspace:r.value.activePath||n.workspace,workspaces:r.append?er(n.workspaces,r.value.workspaces,o=>o.id):r.value.workspaces,workspaceNextCursor:r.value.nextCursor};case"workspace_sessions_loading":return{...n,workspaceSessions:{...n.workspaceSessions,[r.workspaceId]:{status:"loading",items:n.workspaceSessions[r.workspaceId]?.items??[],nextCursor:n.workspaceSessions[r.workspaceId]?.nextCursor??null}}};case"workspace_sessions_loaded":{const o=n.workspaceSessions[r.workspaceId],a=r.append?er(o?.items??[],r.sessions,d=>d.id):r.sessions;return{...n,sessions:r.workspaceId===n.workspaceId?a:n.sessions,sessionNextCursor:r.workspaceId===n.workspaceId?r.nextCursor:n.sessionNextCursor,workspaceSessions:{...n.workspaceSessions,[r.workspaceId]:{status:"ready",items:a,nextCursor:r.nextCursor}}}}case"workspace_sessions_failed":return{...n,workspaceSessions:{...n.workspaceSessions,[r.workspaceId]:{status:"error",items:n.workspaceSessions[r.workspaceId]?.items??[],nextCursor:n.workspaceSessions[r.workspaceId]?.nextCursor??null,error:r.detail}}};case"session_updated":return Af(n,a=>Ox(a,r.session));case"session_archived":{const o=Lf(n,r.session.id),a=n.archivedSessions.items.some(d=>d.id===r.session.id);return{...o,archivedSessions:a?o.archivedSessions:{...o.archivedSessions,status:"ready",items:[r.session,...o.archivedSessions.items]}}}case"session_restored":{const o=Af(n,a=>[r.session,...a.filter(d=>d.id!==r.session.id)]);return{...o,archivedSessions:{...o.archivedSessions,items:o.archivedSessions.items.filter(a=>a.id!==r.session.id)}}}case"session_deleted":{const o={...n.sessionRuntimeById};return delete o[r.sessionId],{...Lf(n,r.sessionId),sessionRuntimeById:o,archivedSessions:{...n.archivedSessions,items:n.archivedSessions.items.filter(a=>a.id!==r.sessionId)}}}case"archived_sessions_loading":return r.workspaceId!==n.workspaceId?n:{...n,archivedSessions:{status:"loading",items:n.archivedSessions.ownerWorkspaceId===r.workspaceId?n.archivedSessions.items:[],nextCursor:n.archivedSessions.nextCursor,ownerWorkspaceId:n.archivedSessions.ownerWorkspaceId}};case"archived_sessions_loaded":{if(r.workspaceId!==n.workspaceId)return n;const o=r.append?er(n.archivedSessions.items,r.sessions,a=>a.id):r.sessions;return{...n,archivedSessions:{status:"ready",items:o,nextCursor:r.nextCursor,ownerWorkspaceId:r.workspaceId}}}case"archived_sessions_failed":return r.workspaceId!==n.workspaceId?n:{...n,archivedSessions:{...n.archivedSessions,status:"error",ownerWorkspaceId:r.workspaceId,error:r.detail}};case"workspace_project_summary_loaded":return{...n,workspaceProjectSummaries:{...n.workspaceProjectSummaries,[r.summary.workspaceId]:r.summary}};case"settings_loaded":return{...n,settings:r.settings};case"settings_mirror_changed":return{...n,settings:r.snapshot.document??r.snapshot.lastGood,settingsMirror:r.snapshot};case"diagnostics_loaded":return{...n,diagnostics:r.diagnostics,processing:!!(r.diagnostics.processing??n.processing),mode:Ff(r.diagnostics,n.mode)};case"capabilities_loaded":return{...n,skills:r.append?er(n.skills,r.skills,o=>o.id):r.skills,skillNextCursor:r.skillNextCursor,mcpServers:r.append?er(n.mcpServers,r.mcpServers,o=>o.id):r.mcpServers,mcpNextCursor:r.mcpNextCursor};case"tool_details_loaded":return{...n,toolDetails:r.append?er(n.toolDetails,r.details,o=>`${o.sequence}:${o.callId}`):r.details,toolDetailNextCursor:r.nextCursor};case"pending_action":return{...n,pendingAction:r.label};case"notice":return{...n,notice:r.notice};case"approval_resolved":return n.permission?.id!==r.requestId?n:{...n,permission:null,announcement:r.approved?"工具权限已授予":"工具请求已拒绝"};case"snapshot_failed":{if(!Wf(n,r.contextRevision,r.workspaceId))return n;if(!r.sessionId)return n.connection==="replay-required"?n:{...n,notice:{id:r.requestId??n.lastCursor,tone:"warning",title:"会话状态尚未同步",detail:r.detail},announcement:"会话状态尚未同步"};if(!zf(n,r.sessionId,r.requestId)||r.sessionId!==n.activeSessionId&&r.requestId===void 0)return n;const o=Oo(si(n,r.sessionId,{status:"failed",requestId:r.requestId??n.sessionSync[r.sessionId]?.requestId??null,error:r.detail}),{snapshotFailures:1});return r.sessionId!==n.activeSessionId||n.connection==="replay-required"?o:{...o,statusMessage:n.sessionSnapshot?.session.id===r.sessionId?"会话刷新失败,当前显示最近状态":"会话快照加载失败",notice:{id:r.requestId??n.lastCursor,tone:"warning",title:"会话快照尚未同步",detail:r.detail,domain:"session-snapshot",sessionId:r.sessionId},announcement:"当前会话快照尚未同步,写操作已暂停"}}case"reset_session_view":{const o=!!r.activeSessionId&&r.activeSessionId!==n.activeSessionId,a=!!(r.activeSessionId&&n.sessionProjectionById[r.activeSessionId]),d={...o?{sessionSwitches:1}:{},...a?{snapshotCacheHits:1}:{}};if(r.activeSessionId&&n.sessionProjectionById[r.activeSessionId]){const g=r.activeSessionId,w=Of({...n,activeSessionId:g},n.sessionProjectionById[g],!1);return Oo({...si(w,g,{status:"refreshing",requestId:n.sessionSync[g]?.requestId??null}),notice:n.notice?.domain==="session-snapshot"&&n.notice.sessionId!==g?null:n.notice,statusMessage:"已显示最近会话状态,正在同步…",announcement:"已切换到缓存会话,正在同步最新状态"},d)}const p={...ai(n),activeSessionId:r.activeSessionId,notice:n.notice?.domain==="session-snapshot"&&n.notice.sessionId!==r.activeSessionId?null:n.notice,statusMessage:r.activeSessionId?"正在加载会话快照…":"请选择会话",announcement:r.activeSessionId?"正在加载会话快照":"会话已清除"},f=r.activeSessionId?si(p,r.activeSessionId,{status:"loading",requestId:n.sessionSync[r.activeSessionId]?.requestId??null}):p;return Oo(f,d)}case"recovering":return{...n,connection:"connecting",replayReason:void 0,notice:null,announcement:"正在重新加载会话状态"}}}function Ex(n,r){if(r.type==="replay_reset")return{...n,lastCursor:r.cursor,lastEventId:r.eventId,connection:"replay-required",replayReason:r.payload.reason,notice:{id:r.cursor,tone:"warning",title:"需要重新载入会话",detail:r.payload.reason,domain:"transport"},announcement:"事件历史已超出保留窗口,需要重新载入会话"};if(n.connection==="replay-required"||r.cursor<=n.lastCursor)return n;const o={...n,lastCursor:r.cursor,lastEventId:r.eventId};if(r.type==="settings_invalidated")return{...o,announcement:r.payload.revision===n.settings?.revision?"Host 设置已同步":r.payload.state==="invalid"?"设置文档无效,仍保留上一次可用值":"Host 设置已更新,正在刷新"};if(r.type==="workspace_resource_invalidated"){const d={...n.workspaceResourceEpochs[r.payload.workspaceId]??{files:0,git:0,review:0}};for(const p of r.payload.resources)d[p]=r.cursor;return{...o,workspaceResourceEpochs:{...n.workspaceResourceEpochs,[r.payload.workspaceId]:d},announcement:"项目资源已变化,可用面板正在刷新"}}if(r.type==="workbench_state"){const a=n.workspaceId!==""&&n.workspaceId!==r.payload.workspaceId||n.workspace!==""&&n.workspace!==r.payload.workspace;return{...a?ai(o):o,contextRevision:r.payload.contextRevision,workspaceId:r.payload.workspaceId,workspace:r.payload.workspace,activeSessionId:a?null:n.activeSessionId}}if(r.type==="composer_state_changed"){const a=r.payload.state;return a.sessionId!==o.activeSessionId||a.workspaceId!==o.workspaceId||a.contextRevision!==o.contextRevision?o:Pp(o,a)}if(r.type==="session_runtime_changed"){const a=r.payload.runtime,d=o.sessionProjectionById[a.sessionId],p=rl(o.sessionRuntimeById,a),f=d?nl(o.sessionProjectionById,{...d,sessionRuntime:a}):o.sessionProjectionById;return a.sessionId!==o.activeSessionId?{...o,sessionProjectionById:f,sessionRuntimeById:p}:{...o,sessionProjectionById:f,sessionRuntimeById:p,processing:["running","waiting_approval","stopping"].includes(a.phase),sessionSnapshot:o.sessionSnapshot?.session.id===a.sessionId?{...o.sessionSnapshot,sessionRuntime:a}:o.sessionSnapshot,composer:o.composer?.sessionId===a.sessionId?{...o.composer,sessionRuntime:a}:o.composer}}if(r.type==="workspace_mutation_changed"){if(r.sessionId!==o.activeSessionId)return o;const a=o.tools.find(p=>p.callId===r.payload.state.callId);if(!a)return o;const d={phase:r.payload.state.phase,...r.payload.state.queuePosition===void 0?{}:{queuePosition:r.payload.state.queuePosition}};return{...o,tools:ac(o.tools,{...a,workspaceMutation:d}),announcement:d.phase==="queued"?`工具 ${a.name} 正在等待工作树写入`:d.phase==="running"?`工具 ${a.name} 已获得工作树写入权限`:o.announcement}}return r.sessionId!==null&&r.sessionId!==o.activeSessionId?o:r.type==="thread_event"?Px(o,r.payload.value):Rx(o,r.payload.value,r.eventId,r.cursor,r.timestamp)}function Px(n,r){const o=r.payload;switch(o.type){case"thread.started":case"thread.resumed":return{...n,statusMessage:"会话线程已就绪"};case"thread.forked":return{...n,statusMessage:"分支线程已就绪"};case"turn.started":return{...n,processing:!0,statusMessage:o.data.mode==="plan"?"正在制定计划…":"Orion 正在处理…",announcement:"新回合已开始"};case"turn.queued":return{...n,statusMessage:"消息已进入 Runtime 队列"};case"turn.queue_expired":return{...n,notice:{id:n.lastCursor,tone:"warning",title:"一条排队消息已过期",detail:`队列项 ${o.data.queueId} 未在时限内开始。`}};case"turn.steered":return{...n,statusMessage:"已将补充指令送入当前回合"};case"turn.interrupt_requested":return{...n,statusMessage:"正在中断当前回合…"};case"turn.committed":return{...n,statusMessage:"回合结果已持久化"};case"plan.review_requested":return{...n,processing:!1,statusMessage:"计划已保存,等待审核",announcement:"计划已准备好,请审核后再执行"};case"plan.review_resolved":return{...n,statusMessage:o.data.action==="approve"?"计划已批准,正在进入 BUILD":o.data.action==="continue"?"已提交继续规划反馈":"计划已取消"};case"turn.completed":return{...n,processing:!1,permission:null,statusMessage:"任务已完成",announcement:"当前回合已完成"};case"turn.failed":return{...n,processing:!1,permission:null,statusMessage:"当前回合失败",notice:{id:n.lastCursor,tone:"error",title:"当前回合失败",detail:o.data.error},announcement:"当前回合失败"};case"turn.interrupted":return{...n,processing:!1,permission:null,statusMessage:"当前回合已中断",announcement:"当前回合已中断"};case"compact.started":return{...n,statusMessage:"正在压缩上下文…"};case"compact.completed":return{...n,statusMessage:"上下文压缩完成"};case"compact.failed":return{...n,statusMessage:"上下文压缩失败",notice:{id:n.lastCursor,tone:"warning",title:"上下文压缩失败",detail:o.data.error}};case"approval.requested":return{...n,statusMessage:`等待确认:${o.data.toolName}`};case"item.started":case"item.delta":case"item.completed":case"item.failed":case"item.interrupted":case"item.indeterminate":case"step.snapshot":case"capability.receipt":case"tool.receipt":return n}}function Rx(n,r,o,a,d){switch(r.type){case"transcript_append":{const p={...r.entry,id:`web-entry-${a}`,eventId:o,order:a,receivedAt:d};return{...n,transcript:Wo(n.transcript,p,Go)}}case"transcript_update":if(r.contentDelta!==void 0){const p=n.transcript.find(f=>f.id===r.id);if(!p||r.contentStart===void 0||(p.content??"").length!==r.contentStart){const f="流式回复基线已变化,需要重新载入会话。";return{...n,connection:"replay-required",replayReason:f,notice:{id:a,tone:"warning",title:"需要重新载入会话",detail:f},announcement:f}}}return{...n,transcript:n.transcript.map(p=>p.id===r.id?{...p,...r.patch,...r.contentDelta===void 0?{}:{content:`${p.content??""}${r.contentDelta}`}}:p)};case"transcript_finalize":return{...n,transcript:n.transcript.map(p=>p.id===r.id?{...p,...r.patch,live:!1}:p)};case"transcript_remove":return{...n,transcript:n.transcript.filter(p=>p.id!==r.id)};case"transcript_replace":{const p=Math.max(1,r.entries.length);return{...n,transcript:r.entries.slice(-Go).map((f,g)=>({...f,eventId:`${o}:${g}`,order:a-1+(g+1)/(p+1),receivedAt:d,live:!1}))}}case"transcript_clear":return{...ai(n),activeSessionId:n.activeSessionId,statusMessage:"新会话已就绪"};case"status_changed":return{...n,statusMessage:r.message};case"permission_requested":return{...n,permission:{...r.request,eventId:o},announcement:`需要确认工具权限:${r.request.name}`};case"tool_started":{const p={callId:r.event.callId,eventId:o,order:a,name:r.event.name,args:r.event.args,sequence:r.event.sequence,state:"running",startedAt:d};return{...n,tools:ac(n.tools,p),announcement:`工具 ${p.name} 已开始`}}case"tool_finished":{const p=n.tools.find(g=>g.callId===r.event.callId),f={callId:r.event.callId,eventId:p?.eventId??o,order:p?.order??a,name:r.event.name,args:r.event.args,sequence:r.event.sequence,state:r.event.skipped?"skipped":r.event.success?"success":"error",startedAt:p?.startedAt,finishedAt:d,duration:r.event.duration,summary:r.event.summary,error:r.event.error,outputBytes:r.event.outputBytes,artifactId:r.event.artifactRef?.id,authorization:r.event.authorization};return{...n,tools:ac(n.tools,f),announcement:`工具 ${f.name} ${f.state==="success"?"已完成":f.state==="skipped"?"已跳过":"失败"}`}}case"edit_preview_requested":{const p={eventId:o,order:a,receivedAt:d,request:r.request};return{...n,edits:Wo(n.edits,p,Sx)}}case"session_restored":return{...n,activeSessionId:r.event.sessionId,statusMessage:`已恢复 ${r.event.restoredMessages} 条消息`,announcement:"会话恢复完成",notice:r.event.warnings&&r.event.warnings.length>0?{id:a,tone:"warning",title:"会话已恢复,但有注意事项",detail:r.event.warnings.join(" ")}:n.notice};case"loop_stats_updated":return{...n,loopStats:r.stats};case"trace_event_recorded":return{...n,traces:Wo(n.traces,r.event,Cx)};case"harness_diagnostics_updated":return{...n,diagnostics:{...n.diagnostics??{},harness:r.diagnostics}};case"subtask_event":{const p={...r.event,eventId:o,order:a,updatedAt:d},f=[...n.subtasks.filter(g=>g.taskId!==p.taskId),p].slice(-256);return{...n,subtasks:f}}case"research_event":return{...n,research:Lx(n.research,r.event,o,a,d)};case"goal_event":return Mx(n,r.event,d);case"effort_event":return{...n,effort:r.event};case"followup_queue_changed":return{...n,queue:r.snapshot};case"processing_changed":return{...n,processing:r.processing,permission:r.processing?n.permission:null,announcement:r.processing?"Orion 开始处理任务":"Orion 已完成当前处理"};case"agent_mode_changed":return{...n,mode:r.snapshot};case"clear_view":return{...n,transcript:[],tools:[],edits:[]};case"shutdown_requested":return{...n,connection:"closed",processing:!1,permission:null,statusMessage:r.reason??"Web Host 已关闭",announcement:"Orion Web Host 已关闭"};case"session_picker_requested":case"model_picker_requested":return n}}function Of(n,r,o=!0){const a=Rp(r).slice(-Go),d=Op(r.runtime.agentMode)?r.runtime.agentMode:n.mode.baseMode,p=r.pendingApprovals[0],f=Tp(r.goal);return{...ai(n),lastCursor:o?Math.max(n.lastCursor,r.eventCursor):n.lastCursor,activeSessionId:r.session.id,sessionProjectionById:nl(n.sessionProjectionById,r),sessionRuntimeById:rl(n.sessionRuntimeById,r.sessionRuntime),sessions:tr(n.sessions,r.session),workspaceSessions:n.workspaceId?{...n.workspaceSessions,[n.workspaceId]:{status:"ready",items:tr(n.workspaceSessions[n.workspaceId]?.items??n.sessions,r.session),nextCursor:n.workspaceSessions[n.workspaceId]?.nextCursor??n.sessionNextCursor}}:n.workspaceSessions,transcript:a,permission:p?{id:p.id,name:p.toolName,reason:p.reason,args:{...p.sanitizedArguments},eventId:`snapshot:${p.id}`}:null,processing:r.runtime.processing,statusMessage:r.runtime.status,mode:r.composer.mode??{baseMode:d,pendingBaseMode:null},queue:{items:r.composer.queue.items.map(g=>({...g})),limit:r.composer.queue.limit},goal:f,plan:r.plan??null,composer:r.composer,sessionSnapshot:r,diagnostics:{...n.diagnostics??{},activeSessionId:r.session.id,processing:r.runtime.processing,agentMode:d,permissionMode:r.runtime.permissionMode,contextUsage:r.runtime.contextUsage,tokenUsage:r.runtime.tokenUsage,plan:r.plan?.body??null,recoveryDiagnostics:r.recoveryDiagnostics},announcement:"会话快照已同步"}}function Mf(n,r){const o=n.workspaceId?{...n.workspaceSessions,[n.workspaceId]:{status:"ready",items:tr(n.workspaceSessions[n.workspaceId]?.items??n.sessions,r.session),nextCursor:n.workspaceSessions[n.workspaceId]?.nextCursor??n.sessionNextCursor}}:n.workspaceSessions;return{...n,sessionProjectionById:nl(n.sessionProjectionById,r),sessionRuntimeById:rl(n.sessionRuntimeById,r.sessionRuntime),sessions:tr(n.sessions,r.session),workspaceSessions:o}}function Pp(n,r){const o=n.sessionProjectionById[r.sessionId],a=o?nl(n.sessionProjectionById,{...o,sessionRuntime:r.sessionRuntime,composer:r}):n.sessionProjectionById;return{...n,composer:r,sessionSnapshot:n.sessionSnapshot?.session.id===r.sessionId?{...n.sessionSnapshot,sessionRuntime:r.sessionRuntime,composer:r}:n.sessionSnapshot,sessionProjectionById:a,sessionRuntimeById:rl(n.sessionRuntimeById,r.sessionRuntime),processing:r.processing,mode:r.mode,queue:{items:r.queue.items.map(d=>({...d})),limit:r.queue.limit},diagnostics:{...n.diagnostics??{},contextUsage:r.contextUsage,agentMode:r.mode.baseMode}}}function Tx(n,r){const o=tr(n.sessions,r.session),a=n.workspaceSessions[n.workspaceId],d=!n.composer||n.composer.controlRevision===r.composer.controlRevision?r.composer:n.composer;return{...n,sessions:o,workspaceSessions:{...n.workspaceSessions,[n.workspaceId]:{status:"ready",items:tr(a?.items??n.sessions,r.session),nextCursor:a?.nextCursor??n.sessionNextCursor}},goal:Tp(r.goal),plan:r.plan,composer:d,sessionSnapshot:n.sessionSnapshot?.session.id===r.session.id?{...n.sessionSnapshot,session:r.session,goal:r.goal,plan:r.plan,composer:d,recoveryDiagnostics:r.recoveryDiagnostics}:n.sessionSnapshot,diagnostics:{...n.diagnostics??{},plan:r.plan?.body??null,recoveryDiagnostics:r.recoveryDiagnostics}}}function Rp(n){return n.transcript.items.map((r,o)=>{const a=Number.parseInt(r.id.split(":").at(-1)??"",10);return{id:r.id,role:r.role,content:r.content,eventId:`snapshot:${r.id}`,order:-1e9+(Number.isSafeInteger(a)?a:o),receivedAt:Ax(r.timestamp),live:!1}})}function Tp(n){if(!n||!ni(n.state))return null;const r=n.state;if(typeof r.goalId!="string"||typeof r.objective!="string"||typeof r.status!="string")return null;const o=ni(r.budget)?r.budget:null,a=ni(r.lastStopDecision)?r.lastStopDecision:null,d=a&&ni(a.reason)?Mo(a.reason.message):Mo(r.stopReason),p=ni(r.criteria)?{passed:nn(r.criteria.passed),total:nn(r.criteria.total),failed:nn(r.criteria.failed),stale:nn(r.criteria.stale)}:void 0;return{goalId:r.goalId,revision:nn(r.revision,nn(r.generation,1)),objective:r.objective,status:r.status,tokenBudget:Qa(r.tokenBudget)??Qa(o?.maxTokens),tokensUsed:nn(r.tokensUsed),timeUsedMs:nn(r.timeUsedMs,nn(r.elapsedMs)),continuationCount:nn(r.continuationCount),updatedAt:nn(r.updatedAt),stopReason:d,criteria:p,planRevision:Qa(r.planRevision),planPhase:Mo(r.planPhase),nextAction:Mo(r.nextAction),auditRemaining:Array.isArray(r.auditRemaining)?r.auditRemaining.filter(f=>typeof f=="string"):void 0}}function er(n,r,o){const a=new Map(n.map(d=>[o(d),d]));for(const d of r)a.set(o(d),d);return[...a.values()]}function Ox(n,r){const o=n.findIndex(d=>d.id===r.id);if(o<0)return[r,...n];const a=[...n];return a[o]=r,a}function Lf(n,r){const o=n.workspaceId,a=o?n.workspaceSessions[o]:void 0,d=(a?.items??n.sessions).filter(p=>p.id!==r);return{...n,sessions:o?d:n.sessions,workspaceSessions:o?{...n.workspaceSessions,[o]:{status:(a?.status??"ready")==="error"?"error":"ready",items:d,nextCursor:a?.nextCursor??null,error:a?.error}}:n.workspaceSessions}}function Af(n,r){const o=n.workspaceId,a=o?n.workspaceSessions[o]:void 0,d=a?.items??n.sessions,p=r(d),f=a?.status==="error"?"error":a?.status==="loading"?"loading":"ready";return{...n,sessions:o?p:n.sessions,workspaceSessions:o?{...n.workspaceSessions,[o]:{status:f,items:p,nextCursor:a?.nextCursor??null,error:a?.error}}:n.workspaceSessions}}function Mx(n,r,o){switch(r.type){case"goal_updated":case"goal_restored":return{...n,goal:r.goal,goalActivity:os(n.goalActivity,r.type,"Goal 状态已更新",o)};case"goal_completed":return{...n,goal:r.goal,goalActivity:os(n.goalActivity,r.type,r.audit.verificationSummary,o),announcement:"Goal 已完成并通过运行时审计"};case"goal_cleared":return{...n,goal:null,goalEvidence:[],goalActivity:os(n.goalActivity,r.type,r.reason,o)};case"goal_plan_updated":return{...n,goal:n.goal?{...n.goal,planRevision:r.planRevision,planPhase:r.phase,nextAction:r.nextAction}:n.goal,goalActivity:os(n.goalActivity,r.type,r.nextAction??`Plan phase: ${r.phase}`,o)};case"goal_evidence_recorded":{const a=r.evidence;return{...n,goalEvidence:[...n.goalEvidence.filter(d=>d.id!==a.id),a].slice(-256)}}case"goal_continuation":return{...n,goalActivity:os(n.goalActivity,`${r.type}:${r.phase}`,r.reason,o)};case"goal_audit_failed":return{...n,goalActivity:os(n.goalActivity,r.type,r.summary,o),notice:{id:Date.parse(o),tone:"warning",title:"Goal 审计尚未通过",detail:r.summary}}}}function Lx(n,r,o,a,d){const f=n.find(w=>w.packetId===r.packetId)??{packetId:r.packetId,eventId:o,order:a,updatedAt:d,stage:"running",sources:[],conflicts:[]};let g;switch(r.type){case"research_started":g={...f,eventId:o,order:a,updatedAt:d,objective:r.objective,mode:r.mode,stage:"running"};break;case"research_source":{const w={id:r.sourceId,provider:r.provider,status:r.status,title:r.title,location:r.displayUrl??r.canonicalUrl??r.projectPath,failureReason:r.failureReason};g={...f,eventId:o,order:a,updatedAt:d,sources:[...f.sources.filter(x=>x.id!==w.id),w].slice(-64)};break}case"research_conflict":g={...f,eventId:o,order:a,updatedAt:d,conflicts:[...f.conflicts.filter(w=>w!==r.claimId),r.claimId].slice(-64)};break;case"research_completed":g={...f,eventId:o,order:a,updatedAt:d,stage:r.stage,auditStatus:r.auditStatus,conclusion:r.conclusion,summary:r.summary};break}return[...n.filter(w=>w.packetId!==r.packetId),g].slice(-128)}function ac(n,r){return[...n.filter(o=>o.callId!==r.callId),r].sort((o,a)=>o.order-a.order).slice(-1e3)}function nl(n,r){const o=Object.entries(n).filter(([d])=>d!==r.session.id);o.push([r.session.id,r]);let a=o.reduce((d,[,p])=>d+$f(p),0);for(;o.length>1&&(o.length>Nx||a>Ep);){const d=o.shift();d&&(a-=$f(d[1]))}return Object.freeze(Object.fromEntries(o))}function rl(n,r){const o=Object.entries(n).filter(([a])=>a!==r.sessionId);return o.push([r.sessionId,r]),Object.freeze(Object.fromEntries(o.slice(-64)))}function $f(n){try{return JSON.stringify(n).length*2}catch{return Ep}}function ai(n){return{...n,transcript:[],tools:[],edits:[],subtasks:[],research:[],permission:null,processing:!1,statusMessage:"",queue:{items:[],limit:16},goal:null,goalEvidence:[],goalActivity:[],sessionSnapshot:null,composer:null,modelCatalog:null,plan:null,loopStats:null,traces:[]}}function si(n,r,o){const a={...n.sessionSync};delete a[r],a[r]=o;const d=Object.keys(a).length-Ix;return d>0&&Object.keys(a).filter(p=>p!==n.activeSessionId&&p!==r).slice(0,d).forEach(p=>delete a[p]),{...n,sessionSync:a}}function Oo(n,r){const o={sessionSwitches:n.clientTelemetry.sessionSwitches+(r.sessionSwitches??0),snapshotCacheHits:n.clientTelemetry.snapshotCacheHits+(r.snapshotCacheHits??0),snapshotLoads:n.clientTelemetry.snapshotLoads+(r.snapshotLoads??0),snapshotFailures:n.clientTelemetry.snapshotFailures+(r.snapshotFailures??0)};return{...n,clientTelemetry:o}}function Df(n,r){const o=si(n,r,{status:"ready",requestId:n.sessionSync[r]?.requestId??null});return o.notice?.domain!=="session-snapshot"||o.notice.sessionId!==r?o:{...o,notice:null}}function zf(n,r,o){return o===void 0||n.sessionSync[r]?.requestId===o}function Wf(n,r,o){return(r===void 0||n.contextRevision===r)&&(o===void 0||n.workspaceId===o)}function os(n,r,o,a){return Wo(n,{type:r,message:o,timestamp:a},bx)}function Wo(n,r,o){const a=[...n,r];return a.length<=o?a:a.slice(a.length-o)}function Ff(n,r){const o=n.agentMode;return Op(o)?{baseMode:o,pendingBaseMode:null}:r}function Op(n){return n==="interactive"||n==="plan"||n==="auto"}function Ax(n){const r=new Date(n);return Number.isFinite(r.getTime())?r.toISOString():new Date(0).toISOString()}function ni(n){return!!n&&typeof n=="object"&&!Array.isArray(n)}function nn(n,r=0){return typeof n=="number"&&Number.isFinite(n)?n:r}function Qa(n){return typeof n=="number"&&Number.isFinite(n)?n:void 0}function Mo(n){return typeof n=="string"&&n?n:void 0}function $x(){return typeof navigator>"u"||navigator.onLine}function Dx(n,r){return n==="live"?"本地 Web Host 事件流已连接":n==="offline"?"浏览器已离线,本地 Web Host 将在网络恢复后重连":n==="reconnecting"?`正在重新连接本地 Web Host,第 ${Math.max(1,r)} 次尝试`:n==="connecting"?"正在连接本地 Web Host":n==="replay-required"?"本地 Web Host 事件历史需要重新载入":"本地 Web Host 已关闭"}const Bf="orion.web.theme",qf="orion.web.motion";function zx(n){const r=Hf(Bf),o=Hf(qf),a=Wx(r),d=Fx(o),p=[],f=[];return r!==null&&f.push(Bf),o!==null&&f.push(qf),n.sections.appearance.theme.explicitValue===void 0&&a&&p.push({op:"set",key:"appearance.theme",value:a}),n.sections.appearance.motion.explicitValue===void 0&&d&&p.push({op:"set",key:"appearance.motion",value:d}),{operations:p,keysToClear:f}}function Uf(n){if(!(typeof window>"u"))for(const r of n)try{window.localStorage.removeItem(r)}catch{}}function Hf(n){if(typeof window>"u")return null;try{return window.localStorage.getItem(n)}catch{return null}}function Wx(n){return n==="system"||n==="light"||n==="dark"?n:null}function Fx(n){return n==="system"||n==="reduced"?n:null}class Bx{constructor(r){Ht(this,"read");Ht(this,"snapshot",Object.freeze({status:"idle",document:null,lastGood:null,stale:!1,error:null,generation:0}));Ht(this,"listeners",new Set);Ht(this,"inFlight",null);Ht(this,"rerun",!1);Ht(this,"generation",0);Ht(this,"disposed",!1);this.read=r}getSnapshot(){return this.snapshot}subscribe(r){return this.listeners.add(r),()=>this.listeners.delete(r)}ensure(){return this.snapshot.document||this.inFlight?this.inFlight??Promise.resolve(this.snapshot):this.refresh()}refresh(){if(this.disposed)return Promise.resolve(this.snapshot);if(this.inFlight)return this.rerun=!0,this.inFlight;const r=Promise.resolve().then(()=>this.run());return this.inFlight=r,r}accept(r){return this.disposed?this.snapshot:(this.generation+=1,this.inFlight&&(this.rerun=!0),this.publishDocument(r))}invalidate(r,o){return this.snapshot.document?.revision===r&&(o==="ready"?this.snapshot.document.state==="ready":this.snapshot.document.state==="invalid")?Promise.resolve(this.snapshot):(this.setSnapshot({...this.snapshot,stale:!0}),this.refresh())}reset(){this.disposed||(this.generation+=1,this.rerun=!1,this.setSnapshot({status:"idle",document:null,lastGood:null,stale:!1,error:null,generation:this.generation}))}dispose(){this.disposed=!0,this.generation+=1,this.listeners.clear()}async run(){try{do{this.rerun=!1;const r=++this.generation;this.setSnapshot({...this.snapshot,status:this.snapshot.document?"ready":"loading",error:null,generation:r});try{const o=await this.read();if(this.disposed)return this.snapshot;if(r!==this.generation)continue;this.publishDocument(o)}catch(o){if(this.disposed)return this.snapshot;if(r!==this.generation)continue;this.setSnapshot({...this.snapshot,status:this.snapshot.document?"ready":"unavailable",stale:!0,error:o instanceof Error?o.message:"设置读取失败。",generation:r})}}while(this.rerun&&!this.disposed);return this.snapshot}finally{if(this.inFlight=null,this.rerun&&!this.disposed)return this.refresh()}}publishDocument(r){const o=r.state==="ready"?r:this.snapshot.lastGood;return this.setSnapshot({status:"ready",document:r,lastGood:o,stale:!1,error:null,generation:this.generation}),this.snapshot}setSnapshot(r){this.snapshot=Object.freeze(r);for(const o of this.listeners)o()}}function qx(n,r,o){if(n)return n;const a=new Set(r.map(d=>d.id));return o&&a.has(o)?o:r[0]?.id??null}const Ux=7,Hx=2;function Vx(){const n=m.useMemo(()=>new wg,[]),r=m.useMemo(()=>new Bx(()=>n.settings()),[n]),[o,a]=m.useReducer(_x,Yf),[d,p]=m.useState(0),f=m.useRef(o),g=m.useRef(null),w=m.useRef(0),x=m.useRef(0),E=m.useRef(new Map),C=m.useRef(0),R=m.useRef(0),_=m.useRef(new Map),A=m.useRef(()=>{}),L=m.useRef(!1);f.current=o,m.useEffect(()=>r.subscribe(()=>{a({type:"settings_mirror_changed",snapshot:r.getSnapshot()})}),[r]);const W=m.useCallback((k,N=ye(f.current),M={})=>{const Z=`${N.workspaceId}:${N.expectedContextRevision}:${k}`,ve=_.current.get(Z);if(ve&&!M.force)return ve.promise;const Ae=++R.current;a({type:"session_snapshot_started",sessionId:k,requestId:Ae,cached:!!f.current.sessionProjectionById[k],contextRevision:N.expectedContextRevision,workspaceId:N.workspaceId});const Ze=n.sessionSnapshot(k,N).then(et=>(Vf(et,k,N),a({type:"session_snapshot_loaded",snapshot:et,requestId:Ae,contextRevision:N.expectedContextRevision,workspaceId:N.workspaceId,advanceEventCursor:g.current===null}),et)).catch(et=>{const cn=as(et);throw a({type:"snapshot_failed",sessionId:k,detail:cn,requestId:Ae,contextRevision:N.expectedContextRevision,workspaceId:N.workspaceId}),new Ee(cn,et instanceof Ee?et.status:503,"session_snapshot_sync_failed",et instanceof Ee?et.type:void 0)}).finally(()=>{_.current.get(Z)?.requestId===Ae&&_.current.delete(Z)});return _.current.set(Z,{requestId:Ae,promise:Ze}),Ze},[n]),ie=m.useCallback(async k=>{const N=++x.current;try{const M=await n.bootstrap(),Z={expectedContextRevision:M.contextRevision,workspaceId:M.workspaceId};r.reset(),r.accept(M.settings);const Ae=k!==void 0&&k.activeId!==""&&k.activeId===M.workspaceId?k:void 0,Ze=Ae?Promise.resolve(Ae):n.listWorkspaces(Z),[et,cn,cr]=await Promise.all([Ze,n.listSessions(Z),r.refresh()]),tt=Gx(M.workspaceId,cn.sessions,M.activeSessionId);ri(M.workspaceId,tt);const il=Object.freeze({...M,activeSessionId:tt}),Pt=await Kx(n,r,cr.document??cr.lastGood??M.settings,Z);if(N!==x.current)return;a({type:"baseline_loaded",bootstrap:il,workspaces:et,sessions:cn.sessions,sessionNextCursor:cn.nextCursor,diagnostics:{},settings:Pt,skills:[],skillNextCursor:null,mcpServers:[],mcpNextCursor:null,toolDetails:[],toolDetailNextCursor:null}),tt&&n.sessionSnapshot(tt,Z).then(at=>{N===x.current&&(Vf(at,tt,Z),a({type:"session_snapshot_loaded",snapshot:at,contextRevision:Z.expectedContextRevision,workspaceId:Z.workspaceId}))}).catch(at=>{N===x.current&&a({type:"snapshot_failed",sessionId:tt,detail:as(at),contextRevision:Z.expectedContextRevision,workspaceId:Z.workspaceId})}),A.current();const ol=cn.sessions.map(at=>at.id).filter(at=>at!==tt).slice(0,Ux);A.current=tw(()=>{N===x.current&&nw(ol,Hx,async at=>{N===x.current&&await W(at,Z).catch(()=>{})})}),n.workspaceProjectSummary(M.workspaceId,Z).then(at=>{N===x.current&&a({type:"workspace_project_summary_loaded",summary:at})}).catch(()=>{}),Promise.all([n.diagnostics(Z).catch(()=>({})),n.skills(Z).catch(()=>({skills:[],nextCursor:null})),n.mcp(Z).catch(()=>({servers:[],nextCursor:null})),n.toolDetails(Z).catch(()=>({details:[],nextCursor:null}))]).then(([at,Si,ur,dr])=>{N===x.current&&(a({type:"diagnostics_loaded",diagnostics:at}),a({type:"capabilities_loaded",skills:Si.skills,skillNextCursor:Si.nextCursor,mcpServers:ur.servers,mcpNextCursor:ur.nextCursor}),a({type:"tool_details_loaded",details:dr.details,nextCursor:dr.nextCursor}))})}catch(M){throw M}},[n,W,r]),B=m.useCallback(async k=>{let N;for(let M=0;M<3;M+=1)try{await ie(k);return}catch(Z){if(N=Z,!Zx(Z)||M===2)break;await ew(100*3**M)}throw a({type:"boot_failed",message:as(N)}),N},[ie]);m.useEffect(()=>{if(L.current)return;L.current=!0;let k=!0;return B().catch(()=>{}),()=>{k=!1}},[B]),m.useEffect(()=>()=>{A.current()},[]);const Se=o.bootstrap!==null;m.useEffect(()=>{if(!Se)return;const k=n.connectEvents({cursor:f.current.lastCursor,onEvent:N=>{if(a({type:"event_received",envelope:N}),rw(N)){const M=f.current;if(N.sessionId&&M.contextRevision&&M.workspaceId){const Z=N.sessionId,ve=++C.current;E.current.set(Z,ve);const Ae=M.contextRevision,Ze=M.workspaceId;n.sessionSnapshot(Z,{expectedContextRevision:Ae,workspaceId:Ze}).then(et=>{E.current.get(Z)===ve&&a({type:"durable_session_metadata_loaded",snapshot:et,contextRevision:Ae,workspaceId:Ze})}).catch(()=>{}).finally(()=>{E.current.get(Z)===ve&&E.current.delete(Z)})}}N.type==="settings_invalidated"&&r.invalidate(N.payload.revision,N.payload.state)},onStatus:(N,M)=>a({type:"connection_changed",phase:N,attempt:M}),onProtocolError:N=>a({type:"notice",notice:{id:Date.now(),tone:"error",title:"收到无法识别的 Web Host 事件流消息",detail:N}})});return g.current=k,()=>{k.close(),g.current===k&&(g.current=null)}},[n,Se,r,d]);const re=m.useCallback(()=>{g.current?.close(),g.current=null},[]),ne=m.useCallback(()=>{p(k=>k+1)},[]);m.useEffect(()=>{!o.workspace||o.boot!=="ready"||o.pendingAction||o.bootstrap?.workspace!==o.workspace&&(re(),B().catch(k=>Gf(a,"工作区刷新失败",k)).finally(ne))},[B,re,ne,o.boot,o.bootstrap?.workspace,o.pendingAction,o.workspace]),m.useEffect(()=>{o.boot==="ready"&&(o.pendingAction||!o.activeSessionId||o.bootstrap?.workspace===o.workspace&&o.sessionSnapshot?.session.id!==o.activeSessionId&&W(o.activeSessionId).catch(()=>{}))},[W,o.activeSessionId,o.boot,o.bootstrap?.workspace,o.pendingAction,o.sessionSnapshot,o.workspace]);const b=m.useCallback(async(k,N)=>{const M=++w.current;a({type:"pending_action",label:k});try{return await N()}catch(Z){throw Jx(Z)||Gf(a,`${k}失败`,Z),Z}finally{w.current===M&&a({type:"pending_action",label:null})}},[]),D=m.useCallback(async(k,N)=>b(k,async()=>{if(f.current.connection!=="live")throw new Ee("本地 Web Host 连接尚未就绪,请在连接恢复后重试。",409,"session_not_synchronized");const M=f.current.activeSessionId;if(!M)throw new Ee("当前没有可接收命令的活动会话。",409,"active_session_changed");const Z=f.current.sessionSnapshot;if(!Z||!Pr(f.current))throw new Ee("当前会话快照尚未同步,请刷新后重试。",409,"session_runtime_revision_conflict");try{const ve=await n.command({...N,workspaceId:f.current.workspaceId,expectedContextRevision:f.current.contextRevision,expectedSessionId:M,expectedSessionRuntimeRevision:Z.sessionRuntime.runtimeRevision});return Yx(ve),ve}catch(ve){throw ve instanceof Ee&&["context_revision_conflict","active_session_changed","session_runtime_revision_conflict"].includes(ve.code??"")?(a({type:"snapshot_failed",sessionId:M,detail:ve.message,contextRevision:f.current.contextRevision,workspaceId:f.current.workspaceId}),new Ee(ve.message,ve.status,"session_runtime_revision_conflict",ve.type)):ve}}),[n,b]),ee=m.useCallback(async(k,N)=>b(k,async()=>{const M=f.current,Z=M.composer;if(M.connection!=="live"||!M.activeSessionId||!Pr(M)||!Z||Z.sessionId!==M.activeSessionId)throw new Ee("Composer 控制状态尚未与活动会话同步。",409,"composer_control_conflict");try{const ve=await n.composerAction(M.activeSessionId,{...N,workspaceId:M.workspaceId,expectedContextRevision:M.contextRevision,expectedSessionId:M.activeSessionId,expectedSessionRuntimeRevision:Z.sessionRuntime.runtimeRevision,expectedControlRevision:Z.controlRevision});return a({type:"composer_loaded",composer:ve.state}),ve}catch(ve){throw ve instanceof Ee&&["composer_control_conflict","context_revision_conflict","active_session_changed","session_runtime_revision_conflict"].includes(ve.code??"")?(a({type:"snapshot_failed",sessionId:M.activeSessionId,detail:ve.message,contextRevision:M.contextRevision,workspaceId:M.workspaceId}),new Ee(ve.message,ve.status,"composer_control_conflict",ve.type)):ve}}),[n,b]),X=m.useCallback(()=>b("重新连接",B),[B,b]),oe=m.useCallback(()=>b("刷新诊断",async()=>{const k=++x.current,N=await n.diagnostics(ye(f.current));k===x.current&&a({type:"diagnostics_loaded",diagnostics:N})}),[n,b]),Q=m.useCallback(()=>b("刷新工具详情",async()=>{const k=++x.current,N=await n.toolDetails(ye(f.current));k===x.current&&a({type:"tool_details_loaded",details:N.details,nextCursor:N.nextCursor})}),[n,b]),xe=m.useCallback(()=>b("加载更多工作区",async()=>{const k=ye(f.current),N=f.current.workspaceNextCursor;if(N)try{const M=await n.listWorkspaces(k,N);a({type:"workspaces_loaded",value:M,append:!0})}catch(M){if(!Lo(M))throw M;a({type:"workspaces_loaded",value:await n.listWorkspaces(k)})}}),[n,b]),se=m.useCallback(()=>b("加载更多会话",async()=>{const k=f.current.sessionNextCursor;if(!k)return;const N=ye(f.current);try{const M=await n.listSessions(N,k);a({type:"sessions_loaded",sessions:M.sessions,nextCursor:M.nextCursor,append:!0})}catch(M){if(!Lo(M))throw M;const Z=await n.listSessions(N);a({type:"sessions_loaded",sessions:Z.sessions,nextCursor:Z.nextCursor})}}),[n,b]),Ie=m.useCallback(async(k,N=!1)=>{const M=ye(f.current),Z=f.current.workspaceSessions[k],ve=N?Z?.nextCursor:void 0;if(N&&!ve)return;a({type:"workspace_sessions_loading",workspaceId:k});const Ae=n.workspaceProjectSummary(k,M).catch(()=>null);try{const Ze=await n.listWorkspaceSessions(k,M,ve??void 0);a({type:"workspace_sessions_loaded",workspaceId:k,sessions:Ze.sessions,nextCursor:Ze.nextCursor,append:N});const et=await Ae;et&&a({type:"workspace_project_summary_loaded",summary:et})}catch(Ze){throw a({type:"workspace_sessions_failed",workspaceId:k,detail:as(Ze)}),Ze}},[n]),$=m.useCallback(async k=>{const N=await n.workspaceProjectSummary(k,ye(f.current));a({type:"workspace_project_summary_loaded",summary:N})},[n]),pe=m.useCallback(()=>b("加载更多能力",async()=>{const k=ye(f.current),N=f.current.skillNextCursor,M=f.current.mcpNextCursor;if(!(!N&&!M))try{const[Z,ve]=await Promise.all([N?n.skills(k,N):Promise.resolve({skills:[],nextCursor:null}),M?n.mcp(k,M):Promise.resolve({servers:[],nextCursor:null})]);a({type:"capabilities_loaded",skills:Z.skills,skillNextCursor:Z.nextCursor,mcpServers:ve.servers,mcpNextCursor:ve.nextCursor,append:!0})}catch(Z){if(!Lo(Z))throw Z;const[ve,Ae]=await Promise.all([n.skills(k),n.mcp(k)]);a({type:"capabilities_loaded",skills:ve.skills,skillNextCursor:ve.nextCursor,mcpServers:Ae.servers,mcpNextCursor:Ae.nextCursor})}}),[n,b]),V=m.useCallback(()=>b("加载更多工具详情",async()=>{const k=ye(f.current),N=f.current.toolDetailNextCursor;if(N)try{const M=await n.toolDetails(k,N);a({type:"tool_details_loaded",details:M.details,nextCursor:M.nextCursor,append:!0})}catch(M){if(!Lo(M))throw M;const Z=await n.toolDetails(k);a({type:"tool_details_loaded",details:Z.details,nextCursor:Z.nextCursor})}}),[n,b]),z=m.useCallback(async()=>{const k=f.current;if(k.connection!=="replay-required"){if(!k.activeSessionId)return;await W(k.activeSessionId,ye(k),{force:!0});return}await b("恢复本地 Web Host 事件流",async()=>{re(),a({type:"recovering"});try{await B()}finally{ne()}})},[B,W,re,ne,b]),te=m.useCallback(k=>b("切换工作区",async()=>{re();try{const N=await n.activateWorkspace(k,ye(f.current));a({type:"workspaces_loaded",value:N}),a({type:"reset_session_view",activeSessionId:null}),await B(N)}finally{ne()}}),[n,B,re,ne,b]),q=m.useCallback(()=>n.pickDirectory({}),[n]),v=m.useCallback(k=>n.inspectWorkspace(k,"picker"),[n]),O=m.useCallback(k=>{const N=f.current;if(N.activeSessionId===k&&N.sessionSnapshot&&N.sessionSync[k]?.status==="ready")return Promise.resolve();const M=ye(N);return(async()=>{ri(M.workspaceId,k),a({type:"reset_session_view",activeSessionId:k}),await W(k,M)})()},[W]),ue=m.useCallback((k,N)=>k===f.current.workspaceId&&N?O(N):b("切换项目上下文",async()=>{const M=f.current,Z=M.contextRevision;if(!Z)throw new Ee("工作区上下文尚未完成同步。",409,"context_revision_conflict");if(k===M.workspaceId){ri(k,N),a({type:"reset_session_view",activeSessionId:N}),N&&await W(N,ye(M));return}ri(k,N),re(),++x.current;try{const ve=await n.activateContext({expectedContextRevision:Z,workspaceId:k,sessionId:N});if(ve.contextRevision!==ve.bootstrap.contextRevision||ve.bootstrap.workspaceId!==k)throw new Ee("Host 返回的项目上下文不一致。",502,"context_response_invalid");a({type:"reset_session_view",activeSessionId:N}),await B()}catch(ve){throw ve instanceof Ee&&(ve.code==="context_revision_conflict"||ve.code==="active_session_changed")&&a({type:"snapshot_failed",sessionId:null,detail:ve.message}),ve}finally{ne()}}),[n,B,W,re,ne,b,O]),he=m.useCallback((k,N)=>b(N?"置顶项目":"取消置顶",async()=>{await n.setWorkspacePinned(k,N,ye(f.current)),a({type:"workspaces_loaded",value:await n.listWorkspaces(ye(f.current))})}),[n,b]),we=m.useCallback(k=>b("移除项目",async()=>{const N=f.current;if(!N.contextRevision)throw new Ee("工作区上下文尚未完成同步。",409,"context_revision_conflict");await n.removeWorkspace(k,ye(N)),Um(k),a({type:"workspaces_loaded",value:await n.listWorkspaces(ye(f.current))})}),[n,b]),J=m.useCallback(()=>b("创建会话",async()=>{const k=ye(f.current),N=await n.createSession(k);ri(k.workspaceId,N.id),a({type:"sessions_loaded",sessions:tr(f.current.sessions,N),nextCursor:f.current.sessionNextCursor}),a({type:"reset_session_view",activeSessionId:N.id}),await W(N.id,k)}),[n,W,b]),me=O,Ce=m.useCallback(()=>b("加载更早记录",async()=>{const k=f.current.sessionSnapshot,N=f.current.activeSessionId,M=k?.transcript.nextCursor;if(!(!k||!N||!M))try{const Z=await n.sessionSnapshot(N,ye(f.current),M);if(Z.session.id!==k.session.id||Z.threadId!==k.threadId||Z.threadCursor!==k.threadCursor||Z.projectionDigest!==k.projectionDigest)throw new Ee("加载历史记录时会话快照发生变化,正在恢复最新快照。",409,"transcript_cursor_stale");a({type:"older_transcript_loaded",snapshot:Z})}catch(Z){if(!(Z instanceof Ee)||Z.code!=="transcript_cursor_stale")throw Z;re(),a({type:"recovering"});try{await W(N,ye(f.current),{force:!0})}finally{ne()}}}),[n,W,re,ne,b]),ae=m.useCallback((k,N)=>b("重命名会话",async()=>{const M=await n.renameSession(k,N,ye(f.current)),Z=tr(f.current.sessions,M);a({type:"sessions_loaded",sessions:Z,nextCursor:f.current.sessionNextCursor})}),[n,b]),Oe=m.useCallback((k,N)=>b("更新会话标签",async()=>{const M=await n.updateSessionTags(k,N,ye(f.current));a({type:"session_updated",session:M})}),[n,b]),Qe=m.useCallback(k=>b("归档会话",async()=>{const N=await n.archiveSession(k,ye(f.current));a({type:"session_archived",session:N})}),[n,b]),Je=m.useCallback(k=>b("还原会话",async()=>{const N=await n.restoreSession(k,ye(f.current));a({type:"session_restored",session:N})}),[n,b]),It=m.useCallback(k=>b("删除会话",async()=>{await n.deleteSession(k,ye(f.current)),a({type:"session_deleted",sessionId:k})}),[n,b]),lt=m.useCallback(async(k,N=!1)=>{const M=ye(f.current),Z=f.current.archivedSessions,ve=N?Z?.nextCursor:void 0;if(!(N&&!ve)){a({type:"archived_sessions_loading",workspaceId:k});try{const Ae=await n.listArchivedWorkspaceSessions(k,M,ve??void 0);a({type:"archived_sessions_loaded",workspaceId:k,sessions:Ae.sessions,nextCursor:Ae.nextCursor,append:N})}catch(Ae){throw a({type:"archived_sessions_failed",workspaceId:k,detail:as(Ae)}),Ae}}},[n]),Lt=m.useCallback((k,N)=>D("提交任务",{type:"submit",text:k,contextReferences:N}),[D]),gt=m.useCallback((k,N)=>D("加入队列",{type:"queue_followup",text:k,contextReferences:N}),[D]),_t=m.useCallback(async(k,N)=>{await ee("移除排队消息",{type:"remove_queue_item",itemId:k,expectedItemRevision:N})},[ee]),Et=m.useCallback(async(k,N,M)=>{await ee("编辑排队消息",{type:"edit_queue_item",itemId:k,expectedItemRevision:N,text:M})},[ee]),vt=m.useCallback(async(k,N,M)=>{await ee("移动排队消息",{type:"move_queue_item",itemId:k,expectedItemRevision:N,targetIndex:M})},[ee]),At=m.useCallback(async()=>{await D("清空队列",{type:"clear_followups"})},[D]),$t=m.useCallback(async()=>{const k=f.current.sessionSnapshot?.sessionRuntime;if(!k||k.phase!=="queued"||!k.queueId)throw new Ee("排队任务已变化,请等待状态同步后重试。",409,"session_queue_conflict");await D("取消排队任务",{type:"cancel_queued_turn",queueId:k.queueId})},[D]),Rn=m.useCallback(async()=>{await D("中断任务",{type:"interrupt"})},[D]),nr=m.useCallback(async k=>{f.current.mode.baseMode===k&&!f.current.mode.pendingBaseMode||await ee("切换模式",{type:"set_agent_mode",mode:k})},[ee]),rr=m.useCallback(async k=>{await ee(k===null?"继承项目权限":"切换会话权限",k===null?{type:"clear_permission_override"}:{type:"set_permission_override",value:k})},[ee]),pt=m.useCallback(()=>b("加载模型目录",async()=>{const k=f.current;if(!k.activeSessionId)return;const N=await n.modelCatalog(k.activeSessionId,ye(k));a({type:"model_catalog_loaded",catalog:N})}),[n,b]),sr=m.useCallback(async(k,N)=>{await ee("切换会话模型",{type:"select_model",modelId:k,...N?{effort:N}:{}})},[ee]),Tn=m.useCallback(async()=>{await ee("压缩上下文",{type:"compact_context"})},[ee]),Dt=m.useCallback(async(k,N,M)=>{await ee("审核计划",{type:"review_plan",planDigest:k,action:N,...M?{feedback:M}:{}})},[ee]),On=m.useCallback(async(k,N="once")=>{const M=f.current.permission;M&&(await D(k?"确认工具权限":"拒绝工具权限",{type:"permission_decision",requestPermissionId:M.id,approved:k,scope:N}),a({type:"approval_resolved",requestId:M.id,approved:k}))},[D]),on=m.useCallback(async(k,N)=>{await D("更新 Goal",{type:"goal_control",goalAction:k,objective:N});const M=++x.current;re();try{const Z=f.current.activeSessionId,ve=ye(f.current),[Ae]=await Promise.all([n.diagnostics(ve),Z?W(Z,ve,{force:!0}):Promise.resolve()]);if(M!==x.current)return;a({type:"diagnostics_loaded",diagnostics:Ae})}finally{ne()}},[n,W,re,ne,D]),K=m.useCallback(async()=>{const k=await r.refresh(),N=k.document??k.lastGood;if(!N)throw new Ee(k.error??"设置尚不可用。",503);return N},[r]),be=m.useCallback(async(k,N,M)=>{if(N.length<1||N.length>20)throw new Ee("设置变更必须包含 1 到 20 个字段。",400,"settings_invalid_operation");const Z=await n.updateSettings(k,N,ye(f.current),M);return r.accept(Z.settings),Z},[n,r]),_e=m.useCallback(async()=>{await n.openSettingsDocument()},[n]),ze=m.useCallback((k,N=0)=>n.readToolDetail(k,ye(f.current),N),[n]),Gt=m.useCallback((k,N)=>n.listFiles(ye(f.current),k,N),[n]),ln=m.useCallback((k,N)=>n.readFileContent(k,ye(f.current),N),[n]),mn=m.useCallback((k,N,M)=>n.writeFileContent(ye(f.current),k,N,M),[n]),Qt=m.useCallback((k,N)=>n.gitStatus(ye(f.current),k,N),[n]),Tr=m.useCallback(k=>n.gitLog(ye(f.current),k),[n]),Or=m.useCallback((k,N)=>n.gitDiff(k,ye(f.current),N),[n]),gn=m.useCallback((k,N,M,Z)=>n.gitDiffDocument(k,ye(f.current),N,M,Z),[n]),Mn=m.useCallback(()=>n.gitRefs(ye(f.current)),[n]),fi=m.useCallback(k=>n.gitCompare(ye(f.current),k),[n]),pi=m.useCallback(k=>n.gitCompareFileDiff(ye(f.current),k),[n]),hi=m.useCallback(k=>n.gitHistory(ye(f.current),k),[n]),mi=m.useCallback((k,N=0)=>n.gitCommitDetail(ye(f.current),k,N),[n]),gi=m.useCallback((k,N=0)=>n.gitCommitFiles(ye(f.current),k,N),[n]),hs=m.useCallback(k=>n.gitCommitDiff(ye(f.current),k),[n]),vi=m.useCallback(k=>n.gitFilesTarget(ye(f.current),k),[n]),ir=m.useCallback((k=200)=>n.gitGraph(ye(f.current),k),[n]),ms=m.useCallback(k=>n.gitConflictVersions(ye(f.current),k),[n]),or=m.useCallback(k=>n.gitBlob(ye(f.current),k),[n]),sl=m.useCallback(()=>n.gitSubmodules(ye(f.current)),[n]),lr=m.useCallback(k=>n.gitBlame(ye(f.current),k),[n]),Mr=m.useCallback(k=>n.gitFileHistory(ye(f.current),k),[n]),ar=m.useCallback(()=>n.gitCommitPreview(ye(f.current)),[n]),Lr=m.useCallback((k,N)=>n.gitStage(ye(f.current),k,N),[n]),yi=m.useCallback((k,N)=>n.gitUnstage(ye(f.current),k,N),[n]),xi=m.useCallback(k=>n.gitApplyPatch(ye(f.current),k),[n]),wi=m.useCallback(k=>n.gitCommit(ye(f.current),k),[n]),an=m.useCallback(()=>n.review(ye(f.current)),[n]),gs=m.useCallback(async()=>(await n.terminals(ye(f.current))).terminals,[n]),vs=m.useCallback(async(k,N)=>{const M=f.current;if(!M.contextRevision||!M.workspaceId)throw new Ee("工作区上下文尚未完成同步。",409,"context_revision_conflict");return n.createTerminal({expectedContextRevision:M.contextRevision,workspaceId:M.workspaceId,cols:k,rows:N})},[n]),ki=m.useCallback(async k=>{const N=f.current;if(!N.contextRevision||!N.workspaceId)throw new Ee("工作区上下文尚未完成同步。",409,"context_revision_conflict");return n.terminalAttachTicket(k,{expectedContextRevision:N.contextRevision,workspaceId:N.workspaceId})},[n]),ys=m.useCallback(async k=>{const N=f.current;if(!N.contextRevision||!N.workspaceId)throw new Ee("工作区上下文尚未完成同步。",409,"context_revision_conflict");await n.closeTerminal(k,{expectedContextRevision:N.contextRevision,workspaceId:N.workspaceId})},[n]),xs=m.useCallback(k=>n.terminalSocket(k),[n]),ws=m.useCallback(()=>a({type:"notice",notice:null}),[]),ji=m.useMemo(()=>({retryBoot:X,refreshDiagnostics:oe,refreshToolDetails:Q,loadMoreWorkspaces:xe,loadMoreSessions:se,loadWorkspaceSessions:Ie,refreshWorkspaceProjectSummary:$,loadMoreCapabilities:pe,loadMoreToolDetails:V,recoverSession:z,switchWorkspace:te,pickWorkspaceDirectory:q,inspectWorkspacePath:v,activateContext:ue,setWorkspacePinned:he,removeWorkspace:we,createSession:J,activateSession:me,loadOlderTranscript:Ce,renameSession:ae,updateSessionTags:Oe,archiveSession:Qe,restoreSession:Je,deleteSession:It,loadArchivedWorkspaceSessions:lt,submit:Lt,queue:gt,removeQueued:_t,editQueued:Et,moveQueued:vt,clearQueue:At,cancelQueuedTurn:$t,interrupt:Rn,setMode:nr,setPermissionOverride:rr,loadModelCatalog:pt,selectModel:sr,compactContext:Tn,reviewPlan:Dt,answerPermission:On,controlGoal:on,refreshSettings:K,updateSettings:be,openSettingsDocument:_e,readToolDetail:ze,listFiles:Gt,readFileContent:ln,writeFileContent:mn,gitStatus:Qt,gitLog:Tr,gitDiff:Or,gitDiffDocument:gn,gitCommitPreview:ar,gitRefs:Mn,gitCompare:fi,gitCompareFileDiff:pi,gitHistory:hi,gitCommitDetail:mi,gitCommitFiles:gi,gitCommitDiff:hs,gitFilesTarget:vi,gitGraph:ir,gitConflictVersions:ms,gitBlob:or,gitSubmodules:sl,gitBlame:lr,gitFileHistory:Mr,gitStage:Lr,gitUnstage:yi,gitApplyPatch:xi,gitCommit:wi,review:an,terminals:gs,createTerminal:vs,terminalAttachTicket:ki,closeTerminal:ys,terminalSocket:xs,dismissNotice:ws}),[me,ue,ys,vs,Or,gn,ar,Lr,yi,xi,wi,Tr,Qt,Gt,Ce,pe,se,V,xe,pt,Ie,On,At,$t,Tn,Dt,on,J,ws,Et,Rn,gt,ln,ze,an,z,oe,K,Q,$,_t,we,ae,Je,Oe,Qe,It,lt,X,nr,rr,sr,he,Lt,te,q,v,vt,ki,xs,gs,be,_e]);return{state:o,actions:ji}}async function Kx(n,r,o,a){let d=o;for(let p=0;p<2;p+=1){const f=zx(d);if(f.keysToClear.length===0||d.state!=="ready"||!d.writable)return d;if(f.operations.length===0)return Uf(f.keysToClear),d;try{const g=await n.updateSettings(d.revision,f.operations,a,$e());return r.accept(g.settings),Uf(f.keysToClear),g.settings}catch(g){if(p===0&&g instanceof Ee&&g.code==="settings_revision_conflict"){const w=await r.refresh(),x=w.document??w.lastGood;if(x){d=x;continue}}return d}}return d}function ye(n){if(!n.contextRevision||!n.workspaceId)throw new Ee("工作区上下文尚未完成同步。",409,"context_revision_conflict");return{expectedContextRevision:n.contextRevision,workspaceId:n.workspaceId}}function Vf(n,r,o){if(!(n.session.id===r&&n.sessionRuntime.sessionId===r&&n.sessionRuntime.workspaceId===o.workspaceId&&n.composer.sessionId===r&&n.composer.workspaceId===o.workspaceId&&n.composer.contextRevision===o.expectedContextRevision))throw new Ee("Host 返回的会话快照身份与当前项目上下文不一致。",502,"session_snapshot_identity_mismatch")}const Kf="orion.web.view-id.v1",Mp="orion.web.foreground-session.v1:";function Gx(n,r,o){const a=Lp(`${Mp}${n}`);return qx(a,r,o)}function ri(n,r){Qx();const o=`${Mp}${n}`;try{r?globalThis.sessionStorage?.setItem(o,r):globalThis.sessionStorage?.removeItem(o)}catch{}}function Qx(){const n=Lp(Kf);if(n)return n;const r=globalThis.crypto?.randomUUID?.()??`view-${Date.now().toString(36)}`;try{globalThis.sessionStorage?.setItem(Kf,r)}catch{}return r}function Lp(n){try{return globalThis.sessionStorage?.getItem(n)??null}catch{return null}}function Yx(n){if(n.result.includes("failed")||n.result.includes("invalid")||n.result.includes("rejected")||n.result.includes("ignored")||n.result.includes("full")||n.result==="empty")throw new Ee(Xx(n),409)}function Xx(n){if(n.detail)try{const r=JSON.parse(n.detail);if(typeof r.reason=="string")return r.reason}catch{}return`Runtime 未接受操作:${n.result}`}function Gf(n,r,o,a="error"){n({type:"notice",notice:{id:Date.now(),tone:a,title:r,detail:as(o)}})}function as(n){return n instanceof Ee||n instanceof Error?n.message:"发生未知错误。"}function Lo(n){return n instanceof Ee&&n.code==="collection_cursor_stale"}function Jx(n){return n instanceof Ee&&["composer_control_conflict","session_runtime_revision_conflict","session_snapshot_sync_failed"].includes(n.code??"")}function Zx(n){return n instanceof Ee&&["context_revision_conflict","runtime_busy","active_session_changed"].includes(n.code??"")}function ew(n){return new Promise(r=>{globalThis.setTimeout(r,n)})}function tw(n){if(typeof window<"u"&&"requestIdleCallback"in window){const o=window.requestIdleCallback(n,{timeout:1500});return()=>window.cancelIdleCallback(o)}const r=globalThis.setTimeout(n,150);return()=>globalThis.clearTimeout(r)}async function nw(n,r,o){let a=0;const d=Array.from({length:Math.min(Math.max(1,r),n.length)},async()=>{for(;a<n.length;){const p=n[a];a+=1,p!==void 0&&await o(p)}});await Promise.all(d)}function rw(n){return n.sessionId?n.type==="runtime_event"?n.payload.value.type==="permission_requested":n.type!=="thread_event"?!1:["approval.requested","plan.review_requested","turn.completed","turn.failed","turn.interrupted"].includes(n.payload.value.payload.type):!1}const sw=5e3;function iw(n,r){return r||n.tone==="error"?null:sw}function ow({uid:n,notice:r,reconnectNeeded:o,snapshotRetryNeeded:a,pendingAction:d,onDismiss:p,onRecover:f}){const g=o||a,w=!g,x=m.useRef(p);m.useEffect(()=>{x.current=p},[p]);const E=iw(r,g);m.useEffect(()=>{if(E===null)return;const _=window.setTimeout(()=>x.current(n),E);return()=>window.clearTimeout(_)},[E,n]);const C=`notice-${n}`,R=r.tone==="success"?"check":r.tone==="info"?"info":"warning";return i.jsxs("aside",{className:`workbench-notice notice-${r.tone}`,role:r.tone==="error"?"alert":"status","aria-labelledby":C,children:[i.jsx("span",{className:"notice-icon","aria-hidden":"true",children:i.jsx(Y,{name:R,size:17})}),i.jsxs("div",{children:[i.jsx("strong",{id:C,children:r.title}),r.detail?i.jsx("p",{children:r.detail}):null]}),o?i.jsx("button",{type:"button",className:"secondary-button",onClick:()=>f(n),disabled:d,children:"重建连接"}):null,a?i.jsx("button",{type:"button",className:"secondary-button",onClick:()=>f(n),disabled:d,children:"重试同步"}):null,w?i.jsx("button",{type:"button",className:"icon-button",onClick:()=>p(n),"aria-label":"关闭通知",children:i.jsx(Y,{name:"close",size:15})}):null]})}function lw(){const{state:n,actions:r}=Vx(),[o,a]=m.useState(!1),[d,p]=m.useState(Pv),{value:f,update:g,setResourceNavigatorWidth:w}=yx(n.workspaceId,d.workPanel),[x,E]=m.useState(!1),[C,R]=m.useState(!1),[_,A]=m.useState(!1),[L,W]=m.useState(null),[ie,B]=m.useState(null),[Se,re]=m.useState(null),[ne,b]=m.useState(!1),[D,ee]=m.useState([]),X=m.useRef(0),oe=m.useRef(n.notice),Q=m.useRef(null),[xe,se]=m.useState(null),[Ie,$]=m.useState(null),pe=m.useRef(null),V=m.useRef(!1),z=m.useRef(!1),te=m.useRef(null),q=aw(te),v=q>1180,O=v?Tf({containerWidth:q,navigationExpanded:d.projectNavigation.expanded,navigationWidthPx:d.projectNavigation.widthPx,workExpanded:f.expanded,workDetailWidthPx:f.detailWidthPx}):Ro(q,d),ue=O.projectNavigation.mode==="drawer",he=O.workPanel.mode==="drawer",we=O.workPanel.mode==="rail"&&f.expanded,J=he||we&&x,me=he||we?x:O.workPanel.mode==="dock",Ce=J&&x,ae=ue&&o,Oe=ae||Ce,Qe=n.settings?.state==="ready"?n.settings:n.settingsMirror.lastGood??n.settings,Je=Qe?.sections.appearance.theme.effectiveValue,It=Qe?.sections.appearance.motion.effectiveValue,lt=Qe?.sections.appearance.style.effectiveValue??"orion-blocksmith",Lt=Qo(n),gt=m.useCallback(()=>{if(!n.workspace)return;const K=Qe?.revision;if(!K)return;const be=Qe?.sections.appearance.theme.effectiveValue??"system",_e=be==="system"?"light":be==="light"?"dark":"system";r.updateSettings(K,[{op:"set",key:"appearance.theme",value:_e}],$e()).catch(ze=>{console.warn("[theme] 主题切换写入失败",ze)})},[r,Qe,n.workspace]),_t=m.useCallback(K=>{p(be=>{const _e={...be,projectNavigation:{...be.projectNavigation,...K}};return Rv(_e),_e})},[]),Et=m.useCallback(K=>{g({...K,detailWidthPx:K.widthPx===void 0?void 0:Math.max(360,K.widthPx-Ge)})},[g]),vt=m.useCallback(()=>{pe.current=document.activeElement instanceof HTMLElement?document.activeElement:null},[]),At=m.useCallback(()=>{requestAnimationFrame(()=>document.querySelector(".project-search input")?.focus())},[]),$t=m.useCallback(()=>{requestAnimationFrame(()=>document.querySelector('.workspace-rail [aria-label="打开设置"]')?.focus())},[]),Rn=m.useCallback(()=>{ue&&(vt(),E(!1),a(!0)),$t()},[$t,ue,vt]),nr=m.useCallback(()=>{V.current=ae,ae&&(a(!1),E(!1),pe.current=null),R(!0)},[ae]),rr=m.useCallback(()=>{R(!1),V.current&&(V.current=!1,z.current=!0,a(!0))},[]),pt=m.useCallback(()=>{a(!1),E(!1),z.current=!1;const K=pe.current;pe.current=null,K&&requestAnimationFrame(()=>K.focus())},[]);m.useLayoutEffect(()=>{document.documentElement.dataset.theme=Je??"system",document.documentElement.dataset.motion=It??"system",document.documentElement.dataset.uiStyle=lt},[It,Je,lt]),m.useEffect(()=>{oe.current=n.notice;const K=n.notice;K&&Q.current!==K.id&&(Q.current=K.id,ee(be=>be.some(_e=>_e.notice.id===K.id)?be:[...be,{uid:++X.current,notice:K}].slice(-4)))},[n.notice]),m.useEffect(()=>{const K=n.workspaceId;if(!K)return;const be=n.workspaceSessions[K],_e=n.archivedSessions;be?.status==="ready"&&(_e.ownerWorkspaceId===K&&_e.status!=="idle"||r.loadArchivedWorkspaceSessions(K).catch(()=>{}))},[r,n.archivedSessions,n.workspaceId,n.workspaceSessions]);const sr=m.useCallback(K=>{const be=D.find(_e=>_e.uid===K);be&&(oe.current?.id===be.notice.id&&r.dismissNotice(),ee(_e=>_e.filter(ze=>ze.uid!==K)))},[r,D]),Tn=m.useCallback(K=>{const be=D.find(_e=>_e.uid===K);be&&(oe.current?.id===be.notice.id&&r.dismissNotice(),ee(_e=>_e.filter(ze=>ze.uid!==K)),r.recoverSession())},[r,D]);m.useEffect(()=>{const K=window.matchMedia("(prefers-color-scheme: light)"),be=document.querySelector('meta[name="theme-color"]'),_e=()=>{be&&(be.content=jx(lt,Je??"system",K.matches))};return _e(),K.addEventListener("change",_e),()=>K.removeEventListener("change",_e)},[Je,lt]),m.useEffect(()=>{a(!1),E(!1),pe.current=null,V.current=!1,z.current=!1},[n.activeSessionId,n.workspace]),m.useLayoutEffect(()=>{a(!1),E(!1),pe.current=null,z.current=!1},[O.projectNavigation.mode,O.workPanel.mode,ue,he]),m.useEffect(()=>{const K=be=>{const _e=Ho("toggle-project-navigation");if(_e&&Uo(be,_e.tokens)){if(be.preventDefault(),ue){if(o){pt();return}vt(),E(!1),a(!0);return}const ze=!d.projectNavigation.expanded,Gt=!!(!ze&&document.activeElement?.closest(".workspace-rail")),ln=Ro(q,{...d,projectNavigation:{...d.projectNavigation,expanded:ze}});if(ze&&ln.projectNavigation.mode==="drawer"){_t({expanded:ze}),vt(),E(!1),a(!0);return}_t({expanded:ze}),ze?At():Gt&&requestAnimationFrame(()=>{(document.querySelector('.project-navigator-collapsed [aria-label="展开项目导航"]')??document.querySelector(".mobile-nav-toggle"))?.focus()})}};return window.addEventListener("keydown",K),()=>window.removeEventListener("keydown",K)},[pt,At,o,ue,d.projectNavigation,vt,q,_t]),m.useEffect(()=>{const K=Ho("open-shortcut-help");if(!K)return;const be=_e=>{Uo(_e,K.tokens)&&(_e.preventDefault(),b(ze=>!ze))};return window.addEventListener("keydown",be),()=>window.removeEventListener("keydown",be)},[]),m.useEffect(()=>{if(!Oe)return;const K=document.querySelector(".conversation-column"),be=document.querySelector(".workspace-rail"),_e=document.querySelector(".work-panel"),ze=document.querySelector(".workbench-notice-stack"),Gt=document.querySelector(".skip-link");K&&(K.inert=!0),be&&(be.inert=Ce),_e&&(_e.inert=o),ze&&(ze.inert=!0),Gt&&(Gt.inert=!0);const ln=window.setTimeout(()=>{const Qt=Ce?_e?.querySelector('[aria-label="关闭工作面板"]'):z.current?be?.querySelector('[aria-label="打开设置"]'):be?.querySelector(".drawer-close");z.current=!1,Qt?.focus()},0),mn=Qt=>{Qt.key==="Escape"&&!Qt.target?.closest?.('[role="alertdialog"]')&&pt()};return window.addEventListener("keydown",mn),()=>{K&&(K.inert=!1),be&&(be.inert=!1),_e&&(_e.inert=!1),ze&&(ze.inert=!1),Gt&&(Gt.inert=!1),window.clearTimeout(ln),window.removeEventListener("keydown",mn)}},[pt,Oe,o,Ce,n.notice]);const Dt=m.useCallback(()=>{requestAnimationFrame(()=>document.querySelector("#main-content h1")?.focus())},[]),On=()=>{a(!1),r.createSession().then(Dt,Dt)},on=()=>{V.current=!1,z.current=!1,R(!1),requestAnimationFrame(()=>document.querySelector("#orion-composer")?.focus())};return i.jsxs(i.Fragment,{children:[i.jsx("a",{className:"skip-link",href:"#main-content",children:"跳到主要内容"}),i.jsxs("div",{ref:te,className:`workbench-shell project-navigation-${O.projectNavigation.mode} work-panel-mode-${O.workPanel.mode} ${we&&x?"work-panel-transient-overlay":""}`,style:{"--project-navigation-width":`${O.projectNavigation.widthPx}px`,"--project-navigation-preferred-width":`${d.projectNavigation.widthPx}px`,"--work-panel-width":`${O.workPanel.widthPx}px`,"--work-panel-preferred-width":`${f.detailWidthPx+Ge}px`},"aria-busy":n.boot==="loading",children:[i.jsx(Dv,{state:n,drawerOpen:ae,dockVisible:!0,collapsed:O.projectNavigation.mode==="rail",resizable:O.projectNavigation.mode==="dock",width:O.projectNavigation.widthPx,onExpand:()=>{ue?(vt(),E(!1),a(!0)):(_t({expanded:!0}),At())},onCollapse:()=>{ue?pt():_t({expanded:!1})},onOpenWorkspaceDialog:()=>A(!0),onOpenSettings:nr,onLoadMoreWorkspaces:()=>{r.loadMoreWorkspaces()},onCreateSession:On,onLoadWorkspaceSessions:(K,be)=>{r.loadWorkspaceSessions(K,be)},onActivateContext:(K,be)=>{a(!1),r.activateContext(K,be).then(Dt,Dt)},onSetPinned:(K,be)=>{r.setWorkspacePinned(K,be)},onRemoveWorkspace:K=>{r.removeWorkspace(K)},onRefreshSummary:K=>{r.refreshWorkspaceProjectSummary(K)},onRenameSession:W,onSessionTags:B,onArchiveSession:K=>{r.archiveSession(K.id)},onDeleteSession:re,onRestoreSession:K=>{r.restoreSession(K.id)},onWidthPreview:K=>{const be=Ro(q,{...d,projectNavigation:{...d.projectNavigation,widthPx:K}});te.current?.style.setProperty("--project-navigation-width",`${be.projectNavigation.widthPx}px`)},onWidthCommit:K=>_t({widthPx:K})}),i.jsx(iv,{state:n,actions:r,onRevealSettings:Rn,onCreateSession:On,composerInsertion:Ie}),i.jsx(ix,{state:n,actions:r,mode:J?"overlay":"dock",expanded:me,themePreference:Je,onCycleTheme:gt,onShowShortcutHelp:()=>b(!0),onToggleInspector:()=>{if(he||we){if(x){pt();return}vt(),a(!1),E(!0);return}Et({expanded:!f.expanded})},activePanel:f.activePanel,panelOrder:d.workPanel.order,agentPanel:f.agentPanel,onExpand:()=>{he||we?E(!0):Et({expanded:!0})},onCollapse:()=>{J?pt():Et({expanded:!1})},onPanelChange:K=>Et({activePanel:K}),onAgentPanelChange:K=>Et({agentPanel:K}),onWidthPreview:K=>{const be=v?Tf({containerWidth:q,navigationExpanded:d.projectNavigation.expanded,navigationWidthPx:d.projectNavigation.widthPx,workExpanded:!0,workDetailWidthPx:Math.max(360,K-Ge)}):Ro(q,{...d,workPanel:{...d.workPanel,widthPx:K}});te.current?.style.setProperty("--work-panel-width",`${be.workPanel.widthPx}px`)},onWidthCommit:K=>Et({widthPx:K}),width:O.workPanel.widthPx,maxWidthPx:v?_p(q-(d.projectNavigation.expanded?d.projectNavigation.widthPx:Ge))+Ge:void 0,revealFileRequest:xe,onRevealInFiles:K=>{(he||we)&&E(!0),se({id:Date.now(),fileId:K.filesToken,displayPath:K.path}),Et({activePanel:"files"})},onSendToComposer:K=>{$({id:Date.now(),text:K}),he&&pt(),requestAnimationFrame(()=>document.querySelector("#orion-composer")?.focus())},resourceNavigatorWidths:f.resourceNavigatorWidthPx,onResourceNavigatorWidthCommit:w}),Oe?i.jsx("button",{type:"button",className:"drawer-scrim","aria-label":"关闭侧边面板",tabIndex:-1,onClick:pt}):null,D.length>0?i.jsx("div",{className:"workbench-notice-stack","aria-live":"polite",children:D.map(K=>i.jsx(ow,{uid:K.uid,notice:K.notice,reconnectNeeded:n.connection==="replay-required",snapshotRetryNeeded:K.notice.domain==="session-snapshot"&&Lt.status==="failed",pendingAction:!!n.pendingAction,onDismiss:sr,onRecover:Tn},K.uid))}):null,n.boot!=="ready"?i.jsxs("section",{className:"boot-screen",role:n.boot==="error"?"alert":"status",children:[i.jsx(fp,{className:"boot-mark",size:34}),n.boot==="loading"?i.jsxs(i.Fragment,{children:[i.jsx("h1",{children:"正在启动 Orion Workbench"}),i.jsx("p",{children:"建立本地安全握手并恢复工作区状态…"}),i.jsx("span",{className:"boot-loader","aria-hidden":"true"})]}):i.jsxs(i.Fragment,{children:[i.jsx("h1",{children:"无法连接本地 Web Host"}),i.jsx("p",{children:n.bootError||"请确认 Orion Web Host 仍在运行。"}),i.jsxs("button",{type:"button",className:"primary-button",onClick:()=>{r.retryBoot()},disabled:!!n.pendingAction,children:[i.jsx(Y,{name:"refresh",size:15}),"重新连接"]})]})]}):null,i.jsx("div",{className:"sr-only","aria-live":"polite","aria-atomic":"true",children:n.announcement})]}),i.jsx(dy,{open:C,onClose:rr,state:n,actions:r,onGoToSessionControls:on}),i.jsx(Xv,{open:_,onClose:()=>A(!1),state:n,onSelect:r.switchWorkspace,onLoadMore:r.loadMoreWorkspaces,onPickDirectory:r.pickWorkspaceDirectory,onInspect:r.inspectWorkspacePath}),i.jsx(Jv,{open:!!L,onClose:()=>W(null),session:L,pending:!!n.pendingAction,onRename:r.renameSession}),i.jsx(Zv,{open:!!ie,onClose:()=>B(null),session:ie,pending:!!n.pendingAction,onSave:r.updateSessionTags}),i.jsx(ty,{open:!!Se,onClose:()=>re(null),session:Se,pending:!!n.pendingAction,onConfirm:r.deleteSession}),i.jsx(Ry,{open:ne,onClose:()=>b(!1)})]})}function aw(n){const[r,o]=m.useState(()=>typeof window>"u"?1440:Math.max(320,Math.round(window.innerWidth)));return m.useEffect(()=>{const a=n.current;if(!a)return;const d=()=>{const p=Math.max(320,Math.round(a.getBoundingClientRect().width));o(f=>f===p?f:p)};if(d(),typeof ResizeObserver<"u"){const p=new ResizeObserver(d);return p.observe(a),()=>p.disconnect()}return window.addEventListener("resize",d),()=>window.removeEventListener("resize",d)},[n]),r}const Ap=document.getElementById("root");if(!Ap)throw new Error("Orion Web root element was not found.");Pm.createRoot(Ap).render(i.jsx(Sm.StrictMode,{children:i.jsx(lw,{})}));export{ey as C,Y as I,sp as P,zo as R,Ee as W,$e as a,kp as b,Sp as c,uw as d,i as j,m as r,Pn as s};