@farazirfan/costar-server-executor 1.7.71 → 1.7.73

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-DQT6gXg5.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/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/controllers/logs.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 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 * Returns an abort controller to cancel the stream.\n */\n streamChat(\n message: string,\n handlers: {\n onDelta: (text: string) => void;\n onToolStart?: (data: unknown) => void;\n onToolEnd?: (data: unknown) => void;\n onDone?: (data: unknown) => void;\n onError?: (error: string) => void;\n },\n ): { 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 // Session expired — clear and let user retry\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 for (const line of lines) {\n if (!line.startsWith(\"data: \")) continue;\n const data = line.slice(6);\n if (data === \"[DONE]\") {\n handlers.onDone?.({});\n continue;\n }\n try {\n const parsed = JSON.parse(data);\n if (parsed.type === \"text_delta\" || parsed.type === \"content_block_delta\") {\n handlers.onDelta(parsed.text || parsed.delta?.text || \"\");\n } else if (parsed.type === \"tool_start\" || parsed.type === \"content_block_start\") {\n handlers.onToolStart?.(parsed);\n } else if (parsed.type === \"tool_end\" || parsed.type === \"content_block_stop\") {\n handlers.onToolEnd?.(parsed);\n } else if (parsed.type === \"message_stop\" || parsed.type === \"done\") {\n handlers.onDone?.(parsed);\n } else if (parsed.type === \"error\") {\n handlers.onError?.(parsed.error || \"Unknown error\");\n }\n } catch {\n // Non-JSON data line — treat as text\n handlers.onDelta(data);\n }\n }\n }\n\n handlers.onDone?.({});\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 /**\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, recent activity.\n */\n\nimport { api } from \"../api-client.ts\";\nimport type {\n ServerStatus,\n ServerStatusResponse,\n ServerVersionResponse,\n ActivityStats,\n ActivityRow,\n ProjectRow,\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};\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.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] = 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 ]);\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}\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 messages.\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};\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 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}\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.\n */\n\nimport { api } from \"../api-client.ts\";\nimport type { SkillDef } from \"../types.ts\";\n\nexport type SkillsState = {\n skillsList: SkillDef[];\n skillsLoading: boolean;\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","/**\n * Config controller — load config, env vars, self-update.\n */\n\nimport { api } from \"../api-client.ts\";\n\nexport type ConfigState = {\n configData: Record<string, unknown>;\n configLoading: boolean;\n envData: Record<string, unknown>;\n envLoading: 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 state.envData = await api.get<Record<string, unknown>>(\"/api/env\");\n } catch {\n state.envData = {};\n }\n state.envLoading = false;\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\");\n state.updateResult = result.stdout || result.message || \"Update complete\";\n } catch (err: any) {\n state.updateResult = `Error: ${err.message}`;\n }\n state.updating = 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 } from \"./controllers/sessions.ts\";\nimport { loadWorkspaceFiles } from \"./controllers/workspace.ts\";\nimport { loadSkills } from \"./controllers/skills.ts\";\nimport { loadConfig, loadEnv } from \"./controllers/config.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 if (next === host.tab) return;\n host.tab = next;\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 // chat & logs don'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\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 // 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, abort.\n */\n\nimport { api } from \"../api-client.ts\";\n\nexport type ChatState = {\n chatMessage: string;\n chatMessages: Array<{ role: string; content: string; tool_calls?: unknown[] }>;\n chatLoading: boolean;\n chatSending: boolean;\n chatStream: string | null;\n chatAbort: { abort: () => void } | null;\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 // Add user message\n state.chatMessages = [...state.chatMessages, { role: \"user\", content: message }];\n state.chatMessage = \"\";\n state.chatSending = true;\n state.chatStream = \"\";\n\n state.chatAbort = api.streamChat(message, {\n onDelta: (text) => {\n state.chatStream = (state.chatStream || \"\") + text;\n },\n onToolStart: (data) => {\n // Could be enhanced to show tool cards during streaming\n },\n onToolEnd: (data) => {\n // Could be enhanced to show tool results\n },\n onDone: () => {\n if (state.chatStream) {\n state.chatMessages = [\n ...state.chatMessages,\n { role: \"assistant\", content: state.chatStream },\n ];\n }\n state.chatStream = null;\n state.chatSending = false;\n state.chatAbort = null;\n },\n onError: (error) => {\n state.chatMessages = [\n ...state.chatMessages,\n { role: \"assistant\", content: `Error: ${error}` },\n ];\n state.chatStream = null;\n state.chatSending = false;\n state.chatAbort = null;\n },\n });\n}\n\nexport function abortChat(state: ChatState): void {\n state.chatAbort?.abort();\n state.chatStream = null;\n state.chatSending = false;\n state.chatAbort = null;\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 return html`\n <div class=\"dashboard-grid\" style=\"animation: dashboard-enter 0.4s var(--ease-out) both;\">\n <!-- Status Cards -->\n <div class=\"stats-row\">\n ${renderStatCard(\"Status\", app.serverStatus ? (app.serverStatus.online ? \"Online\" : \"Offline\") : \"...\", app.serverStatus?.version ? `v${app.serverStatus.version}` : \"\")}\n ${renderStatCard(\"Uptime\", app.serverStatus?.uptime ? formatDurationHuman(app.serverStatus.uptime * 1000) : \"...\", app.serverStatus?.cronRunning ? `${app.serverStatus.cronJobs} cron jobs` : \"\")}\n ${renderStatCard(\n \"Activities\",\n app.activityStats ? String(app.activityStats.total) : \"...\",\n app.activityStats\n ? `${app.activityStats.completed} completed, ${app.activityStats.failed} failed`\n : \"\",\n )}\n ${renderStatCard(\n \"Active Project\",\n app.activeProject?.name || \"None\",\n app.projectCount !== null ? `${app.projectCount} total` : \"\",\n )}\n </div>\n\n <!-- Quick Actions -->\n <div class=\"card\" style=\"animation-delay: 0.1s;\">\n <div class=\"card-header\">\n <h3>Quick Actions</h3>\n </div>\n <div class=\"card-body\" style=\"display: flex; gap: 8px; flex-wrap: wrap; padding: 16px;\">\n <button class=\"btn btn-primary btn-sm\" @click=${() => app.setTab(\"chat\")}>Open Chat</button>\n <button class=\"btn btn-sm\" @click=${() => app.setTab(\"cron\")}>Manage Cron</button>\n <button class=\"btn btn-sm\" @click=${() => app.setTab(\"activity\")}>View Activity</button>\n <button class=\"btn btn-sm\" @click=${() => app.setTab(\"workspace\")}>Workspace</button>\n <button class=\"btn btn-sm\" @click=${() => app.setTab(\"logs\")}>View Logs</button>\n </div>\n </div>\n\n <!-- Recent Activity -->\n ${app.recentActivity.length > 0\n ? html`\n <div class=\"card\" style=\"animation-delay: 0.2s;\">\n <div class=\"card-header\">\n <h3>Recent Activity</h3>\n </div>\n <div class=\"table-wrap\">\n <table>\n <thead>\n <tr>\n <th>Time</th>\n <th>Request</th>\n <th>Status</th>\n <th>Executor</th>\n </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","import { html, nothing } from \"lit\";\nimport type { CoStarApp } from \"../app.ts\";\nimport { escapeHtml } from \"../format.ts\";\n\nexport function renderChat(app: CoStarApp) {\n return html`\n <div class=\"chat-layout\">\n <!-- Messages -->\n <div class=\"chat-messages\" id=\"chat-messages\">\n ${app.chatMessages.length === 0 && !app.chatLoading\n ? html`\n <div class=\"empty-state\">\n <div class=\"empty-icon\">💬</div>\n <p>Send a message to start chatting with your agent.</p>\n </div>\n `\n : nothing}\n\n ${app.chatMessages.map((msg) => renderMessage(msg))}\n\n ${app.chatStream\n ? html`\n <div class=\"chat-msg chat-msg--assistant\">\n <div class=\"chat-msg__role\">Assistant</div>\n <div class=\"chat-msg__body\">${app.chatStream}</div>\n </div>\n `\n : nothing}\n\n ${app.chatLoading && !app.chatStream\n ? html`<div class=\"chat-msg chat-msg--assistant\"><div class=\"chat-msg__body\"><span class=\"typing-indicator\">Thinking...</span></div></div>`\n : nothing}\n </div>\n\n <!-- Compose -->\n <div class=\"chat-compose\">\n <div class=\"chat-compose__inner\">\n <textarea\n class=\"chat-input\"\n placeholder=\"Type a message...\"\n .value=${app.chatMessage}\n @input=${(e: Event) => {\n app.chatMessage = (e.target as HTMLTextAreaElement).value;\n }}\n @keydown=${(e: KeyboardEvent) => {\n if (e.key === \"Enter\" && !e.shiftKey) {\n e.preventDefault();\n app.handleSendChat();\n }\n }}\n ?disabled=${app.chatSending}\n rows=\"1\"\n ></textarea>\n <div class=\"chat-compose__actions\">\n ${app.chatSending\n ? html`<button class=\"btn btn-sm btn-danger\" @click=${() => app.abortChat()}>Stop</button>`\n : html`<button class=\"btn btn-sm btn-primary\" @click=${() => app.handleSendChat()} ?disabled=${!app.chatMessage.trim()}>Send</button>`}\n </div>\n </div>\n </div>\n </div>\n `;\n}\n\nfunction renderMessage(msg: { role: string; content: string; tool_calls?: unknown[] }) {\n const isUser = msg.role === \"user\";\n return html`\n <div class=\"chat-msg chat-msg--${msg.role}\">\n <div class=\"chat-msg__role\">${isUser ? \"You\" : \"Assistant\"}</div>\n <div class=\"chat-msg__body\">${msg.content}</div>\n ${msg.tool_calls && Array.isArray(msg.tool_calls) && msg.tool_calls.length > 0\n ? html`\n <div class=\"chat-msg__tools\">\n ${msg.tool_calls.map(\n (tc: any) => html`\n <div class=\"tool-card\">\n <div class=\"tool-card__name\">${tc.name || tc.function?.name || \"tool\"}</div>\n </div>\n `,\n )}\n </div>\n `\n : nothing}\n </div>\n `;\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\";\n\nexport function renderSessions(app: CoStarApp) {\n return html`\n <div class=\"page-content\">\n <div class=\"card\">\n <div class=\"card-header\">\n <h3>Sessions</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\">📝</div><p>No session files found</p></div>`\n : html`\n <div class=\"table-wrap\">\n <table>\n <thead><tr><th>Name</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\n ${app.sessionDetail\n ? html`\n <div class=\"card\">\n <div class=\"card-header\">\n <h3>${app.sessionDetailName}</h3>\n <button class=\"btn btn-sm\" @click=${() => { app.sessionDetail = null; app.sessionDetailName = \"\"; }}>Close</button>\n </div>\n <div class=\"card-body\" style=\"padding: 16px;\">\n <div class=\"chat-messages\" style=\"max-height: 500px; overflow-y: auto;\">\n ${app.sessionDetail.map(\n (msg: any) => html`\n <div class=\"chat-msg chat-msg--${msg.role}\">\n <div class=\"chat-msg__role\">${msg.role === \"user\" ? \"User\" : msg.role === \"assistant\" ? \"Assistant\" : \"System\"}</div>\n <div class=\"chat-msg__body\">${typeof msg.content === \"string\" ? msg.content : JSON.stringify(msg.content)}</div>\n </div>\n `,\n )}\n </div>\n </div>\n </div>\n `\n : nothing}\n </div>\n `;\n}\n\nfunction formatSize(bytes: number): string {\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 } 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=\"card\">\n <div class=\"card-header\">\n <h3>Skills</h3>\n <button class=\"btn btn-sm\" @click=${() => app.loadSkills()}>Refresh</button>\n </div>\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\">⚡</div><p>No skills registered</p></div>`\n : html`\n <div class=\"table-wrap\">\n <table>\n <thead><tr><th>Name</th><th>Description</th><th>Status</th></tr></thead>\n <tbody>\n ${app.skillsList.map(\n (s) => html`\n <tr>\n <td><strong>${s.name}</strong></td>\n <td>${s.description}</td>\n <td>\n ${s.enabled\n ? html`<span class=\"tag tag-green\">Enabled</span>`\n : html`<span class=\"tag tag-muted\">Disabled</span>`}\n </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\";\n\nexport function renderLogs(app: CoStarApp) {\n return html`\n <div class=\"page-content\">\n <div class=\"toolbar\">\n <label style=\"display: flex; align-items: center; gap: 8px;\">\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 Live streaming\n </label>\n <select class=\"input\" style=\"max-width: 150px;\"\n .value=${app.logFilter}\n @change=${(e: Event) => { app.logFilter = (e.target as HTMLSelectElement).value; }}>\n <option value=\"\">All levels</option>\n <option value=\"error\">Errors only</option>\n <option value=\"warn\">Warnings+</option>\n </select>\n <button class=\"btn btn-sm\" @click=${() => { app.logEntries = []; }}>Clear</button>\n <span class=\"muted-text\" style=\"margin-left: auto;\">${app.logEntries.length} entries</span>\n </div>\n\n <div class=\"card\">\n <div class=\"card-header\"><h3>Server Logs</h3></div>\n <div class=\"log-container\" style=\"max-height: 600px; overflow-y: auto; padding: 0;\">\n ${filteredLogs(app).length === 0\n ? html`<div class=\"empty-state\"><div class=\"empty-icon\">📋</div><p>${app.logStreaming ? \"Waiting for log entries...\" : \"Start streaming to see logs\"}</p></div>`\n : html`\n <pre class=\"log-pre\" style=\"margin: 0; padding: 16px; font-size: 12px; line-height: 1.6; white-space: pre-wrap; word-break: break-all;\">${filteredLogs(app).map((entry) => renderLogLine(entry)).join(\"\\n\")}</pre>\n `}\n </div>\n </div>\n </div>\n `;\n}\n\nfunction filteredLogs(app: CoStarApp): any[] {\n if (!app.logFilter) return app.logEntries;\n return app.logEntries.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 return true;\n });\n}\n\nfunction renderLogLine(entry: any): string {\n if (typeof entry === \"string\") return entry;\n const ts = entry.timestamp ? new Date(entry.timestamp).toLocaleTimeString() : \"\";\n const level = entry.level || \"info\";\n const component = entry.component ? `[${entry.component}]` : \"\";\n const message = entry.message || JSON.stringify(entry);\n return `${ts} ${level.toUpperCase().padEnd(5)} ${component} ${message}`;\n}\n","import { html, nothing } from \"lit\";\nimport type { CoStarApp } from \"../app.ts\";\n\nexport function renderConfig(app: CoStarApp) {\n return html`\n <div class=\"page-content\">\n <!-- Server Config -->\n <div class=\"card\">\n <div class=\"card-header\">\n <h3>Server 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 : 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 <!-- 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\" @click=${() => app.loadEnv()}>Refresh</button>\n </div>\n </div>\n ${app.envLoading\n ? html`<div class=\"loading-center\"><div class=\"spinner\"></div></div>`\n : html`\n <div class=\"config-list\" style=\"padding: 16px;\">\n ${Object.entries(app.envData).map(\n ([key, value]) => html`\n <div class=\"config-row\">\n <span class=\"config-key\">${key}</span>\n <span class=\"config-value\">\n ${isSecret(key) ? maskValue(String(value)) : String(value)}\n </span>\n </div>\n `,\n )}\n ${Object.keys(app.envData).length === 0\n ? html`<p class=\"muted-text\">No environment variables loaded</p>`\n : nothing}\n </div>\n `}\n </div>\n\n <!-- UI Settings -->\n <div class=\"card\">\n <div class=\"card-header\"><h3>UI Settings</h3></div>\n <div class=\"config-list\" style=\"padding: 16px;\">\n <div class=\"config-row\">\n <span class=\"config-key\">Theme</span>\n <span class=\"config-value\">\n <select class=\"input\" style=\"width: auto;\"\n .value=${app.theme}\n @change=${(e: Event) => { app.setTheme((e.target as HTMLSelectElement).value as any); }}>\n <option value=\"system\">System</option>\n <option value=\"dark\">Dark</option>\n <option value=\"light\">Light</option>\n </select>\n </span>\n </div>\n </div>\n </div>\n\n <!-- Self Update -->\n <div class=\"card\">\n <div class=\"card-header\"><h3>Server Update</h3></div>\n <div class=\"card-body\" style=\"padding: 16px;\">\n <button class=\"btn btn-primary\" @click=${() => app.selfUpdate()} ?disabled=${app.updating}>\n ${app.updating ? \"Updating...\" : \"Update Server\"}\n </button>\n ${app.updateResult\n ? html`<pre class=\"code-block\" style=\"margin-top: 12px;\">${app.updateResult}</pre>`\n : nothing}\n </div>\n </div>\n </div>\n `;\n}\n\nfunction isSecret(key: string): boolean {\n const lower = key.toLowerCase();\n return lower.includes(\"key\") || lower.includes(\"secret\") || lower.includes(\"token\") || lower.includes(\"password\");\n}\n\nfunction maskValue(value: string): string {\n if (!value || value.length < 8) return \"***\";\n return value.substring(0, 6) + \"...\" + value.substring(value.length - 4);\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 * Logs controller — SSE streaming, filtering.\n */\n\nimport { api } from \"../api-client.ts\";\n\nexport type LogsState = {\n logEntries: unknown[];\n logStreaming: boolean;\n logFilter: string;\n logStream: { close: () => void } | null;\n};\n\nexport function startLogStream(state: LogsState): void {\n state.logStreaming = true;\n state.logStream = api.streamLogs({\n onLog: (entry) => {\n state.logEntries = [...state.logEntries.slice(-500), entry];\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 * 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, ActivityRow, ActivityStats, AssetRow, ProjectRow,\n CronJob, CronHistoryEntry, WorkspaceFile, SessionFile, SkillDef,\n} from \"./types.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 } 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 } from \"./controllers/sessions.ts\";\nimport { loadWorkspaceFiles as loadWorkspaceFilesCtrl, editWorkspaceFile as editWorkspaceFileCtrl, saveWorkspaceFile as saveWorkspaceFileCtrl } from \"./controllers/workspace.ts\";\nimport { loadSkills as loadSkillsCtrl } from \"./controllers/skills.ts\";\nimport { startLogStream as startLogStreamCtrl, stopLogStream as stopLogStreamCtrl } from \"./controllers/logs.ts\";\nimport { loadConfig as loadConfigCtrl, loadEnv as loadEnvCtrl, selfUpdate as selfUpdateCtrl } 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\n // ─── Chat ─────────────────────────────────────────────────────────\n @state() chatMessage = \"\";\n @state() chatMessages: Array<{ role: string; content: string; tool_calls?: unknown[] }> = [];\n @state() chatLoading = false;\n @state() chatSending = false;\n @state() chatStream: string | null = null;\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\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\n // ─── Logs ─────────────────────────────────────────────────────────\n @state() logEntries: unknown[] = [];\n @state() logStreaming = false;\n @state() logFilter = \"\";\n logStream: { close: () => void } | null = null;\n\n // ─── Config ───────────────────────────────────────────────────────\n @state() configData: Record<string, unknown> = {};\n @state() configLoading = false;\n @state() envData: Record<string, unknown> = {};\n @state() envLoading = 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\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\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\n // Logs → controllers/logs.ts\n startLogStream() { startLogStreamCtrl(this); }\n stopLogStream() { stopLogStreamCtrl(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\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","M","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","line","data","es","event","api","loadStatus","state","statusRes","versionRes","loadDashboard","stats","projects","activity","loadCronJobs","createCronJob","form","runCronJob","_state","jobId","deleteCronJob","loadCronHistory","jobName","loadActivity","list","loadMoreActivity","more","searchActivity","loadAssets","loadProjects","loadSessions","viewSession","name","loadWorkspaceFiles","editWorkspaceFile","saveWorkspaceFile","loadSkills","loadConfig","loadEnv","selfUpdate","result","setTab","host","refreshActiveTab","setTheme","applyThemeToDocument","onPopState","handleConnected","urlTab","handleDisconnected","resolved","isChatBusy","sendChatMessage","messageOverride","text","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","renderDashboard","app","renderStatCard","title","subtitle","renderChat","msg","renderMessage","isUser","tc","renderCron","job","renderCronRow","schedule","formatSchedule","statusTag","renderActivity","renderActivityRow","renderAssets","filtered","renderProjects","renderSessions","formatSize","bytes","renderWorkspace","renderSkills","renderLogs","filteredLogs","entry","renderLogLine","level","ts","component","renderConfig","key","isSecret","maskValue","lower","renderApp","renderPage","renderCronHistoryModal","startLogStream","stopLogStream","CoStarApp","LitElement","onPopStateInternal","setTabInternal","setThemeInternal","handleSendChatInternal","handleAbortChatInternal","loadDashboardCtrl","loadCronJobsCtrl","createCronJobCtrl","runCronJobCtrl","deleteCronJobCtrl","loadCronHistoryCtrl","loadActivityCtrl","loadMoreActivityCtrl","searchActivityCtrl","loadAssetsCtrl","loadProjectsCtrl","loadSessionsCtrl","viewSessionCtrl","loadWorkspaceFilesCtrl","editWorkspaceFileCtrl","saveWorkspaceFileCtrl","loadSkillsCtrl","startLogStreamCtrl","stopLogStreamCtrl","loadConfigCtrl","loadEnvCtrl","selfUpdateCtrl","__decorateClass","customElement"],"mappings":"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","x_google_ignoreList":[0,1,2,3,4,5,6]}
package/public/index.html CHANGED
@@ -5,7 +5,7 @@
5
5
  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
6
6
  <title>CoStar Dashboard</title>
7
7
  <meta name="color-scheme" content="dark light" />
8
- <script type="module" crossorigin src="./assets/index-ChihPAzQ.js"></script>
8
+ <script type="module" crossorigin src="./assets/index-DQT6gXg5.js"></script>
9
9
  <link rel="stylesheet" crossorigin href="./assets/index-J_MuBktV.css">
10
10
  </head>
11
11
  <body>