@farazirfan/costar-server-executor 1.7.75 → 1.7.76

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.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index-Ca6N-CJM.js","sources":["../../ui/node_modules/@lit/reactive-element/css-tag.js","../../ui/node_modules/@lit/reactive-element/reactive-element.js","../../ui/node_modules/lit-html/lit-html.js","../../ui/node_modules/lit-element/lit-element.js","../../ui/node_modules/@lit/reactive-element/decorators/custom-element.js","../../ui/node_modules/@lit/reactive-element/decorators/property.js","../../ui/node_modules/@lit/reactive-element/decorators/state.js","../../ui/src/ui/app-defaults.ts","../../ui/src/ui/storage.ts","../../ui/src/ui/navigation.ts","../../ui/src/ui/theme.ts","../../ui/src/ui/api-client.ts","../../ui/src/ui/controllers/dashboard.ts","../../ui/src/ui/controllers/cron.ts","../../ui/src/ui/controllers/activity.ts","../../ui/src/ui/controllers/db.ts","../../ui/src/ui/controllers/sessions.ts","../../ui/src/ui/controllers/workspace.ts","../../ui/src/ui/controllers/skills.ts","../../ui/src/ui/controllers/config.ts","../../ui/src/ui/controllers/logs.ts","../../ui/src/ui/app-settings.ts","../../ui/src/ui/app-lifecycle.ts","../../ui/src/ui/controllers/chat.ts","../../ui/src/ui/app-chat.ts","../../ui/src/ui/icons.ts","../../ui/src/ui/app-render.helpers.ts","../../ui/src/ui/format.ts","../../ui/src/ui/views/dashboard.ts","../../ui/src/ui/views/chat.ts","../../ui/src/ui/views/cron.ts","../../ui/src/ui/views/activity.ts","../../ui/src/ui/views/assets.ts","../../ui/src/ui/views/projects.ts","../../ui/src/ui/views/sessions.ts","../../ui/src/ui/views/workspace.ts","../../ui/src/ui/views/skills.ts","../../ui/src/ui/views/logs.ts","../../ui/src/ui/views/config.ts","../../ui/src/ui/app-render.ts","../../ui/src/ui/app.ts"],"sourcesContent":["/**\n * @license\n * Copyright 2019 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */\nconst t=globalThis,e=t.ShadowRoot&&(void 0===t.ShadyCSS||t.ShadyCSS.nativeShadow)&&\"adoptedStyleSheets\"in Document.prototype&&\"replace\"in CSSStyleSheet.prototype,s=Symbol(),o=new WeakMap;class n{constructor(t,e,o){if(this._$cssResult$=!0,o!==s)throw Error(\"CSSResult is not constructable. Use `unsafeCSS` or `css` instead.\");this.cssText=t,this.t=e}get styleSheet(){let t=this.o;const s=this.t;if(e&&void 0===t){const e=void 0!==s&&1===s.length;e&&(t=o.get(s)),void 0===t&&((this.o=t=new CSSStyleSheet).replaceSync(this.cssText),e&&o.set(s,t))}return t}toString(){return this.cssText}}const r=t=>new n(\"string\"==typeof t?t:t+\"\",void 0,s),i=(t,...e)=>{const o=1===t.length?t[0]:e.reduce((e,s,o)=>e+(t=>{if(!0===t._$cssResult$)return t.cssText;if(\"number\"==typeof t)return t;throw Error(\"Value passed to 'css' function must be a 'css' function result: \"+t+\". Use 'unsafeCSS' to pass non-literal values, but take care to ensure page security.\")})(s)+t[o+1],t[0]);return new n(o,t,s)},S=(s,o)=>{if(e)s.adoptedStyleSheets=o.map(t=>t instanceof CSSStyleSheet?t:t.styleSheet);else for(const e of o){const o=document.createElement(\"style\"),n=t.litNonce;void 0!==n&&o.setAttribute(\"nonce\",n),o.textContent=e.cssText,s.appendChild(o)}},c=e?t=>t:t=>t instanceof CSSStyleSheet?(t=>{let e=\"\";for(const s of t.cssRules)e+=s.cssText;return r(e)})(t):t;export{n as CSSResult,S as adoptStyles,i as css,c as getCompatibleStyle,e as supportsAdoptingStyleSheets,r as unsafeCSS};\n//# sourceMappingURL=css-tag.js.map\n","import{getCompatibleStyle as t,adoptStyles as s}from\"./css-tag.js\";export{CSSResult,css,supportsAdoptingStyleSheets,unsafeCSS}from\"./css-tag.js\";\n/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */const{is:i,defineProperty:e,getOwnPropertyDescriptor:h,getOwnPropertyNames:r,getOwnPropertySymbols:o,getPrototypeOf:n}=Object,a=globalThis,c=a.trustedTypes,l=c?c.emptyScript:\"\",p=a.reactiveElementPolyfillSupport,d=(t,s)=>t,u={toAttribute(t,s){switch(s){case Boolean:t=t?l:null;break;case Object:case Array:t=null==t?t:JSON.stringify(t)}return t},fromAttribute(t,s){let i=t;switch(s){case Boolean:i=null!==t;break;case Number:i=null===t?null:Number(t);break;case Object:case Array:try{i=JSON.parse(t)}catch(t){i=null}}return i}},f=(t,s)=>!i(t,s),b={attribute:!0,type:String,converter:u,reflect:!1,useDefault:!1,hasChanged:f};Symbol.metadata??=Symbol(\"metadata\"),a.litPropertyMetadata??=new WeakMap;class y extends HTMLElement{static addInitializer(t){this._$Ei(),(this.l??=[]).push(t)}static get observedAttributes(){return this.finalize(),this._$Eh&&[...this._$Eh.keys()]}static createProperty(t,s=b){if(s.state&&(s.attribute=!1),this._$Ei(),this.prototype.hasOwnProperty(t)&&((s=Object.create(s)).wrapped=!0),this.elementProperties.set(t,s),!s.noAccessor){const i=Symbol(),h=this.getPropertyDescriptor(t,i,s);void 0!==h&&e(this.prototype,t,h)}}static getPropertyDescriptor(t,s,i){const{get:e,set:r}=h(this.prototype,t)??{get(){return this[s]},set(t){this[s]=t}};return{get:e,set(s){const h=e?.call(this);r?.call(this,s),this.requestUpdate(t,h,i)},configurable:!0,enumerable:!0}}static getPropertyOptions(t){return this.elementProperties.get(t)??b}static _$Ei(){if(this.hasOwnProperty(d(\"elementProperties\")))return;const t=n(this);t.finalize(),void 0!==t.l&&(this.l=[...t.l]),this.elementProperties=new Map(t.elementProperties)}static finalize(){if(this.hasOwnProperty(d(\"finalized\")))return;if(this.finalized=!0,this._$Ei(),this.hasOwnProperty(d(\"properties\"))){const t=this.properties,s=[...r(t),...o(t)];for(const i of s)this.createProperty(i,t[i])}const t=this[Symbol.metadata];if(null!==t){const s=litPropertyMetadata.get(t);if(void 0!==s)for(const[t,i]of s)this.elementProperties.set(t,i)}this._$Eh=new Map;for(const[t,s]of this.elementProperties){const i=this._$Eu(t,s);void 0!==i&&this._$Eh.set(i,t)}this.elementStyles=this.finalizeStyles(this.styles)}static finalizeStyles(s){const i=[];if(Array.isArray(s)){const e=new Set(s.flat(1/0).reverse());for(const s of e)i.unshift(t(s))}else void 0!==s&&i.push(t(s));return i}static _$Eu(t,s){const i=s.attribute;return!1===i?void 0:\"string\"==typeof i?i:\"string\"==typeof t?t.toLowerCase():void 0}constructor(){super(),this._$Ep=void 0,this.isUpdatePending=!1,this.hasUpdated=!1,this._$Em=null,this._$Ev()}_$Ev(){this._$ES=new Promise(t=>this.enableUpdating=t),this._$AL=new Map,this._$E_(),this.requestUpdate(),this.constructor.l?.forEach(t=>t(this))}addController(t){(this._$EO??=new Set).add(t),void 0!==this.renderRoot&&this.isConnected&&t.hostConnected?.()}removeController(t){this._$EO?.delete(t)}_$E_(){const t=new Map,s=this.constructor.elementProperties;for(const i of s.keys())this.hasOwnProperty(i)&&(t.set(i,this[i]),delete this[i]);t.size>0&&(this._$Ep=t)}createRenderRoot(){const t=this.shadowRoot??this.attachShadow(this.constructor.shadowRootOptions);return s(t,this.constructor.elementStyles),t}connectedCallback(){this.renderRoot??=this.createRenderRoot(),this.enableUpdating(!0),this._$EO?.forEach(t=>t.hostConnected?.())}enableUpdating(t){}disconnectedCallback(){this._$EO?.forEach(t=>t.hostDisconnected?.())}attributeChangedCallback(t,s,i){this._$AK(t,i)}_$ET(t,s){const i=this.constructor.elementProperties.get(t),e=this.constructor._$Eu(t,i);if(void 0!==e&&!0===i.reflect){const h=(void 0!==i.converter?.toAttribute?i.converter:u).toAttribute(s,i.type);this._$Em=t,null==h?this.removeAttribute(e):this.setAttribute(e,h),this._$Em=null}}_$AK(t,s){const i=this.constructor,e=i._$Eh.get(t);if(void 0!==e&&this._$Em!==e){const t=i.getPropertyOptions(e),h=\"function\"==typeof t.converter?{fromAttribute:t.converter}:void 0!==t.converter?.fromAttribute?t.converter:u;this._$Em=e;const r=h.fromAttribute(s,t.type);this[e]=r??this._$Ej?.get(e)??r,this._$Em=null}}requestUpdate(t,s,i,e=!1,h){if(void 0!==t){const r=this.constructor;if(!1===e&&(h=this[t]),i??=r.getPropertyOptions(t),!((i.hasChanged??f)(h,s)||i.useDefault&&i.reflect&&h===this._$Ej?.get(t)&&!this.hasAttribute(r._$Eu(t,i))))return;this.C(t,s,i)}!1===this.isUpdatePending&&(this._$ES=this._$EP())}C(t,s,{useDefault:i,reflect:e,wrapped:h},r){i&&!(this._$Ej??=new Map).has(t)&&(this._$Ej.set(t,r??s??this[t]),!0!==h||void 0!==r)||(this._$AL.has(t)||(this.hasUpdated||i||(s=void 0),this._$AL.set(t,s)),!0===e&&this._$Em!==t&&(this._$Eq??=new Set).add(t))}async _$EP(){this.isUpdatePending=!0;try{await this._$ES}catch(t){Promise.reject(t)}const t=this.scheduleUpdate();return null!=t&&await t,!this.isUpdatePending}scheduleUpdate(){return this.performUpdate()}performUpdate(){if(!this.isUpdatePending)return;if(!this.hasUpdated){if(this.renderRoot??=this.createRenderRoot(),this._$Ep){for(const[t,s]of this._$Ep)this[t]=s;this._$Ep=void 0}const t=this.constructor.elementProperties;if(t.size>0)for(const[s,i]of t){const{wrapped:t}=i,e=this[s];!0!==t||this._$AL.has(s)||void 0===e||this.C(s,void 0,i,e)}}let t=!1;const s=this._$AL;try{t=this.shouldUpdate(s),t?(this.willUpdate(s),this._$EO?.forEach(t=>t.hostUpdate?.()),this.update(s)):this._$EM()}catch(s){throw t=!1,this._$EM(),s}t&&this._$AE(s)}willUpdate(t){}_$AE(t){this._$EO?.forEach(t=>t.hostUpdated?.()),this.hasUpdated||(this.hasUpdated=!0,this.firstUpdated(t)),this.updated(t)}_$EM(){this._$AL=new Map,this.isUpdatePending=!1}get updateComplete(){return this.getUpdateComplete()}getUpdateComplete(){return this._$ES}shouldUpdate(t){return!0}update(t){this._$Eq&&=this._$Eq.forEach(t=>this._$ET(t,this[t])),this._$EM()}updated(t){}firstUpdated(t){}}y.elementStyles=[],y.shadowRootOptions={mode:\"open\"},y[d(\"elementProperties\")]=new Map,y[d(\"finalized\")]=new Map,p?.({ReactiveElement:y}),(a.reactiveElementVersions??=[]).push(\"2.1.2\");export{y as ReactiveElement,s as adoptStyles,u as defaultConverter,t as getCompatibleStyle,f as notEqual};\n//# sourceMappingURL=reactive-element.js.map\n","/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */\nconst t=globalThis,i=t=>t,s=t.trustedTypes,e=s?s.createPolicy(\"lit-html\",{createHTML:t=>t}):void 0,h=\"$lit$\",o=`lit$${Math.random().toFixed(9).slice(2)}$`,n=\"?\"+o,r=`<${n}>`,l=document,c=()=>l.createComment(\"\"),a=t=>null===t||\"object\"!=typeof t&&\"function\"!=typeof t,u=Array.isArray,d=t=>u(t)||\"function\"==typeof t?.[Symbol.iterator],f=\"[ \\t\\n\\f\\r]\",v=/<(?:(!--|\\/[^a-zA-Z])|(\\/?[a-zA-Z][^>\\s]*)|(\\/?$))/g,_=/-->/g,m=/>/g,p=RegExp(`>|${f}(?:([^\\\\s\"'>=/]+)(${f}*=${f}*(?:[^ \\t\\n\\f\\r\"'\\`<>=]|(\"|')|))|$)`,\"g\"),g=/'/g,$=/\"/g,y=/^(?:script|style|textarea|title)$/i,x=t=>(i,...s)=>({_$litType$:t,strings:i,values:s}),b=x(1),w=x(2),T=x(3),E=Symbol.for(\"lit-noChange\"),A=Symbol.for(\"lit-nothing\"),C=new WeakMap,P=l.createTreeWalker(l,129);function V(t,i){if(!u(t)||!t.hasOwnProperty(\"raw\"))throw Error(\"invalid template strings array\");return void 0!==e?e.createHTML(i):i}const N=(t,i)=>{const s=t.length-1,e=[];let n,l=2===i?\"<svg>\":3===i?\"<math>\":\"\",c=v;for(let i=0;i<s;i++){const s=t[i];let a,u,d=-1,f=0;for(;f<s.length&&(c.lastIndex=f,u=c.exec(s),null!==u);)f=c.lastIndex,c===v?\"!--\"===u[1]?c=_:void 0!==u[1]?c=m:void 0!==u[2]?(y.test(u[2])&&(n=RegExp(\"</\"+u[2],\"g\")),c=p):void 0!==u[3]&&(c=p):c===p?\">\"===u[0]?(c=n??v,d=-1):void 0===u[1]?d=-2:(d=c.lastIndex-u[2].length,a=u[1],c=void 0===u[3]?p:'\"'===u[3]?$:g):c===$||c===g?c=p:c===_||c===m?c=v:(c=p,n=void 0);const x=c===p&&t[i+1].startsWith(\"/>\")?\" \":\"\";l+=c===v?s+r:d>=0?(e.push(a),s.slice(0,d)+h+s.slice(d)+o+x):s+o+(-2===d?i:x)}return[V(t,l+(t[s]||\"<?>\")+(2===i?\"</svg>\":3===i?\"</math>\":\"\")),e]};class S{constructor({strings:t,_$litType$:i},e){let r;this.parts=[];let l=0,a=0;const u=t.length-1,d=this.parts,[f,v]=N(t,i);if(this.el=S.createElement(f,e),P.currentNode=this.el.content,2===i||3===i){const t=this.el.content.firstChild;t.replaceWith(...t.childNodes)}for(;null!==(r=P.nextNode())&&d.length<u;){if(1===r.nodeType){if(r.hasAttributes())for(const t of r.getAttributeNames())if(t.endsWith(h)){const i=v[a++],s=r.getAttribute(t).split(o),e=/([.?@])?(.*)/.exec(i);d.push({type:1,index:l,name:e[2],strings:s,ctor:\".\"===e[1]?I:\"?\"===e[1]?L:\"@\"===e[1]?z:H}),r.removeAttribute(t)}else t.startsWith(o)&&(d.push({type:6,index:l}),r.removeAttribute(t));if(y.test(r.tagName)){const t=r.textContent.split(o),i=t.length-1;if(i>0){r.textContent=s?s.emptyScript:\"\";for(let s=0;s<i;s++)r.append(t[s],c()),P.nextNode(),d.push({type:2,index:++l});r.append(t[i],c())}}}else if(8===r.nodeType)if(r.data===n)d.push({type:2,index:l});else{let t=-1;for(;-1!==(t=r.data.indexOf(o,t+1));)d.push({type:7,index:l}),t+=o.length-1}l++}}static createElement(t,i){const s=l.createElement(\"template\");return s.innerHTML=t,s}}function M(t,i,s=t,e){if(i===E)return i;let h=void 0!==e?s._$Co?.[e]:s._$Cl;const o=a(i)?void 0:i._$litDirective$;return h?.constructor!==o&&(h?._$AO?.(!1),void 0===o?h=void 0:(h=new o(t),h._$AT(t,s,e)),void 0!==e?(s._$Co??=[])[e]=h:s._$Cl=h),void 0!==h&&(i=M(t,h._$AS(t,i.values),h,e)),i}class R{constructor(t,i){this._$AV=[],this._$AN=void 0,this._$AD=t,this._$AM=i}get parentNode(){return this._$AM.parentNode}get _$AU(){return this._$AM._$AU}u(t){const{el:{content:i},parts:s}=this._$AD,e=(t?.creationScope??l).importNode(i,!0);P.currentNode=e;let h=P.nextNode(),o=0,n=0,r=s[0];for(;void 0!==r;){if(o===r.index){let i;2===r.type?i=new k(h,h.nextSibling,this,t):1===r.type?i=new r.ctor(h,r.name,r.strings,this,t):6===r.type&&(i=new Z(h,this,t)),this._$AV.push(i),r=s[++n]}o!==r?.index&&(h=P.nextNode(),o++)}return P.currentNode=l,e}p(t){let i=0;for(const s of this._$AV)void 0!==s&&(void 0!==s.strings?(s._$AI(t,s,i),i+=s.strings.length-2):s._$AI(t[i])),i++}}class k{get _$AU(){return this._$AM?._$AU??this._$Cv}constructor(t,i,s,e){this.type=2,this._$AH=A,this._$AN=void 0,this._$AA=t,this._$AB=i,this._$AM=s,this.options=e,this._$Cv=e?.isConnected??!0}get parentNode(){let t=this._$AA.parentNode;const i=this._$AM;return void 0!==i&&11===t?.nodeType&&(t=i.parentNode),t}get startNode(){return this._$AA}get endNode(){return this._$AB}_$AI(t,i=this){t=M(this,t,i),a(t)?t===A||null==t||\"\"===t?(this._$AH!==A&&this._$AR(),this._$AH=A):t!==this._$AH&&t!==E&&this._(t):void 0!==t._$litType$?this.$(t):void 0!==t.nodeType?this.T(t):d(t)?this.k(t):this._(t)}O(t){return this._$AA.parentNode.insertBefore(t,this._$AB)}T(t){this._$AH!==t&&(this._$AR(),this._$AH=this.O(t))}_(t){this._$AH!==A&&a(this._$AH)?this._$AA.nextSibling.data=t:this.T(l.createTextNode(t)),this._$AH=t}$(t){const{values:i,_$litType$:s}=t,e=\"number\"==typeof s?this._$AC(t):(void 0===s.el&&(s.el=S.createElement(V(s.h,s.h[0]),this.options)),s);if(this._$AH?._$AD===e)this._$AH.p(i);else{const t=new R(e,this),s=t.u(this.options);t.p(i),this.T(s),this._$AH=t}}_$AC(t){let i=C.get(t.strings);return void 0===i&&C.set(t.strings,i=new S(t)),i}k(t){u(this._$AH)||(this._$AH=[],this._$AR());const i=this._$AH;let s,e=0;for(const h of t)e===i.length?i.push(s=new k(this.O(c()),this.O(c()),this,this.options)):s=i[e],s._$AI(h),e++;e<i.length&&(this._$AR(s&&s._$AB.nextSibling,e),i.length=e)}_$AR(t=this._$AA.nextSibling,s){for(this._$AP?.(!1,!0,s);t!==this._$AB;){const s=i(t).nextSibling;i(t).remove(),t=s}}setConnected(t){void 0===this._$AM&&(this._$Cv=t,this._$AP?.(t))}}class H{get tagName(){return this.element.tagName}get _$AU(){return this._$AM._$AU}constructor(t,i,s,e,h){this.type=1,this._$AH=A,this._$AN=void 0,this.element=t,this.name=i,this._$AM=e,this.options=h,s.length>2||\"\"!==s[0]||\"\"!==s[1]?(this._$AH=Array(s.length-1).fill(new String),this.strings=s):this._$AH=A}_$AI(t,i=this,s,e){const h=this.strings;let o=!1;if(void 0===h)t=M(this,t,i,0),o=!a(t)||t!==this._$AH&&t!==E,o&&(this._$AH=t);else{const e=t;let n,r;for(t=h[0],n=0;n<h.length-1;n++)r=M(this,e[s+n],i,n),r===E&&(r=this._$AH[n]),o||=!a(r)||r!==this._$AH[n],r===A?t=A:t!==A&&(t+=(r??\"\")+h[n+1]),this._$AH[n]=r}o&&!e&&this.j(t)}j(t){t===A?this.element.removeAttribute(this.name):this.element.setAttribute(this.name,t??\"\")}}class I extends H{constructor(){super(...arguments),this.type=3}j(t){this.element[this.name]=t===A?void 0:t}}class L extends H{constructor(){super(...arguments),this.type=4}j(t){this.element.toggleAttribute(this.name,!!t&&t!==A)}}class z extends H{constructor(t,i,s,e,h){super(t,i,s,e,h),this.type=5}_$AI(t,i=this){if((t=M(this,t,i,0)??A)===E)return;const s=this._$AH,e=t===A&&s!==A||t.capture!==s.capture||t.once!==s.once||t.passive!==s.passive,h=t!==A&&(s===A||e);e&&this.element.removeEventListener(this.name,this,s),h&&this.element.addEventListener(this.name,this,t),this._$AH=t}handleEvent(t){\"function\"==typeof this._$AH?this._$AH.call(this.options?.host??this.element,t):this._$AH.handleEvent(t)}}class Z{constructor(t,i,s){this.element=t,this.type=6,this._$AN=void 0,this._$AM=i,this.options=s}get _$AU(){return this._$AM._$AU}_$AI(t){M(this,t)}}const j={M:h,P:o,A:n,C:1,L:N,R,D:d,V:M,I:k,H,N:L,U:z,B:I,F:Z},B=t.litHtmlPolyfillSupport;B?.(S,k),(t.litHtmlVersions??=[]).push(\"3.3.2\");const D=(t,i,s)=>{const e=s?.renderBefore??i;let h=e._$litPart$;if(void 0===h){const t=s?.renderBefore??null;e._$litPart$=h=new k(i.insertBefore(c(),t),t,void 0,s??{})}return h._$AI(t),h};export{j as _$LH,b as html,T as mathml,E as noChange,A as nothing,D as render,w as svg};\n//# sourceMappingURL=lit-html.js.map\n","import{ReactiveElement as t}from\"@lit/reactive-element\";export*from\"@lit/reactive-element\";import{render as e,noChange as r}from\"lit-html\";export*from\"lit-html\";\n/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */const s=globalThis;class i extends t{constructor(){super(...arguments),this.renderOptions={host:this},this._$Do=void 0}createRenderRoot(){const t=super.createRenderRoot();return this.renderOptions.renderBefore??=t.firstChild,t}update(t){const r=this.render();this.hasUpdated||(this.renderOptions.isConnected=this.isConnected),super.update(t),this._$Do=e(r,this.renderRoot,this.renderOptions)}connectedCallback(){super.connectedCallback(),this._$Do?.setConnected(!0)}disconnectedCallback(){super.disconnectedCallback(),this._$Do?.setConnected(!1)}render(){return r}}i._$litElement$=!0,i[\"finalized\"]=!0,s.litElementHydrateSupport?.({LitElement:i});const o=s.litElementPolyfillSupport;o?.({LitElement:i});const n={_$AK:(t,e,r)=>{t._$AK(e,r)},_$AL:t=>t._$AL};(s.litElementVersions??=[]).push(\"4.2.2\");export{i as LitElement,n as _$LE};\n//# sourceMappingURL=lit-element.js.map\n","/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */\nconst t=t=>(e,o)=>{void 0!==o?o.addInitializer(()=>{customElements.define(t,e)}):customElements.define(t,e)};export{t as customElement};\n//# sourceMappingURL=custom-element.js.map\n","import{notEqual as t,defaultConverter as e}from\"../reactive-element.js\";\n/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */const o={attribute:!0,type:String,converter:e,reflect:!1,hasChanged:t},r=(t=o,e,r)=>{const{kind:n,metadata:i}=r;let s=globalThis.litPropertyMetadata.get(i);if(void 0===s&&globalThis.litPropertyMetadata.set(i,s=new Map),\"setter\"===n&&((t=Object.create(t)).wrapped=!0),s.set(r.name,t),\"accessor\"===n){const{name:o}=r;return{set(r){const n=e.get.call(this);e.set.call(this,r),this.requestUpdate(o,n,t,!0,r)},init(e){return void 0!==e&&this.C(o,void 0,t,e),e}}}if(\"setter\"===n){const{name:o}=r;return function(r){const n=this[o];e.call(this,r),this.requestUpdate(o,n,t,!0,r)}}throw Error(\"Unsupported decorator location: \"+n)};function n(t){return(e,o)=>\"object\"==typeof o?r(t,e,o):((t,e,o)=>{const r=e.hasOwnProperty(o);return e.constructor.createProperty(o,t),r?Object.getOwnPropertyDescriptor(e,o):void 0})(t,e,o)}export{n as property,r as standardProperty};\n//# sourceMappingURL=property.js.map\n","import{property as t}from\"./property.js\";\n/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */function r(r){return t({...r,state:!0,attribute:!1})}export{r as state};\n//# sourceMappingURL=state.js.map\n","/**\n * Default form states — extracted from app.ts (OpenClaw pattern).\n */\n\nexport type CronFormState = {\n name: string;\n instruction: string;\n scheduleType: \"every\" | \"cron\" | \"at\";\n every: string;\n cronExpression: string;\n at: string;\n};\n\nexport const DEFAULT_CRON_FORM: CronFormState = {\n name: \"\",\n instruction: \"\",\n scheduleType: \"every\",\n every: \"30m\",\n cronExpression: \"\",\n at: \"\",\n};\n","/**\n * LocalStorage settings — adapted from OpenClaw's storage.ts.\n */\n\nimport type { ThemeMode } from \"./theme.ts\";\n\nexport type UiSettings = {\n theme: ThemeMode;\n chatShowThinking: boolean;\n splitRatio: number;\n navCollapsed: boolean;\n navGroupsCollapsed: Record<string, boolean>;\n};\n\nconst STORAGE_KEY = \"costar.dashboard.settings.v1\";\n\nconst defaults: UiSettings = {\n theme: \"system\",\n chatShowThinking: true,\n splitRatio: 0.6,\n navCollapsed: false,\n navGroupsCollapsed: {},\n};\n\nexport function loadSettings(): UiSettings {\n try {\n const raw = localStorage.getItem(STORAGE_KEY);\n if (!raw) return { ...defaults };\n\n const parsed = JSON.parse(raw) as Partial<UiSettings>;\n return {\n theme:\n parsed.theme === \"light\" || parsed.theme === \"dark\" || parsed.theme === \"system\"\n ? parsed.theme\n : defaults.theme,\n chatShowThinking:\n typeof parsed.chatShowThinking === \"boolean\"\n ? parsed.chatShowThinking\n : defaults.chatShowThinking,\n splitRatio:\n typeof parsed.splitRatio === \"number\" && parsed.splitRatio >= 0.3 && parsed.splitRatio <= 0.8\n ? parsed.splitRatio\n : defaults.splitRatio,\n navCollapsed:\n typeof parsed.navCollapsed === \"boolean\" ? parsed.navCollapsed : defaults.navCollapsed,\n navGroupsCollapsed:\n typeof parsed.navGroupsCollapsed === \"object\" && parsed.navGroupsCollapsed !== null\n ? parsed.navGroupsCollapsed\n : defaults.navGroupsCollapsed,\n };\n } catch {\n return { ...defaults };\n }\n}\n\nexport function saveSettings(next: UiSettings): void {\n try {\n localStorage.setItem(STORAGE_KEY, JSON.stringify(next));\n } catch {\n // Ignore quota errors\n }\n}\n","/**\n * Tab navigation — adapted from OpenClaw's navigation.ts.\n */\n\nimport type { IconName } from \"./icons.ts\";\n\nexport const TAB_GROUPS = [\n { label: \"main\", tabs: [\"dashboard\", \"chat\"] as const },\n { label: \"agent\", tabs: [\"cron\", \"activity\", \"sessions\"] as const },\n { label: \"data\", tabs: [\"assets\", \"projects\", \"workspace\"] as const },\n { label: \"system\", tabs: [\"skills\", \"logs\", \"config\"] as const },\n] as const;\n\nexport type Tab =\n | \"dashboard\"\n | \"chat\"\n | \"cron\"\n | \"activity\"\n | \"sessions\"\n | \"assets\"\n | \"projects\"\n | \"workspace\"\n | \"skills\"\n | \"logs\"\n | \"config\";\n\nconst TAB_PATHS: Record<Tab, string> = {\n dashboard: \"/\",\n chat: \"/chat\",\n cron: \"/cron\",\n activity: \"/activity\",\n sessions: \"/sessions\",\n assets: \"/assets\",\n projects: \"/projects\",\n workspace: \"/workspace\",\n skills: \"/skills\",\n logs: \"/logs\",\n config: \"/config\",\n};\n\nconst TAB_TITLES: Record<Tab, string> = {\n dashboard: \"Dashboard\",\n chat: \"Chat\",\n cron: \"Cron Jobs\",\n activity: \"Activity\",\n sessions: \"Sessions\",\n assets: \"Assets\",\n projects: \"Projects\",\n workspace: \"Workspace\",\n skills: \"Skills\",\n logs: \"Logs\",\n config: \"Config\",\n};\n\nconst TAB_ICONS: Record<Tab, IconName> = {\n dashboard: \"home\",\n chat: \"messageSquare\",\n cron: \"clock\",\n activity: \"activity\",\n sessions: \"fileText\",\n assets: \"package\",\n projects: \"folder\",\n workspace: \"edit\",\n skills: \"zap\",\n logs: \"terminal\",\n config: \"settings\",\n};\n\nconst GROUP_LABELS: Record<string, string> = {\n main: \"Main\",\n agent: \"Agent\",\n data: \"Data\",\n system: \"System\",\n};\n\nexport function pathForTab(tab: Tab): string {\n return TAB_PATHS[tab];\n}\n\nexport function tabFromPath(pathname: string): Tab | null {\n // Exact match first\n for (const [tab, p] of Object.entries(TAB_PATHS)) {\n if (pathname === p) return tab as Tab;\n }\n // Try without trailing slash\n const clean = pathname.replace(/\\/$/, \"\") || \"/\";\n for (const [tab, p] of Object.entries(TAB_PATHS)) {\n if (clean === p) return tab as Tab;\n }\n return null;\n}\n\nexport function iconForTab(tab: Tab): IconName {\n return TAB_ICONS[tab];\n}\n\nexport function titleForTab(tab: Tab): string {\n return TAB_TITLES[tab];\n}\n\nexport function labelForGroup(group: string): string {\n return GROUP_LABELS[group] || group;\n}\n","export type ThemeMode = \"system\" | \"light\" | \"dark\";\nexport type ResolvedTheme = \"light\" | \"dark\";\n\nexport function getSystemTheme(): ResolvedTheme {\n if (typeof window === \"undefined\" || typeof window.matchMedia !== \"function\") {\n return \"dark\";\n }\n return window.matchMedia(\"(prefers-color-scheme: dark)\").matches ? \"dark\" : \"light\";\n}\n\nexport function resolveTheme(mode: ThemeMode): ResolvedTheme {\n if (mode === \"system\") {\n return getSystemTheme();\n }\n return mode;\n}\n","/**\n * CoStar REST + SSE API client.\n * Replaces OpenClaw's GatewayBrowserClient (WebSocket).\n */\n\nexport type ToolStartEvent = {\n toolCallId?: string;\n name: string;\n args?: unknown;\n index: number;\n};\n\nexport type ToolEndEvent = {\n toolCallId?: string;\n name: string;\n result?: string;\n isError?: boolean;\n durationMs?: number;\n index: number;\n};\n\nexport type DoneEvent = {\n response?: string;\n toolCalls?: number;\n inputTokens?: number;\n outputTokens?: number;\n stopReason?: string;\n compactionCount?: number;\n};\n\nexport type StreamChatHandlers = {\n onDelta: (text: string) => void;\n onToolStart?: (data: ToolStartEvent) => void;\n onToolEnd?: (data: ToolEndEvent) => void;\n onCompactionStart?: () => void;\n onCompactionEnd?: (data: { error?: string; willRetry?: boolean }) => void;\n onDone?: (data: DoneEvent) => void;\n onError?: (error: string) => void;\n};\n\nexport class CoStarApiClient {\n private baseUrl: string;\n /** Cached chat session ID — reused across messages */\n private _chatSessionId: string | null = null;\n\n constructor(baseUrl = \"\") {\n this.baseUrl = baseUrl;\n }\n\n private url(path: string, params?: Record<string, string>): string {\n const base = this.baseUrl || window.location.origin;\n const url = new URL(path, base);\n if (params) {\n for (const [k, v] of Object.entries(params)) {\n if (v !== undefined && v !== \"\") url.searchParams.set(k, v);\n }\n }\n return url.toString();\n }\n\n async get<T = unknown>(path: string, params?: Record<string, string>): Promise<T> {\n const res = await fetch(this.url(path, params));\n if (!res.ok) {\n const err = await res.json().catch(() => ({ error: res.statusText }));\n throw new Error(err.error || res.statusText);\n }\n return res.json();\n }\n\n async getText(path: string, params?: Record<string, string>): Promise<string> {\n const res = await fetch(this.url(path, params));\n if (!res.ok) throw new Error(res.statusText);\n return res.text();\n }\n\n async post<T = unknown>(path: string, body?: unknown): Promise<T> {\n const res = await fetch(this.url(path), {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: body !== undefined ? JSON.stringify(body) : undefined,\n });\n if (!res.ok) {\n const err = await res.json().catch(() => ({ error: res.statusText }));\n throw new Error(err.error || res.statusText);\n }\n return res.json();\n }\n\n async put<T = unknown>(path: string, body?: unknown): Promise<T> {\n const res = await fetch(this.url(path), {\n method: \"PUT\",\n headers: { \"Content-Type\": \"application/json\" },\n body: body !== undefined ? JSON.stringify(body) : undefined,\n });\n if (!res.ok) {\n const err = await res.json().catch(() => ({ error: res.statusText }));\n throw new Error(err.error || res.statusText);\n }\n return res.json();\n }\n\n async del<T = unknown>(path: string): Promise<T> {\n const res = await fetch(this.url(path), { method: \"DELETE\" });\n if (!res.ok) {\n const err = await res.json().catch(() => ({ error: res.statusText }));\n throw new Error(err.error || res.statusText);\n }\n return res.json();\n }\n\n /**\n * POST-based SSE streaming for chat.\n * Parses named SSE events: event: type\\ndata: json\\n\\n\n */\n streamChat(message: string, handlers: StreamChatHandlers): { abort: () => void } {\n const controller = new AbortController();\n\n (async () => {\n try {\n // Step 1: Get or create a chat session\n if (!this._chatSessionId) {\n const session = await fetch(this.url(\"/api/sessions\"), {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n signal: controller.signal,\n });\n if (!session.ok) {\n handlers.onError?.(`Failed to create session: ${session.statusText}`);\n return;\n }\n const sessionData = await session.json() as { id: string };\n this._chatSessionId = sessionData.id;\n }\n\n // Step 2: Stream via /api/sessions/:id/messages/stream\n const res = await fetch(this.url(`/api/sessions/${this._chatSessionId}/messages/stream`), {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({ message }),\n signal: controller.signal,\n });\n\n if (!res.ok || !res.body) {\n if (res.status === 404) {\n this._chatSessionId = null;\n handlers.onError?.(\"Session expired. Please try again.\");\n } else {\n handlers.onError?.(`HTTP ${res.status}: ${res.statusText}`);\n }\n return;\n }\n\n const reader = res.body.getReader();\n const decoder = new TextDecoder();\n let buffer = \"\";\n\n while (true) {\n const { done, value } = await reader.read();\n if (done) break;\n\n buffer += decoder.decode(value, { stream: true });\n const lines = buffer.split(\"\\n\");\n buffer = lines.pop() || \"\";\n\n let eventType = \"\";\n let eventData = \"\";\n\n for (const line of lines) {\n if (line.startsWith(\"event: \")) {\n eventType = line.slice(7).trim();\n } else if (line.startsWith(\"data: \")) {\n eventData = line.slice(6);\n if (eventType && eventData) {\n this._handleSSEEvent(eventType, eventData, handlers);\n eventType = \"\";\n eventData = \"\";\n }\n } else if (line === \"\") {\n eventType = \"\";\n eventData = \"\";\n }\n }\n }\n } catch (err: unknown) {\n if ((err as Error).name === \"AbortError\") return;\n handlers.onError?.((err as Error).message || \"Stream error\");\n }\n })();\n\n return { abort: () => controller.abort() };\n }\n\n private _handleSSEEvent(type: string, dataStr: string, handlers: StreamChatHandlers): void {\n let data: any;\n try { data = JSON.parse(dataStr); } catch { return; }\n\n switch (type) {\n case \"connected\":\n break;\n case \"text_delta\":\n if (data.text) handlers.onDelta(data.text);\n break;\n case \"tool_start\":\n handlers.onToolStart?.(data);\n break;\n case \"tool_end\":\n handlers.onToolEnd?.(data);\n break;\n case \"compaction_start\":\n handlers.onCompactionStart?.();\n break;\n case \"compaction_end\":\n handlers.onCompactionEnd?.(data);\n break;\n case \"done\":\n handlers.onDone?.(data);\n break;\n case \"error\":\n handlers.onError?.(data.message || \"Unknown error\");\n break;\n }\n }\n\n /**\n * SSE streaming for logs via EventSource.\n */\n streamLogs(handlers: {\n onLog: (entry: unknown) => void;\n onConnect?: () => void;\n onError?: (error: string) => void;\n }): { close: () => void } {\n const es = new EventSource(this.url(\"/api/logs/stream\"));\n\n es.onopen = () => handlers.onConnect?.();\n es.onmessage = (event) => {\n try {\n handlers.onLog(JSON.parse(event.data));\n } catch {\n handlers.onLog({ message: event.data });\n }\n };\n es.onerror = () => handlers.onError?.(\"Log stream disconnected\");\n\n return { close: () => es.close() };\n }\n}\n\n/** Singleton API client */\nexport const api = new CoStarApiClient();\n","/**\n * Dashboard controller — loads status, stats, session info, compact/reset.\n */\n\nimport { api } from \"../api-client.ts\";\nimport type {\n ServerStatus,\n ServerStatusResponse,\n ServerVersionResponse,\n ActivityStats,\n ActivityRow,\n ProjectRow,\n SessionInfo,\n} from \"../types.ts\";\n\nexport type DashboardState = {\n serverStatus: ServerStatus | null;\n activityStats: ActivityStats | null;\n activeProject: ProjectRow | null;\n projectCount: number | null;\n recentActivity: ActivityRow[];\n sessionInfo: SessionInfo | null;\n versionInfo: ServerVersionResponse | null;\n statusResponse: ServerStatusResponse | null;\n};\n\nexport async function loadStatus(state: DashboardState): Promise<void> {\n try {\n const [statusRes, versionRes] = await Promise.all([\n api.get<ServerStatusResponse>(\"/api/status\"),\n api.get<ServerVersionResponse>(\"/api/version\"),\n ]);\n state.statusResponse = statusRes;\n state.versionInfo = versionRes;\n state.serverStatus = {\n online: true,\n version: versionRes.version,\n uptime: statusRes.agent.uptime,\n userId: statusRes.agent.userId,\n cronRunning: statusRes.cron.isRunning,\n cronJobs: statusRes.cron.trackedJobs,\n heartbeatEnabled: statusRes.heartbeat.enabled,\n skills: statusRes.skills,\n };\n } catch {\n state.serverStatus = {\n online: false,\n version: \"?\",\n uptime: 0,\n userId: \"\",\n cronRunning: false,\n cronJobs: 0,\n heartbeatEnabled: false,\n skills: { total: 0, eligible: 0 },\n };\n }\n}\n\nexport async function loadDashboard(state: DashboardState): Promise<void> {\n const [statusRes, versionRes, stats, projects, activity, session] = await Promise.allSettled([\n api.get<ServerStatusResponse>(\"/api/status\"),\n api.get<ServerVersionResponse>(\"/api/version\"),\n api.get<ActivityStats>(\"/api/db/activity/stats\"),\n api.get<ProjectRow[]>(\"/api/db/projects\", { limit: \"100\" }),\n api.get<ActivityRow[]>(\"/api/db/activity\", { limit: \"5\" }),\n api.get<SessionInfo>(\"/api/agent/session\").catch(() => null),\n ]);\n\n if (statusRes.status === \"fulfilled\") state.statusResponse = statusRes.value;\n if (versionRes.status === \"fulfilled\") state.versionInfo = versionRes.value;\n\n if (statusRes.status === \"fulfilled\" && versionRes.status === \"fulfilled\") {\n state.serverStatus = {\n online: true,\n version: versionRes.value.version,\n uptime: statusRes.value.agent.uptime,\n userId: statusRes.value.agent.userId,\n cronRunning: statusRes.value.cron.isRunning,\n cronJobs: statusRes.value.cron.trackedJobs,\n heartbeatEnabled: statusRes.value.heartbeat.enabled,\n skills: statusRes.value.skills,\n };\n } else if (versionRes.status === \"fulfilled\") {\n state.serverStatus = {\n online: true,\n version: versionRes.value.version,\n uptime: versionRes.value.uptime,\n userId: \"\",\n cronRunning: false,\n cronJobs: 0,\n heartbeatEnabled: false,\n skills: { total: 0, eligible: 0 },\n };\n }\n\n if (stats.status === \"fulfilled\") state.activityStats = stats.value;\n if (projects.status === \"fulfilled\") {\n state.projectCount = projects.value.length;\n state.activeProject = projects.value.find((p) => p.is_active) || null;\n }\n if (activity.status === \"fulfilled\") state.recentActivity = activity.value;\n if (session.status === \"fulfilled\" && session.value) state.sessionInfo = session.value;\n}\n\nexport async function compactSession(state: DashboardState): Promise<void> {\n if (!confirm(\"Compact the agent's conversation context? This will summarize older turns.\")) return;\n try {\n const result = await api.post<{ tokensBefore?: number; tokensAfter?: number; message?: string }>(\"/api/agent/compact\");\n const msg = result.message\n || (result.tokensBefore ? `Compacted: ${result.tokensBefore} → ${result.tokensAfter} tokens` : \"Compaction complete\");\n alert(msg);\n try {\n state.sessionInfo = await api.get<SessionInfo>(\"/api/agent/session\");\n } catch { /* ignore */ }\n } catch (err: any) {\n alert(`Error: ${err.message}`);\n }\n}\n\nexport async function resetSession(state: DashboardState): Promise<void> {\n if (!confirm(\"WARNING: This will reset the agent's entire conversation memory. Are you sure?\")) return;\n if (!confirm(\"This is irreversible. The agent will lose all conversation context. Proceed?\")) return;\n try {\n await api.post(\"/api/agent/reset-session\");\n alert(\"Session has been reset.\");\n try {\n state.sessionInfo = await api.get<SessionInfo>(\"/api/agent/session\");\n } catch { /* ignore */ }\n } catch (err: any) {\n alert(`Error: ${err.message}`);\n }\n}\n\nexport async function triggerManualUpdate(state: DashboardState): Promise<void> {\n try {\n await api.post(\"/api/update\", { version: \"latest\" });\n alert(\"Update triggered. The page will reload in 8 seconds...\");\n setTimeout(() => window.location.reload(), 8000);\n } catch (err: any) {\n alert(`Update failed: ${err.message}`);\n }\n}\n","/**\n * Cron controller — CRUD, validation, history.\n */\n\nimport { api } from \"../api-client.ts\";\nimport type { CronJob, CronHistoryEntry } from \"../types.ts\";\nimport type { CronFormState } from \"../app-defaults.ts\";\nimport { DEFAULT_CRON_FORM } from \"../app-defaults.ts\";\n\nexport type CronState = {\n cronJobs: CronJob[];\n cronLoading: boolean;\n cronForm: CronFormState;\n cronHistory: CronHistoryEntry[];\n cronHistoryJob: string;\n cronHistoryOpen: boolean;\n};\n\nexport async function loadCronJobs(state: CronState): Promise<void> {\n state.cronLoading = true;\n try {\n state.cronJobs = await api.get<CronJob[]>(\"/api/cron/jobs\");\n } catch {\n state.cronJobs = [];\n }\n state.cronLoading = false;\n}\n\nexport async function createCronJob(state: CronState): Promise<void> {\n state.cronLoading = true;\n try {\n const form = state.cronForm;\n await api.post(\"/api/cron/jobs\", {\n name: form.name || \"Untitled\",\n instruction: form.instruction,\n schedule_type: form.scheduleType,\n every: form.scheduleType === \"every\" ? form.every : undefined,\n cron_expression: form.scheduleType === \"cron\" ? form.cronExpression : undefined,\n at: form.scheduleType === \"at\" ? form.at : undefined,\n });\n state.cronForm = { ...DEFAULT_CRON_FORM };\n await loadCronJobs(state);\n } catch (err: any) {\n alert(`Failed to create job: ${err.message}`);\n }\n state.cronLoading = false;\n}\n\nexport async function runCronJob(_state: CronState, jobId: string): Promise<void> {\n try {\n await api.post(`/api/cron/jobs/${jobId}/run`);\n } catch (err: any) {\n alert(`Failed to run job: ${err.message}`);\n }\n}\n\nexport async function deleteCronJob(state: CronState, jobId: string): Promise<void> {\n if (!confirm(\"Delete this cron job?\")) return;\n try {\n await api.del(`/api/cron/jobs/${jobId}`);\n await loadCronJobs(state);\n } catch (err: any) {\n alert(`Failed to delete job: ${err.message}`);\n }\n}\n\nexport async function loadCronHistory(\n state: CronState,\n jobId: string,\n jobName: string,\n): Promise<void> {\n state.cronHistoryJob = jobName;\n state.cronHistoryOpen = true;\n try {\n state.cronHistory = await api.get<CronHistoryEntry[]>(\"/api/cron/history\", {\n jobId,\n limit: \"50\",\n });\n } catch {\n state.cronHistory = [];\n }\n}\n","/**\n * Activity controller — list, search, stats, pagination.\n */\n\nimport { api } from \"../api-client.ts\";\nimport type { ActivityRow, ActivityStats } from \"../types.ts\";\n\nexport type ActivityState = {\n activityList: ActivityRow[];\n activityLoading: boolean;\n activitySearch: string;\n activityStatusFilter: string;\n activityOffset: number;\n activityHasMore: boolean;\n activityDetail: ActivityRow | null;\n activityStats: ActivityStats | null;\n};\n\nexport async function loadActivity(state: ActivityState): Promise<void> {\n state.activityLoading = true;\n state.activityOffset = 0;\n try {\n const params: Record<string, string> = { limit: \"50\", offset: \"0\" };\n if (state.activityStatusFilter) params.status = state.activityStatusFilter;\n\n const [list, stats] = await Promise.allSettled([\n api.get<ActivityRow[]>(\"/api/db/activity\", params),\n api.get<ActivityStats>(\"/api/db/activity/stats\"),\n ]);\n if (list.status === \"fulfilled\") {\n state.activityList = list.value;\n state.activityHasMore = list.value.length >= 50;\n }\n if (stats.status === \"fulfilled\") state.activityStats = stats.value;\n } catch {\n state.activityList = [];\n }\n state.activityLoading = false;\n}\n\nexport async function loadMoreActivity(state: ActivityState): Promise<void> {\n state.activityOffset += 50;\n try {\n const params: Record<string, string> = {\n limit: \"50\",\n offset: String(state.activityOffset),\n };\n if (state.activityStatusFilter) params.status = state.activityStatusFilter;\n\n const more = await api.get<ActivityRow[]>(\"/api/db/activity\", params);\n state.activityList = [...state.activityList, ...more];\n state.activityHasMore = more.length >= 50;\n } catch {\n state.activityHasMore = false;\n }\n}\n\nexport async function searchActivity(state: ActivityState): Promise<void> {\n if (!state.activitySearch.trim()) {\n await loadActivity(state);\n return;\n }\n state.activityLoading = true;\n try {\n state.activityList = await api.get<ActivityRow[]>(\"/api/db/activity/search\", {\n q: state.activitySearch,\n limit: \"50\",\n });\n state.activityHasMore = false;\n } catch {\n state.activityList = [];\n }\n state.activityLoading = false;\n}\n","/**\n * Database controller — Assets + Projects CRUD.\n */\n\nimport { api } from \"../api-client.ts\";\nimport type { AssetRow, ProjectRow } from \"../types.ts\";\n\nexport type AssetsState = {\n assetsList: AssetRow[];\n assetsLoading: boolean;\n assetTypeFilter: string;\n};\n\nexport type ProjectsState = {\n projectsList: ProjectRow[];\n projectsLoading: boolean;\n};\n\nexport async function loadAssets(state: AssetsState): Promise<void> {\n state.assetsLoading = true;\n try {\n state.assetsList = await api.get<AssetRow[]>(\"/api/db/assets\", { limit: \"100\" });\n } catch {\n state.assetsList = [];\n }\n state.assetsLoading = false;\n}\n\nexport async function loadProjects(state: ProjectsState): Promise<void> {\n state.projectsLoading = true;\n try {\n state.projectsList = await api.get<ProjectRow[]>(\"/api/db/projects\", { limit: \"100\" });\n } catch {\n state.projectsList = [];\n }\n state.projectsLoading = false;\n}\n","/**\n * Sessions controller — list session files, view parsed + raw.\n */\n\nimport { api } from \"../api-client.ts\";\nimport type { SessionFile } from \"../types.ts\";\n\nexport type SessionsState = {\n sessionsList: SessionFile[];\n sessionsLoading: boolean;\n sessionDetail: unknown[] | null;\n sessionDetailName: string;\n sessionViewMode: \"parsed\" | \"raw\";\n sessionRawContent: string;\n _sessionPollTimer: ReturnType<typeof setInterval> | null;\n};\n\nexport async function loadSessions(state: SessionsState): Promise<void> {\n state.sessionsLoading = true;\n try {\n const data = await api.get<{ files: SessionFile[] }>(\"/api/sessions/files\");\n state.sessionsList = (data.files || []).map((f) => ({\n name: (f as any).filename || f.name,\n size: (f as any).sizeBytes || f.size,\n modified: (f as any).modifiedAt || f.modified,\n turns: f.turns,\n }));\n } catch {\n state.sessionsList = [];\n }\n state.sessionsLoading = false;\n}\n\nexport async function viewSession(state: SessionsState, name: string): Promise<void> {\n state.sessionDetailName = name;\n state.sessionViewMode = \"parsed\";\n state.sessionRawContent = \"\";\n try {\n const data = await api.get<{ turns: unknown[] }>(`/api/sessions/files/${encodeURIComponent(name)}/parsed`);\n state.sessionDetail = data.turns || (data as unknown as unknown[]);\n } catch {\n state.sessionDetail = [];\n }\n // Start auto-polling\n startSessionPolling(state);\n}\n\nexport async function loadRawSession(state: SessionsState): Promise<void> {\n if (!state.sessionDetailName) return;\n try {\n const raw = await api.getText(`/api/sessions/files/${encodeURIComponent(state.sessionDetailName)}`);\n // Pretty-print JSONL\n const lines = raw.trim().split(\"\\n\");\n const formatted = lines.map((line) => {\n try { return JSON.stringify(JSON.parse(line), null, 2); } catch { return line; }\n }).join(\"\\n---\\n\");\n state.sessionRawContent = formatted;\n } catch {\n state.sessionRawContent = \"Error loading raw content\";\n }\n}\n\nexport function switchSessionView(state: SessionsState, mode: \"parsed\" | \"raw\"): void {\n state.sessionViewMode = mode;\n if (mode === \"raw\" && !state.sessionRawContent) {\n loadRawSession(state);\n }\n}\n\nexport function closeSession(state: SessionsState): void {\n stopSessionPolling(state);\n state.sessionDetail = null;\n state.sessionDetailName = \"\";\n state.sessionRawContent = \"\";\n}\n\nexport function startSessionPolling(state: SessionsState): void {\n stopSessionPolling(state);\n state._sessionPollTimer = setInterval(async () => {\n if (!state.sessionDetailName) return;\n try {\n if (state.sessionViewMode === \"parsed\") {\n const data = await api.get<{ turns: unknown[] }>(`/api/sessions/files/${encodeURIComponent(state.sessionDetailName)}/parsed`);\n state.sessionDetail = data.turns || (data as unknown as unknown[]);\n }\n } catch { /* ignore poll errors */ }\n }, 3000);\n}\n\nexport function stopSessionPolling(state: SessionsState): void {\n if (state._sessionPollTimer) {\n clearInterval(state._sessionPollTimer);\n state._sessionPollTimer = null;\n }\n}\n","/**\n * Workspace controller — file listing, read, write.\n */\n\nimport { api } from \"../api-client.ts\";\nimport type { WorkspaceFile } from \"../types.ts\";\n\nexport type WorkspaceState = {\n workspaceFiles: WorkspaceFile[];\n workspaceLoading: boolean;\n workspaceEditingFile: string;\n workspaceEditContent: string;\n workspaceSaving: boolean;\n};\n\nexport async function loadWorkspaceFiles(state: WorkspaceState): Promise<void> {\n state.workspaceLoading = true;\n try {\n const data = await api.get<{ files: WorkspaceFile[] }>(\"/api/workspace/files\");\n state.workspaceFiles = data.files || [];\n } catch {\n state.workspaceFiles = [];\n }\n state.workspaceLoading = false;\n}\n\nexport async function editWorkspaceFile(state: WorkspaceState, name: string): Promise<void> {\n state.workspaceEditingFile = name;\n try {\n const data = await api.get<{ content: string }>(`/api/workspace/files/${encodeURIComponent(name)}`);\n state.workspaceEditContent = data.content || \"\";\n } catch {\n state.workspaceEditContent = \"(Failed to load file)\";\n }\n}\n\nexport async function saveWorkspaceFile(state: WorkspaceState): Promise<void> {\n state.workspaceSaving = true;\n try {\n await api.put(`/api/workspace/files/${encodeURIComponent(state.workspaceEditingFile)}`, {\n content: state.workspaceEditContent,\n });\n } catch (err: any) {\n alert(`Failed to save: ${err.message}`);\n }\n state.workspaceSaving = false;\n}\n","/**\n * Skills controller — list skills, show detail.\n */\n\nimport { api } from \"../api-client.ts\";\nimport type { SkillDef, SkillDetail } from \"../types.ts\";\n\nexport type SkillsState = {\n skillsList: SkillDef[];\n skillsLoading: boolean;\n skillDetail: SkillDetail | null;\n skillDetailOpen: boolean;\n skillFileTab: number;\n};\n\nexport async function loadSkills(state: SkillsState): Promise<void> {\n state.skillsLoading = true;\n try {\n const data = await api.get<SkillDef[] | { skills: SkillDef[] }>(\"/api/skills\");\n state.skillsList = Array.isArray(data) ? data : data.skills || [];\n } catch {\n state.skillsList = [];\n }\n state.skillsLoading = false;\n}\n\nexport async function showSkillDetail(state: SkillsState, name: string): Promise<void> {\n state.skillDetailOpen = true;\n state.skillFileTab = 0;\n try {\n const data = await api.get<SkillDetail>(`/api/skills/${encodeURIComponent(name)}`);\n state.skillDetail = data;\n } catch {\n state.skillDetail = null;\n }\n}\n\nexport function closeSkillDetail(state: SkillsState): void {\n state.skillDetailOpen = false;\n state.skillDetail = null;\n state.skillFileTab = 0;\n}\n","/**\n * Config controller — load config, env vars with CRUD, self-update.\n */\n\nimport { api } from \"../api-client.ts\";\nimport type { EnvVariable } from \"../types.ts\";\n\nexport type ConfigState = {\n configData: Record<string, unknown>;\n configLoading: boolean;\n envVars: EnvVariable[];\n envLoading: boolean;\n envRevealedKeys: Record<string, string>;\n envModalOpen: boolean;\n envModalKey: string;\n envModalValue: string;\n envModalEditing: boolean;\n updating: boolean;\n updateResult: string;\n};\n\nexport async function loadConfig(state: ConfigState): Promise<void> {\n state.configLoading = true;\n try {\n state.configData = await api.get<Record<string, unknown>>(\"/api/config\");\n } catch {\n state.configData = {};\n }\n state.configLoading = false;\n}\n\nexport async function loadEnv(state: ConfigState): Promise<void> {\n state.envLoading = true;\n try {\n const data = await api.get<Record<string, unknown>>(\"/api/env\");\n // Convert to EnvVariable array\n const vars: EnvVariable[] = [];\n if (Array.isArray(data)) {\n // If API returns array format\n for (const v of data) {\n vars.push({ key: (v as any).key, value: (v as any).value || \"\", source: (v as any).source || \"user\" });\n }\n } else if (data && typeof data === \"object\") {\n // If API returns object format { KEY: value } or { variables: [...] }\n if ((data as any).variables && Array.isArray((data as any).variables)) {\n for (const v of (data as any).variables) {\n vars.push({ key: v.key, value: v.value || \"\", source: v.source || \"user\" });\n }\n } else {\n for (const [key, value] of Object.entries(data)) {\n vars.push({ key, value: String(value || \"\"), source: isSystemEnv(key) ? \"platform\" : \"user\" });\n }\n }\n }\n state.envVars = vars;\n } catch {\n state.envVars = [];\n }\n state.envLoading = false;\n}\n\nexport async function revealEnvValue(state: ConfigState, key: string): Promise<void> {\n if (state.envRevealedKeys[key]) {\n // Toggle off\n const next = { ...state.envRevealedKeys };\n delete next[key];\n state.envRevealedKeys = next;\n return;\n }\n try {\n const data = await api.get<{ value: string }>(`/api/env/${encodeURIComponent(key)}`);\n state.envRevealedKeys = { ...state.envRevealedKeys, [key]: data.value || String(data) };\n // Auto-hide after 10s\n setTimeout(() => {\n const next = { ...state.envRevealedKeys };\n delete next[key];\n state.envRevealedKeys = next;\n }, 10000);\n } catch {\n // Fallback — just show the stored value\n }\n}\n\nexport function openEnvModal(state: ConfigState): void {\n state.envModalOpen = true;\n state.envModalKey = \"\";\n state.envModalValue = \"\";\n state.envModalEditing = false;\n}\n\nexport function editEnvModal(state: ConfigState, key: string): void {\n const v = state.envVars.find((e) => e.key === key);\n state.envModalOpen = true;\n state.envModalKey = key;\n state.envModalValue = v?.value || \"\";\n state.envModalEditing = true;\n}\n\nexport function closeEnvModal(state: ConfigState): void {\n state.envModalOpen = false;\n state.envModalKey = \"\";\n state.envModalValue = \"\";\n state.envModalEditing = false;\n}\n\nexport async function saveEnvVariable(state: ConfigState): Promise<void> {\n const key = state.envModalKey.trim().toUpperCase();\n const value = state.envModalValue;\n if (!key || !/^[A-Z0-9_]+$/.test(key)) {\n alert(\"Key must be uppercase letters, numbers, and underscores only\");\n return;\n }\n try {\n if (state.envModalEditing) {\n await api.put(`/api/env/${encodeURIComponent(key)}`, { value });\n } else {\n await api.post(\"/api/env\", { key, value });\n }\n closeEnvModal(state);\n await loadEnv(state);\n } catch (err: any) {\n alert(`Error: ${err.message}`);\n }\n}\n\nexport async function deleteEnvVariable(state: ConfigState, key: string): Promise<void> {\n if (!confirm(`Delete environment variable \"${key}\"?`)) return;\n try {\n await api.del(`/api/env/${encodeURIComponent(key)}`);\n await loadEnv(state);\n } catch (err: any) {\n alert(`Error: ${err.message}`);\n }\n}\n\nexport async function selfUpdate(state: ConfigState): Promise<void> {\n state.updating = true;\n state.updateResult = \"\";\n try {\n const result = await api.post<{ stdout?: string; message?: string }>(\"/api/update\", { version: \"latest\" });\n state.updateResult = result.stdout || result.message || \"Update triggered. The executor will restart.\";\n } catch (err: any) {\n state.updateResult = `Error: ${err.message}`;\n }\n state.updating = false;\n}\n\nfunction isSystemEnv(key: string): boolean {\n const system = [\n \"ANTHROPIC_API_KEY\", \"SUPABASE_URL\", \"SUPABASE_KEY\", \"SUPABASE_SERVICE_ROLE_KEY\",\n \"USER_ID\", \"SANDBOX_ID\", \"NODE_ENV\", \"PORT\", \"OPENAI_API_KEY\",\n \"S3_BUCKET\", \"S3_ACCESS_KEY\", \"S3_SECRET_KEY\", \"S3_ENDPOINT\",\n ];\n return system.includes(key);\n}\n","/**\n * Logs controller — SSE streaming, initial load, filtering.\n */\n\nimport { api } from \"../api-client.ts\";\n\nexport type LogsState = {\n logEntries: unknown[];\n logStreaming: boolean;\n logFilter: string;\n logComponentFilter: string;\n logComponents: string[];\n logStream: { close: () => void } | null;\n};\n\nexport async function loadInitialLogs(state: LogsState): Promise<void> {\n try {\n const params: Record<string, string> = { limit: \"200\" };\n if (state.logComponentFilter) params.component = state.logComponentFilter;\n if (state.logFilter) params.level = state.logFilter;\n const data = await api.get<unknown[]>(\"/api/logs\", params);\n if (Array.isArray(data)) {\n state.logEntries = data;\n // Build component options from data\n const comps = new Set<string>();\n for (const entry of data) {\n const comp = (entry as any)?.component;\n if (comp) comps.add(comp);\n }\n state.logComponents = Array.from(comps).sort();\n }\n } catch {\n // Logs endpoint may not exist — that's OK, streaming will work\n }\n}\n\nexport function startLogStream(state: LogsState): void {\n // Close existing stream first\n if (state.logStream) {\n state.logStream.close();\n state.logStream = null;\n }\n state.logStreaming = true;\n state.logStream = api.streamLogs({\n onLog: (entry) => {\n // Add component to known list\n const comp = (entry as any)?.component;\n if (comp && !state.logComponents.includes(comp)) {\n state.logComponents = [...state.logComponents, comp].sort();\n }\n // Filter by component and level\n if (state.logComponentFilter) {\n const entryComp = (entry as any)?.component || \"\";\n if (entryComp !== state.logComponentFilter) return;\n }\n if (state.logFilter) {\n const level = ((entry as any)?.level || \"\").toLowerCase();\n if (state.logFilter === \"error\" && level !== \"error\" && level !== \"fatal\") return;\n if (state.logFilter === \"warn\" && level !== \"warn\" && level !== \"error\" && level !== \"fatal\") return;\n if (state.logFilter === \"info\" && level !== \"info\") return;\n if (state.logFilter === \"debug\" && level !== \"debug\") return;\n }\n // Prepend newest entries (like old HTML), keep max 500\n state.logEntries = [entry, ...state.logEntries.slice(0, 499)];\n },\n onError: () => {\n state.logStreaming = false;\n },\n });\n}\n\nexport function stopLogStream(state: LogsState): void {\n state.logStream?.close();\n state.logStream = null;\n state.logStreaming = false;\n}\n","/**\n * App settings — tab switching, theme, URL sync.\n * Adapted from OpenClaw's app-settings.ts pattern.\n */\n\nimport type { Tab } from \"./navigation.ts\";\nimport { pathForTab, tabFromPath } from \"./navigation.ts\";\nimport { resolveTheme, type ThemeMode, type ResolvedTheme } from \"./theme.ts\";\nimport { saveSettings, type UiSettings } from \"./storage.ts\";\nimport { applyThemeToDocument } from \"./app-lifecycle.ts\";\n\n// Controller imports — each tab loads its own data\nimport { loadDashboard } from \"./controllers/dashboard.ts\";\nimport { loadCronJobs } from \"./controllers/cron.ts\";\nimport { loadActivity } from \"./controllers/activity.ts\";\nimport { loadAssets, loadProjects } from \"./controllers/db.ts\";\nimport { loadSessions, stopSessionPolling } from \"./controllers/sessions.ts\";\nimport { loadWorkspaceFiles } from \"./controllers/workspace.ts\";\nimport { loadSkills } from \"./controllers/skills.ts\";\nimport { loadConfig, loadEnv } from \"./controllers/config.ts\";\nimport { startLogStream, loadInitialLogs, stopLogStream } from \"./controllers/logs.ts\";\n\nexport type SettingsHost = {\n settings: UiSettings;\n tab: Tab;\n theme: ThemeMode;\n themeResolved: ResolvedTheme;\n};\n\nexport function setTab(host: SettingsHost, next: Tab): void {\n const prev = host.tab;\n if (next === prev) return;\n host.tab = next;\n\n // Cleanup when leaving tabs\n if (prev === \"sessions\") stopSessionPolling(host as any);\n if (prev === \"logs\") stopLogStream(host as any);\n\n // Update URL\n const path = pathForTab(next);\n history.pushState(null, \"\", path);\n\n // Load data for the new tab\n refreshActiveTab(host as any);\n}\n\nexport function setTheme(host: SettingsHost, next: ThemeMode): void {\n host.theme = next;\n host.themeResolved = resolveTheme(next);\n applyThemeToDocument(host.themeResolved);\n host.settings = { ...host.settings, theme: next };\n saveSettings(host.settings);\n}\n\nexport function onPopState(host: SettingsHost): void {\n const tab = tabFromPath(window.location.pathname);\n if (tab && tab !== host.tab) {\n host.tab = tab;\n refreshActiveTab(host as any);\n }\n}\n\nexport async function refreshActiveTab(host: any): Promise<void> {\n switch (host.tab as Tab) {\n case \"dashboard\":\n await loadDashboard(host);\n break;\n case \"cron\":\n await loadCronJobs(host);\n break;\n case \"activity\":\n await loadActivity(host);\n break;\n case \"assets\":\n await loadAssets(host);\n break;\n case \"projects\":\n await loadProjects(host);\n break;\n case \"sessions\":\n await loadSessions(host);\n break;\n case \"workspace\":\n await loadWorkspaceFiles(host);\n break;\n case \"skills\":\n await loadSkills(host);\n break;\n case \"config\":\n await loadConfig(host);\n await loadEnv(host);\n break;\n case \"logs\":\n // Auto-start live streaming (default ON like old HTML)\n await loadInitialLogs(host);\n startLogStream(host);\n break;\n // chat doesn't need eager loading\n }\n}\n","/**\n * App lifecycle — connectedCallback, disconnectedCallback, updated.\n * Adapted from OpenClaw's app-lifecycle.ts pattern.\n */\n\nimport type { Tab } from \"./navigation.ts\";\nimport { tabFromPath } from \"./navigation.ts\";\nimport { resolveTheme } from \"./theme.ts\";\nimport type { UiSettings } from \"./storage.ts\";\nimport type { ThemeMode, ResolvedTheme } from \"./theme.ts\";\nimport { loadStatus } from \"./controllers/dashboard.ts\";\nimport { refreshActiveTab } from \"./app-settings.ts\";\n\nexport type LifecycleHost = {\n settings: UiSettings;\n tab: Tab;\n theme: ThemeMode;\n themeResolved: ResolvedTheme;\n serverStatus: unknown;\n logStream: { close: () => void } | null;\n popStateHandler: (() => void) | null;\n _sessionPollTimer: ReturnType<typeof setInterval> | null;\n\n // Methods the host must provide\n requestUpdate(): void;\n};\n\nexport function handleConnected(host: LifecycleHost): void {\n // Apply theme from settings\n host.theme = host.settings.theme;\n host.themeResolved = resolveTheme(host.theme);\n applyThemeToDocument(host.themeResolved);\n\n // Resolve initial tab from URL\n const urlTab = tabFromPath(window.location.pathname);\n if (urlTab) host.tab = urlTab;\n\n // Load initial data\n loadStatus(host as any);\n refreshActiveTab(host as any);\n}\n\nexport function handleDisconnected(host: LifecycleHost): void {\n // Clean up log stream\n host.logStream?.close();\n host.logStream = null;\n\n // Clean up session polling\n if (host._sessionPollTimer) {\n clearInterval(host._sessionPollTimer);\n host._sessionPollTimer = null;\n }\n\n // Remove popstate listener\n if (host.popStateHandler) {\n window.removeEventListener(\"popstate\", host.popStateHandler);\n host.popStateHandler = null;\n }\n}\n\nexport function applyThemeToDocument(resolved: ResolvedTheme): void {\n document.documentElement.setAttribute(\"data-theme\", resolved);\n}\n","/**\n * Chat controller — send messages, handle SSE streaming with interleaved\n * text + tool cards (matches old single-page HTML behavior).\n */\n\nimport { api } from \"../api-client.ts\";\nimport type { ToolStartEvent, ToolEndEvent, DoneEvent } from \"../api-client.ts\";\n\n/** A tool card shown during streaming */\nexport type ToolCard = {\n id: string;\n name: string;\n args?: string;\n status: \"running\" | \"done\" | \"error\";\n result?: string;\n durationMs?: number;\n};\n\n/** An item in the streaming flow — either text or a tool card */\nexport type FlowItem =\n | { type: \"text\"; content: string }\n | { type: \"tool\"; card: ToolCard };\n\n/** A completed chat message */\nexport type ChatMsg = {\n role: \"user\" | \"assistant\";\n content: string;\n flow?: FlowItem[];\n meta?: { toolCalls?: number; inputTokens?: number; outputTokens?: number; compactionCount?: number };\n};\n\nexport type ChatState = {\n chatMessage: string;\n chatMessages: ChatMsg[];\n chatLoading: boolean;\n chatSending: boolean;\n chatStream: string | null;\n chatStreamFlow: FlowItem[];\n chatCompacting: boolean;\n chatAbort: { abort: () => void } | null;\n chatButtonLabel: string;\n};\n\nexport function isChatBusy(state: ChatState): boolean {\n return state.chatSending || state.chatLoading;\n}\n\nexport async function sendChatMessage(\n state: ChatState,\n messageOverride?: string,\n): Promise<void> {\n const message = messageOverride || state.chatMessage.trim();\n if (!message || isChatBusy(state)) return;\n\n state.chatMessages = [...state.chatMessages, { role: \"user\", content: message }];\n state.chatMessage = \"\";\n state.chatSending = true;\n state.chatStream = \"\";\n state.chatStreamFlow = [{ type: \"text\", content: \"\" }];\n state.chatButtonLabel = \"Thinking...\";\n state.chatCompacting = false;\n\n let toolCount = 0;\n\n state.chatAbort = api.streamChat(message, {\n onDelta: (text) => {\n state.chatStream = (state.chatStream || \"\") + text;\n const flow = [...state.chatStreamFlow];\n const last = flow[flow.length - 1];\n if (last && last.type === \"text\") {\n flow[flow.length - 1] = { type: \"text\", content: last.content + text };\n } else {\n flow.push({ type: \"text\", content: text });\n }\n state.chatStreamFlow = flow;\n },\n\n onToolStart: (data: ToolStartEvent) => {\n toolCount++;\n state.chatButtonLabel = `Tool ${toolCount}...`;\n const card: ToolCard = {\n id: data.toolCallId || `tool-${toolCount}`,\n name: data.name || \"tool\",\n args: data.args ? JSON.stringify(data.args, null, 2) : undefined,\n status: \"running\",\n };\n state.chatStreamFlow = [...state.chatStreamFlow, { type: \"tool\", card }, { type: \"text\", content: \"\" }];\n },\n\n onToolEnd: (data: ToolEndEvent) => {\n const flow = [...state.chatStreamFlow];\n const toolItem = flow.find(\n (f) => f.type === \"tool\" && f.card.id === (data.toolCallId || `tool-${data.index}`),\n ) as { type: \"tool\"; card: ToolCard } | undefined;\n if (toolItem) {\n toolItem.card = {\n ...toolItem.card,\n status: data.isError ? \"error\" : \"done\",\n result: data.result,\n durationMs: data.durationMs,\n };\n }\n state.chatStreamFlow = flow;\n },\n\n onCompactionStart: () => {\n state.chatCompacting = true;\n },\n\n onCompactionEnd: () => {\n state.chatCompacting = false;\n },\n\n onDone: (data: DoneEvent) => {\n const finalText = state.chatStream || data.response || \"\";\n const msg: ChatMsg = {\n role: \"assistant\",\n content: finalText,\n flow: state.chatStreamFlow.filter(\n (f) => !(f.type === \"text\" && !f.content),\n ),\n meta: {\n toolCalls: data.toolCalls || toolCount,\n inputTokens: data.inputTokens,\n outputTokens: data.outputTokens,\n compactionCount: data.compactionCount,\n },\n };\n state.chatMessages = [...state.chatMessages, msg];\n state.chatStream = null;\n state.chatStreamFlow = [];\n state.chatSending = false;\n state.chatAbort = null;\n state.chatButtonLabel = \"\";\n state.chatCompacting = false;\n },\n\n onError: (error) => {\n state.chatMessages = [\n ...state.chatMessages,\n { role: \"assistant\", content: `Error: ${error}` },\n ];\n state.chatStream = null;\n state.chatStreamFlow = [];\n state.chatSending = false;\n state.chatAbort = null;\n state.chatButtonLabel = \"\";\n state.chatCompacting = false;\n },\n });\n}\n\nexport function abortChat(state: ChatState): void {\n state.chatAbort?.abort();\n state.chatStream = null;\n state.chatStreamFlow = [];\n state.chatSending = false;\n state.chatAbort = null;\n state.chatButtonLabel = \"\";\n state.chatCompacting = false;\n}\n","/**\n * App chat — send messages, abort, SSE streaming delegation.\n * Adapted from OpenClaw's app-chat.ts pattern.\n */\n\nimport { sendChatMessage as sendChatInternal, abortChat as abortChatInternal, type ChatState } from \"./controllers/chat.ts\";\n\nexport type ChatHost = ChatState;\n\nexport function isChatBusy(host: ChatHost): boolean {\n return host.chatSending || host.chatLoading;\n}\n\nexport async function handleSendChat(\n host: ChatHost,\n messageOverride?: string,\n): Promise<void> {\n await sendChatInternal(host, messageOverride);\n}\n\nexport function handleAbortChat(host: ChatHost): void {\n abortChatInternal(host);\n}\n","import { html, type TemplateResult } from \"lit\";\n\n// Lucide-style SVG icons\n// All icons use currentColor for stroke\n\nexport const icons = {\n // Navigation icons\n messageSquare: html`\n <svg viewBox=\"0 0 24 24\">\n <path d=\"M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2z\" />\n </svg>\n `,\n barChart: html`\n <svg viewBox=\"0 0 24 24\">\n <line x1=\"12\" x2=\"12\" y1=\"20\" y2=\"10\" />\n <line x1=\"18\" x2=\"18\" y1=\"20\" y2=\"4\" />\n <line x1=\"6\" x2=\"6\" y1=\"20\" y2=\"16\" />\n </svg>\n `,\n link: html`\n <svg viewBox=\"0 0 24 24\">\n <path d=\"M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71\" />\n <path d=\"M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71\" />\n </svg>\n `,\n radio: html`\n <svg viewBox=\"0 0 24 24\">\n <circle cx=\"12\" cy=\"12\" r=\"2\" />\n <path\n d=\"M16.24 7.76a6 6 0 0 1 0 8.49m-8.48-.01a6 6 0 0 1 0-8.49m11.31-2.82a10 10 0 0 1 0 14.14m-14.14 0a10 10 0 0 1 0-14.14\"\n />\n </svg>\n `,\n fileText: html`\n <svg viewBox=\"0 0 24 24\">\n <path d=\"M14.5 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7.5L14.5 2z\" />\n <polyline points=\"14 2 14 8 20 8\" />\n <line x1=\"16\" x2=\"8\" y1=\"13\" y2=\"13\" />\n <line x1=\"16\" x2=\"8\" y1=\"17\" y2=\"17\" />\n <line x1=\"10\" x2=\"8\" y1=\"9\" y2=\"9\" />\n </svg>\n `,\n zap: html`\n <svg viewBox=\"0 0 24 24\"><polygon points=\"13 2 3 14 12 14 11 22 21 10 12 10 13 2\" /></svg>\n `,\n monitor: html`\n <svg viewBox=\"0 0 24 24\">\n <rect width=\"20\" height=\"14\" x=\"2\" y=\"3\" rx=\"2\" />\n <line x1=\"8\" x2=\"16\" y1=\"21\" y2=\"21\" />\n <line x1=\"12\" x2=\"12\" y1=\"17\" y2=\"21\" />\n </svg>\n `,\n settings: html`\n <svg viewBox=\"0 0 24 24\">\n <path\n d=\"M12.22 2h-.44a2 2 0 0 0-2 2v.18a2 2 0 0 1-1 1.73l-.43.25a2 2 0 0 1-2 0l-.15-.08a2 2 0 0 0-2.73.73l-.22.38a2 2 0 0 0 .73 2.73l.15.1a2 2 0 0 1 1 1.72v.51a2 2 0 0 1-1 1.74l-.15.09a2 2 0 0 0-.73 2.73l.22.38a2 2 0 0 0 2.73.73l.15-.08a2 2 0 0 1 2 0l.43.25a2 2 0 0 1 1 1.73V20a2 2 0 0 0 2 2h.44a2 2 0 0 0 2-2v-.18a2 2 0 0 1 1-1.73l.43-.25a2 2 0 0 1 2 0l.15.08a2 2 0 0 0 2.73-.73l.22-.39a2 2 0 0 0-.73-2.73l-.15-.08a2 2 0 0 1-1-1.74v-.5a2 2 0 0 1 1-1.74l.15-.09a2 2 0 0 0 .73-2.73l-.22-.38a2 2 0 0 0-2.73-.73l-.15.08a2 2 0 0 1-2 0l-.43-.25a2 2 0 0 1-1-1.73V4a2 2 0 0 0-2-2z\"\n />\n <circle cx=\"12\" cy=\"12\" r=\"3\" />\n </svg>\n `,\n bug: html`\n <svg viewBox=\"0 0 24 24\">\n <path d=\"m8 2 1.88 1.88\" />\n <path d=\"M14.12 3.88 16 2\" />\n <path d=\"M9 7.13v-1a3.003 3.003 0 1 1 6 0v1\" />\n <path d=\"M12 20c-3.3 0-6-2.7-6-6v-3a4 4 0 0 1 4-4h4a4 4 0 0 1 4 4v3c0 3.3-2.7 6-6 6\" />\n <path d=\"M12 20v-9\" />\n <path d=\"M6.53 9C4.6 8.8 3 7.1 3 5\" />\n <path d=\"M6 13H2\" />\n <path d=\"M3 21c0-2.1 1.7-3.9 3.8-4\" />\n <path d=\"M20.97 5c0 2.1-1.6 3.8-3.5 4\" />\n <path d=\"M22 13h-4\" />\n <path d=\"M17.2 17c2.1.1 3.8 1.9 3.8 4\" />\n </svg>\n `,\n scrollText: html`\n <svg viewBox=\"0 0 24 24\">\n <path d=\"M8 21h12a2 2 0 0 0 2-2v-2H10v2a2 2 0 1 1-4 0V5a2 2 0 1 0-4 0v3h4\" />\n <path d=\"M19 17V5a2 2 0 0 0-2-2H4\" />\n <path d=\"M15 8h-5\" />\n <path d=\"M15 12h-5\" />\n </svg>\n `,\n folder: html`\n <svg viewBox=\"0 0 24 24\">\n <path\n d=\"M20 20a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2h-7.9a2 2 0 0 1-1.69-.9L9.6 3.9A2 2 0 0 0 7.93 3H4a2 2 0 0 0-2 2v13a2 2 0 0 0 2 2Z\"\n />\n </svg>\n `,\n\n // UI icons\n menu: html`\n <svg viewBox=\"0 0 24 24\">\n <line x1=\"4\" x2=\"20\" y1=\"12\" y2=\"12\" />\n <line x1=\"4\" x2=\"20\" y1=\"6\" y2=\"6\" />\n <line x1=\"4\" x2=\"20\" y1=\"18\" y2=\"18\" />\n </svg>\n `,\n x: html`\n <svg viewBox=\"0 0 24 24\">\n <path d=\"M18 6 6 18\" />\n <path d=\"m6 6 12 12\" />\n </svg>\n `,\n check: html`\n <svg viewBox=\"0 0 24 24\"><path d=\"M20 6 9 17l-5-5\" /></svg>\n `,\n arrowDown: html`\n <svg viewBox=\"0 0 24 24\">\n <path d=\"M12 5v14\" />\n <path d=\"m19 12-7 7-7-7\" />\n </svg>\n `,\n copy: html`\n <svg viewBox=\"0 0 24 24\">\n <rect width=\"14\" height=\"14\" x=\"8\" y=\"8\" rx=\"2\" ry=\"2\" />\n <path d=\"M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2\" />\n </svg>\n `,\n search: html`\n <svg viewBox=\"0 0 24 24\">\n <circle cx=\"11\" cy=\"11\" r=\"8\" />\n <path d=\"m21 21-4.3-4.3\" />\n </svg>\n `,\n brain: html`\n <svg viewBox=\"0 0 24 24\">\n <path d=\"M12 5a3 3 0 1 0-5.997.125 4 4 0 0 0-2.526 5.77 4 4 0 0 0 .556 6.588A4 4 0 1 0 12 18Z\" />\n <path d=\"M12 5a3 3 0 1 1 5.997.125 4 4 0 0 1 2.526 5.77 4 4 0 0 1-.556 6.588A4 4 0 1 1 12 18Z\" />\n <path d=\"M15 13a4.5 4.5 0 0 1-3-4 4.5 4.5 0 0 1-3 4\" />\n <path d=\"M17.599 6.5a3 3 0 0 0 .399-1.375\" />\n <path d=\"M6.003 5.125A3 3 0 0 0 6.401 6.5\" />\n <path d=\"M3.477 10.896a4 4 0 0 1 .585-.396\" />\n <path d=\"M19.938 10.5a4 4 0 0 1 .585.396\" />\n <path d=\"M6 18a4 4 0 0 1-1.967-.516\" />\n <path d=\"M19.967 17.484A4 4 0 0 1 18 18\" />\n </svg>\n `,\n book: html`\n <svg viewBox=\"0 0 24 24\">\n <path d=\"M4 19.5v-15A2.5 2.5 0 0 1 6.5 2H20v20H6.5a2.5 2.5 0 0 1 0-5H20\" />\n </svg>\n `,\n loader: html`\n <svg viewBox=\"0 0 24 24\">\n <path d=\"M12 2v4\" />\n <path d=\"m16.2 7.8 2.9-2.9\" />\n <path d=\"M18 12h4\" />\n <path d=\"m16.2 16.2 2.9 2.9\" />\n <path d=\"M12 18v4\" />\n <path d=\"m4.9 19.1 2.9-2.9\" />\n <path d=\"M2 12h4\" />\n <path d=\"m4.9 4.9 2.9 2.9\" />\n </svg>\n `,\n\n // Tool icons\n wrench: html`\n <svg viewBox=\"0 0 24 24\">\n <path\n d=\"M14.7 6.3a1 1 0 0 0 0 1.4l1.6 1.6a1 1 0 0 0 1.4 0l3.77-3.77a6 6 0 0 1-7.94 7.94l-6.91 6.91a2.12 2.12 0 0 1-3-3l6.91-6.91a6 6 0 0 1 7.94-7.94l-3.76 3.76z\"\n />\n </svg>\n `,\n fileCode: html`\n <svg viewBox=\"0 0 24 24\">\n <path d=\"M14.5 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7.5L14.5 2z\" />\n <polyline points=\"14 2 14 8 20 8\" />\n <path d=\"m10 13-2 2 2 2\" />\n <path d=\"m14 17 2-2-2-2\" />\n </svg>\n `,\n edit: html`\n <svg viewBox=\"0 0 24 24\">\n <path d=\"M11 4H4a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7\" />\n <path d=\"M18.5 2.5a2.121 2.121 0 0 1 3 3L12 15l-4 1 1-4 9.5-9.5z\" />\n </svg>\n `,\n penLine: html`\n <svg viewBox=\"0 0 24 24\">\n <path d=\"M12 20h9\" />\n <path d=\"M16.5 3.5a2.121 2.121 0 0 1 3 3L7 19l-4 1 1-4L16.5 3.5z\" />\n </svg>\n `,\n paperclip: html`\n <svg viewBox=\"0 0 24 24\">\n <path\n d=\"m21.44 11.05-9.19 9.19a6 6 0 0 1-8.49-8.49l8.57-8.57A4 4 0 1 1 18 8.84l-8.59 8.57a2 2 0 0 1-2.83-2.83l8.49-8.48\"\n />\n </svg>\n `,\n globe: html`\n <svg viewBox=\"0 0 24 24\">\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\n <path d=\"M12 2a14.5 14.5 0 0 0 0 20 14.5 14.5 0 0 0 0-20\" />\n <path d=\"M2 12h20\" />\n </svg>\n `,\n image: html`\n <svg viewBox=\"0 0 24 24\">\n <rect width=\"18\" height=\"18\" x=\"3\" y=\"3\" rx=\"2\" ry=\"2\" />\n <circle cx=\"9\" cy=\"9\" r=\"2\" />\n <path d=\"m21 15-3.086-3.086a2 2 0 0 0-2.828 0L6 21\" />\n </svg>\n `,\n smartphone: html`\n <svg viewBox=\"0 0 24 24\">\n <rect width=\"14\" height=\"20\" x=\"5\" y=\"2\" rx=\"2\" ry=\"2\" />\n <path d=\"M12 18h.01\" />\n </svg>\n `,\n plug: html`\n <svg viewBox=\"0 0 24 24\">\n <path d=\"M12 22v-5\" />\n <path d=\"M9 8V2\" />\n <path d=\"M15 8V2\" />\n <path d=\"M18 8v5a4 4 0 0 1-4 4h-4a4 4 0 0 1-4-4V8Z\" />\n </svg>\n `,\n circle: html`\n <svg viewBox=\"0 0 24 24\"><circle cx=\"12\" cy=\"12\" r=\"10\" /></svg>\n `,\n puzzle: html`\n <svg viewBox=\"0 0 24 24\">\n <path\n d=\"M19.439 7.85c-.049.322.059.648.289.878l1.568 1.568c.47.47.706 1.087.706 1.704s-.235 1.233-.706 1.704l-1.611 1.611a.98.98 0 0 1-.837.276c-.47-.07-.802-.48-.968-.925a2.501 2.501 0 1 0-3.214 3.214c.446.166.855.497.925.968a.979.979 0 0 1-.276.837l-1.61 1.61a2.404 2.404 0 0 1-1.705.707 2.402 2.402 0 0 1-1.704-.706l-1.568-1.568a1.026 1.026 0 0 0-.877-.29c-.493.074-.84.504-1.02.968a2.5 2.5 0 1 1-3.237-3.237c.464-.18.894-.527.967-1.02a1.026 1.026 0 0 0-.289-.877l-1.568-1.568A2.402 2.402 0 0 1 1.998 12c0-.617.236-1.234.706-1.704L4.23 8.77c.24-.24.581-.353.917-.303.515.076.874.54 1.02 1.02a2.5 2.5 0 1 0 3.237-3.237c-.48-.146-.944-.505-1.02-1.02a.98.98 0 0 1 .303-.917l1.526-1.526A2.402 2.402 0 0 1 11.998 2c.617 0 1.234.236 1.704.706l1.568 1.568c.23.23.556.338.877.29.493-.074.84-.504 1.02-.968a2.5 2.5 0 1 1 3.236 3.236c-.464.18-.894.527-.967 1.02Z\"\n />\n </svg>\n `,\n // CoStar-specific icons\n activity: html`\n <svg viewBox=\"0 0 24 24\">\n <path d=\"M22 12h-4l-3 9L9 3l-3 9H2\" />\n </svg>\n `,\n database: html`\n <svg viewBox=\"0 0 24 24\">\n <ellipse cx=\"12\" cy=\"5\" rx=\"9\" ry=\"3\" />\n <path d=\"M3 5V19A9 3 0 0 0 21 19V5\" />\n <path d=\"M3 12A9 3 0 0 0 21 12\" />\n </svg>\n `,\n package: html`\n <svg viewBox=\"0 0 24 24\">\n <path d=\"m7.5 4.27 9 5.15\" />\n <path d=\"M21 8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73l7 4a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16Z\" />\n <path d=\"m3.3 7 8.7 5 8.7-5\" />\n <path d=\"M12 22V12\" />\n </svg>\n `,\n play: html`\n <svg viewBox=\"0 0 24 24\"><polygon points=\"5 3 19 12 5 21 5 3\" /></svg>\n `,\n trash: html`\n <svg viewBox=\"0 0 24 24\">\n <path d=\"M3 6h18\" />\n <path d=\"M19 6v14c0 1-1 2-2 2H7c-1 0-2-1-2-2V6\" />\n <path d=\"M8 6V4c0-1 1-2 2-2h4c1 0 2 1 2 2v2\" />\n </svg>\n `,\n clock: html`\n <svg viewBox=\"0 0 24 24\">\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\n <polyline points=\"12 6 12 12 16 14\" />\n </svg>\n `,\n send: html`\n <svg viewBox=\"0 0 24 24\">\n <path d=\"m22 2-7 20-4-9-9-4Z\" />\n <path d=\"M22 2 11 13\" />\n </svg>\n `,\n sun: html`\n <svg viewBox=\"0 0 24 24\">\n <circle cx=\"12\" cy=\"12\" r=\"4\" />\n <path d=\"M12 2v2\" /><path d=\"M12 20v2\" />\n <path d=\"m4.93 4.93 1.41 1.41\" /><path d=\"m17.66 17.66 1.41 1.41\" />\n <path d=\"M2 12h2\" /><path d=\"M20 12h2\" />\n <path d=\"m6.34 17.66-1.41 1.41\" /><path d=\"m19.07 4.93-1.41 1.41\" />\n </svg>\n `,\n moon: html`\n <svg viewBox=\"0 0 24 24\"><path d=\"M12 3a6 6 0 0 0 9 9 9 9 0 1 1-9-9Z\" /></svg>\n `,\n chevronDown: html`\n <svg viewBox=\"0 0 24 24\"><path d=\"m6 9 6 6 6-6\" /></svg>\n `,\n chevronRight: html`\n <svg viewBox=\"0 0 24 24\"><path d=\"m9 18 6-6-6-6\" /></svg>\n `,\n refresh: html`\n <svg viewBox=\"0 0 24 24\">\n <path d=\"M3 12a9 9 0 0 1 9-9 9.75 9.75 0 0 1 6.74 2.74L21 8\" />\n <path d=\"M21 3v5h-5\" />\n <path d=\"M21 12a9 9 0 0 1-9 9 9.75 9.75 0 0 1-6.74-2.74L3 16\" />\n <path d=\"M8 16H3v5\" />\n </svg>\n `,\n terminal: html`\n <svg viewBox=\"0 0 24 24\">\n <polyline points=\"4 17 10 11 4 5\" />\n <line x1=\"12\" x2=\"20\" y1=\"19\" y2=\"19\" />\n </svg>\n `,\n home: html`\n <svg viewBox=\"0 0 24 24\">\n <path d=\"M3 9l9-7 9 7v11a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z\" />\n <polyline points=\"9 22 9 12 15 12 15 22\" />\n </svg>\n `,\n save: html`\n <svg viewBox=\"0 0 24 24\">\n <path d=\"M19 21H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h11l5 5v11a2 2 0 0 1-2 2z\" />\n <polyline points=\"17 21 17 13 7 13 7 21\" />\n <polyline points=\"7 3 7 8 15 8\" />\n </svg>\n `,\n plus: html`\n <svg viewBox=\"0 0 24 24\">\n <path d=\"M5 12h14\" />\n <path d=\"M12 5v14\" />\n </svg>\n `,\n externalLink: html`\n <svg viewBox=\"0 0 24 24\">\n <path d=\"M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6\" />\n <polyline points=\"15 3 21 3 21 9\" />\n <line x1=\"10\" x2=\"21\" y1=\"14\" y2=\"3\" />\n </svg>\n `,\n stop: html`\n <svg viewBox=\"0 0 24 24\"><rect width=\"14\" height=\"14\" x=\"5\" y=\"5\" rx=\"2\" /></svg>\n `,\n} as const;\n\nexport type IconName = keyof typeof icons;\n\nexport function icon(name: IconName): TemplateResult {\n return icons[name];\n}\n\nexport function renderIcon(name: IconName, className = \"nav-item__icon\"): TemplateResult {\n return html`<span class=${className} aria-hidden=\"true\">${icons[name]}</span>`;\n}\n\n// Legacy function for compatibility\nexport function renderEmojiIcon(\n iconContent: string | TemplateResult,\n className: string,\n): TemplateResult {\n return html`<span class=${className} aria-hidden=\"true\">${iconContent}</span>`;\n}\n\nexport function setEmojiIcon(target: HTMLElement | null, icon: string): void {\n if (!target) {\n return;\n }\n target.textContent = icon;\n}\n","/**\n * Render helpers — topbar, nav sidebar, theme toggle.\n * Adapted from OpenClaw's app-render.helpers.ts pattern.\n */\n\nimport { html, nothing, type TemplateResult } from \"lit\";\nimport type { CoStarApp } from \"./app.ts\";\nimport { TAB_GROUPS, type Tab, iconForTab, titleForTab, labelForGroup } from \"./navigation.ts\";\nimport { renderIcon } from \"./icons.ts\";\n\nexport function renderTopbar(state: CoStarApp): TemplateResult {\n return html`\n <header class=\"topbar\">\n <div class=\"topbar__left\">\n <span class=\"topbar__brand\">CoStar</span>\n ${state.serverStatus?.version\n ? html`<span class=\"topbar__version\">v${state.serverStatus.version}</span>`\n : nothing}\n </div>\n <div class=\"topbar__right\">\n ${renderThemeToggle(state)}\n <span class=\"topbar__status ${state.serverStatus?.status === \"running\" ? \"status--ok\" : \"\"}\">\n ${state.serverStatus?.status || \"...\"}\n </span>\n </div>\n </header>\n `;\n}\n\nexport function renderNav(state: CoStarApp): TemplateResult {\n return html`\n <nav class=\"nav\">\n ${TAB_GROUPS.map(\n (group) => html`\n <div class=\"nav-group\">\n <div class=\"nav-group__label\">${labelForGroup(group.label)}</div>\n ${group.tabs.map((t) => renderNavItem(state, t))}\n </div>\n `,\n )}\n </nav>\n `;\n}\n\nfunction renderNavItem(state: CoStarApp, tab: Tab): TemplateResult {\n return html`\n <button\n class=\"nav-item ${state.tab === tab ? \"active\" : \"\"}\"\n @click=${() => state.setTab(tab)}\n >\n ${renderIcon(iconForTab(tab))}\n <span>${titleForTab(tab)}</span>\n </button>\n `;\n}\n\nfunction renderThemeToggle(state: CoStarApp): TemplateResult {\n return html`\n <div class=\"theme-toggle\" style=\"display: flex; gap: 4px; margin-right: 12px;\">\n <button\n class=\"btn btn-sm ${state.theme === \"light\" ? \"btn-primary\" : \"\"}\"\n @click=${() => state.setTheme(\"light\")}\n title=\"Light theme\"\n >\n ${renderIcon(\"sun\", \"btn-icon\")}\n </button>\n <button\n class=\"btn btn-sm ${state.theme === \"dark\" ? \"btn-primary\" : \"\"}\"\n @click=${() => state.setTheme(\"dark\")}\n title=\"Dark theme\"\n >\n ${renderIcon(\"moon\", \"btn-icon\")}\n </button>\n <button\n class=\"btn btn-sm ${state.theme === \"system\" ? \"btn-primary\" : \"\"}\"\n @click=${() => state.setTheme(\"system\")}\n title=\"System theme\"\n >\n ${renderIcon(\"monitor\", \"btn-icon\")}\n </button>\n </div>\n `;\n}\n","/**\n * Formatting utilities — self-contained (no OpenClaw parent imports).\n */\n\nexport function formatMs(ms?: number | null): string {\n if (!ms && ms !== 0) return \"n/a\";\n return new Date(ms).toLocaleString();\n}\n\nexport function formatRelativeTimestamp(isoOrMs: string | number): string {\n const date = typeof isoOrMs === \"number\" ? new Date(isoOrMs) : new Date(isoOrMs);\n const now = Date.now();\n const diffMs = now - date.getTime();\n\n if (diffMs < 0) return \"just now\";\n if (diffMs < 60_000) return \"just now\";\n if (diffMs < 3_600_000) {\n const mins = Math.floor(diffMs / 60_000);\n return `${mins}m ago`;\n }\n if (diffMs < 86_400_000) {\n const hours = Math.floor(diffMs / 3_600_000);\n return `${hours}h ago`;\n }\n if (diffMs < 604_800_000) {\n const days = Math.floor(diffMs / 86_400_000);\n return `${days}d ago`;\n }\n return date.toLocaleDateString();\n}\n\nexport function formatDurationHuman(ms: number): string {\n if (ms < 1000) return `${ms}ms`;\n if (ms < 60_000) return `${(ms / 1000).toFixed(1)}s`;\n if (ms < 3_600_000) {\n const mins = Math.floor(ms / 60_000);\n const secs = Math.round((ms % 60_000) / 1000);\n return secs > 0 ? `${mins}m ${secs}s` : `${mins}m`;\n }\n const hours = Math.floor(ms / 3_600_000);\n const mins = Math.round((ms % 3_600_000) / 60_000);\n return mins > 0 ? `${hours}h ${mins}m` : `${hours}h`;\n}\n\nexport function formatList(values?: Array<string | null | undefined>): string {\n if (!values || values.length === 0) return \"none\";\n return values.filter((v): v is string => Boolean(v && v.trim())).join(\", \");\n}\n\nexport function clampText(value: string, max = 120): string {\n if (value.length <= max) return value;\n return `${value.slice(0, Math.max(0, max - 1))}…`;\n}\n\nexport function truncateText(value: string, max: number) {\n if (value.length <= max) {\n return { text: value, truncated: false, total: value.length };\n }\n return {\n text: value.slice(0, Math.max(0, max)),\n truncated: true,\n total: value.length,\n };\n}\n\nexport function toNumber(value: string, fallback: number): number {\n const n = Number(value);\n return Number.isFinite(n) ? n : fallback;\n}\n\nexport function parseList(input: string): string[] {\n return input\n .split(/[,\\n]/)\n .map((v) => v.trim())\n .filter((v) => v.length > 0);\n}\n\nexport function escapeHtml(str: string): string {\n return str\n .replace(/&/g, \"&amp;\")\n .replace(/</g, \"&lt;\")\n .replace(/>/g, \"&gt;\")\n .replace(/\"/g, \"&quot;\");\n}\n","import { html, nothing } from \"lit\";\nimport type { CoStarApp } from \"../app.ts\";\nimport { formatRelativeTimestamp, formatDurationHuman } from \"../format.ts\";\n\nexport function renderDashboard(app: CoStarApp) {\n const s = app.serverStatus;\n const sr = app.statusResponse;\n const vi = app.versionInfo;\n\n return html`\n <div class=\"dashboard-grid\" style=\"animation: dashboard-enter 0.4s var(--ease-out) both;\">\n <!-- Update Banner -->\n ${vi ? html`\n <div class=\"update-banner\">\n <span>v${vi.version}</span>\n <span style=\"color:var(--text-secondary);\">&#8226;</span>\n <span style=\"color:var(--text-secondary);\">Auto-update: ${vi.autoUpdateEnabled ? \"enabled\" : \"disabled\"}</span>\n ${vi.updateInProgress\n ? html`<span class=\"tag tag-yellow\" style=\"margin-left:8px;\">Updating...</span>`\n : html`<button class=\"btn btn-sm\" style=\"margin-left:8px;\" @click=${() => app.triggerManualUpdate()}>Update Now</button>`}\n </div>\n ` : nothing}\n\n <!-- Stat Cards (matching old HTML: Uptime, Cron, Skills, Memory) -->\n <div class=\"stats-row\">\n ${renderStatCard(\"Uptime\",\n s?.uptime ? formatDurationHuman(s.uptime * 1000) : \"--\",\n sr?.agent?.platform ? `${sr.agent.platform} / ${sr.agent.arch}` : \"\")}\n ${renderStatCard(\"Cron Jobs\",\n s ? String(s.cronJobs) : \"--\",\n s?.cronRunning ? \"Scheduler running\" : \"Scheduler stopped\")}\n ${renderStatCard(\"Skills\",\n s?.skills ? `${s.skills.eligible} eligible` : \"--\",\n s?.skills ? `${s.skills.total} total` : \"\")}\n ${renderStatCard(\"Memory\",\n sr?.agent?.memoryUsage ? `${(sr.agent.memoryUsage.heapUsed / 1024 / 1024).toFixed(0)} MB` : \"--\",\n sr?.agent?.memoryUsage ? `${(sr.agent.memoryUsage.heapTotal / 1024 / 1024).toFixed(0)} MB total heap` : \"\")}\n </div>\n\n <!-- System Info -->\n <div class=\"card\">\n <div class=\"card-header\"><h3>System Info</h3></div>\n <div class=\"config-list\" style=\"padding:16px;\">\n ${configRow(\"Version\", vi ? `v${vi.version}` : \"--\")}\n ${configRow(\"Auto-Update\", vi ? (vi.autoUpdateEnabled ? \"Enabled\" : \"Disabled\") : \"--\")}\n ${configRow(\"User ID\", s?.userId || \"--\")}\n ${configRow(\"Workspace\", sr?.agent?.workspaceDir || \"--\")}\n ${configRow(\"Node\", sr?.agent?.nodeVersion || vi?.nodeVersion || \"--\")}\n ${configRow(\"Platform\", sr?.agent?.platform ? `${sr.agent.platform} (${sr.agent.arch})` : vi?.platform || \"--\")}\n ${configRow(\"Heartbeat\", s?.heartbeatEnabled ? \"Enabled\" : \"Disabled\")}\n ${configRow(\"Cron Status\", s?.cronRunning ? \"Running\" : \"Stopped\")}\n ${sr?.cron?.lastCheckAt ? configRow(\"Last Cron Check\", new Date(sr.cron.lastCheckAt).toLocaleString()) : nothing}\n </div>\n </div>\n\n <!-- Agent Session -->\n <div class=\"card\">\n <div class=\"card-header\">\n <h3>Agent Session</h3>\n </div>\n <div class=\"config-list\" style=\"padding:16px;\">\n ${app.sessionInfo ? html`\n ${configRow(\"Session\", app.sessionInfo.exists ? \"Active\" : \"No session\")}\n ${app.sessionInfo.size ? configRow(\"Size\", formatSize(app.sessionInfo.size)) : nothing}\n ${app.sessionInfo.conversationLength !== undefined ? configRow(\"Conversation Length\", `${app.sessionInfo.conversationLength} turns`) : nothing}\n ${app.sessionInfo.isBusy !== undefined ? configRow(\"Status\", app.sessionInfo.isBusy ? html`<span class=\"tag tag-yellow\">Busy</span>` : html`<span class=\"tag tag-green\">Idle</span>`) : nothing}\n ` : html`\n ${configRow(\"Session\", \"Loading...\")}\n `}\n </div>\n <div style=\"padding:0 16px 16px;display:flex;gap:8px;\">\n <button class=\"btn btn-sm\" @click=${() => app.compactSession()}\n ?disabled=${app.sessionInfo?.isBusy}>Compact Context</button>\n <button class=\"btn btn-sm btn-danger\" @click=${() => app.resetSession()}\n ?disabled=${app.sessionInfo?.isBusy}>Reset Session</button>\n </div>\n </div>\n\n <!-- Recent Activity -->\n ${app.recentActivity.length > 0\n ? html`\n <div class=\"card\">\n <div class=\"card-header\"><h3>Recent Activity</h3></div>\n <div class=\"table-wrap\">\n <table>\n <thead>\n <tr><th>Time</th><th>Request</th><th>Status</th><th>Executor</th></tr>\n </thead>\n <tbody>\n ${app.recentActivity.slice(0, 5).map(\n (a) => html`\n <tr>\n <td style=\"white-space:nowrap;\">${formatRelativeTimestamp(a.created_at)}</td>\n <td style=\"max-width:400px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;\">\n ${(a.request || \"\").substring(0, 80)}\n </td>\n <td>\n <span class=\"tag ${a.status === \"completed\" ? \"tag-green\" : a.status === \"failed\" ? \"tag-red\" : \"tag-yellow\"}\">\n ${a.status}\n </span>\n </td>\n <td>\n <span class=\"tag ${a.executor === \"client\" ? \"tag-blue\" : \"tag-muted\"}\">${a.executor}</span>\n </td>\n </tr>\n `,\n )}\n </tbody>\n </table>\n </div>\n </div>\n `\n : nothing}\n </div>\n `;\n}\n\nfunction renderStatCard(title: string, value: string, subtitle: string) {\n return html`\n <div class=\"stat-card\">\n <div class=\"stat-label\">${title}</div>\n <div class=\"stat-value\">${value}</div>\n ${subtitle ? html`<div class=\"stat-sub\">${subtitle}</div>` : nothing}\n </div>\n `;\n}\n\nfunction configRow(key: string, value: unknown) {\n return html`\n <div class=\"config-row\">\n <span class=\"config-key\">${key}</span>\n <span class=\"config-value\">${value}</span>\n </div>\n `;\n}\n\nfunction formatSize(bytes: number): string {\n if (!bytes) return \"--\";\n if (bytes < 1024) return `${bytes}B`;\n if (bytes < 1024 * 1024) return `${(bytes / 1024).toFixed(1)}KB`;\n return `${(bytes / (1024 * 1024)).toFixed(1)}MB`;\n}\n","import { html, nothing } from \"lit\";\nimport type { CoStarApp } from \"../app.ts\";\nimport type { ChatMsg, FlowItem, ToolCard } from \"../controllers/chat.ts\";\nimport { escapeHtml } from \"../format.ts\";\n\nexport function renderChat(app: CoStarApp) {\n return html`\n <div class=\"chat-container\">\n <div class=\"chat-messages\" id=\"chat-messages\">\n ${app.chatMessages.length === 0 && !app.chatSending\n ? html`\n <div class=\"empty-state\">\n <div class=\"empty-icon\">&#128172;</div>\n <p>Send a message to start chatting with your CoStar agent.</p>\n </div>\n `\n : nothing}\n\n ${app.chatMessages.map((msg) => renderMessage(msg))}\n\n ${app.chatSending\n ? renderStreamingMessage(app)\n : nothing}\n </div>\n\n ${app.chatCompacting\n ? html`<div class=\"compaction-banner active\">\n <span class=\"compaction-icon\">&#9881;</span>\n <span class=\"compaction-text\">Compacting conversation context...</span>\n </div>`\n : nothing}\n\n <div class=\"chat-input-wrap\">\n <input\n type=\"text\"\n class=\"input\"\n style=\"flex:1;\"\n placeholder=\"Type a message...\"\n .value=${app.chatMessage}\n @input=${(e: Event) => { app.chatMessage = (e.target as HTMLInputElement).value; }}\n @keydown=${(e: KeyboardEvent) => {\n if (e.key === \"Enter\" && !e.shiftKey) {\n e.preventDefault();\n app.handleSendChat();\n }\n }}\n ?disabled=${app.chatSending}\n />\n ${app.chatSending\n ? html`<button class=\"btn btn-danger\" @click=${() => app.abortChat()}>\n ${app.chatButtonLabel || \"Stop\"}\n </button>`\n : html`<button class=\"btn btn-primary\" @click=${() => app.handleSendChat()} ?disabled=${!app.chatMessage.trim()}>Send</button>`}\n </div>\n </div>\n `;\n}\n\nfunction renderStreamingMessage(app: CoStarApp) {\n return html`\n <div class=\"chat-msg assistant\">\n <div class=\"avatar\">C</div>\n <div class=\"msg-content\">\n <div class=\"msg-role\">CoStar</div>\n <div class=\"msg-flow\">\n ${app.chatStreamFlow.map((item) =>\n item.type === \"text\"\n ? html`<div class=\"msg-text-segment streaming-cursor\" .innerHTML=${formatMessage(item.content)}></div>`\n : renderToolCard(item.card, true),\n )}\n </div>\n </div>\n </div>\n `;\n}\n\nfunction renderMessage(msg: ChatMsg) {\n const isUser = msg.role === \"user\";\n if (isUser) {\n return html`\n <div class=\"chat-msg user\">\n <div class=\"avatar\">U</div>\n <div class=\"msg-content\">\n <div class=\"msg-role\">You</div>\n <div>${escapeHtml(msg.content)}</div>\n </div>\n </div>\n `;\n }\n\n // Assistant message — render with flow (interleaved text + tools)\n const hasFlow = msg.flow && msg.flow.length > 0;\n\n return html`\n <div class=\"chat-msg assistant\">\n <div class=\"avatar\">C</div>\n <div class=\"msg-content\">\n <div class=\"msg-role\">CoStar</div>\n ${hasFlow\n ? html`<div class=\"msg-flow\">\n ${msg.flow!.map((item) =>\n item.type === \"text\"\n ? html`<div class=\"msg-text-segment\" .innerHTML=${formatMessage(item.content)}></div>`\n : renderToolCard(item.card, false),\n )}\n </div>`\n : html`<div .innerHTML=${formatMessage(msg.content)}></div>`}\n ${msg.meta && (msg.meta.toolCalls || msg.meta.inputTokens)\n ? html`<div class=\"chat-meta\">\n ${msg.meta.toolCalls ? html`<span>&#128295; ${msg.meta.toolCalls} tool${msg.meta.toolCalls > 1 ? \"s\" : \"\"}</span>` : nothing}\n ${msg.meta.inputTokens ? html`<span>&#8594; ${msg.meta.inputTokens.toLocaleString()} in</span>` : nothing}\n ${msg.meta.outputTokens ? html`<span>&#8592; ${msg.meta.outputTokens.toLocaleString()} out</span>` : nothing}\n ${msg.meta.compactionCount ? html`<span>&#128230; ${msg.meta.compactionCount} compaction${msg.meta.compactionCount > 1 ? \"s\" : \"\"}</span>` : nothing}\n </div>`\n : nothing}\n </div>\n </div>\n `;\n}\n\nfunction renderToolCard(card: ToolCard, streaming: boolean) {\n const iconHtml = card.status === \"running\" ? \"&#9881;\" : card.status === \"error\" ? \"&#10060;\" : \"&#9989;\";\n const statusClass = card.status === \"error\" ? \"error\" : card.status === \"done\" ? \"success\" : \"\";\n const durationStr = card.durationMs ? ` (${formatDurationShort(card.durationMs)})` : \"\";\n const statusText = card.status === \"running\" ? \"running...\" : card.status === \"error\" ? `error${durationStr}` : `done${durationStr}`;\n\n return html`\n <div class=\"tool-card\" @click=${(e: Event) => {\n const el = (e.currentTarget as HTMLElement);\n el.classList.toggle(\"expanded\");\n }}>\n <div class=\"tool-card-header\">\n <span class=\"tool-icon ${card.status === \"running\" ? \"running\" : \"\"}\" .innerHTML=${iconHtml}></span>\n <span class=\"tool-name\">${card.name}</span>\n <span class=\"tool-status ${statusClass}\">${statusText}</span>\n <span class=\"tool-chevron\">&#9654;</span>\n </div>\n <div class=\"tool-card-body\">\n ${card.args\n ? html`<div class=\"tool-section\">\n <div class=\"tool-section-label\">Arguments</div>\n <pre>${card.args}</pre>\n </div>`\n : nothing}\n ${card.result\n ? html`<div class=\"tool-section\">\n <div class=\"tool-section-label\">Result</div>\n <pre>${card.result}</pre>\n </div>`\n : nothing}\n </div>\n </div>\n `;\n}\n\nfunction formatDurationShort(ms: number): string {\n if (ms < 1000) return `${ms}ms`;\n if (ms < 60000) return `${(ms / 1000).toFixed(1)}s`;\n return `${Math.floor(ms / 60000)}m ${Math.floor((ms % 60000) / 1000)}s`;\n}\n\nfunction formatMessage(text: string): string {\n if (!text) return \"\";\n let h = escapeHtml(text);\n h = h.replace(/```(\\w*)\\n([\\s\\S]*?)```/g,\n '<pre style=\"background:var(--bg-primary, var(--secondary));border:1px solid var(--border);border-radius:8px;padding:10px;margin:8px 0;overflow-x:auto;font-family:var(--mono);font-size:12px;\">$2</pre>');\n h = h.replace(/`([^`]+)`/g,\n '<code style=\"background:var(--bg-primary, var(--secondary));padding:2px 6px;border-radius:4px;font-family:var(--mono);font-size:12px;\">$1</code>');\n h = h.replace(/\\*\\*([^*]+)\\*\\*/g, '<strong>$1</strong>');\n h = h.replace(/\\n/g, '<br>');\n return h;\n}\n","import { html, nothing } from \"lit\";\nimport type { CoStarApp } from \"../app.ts\";\nimport { formatRelativeTimestamp } from \"../format.ts\";\nimport type { CronJob } from \"../types.ts\";\n\nexport function renderCron(app: CoStarApp) {\n return html`\n <div class=\"page-content\">\n <!-- Create Form -->\n <div class=\"card\">\n <div class=\"card-header\">\n <h3>Create Cron Job</h3>\n </div>\n <div class=\"card-body\" style=\"padding: 16px;\">\n <div class=\"form-grid\">\n <div class=\"form-field\">\n <label>Name</label>\n <input type=\"text\" class=\"input\" placeholder=\"Job name\" .value=${app.cronForm.name}\n @input=${(e: Event) => { app.cronForm = { ...app.cronForm, name: (e.target as HTMLInputElement).value }; }} />\n </div>\n <div class=\"form-field\">\n <label>Schedule Type</label>\n <select class=\"input\" .value=${app.cronForm.scheduleType}\n @change=${(e: Event) => { app.cronForm = { ...app.cronForm, scheduleType: (e.target as HTMLSelectElement).value as any }; }}>\n <option value=\"every\">Every (interval)</option>\n <option value=\"cron\">Cron expression</option>\n <option value=\"at\">At (one-time)</option>\n </select>\n </div>\n ${app.cronForm.scheduleType === \"every\"\n ? html`\n <div class=\"form-field\">\n <label>Interval (e.g. 30m, 2h, 1d)</label>\n <input type=\"text\" class=\"input\" placeholder=\"30m\" .value=${app.cronForm.every}\n @input=${(e: Event) => { app.cronForm = { ...app.cronForm, every: (e.target as HTMLInputElement).value }; }} />\n </div>\n `\n : app.cronForm.scheduleType === \"cron\"\n ? html`\n <div class=\"form-field\">\n <label>Cron Expression</label>\n <input type=\"text\" class=\"input\" placeholder=\"0 */6 * * *\" .value=${app.cronForm.cronExpression}\n @input=${(e: Event) => { app.cronForm = { ...app.cronForm, cronExpression: (e.target as HTMLInputElement).value }; }} />\n </div>\n `\n : html`\n <div class=\"form-field\">\n <label>Run At (ISO datetime)</label>\n <input type=\"datetime-local\" class=\"input\" .value=${app.cronForm.at}\n @input=${(e: Event) => { app.cronForm = { ...app.cronForm, at: (e.target as HTMLInputElement).value }; }} />\n </div>\n `}\n <div class=\"form-field\" style=\"grid-column: 1 / -1;\">\n <label>Instruction</label>\n <textarea class=\"input\" rows=\"3\" placeholder=\"What should the agent do?\"\n .value=${app.cronForm.instruction}\n @input=${(e: Event) => { app.cronForm = { ...app.cronForm, instruction: (e.target as HTMLTextAreaElement).value }; }}></textarea>\n </div>\n <div>\n <button class=\"btn btn-primary\" @click=${() => app.createCronJob()} ?disabled=${app.cronLoading}>\n Create Job\n </button>\n </div>\n </div>\n </div>\n </div>\n\n <!-- Jobs List -->\n <div class=\"card\">\n <div class=\"card-header\">\n <h3>Cron Jobs</h3>\n <button class=\"btn btn-sm\" @click=${() => app.loadCronJobs()}>Refresh</button>\n </div>\n ${app.cronLoading\n ? html`<div class=\"loading-center\"><div class=\"spinner\"></div></div>`\n : app.cronJobs.length === 0\n ? html`<div class=\"empty-state\"><div class=\"empty-icon\">⏰</div><p>No cron jobs configured</p></div>`\n : html`\n <div class=\"table-wrap\">\n <table>\n <thead>\n <tr><th>Name</th><th>Schedule</th><th>Status</th><th>Next Run</th><th>Instruction</th><th>Actions</th></tr>\n </thead>\n <tbody>\n ${app.cronJobs.map((job) => renderCronRow(app, job))}\n </tbody>\n </table>\n </div>\n `}\n </div>\n </div>\n `;\n}\n\nfunction renderCronRow(app: CoStarApp, job: CronJob) {\n const schedule = formatSchedule(job);\n const statusTag =\n job.status === \"active\" || job.enabled\n ? html`<span class=\"tag tag-green\">Active</span>`\n : job.status === \"completed\"\n ? html`<span class=\"tag tag-blue\">Done</span>`\n : html`<span class=\"tag tag-muted\">Paused</span>`;\n\n return html`\n <tr>\n <td><strong>${job.name}</strong></td>\n <td><code>${schedule}</code></td>\n <td>${statusTag}</td>\n <td>${job.next_run_at ? formatRelativeTimestamp(job.next_run_at) : \"--\"}</td>\n <td style=\"max-width: 300px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap;\">\n ${(job.instruction || \"\").substring(0, 80)}\n </td>\n <td style=\"white-space: nowrap;\">\n <button class=\"btn btn-sm btn-primary\" @click=${() => app.runCronJob(job.id)}>Run</button>\n <button class=\"btn btn-sm\" @click=${() => app.showCronHistory(job.id, job.name)}>History</button>\n <button class=\"btn btn-sm btn-danger\" @click=${() => app.deleteCronJob(job.id)}>Delete</button>\n </td>\n </tr>\n `;\n}\n\nfunction formatSchedule(job: CronJob): string {\n if (job.cron_expression) return job.cron_expression;\n if (job.schedule_type === \"every\" && job.schedule_value) {\n const mins = Math.round(job.schedule_value / 60000);\n return mins >= 60 ? `every ${Math.round(mins / 60)}h` : `every ${mins}m`;\n }\n if (job.schedule_at) return `at ${new Date(job.schedule_at).toLocaleString()}`;\n return \"--\";\n}\n","import { html, nothing } from \"lit\";\nimport type { CoStarApp } from \"../app.ts\";\nimport { formatRelativeTimestamp, formatDurationHuman, clampText } from \"../format.ts\";\nimport type { ActivityRow } from \"../types.ts\";\n\nexport function renderActivity(app: CoStarApp) {\n return html`\n <div class=\"page-content\">\n <!-- Stats Bar -->\n ${app.activityStats\n ? html`\n <div class=\"stats-row\">\n <div class=\"stat-card\"><div class=\"stat-label\">Total</div><div class=\"stat-value\">${app.activityStats.total}</div></div>\n <div class=\"stat-card\"><div class=\"stat-label\">Completed</div><div class=\"stat-value\" style=\"color: var(--ok);\">${app.activityStats.completed}</div></div>\n <div class=\"stat-card\"><div class=\"stat-label\">Failed</div><div class=\"stat-value\" style=\"color: var(--danger);\">${app.activityStats.failed}</div></div>\n <div class=\"stat-card\"><div class=\"stat-label\">Avg Duration</div><div class=\"stat-value\">${formatDurationHuman(app.activityStats.avgDuration || 0)}</div></div>\n </div>\n `\n : nothing}\n\n <!-- Toolbar -->\n <div class=\"toolbar\">\n <input type=\"text\" class=\"input\" placeholder=\"Search activity...\"\n style=\"max-width: 300px;\"\n .value=${app.activitySearch}\n @input=${(e: Event) => { app.activitySearch = (e.target as HTMLInputElement).value; }}\n @keydown=${(e: KeyboardEvent) => { if (e.key === \"Enter\") app.searchActivity(); }} />\n <select class=\"input\" style=\"max-width: 150px;\"\n .value=${app.activityStatusFilter}\n @change=${(e: Event) => { app.activityStatusFilter = (e.target as HTMLSelectElement).value; app.loadActivity(); }}>\n <option value=\"\">All Status</option>\n <option value=\"completed\">Completed</option>\n <option value=\"pending\">Pending</option>\n <option value=\"failed\">Failed</option>\n </select>\n <button class=\"btn btn-sm\" @click=${() => app.loadActivity()}>Refresh</button>\n </div>\n\n <!-- Table -->\n <div class=\"card\">\n <div class=\"card-header\">\n <h3>Activity Log</h3>\n </div>\n ${app.activityLoading\n ? html`<div class=\"loading-center\"><div class=\"spinner\"></div></div>`\n : app.activityList.length === 0\n ? html`<div class=\"empty-state\"><div class=\"empty-icon\">📊</div><p>No activity recorded yet</p></div>`\n : html`\n <div class=\"table-wrap\">\n <table>\n <thead>\n <tr><th>Time</th><th>Request</th><th>Status</th><th>Executor</th><th>Duration</th></tr>\n </thead>\n <tbody>\n ${app.activityList.map((a) => renderActivityRow(app, a))}\n </tbody>\n </table>\n </div>\n ${app.activityHasMore\n ? html`<div style=\"padding: 16px; text-align: center;\"><button class=\"btn btn-sm\" @click=${() => app.loadMoreActivity()}>Load More</button></div>`\n : nothing}\n `}\n </div>\n </div>\n\n <!-- Detail Modal -->\n ${app.activityDetail\n ? html`\n <div class=\"modal-overlay open\" @click=${(e: Event) => { if (e.target === e.currentTarget) app.activityDetail = null; }}>\n <div class=\"modal\" style=\"max-width: 800px;\">\n <div class=\"modal-header\">\n <h3>Activity Detail</h3>\n <button class=\"btn btn-sm\" @click=${() => { app.activityDetail = null; }}>Close</button>\n </div>\n <div class=\"modal-body\">\n <div class=\"config-list\">\n <div class=\"config-row\"><span class=\"config-key\">ID</span><span class=\"config-value\"><code>${app.activityDetail.id}</code></span></div>\n <div class=\"config-row\"><span class=\"config-key\">Status</span><span class=\"config-value\">${app.activityDetail.status}</span></div>\n <div class=\"config-row\"><span class=\"config-key\">Executor</span><span class=\"config-value\">${app.activityDetail.executor}</span></div>\n <div class=\"config-row\"><span class=\"config-key\">Created</span><span class=\"config-value\">${new Date(app.activityDetail.created_at).toLocaleString()}</span></div>\n ${app.activityDetail.duration ? html`<div class=\"config-row\"><span class=\"config-key\">Duration</span><span class=\"config-value\">${formatDurationHuman(app.activityDetail.duration)}</span></div>` : nothing}\n ${app.activityDetail.keywords ? html`<div class=\"config-row\"><span class=\"config-key\">Keywords</span><span class=\"config-value\">${app.activityDetail.keywords}</span></div>` : nothing}\n </div>\n <h4 style=\"margin-top: 16px;\">Request</h4>\n <pre class=\"code-block\">${app.activityDetail.request || \"(empty)\"}</pre>\n ${app.activityDetail.response ? html`<h4 style=\"margin-top: 16px;\">Response</h4><pre class=\"code-block\">${app.activityDetail.response}</pre>` : nothing}\n ${app.activityDetail.error ? html`<h4 style=\"margin-top: 16px; color: var(--danger);\">Error</h4><pre class=\"code-block\" style=\"color: var(--danger);\">${app.activityDetail.error}</pre>` : nothing}\n </div>\n </div>\n </div>\n `\n : nothing}\n `;\n}\n\nfunction renderActivityRow(app: CoStarApp, a: ActivityRow) {\n return html`\n <tr style=\"cursor: pointer;\" @click=${() => { app.activityDetail = a; }}>\n <td style=\"white-space: nowrap;\">${formatRelativeTimestamp(a.created_at)}</td>\n <td style=\"max-width: 400px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap;\">\n ${clampText(a.request || \"\", 80)}\n </td>\n <td>\n <span class=\"tag ${a.status === \"completed\" ? \"tag-green\" : a.status === \"failed\" ? \"tag-red\" : \"tag-yellow\"}\">${a.status}</span>\n </td>\n <td>\n <span class=\"tag ${a.executor === \"client\" ? \"tag-blue\" : \"tag-muted\"}\">${a.executor}</span>\n </td>\n <td>${a.duration ? formatDurationHuman(a.duration) : \"--\"}</td>\n </tr>\n `;\n}\n","import { html, nothing } from \"lit\";\nimport type { CoStarApp } from \"../app.ts\";\nimport { formatRelativeTimestamp, clampText } from \"../format.ts\";\n\nexport function renderAssets(app: CoStarApp) {\n const filtered = app.assetTypeFilter\n ? app.assetsList.filter((a) => a.type === app.assetTypeFilter)\n : app.assetsList;\n\n return html`\n <div class=\"page-content\">\n <div class=\"toolbar\">\n <select class=\"input\" style=\"max-width: 150px;\"\n .value=${app.assetTypeFilter}\n @change=${(e: Event) => { app.assetTypeFilter = (e.target as HTMLSelectElement).value; }}>\n <option value=\"\">All Types</option>\n <option value=\"image\">Image</option>\n <option value=\"document\">Document</option>\n <option value=\"audio\">Audio</option>\n <option value=\"video\">Video</option>\n <option value=\"code\">Code</option>\n <option value=\"other\">Other</option>\n </select>\n <button class=\"btn btn-sm\" @click=${() => app.loadAssets()}>Refresh</button>\n <span class=\"muted-text\" style=\"margin-left: auto;\">${filtered.length} assets</span>\n </div>\n\n <div class=\"card\">\n <div class=\"card-header\"><h3>Assets</h3></div>\n ${app.assetsLoading\n ? html`<div class=\"loading-center\"><div class=\"spinner\"></div></div>`\n : filtered.length === 0\n ? html`<div class=\"empty-state\"><div class=\"empty-icon\">📦</div><p>No assets tracked yet</p></div>`\n : html`\n <div class=\"table-wrap\">\n <table>\n <thead><tr><th>Name</th><th>Type</th><th>Path / URL</th><th>Created</th></tr></thead>\n <tbody>\n ${filtered.map(\n (a) => html`\n <tr>\n <td>\n <strong>${a.name}</strong>\n ${a.description ? html`<br /><span class=\"muted-text\">${clampText(a.description, 60)}</span>` : nothing}\n </td>\n <td><span class=\"tag tag-blue\">${a.type || \"unknown\"}</span></td>\n <td style=\"max-width: 300px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap;\">\n ${a.remote_url || a.local_file_path || \"--\"}\n </td>\n <td style=\"white-space: nowrap;\">${formatRelativeTimestamp(a.created_at)}</td>\n </tr>\n `,\n )}\n </tbody>\n </table>\n </div>\n `}\n </div>\n </div>\n `;\n}\n","import { html, nothing } from \"lit\";\nimport type { CoStarApp } from \"../app.ts\";\nimport { formatRelativeTimestamp, clampText } from \"../format.ts\";\n\nexport function renderProjects(app: CoStarApp) {\n return html`\n <div class=\"page-content\">\n <div class=\"card\">\n <div class=\"card-header\">\n <h3>Projects</h3>\n <button class=\"btn btn-sm\" @click=${() => app.loadProjects()}>Refresh</button>\n </div>\n ${app.projectsLoading\n ? html`<div class=\"loading-center\"><div class=\"spinner\"></div></div>`\n : app.projectsList.length === 0\n ? html`<div class=\"empty-state\"><div class=\"empty-icon\">📂</div><p>No projects yet</p></div>`\n : html`\n <div class=\"table-wrap\">\n <table>\n <thead><tr><th>Name</th><th>Description</th><th>Path</th><th>Status</th><th>Created</th></tr></thead>\n <tbody>\n ${app.projectsList.map(\n (p) => html`\n <tr style=\"${p.is_active ? \"border-left: 3px solid var(--ok);\" : \"\"}\">\n <td><strong>${p.name}</strong></td>\n <td style=\"max-width: 300px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap;\">\n ${clampText(p.description || \"\", 80)}\n </td>\n <td><code>${p.project_path || \"--\"}</code></td>\n <td>\n ${p.is_active\n ? html`<span class=\"tag tag-green\">Active</span>`\n : html`<span class=\"tag tag-muted\">Inactive</span>`}\n </td>\n <td style=\"white-space: nowrap;\">${formatRelativeTimestamp(p.created_at)}</td>\n </tr>\n `,\n )}\n </tbody>\n </table>\n </div>\n `}\n </div>\n </div>\n `;\n}\n","import { html, nothing } from \"lit\";\nimport type { CoStarApp } from \"../app.ts\";\nimport { formatRelativeTimestamp } from \"../format.ts\";\nimport { escapeHtml } from \"../format.ts\";\n\nexport function renderSessions(app: CoStarApp) {\n // If viewing a session, show detail view (replaces list like old HTML)\n if (app.sessionDetail) {\n return renderSessionViewer(app);\n }\n\n // List view\n return html`\n <div class=\"page-content\">\n <div class=\"card\">\n <div class=\"card-header\">\n <h3>Session Files</h3>\n <button class=\"btn btn-sm\" @click=${() => app.loadSessions()}>Refresh</button>\n </div>\n ${app.sessionsLoading\n ? html`<div class=\"loading-center\"><div class=\"spinner\"></div></div>`\n : app.sessionsList.length === 0\n ? html`<div class=\"empty-state\"><div class=\"empty-icon\">&#128221;</div><p>No session files found</p></div>`\n : html`\n <div class=\"table-wrap\">\n <table>\n <thead><tr><th>File</th><th>Size</th><th>Modified</th><th>Actions</th></tr></thead>\n <tbody>\n ${app.sessionsList.map(\n (s) => html`\n <tr>\n <td><code>${s.name}</code></td>\n <td>${formatSize(s.size)}</td>\n <td>${s.modified ? formatRelativeTimestamp(s.modified) : \"--\"}</td>\n <td>\n <button class=\"btn btn-sm\" @click=${() => app.viewSession(s.name)}>View</button>\n </td>\n </tr>\n `,\n )}\n </tbody>\n </table>\n </div>\n `}\n </div>\n </div>\n `;\n}\n\nfunction renderSessionViewer(app: CoStarApp) {\n const turns = app.sessionDetail || [];\n const isParsed = app.sessionViewMode === \"parsed\";\n\n return html`\n <div class=\"page-content\">\n <div class=\"card\">\n <div class=\"card-header\">\n <div style=\"display:flex;align-items:center;gap:12px;\">\n <button class=\"btn btn-sm\" @click=${() => app.closeSession()}>&#8592; Back</button>\n <h3 style=\"margin:0;\">${app.sessionDetailName}</h3>\n <span class=\"tag tag-muted\" style=\"font-size:11px;\">${turns.length} entries</span>\n </div>\n <div style=\"display:flex;gap:8px;\">\n <button class=\"btn btn-sm ${isParsed ? \"btn-primary\" : \"\"}\" @click=${() => app.switchSessionView(\"parsed\")}>Conversation</button>\n <button class=\"btn btn-sm ${!isParsed ? \"btn-primary\" : \"\"}\" @click=${() => app.switchSessionView(\"raw\")}>Raw JSON</button>\n </div>\n </div>\n <div class=\"card-body\" style=\"padding:0;\">\n ${isParsed\n ? renderParsedView(turns)\n : renderRawView(app)}\n </div>\n </div>\n </div>\n `;\n}\n\nfunction renderParsedView(turns: unknown[]) {\n if (!turns || turns.length === 0) {\n return html`<div style=\"padding:20px;text-align:center;color:var(--text-secondary);\">No conversation data</div>`;\n }\n\n // Check if turns have the rich format (with turn numbers, timestamps, etc.)\n const isRichFormat = turns.length > 0 && (turns[0] as any)?.turnNumber !== undefined;\n\n if (isRichFormat) {\n return html`\n <div class=\"session-parsed\" style=\"max-height:600px;overflow-y:auto;padding:16px;\">\n ${turns.map((turn: any) => renderRichTurn(turn))}\n </div>\n `;\n }\n\n // Simple format — just messages\n return html`\n <div class=\"session-parsed\" style=\"max-height:600px;overflow-y:auto;padding:16px;\">\n ${turns.map((msg: any, i: number) => renderSimpleMessage(msg, i))}\n </div>\n `;\n}\n\nfunction renderRichTurn(turn: any) {\n const isOld = turn.isOld || turn.outOfContext;\n const isCompaction = turn.type === \"compaction\" || turn.compaction;\n\n if (isCompaction) {\n return html`\n <div class=\"session-compaction\">\n <div class=\"session-compaction-header\">&#128230; Context Compaction</div>\n ${turn.timestamp ? html`<div style=\"font-size:11px;color:var(--text-secondary);\">${new Date(turn.timestamp).toLocaleString()}</div>` : nothing}\n ${turn.tokensBefore ? html`<div style=\"font-size:12px;\">Tokens: ${turn.tokensBefore} &#8594; ${turn.tokensAfter || \"?\"}</div>` : nothing}\n ${turn.summary ? html`<div style=\"font-size:12px;margin-top:4px;\">${(turn.summary || \"\").substring(0, 500)}</div>` : nothing}\n </div>\n `;\n }\n\n return html`\n <div class=\"session-turn ${isOld ? \"session-turn-old\" : \"\"}\">\n <div class=\"session-turn-header\">\n <span class=\"session-turn-num\">Turn ${turn.turnNumber || \"?\"}</span>\n ${turn.timestamp ? html`<span class=\"session-turn-time\">${new Date(turn.timestamp).toLocaleString()}</span>` : nothing}\n ${turn.isHeartbeat ? html`<span class=\"tag tag-blue\" style=\"font-size:10px;\">HB</span>` : nothing}\n ${isOld ? html`<span class=\"tag tag-muted\" style=\"font-size:10px;\">OLD</span>` : nothing}\n </div>\n ${turn.userMessage ? html`\n <div class=\"session-turn-user\">\n <strong>User:</strong> ${(turn.userMessage || \"\").substring(0, 120)}${(turn.userMessage || \"\").length > 120 ? \"...\" : \"\"}\n </div>\n ` : nothing}\n ${turn.model ? html`\n <div class=\"session-turn-meta\">\n ${turn.model ? html`<span>${turn.model}</span>` : nothing}\n ${turn.inputTokens ? html`<span>${turn.inputTokens.toLocaleString()} in</span>` : nothing}\n ${turn.outputTokens ? html`<span>${turn.outputTokens.toLocaleString()} out</span>` : nothing}\n ${turn.cost ? html`<span>$${turn.cost.toFixed(4)}</span>` : nothing}\n </div>\n ` : nothing}\n ${turn.toolCalls ? html`\n <div class=\"session-turn-tools\">&#128295; ${turn.toolCalls} tool call${turn.toolCalls > 1 ? \"s\" : \"\"}</div>\n ` : nothing}\n ${turn.assistantMessages && turn.assistantMessages.length > 0 ? html`\n ${turn.assistantMessages.map((m: string) => html`\n <div class=\"session-turn-assistant\">${(m || \"\").substring(0, 300)}${(m || \"\").length > 300 ? \"...\" : \"\"}</div>\n `)}\n ` : turn.assistantMessage ? html`\n <div class=\"session-turn-assistant\">${(turn.assistantMessage || \"\").substring(0, 300)}${(turn.assistantMessage || \"\").length > 300 ? \"...\" : \"\"}</div>\n ` : nothing}\n </div>\n `;\n}\n\nfunction renderSimpleMessage(msg: any, index: number) {\n const role = msg.role || \"unknown\";\n const isUser = role === \"user\";\n const isAssistant = role === \"assistant\";\n const content = typeof msg.content === \"string\" ? msg.content : JSON.stringify(msg.content, null, 2);\n\n return html`\n <div class=\"session-msg session-msg-${role}\">\n <div class=\"session-msg-role\">${isUser ? \"User\" : isAssistant ? \"Assistant\" : \"System\"}</div>\n <div class=\"session-msg-content\">${(content || \"\").substring(0, 500)}${(content || \"\").length > 500 ? \"...\" : \"\"}</div>\n </div>\n `;\n}\n\nfunction renderRawView(app: CoStarApp) {\n if (!app.sessionRawContent) {\n return html`<div class=\"loading-center\" style=\"padding:20px;\"><div class=\"spinner\"></div></div>`;\n }\n return html`\n <pre class=\"session-raw\">${app.sessionRawContent}</pre>\n `;\n}\n\nfunction formatSize(bytes: number): string {\n if (!bytes) return \"--\";\n if (bytes < 1024) return `${bytes}B`;\n if (bytes < 1024 * 1024) return `${(bytes / 1024).toFixed(1)}KB`;\n return `${(bytes / (1024 * 1024)).toFixed(1)}MB`;\n}\n","import { html, nothing } from \"lit\";\nimport type { CoStarApp } from \"../app.ts\";\nimport { formatRelativeTimestamp } from \"../format.ts\";\n\nexport function renderWorkspace(app: CoStarApp) {\n return html`\n <div class=\"page-content\">\n <div class=\"card\">\n <div class=\"card-header\">\n <h3>Workspace Files</h3>\n <button class=\"btn btn-sm\" @click=${() => app.loadWorkspaceFiles()}>Refresh</button>\n </div>\n ${app.workspaceLoading\n ? html`<div class=\"loading-center\"><div class=\"spinner\"></div></div>`\n : app.workspaceFiles.length === 0\n ? html`<div class=\"empty-state\"><div class=\"empty-icon\">📁</div><p>No workspace files</p></div>`\n : html`\n <div class=\"table-wrap\">\n <table>\n <thead><tr><th>File</th><th>Size</th><th>Modified</th><th>Actions</th></tr></thead>\n <tbody>\n ${app.workspaceFiles.map(\n (f) => html`\n <tr class=\"${app.workspaceEditingFile === f.name ? \"row-active\" : \"\"}\">\n <td><code>${f.name}</code></td>\n <td>${f.size}B</td>\n <td>${f.modified ? formatRelativeTimestamp(f.modified) : \"--\"}</td>\n <td>\n <button class=\"btn btn-sm\" @click=${() => app.editWorkspaceFile(f.name)}>\n ${app.workspaceEditingFile === f.name ? \"Refresh\" : \"Edit\"}\n </button>\n </td>\n </tr>\n `,\n )}\n </tbody>\n </table>\n </div>\n `}\n </div>\n\n ${app.workspaceEditingFile\n ? html`\n <div class=\"card\">\n <div class=\"card-header\">\n <h3>${app.workspaceEditingFile}</h3>\n <div style=\"display: flex; gap: 8px;\">\n <button class=\"btn btn-sm btn-primary\" @click=${() => app.saveWorkspaceFile()} ?disabled=${app.workspaceSaving}>\n ${app.workspaceSaving ? \"Saving...\" : \"Save\"}\n </button>\n <button class=\"btn btn-sm\" @click=${() => { app.workspaceEditingFile = \"\"; app.workspaceEditContent = \"\"; }}>Close</button>\n </div>\n </div>\n <div class=\"card-body\" style=\"padding: 0;\">\n <textarea\n class=\"workspace-editor\"\n style=\"width: 100%; min-height: 400px; padding: 16px; font-family: var(--mono); font-size: 13px; background: var(--bg); color: var(--text); border: none; resize: vertical;\"\n .value=${app.workspaceEditContent}\n @input=${(e: Event) => { app.workspaceEditContent = (e.target as HTMLTextAreaElement).value; }}\n ></textarea>\n </div>\n </div>\n `\n : nothing}\n </div>\n `;\n}\n","import { html, nothing } from \"lit\";\nimport type { CoStarApp } from \"../app.ts\";\n\nexport function renderSkills(app: CoStarApp) {\n return html`\n <div class=\"page-content\">\n <div class=\"toolbar\">\n <h3 style=\"margin:0;font-size:15px;font-weight:600;\">Skills</h3>\n <button class=\"btn btn-sm\" style=\"margin-left:auto;\" @click=${() => app.loadSkills()}>Refresh</button>\n </div>\n\n ${app.skillsLoading\n ? html`<div class=\"loading-center\"><div class=\"spinner\"></div></div>`\n : app.skillsList.length === 0\n ? html`<div class=\"empty-state\"><div class=\"empty-icon\">&#9889;</div><p>No skills loaded. Add skills to your workspace or managed directory.</p></div>`\n : html`\n <div class=\"skill-grid\">\n ${app.skillsList.map(\n (s: any) => html`\n <div class=\"skill-card\" @click=${() => app.showSkillDetail(s.name)} style=\"cursor:pointer;\">\n <div class=\"skill-header\">\n <span class=\"skill-emoji\">${s.emoji || \"&#128230;\"}</span>\n <span class=\"skill-name\">${s.name}</span>\n </div>\n <div class=\"skill-desc\">${s.description || \"No description\"}</div>\n <div class=\"skill-footer\">\n ${s.eligible !== undefined\n ? s.eligible\n ? html`<span class=\"tag tag-green\">Eligible</span>`\n : html`<span class=\"tag tag-muted\">Inactive</span>`\n : s.enabled\n ? html`<span class=\"tag tag-green\">Enabled</span>`\n : html`<span class=\"tag tag-muted\">Disabled</span>`}\n ${s.source\n ? html`<span class=\"tag tag-blue\">${s.source}</span>`\n : nothing}\n </div>\n </div>\n `,\n )}\n </div>\n `}\n </div>\n\n ${renderSkillModal(app)}\n `;\n}\n\nfunction renderSkillModal(app: CoStarApp) {\n if (!app.skillDetailOpen) return nothing;\n\n const detail = app.skillDetail;\n if (!detail) {\n return html`\n <div class=\"modal-overlay open\" @click=${(e: Event) => { if (e.target === e.currentTarget) app.closeSkillDetail(); }}>\n <div class=\"modal\" style=\"max-width:800px;\">\n <div class=\"loading-center\"><div class=\"spinner\"></div></div>\n </div>\n </div>\n `;\n }\n\n const files = detail.files || [];\n const hasFiles = files.length > 0;\n\n return html`\n <div class=\"modal-overlay open\" @click=${(e: Event) => { if (e.target === e.currentTarget) app.closeSkillDetail(); }}>\n <div class=\"modal\" style=\"max-width:800px;\">\n <div class=\"modal-header\">\n <h3>${detail.emoji || \"&#128230;\"} ${detail.name}</h3>\n <button class=\"btn btn-sm\" @click=${() => app.closeSkillDetail()}>Close</button>\n </div>\n <div class=\"modal-body\">\n ${detail.description\n ? html`<p style=\"margin:0 0 16px;color:var(--text-secondary);\">${detail.description}</p>`\n : nothing}\n\n <div class=\"config-list\">\n ${detail.source\n ? html`<div class=\"config-row\"><span class=\"config-key\">Source</span><span class=\"config-value\">${detail.source}</span></div>`\n : nothing}\n <div class=\"config-row\">\n <span class=\"config-key\">Eligible</span>\n <span class=\"config-value\">\n ${detail.eligible !== undefined\n ? detail.eligible ? html`<span class=\"tag tag-green\">Yes</span>` : html`<span class=\"tag tag-muted\">No</span>`\n : detail.enabled ? html`<span class=\"tag tag-green\">Yes</span>` : html`<span class=\"tag tag-muted\">No</span>`}\n </span>\n </div>\n ${detail.baseDir\n ? html`<div class=\"config-row\"><span class=\"config-key\">Base Directory</span><span class=\"config-value\"><code>${detail.baseDir}</code></span></div>`\n : nothing}\n ${detail.homepage\n ? html`<div class=\"config-row\"><span class=\"config-key\">Homepage</span><span class=\"config-value\"><a href=\"${detail.homepage}\" target=\"_blank\" style=\"color:var(--accent);\">${detail.homepage}</a></span></div>`\n : nothing}\n </div>\n\n ${hasFiles ? html`\n <div style=\"margin-top:16px;\">\n <div class=\"file-tabs\">\n ${files.map((f, i) => html`\n <button class=\"file-tab ${i === app.skillFileTab ? \"active\" : \"\"}\"\n @click=${() => { app.skillFileTab = i; }}>\n ${f.name}\n </button>\n `)}\n </div>\n ${files.map((f, i) => html`\n <div class=\"file-content ${i === app.skillFileTab ? \"active\" : \"\"}\" style=\"${i === app.skillFileTab ? \"\" : \"display:none;\"}\">\n <div style=\"padding:8px 12px;font-size:12px;color:var(--text-secondary);border-bottom:1px solid var(--border);\">\n ${f.path || f.name} ${f.size ? html`&#8226; ${(f.size / 1024).toFixed(1)} KB` : nothing}\n </div>\n <pre style=\"max-height:400px;overflow:auto;padding:12px;margin:0;font-size:12px;font-family:var(--mono);white-space:pre-wrap;word-break:break-all;\">${f.content}</pre>\n </div>\n `)}\n </div>\n ` : detail.content ? html`\n <pre style=\"margin-top:16px;max-height:400px;overflow:auto;padding:12px;background:var(--bg-primary);border:1px solid var(--border);border-radius:8px;font-size:12px;font-family:var(--mono);white-space:pre-wrap;\">${detail.content}</pre>\n ` : nothing}\n </div>\n </div>\n </div>\n `;\n}\n","import { html, nothing } from \"lit\";\nimport type { CoStarApp } from \"../app.ts\";\n\nexport function renderLogs(app: CoStarApp) {\n const filtered = filteredLogs(app);\n\n return html`\n <div class=\"page-content\">\n <div class=\"log-toolbar\">\n <select class=\"input\" style=\"width:auto;min-width:130px;\"\n .value=${app.logComponentFilter}\n @change=${(e: Event) => { app.logComponentFilter = (e.target as HTMLSelectElement).value; }}>\n <option value=\"\">All Components</option>\n ${app.logComponents.map((c) => html`<option value=\"${c}\">${c}</option>`)}\n </select>\n <select class=\"input\" style=\"width:auto;min-width:130px;\"\n .value=${app.logFilter}\n @change=${(e: Event) => { app.logFilter = (e.target as HTMLSelectElement).value; }}>\n <option value=\"\">All Levels</option>\n <option value=\"info\">Info</option>\n <option value=\"warn\">Warn</option>\n <option value=\"error\">Error</option>\n <option value=\"debug\">Debug</option>\n </select>\n <button class=\"btn btn-sm\" @click=${() => app.startLogStream()}>Refresh</button>\n <label style=\"display:flex;align-items:center;gap:6px;margin-bottom:0;cursor:pointer;\">\n <input type=\"checkbox\" ?checked=${app.logStreaming}\n @change=${(e: Event) => {\n const checked = (e.target as HTMLInputElement).checked;\n if (checked) app.startLogStream();\n else app.stopLogStream();\n }} />\n <span style=\"font-size:13px;\">Live</span>\n </label>\n <button class=\"btn btn-sm btn-danger\" style=\"margin-left:auto;\" @click=${() => { app.logEntries = []; }}>Clear View</button>\n </div>\n\n <div class=\"log-entries\">\n ${filtered.length === 0\n ? html`<div style=\"padding:20px;color:var(--muted, var(--text-muted));text-align:center;\">\n ${app.logStreaming ? \"Waiting for log entries...\" : \"No log entries. Enable Live streaming to see logs.\"}\n </div>`\n : filtered.map((entry: any) => renderLogEntry(entry))}\n </div>\n </div>\n `;\n}\n\nfunction filteredLogs(app: CoStarApp): any[] {\n let entries = app.logEntries as any[];\n if (app.logComponentFilter) {\n entries = entries.filter((entry: any) => {\n const comp = (entry.component || \"\").toLowerCase();\n return comp === app.logComponentFilter.toLowerCase();\n });\n }\n if (app.logFilter) {\n entries = entries.filter((entry: any) => {\n const level = (entry.level || \"\").toLowerCase();\n if (app.logFilter === \"error\") return level === \"error\" || level === \"fatal\";\n if (app.logFilter === \"warn\") return level === \"warn\" || level === \"error\" || level === \"fatal\";\n if (app.logFilter === \"info\") return level === \"info\";\n if (app.logFilter === \"debug\") return level === \"debug\";\n return true;\n });\n }\n return entries;\n}\n\nfunction renderLogEntry(entry: any) {\n if (typeof entry === \"string\") {\n return html`<div class=\"log-line\"><span class=\"log-msg\">${entry}</span></div>`;\n }\n const time = entry.timestamp ? new Date(entry.timestamp).toLocaleTimeString() : \"\";\n const level = (entry.level || \"info\").toLowerCase();\n const component = entry.component || \"\";\n const message = entry.message || JSON.stringify(entry);\n\n return html`\n <div class=\"log-line\">\n <span class=\"log-time\">${time}</span>\n <span class=\"log-level ${level}\">${level.toUpperCase()}</span>\n <span class=\"log-comp\">${component}</span>\n <span class=\"log-msg\">${message}</span>\n </div>\n `;\n}\n","import { html, nothing } from \"lit\";\nimport type { CoStarApp } from \"../app.ts\";\n\nexport function renderConfig(app: CoStarApp) {\n const platformVars = app.envVars.filter((v) => v.source === \"platform\");\n const userVars = app.envVars.filter((v) => v.source !== \"platform\");\n\n return html`\n <div class=\"page-content\">\n <!-- Environment Variables -->\n <div class=\"card\">\n <div class=\"card-header\">\n <h3>Environment Variables</h3>\n <div style=\"display:flex;gap:8px;\">\n <button class=\"btn btn-sm btn-primary\" @click=${() => app.openEnvModal()}>Add</button>\n <button class=\"btn btn-sm\" @click=${() => app.loadEnv()}>Refresh</button>\n </div>\n </div>\n ${app.envLoading\n ? html`<div class=\"loading-center\"><div class=\"spinner\"></div></div>`\n : app.envVars.length === 0\n ? html`<div class=\"empty-state\" style=\"padding:20px;\"><p>No environment variables configured.</p></div>`\n : html`\n <div class=\"table-wrap\">\n <table>\n <thead><tr><th>Key</th><th>Value</th><th>Actions</th></tr></thead>\n <tbody>\n ${platformVars.length > 0 ? html`\n <tr><td colspan=\"3\" style=\"padding:8px 12px;font-size:12px;font-weight:600;color:var(--text-secondary);background:var(--bg-secondary,var(--bg-hover));\">Platform Managed</td></tr>\n ${platformVars.map((v) => renderEnvRow(app, v, true))}\n ` : nothing}\n ${userVars.length > 0 ? html`\n <tr><td colspan=\"3\" style=\"padding:8px 12px;font-size:12px;font-weight:600;color:var(--text-secondary);background:var(--bg-secondary,var(--bg-hover));\">User Configured</td></tr>\n ${userVars.map((v) => renderEnvRow(app, v, false))}\n ` : nothing}\n </tbody>\n </table>\n </div>\n `}\n </div>\n\n <!-- Server Configuration -->\n <div class=\"card\">\n <div class=\"card-header\">\n <h3>Configuration</h3>\n <button class=\"btn btn-sm\" @click=${() => app.loadConfig()}>Refresh</button>\n </div>\n ${app.configLoading\n ? html`<div class=\"loading-center\"><div class=\"spinner\"></div></div>`\n : Object.keys(app.configData).length === 0\n ? html`<div class=\"empty-state\" style=\"padding:20px;\"><p>No configuration found. Run <code>costar setup</code> to configure.</p></div>`\n : html`\n <div class=\"config-list\" style=\"padding:16px;\">\n ${Object.entries(app.configData).map(\n ([key, value]) => html`\n <div class=\"config-row\">\n <span class=\"config-key\">${key}</span>\n <span class=\"config-value\">${String(value)}</span>\n </div>\n `,\n )}\n </div>\n `}\n </div>\n\n <!-- Paths -->\n <div class=\"card\">\n <div class=\"card-header\"><h3>Paths</h3></div>\n <div class=\"config-list\" style=\"padding:16px;\">\n <div class=\"config-row\">\n <span class=\"config-key\">Config Directory</span>\n <span class=\"config-value\"><code>${app.configData.configDir || app.configData.workspaceDir || \"~/.costar\"}</code></span>\n </div>\n <div class=\"config-row\">\n <span class=\"config-key\">Logs Directory</span>\n <span class=\"config-value\"><code>${app.configData.logsDir || \"~/.costar/logs\"}</code></span>\n </div>\n </div>\n </div>\n </div>\n\n ${renderEnvModal(app)}\n `;\n}\n\nfunction renderEnvRow(app: CoStarApp, v: { key: string; value: string; source: string }, isPlatform: boolean) {\n const isSecret = v.key.toLowerCase().match(/key|secret|token|password/);\n const revealed = app.envRevealedKeys[v.key];\n const displayValue = revealed || (isSecret ? \"\\u2022\\u2022\\u2022\\u2022\\u2022\\u2022\\u2022\\u2022\" : v.value);\n\n return html`\n <tr style=\"${isPlatform ? \"opacity:0.7;\" : \"\"}\">\n <td><code style=\"color:var(--accent);\">${v.key}</code></td>\n <td style=\"font-family:var(--mono);font-size:12px;max-width:300px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;\">\n ${displayValue}\n </td>\n <td style=\"white-space:nowrap;\">\n ${isSecret ? html`\n <button class=\"btn btn-sm\" @click=${() => app.revealEnvValue(v.key)}>\n ${revealed ? \"Hide\" : \"Reveal\"}\n </button>\n ` : nothing}\n ${!isPlatform ? html`\n <button class=\"btn btn-sm\" @click=${() => app.editEnvModal(v.key)}>Edit</button>\n <button class=\"btn btn-sm btn-danger\" @click=${() => app.deleteEnvVariable(v.key)}>Delete</button>\n ` : nothing}\n </td>\n </tr>\n `;\n}\n\nfunction renderEnvModal(app: CoStarApp) {\n if (!app.envModalOpen) return nothing;\n\n return html`\n <div class=\"modal-overlay open\" @click=${(e: Event) => { if (e.target === e.currentTarget) app.closeEnvModal(); }}>\n <div class=\"modal\">\n <div class=\"modal-header\">\n <h3>${app.envModalEditing ? \"Edit\" : \"Add\"} Environment Variable</h3>\n <button class=\"btn btn-sm\" @click=${() => app.closeEnvModal()}>Close</button>\n </div>\n <div class=\"modal-body\">\n <div class=\"form-group\">\n <label>Key</label>\n <input class=\"input\" type=\"text\" placeholder=\"VARIABLE_NAME\"\n .value=${app.envModalKey}\n ?disabled=${app.envModalEditing}\n @input=${(e: Event) => { app.envModalKey = (e.target as HTMLInputElement).value; }}\n style=\"text-transform:uppercase;\" />\n </div>\n <div class=\"form-group\">\n <label>Value</label>\n <input class=\"input\" type=\"text\" placeholder=\"value\"\n .value=${app.envModalValue}\n @input=${(e: Event) => { app.envModalValue = (e.target as HTMLInputElement).value; }} />\n </div>\n <div class=\"modal-actions\">\n <button class=\"btn\" @click=${() => app.closeEnvModal()}>Cancel</button>\n <button class=\"btn btn-primary\" @click=${() => app.saveEnvVariable()}>Save</button>\n </div>\n </div>\n </div>\n </div>\n `;\n}\n","/**\n * Main render function — delegates to views based on active tab.\n * Adapted from OpenClaw's app-render.ts pattern.\n */\n\nimport { html, nothing, type TemplateResult } from \"lit\";\nimport type { CoStarApp } from \"./app.ts\";\nimport { formatRelativeTimestamp } from \"./format.ts\";\nimport { renderTopbar, renderNav } from \"./app-render.helpers.ts\";\n\n// Views\nimport { renderDashboard } from \"./views/dashboard.ts\";\nimport { renderChat } from \"./views/chat.ts\";\nimport { renderCron } from \"./views/cron.ts\";\nimport { renderActivity } from \"./views/activity.ts\";\nimport { renderAssets } from \"./views/assets.ts\";\nimport { renderProjects } from \"./views/projects.ts\";\nimport { renderSessions } from \"./views/sessions.ts\";\nimport { renderWorkspace } from \"./views/workspace.ts\";\nimport { renderSkills } from \"./views/skills.ts\";\nimport { renderLogs } from \"./views/logs.ts\";\nimport { renderConfig } from \"./views/config.ts\";\n\nexport function renderApp(state: CoStarApp): TemplateResult {\n return html`\n <div class=\"shell\">\n ${renderTopbar(state)}\n ${renderNav(state)}\n\n <main class=\"content\">\n ${renderPage(state)}\n </main>\n </div>\n\n ${renderCronHistoryModal(state)}\n `;\n}\n\nfunction renderPage(state: CoStarApp): TemplateResult {\n switch (state.tab) {\n case \"dashboard\":\n return renderDashboard(state);\n case \"chat\":\n return renderChat(state);\n case \"cron\":\n return renderCron(state);\n case \"activity\":\n return renderActivity(state);\n case \"assets\":\n return renderAssets(state);\n case \"projects\":\n return renderProjects(state);\n case \"sessions\":\n return renderSessions(state);\n case \"workspace\":\n return renderWorkspace(state);\n case \"skills\":\n return renderSkills(state);\n case \"logs\":\n return renderLogs(state);\n case \"config\":\n return renderConfig(state);\n default:\n return html`<p>Unknown page</p>`;\n }\n}\n\nfunction renderCronHistoryModal(state: CoStarApp): TemplateResult | typeof nothing {\n if (!state.cronHistoryOpen) return nothing;\n\n return html`\n <div class=\"modal-overlay open\" @click=${(e: Event) => {\n if (e.target === e.currentTarget) state.cronHistoryOpen = false;\n }}>\n <div class=\"modal\" style=\"max-width: 700px;\">\n <div class=\"modal-header\">\n <h3>History: ${state.cronHistoryJob}</h3>\n <button class=\"btn btn-sm\" @click=${() => { state.cronHistoryOpen = false; }}>Close</button>\n </div>\n <div class=\"modal-body\">\n ${state.cronHistory.length === 0\n ? html`<p class=\"muted-text\">No run history</p>`\n : html`\n <div class=\"table-wrap\">\n <table>\n <thead>\n <tr><th>Time</th><th>Status</th><th>Duration</th><th>Summary</th></tr>\n </thead>\n <tbody>\n ${state.cronHistory.map(\n (h) => html`\n <tr>\n <td>${new Date(h.startedAt).toLocaleString()}</td>\n <td>\n <span class=\"tag ${h.status === \"ok\" ? \"tag-green\" : h.status === \"error\" ? \"tag-red\" : \"tag-yellow\"}\">\n ${h.status}\n </span>\n </td>\n <td>${h.duration ? `${(h.duration / 1000).toFixed(1)}s` : \"--\"}</td>\n <td style=\"max-width: 300px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap;\">\n ${h.summary || h.error || \"--\"}\n </td>\n </tr>\n `,\n )}\n </tbody>\n </table>\n </div>\n `}\n </div>\n </div>\n </div>\n `;\n}\n","/**\n * CoStar Dashboard — Main app shell (slim delegation pattern).\n *\n * Follows OpenClaw's architecture:\n * - @state properties declared here\n * - All business logic delegated to app-*.ts modules\n * - All API calls delegated to controllers/\n * - Render delegated to app-render.ts\n */\n\nimport { LitElement } from \"lit\";\nimport { customElement, state } from \"lit/decorators.js\";\n\n// Types\nimport type { Tab } from \"./navigation.ts\";\nimport type { ThemeMode, ResolvedTheme } from \"./theme.ts\";\nimport type { UiSettings } from \"./storage.ts\";\nimport type {\n ServerStatus, ServerStatusResponse, ServerVersionResponse,\n ActivityRow, ActivityStats, AssetRow, ProjectRow,\n CronJob, CronHistoryEntry, WorkspaceFile, SessionFile, SkillDef,\n SkillDetail, EnvVariable, SessionInfo,\n} from \"./types.ts\";\nimport type { ChatMsg, FlowItem } from \"./controllers/chat.ts\";\nimport type { CronFormState } from \"./app-defaults.ts\";\nimport { DEFAULT_CRON_FORM } from \"./app-defaults.ts\";\nimport { loadSettings } from \"./storage.ts\";\n\n// App modules (delegation targets)\nimport { handleConnected, handleDisconnected } from \"./app-lifecycle.ts\";\nimport { setTab as setTabInternal, setTheme as setThemeInternal, onPopState as onPopStateInternal } from \"./app-settings.ts\";\nimport { handleSendChat as handleSendChatInternal, handleAbortChat as handleAbortChatInternal } from \"./app-chat.ts\";\nimport { renderApp } from \"./app-render.ts\";\n\n// Controllers (for direct delegation from public methods)\nimport { loadDashboard as loadDashboardCtrl, compactSession as compactSessionCtrl, resetSession as resetSessionCtrl, triggerManualUpdate as triggerManualUpdateCtrl } from \"./controllers/dashboard.ts\";\nimport { loadCronJobs as loadCronJobsCtrl, createCronJob as createCronJobCtrl, runCronJob as runCronJobCtrl, deleteCronJob as deleteCronJobCtrl, loadCronHistory as loadCronHistoryCtrl } from \"./controllers/cron.ts\";\nimport { loadActivity as loadActivityCtrl, loadMoreActivity as loadMoreActivityCtrl, searchActivity as searchActivityCtrl } from \"./controllers/activity.ts\";\nimport { loadAssets as loadAssetsCtrl, loadProjects as loadProjectsCtrl } from \"./controllers/db.ts\";\nimport { loadSessions as loadSessionsCtrl, viewSession as viewSessionCtrl, closeSession as closeSessionCtrl, switchSessionView as switchSessionViewCtrl, loadRawSession as loadRawSessionCtrl, stopSessionPolling as stopSessionPollingCtrl } from \"./controllers/sessions.ts\";\nimport { loadWorkspaceFiles as loadWorkspaceFilesCtrl, editWorkspaceFile as editWorkspaceFileCtrl, saveWorkspaceFile as saveWorkspaceFileCtrl } from \"./controllers/workspace.ts\";\nimport { loadSkills as loadSkillsCtrl, showSkillDetail as showSkillDetailCtrl, closeSkillDetail as closeSkillDetailCtrl } from \"./controllers/skills.ts\";\nimport { startLogStream as startLogStreamCtrl, stopLogStream as stopLogStreamCtrl, loadInitialLogs as loadInitialLogsCtrl } from \"./controllers/logs.ts\";\nimport { loadConfig as loadConfigCtrl, loadEnv as loadEnvCtrl, selfUpdate as selfUpdateCtrl, openEnvModal as openEnvModalCtrl, editEnvModal as editEnvModalCtrl, closeEnvModal as closeEnvModalCtrl, saveEnvVariable as saveEnvVariableCtrl, deleteEnvVariable as deleteEnvVariableCtrl, revealEnvValue as revealEnvValueCtrl } from \"./controllers/config.ts\";\n\n@customElement(\"costar-app\")\nexport class CoStarApp extends LitElement {\n // No Shadow DOM — global CSS applies\n createRenderRoot() {\n return this;\n }\n\n // ═══════════════════════════════════════════════════════════════════\n // STATE — @state properties only, no logic\n // ═══════════════════════════════════════════════════════════════════\n\n // ─── Settings & Navigation ────────────────────────────────────────\n @state() settings: UiSettings = loadSettings();\n @state() tab: Tab = \"dashboard\";\n @state() theme: ThemeMode = \"system\";\n @state() themeResolved: ResolvedTheme = \"dark\";\n\n // ─── Server Status ────────────────────────────────────────────────\n @state() serverStatus: ServerStatus | null = null;\n\n // ─── Dashboard ────────────────────────────────────────────────────\n @state() activityStats: ActivityStats | null = null;\n @state() activeProject: ProjectRow | null = null;\n @state() projectCount: number | null = null;\n @state() recentActivity: ActivityRow[] = [];\n @state() sessionInfo: SessionInfo | null = null;\n @state() versionInfo: ServerVersionResponse | null = null;\n @state() statusResponse: ServerStatusResponse | null = null;\n\n // ─── Chat ─────────────────────────────────────────────────────────\n @state() chatMessage = \"\";\n @state() chatMessages: ChatMsg[] = [];\n @state() chatLoading = false;\n @state() chatSending = false;\n @state() chatStream: string | null = null;\n @state() chatStreamFlow: FlowItem[] = [];\n @state() chatCompacting = false;\n @state() chatButtonLabel = \"\";\n chatAbort: { abort: () => void } | null = null;\n\n // ─── Cron ─────────────────────────────────────────────────────────\n @state() cronJobs: CronJob[] = [];\n @state() cronLoading = false;\n @state() cronForm: CronFormState = { ...DEFAULT_CRON_FORM };\n @state() cronHistory: CronHistoryEntry[] = [];\n @state() cronHistoryJob = \"\";\n @state() cronHistoryOpen = false;\n\n // ─── Activity ─────────────────────────────────────────────────────\n @state() activityList: ActivityRow[] = [];\n @state() activityLoading = false;\n @state() activitySearch = \"\";\n @state() activityStatusFilter = \"\";\n @state() activityOffset = 0;\n @state() activityHasMore = false;\n @state() activityDetail: ActivityRow | null = null;\n\n // ─── Assets ───────────────────────────────────────────────────────\n @state() assetsList: AssetRow[] = [];\n @state() assetsLoading = false;\n @state() assetTypeFilter = \"\";\n\n // ─── Projects ─────────────────────────────────────────────────────\n @state() projectsList: ProjectRow[] = [];\n @state() projectsLoading = false;\n\n // ─── Sessions ─────────────────────────────────────────────────────\n @state() sessionsList: SessionFile[] = [];\n @state() sessionsLoading = false;\n @state() sessionDetail: unknown[] | null = null;\n @state() sessionDetailName = \"\";\n @state() sessionViewMode: \"parsed\" | \"raw\" = \"parsed\";\n @state() sessionRawContent = \"\";\n _sessionPollTimer: ReturnType<typeof setInterval> | null = null;\n\n // ─── Workspace ────────────────────────────────────────────────────\n @state() workspaceFiles: WorkspaceFile[] = [];\n @state() workspaceLoading = false;\n @state() workspaceEditingFile = \"\";\n @state() workspaceEditContent = \"\";\n @state() workspaceSaving = false;\n\n // ─── Skills ───────────────────────────────────────────────────────\n @state() skillsList: SkillDef[] = [];\n @state() skillsLoading = false;\n @state() skillDetail: SkillDetail | null = null;\n @state() skillDetailOpen = false;\n @state() skillFileTab = 0;\n\n // ─── Logs ─────────────────────────────────────────────────────────\n @state() logEntries: unknown[] = [];\n @state() logStreaming = false;\n @state() logFilter = \"\";\n @state() logComponentFilter = \"\";\n @state() logComponents: string[] = [];\n logStream: { close: () => void } | null = null;\n\n // ─── Config ───────────────────────────────────────────────────────\n @state() configData: Record<string, unknown> = {};\n @state() configLoading = false;\n @state() envVars: EnvVariable[] = [];\n @state() envLoading = false;\n @state() envRevealedKeys: Record<string, string> = {};\n @state() envModalOpen = false;\n @state() envModalKey = \"\";\n @state() envModalValue = \"\";\n @state() envModalEditing = false;\n @state() updating = false;\n @state() updateResult = \"\";\n\n // ─── Internal ─────────────────────────────────────────────────────\n popStateHandler: (() => void) | null = null;\n\n // ═══════════════════════════════════════════════════════════════════\n // LIFECYCLE — delegated to app-lifecycle.ts\n // ═══════════════════════════════════════════════════════════════════\n\n connectedCallback() {\n super.connectedCallback();\n this.popStateHandler = () => onPopStateInternal(this);\n window.addEventListener(\"popstate\", this.popStateHandler);\n handleConnected(this);\n }\n\n disconnectedCallback() {\n handleDisconnected(this);\n super.disconnectedCallback();\n }\n\n // ═══════════════════════════════════════════════════════════════════\n // PUBLIC API — thin wrappers that delegate to modules\n // ═══════════════════════════════════════════════════════════════════\n\n // Navigation & Theme → app-settings.ts\n setTab(next: Tab) { setTabInternal(this, next); }\n setTheme(next: ThemeMode) { setThemeInternal(this, next); }\n\n // Chat → app-chat.ts\n async handleSendChat(messageOverride?: string) { await handleSendChatInternal(this, messageOverride); }\n abortChat() { handleAbortChatInternal(this); }\n\n // Dashboard → controllers/dashboard.ts\n async loadDashboard() { await loadDashboardCtrl(this); }\n async compactSession() { await compactSessionCtrl(this); }\n async resetSession() { await resetSessionCtrl(this); }\n async triggerManualUpdate() { await triggerManualUpdateCtrl(this); }\n\n // Cron → controllers/cron.ts\n async loadCronJobs() { await loadCronJobsCtrl(this); }\n async createCronJob() { await createCronJobCtrl(this); }\n async runCronJob(jobId: string) { await runCronJobCtrl(this, jobId); }\n async deleteCronJob(jobId: string) { await deleteCronJobCtrl(this, jobId); }\n async showCronHistory(jobId: string, jobName: string) { await loadCronHistoryCtrl(this, jobId, jobName); }\n\n // Activity → controllers/activity.ts\n async loadActivity() { await loadActivityCtrl(this); }\n async loadMoreActivity() { await loadMoreActivityCtrl(this); }\n async searchActivity() { await searchActivityCtrl(this); }\n\n // Assets & Projects → controllers/db.ts\n async loadAssets() { await loadAssetsCtrl(this); }\n async loadProjects() { await loadProjectsCtrl(this); }\n\n // Sessions → controllers/sessions.ts\n async loadSessions() { await loadSessionsCtrl(this); }\n async viewSession(name: string) { await viewSessionCtrl(this, name); }\n closeSession() { closeSessionCtrl(this); }\n switchSessionView(mode: \"parsed\" | \"raw\") { switchSessionViewCtrl(this, mode); }\n async loadRawSession() { await loadRawSessionCtrl(this); }\n\n // Workspace → controllers/workspace.ts\n async loadWorkspaceFiles() { await loadWorkspaceFilesCtrl(this); }\n async editWorkspaceFile(name: string) { await editWorkspaceFileCtrl(this, name); }\n async saveWorkspaceFile() { await saveWorkspaceFileCtrl(this); }\n\n // Skills → controllers/skills.ts\n async loadSkills() { await loadSkillsCtrl(this); }\n async showSkillDetail(name: string) { await showSkillDetailCtrl(this, name); }\n closeSkillDetail() { closeSkillDetailCtrl(this); }\n\n // Logs → controllers/logs.ts\n startLogStream() { startLogStreamCtrl(this); }\n stopLogStream() { stopLogStreamCtrl(this); }\n async loadInitialLogs() { await loadInitialLogsCtrl(this); }\n\n // Config → controllers/config.ts\n async loadConfig() { await loadConfigCtrl(this); }\n async loadEnv() { await loadEnvCtrl(this); }\n async selfUpdate() { await selfUpdateCtrl(this); }\n openEnvModal() { openEnvModalCtrl(this); }\n editEnvModal(key: string) { editEnvModalCtrl(this, key); }\n closeEnvModal() { closeEnvModalCtrl(this); }\n async saveEnvVariable() { await saveEnvVariableCtrl(this); }\n async deleteEnvVariable(key: string) { await deleteEnvVariableCtrl(this, key); }\n async revealEnvValue(key: string) { await revealEnvValueCtrl(this, key); }\n\n // ═══════════════════════════════════════════════════════════════════\n // RENDER — delegated to app-render.ts\n // ═══════════════════════════════════════════════════════════════════\n\n render() {\n return renderApp(this);\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"costar-app\": CoStarApp;\n }\n}\n"],"names":["t","e","s","o","n$3","r","n","S","c","i","h","a","l","p","d","u","f","b","y$1","y","v","_","m","g","$","x","A","C","P","V","N","I","L","z","H","R","k","Z","B","D","DEFAULT_CRON_FORM","STORAGE_KEY","defaults","loadSettings","raw","parsed","saveSettings","next","TAB_GROUPS","TAB_PATHS","TAB_TITLES","TAB_ICONS","GROUP_LABELS","pathForTab","tab","tabFromPath","pathname","clean","iconForTab","titleForTab","labelForGroup","group","getSystemTheme","resolveTheme","mode","CoStarApiClient","baseUrl","path","params","base","url","res","err","body","message","handlers","controller","session","sessionData","reader","decoder","buffer","done","value","lines","eventType","eventData","line","type","dataStr","data","es","event","api","loadStatus","state","statusRes","versionRes","loadDashboard","stats","projects","activity","compactSession","result","msg","resetSession","triggerManualUpdate","loadCronJobs","createCronJob","form","runCronJob","_state","jobId","deleteCronJob","loadCronHistory","jobName","loadActivity","list","loadMoreActivity","more","searchActivity","loadAssets","loadProjects","loadSessions","viewSession","name","startSessionPolling","loadRawSession","formatted","switchSessionView","closeSession","stopSessionPolling","loadWorkspaceFiles","editWorkspaceFile","saveWorkspaceFile","loadSkills","showSkillDetail","closeSkillDetail","loadConfig","loadEnv","vars","key","isSystemEnv","revealEnvValue","openEnvModal","editEnvModal","closeEnvModal","saveEnvVariable","deleteEnvVariable","selfUpdate","loadInitialLogs","comps","entry","comp","startLogStream","level","stopLogStream","setTab","host","prev","refreshActiveTab","setTheme","applyThemeToDocument","onPopState","handleConnected","urlTab","handleDisconnected","resolved","isChatBusy","sendChatMessage","messageOverride","toolCount","text","flow","last","card","toolItem","error","abortChat","handleSendChat","sendChatInternal","handleAbortChat","abortChatInternal","icons","html","renderIcon","className","renderTopbar","nothing","renderThemeToggle","renderNav","renderNavItem","formatRelativeTimestamp","isoOrMs","date","diffMs","formatDurationHuman","ms","mins","secs","hours","clampText","max","escapeHtml","str","renderDashboard","app","sr","vi","renderStatCard","configRow","formatSize","title","subtitle","bytes","renderChat","renderMessage","renderStreamingMessage","item","formatMessage","renderToolCard","hasFlow","streaming","iconHtml","statusClass","durationStr","formatDurationShort","statusText","renderCron","job","renderCronRow","schedule","formatSchedule","statusTag","renderActivity","renderActivityRow","renderAssets","filtered","renderProjects","renderSessions","renderSessionViewer","turns","isParsed","renderParsedView","renderRawView","turn","renderRichTurn","renderSimpleMessage","isOld","index","role","isUser","isAssistant","content","renderWorkspace","renderSkills","renderSkillModal","detail","files","hasFiles","renderLogs","filteredLogs","renderLogEntry","entries","time","component","renderConfig","platformVars","userVars","renderEnvRow","renderEnvModal","isPlatform","isSecret","revealed","displayValue","renderApp","renderPage","renderCronHistoryModal","CoStarApp","LitElement","onPopStateInternal","setTabInternal","setThemeInternal","handleSendChatInternal","handleAbortChatInternal","loadDashboardCtrl","compactSessionCtrl","resetSessionCtrl","triggerManualUpdateCtrl","loadCronJobsCtrl","createCronJobCtrl","runCronJobCtrl","deleteCronJobCtrl","loadCronHistoryCtrl","loadActivityCtrl","loadMoreActivityCtrl","searchActivityCtrl","loadAssetsCtrl","loadProjectsCtrl","loadSessionsCtrl","viewSessionCtrl","closeSessionCtrl","switchSessionViewCtrl","loadRawSessionCtrl","loadWorkspaceFilesCtrl","editWorkspaceFileCtrl","saveWorkspaceFileCtrl","loadSkillsCtrl","showSkillDetailCtrl","closeSkillDetailCtrl","startLogStreamCtrl","stopLogStreamCtrl","loadInitialLogsCtrl","loadConfigCtrl","loadEnvCtrl","selfUpdateCtrl","openEnvModalCtrl","editEnvModalCtrl","closeEnvModalCtrl","saveEnvVariableCtrl","deleteEnvVariableCtrl","revealEnvValueCtrl","__decorateClass","customElement"],"mappings":"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","x_google_ignoreList":[0,1,2,3,4,5,6]}