agent-relay-server 0.127.3 → 0.127.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/docs/openapi.json +1 -1
- package/package.json +3 -3
- package/public/assets/{MessageBubble-DnXnkt4a.js → MessageBubble-D2Wzxied.js} +2 -2
- package/public/assets/{MessageBubble-DnXnkt4a.js.map → MessageBubble-D2Wzxied.js.map} +1 -1
- package/public/assets/{PlanGraphPanel-D6CPEpQD.js → PlanGraphPanel-DH_xoWZi.js} +2 -2
- package/public/assets/{PlanGraphPanel-D6CPEpQD.js.map → PlanGraphPanel-DH_xoWZi.js.map} +1 -1
- package/public/assets/{activity-ZPwHcPLK.js → activity-B-ozOwNq.js} +2 -2
- package/public/assets/{activity-ZPwHcPLK.js.map → activity-B-ozOwNq.js.map} +1 -1
- package/public/assets/{agent-profiles-CT0E9LV1.js → agent-profiles-DZgjO25A.js} +2 -2
- package/public/assets/{agent-profiles-CT0E9LV1.js.map → agent-profiles-DZgjO25A.js.map} +1 -1
- package/public/assets/{agent-type-icon-BmBR-9CH.js → agent-type-icon-B9cLaOoz.js} +2 -2
- package/public/assets/{agent-type-icon-BmBR-9CH.js.map → agent-type-icon-B9cLaOoz.js.map} +1 -1
- package/public/assets/agents-mXBLSY6O.js +2 -0
- package/public/assets/{agents-Dt5TncjC.js.map → agents-mXBLSY6O.js.map} +1 -1
- package/public/assets/{analytics-BZtRycyL.js → analytics-5Ize_UL5.js} +3 -3
- package/public/assets/{analytics-BZtRycyL.js.map → analytics-5Ize_UL5.js.map} +1 -1
- package/public/assets/{automation-yzUJbvT2.js → automation-CidMvW2e.js} +2 -2
- package/public/assets/{automation-yzUJbvT2.js.map → automation-CidMvW2e.js.map} +1 -1
- package/public/assets/{badge-BCvp7LK3.js → badge-BkNNvFNa.js} +2 -2
- package/public/assets/{badge-BCvp7LK3.js.map → badge-BkNNvFNa.js.map} +1 -1
- package/public/assets/{branch-state-badge-Cscjqf-E.js → branch-state-badge-DnS40KCb.js} +2 -2
- package/public/assets/{branch-state-badge-Cscjqf-E.js.map → branch-state-badge-DnS40KCb.js.map} +1 -1
- package/public/assets/{button-DyHjsHY3.js → button-DUaC2wSQ.js} +2 -2
- package/public/assets/{button-DyHjsHY3.js.map → button-DUaC2wSQ.js.map} +1 -1
- package/public/assets/{card-BoqYxpVW.js → card-r-yAV4cH.js} +2 -2
- package/public/assets/{card-BoqYxpVW.js.map → card-r-yAV4cH.js.map} +1 -1
- package/public/assets/{channels-DAtOnA6o.js → channels-MPO2FOBv.js} +2 -2
- package/public/assets/{channels-DAtOnA6o.js.map → channels-MPO2FOBv.js.map} +1 -1
- package/public/assets/chat-Ca4ERso5.js +2 -0
- package/public/assets/chat-Ca4ERso5.js.map +1 -0
- package/public/assets/{connectors-B2grC-hl.js → connectors-BbYdtRkW.js} +2 -2
- package/public/assets/{connectors-B2grC-hl.js.map → connectors-BbYdtRkW.js.map} +1 -1
- package/public/assets/copy-button-u463GPZR.js +2 -0
- package/public/assets/{copy-button-C67FUG3E.js.map → copy-button-u463GPZR.js.map} +1 -1
- package/public/assets/{display-aTnwsqQh.js → display-BNI-7rdq.js} +2 -2
- package/public/assets/{display-aTnwsqQh.js.map → display-BNI-7rdq.js.map} +1 -1
- package/public/assets/{dist-D5w04z0l.js → dist-5e_is3Xr.js} +2 -2
- package/public/assets/{dist-D5w04z0l.js.map → dist-5e_is3Xr.js.map} +1 -1
- package/public/assets/{dist-BD4Xc13v.js → dist-ActI2qb5.js} +2 -2
- package/public/assets/{dist-BD4Xc13v.js.map → dist-ActI2qb5.js.map} +1 -1
- package/public/assets/dist-B-FQ0-X3.js +2 -0
- package/public/assets/{dist-G8YBD-wp.js.map → dist-B-FQ0-X3.js.map} +1 -1
- package/public/assets/{dist-f6MW74eX.js → dist-BduURKro.js} +2 -2
- package/public/assets/{dist-f6MW74eX.js.map → dist-BduURKro.js.map} +1 -1
- package/public/assets/{dist-BFDfbfNC.js → dist-Bp0-OBcd.js} +2 -2
- package/public/assets/{dist-BFDfbfNC.js.map → dist-Bp0-OBcd.js.map} +1 -1
- package/public/assets/{dist-C_VOBSaK.js → dist-CJ7e7uqU.js} +2 -2
- package/public/assets/{dist-C_VOBSaK.js.map → dist-CJ7e7uqU.js.map} +1 -1
- package/public/assets/{dist-BNB3fTO-.js → dist-CYzOsD_n.js} +2 -2
- package/public/assets/{dist-BNB3fTO-.js.map → dist-CYzOsD_n.js.map} +1 -1
- package/public/assets/{dist-CQMQ5iku.js → dist-CpcQJrKV.js} +2 -2
- package/public/assets/{dist-CQMQ5iku.js.map → dist-CpcQJrKV.js.map} +1 -1
- package/public/assets/dist-DFgmDjLv.js +2 -0
- package/public/assets/{dist-CHKra2JV.js.map → dist-DFgmDjLv.js.map} +1 -1
- package/public/assets/{dist-DG75bvPp.js → dist-DrpSpMKL.js} +2 -2
- package/public/assets/{dist-DG75bvPp.js.map → dist-DrpSpMKL.js.map} +1 -1
- package/public/assets/dist-DzWoiN2z.js +2 -0
- package/public/assets/{dist-BJKxqIQd.js.map → dist-DzWoiN2z.js.map} +1 -1
- package/public/assets/{es2015-a6fysEVz.js → es2015-DNuudVtQ.js} +2 -2
- package/public/assets/{es2015-a6fysEVz.js.map → es2015-DNuudVtQ.js.map} +1 -1
- package/public/assets/formatted-body-BEI1zP7i.js +3 -0
- package/public/assets/{formatted-body-D5-1aiyB.js.map → formatted-body-BEI1zP7i.js.map} +1 -1
- package/public/assets/{formatted-body-impl-Do5NbJUA.js → formatted-body-impl-CNQ5sqwK.js} +2 -2
- package/public/assets/{formatted-body-impl-Do5NbJUA.js.map → formatted-body-impl-CNQ5sqwK.js.map} +1 -1
- package/public/assets/index-D2Mpzpft.js +26 -0
- package/public/assets/{index-BdNafiPz.js.map → index-D2Mpzpft.js.map} +1 -1
- package/public/assets/{input-Rc4oWv4q.js → input-BvNUEkDd.js} +2 -2
- package/public/assets/{input-Rc4oWv4q.js.map → input-BvNUEkDd.js.map} +1 -1
- package/public/assets/{insights-i6AEZT_a.js → insights-5rkMFRgf.js} +2 -2
- package/public/assets/{insights-i6AEZT_a.js.map → insights-5rkMFRgf.js.map} +1 -1
- package/public/assets/{integrations-9c6IdRU4.js → integrations-BEaqjfP4.js} +2 -2
- package/public/assets/{integrations-9c6IdRU4.js.map → integrations-BEaqjfP4.js.map} +1 -1
- package/public/assets/{lib-BZ6WPg2t.js → lib-BvrbNA2I.js} +2 -2
- package/public/assets/{lib-BZ6WPg2t.js.map → lib-BvrbNA2I.js.map} +1 -1
- package/public/assets/{lucide-react-NXHPIMsX.js → lucide-react-DD_zIava.js} +2 -2
- package/public/assets/{lucide-react-NXHPIMsX.js.map → lucide-react-DD_zIava.js.map} +1 -1
- package/public/assets/maintenance-CEiURaYZ.js +2 -0
- package/public/assets/{maintenance-CJ6wikpg.js.map → maintenance-CEiURaYZ.js.map} +1 -1
- package/public/assets/{managed-agents-JZn0xNJR.js → managed-agents-CetHyuQW.js} +4 -4
- package/public/assets/{managed-agents-JZn0xNJR.js.map → managed-agents-CetHyuQW.js.map} +1 -1
- package/public/assets/{markdown-preview-impl-BsvAkpR4.js → markdown-preview-impl-ZwGYvObh.js} +2 -2
- package/public/assets/{markdown-preview-impl-BsvAkpR4.js.map → markdown-preview-impl-ZwGYvObh.js.map} +1 -1
- package/public/assets/memory-BTm8XzCg.js +2 -0
- package/public/assets/{memory-BE9IwCdC.js.map → memory-BTm8XzCg.js.map} +1 -1
- package/public/assets/{messages-vXgdc3H4.js → messages-fJd17pzv.js} +2 -2
- package/public/assets/{messages-vXgdc3H4.js.map → messages-fJd17pzv.js.map} +1 -1
- package/public/assets/{orchestrators-CribhLg-.js → orchestrators-C5XQ2UYy.js} +2 -2
- package/public/assets/{orchestrators-CribhLg-.js.map → orchestrators-C5XQ2UYy.js.map} +1 -1
- package/public/assets/overview-Bhk-tqKc.js +2 -0
- package/public/assets/{overview-q3O9K9VK.js.map → overview-Bhk-tqKc.js.map} +1 -1
- package/public/assets/{pairs-BNOnd0IE.js → pairs-CBrszSZh.js} +2 -2
- package/public/assets/{pairs-BNOnd0IE.js.map → pairs-CBrszSZh.js.map} +1 -1
- package/public/assets/{projects-iDkxAGBW.js → projects-DXy9JviE.js} +2 -2
- package/public/assets/{projects-iDkxAGBW.js.map → projects-DXy9JviE.js.map} +1 -1
- package/public/assets/prompt-settings-DEQhAt2X.js +2 -0
- package/public/assets/{prompt-settings-Bdz_xCgD.js.map → prompt-settings-DEQhAt2X.js.map} +1 -1
- package/public/assets/{react-dom-8yaD9iJG.js → react-dom-CADlISeR.js} +2 -2
- package/public/assets/{react-dom-8yaD9iJG.js.map → react-dom-CADlISeR.js.map} +1 -1
- package/public/assets/{registry-DPcyGypi.js → registry-DsZILce1.js} +4 -4
- package/public/assets/{registry-DPcyGypi.js.map → registry-DsZILce1.js.map} +1 -1
- package/public/assets/{security-Z3l3u-Pl.js → security-C-wVZm5k.js} +2 -2
- package/public/assets/{security-Z3l3u-Pl.js.map → security-C-wVZm5k.js.map} +1 -1
- package/public/assets/{select-BX_lW49D.js → select-DsEGBLJk.js} +2 -2
- package/public/assets/{select-BX_lW49D.js.map → select-DsEGBLJk.js.map} +1 -1
- package/public/assets/settings-D3_r5IGA.js +6 -0
- package/public/assets/{settings-Y381jZt7.js.map → settings-D3_r5IGA.js.map} +1 -1
- package/public/assets/{store-D-Frk_EC.js → store-DKTb9O0v.js} +5 -5
- package/public/assets/{store-D-Frk_EC.js.map → store-DKTb9O0v.js.map} +1 -1
- package/public/assets/{task-chip-CeujtXYT.js → task-chip-DwdauC08.js} +2 -2
- package/public/assets/{task-chip-CeujtXYT.js.map → task-chip-DwdauC08.js.map} +1 -1
- package/public/assets/{tasks-Di6d0_Ch.js → tasks-DnEzBku4.js} +2 -2
- package/public/assets/{tasks-Di6d0_Ch.js.map → tasks-DnEzBku4.js.map} +1 -1
- package/public/assets/{teams-DJv4l-_l.js → teams-DpAbZ3ye.js} +2 -2
- package/public/assets/{teams-DJv4l-_l.js.map → teams-DpAbZ3ye.js.map} +1 -1
- package/public/assets/{terminal-viewer-impl-3zBLpRel.js → terminal-viewer-impl-_IU5o8ya.js} +3 -3
- package/public/assets/{terminal-viewer-impl-3zBLpRel.js.map → terminal-viewer-impl-_IU5o8ya.js.map} +1 -1
- package/public/assets/types-BqeSkWrv.js.map +1 -1
- package/public/assets/{use-keyboard-viewport-cGEmrGE7.js → use-keyboard-viewport-wTh5CR4-.js} +2 -2
- package/public/assets/{use-keyboard-viewport-cGEmrGE7.js.map → use-keyboard-viewport-wTh5CR4-.js.map} +1 -1
- package/public/assets/user-avatar-CZ3XO8ml.js +2 -0
- package/public/assets/{user-avatar-qbo-B3dQ.js.map → user-avatar-CZ3XO8ml.js.map} +1 -1
- package/public/assets/{work-queue-D73-hP0c.js → work-queue-DKcLZWRl.js} +2 -2
- package/public/assets/{work-queue-D73-hP0c.js.map → work-queue-DKcLZWRl.js.map} +1 -1
- package/public/assets/workspaces-Cs2IZZOI.js +3 -0
- package/public/assets/{workspaces-CoDz-iZd.js.map → workspaces-Cs2IZZOI.js.map} +1 -1
- package/public/index.html +24 -24
- package/runner/plugins/claude/.claude-plugin/plugin.json +1 -1
- package/runner/src/adapters/claude-transcript.ts +52 -3
- package/runner/src/control-server.ts +34 -17
- package/runner/src/runner-core.ts +64 -30
- package/src/db/messages.ts +20 -8
- package/public/assets/agents-Dt5TncjC.js +0 -2
- package/public/assets/chat-DhYX9BDG.js +0 -2
- package/public/assets/chat-DhYX9BDG.js.map +0 -1
- package/public/assets/copy-button-C67FUG3E.js +0 -2
- package/public/assets/dist-BJKxqIQd.js +0 -2
- package/public/assets/dist-CHKra2JV.js +0 -2
- package/public/assets/dist-G8YBD-wp.js +0 -2
- package/public/assets/formatted-body-D5-1aiyB.js +0 -3
- package/public/assets/index-BdNafiPz.js +0 -26
- package/public/assets/maintenance-CJ6wikpg.js +0 -2
- package/public/assets/memory-BE9IwCdC.js +0 -2
- package/public/assets/overview-q3O9K9VK.js +0 -2
- package/public/assets/prompt-settings-Bdz_xCgD.js +0 -2
- package/public/assets/settings-Y381jZt7.js +0 -6
- package/public/assets/user-avatar-qbo-B3dQ.js +0 -2
- package/public/assets/workspaces-CoDz-iZd.js +0 -3
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import{r as e}from"./chunk-CilyBKbf.js";import{
|
|
1
|
+
import{r as e}from"./chunk-CilyBKbf.js";import{_r as t,ar as n,cr as r,dr as i,gr as a,mr as o,pr as s,sr as c}from"./lucide-react-DD_zIava.js";import{f as l,h as u,m as d,p as f,y as p}from"./types-BqeSkWrv.js";import{$ as m,A as h,E as g,N as _,R as v,S as y,T as ee,U as te,at as b,d as ne,et as x,it as S,k as re,nt as C,p as w,q as ie,rt as T,tt as E,y as ae}from"./display-BNI-7rdq.js";var D=e(t(),1),oe=e=>{let t,n=new Set,r=(e,r)=>{let i=typeof e==`function`?e(t):e;if(!Object.is(i,t)){let e=t;t=r??(typeof i!=`object`||!i)?i:Object.assign({},t,i),n.forEach(n=>n(t,e))}},i=()=>t,a={setState:r,getState:i,getInitialState:()=>o,subscribe:e=>(n.add(e),()=>n.delete(e))},o=t=e(r,i,a);return a},se=(e=>e?oe(e):oe),ce=e=>e;function le(e,t=ce){let n=D.useSyncExternalStore(e.subscribe,D.useCallback(()=>t(e.getState()),[e,t]),D.useCallback(()=>t(e.getInitialState()),[e,t]));return D.useDebugValue(n),n}var ue=e=>{let t=se(e),n=e=>le(t,e);return Object.assign(n,t),n},de=(e=>e?ue(e):ue);function fe(e,t){let n;try{n=e()}catch{return}return{getItem:e=>{let r=e=>e===null?null:JSON.parse(e,t?.reviver),i=n.getItem(e)??null;return i instanceof Promise?i.then(r):r(i)},setItem:(e,r)=>n.setItem(e,JSON.stringify(r,t?.replacer)),removeItem:e=>n.removeItem(e)}}var pe=e=>t=>{try{let n=e(t);return n instanceof Promise?n:{then(e){return pe(e)(n)},catch(e){return this}}}catch(e){return{then(e){return this},catch(t){return pe(t)(e)}}}},me=(e,t)=>(n,r,i)=>{let a={storage:fe(()=>window.localStorage),partialize:e=>e,version:0,merge:(e,t)=>({...t,...e}),...t},o=!1,s=0,c=new Set,l=new Set,u=a.storage;if(!u)return e((...e)=>{console.warn(`[zustand persist middleware] Unable to update item '${a.name}', the given storage is currently unavailable.`),n(...e)},r,i);let d=()=>{let e=a.partialize({...r()});return u.setItem(a.name,{state:e,version:a.version})},f=i.setState;i.setState=(e,t)=>(f(e,t),d());let p=e((...e)=>(n(...e),d()),r,i);i.getInitialState=()=>p;let m,h=()=>{if(!u)return;let e=++s;o=!1,c.forEach(e=>e(r()??p));let t=a.onRehydrateStorage?.call(a,r()??p)||void 0;return pe(u.getItem.bind(u))(a.name).then(e=>{if(e)if(typeof e.version==`number`&&e.version!==a.version){if(a.migrate){let t=a.migrate(e.state,e.version);return t instanceof Promise?t.then(e=>[!0,e]):[!0,t]}console.error(`State loaded from storage couldn't be migrated since no migrate function was provided`)}else return[!1,e.state];return[!1,void 0]}).then(t=>{if(e!==s)return;let[i,o]=t;if(m=a.merge(o,r()??p),n(m,!0),i)return d()}).then(()=>{e===s&&(t?.(r(),void 0),m=r(),o=!0,l.forEach(e=>e(m)))}).catch(n=>{e===s&&t?.(void 0,n)})};return i.persist={setOptions:e=>{a={...a,...e},e.storage&&(u=e.storage)},clearStorage:()=>{u?.removeItem(a.name)},getOptions:()=>a,rehydrate:()=>h(),hasHydrated:()=>o,onHydrate:e=>(c.add(e),()=>{c.delete(e)}),onFinishHydration:e=>(l.add(e),()=>{l.delete(e)})},a.skipHydration||h(),m||p};function he(e){if(!e)return``;let t=e.replace(/\r\n/g,`
|
|
2
2
|
`);return t=t.replace(/```[^\n]*\n([\s\S]*?)```/g,(e,t)=>{let n=t.replace(/\n+$/,``).split(`
|
|
3
3
|
`).length;return` code block, ${n} ${n===1?`line`:`lines`}. `}),t=t.replace(/```[^\n]*/g,` code block. `),t=ye(t),t=t.replace(/^#{1,6}\s+/gm,``),t=t.replace(/^\s*[-*+]\s+/gm,`. `),t=t.replace(/^\s*\d+\.\s+/gm,`. `),t=t.replace(/`([^`]+)`/g,`$1`),t=t.replace(/\[([^\]]+)\]\([^)]+\)/g,`$1`),t=t.replace(/(\*\*|__|\*|_)(.*?)\1/g,`$2`),t=t.replace(/[ \t]+/g,` `),t=t.replace(/\n{2,}/g,`. `),t=t.replace(/\s*\.\s*\.\s*(\.\s*)+/g,`. `),t.trim()}function ge(e){return/\|/.test(e)&&e.trim().length>0}function _e(e){return/^\s*\|?\s*:?-{2,}:?\s*(\|\s*:?-{2,}:?\s*)+\|?\s*$/.test(e)}function ve(e){return e.trim().replace(/^\||\|$/g,``).split(`|`).map(e=>e.trim()).filter(e=>e.length>0)}function ye(e){let t=e.split(`
|
|
4
4
|
`),n=[],r=0;for(;r<t.length;){if(ge(t[r])&&r+1<t.length&&_e(t[r+1])){let e=ve(t[r]),i=r+2,a=0;for(;i<t.length&&ge(t[i])&&!_e(t[i]);)a++,i++;let o=e.length?`with columns ${e.join(`, `)}`:``,s=`${a} ${a===1?`row`:`rows`}`;n.push(`table ${o?`${o}, `:``}${s}.`.replace(/\s+/g,` `).trim()),r=i;continue}n.push(t[r]),r++}return n.join(`
|
|
5
|
-
`)}var be={ms:`milliseconds`,s:`seconds`,kb:`kilobytes`,mb:`megabytes`,gb:`gigabytes`,tb:`terabytes`};function xe(e){return e.split(``).join(` `)}function Se(e){return e.split(``).map(e=>/[0-9]/.test(e)?e:e.toUpperCase()).join(` `)}var Ce=[{name:`url`,pattern:/\bhttps?:\/\/\S+/gi,replace:` link `},{name:`path`,pattern:/(?:\/[A-Za-z0-9._-]+){2,}\/?/g,replace:e=>` `+e.replace(/[/._-]+/g,` `).trim()+` `},{name:`slash`,pattern:/(?<=[A-Za-z0-9])\/(?=[A-Za-z0-9])/g,replace:` `},{name:`func-call`,pattern:/\b([A-Za-z_$][\w$]*)\(\)/g,replace:`$1`},{name:`approx`,pattern:/~(?=\s*[\d.])/g,replace:`approximately `},{name:`range`,pattern:/(\d)\s*[-–—]\s*(?=\d)/g,replace:`$1 to `},{name:`version`,pattern:/\b(v?)(\d+(?:\.\d+){2,})\b/gi,replace:(e,t,n)=>`${t?`version `:``}${n.replace(/\./g,` dot `)}`},{name:`decimal`,pattern:/\b(\d+)\.(\d+)\b/g,replace:(e,t,n)=>`${t} point ${xe(n)}`},{name:`hash`,pattern:/\b(?=[0-9a-f]{7,40}\b)(?=[0-9a-f]*[a-f])(?=[0-9a-f]*\d)[0-9a-f]{7,40}\b/gi,replace:e=>Se(e)},{name:`id-camel`,pattern:/([a-z])(Id|ID)(s)?\b/g,replace:(e,t,n,r)=>`${t} I D${r?`s`:``}`},{name:`id-word`,pattern:/\b(?:id|Id|ID)(s)?\b/g,replace:(e,t)=>`I D${t?`s`:``}`},{name:`byte-unit`,pattern:/\b(\d+)\s?(kb|mb|gb|tb)\b/gi,replace:(e,t,n)=>`${t} ${be[n.toLowerCase()]}`},{name:`ms-unit`,pattern:/\b(\d{1,5})\s?ms\b/g,replace:(e,t)=>`${t} ${be.ms}`},{name:`s-unit`,pattern:/\b(\d{1,3})\s?s\b/g,replace:(e,t)=>`${t} ${be.s}`},{name:`live-adjective`,pattern:/\b(is|are|was|were|be|been|being|now|and|stays?|staying|went|go|goes|going|deployed|it's|that's|here's|there's|we're|you're|they're)\s+live\b/gi,replace:(e,t)=>`${t} lyve`},{name:`interior-dot`,pattern:/\.(?=[A-Za-z0-9])/g,replace:` dot `}];function we(e){if(!e)return``;let t=e;for(let e of Ce)t=t.replace(e.pattern,e.replace);return t.replace(/[ \t]{2,}/g,` `).trim()}function Te(e){return we(he(e))}var Ee=[{id:`am_michael`,label:`Michael (US ♂)`},{id:`am_adam`,label:`Adam (US ♂)`},{id:`af_heart`,label:`Heart (US ♀)`},{id:`af_bella`,label:`Bella (US ♀)`},{id:`af_nicole`,label:`Nicole (US ♀)`},{id:`af_sarah`,label:`Sarah (US ♀)`},{id:`bm_george`,label:`George (UK ♂)`},{id:`bf_emma`,label:`Emma (UK ♀)`}],O=220;function De(e){let t=e.match(/[^.!?]+[.!?]*\s*/g)?.map(e=>e.trim()).filter(Boolean)??[e],n=[];for(let e of t){if(e.length<=O){n.push(e);continue}let t=e;for(;t.length>O;){let e=t.lastIndexOf(` `,O);e<=0&&(e=O),n.push(t.slice(0,e).trim()),t=t.slice(e).trim()}t&&n.push(t)}return n}var Oe=typeof window<`u`&&`speechSynthesis`in window,k=new class{enabled=!1;lang=`en-US`;mode=`kokoro`;kokoroVoice=`am_michael`;browserVoice=``;active=null;queue=[];currentChat=null;speaking=!1;gen=0;audioEl=null;audioUrl=null;playingKey=null;manual=!1;listeners=new Set;get available(){return Oe||typeof Audio<`u`}isEnabled(){return this.enabled}subscribe(e){return this.listeners.add(e),()=>{this.listeners.delete(e)}}getPlayingKey(){return this.playingKey}setPlayingKey(e){if(e!==this.playingKey){this.playingKey=e;for(let e of this.listeners)e()}}setEnabled(e){e!==this.enabled&&(this.enabled=e,e||this.reset())}setLang(e){this.lang=e}setMode(e){e!==this.mode&&(this.mode=e,this.reset())}setKokoroVoice(e){this.kokoroVoice=e}setBrowserVoice(e){this.browserVoice=e}setActiveChat(e){e!==this.active&&(this.active=e,this.queue=this.queue.filter(t=>t.chatId===e))}onResponse(e,t){if(!this.enabled||!this.available||!e||e!==this.active)return;let n=Te(t);n&&(this.speaking&&(this.manual||this.currentChat&&this.currentChat!==e)&&(this.queue=[],this.cancel()),this.queue.push({chatId:e,text:n}),this.pump())}speak(e,t){if(!this.available)return;let n=Te(e);if(!n)return;this.reset(),this.manual=!0,this.speaking=!0,this.currentChat=null,this.setPlayingKey(t??null);let r=++this.gen,i=De(n),a=()=>{r===this.gen&&(this.speaking=!1,this.manual=!1,this.setPlayingKey(null))};this.mode===`kokoro`?this.speakKokoro(i,0,r,a):this.speakBrowser(i,0,r,a)}bargeIn(){this.reset()}reset(){this.queue=[],this.cancel()}cancel(){this.gen++,this.currentChat=null,this.speaking=!1,this.manual=!1,this.setPlayingKey(null);try{window.speechSynthesis.cancel()}catch{}this.stopAudio()}stopAudio(){if(this.audioEl)try{this.audioEl.pause(),this.audioEl.src=``}catch{}if(this.audioUrl){try{URL.revokeObjectURL(this.audioUrl)}catch{}this.audioUrl=null}}pump(){if(this.speaking)return;let e=this.queue.shift();if(!e)return;this.speaking=!0,this.manual=!1,this.currentChat=e.chatId;let t=++this.gen,n=De(e.text),r=()=>{t===this.gen&&(this.speaking=!1,this.currentChat=null,this.pump())};this.mode===`kokoro`?this.speakKokoro(n,0,t,r):this.speakBrowser(n,0,t,r)}speakBrowser(e,t,n,r){if(n!==this.gen)return;if(!Oe||t>=e.length)return r();let i=new SpeechSynthesisUtterance(e[t]),a=this.browserVoice?window.speechSynthesis.getVoices().find(e=>e.voiceURI===this.browserVoice):void 0;a?(i.voice=a,i.lang=a.lang):i.lang=this.lang||navigator.language||`en-US`,i.onend=()=>this.speakBrowser(e,t+1,n,r),i.onerror=()=>this.speakBrowser(e,t+1,n,r),window.speechSynthesis.speak(i)}speakKokoro(e,t,n,r,i){if(n!==this.gen)return;let a=e[t];if(a===void 0)return r();let o=i??this.fetchSpeech(a),s=e[t+1],c=s===void 0?void 0:this.fetchSpeech(s);o.then(i=>{n===this.gen&&this.playBlob(i,n,()=>this.speakKokoro(e,t+1,n,r,c),()=>{this.speakBrowser(e,t,n,r)})}).catch(()=>{n===this.gen&&this.speakBrowser(e,t,n,r)})}fetchSpeech(e){return s(`/connectors/voice/call/speak`,{text:e,voice:this.kokoroVoice})}playBlob(e,t,n,r){if(t!==this.gen)return;if(typeof Audio>`u`)return r();this.stopAudio(),this.audioEl||=new Audio;let i=URL.createObjectURL(e);this.audioUrl=i;let a=this.audioEl;a.src=i,a.onended=()=>{t===this.gen&&n()},a.onerror=()=>{t===this.gen&&r()},a.play().catch(()=>{t===this.gen&&r()})}};function ke(){if(!Oe)return[];try{return window.speechSynthesis.getVoices().map(e=>({uri:e.voiceURI,label:`${e.name} (${e.lang})`,lang:e.lang})).sort((e,t)=>e.lang.localeCompare(t.lang)||e.label.localeCompare(t.label))}catch{return[]}}var Ae=typeof navigator<`u`&&!!navigator.mediaDevices?.getUserMedia&&typeof window<`u`&&`MediaRecorder`in window;function je(){for(let e of[`audio/webm;codecs=opus`,`audio/webm`,`audio/ogg;codecs=opus`,`audio/mp4`])if(typeof MediaRecorder<`u`&&MediaRecorder.isTypeSupported?.(e))return e}var Me=class{rec=null;chunks=[];stream=null;async start(){this.stream=await navigator.mediaDevices.getUserMedia({audio:!0}),this.chunks=[];let e=je();this.rec=new MediaRecorder(this.stream,e?{mimeType:e}:void 0),this.rec.ondataavailable=e=>{e.data.size&&this.chunks.push(e.data)},this.rec.start()}async stop(){let e=this.rec;if(!e)return this.teardown(),null;let t=new Promise(t=>{e.onstop=()=>t()});try{e.stop()}catch{}await t;let n=e.mimeType||`audio/webm`,r=new Blob(this.chunks,{type:n});return this.teardown(),r.size?r:null}cancel(){try{this.rec?.stop()}catch{}this.teardown()}teardown(){this.stream?.getTracks().forEach(e=>e.stop()),this.rec=null,this.stream=null,this.chunks=[]}};async function Ne(e){return((await a(`/connectors/voice/call/transcribe`,e))?.text??``).trim()}var A=de((e,t)=>({now:Date.now(),_timer:null,start(){t()._timer||e({_timer:setInterval(()=>e({now:Date.now()}),1e3)})},stop(){let n=t()._timer;n&&(clearInterval(n),e({_timer:null}))}}));function Pe(){return A(e=>e.now)}function Fe(e=3e4){return A(t=>Math.floor(t.now/e))}var Ie=.1,Le=.9,Re=.8,ze=.4,j=256e3,Be=1e6;function Ve(e){return{provider:e.id,label:e.label,defaultModel:e.catalog.defaultModel,models:e.catalog.models}}var He=Object.fromEntries(p().map(e=>[e.id,Ve(e)]));function Ue(e){let t=We(e);return{selfCompactUtilization:t,warnUtilization:Ge(t),hardBackstopUtilization:Math.max(Le,t)}}function We(e){return!Number.isFinite(e)||!e||e<=j?Re:e>=Be?ze:Ke(Re-(e-j)/(Be-j)*(Re-ze))}function Ge(e){return Ke(Math.max(0,e-Ie))}function Ke(e){return Math.round(e*1e3)/1e3}function M(e,t){let n=t?.find(t=>t.provider===e)??He[e];if(!n)throw Error(`unknown provider catalog: ${e}`);return n}function qe(e){return!e.disabled&&!e.unavailable}function Je(e){let t=e.defaultModel,n=t?e.models.find(e=>e.alias===t):void 0;if(n&&qe(n))return{alias:n.alias,preferred:t,fellBack:!1};let r=e.models.find(qe);return{alias:r?.alias,preferred:t,fellBack:r?.alias!==t}}function N(e){return e?.providers[0]??u()[0]??``}function P(e,t){return M(e,t).models.filter(e=>!e.disabled)}function F(e,t){return Je(M(e,t)).alias??``}function Ye(e,t){return e.filter(e=>e.status===`online`&&v(t,e.baseDir)).sort((e,t)=>_(t.baseDir).length-_(e.baseDir).length)[0]}function Xe(e,t){let n=e.find(e=>e.managedAgents.some(e=>e.agentId===t.id));if(n)return n;let r=typeof t.meta?.cwd==`string`?t.meta.cwd:``;return r?Ye(e,r):void 0}var Ze=`/settings/chat/scroll`,Qe=150,$e=1e3,I=new Map,L=new Map,R=new Set,z=null,et=null,tt=!1;function nt(e){if(!e||typeof e!=`object`)return null;let t=e;if(typeof t.stick!=`boolean`||t.topKey!==null&&typeof t.topKey!=`string`||typeof t.offset!=`number`||!Number.isFinite(t.offset))return null;let n=typeof t.anchorMessageId==`number`&&Number.isFinite(t.anchorMessageId)?t.anchorMessageId:void 0,r=typeof t.anchorEndMessageId==`number`&&Number.isFinite(t.anchorEndMessageId)?t.anchorEndMessageId:void 0;return{stick:t.stick,topKey:t.topKey,...n===void 0?{}:{anchorMessageId:n},...r===void 0?{}:{anchorEndMessageId:r},offset:Math.max(0,t.offset)}}function rt(e){if(!e||typeof e!=`object`)return 0;let t=e.updatedAt;return typeof t==`number`&&Number.isFinite(t)?t:0}function it(e){return I.get(e)}function at(e,t,n){I.delete(e),I.set(e,t),L.set(e,n)}function ot(e,t){at(e,t,Date.now()),R.add(e),st(),mt(),ut()}function st(){for(;I.size>Qe;){let e=I.keys().next().value;if(e===void 0)break;I.delete(e),L.delete(e),R.delete(e)}}function ct(e){let t={};for(let n of e){let e=I.get(n);e&&(t[n]={...e,updatedAt:L.get(n)??Date.now()})}return t}function lt(e){if(!(!e||typeof e!=`object`)){for(let[t,n]of Object.entries(e)){if(R.has(t))continue;let e=nt(n);if(!e)continue;let r=rt(n),i=L.get(t);i!==void 0&&i>=r||at(t,e,r)}st()}}function ut(){z!==null&&clearTimeout(z),z=setTimeout(()=>{dt(!1)},$e)}async function dt(e){if(R.size===0)return;let t=R;R=new Set;let n=ct(t);try{lt((await i(`PUT`,Ze,{value:n},e?{keepalive:!0}:void 0)).value)}catch{for(let e of t)R.add(e)}}function ft(){z!==null&&(clearTimeout(z),z=null),dt(!0)}async function pt(){try{lt((await i(`GET`,Ze)).value)}catch{}}function mt(){tt||typeof document>`u`||typeof window>`u`||(tt=!0,document.addEventListener(`visibilitychange`,()=>{document.visibilityState===`hidden`?ft():pt()}),window.addEventListener(`pagehide`,ft))}function ht(){return mt(),et||(et=pt(),et)}function gt(e,t){let n=e?{...e,...t}:t,r=e?.meta||t.meta?{...e?.meta??{},...t.meta??{}}:void 0;return r&&f(e?.meta?.workspace)&&f(t.meta?.workspace)&&(r.workspace={...e.meta.workspace,...t.meta.workspace}),{...n,...r?{meta:r}:{},...!t.issueRepo&&e?.issueRepo?{issueRepo:e.issueRepo}:{}}}function _t(e){let t={};for(let n of e)t[n.id]=n;return t}function B(e,t){let n=e.findIndex(e=>e.id===t.id),r=[...e];return n>=0?r[n]=t:r.push(t),r}var vt=3e3;function yt(e,t,n,r=Date.now(),i){if(!t||!n)return e;let a=[...e[t]||[]],o=i||`s-${n}-${r}`;return a.some(e=>e.id===o)||a.some(e=>e.status===n&&Math.abs(e.timestamp-r)<=vt)?e:(a.push({id:o,status:n,timestamp:r}),a.length>200&&a.splice(0,a.length-200),{...e,[t]:a})}function bt(e,t){if(!(!e||e.status===t.status)){if((e.status===`offline`||e.status===`stale`)&&(t.status===`online`||t.status===`idle`||t.status===`busy`))return`online`;if(t.status===`offline`)return`offline`}}var xt=new Set([`compacting`,`compacted`,`clearing-context`,`context-cleared`]);function St(e){let t=e.meta?.timelineEvent;if(!t||typeof t!=`object`||Array.isArray(t))return;let n=t.status;if(typeof n!=`string`||!n)return;let r=t.id,i=t.timestamp;return{status:n,...typeof r==`string`?{id:r}:{},...typeof i==`number`&&Number.isFinite(i)?{timestamp:i}:{}}}function Ct(e){let t=e.params?.agentId;return typeof t==`string`&&t?t:typeof e.target==`string`&&e.target?e.target:void 0}function wt(e,t){if(t===`command.dispatched`)return e.type===`agent.compact`?`compaction-requested`:e.type===`agent.clearContext`?`clear-requested`:e.type===`agent.shutdown`?`shutting-down`:void 0;if(t===`command.succeeded`){if(e.type===`agent.shutdown`)return`shutdown`;if(e.type===`agent.restart`)return`restarted`}}function Tt(e){return JSON.stringify(e)}function Et(e,t){let n=new Map(e.map(e=>[e.id,e])),r=!(e.length===t.length&&e.every((e,n)=>e.id===t[n]?.id)),i=t.map(e=>{let t=n.get(e.id);return t&&Tt(t)===Tt(e)?t:(r=!0,e)});return r?i:e}function V(e,t){let n=[...new Map(t.map(e=>[e.id,e])).values()],r=new Map(e.map(e=>[e.id,e])),i=!(e.length===n.length&&e.every((e,t)=>e.id===n[t]?.id)),a=n.map(e=>{let t=r.get(e.id);return t===e||t&&JSON.stringify(t)===JSON.stringify(e)?t:(i=!0,e)});return i?a:e}function Dt(){return typeof document>`u`?!0:document.hidden}function Ot(e,t){return!!(e&&t.view===`chat`&&t.selectedInboxThread===e&&!Dt())}function kt(e){return e.threadPeer||e.agentId||``}function At(e,t){return Ot(kt(e),t)}function jt(e){return e.filter(e=>e.to===`user`&&e.from!==`user`&&y(e)).reduce((e,t)=>Math.max(e,t.id),0)}function Mt(e){if(e.from===`user`||e.to===`user`)return!0;let t=typeof e.payload?.direction==`string`?e.payload.direction:void 0;return e.kind===`channel.event`&&t===`inbound`}var Nt={enabled:!0,browserEnabled:!1,messages:!0,replies:!0,errors:!0};function Pt(e,t){return t.enabled?e.kind===`message`?t.messages:e.kind===`reply`?t.replies:t.errors:!1}function Ft(){return typeof window<`u`&&`Notification`in window}function H(){return Ft()?window.Notification.permission:`unsupported`}function It(e,t){return!Pt(e,t.notificationSettings)||!t.notificationSettings.browserEnabled||H()!==`granted`||At(e,t)?!1:Dt()||t.view!==`chat`}function Lt(e,t){if(H()===`granted`)try{let n=new window.Notification(e.title,{body:e.body,tag:e.id,icon:`icons/agent-relay-192.png`,data:{view:e.view,threadPeer:e.threadPeer,agentId:e.agentId,messageId:e.messageId}});n.onclick=()=>{window.focus(),t(),n.close()}}catch{}}var Rt=(e,t)=>({notification:null,toastNotification:null,notifications:[],notificationUnread:0,notificationSettings:{...Nt},notificationPermission:H(),confirmModal:{show:!1,title:``,message:``,action:null},errorModal:{show:!1,title:``,message:``},openConfirm(t,n,r){e({confirmModal:{show:!0,title:t,message:n,action:r}})},showError(t,n){e({errorModal:{show:!0,title:t,message:n}})},showNotification(t){e({notification:t,toastNotification:null}),setTimeout(()=>e({notification:null}),3e3)},handleRelayNotification(n){let r=t();if(!Pt(n,r.notificationSettings)||r.notifications.some(e=>e.id===n.id))return;if(n.messageId&&(n.kind===`message`||n.kind===`reply`)){let e=r.messages.find(e=>e.id===n.messageId);if(e&&!Mt(e))return}let i=At(n,r),a=`${n.title}: ${n.body}`;e({notifications:[n,...r.notifications].slice(0,100),notificationUnread:i?r.notificationUnread:Math.min(99,r.notificationUnread+1),notification:i?r.notification:a,toastNotification:i?r.toastNotification:n}),i||setTimeout(()=>{t().toastNotification?.id===n.id&&e({notification:null,toastNotification:null})},4500),It(n,r)&&Lt(n,()=>t().openNotification(n)),i&&n.threadPeer&&n.messageId&&t().markInboxThreadReadTo(n.threadPeer,n.messageId)},async openNotification(n){if(e({notificationUnread:0}),n.threadPeer&&(t().openInboxThread(n.threadPeer),n.messageId&&t().markInboxThreadReadTo(n.threadPeer,n.messageId)),n.view&&await t().switchView(n.view),n.agentId&&n.view===`agents`){let e=t().agentsById[n.agentId];e&&t().openAgentDetail(e)}},dismissToast(){e({notification:null,toastNotification:null})},markNotificationsRead(){e({notificationUnread:0})},clearNotifications(){e({notifications:[],notificationUnread:0})},async requestBrowserNotifications(){if(!Ft()){e({notificationPermission:`unsupported`,notificationSettings:{...t().notificationSettings,browserEnabled:!1}}),t().showNotification(`Browser notifications are not supported here`);return}let n=await window.Notification.requestPermission();e({notificationPermission:n,notificationSettings:{...t().notificationSettings,browserEnabled:n===`granted`}}),t().showNotification(n===`granted`?`Browser notifications enabled`:`Browser notifications not enabled`)}}),zt=e=>({voiceTtsEnabled:!1,voiceTtsLang:`en-US`,voiceTtsMode:`kokoro`,voiceTtsKokoroVoice:`am_michael`,voiceTtsBrowserVoice:``,voiceInputMode:`compose`,setVoiceTtsEnabled(t){k.setEnabled(t),e({voiceTtsEnabled:t})},setVoiceTtsLang(t){k.setLang(t),e({voiceTtsLang:t})},setVoiceTtsMode(t){k.setMode(t),e({voiceTtsMode:t})},setVoiceTtsKokoroVoice(t){k.setKokoroVoice(t),e({voiceTtsKokoroVoice:t})},setVoiceTtsBrowserVoice(t){k.setBrowserVoice(t),e({voiceTtsBrowserVoice:t})},setVoiceInputMode(t){e({voiceInputMode:t})}}),Bt=null;function Vt(e){let t=e.voiceTtsEnabled&&e.view===`chat`&&e.selectedInboxThread||null;t!==Bt&&(Bt=t,k.setActiveChat(t))}function Ht(e){let t=f(e.result)?e.result:void 0;return d(e.error)??d(t?.error)??d(t?.reason)??d(t?.message)??`spawn command failed`}function Ut(e){let t=e.id||e.correlationId||`${e.type}:${e.updatedAt??e.createdAt??Date.now()}`,n=0;for(let e=0;e<t.length;e++)n=n*31+t.charCodeAt(e)>>>0;return-Math.max(1,n)}function Wt(e){let t=Object.entries(e().agentChatByAgent).filter(([,e])=>e.loadedInitial).map(([e])=>e);return Promise.all(t.map(t=>e().gapFillAgentChat(t)))}function Gt(e,t){if(t.clientId){let n=e.findIndex(e=>e.clientId===t.clientId);if(n>=0){let r=[...e];return r[n]=t,r}}return B(e,t)}var Kt=e=>(n,a)=>({theme:`dark`,view:`overview`,autoRefresh:!0,mobileMenuOpen:!1,commandPaletteOpen:!1,commandQuery:``,connected:!1,connectionError:!1,quotaSeq:0,authNeeded:!1,authToken:``,stats:{},fileOrchestratorId:``,filePath:``,fileSelectedPath:``,fileSelectedLine:0,fileOverlayOpen:!1,_es:null,_refreshTimer:null,_refreshInFlight:!1,set:e=>n(e),async init(){await e.waitForHydration();let s=a().authToken;s&&t(s),r(a().view),k.setEnabled(a().voiceTtsEnabled),k.setLang(a().voiceTtsLang),k.setMode(a().voiceTtsMode),k.setKokoroVoice(a().voiceTtsKokoroVoice),k.setBrowserVoice(a().voiceTtsBrowserVoice),Vt(a()),o(()=>{a().authNeeded||n({authNeeded:!0,connectionError:!1})}),ht(),n({notificationPermission:H()}),a().startClock();try{n({stats:await i(`GET`,`/stats`)})}catch(e){if(e.status===401){n({authNeeded:!0});return}}await a().refresh(),a().fetchAllIssueRefs(),a().connectSSE(),a().startAutoRefresh()},async switchView(e){r(e),n({view:e,mobileMenuOpen:!1});let t=a();[`chat`,`messages`].includes(e)&&await Promise.all([t.fetchMessages(),t.fetchChatHistoryImports(),t.fetchDeliverableTasks({unfiltered:!0})]),e===`activity`&&await Promise.all([t.fetchMessages(),t.fetchPairs(),t.fetchTasks(),t.fetchActivityEvents()]),e===`work`&&await Promise.all([t.fetchMessages(),t.fetchTasks()]),e===`pairs`&&await t.fetchPairs(),e===`channels`&&await Promise.all([t.fetchChannels(),t.fetchIntegrations()]),e===`connectors`&&await t.fetchConnectors(),e===`integrations`&&await t.fetchIntegrations(),e===`memory`&&await t.refreshMemory(),e===`tasks`&&await Promise.all([t.fetchTasks(),t.fetchDeliverableTasks()]),e===`teams`&&await Promise.all([t.fetchTeams(),t.fetchTeamOutcomeAggregates(),t.refreshIssueRefs()]),e===`automation`&&await Promise.all([t.fetchAutomations(),t.fetchAutomationRuns()]),e===`maintenance`&&await t.fetchMaintenanceJobs(),e===`workspaces`&&await Promise.all([t.fetchWorkspaces(),t.fetchOrchestrators(),t.fetchAgents()]),e===`files`&&await t.fetchOrchestrators(),e===`analytics`&&await t.fetchAnalytics()},startClock(){A.getState().start()},stopClock(){A.getState().stop()},startAutoRefresh(){a().stopAutoRefresh(),a().autoRefresh&&n({_refreshTimer:setInterval(()=>a().refreshLiveData(),b)})},stopAutoRefresh(){let e=a();e._refreshTimer&&(clearInterval(e._refreshTimer),n({_refreshTimer:null}))},async apiCall(e,t,n){return i(e,t,n)},async openFilesAt(e){let t=a();n({fileOrchestratorId:e.orchestratorId||Ye(t.orchestrators,e.selectedPath||e.path)?.id||t.orchestrators.find(e=>e.status===`online`)?.id||``,filePath:e.path,fileSelectedPath:e.selectedPath||``,fileSelectedLine:e.line||0,fileOverlayOpen:e.overlay===!0}),e.overlay||await a().switchView(`files`)},async openFilesForAgent(e,t=!1){let n=typeof e.meta?.cwd==`string`?e.meta.cwd:``;if(!n){a().showNotification(`Agent has no cwd`);return}let r=Xe(a().orchestrators,e);if(!r){a().showNotification(`No online orchestrator covers that cwd`);return}await a().openFilesAt({orchestratorId:r.id,path:n,overlay:t})},closeFileOverlay(){n({fileOverlayOpen:!1})},async refresh(){let e=a();await Promise.all([e.fetchStats(),e.fetchHealth(),e.fetchAgents(),e.fetchUsers(),e.fetchOrchestrators(),e.fetchPairs(),e.fetchMessages(),e.fetchTasks(),e.fetchDeliverableTasks({unfiltered:!0}),e.fetchChannels(),e.fetchConnectors(),e.fetchIntegrations(),e.fetchAutomations(),e.fetchAutomationRuns(),e.fetchManagedPolicies(),e.fetchAgentProfiles(),e.fetchToolGroupCatalog(),e.fetchMaintenanceJobs(),e.fetchWorkspaces(),e.fetchInboxState(),e.fetchActivityEvents(),e.fetchChatHistoryImports(),e.fetchProviderCatalog()])},async refreshLiveData(){if(!(a()._refreshInFlight||a().authNeeded)){n({_refreshInFlight:!0});try{try{let e=await i(`GET`,`/stats`);n(a().connectionError?{stats:e,connectionError:!1}:{stats:e})}catch(e){if(e.status===401)return;a().connectionError||n({connectionError:!0});return}let e=a(),t=[e.fetchHealth(),e.fetchAgents(),e.fetchOrchestrators(),e.fetchPairs(),e.fetchMessages(),e.fetchTasks(),e.fetchManagedPolicies(),e.fetchInboxState()],r=e.view;[`chat`,`messages`].includes(r)&&t.push(e.fetchChatHistoryImports(),e.fetchDeliverableTasks({unfiltered:!0})),r===`activity`&&t.push(e.fetchActivityEvents()),r===`memory`&&t.push(e.refreshMemory()),r===`automation`&&t.push(e.fetchAutomations(),e.fetchAutomationRuns()),r===`channels`&&t.push(e.fetchChannels(),e.fetchIntegrations()),r===`connectors`&&t.push(e.fetchConnectors()),r===`integrations`&&t.push(e.fetchIntegrations()),r===`maintenance`&&t.push(e.fetchMaintenanceJobs()),r===`profiles`&&t.push(e.fetchAgentProfiles()),r===`workspaces`&&t.push(e.fetchWorkspaces()),r===`analytics`&&t.push(e.fetchAnalytics()),r===`teams`&&t.push(e.fetchTeams(),e.fetchTeamOutcomeAggregates(),e.refreshIssueRefs()),e.agentDetailOpen&&e.agentDetailId&&t.push(e.fetchAgentIssueActivity(e.agentDetailId)),r===`tasks`&&t.push(e.fetchDeliverableTasks()),e.taskDetailOpen&&e.taskDetailId&&t.push(e.fetchTaskDetail(e.taskDetailId)),await Promise.all(t)}finally{n({_refreshInFlight:!1})}}},async fetchStats(){try{n({stats:await i(`GET`,`/stats`)})}catch{}},connectSSE(){a().disconnectSSE(),n({_es:c(a().authToken,{connected:(e={})=>{n(a().connectionError?{connected:!0,connectionError:!1}:{connected:!0}),Wt(a),e.replay?.available||(a().refreshLiveData(),a().refreshPlans(),a().refreshIssueRefs())},disconnected:()=>n({connected:!1}),message:(e,t)=>{if(e!==`connected`){if(e===`replay.gap`){a().refreshLiveData(),Wt(a),a().refreshPlans(),a().refreshIssueRefs();return}if(e===`message.new`){let e=JSON.parse(t);if(e.kind===`session`&&e.from!==`user`){let t=e.payload?.session;t?.type===`response`&&t?.origin===`provider`&&k.onResponse(ae(e),e.body)}let r=a();if(!r.messages.some(t=>t.id===e.id)){let t=[...r.messages,e];t.length>500&&t.splice(0,t.length-500),n({messages:t})}let i=ae(e);for(let t of Object.keys(a().agentChatByAgent))a().appendChatTail(t,[e]);ee(e)&&y(e)&&Ot(i,r)&&a().markInboxThreadReadTo(i,e.id);return}if(e===`message.queued`||e===`message.expired`||e===`message.delivery_updated`||e===`message.reaction_updated`||e===`message.finalized`){let e=JSON.parse(t);n({messages:B(a().messages,e)}),a().applyChatMessageUpdate(e);return}if(e===`notification.created`){a().handleRelayNotification(JSON.parse(t));return}if(e===`plan.created`||e===`plan.changed`){let e=JSON.parse(t),n=e.plan??e.data?.plan;n&&a().upsertPlan(n);return}if(e===`plan.deleted`){let e=JSON.parse(t),n=e.plan??e.data?.plan,r=n?.id??e.planId??e.id??e.data?.planId??e.data?.id;(n||r)&&a().removePlan(n??r);return}if(e===`team.dissolved`){let e=JSON.parse(t);e.teamId&&a().markTeamDissolved({teamId:e.teamId,outcomeStatus:e.outcomeStatus,reason:e.reason}),Promise.all([a().fetchTeams(),a().fetchTeamOutcomeAggregates()]);return}if(e===`activity.created`){let e=JSON.parse(t);n({activityEvents:B(a().activityEvents,e)}),e.issueRefId&&a().fetchIssueRef(e.issueRefId),e.agentId&&a().agentDetailOpen&&a().agentDetailId===e.agentId&&a().fetchAgentIssueActivity(e.agentId);return}if(e===`agent.status`){let e=JSON.parse(t),r=a(),i=r.agentsById[e.id],o=gt(i,e);if(n({agents:B(r.agents,o),agentsById:{...r.agentsById,[o.id]:o}}),r.livenessMismatches[o.id]&&o.status!==`offline`){let e={...r.livenessMismatches};delete e[o.id],n({livenessMismatches:e})}let s=r.commandStalls[o.id];if(s){let e=St(o);if(e?.status&&xt.has(e.status)&&(e.timestamp??0)>s.ts){let e={...r.commandStalls};delete e[o.id],n({commandStalls:e})}}let c=St(o),l=c?.status??bt(i,o);if(l){let e=c?.timestamp??Date.now(),t=c?.id||`agent-status:${o.id}:${l}:${e}`;n({chatStatusEvents:yt(r.chatStatusEvents,o.id,l,e,t)})}return}if(e===`dashboard.presence`){let e=JSON.parse(t);e.agentId&&a().applyPresence(e.agentId,e.viewers??[]);return}if(e===`liveness.mismatch`){let e=JSON.parse(t);e.agentId&&n({livenessMismatches:{...a().livenessMismatches,[e.agentId]:{agentId:e.agentId,detail:e.detail??`Process reported running but relay marked it offline`,ts:Date.now(),policyName:e.policyName,spawnRequestId:e.spawnRequestId}}});return}if(e===`command.stalled`){let e=JSON.parse(t);if(e.agentId){let t=Date.now(),r=e.kind??`compact`,i=r===`clear`?`clear-stalled`:`compaction-stalled`;n({commandStalls:{...a().commandStalls,[e.agentId]:{agentId:e.agentId,kind:r,detail:e.detail??`A context command was requested but never started — the session may need manual intervention.`,ts:t,commandId:e.commandId}},chatStatusEvents:yt(a().chatStatusEvents,e.agentId,i,t,`command-stalled:${e.agentId}:${e.commandId??t}`)})}return}if(e===`agent.removed`){let e=JSON.parse(t),r=a(),i={...r.agentsById};delete i[e.id];let o={...r.livenessMismatches};delete o[e.id];let s={...r.commandStalls};delete s[e.id],n({livenessMismatches:o,commandStalls:s}),n({agents:r.agents.filter(t=>t.id!==e.id),agentsById:i});return}if(e===`provider-quota.updated`){n({quotaSeq:a().quotaSeq+1});return}if(e===`message.claimed`){let e=JSON.parse(t);n({messages:a().messages.map(t=>t.id===e.messageId?{...t,claimedBy:e.claimedBy,claimExpiresAt:e.claimExpiresAt}:t)});return}if(e===`message.claim_released`){let e=JSON.parse(t);n({messages:a().messages.map(t=>t.id===e.messageId?{...t,claimedBy:void 0,claimedAt:void 0,claimExpiresAt:void 0}:t)});return}if(e===`message.deleted`){let e=JSON.parse(t);n({messages:a().messages.filter(t=>t.id!==e.messageId)});return}if(e===`orchestrator.status`){let e=JSON.parse(t);n({orchestrators:B(a().orchestrators,e)});return}if(e===`orchestrator.removed`){let e=JSON.parse(t);n({orchestrators:a().orchestrators.filter(t=>t.id!==e.id)});return}if(e===`policy.state.changed`||e===`config.changed`){a().fetchManagedPolicies();return}if(e===`command.failed`){let e=JSON.parse(t).command;if(e?.type===`agent.spawn`){let t=Ht(e),r=typeof e.updatedAt==`number`?e.updatedAt:typeof e.createdAt==`number`?e.createdAt:Date.now(),i=f(e.params)?e.params:{},o=d(i.spawnRequestId)??e.correlationId,s=d(i.provider),c=`command:${e.id??o??r}:agent-spawn-failed`,l={id:Ut(e),clientId:c,kind:`state`,title:`agent.spawn · failed`,body:t,meta:[s,o].filter(Boolean).join(` · `)||e.target,icon:`ti-alert-triangle`,view:`agents`,createdAt:r,ts:r,metadata:{commandId:e.id,commandType:e.type,status:e.status??`failed`,target:e.target,provider:s,spawnRequestId:o}};n({activityEvents:Gt(a().activityEvents,l)}),a().showNotification(`Spawn failed: ${t}`)}return}if(e===`command.dispatched`||e===`command.succeeded`){let r=JSON.parse(t).command;if(r){let t=wt(r,e);if(t){let e=typeof r.updatedAt==`number`?r.updatedAt:typeof r.createdAt==`number`?r.createdAt:Date.now();n({chatStatusEvents:yt(a().chatStatusEvents,Ct(r),t,e,r.id?`command:${r.id}:${t}`:void 0)})}}return}if(e.startsWith(`task.`)){let e=JSON.parse(t);if(e.kind===`deliverable`){let t=a(),r=B(t.deliverableTasks,e),i=!t.deliverableStatusFilter||e.status===t.deliverableStatusFilter,o=e.deliverableStage??`none`,s=!t.deliverableStageFilter||o===t.deliverableStageFilter,c=!t.deliverableProjectFilter||e.projectId===t.deliverableProjectFilter;n({deliverableTasks:i&&s&&c?r:r.filter(t=>t.id!==e.id)}),t.taskDetailById[e.id]&&n({taskDetailById:{...t.taskDetailById,[e.id]:e}})}else n({tasks:B(a().tasks,e)})}}}})})},disconnectSSE(){let e=a()._es;e&&(e.close(),n({_es:null}))},openCommandPalette(){n({commandQuery:``,commandPaletteOpen:!0})},closeCommandPalette(){n({commandPaletteOpen:!1,commandQuery:``})},async runCommand(e){let{action:t,payload:r}=e;if(a().closeCommandPalette(),t===`openView`)await a().switchView(r.view);else if(t===`agentPreset`)n({showOffline:!0,agentPresetFilter:r.preset||``}),await a().switchView(`agents`);else if(t===`copy`)try{await navigator.clipboard?.writeText(r.value||``)}catch{}else if(t===`messageAgent`){let e=a().agentsById[r.agentId];e&&a().openComposeToAgent(e)}else t===`pairAgent`?a().openPairInvite(r.agentId):t===`filterTag`?(n({agentTagFilter:r.tag||``,tagFilter:r.tag||``}),await a().switchView(`agents`)):t===`exportActivity`&&a().exportActivity(r.format||`markdown`)},async saveTokenAndRefresh(){let e=a().authToken;t(e);try{await i(`GET`,`/stats`)}catch(e){if(e.status===401){n({authNeeded:!0});return}}n({authNeeded:!1,connectionError:!1}),a().connectSSE(),await a().refresh(),a().startAutoRefresh()},destroy(){o(null),a().disconnectSSE(),a().stopAutoRefresh(),a().stopClock()}}),qt=(e,t)=>({users:[],usersById:{},presenceByAgent:{},async fetchUsers(){try{let n=await i(`GET`,`/users`),r=V(t().users,n);if(r===t().users)return;let a={};for(let e of r)a[e.id]=e;e({users:r,usersById:a})}catch{}},applyPresence(n,r){e({presenceByAgent:{...t().presenceByAgent,[n]:r}})},async announcePresence(e,n,r){try{let a=await i(`POST`,`/agents/`+encodeURIComponent(e)+`/presence`,{typing:n,...r?{leaving:!0}:{}});t().applyPresence(e,a.viewers??[])}catch{}}}),Jt=(e,t)=>({agents:[],agentsById:{},showOffline:!1,showBuiltIns:!1,agentSort:`status`,agentSortDir:`asc`,agentPresetFilter:``,agentStatusFilter:``,agentTagFilter:``,agentHostFilter:``,selectedAgent:``,agentDetailOpen:!1,agentDetailId:``,livenessMismatches:{},commandStalls:{},channelDetailOpen:!1,channelDetailId:``,renameModal:{show:!1,agentId:``,label:``},tagFilter:``,async fetchAgents(){try{let n=await i(`GET`,`/agents`),r=V(t().agents,n);if(r===t().agents)return;e({agents:r,agentsById:_t(r)})}catch{}},openAgentDetail(n){e({agentDetailId:n.id,agentDetailOpen:!0}),t().fetchAgents()},closeAgentDetail(){e({agentDetailOpen:!1})},openChannelDetail(t){e({channelDetailId:t.id,channelDetailOpen:!0})},closeChannelDetail(){e({channelDetailOpen:!1})},openRename(t){e({renameModal:{show:!0,agentId:t.id,label:t.label||``}})},async doRename(){let n=t(),r=n.renameModal.label.trim()||null;try{await i(`PATCH`,`/agents/`+n.renameModal.agentId+`/label`,{label:r}),e({renameModal:{...n.renameModal,show:!1}})}catch(e){t().showError(`Rename Failed`,e.message)}},async doDeleteAgent(n){try{await i(`DELETE`,`/agents/`+n);let r=t(),a={...r.agentsById};delete a[n],e({agents:r.agents.filter(e=>e.id!==n),agentsById:a,selectedAgent:r.selectedAgent===n?``:r.selectedAgent})}catch(e){t().showError(`Delete Failed`,e.message)}},async doAgentAction(e,n,r){try{await i(`POST`,`/agents/`+encodeURIComponent(e.id)+`/actions`,{action:n,...r?{surface:{component:r}}:{}});let a=n===`restart`?`Restart`:n===`resume`?`Resume`:n===`shutdown`?`Shutdown`:n===`compact`?`Compact`:n===`clearContext`?`Clear context`:n;t().showNotification(`${a} command sent to ${ne(e)}`),await Promise.all([t().fetchMessages(),t().fetchActivityEvents()])}catch(e){t().showError(`Action Failed`,e.message)}}}),U=300,W={messages:[],oldestLoadedId:null,hasMore:!0,loading:!1,loadedInitial:!1,gapBeforeId:null};function G(e,t){let n=new URLSearchParams;for(let[e,r]of Object.entries(t))n.set(e,String(r));return`/agents/${encodeURIComponent(e)}/chat?${n.toString()}`}function K(e,t){return t.filter(t=>h(e,t)&&!g(t)).sort((e,t)=>e.id-t.id)}function q(e,t){return V(e,[...e,...t].sort((e,t)=>e.id-t.id))}var Yt=10;async function Xt(e,t,n){let r=[],a=t;for(let t=0;t<Yt;t++){let t=await i(`GET`,G(e,{before:a,limit:U})),o=K(e,t);if(o.length===0)break;r.push(...o);let s=o[0].id;if(n.has(s)||t.length<U)break;a=s}return r}function Zt(e,t){return t.some(e=>e.from===`user`)?e.filter(e=>e.id>=0||e.from!==`user`):e}function J(e){return e[0]?.id??null}var Qt=12,Y=[];function $t(e){let t=Y.indexOf(e);t!==-1&&Y.splice(t,1),Y.unshift(e)}function en(e,t){let n=new Set(t.filter(Boolean)),r=0;for(let t of Y){if(r>=Qt)break;e[t]?.loadedInitial&&(n.add(t),r++)}let i={};for(let[t,r]of Object.entries(e))(!r.loadedInitial||n.has(t))&&(i[t]=r);return i}var tn=(e,t)=>({messages:[],agentChatByAgent:{},threadHistory:{},threadMessages:[],threadOpen:!1,chatHistoryImports:[],selectedInboxThread:``,replyTo:null,composeOpen:!1,showReasoning:!1,chatAgentSearch:``,chatAgentProviderFilter:``,chatAgentStatusFilter:``,chatAgentTagFilter:``,chatAgentCapFilter:``,chatAgentHostFilter:``,chatAgentSort:`status`,chatAgentSortDir:`asc`,chatAgentGroupBy:``,chatAgentFiltersCollapsed:!0,chatCollapsedChildren:[],feedObserveAll:!1,coordinatorFollows:[],coordinatorMutes:[],chatStatusEvents:{},chatStickToBottom:!0,chatHasNewItems:!1,inboxReadCursors:{},inboxArchivedThreads:{},inboxDrafts:{},chatSending:!1,inboxSearch:``,inboxSort:`attention`,inboxSortDir:`desc`,inboxShowArchived:!1,channelFilter:``,compose:{...m},inboxCompose:{...x},async fetchMessages(){try{let n=t(),r=`/messages?limit=100`;n.view===`messages`&&n.selectedAgent&&(r+=`&for=`+encodeURIComponent(n.selectedAgent)),n.view===`messages`&&n.channelFilter&&(r+=`&channel=`+encodeURIComponent(n.channelFilter));let a=await i(`GET`,r),o=Et(t().messages,a);e({messages:o});let s=t(),c=s.selectedInboxThread;if(Ot(c,s)){let e=0;for(let t of o)t.id>e&&ae(t)===c&&ee(t)&&y(t)&&(e=t.id);e&&t().markInboxThreadReadTo(c,e)}}catch{}},async loadAgentChat(n){if(!n)return;$t(n);let r=t().agentChatByAgent[n];if(!r?.loading){r?.loadedInitial&&r.messages.length>0||e(e=>({agentChatByAgent:{...e.agentChatByAgent,[n]:{...e.agentChatByAgent[n]??W,loading:!0}}}));try{let r=await i(`GET`,G(n,{limit:U})),a=K(n,r),o=t().agentChatByAgent[n]??W,s=o.loadedInitial?q(Zt(o.messages,a),a):V([],a),c=o.loadedInitial?o.hasMore:r.length===U;if(e(e=>({agentChatByAgent:en({...e.agentChatByAgent,[n]:{messages:s,oldestLoadedId:J(s),hasMore:c,loading:!1,loadedInitial:!0,gapBeforeId:o.loadedInitial?o.gapBeforeId??null:null}},[n,t().selectedAgent,t().selectedInboxThread])})),o.loadedInitial&&o.messages.length>0&&a.length>0&&r.length===U){let t=o.messages[o.messages.length-1].id,r=a[0].id;if(r>t)try{let t=await Xt(n,r,new Set(o.messages.map(e=>e.id)));t.length&&e(e=>{let r=e.agentChatByAgent[n];if(!r)return{};let i=q(r.messages,t);return{agentChatByAgent:{...e.agentChatByAgent,[n]:{...r,messages:i,oldestLoadedId:J(i)}}}})}catch(t){console.warn(`[chat] gap backfill failed for ${n}, marking for retry on next reconnect: ${t.message}`),e(e=>{let t=e.agentChatByAgent[n];if(!t)return{};let i=t.gapBeforeId===null?r:Math.min(t.gapBeforeId,r);return{agentChatByAgent:{...e.agentChatByAgent,[n]:{...t,gapBeforeId:i}}}})}}}catch(r){e(e=>({agentChatByAgent:{...e.agentChatByAgent,[n]:{...e.agentChatByAgent[n]??W,loading:!1}}})),t().showError(`Chat Load Failed`,r.message)}}},async loadOlder(n){if(!n)return;let r=t().agentChatByAgent[n];if(!r?.loadedInitial){await t().loadAgentChat(n);return}if(!r.loading){if(r.gapBeforeId!==null){await t().gapFillAgentChat(n);return}if(!(!r.hasMore||r.oldestLoadedId===null)){e(e=>({agentChatByAgent:{...e.agentChatByAgent,[n]:{...r,loading:!0}}}));try{let a=await i(`GET`,G(n,{before:r.oldestLoadedId,limit:U})),o=K(n,a),s=t().agentChatByAgent[n]??r,c=V(s.messages,[...o,...s.messages].sort((e,t)=>e.id-t.id));e(e=>({agentChatByAgent:{...e.agentChatByAgent,[n]:{...s,messages:c,oldestLoadedId:J(c),hasMore:a.length===U,loading:!1,loadedInitial:!0}}}))}catch(i){e(e=>({agentChatByAgent:{...e.agentChatByAgent,[n]:{...e.agentChatByAgent[n]??r,loading:!1}}})),t().showError(`Chat Load Failed`,i.message)}}}},async gapFillAgentChat(n){if(!n)return;let r=t().agentChatByAgent[n];if(!(!r?.loadedInitial||r.messages.length===0)){try{if(r.gapBeforeId!==null){let t=new Set(r.messages.map(e=>e.id)),i=await Xt(n,r.gapBeforeId,t);e(e=>{let t=e.agentChatByAgent[n]??r,a=i.length?q(t.messages,i):t.messages;return{agentChatByAgent:{...e.agentChatByAgent,[n]:{...t,messages:a,oldestLoadedId:J(a),gapBeforeId:null}}}})}}catch(e){console.warn(`[chat] gap backfill retry skipped for ${n}: ${e.message}`)}try{let e=t().agentChatByAgent[n]??r,a=e.messages[e.messages.length-1].id;for(;;){let e=a,r=await i(`GET`,G(n,{since:a,limit:U}));if(r.length===0||(t().appendChatTail(n,r.filter(t=>t.id>e)),a=r[r.length-1].id,a<=e)||r.length<U)return;let o=t().agentChatByAgent[n],s=o?.messages[o.messages.length-1]?.id;s&&s>a&&(a=s)}}catch(e){console.warn(`[chat] gap-fill skipped for ${n}: ${e.message}`)}}},appendChatTail(n,r){if(!n||r.length===0)return;let i=K(n,r);if(i.length===0)return;let a=t().agentChatByAgent[n]??W,o=q(Zt(a.messages,i),i);e({agentChatByAgent:{...t().agentChatByAgent,[n]:{...a,messages:o,oldestLoadedId:J(o)}}})},async fetchThreadHistory(n){if(n)try{let r=await i(`GET`,`/messages?for=`+encodeURIComponent(n)+`&limit=500`);e({threadHistory:{...t().threadHistory,[n]:r}})}catch{}},async fetchChatHistoryImports(){try{e({chatHistoryImports:await i(`GET`,`/chat/history-imports?limit=500`)})}catch{}},async fetchInboxState(){try{let n=await i(`GET`,`/inbox/state?operatorId=user`),r={},a={},o={};for(let e of n?.threads||[])e.readCursorMessageId&&(r[e.peerId]=e.readCursorMessageId),e.archivedAtMessageId&&(a[e.peerId]=e.archivedAtMessageId);for(let e of n?.drafts||[])e.body&&(o[e.peerId]=e.body);let s=t().inboxDrafts;e({inboxReadCursors:r,inboxArchivedThreads:a,...Object.keys(s).length>0?{}:{inboxDrafts:o}})}catch{}},openCompose(){e({composeOpen:!0,compose:{...m,from:T}})},openComposeToAgent(t){e({replyTo:null,compose:{...m,from:T,to:t.id},composeOpen:!0})},async doSend(){let n=t();if(!n.compose.from||!n.compose.to||!n.compose.body){t().showError(`Validation`,`From, To, and Message are required.`);return}try{let r={from:n.compose.from,to:n.compose.to,body:n.compose.body};n.compose.channel&&(r.channel=n.compose.channel),n.compose.subject&&(r.subject=n.compose.subject),n.replyTo&&(r.replyTo=n.replyTo.id),n.compose.claimable&&(r.claimable=!0,r.kind=`task`,r.payload={title:n.compose.subject||`Claimable task`}),await i(`POST`,`/messages`,r),e({composeOpen:!1,replyTo:null,compose:{...m,from:T}}),await t().fetchMessages()}catch(e){t().showError(`Send Failed`,e.message)}},async doClaim(e){let n=t(),r=n.compose.from||n.selectedAgent;if(!r){t().showError(`Validation`,`Select an agent first.`);return}try{let n=await i(`POST`,`/messages/`+e+`/claim`,{agentId:r});n.ok||t().showError(`Claim Failed`,n.error||`unknown`),n.ok&&await Promise.all([t().fetchMessages(),t().fetchTasks()])}catch(e){t().showError(`Claim Failed`,e.message)}},async doDeliveryAction(e,n,r){try{await i(`POST`,`/messages/`+e+`/delivery/actions`,{action:n,reason:r,agentId:t().compose.from||t().selectedAgent||`user`}),await t().fetchMessages()}catch(e){t().showError(`Delivery Update Failed`,e.message)}},async doDeleteMessage(n){try{await i(`DELETE`,`/messages/`+n),e({messages:t().messages.filter(e=>e.id!==n)})}catch(e){t().showError(`Delete Failed`,e.message)}},applyChatMessageUpdate(n){let r=t().agentChatByAgent,i={};for(let[e,t]of Object.entries(r))t.messages.some(e=>e.id===n.id)&&(i[e]={...t,messages:t.messages.map(e=>e.id===n.id?n:e)});Object.keys(i).length!==0&&e({agentChatByAgent:{...r,...i}})},async reactToMessage(n,r){try{let a=(n.reactions||[]).some(e=>e.actorId===`user`&&e.emoji===r),o=await i(`POST`,`/messages/`+n.id+`/reactions`,{actorId:T,emoji:r,action:a?`remove`:`add`});e({messages:B(t().messages,o)}),t().applyChatMessageUpdate(o)}catch(e){t().showError(`Reaction Failed`,e.message)}},startReply(t){let n=t.from===`user`?t.to:t.from;e({replyTo:{id:t.id,from:t.from},compose:{...m,from:T,to:n,channel:t.channel||``},composeOpen:!0})},cancelReply(){e({replyTo:null})},async openThread(n){e({threadMessages:[],threadOpen:!0});try{e({threadMessages:await i(`GET`,`/messages/`+n+`/thread`)})}catch(e){t().showError(`Thread Load Failed`,e.message)}},openInboxThread(n,r=[]){e({selectedInboxThread:n}),r.length&&t().markInboxThreadRead(n,r)},async sendChatMessage(n,r,a=[]){if(!n.trim()&&a.length===0||t().chatSending)return;let o=r.peer;e({chatSending:!0});let s=t().inboxDrafts[o],c={...t().inboxDrafts};delete c[o],e({inboxDrafts:c});let l=-Date.now(),u={id:l,from:T,to:o,kind:`chat`,body:n.trim()||`Attachment`,...r.lastMessage?.channel?{channel:r.lastMessage.channel}:{},payload:a.length?{attachments:a}:{},readBy:[T],createdAt:Date.now()};e(e=>{let t=e.agentChatByAgent[o]??W,n=[...t.messages,u];return{agentChatByAgent:{...e.agentChatByAgent,[o]:{...t,messages:n,oldestLoadedId:J(n)}}}});try{let s=t().agentsById[o]?.providerCapabilities?.liveSession?.inject,c=null;if(s)await i(`POST`,`/agents/`+encodeURIComponent(o)+`/prompt`,{body:n.trim()||`Attachment`,...a.length?{attachments:a}:{}});else{let e={from:T,to:o,body:n.trim()||`Attachment`};r.lastMessage?.channel&&(e.channel=r.lastMessage.channel),r.lastMessage?.id&&(e.replyTo=r.lastMessage.id),a.length&&(e.payload={attachments:a}),c=await i(`POST`,`/messages`,e)}e(e=>{let t=e.agentChatByAgent[o];if(!t)return{};let n=t.messages.filter(e=>e.id!==l);if(c){let r=n.some(e=>e.id===c.id)?n:q(n,[c]);return{agentChatByAgent:{...e.agentChatByAgent,[o]:{...t,messages:r,oldestLoadedId:J(r)}}}}return{agentChatByAgent:{...e.agentChatByAgent,[o]:{...t,messages:n,oldestLoadedId:J(n)}}}}),i(`DELETE`,`/inbox/drafts?operatorId=`+encodeURIComponent(S)+`&peerId=`+encodeURIComponent(o)).catch(()=>{}),Promise.all([t().fetchMessages(),t().loadAgentChat(o)])}catch(n){s!==void 0&&e(e=>e.inboxDrafts[o]===void 0?{inboxDrafts:{...e.inboxDrafts,[o]:s}}:{}),e(e=>{let t=e.agentChatByAgent[o];if(!t)return{};let n=t.messages.filter(e=>e.id!==l);return{agentChatByAgent:{...e.agentChatByAgent,[o]:{...t,messages:n,oldestLoadedId:J(n)}}}}),t().showError(`Send Failed`,n.message)}e({chatSending:!1})},async sendPermissionDecision(e,n,r,a){try{await i(`POST`,`/agents/`+encodeURIComponent(e)+`/permission-decision`,{approvalId:n,decision:r,...a?{answers:a}:{}});let o=r===`approve`?`Approved`:r===`approve-session`?`Approved for session`:r===`abort`?`Aborted`:r===`answer`?`Answer sent for`:`Denied`;t().showNotification(`${o} ${r===`answer`?`Claude's question`:`permission request`}`),await t().fetchAgents()}catch(e){t().showError(`Permission Failed`,e.message)}},markInboxThreadReadTo(n,r){!n||r<=(t().inboxReadCursors[n]||0)||(e({inboxReadCursors:{...t().inboxReadCursors,[n]:r}}),i(`PATCH`,`/inbox/threads`,{operatorId:S,peerId:n,readCursorMessageId:r}).catch(()=>{}))},markInboxThreadRead(e,n){!e||!n.length||t().markInboxThreadReadTo(e,jt(n))},markInboxThreadUnread(n){let r={...t().inboxReadCursors};delete r[n],e({inboxReadCursors:r}),i(`PATCH`,`/inbox/threads`,{operatorId:S,peerId:n,readCursorMessageId:null}).catch(()=>{})},archiveInboxThread(n,r){e({inboxArchivedThreads:{...t().inboxArchivedThreads,[n]:r}}),t().selectedInboxThread===n&&e({selectedInboxThread:``}),i(`PATCH`,`/inbox/threads`,{operatorId:S,peerId:n,archivedAtMessageId:r}).catch(()=>{})},unarchiveInboxThread(n){let r={...t().inboxArchivedThreads};delete r[n],e({inboxArchivedThreads:r}),i(`PATCH`,`/inbox/threads`,{operatorId:S,peerId:n,archivedAtMessageId:null}).catch(()=>{})},setReplyDraft(n,r){let a={...t().inboxDrafts};r?a[n]=r:delete a[n],e({inboxDrafts:a}),r?i(`PUT`,`/inbox/drafts`,{operatorId:S,peerId:n,body:r}).catch(()=>{}):i(`DELETE`,`/inbox/drafts?operatorId=`+encodeURIComponent(S)+`&peerId=`+encodeURIComponent(n)).catch(()=>{})},async sendInboxReply(n,r){let a=(t().inboxDrafts[n]||``).trim();if(!a||t().chatSending){a||t().showError(`Validation`,`Reply body is required.`);return}e({chatSending:!0});try{let o={from:T,to:n,body:a};r?.channel&&(o.channel=r.channel),r?.id&&(o.replyTo=r.id),await i(`POST`,`/messages`,o);let s={...t().inboxDrafts};delete s[n],e({inboxDrafts:s}),i(`DELETE`,`/inbox/drafts?operatorId=`+encodeURIComponent(S)+`&peerId=`+encodeURIComponent(n)).catch(()=>{}),await t().fetchMessages()}catch(e){t().showError(`Reply Failed`,e.message)}e({chatSending:!1})},toggleChatChildrenCollapsed(n){let r=t().chatCollapsedChildren;e({chatCollapsedChildren:r.includes(n)?r.filter(e=>e!==n):[...r,n]})},setFeedObserveAll(t){e({feedObserveAll:t})},toggleCoordinatorFollow(n){let r=t().coordinatorFollows,i=t().coordinatorMutes;r.includes(n)?e({coordinatorFollows:r.filter(e=>e!==n)}):e({coordinatorFollows:[...r,n],coordinatorMutes:i.filter(e=>e!==n)})},toggleCoordinatorMute(n){let r=t().coordinatorMutes,i=t().coordinatorFollows;r.includes(n)?e({coordinatorMutes:r.filter(e=>e!==n)}):e({coordinatorMutes:[...r,n],coordinatorFollows:i.filter(e=>e!==n)})},async doSendInboxCompose(){let n=t().inboxCompose,r=n.to;if(r){if(n.toMode===`tag`?r=`tag:`+r:n.toMode===`cap`&&(r=`cap:`+r),!n.body){t().showError(`Validation`,`Message is required.`);return}try{let a={from:T,to:r,body:n.body};n.channel&&(a.channel=n.channel),n.subject&&(a.subject=n.subject),n.claimable&&(a.claimable=!0,a.kind=`task`,a.payload={title:n.subject||`Claimable task`}),await i(`POST`,`/messages`,a),e({inboxCompose:{...x,toMode:n.toMode,to:n.to}}),await t().fetchMessages()}catch(e){t().showError(`Send Failed`,e.message)}}}});function X(e,t){return JSON.stringify([String(e),t||``])}function Z(e,t){return JSON.stringify([`team`,e,t||``])}function nn(e){return{threadId:String(e.threadId),...e.channel?{channel:e.channel}:{}}}function rn(e){return e.teamId?{teamId:e.teamId,...e.channel?{channel:e.channel}:{}}:null}function an(e){return`teamId`in e?Z(e.teamId,e.channel):X(e.threadId,e.channel)}function on(e){let t=new URLSearchParams(`teamId`in e?{teamId:e.teamId}:{threadId:String(e.threadId)});return e.channel&&t.set(`channel`,e.channel),`/plans?${t.toString()}`}var sn=(e,t)=>({plansById:{},plansByThread:{},plansByTeam:{},planLookups:{},planLoading:{},planCollapsed:null,sessionTasksCollapsed:!1,setPlanCollapsed(t){e({planCollapsed:t})},setSessionTasksCollapsed(t){e({sessionTasksCollapsed:t})},async fetchPlan(n){let r=`teamId`in n?{teamId:n.teamId,...n.channel?{channel:n.channel}:{}}:{threadId:String(n.threadId),...n.channel?{channel:n.channel}:{}},a=an(r);e({planLookups:{...t().planLookups,[a]:r},planLoading:{...t().planLoading,[a]:!0}});try{let n=await i(`GET`,on(r)),o=nn(n),s=X(o.threadId,o.channel),c=rn(n),l=c?Z(c.teamId,c.channel):``,u=!(`teamId`in r),d=`teamId`in r;e({plansById:{...t().plansById,[n.id]:n},plansByThread:{...t().plansByThread,...u?{[a]:n}:{},[s]:n},plansByTeam:c?{...t().plansByTeam,...d?{[a]:n}:{},[l]:n}:t().plansByTeam,planLookups:{...t().planLookups,[a]:r,[s]:o,...c?{[l]:c}:{}},planLoading:{...t().planLoading,[a]:!1,[s]:!1,...c?{[l]:!1}:{}}}),t().hydrateIssueRefsForPlan(n)}catch(n){let i=typeof n.status==`number`?n.status:0;e({plansByThread:i===404&&!(`teamId`in r)?{...t().plansByThread,[a]:null}:t().plansByThread,plansByTeam:i===404&&`teamId`in r?{...t().plansByTeam,[a]:null}:t().plansByTeam,planLoading:{...t().planLoading,[a]:!1}}),i&&i!==404&&t().showError(`Plan Load Failed`,n.message)}},async refreshPlans(){let e=Object.values(t().planLookups);await Promise.all(e.map(e=>t().fetchPlan(e)))},async setPlanArchived(e,n){try{let r=await i(`PATCH`,`/plans/${encodeURIComponent(e)}/archive`,{archived:n});t().upsertPlan(r)}catch(e){t().showError(n?`Plan Archive Failed`:`Plan Unarchive Failed`,e.message)}},upsertPlan(n){let r=nn(n),i=X(r.threadId,r.channel),a=rn(n),o=a?Z(a.teamId,a.channel):``;e({plansById:{...t().plansById,[n.id]:n},plansByThread:{...t().plansByThread,[i]:n},plansByTeam:a?{...t().plansByTeam,[o]:n}:t().plansByTeam,planLookups:{...t().planLookups,[i]:r,...a?{[o]:a}:{}},planLoading:{...t().planLoading,[i]:!1,...a?{[o]:!1}:{}}}),t().hydrateIssueRefsForPlan(n)},removePlan(n){let r=typeof n==`string`?n:n.id,i={...t().plansById};delete i[r],e({plansById:i,plansByThread:Object.fromEntries(Object.entries(t().plansByThread).filter(([,e])=>e?.id!==r)),plansByTeam:Object.fromEntries(Object.entries(t().plansByTeam).filter(([,e])=>e?.id!==r)),planLookups:Object.fromEntries(Object.entries(t().planLookups).filter(([e])=>t().plansByThread[e]?.id!==r&&t().plansByTeam[e]?.id!==r))})}}),cn=(e,t)=>({teams:[],teamsLoading:!1,teamsError:null,teamOutcomeAggregates:null,teamOutcomeAggregatesLoading:!1,teamOutcomeAggregatesError:null,async fetchTeams(){e({teamsLoading:!0,teamsError:null});try{let n=await i(`GET`,`/teams`),r=V(t().teams,n.teams);return e({teams:r,teamsLoading:!1,teamsError:null}),r}catch(n){return e({teamsLoading:!1,teamsError:l(n)}),t().teams}},async fetchTeamOutcomeAggregates(){e({teamOutcomeAggregatesLoading:!0,teamOutcomeAggregatesError:null});try{let t=await i(`GET`,`/teams/outcomes`);return e({teamOutcomeAggregates:t,teamOutcomeAggregatesLoading:!1,teamOutcomeAggregatesError:null}),t}catch(n){return e({teamOutcomeAggregatesLoading:!1,teamOutcomeAggregatesError:l(n)}),t().teamOutcomeAggregates}},upsertTeam(n){let r=B(t().teams,n);r!==t().teams&&e({teams:r})},markTeamDissolved(n){let r=Date.now();e({teams:t().teams.map(e=>e.id===n.teamId?{...e,status:`dissolved`,updatedAt:r,dissolvedAt:e.dissolvedAt??r,zeroMembersSince:void 0,...n.outcomeStatus?{outcomeStatus:n.outcomeStatus}:{},...n.reason?{outcomeSummary:n.reason}:{}}:e)})},async dissolveTeam(e){try{let n=await i(`POST`,`/teams/${encodeURIComponent(e)}/dissolve`,{});t().upsertTeam(n),t().showNotification(`Team dissolved`),await Promise.all([t().fetchTeams(),t().fetchTeamOutcomeAggregates(),t().fetchActivityEvents()])}catch(e){t().showError(`Dissolve Failed`,l(e))}}});function ln(e,t){return JSON.stringify([e,t])}function un(e){return[...new Set(e.nodes.map(e=>e.refs?.issueId).filter(e=>!!e))]}function Q(e,t){let n=!1,r={...e};for(let i of t){let t=e[i.id];(!t||JSON.stringify(t)!==JSON.stringify(i))&&(r[i.id]=i,n=!0)}return n?r:e}var dn=(e,t)=>({issueRefsById:{},issuesByEntity:{},issueActivityByAgent:{},issueLoading:{},issueErrors:{},async fetchAllIssueRefs(){try{let n=await i(`GET`,`/issue-refs?limit=500`);e({issueRefsById:Q(t().issueRefsById,n.issueRefs)})}catch{}},async fetchIssueRef(n){let r=`ref:${n}`;e({issueLoading:{...t().issueLoading,[r]:!0},issueErrors:{...t().issueErrors,[r]:null}});try{let a=await i(`GET`,`/issue-refs/${encodeURIComponent(n)}`);return e({issueRefsById:Q(t().issueRefsById,[a.issueRef]),issueLoading:{...t().issueLoading,[r]:!1}}),a.issueRef}catch(i){return e({issueLoading:{...t().issueLoading,[r]:!1},issueErrors:{...t().issueErrors,[r]:l(i)}}),t().issueRefsById[n]??null}},async fetchIssuesForEntity(n,r){let a=ln(n,r);e({issueLoading:{...t().issueLoading,[a]:!0},issueErrors:{...t().issueErrors,[a]:null}});try{let o=await i(`GET`,`/issue-associations/entities/${encodeURIComponent(n)}/${encodeURIComponent(r)}/issues`);return e({issuesByEntity:{...t().issuesByEntity,[a]:o.issues},issueRefsById:Q(t().issueRefsById,o.issues.map(e=>e.issueRef)),issueLoading:{...t().issueLoading,[a]:!1}}),o.issues}catch(n){return e({issueLoading:{...t().issueLoading,[a]:!1},issueErrors:{...t().issueErrors,[a]:l(n)}}),t().issuesByEntity[a]??[]}},async fetchAgentIssueActivity(n){let r=`agent:${n}`;e({issueLoading:{...t().issueLoading,[r]:!0},issueErrors:{...t().issueErrors,[r]:null}});try{let a=await i(`GET`,`/issue-activity/agents/${encodeURIComponent(n)}`);return e({issueActivityByAgent:{...t().issueActivityByAgent,[n]:a.issues},issueRefsById:Q(t().issueRefsById,a.issues.map(e=>e.issueRef)),issueLoading:{...t().issueLoading,[r]:!1}}),a.issues}catch(i){return e({issueLoading:{...t().issueLoading,[r]:!1},issueErrors:{...t().issueErrors,[r]:l(i)}}),t().issueActivityByAgent[n]??[]}},async hydrateIssueRefsForPlan(e){let n=un(e).filter(e=>!t().issueRefsById[e]);await Promise.all(n.map(e=>t().fetchIssueRef(e)))},async refreshIssueRefs(){let e=Object.keys(t().issueRefsById).map(e=>t().fetchIssueRef(e)),n=Object.keys(t().issuesByEntity).map(e=>{try{let[n,r]=JSON.parse(e);return t().fetchIssuesForEntity(n,r)}catch{return Promise.resolve([])}});await Promise.all([...e,...n])},upsertIssueRef(n){let r=Q(t().issueRefsById,[n]);r!==t().issueRefsById&&e({issueRefsById:r})}}),fn={title:``,intent:``,doneWhen:``,issueRefs:``,dependsOn:``,dispatchComplexity:``,dispatchType:``,dispatchFootprint:``,dispatchCriticality:``},pn=(e,t)=>({pairs:[],tasks:[],taskEvents:[],taskEventCache:{},taskEventsOpen:!1,pairInviteOpen:!1,pairMessageOpen:!1,pairInvite:{...E},deliverableTasks:[],deliverableStatusFilter:``,deliverableStageFilter:``,deliverableProjectFilter:``,taskDetailById:{},taskMemoryById:{},taskHistoryById:{},taskDetailOpen:!1,taskDetailId:null,taskCreateOpen:!1,taskCreateForm:{...fn},taskDispatchResultById:{},taskDispatchLoadingId:null,pairMessage:{...C},pairStatusFilter:`open`,taskStatusFilter:``,taskSourceFilter:``,async fetchPairs(){try{let n=t(),r;if(n.view===`activity`)r=await i(`GET`,`/pairs`);else if(n.pairStatusFilter===`open`){let[e,t]=await Promise.all([i(`GET`,`/pairs?status=active`),i(`GET`,`/pairs?status=pending`)]);r=[...e,...t]}else r=n.pairStatusFilter?await i(`GET`,`/pairs?status=`+encodeURIComponent(n.pairStatusFilter)):await i(`GET`,`/pairs`);let a=r.sort((e,t)=>new Date(t.updatedAt).getTime()-new Date(e.updatedAt).getTime()),o=V(t().pairs,a);o!==t().pairs&&e({pairs:o})}catch{}},async fetchTasks(){try{let n=t(),r=new URLSearchParams({limit:`100`});n.taskStatusFilter&&r.set(`status`,n.taskStatusFilter),n.taskSourceFilter&&r.set(`source`,n.taskSourceFilter);let a=V(t().tasks,await i(`GET`,`/tasks?`+r.toString()));a!==t().tasks&&e({tasks:a})}catch{}},async fetchDeliverableTasks(n){try{let r=t(),a=new URLSearchParams({kind:`deliverable`,limit:`200`});n?.unfiltered||(r.deliverableStatusFilter&&a.set(`status`,r.deliverableStatusFilter),r.deliverableStageFilter&&a.set(`deliverableStage`,r.deliverableStageFilter),r.deliverableProjectFilter&&a.set(`projectId`,r.deliverableProjectFilter));let o=await i(`GET`,`/tasks?`+a.toString()),s=V(t().deliverableTasks,o);s!==t().deliverableTasks&&e({deliverableTasks:s})}catch{}},async fetchTaskDetail(n){try{let r=await i(`GET`,`/tasks/`+n+`/detail`);e({taskDetailById:{...t().taskDetailById,[n]:r}})}catch{}},async fetchTaskMemory(n){try{let r=await i(`GET`,`/tasks/`+n+`/memory`);e({taskMemoryById:{...t().taskMemoryById,[n]:r}})}catch{}},async fetchTaskHistory(n){try{let r=await i(`GET`,`/tasks/`+n+`/history`);e({taskHistoryById:{...t().taskHistoryById,[n]:r}})}catch{}},openTaskDetail(n){e({taskDetailOpen:!0,taskDetailId:n.id}),t().fetchTaskDetail(n.id),t().fetchTaskMemory(n.id),t().fetchTaskHistory(n.id)},openTaskDetailById(n){e({taskDetailOpen:!0,taskDetailId:n}),t().fetchTaskDetail(n),t().fetchTaskMemory(n),t().fetchTaskHistory(n)},closeTaskDetail(){e({taskDetailOpen:!1,taskDetailId:null})},async doClaimTask(e){let n=t(),r=n.compose.from||n.selectedAgent;if(!r){t().showError(`Validation`,`Select an agent first.`);return}try{let n=await i(`POST`,`/tasks/`+e+`/claim`,{agentId:r});n.ok?await Promise.all([t().fetchTasks(),t().fetchMessages()]):t().showError(`Claim Failed`,n.error||`unknown`)}catch(e){t().showError(`Claim Failed`,e.message)}},async doUpdateTaskStatus(n,r){if(!(!n||!r||r===n.status))try{let a={status:r},o=n.claimedBy||t().compose.from||t().selectedAgent;o&&(a.agentId=o);let s=await i(`PATCH`,`/tasks/`+n.id+`/status`,a),c=s.task||s;if(e({tasks:t().tasks.map(e=>e.id===n.id?c:e)}),s.memoryEvent){let r=t().taskEventCache[n.id]||[];e({taskEventCache:{...t().taskEventCache,[n.id]:[...r,s.memoryEvent]},...t().taskEventsOpen?{taskEvents:[...t().taskEvents,s.memoryEvent]}:{}})}s.memory&&t().showNotification(`Memory captured: ${s.memory.title}`)}catch(e){t().showError(`Status Update Failed`,e.message),await t().fetchTasks()}},async openTaskEvents(n){e({taskEvents:[],taskEventsOpen:!0});try{let r=await i(`GET`,`/tasks/`+n.id+`/events`);e({taskEvents:r,taskEventCache:{...t().taskEventCache,[n.id]:r}})}catch(e){t().showError(`Task Events Failed`,e.message)}},openTaskCreate(){e({taskCreateOpen:!0,taskCreateForm:{...fn}})},closeTaskCreate(){e({taskCreateOpen:!1})},setTaskCreateForm(n){e({taskCreateForm:{...t().taskCreateForm,...n}})},async doCreateTask(){let{taskCreateForm:n}=t(),r=n.title.trim();if(!r){t().showError(`Validation`,`Title is required.`);return}let a=n.intent.trim()||r,o={};n.dispatchComplexity&&(o.complexity=n.dispatchComplexity),n.dispatchType&&(o.type=n.dispatchType),n.dispatchFootprint&&(o.contextFootprint=n.dispatchFootprint),n.dispatchCriticality&&(o.criticality=n.dispatchCriticality);let s=n.issueRefs.split(`,`).map(e=>e.trim()).filter(Boolean),c=n.dependsOn.split(`,`).map(e=>Number(e.trim())).filter(e=>Number.isInteger(e)&&e>0);try{await i(`POST`,`/tasks`,{title:r,intent:a,...n.doneWhen.trim()?{doneWhen:n.doneWhen.trim()}:{},...s.length?{issueRefs:s}:{},...c.length?{dependsOn:c}:{},...Object.keys(o).length?{dispatch:o}:{}}),e({taskCreateOpen:!1,taskCreateForm:{...fn}}),await t().fetchDeliverableTasks()}catch(e){t().showError(`Create Task Failed`,e.message)}},async doEditTask(n,r){try{let a=await i(`PATCH`,`/tasks/`+n,r);e({taskDetailById:{...t().taskDetailById,[n]:a},deliverableTasks:t().deliverableTasks.map(e=>e.id===n?{...e,...a}:e)})}catch(e){t().showError(`Edit Task Failed`,e.message)}},async doDispatchTask(n,r){e({taskDispatchLoadingId:n});try{let a={};r&&Object.keys(r).length&&(a.pin=r);let o=await i(`POST`,`/tasks/`+n+`/dispatch`,a);e({taskDispatchResultById:{...t().taskDispatchResultById,[n]:o},taskDispatchLoadingId:null})}catch(n){e({taskDispatchLoadingId:null}),t().showError(`Dispatch Failed`,n.message)}},async doSpawnWithTask(e,n){let r=t().spawnOrchId;try{let a={provider:n.provider,taskId:e};n.model&&(a.model=n.model),n.effort&&(a.effort=n.effort),r&&(a.orchestratorId=r),await i(`POST`,`/agents/spawn`,a),t().showNotification(`Worker spawning for T${e} (${n.provider})`)}catch(e){t().showError(`Spawn Failed`,e.message)}},openPairInvite(n){e({pairInvite:{...E,requesterId:n||t().selectedAgent||``},pairInviteOpen:!0})},closePairInvite(){e({pairInviteOpen:!1,pairInvite:{...E}})},async doCreatePair(){let n=t();if(!n.pairInvite.requesterId||!n.pairInvite.targetId){t().showError(`Validation`,`Requester and Target are required.`);return}if(n.pairInvite.requesterId===n.pairInvite.targetId){t().showError(`Validation`,`Requester and Target must be different.`);return}try{let r={from:n.pairInvite.requesterId,target:n.pairInvite.targetId};n.pairInvite.objective&&(r.objective=n.pairInvite.objective),await i(`POST`,`/pairs`,r),e({pairInviteOpen:!1,pairInvite:{...E}}),await Promise.all([t().fetchPairs(),t().fetchMessages()])}catch(e){t().showError(`Pair Invite Failed`,e.message)}},openPairMessage(t,n){e({pairMessage:{...C,pairId:t.id,from:n||t.requesterId},pairMessageOpen:!0})},closePairMessage(){e({pairMessageOpen:!1,pairMessage:{...C}})},async doSendPairMessage(){let n=t();if(!n.pairMessage.pairId||!n.pairMessage.from||!n.pairMessage.body){t().showError(`Validation`,`Pair, From, and Message are required.`);return}try{let r={from:n.pairMessage.from,body:n.pairMessage.body};n.pairMessage.subject&&(r.subject=n.pairMessage.subject),await i(`POST`,`/pairs/`+encodeURIComponent(n.pairMessage.pairId)+`/messages`,r),e({pairMessageOpen:!1,pairMessage:{...C}}),await Promise.all([t().fetchPairs(),t().fetchMessages()])}catch(e){t().showError(`Pair Message Failed`,e.message)}},async doAcceptPair(e){try{await i(`POST`,`/pairs/`+encodeURIComponent(e.id)+`/accept`,{agentId:e.targetId}),await Promise.all([t().fetchPairs(),t().fetchMessages()])}catch(e){t().showError(`Accept Failed`,e.message)}},async doRejectPair(e){try{await i(`POST`,`/pairs/`+encodeURIComponent(e.id)+`/reject`,{agentId:e.targetId}),await Promise.all([t().fetchPairs(),t().fetchMessages()])}catch(e){t().showError(`Reject Failed`,e.message)}},async doHangupPair(e,n){try{await i(`POST`,`/pairs/`+encodeURIComponent(e.id)+`/hangup`,{agentId:n||e.requesterId}),await Promise.all([t().fetchPairs(),t().fetchMessages()])}catch(e){t().showError(`Hang Up Failed`,e.message)}}}),mn=(e,t)=>({orchestrators:[],providerCatalog:[],orchestratorSpawnOpen:!1,orchestratorInstallOpen:!1,spawnOrchId:``,spawnProvider:N(void 0),spawnModel:F(N(void 0)),spawnEffort:``,spawnProfile:`default-relay`,spawnCwd:``,spawnLabel:``,spawnApproval:`guarded`,spawnWorkspaceMode:`inherit`,spawnPrompt:``,spawnSystemPromptAppend:``,spawnCount:1,spawnCwdHistory:[],isSpawning:!1,spawnDirBrowser:{open:!1,loading:!1,path:``,parent:``,baseDir:``,entries:[],error:``},pendingForkImport:null,async fetchOrchestrators(){try{let n=V(t().orchestrators,await i(`GET`,`/orchestrators`));n!==t().orchestrators&&e({orchestrators:n})}catch{}},async fetchProviderCatalog(){try{e({providerCatalog:(await i(`GET`,`/providers`)).catalog})}catch{}},async refreshOrchestratorProviders(e){try{await i(`GET`,`/orchestrators/`+encodeURIComponent(e)+`/providers?refresh=1`),await t().fetchOrchestrators(),t().showNotification(`Provider status refreshed`)}catch(e){t().showError(`Provider Refresh Failed`,e.message)}},openAgentSpawn(){t().openOrchestratorSpawn()},closeAgentSpawn(){e({orchestratorSpawnOpen:!1})},async doSpawnAgent(){await t().submitOrchestratorSpawn()},openOrchestratorSpawn(){t().openOrchestratorSpawnAt()},openOrchestratorSpawnAt(n={}){let r=t().orchestrators.filter(e=>e.status===`online`);if(!r.length){t().showError(`No Orchestrators`,`No orchestrators are currently online.`);return}t().fetchProviderCatalog();let i=t(),a=n.orchestratorId?r.find(e=>e.id===n.orchestratorId):void 0;if(n.orchestratorId&&!a){t().showError(`Orchestrator Offline`,`The selected orchestrator is not online.`);return}let o=n.cwd?.trim()||i.spawnCwd,s=o?r.find(e=>v(o,e.baseDir)):void 0,c=i.spawnOrchId?r.find(e=>e.id===i.spawnOrchId):void 0,l=a?.id||s?.id||c?.id||r[0].id,u=r.find(e=>e.id===l),d=i.spawnProvider&&u.providers.includes(i.spawnProvider)?i.spawnProvider:N(u),f=i.spawnProvider===d&&i.spawnModel&&P(d,i.providerCatalog).some(e=>e.alias===i.spawnModel)?i.spawnModel:F(d,i.providerCatalog),p=o&&v(o,u.baseDir)?o:u.baseDir||``;e({spawnOrchId:l,spawnProvider:d,spawnModel:f,spawnEffort:i.spawnProvider===d&&i.spawnModel===f?i.spawnEffort:``,spawnProfile:i.spawnProfile||`default-relay`,spawnCwd:p,spawnLabel:``,spawnWorkspaceMode:`inherit`,spawnPrompt:``,spawnSystemPromptAppend:``,spawnCount:1,pendingForkImport:null,orchestratorSpawnOpen:!0})},forkFromAgent(n,r){let i=t(),a=i.agentsById[n];if(!a){t().showError(`Fork`,`Agent not found.`);return}let o=i.orchestrators.filter(e=>e.status===`online`);if(!o.length){t().showError(`No Orchestrators`,`No orchestrators are currently online.`);return}t().fetchProviderCatalog();let s=a.providerCapabilities,c=s?.model?.provider||(typeof a.meta?.provider==`string`?a.meta.provider:``),l=s?.model?.alias||s?.model?.id||``,u=(c?M(c,i.providerCatalog):void 0)?.models.find(e=>e.alias===l||e.providerModel===l)?.alias||``,p=s?.model?.effort||``,m=a.meta?.workspace,h=f(m)?m:{},g=d(h.repoRoot)||d(h.sourceCwd)||(typeof a.meta?.cwd==`string`?a.meta.cwd:``),_=d(h.mode),y=_===`isolated`?`isolated`:_===`shared`?`shared`:`inherit`,ee=s?.session?.approvalMode||(typeof a.meta?.approvalMode==`string`?a.meta.approvalMode:`guarded`),te=a.label?`${a.label} (fork)`:``,b=o.find(e=>e.hostname===a.machine)||o.find(e=>v(g,e.baseDir))||o[0],x=ne(a),S=[];for(let e of r){let t=re(e).trim();if(!t)continue;let n=e.from===`user`?`user`:`agent`;S.push(`[${n}]: ${t}`)}let C=S.join(`
|
|
5
|
+
`)}var be={ms:`milliseconds`,s:`seconds`,kb:`kilobytes`,mb:`megabytes`,gb:`gigabytes`,tb:`terabytes`};function xe(e){return e.split(``).join(` `)}function Se(e){return e.split(``).map(e=>/[0-9]/.test(e)?e:e.toUpperCase()).join(` `)}var Ce=[{name:`url`,pattern:/\bhttps?:\/\/\S+/gi,replace:` link `},{name:`path`,pattern:/(?:\/[A-Za-z0-9._-]+){2,}\/?/g,replace:e=>` `+e.replace(/[/._-]+/g,` `).trim()+` `},{name:`slash`,pattern:/(?<=[A-Za-z0-9])\/(?=[A-Za-z0-9])/g,replace:` `},{name:`func-call`,pattern:/\b([A-Za-z_$][\w$]*)\(\)/g,replace:`$1`},{name:`approx`,pattern:/~(?=\s*[\d.])/g,replace:`approximately `},{name:`range`,pattern:/(\d)\s*[-–—]\s*(?=\d)/g,replace:`$1 to `},{name:`version`,pattern:/\b(v?)(\d+(?:\.\d+){2,})\b/gi,replace:(e,t,n)=>`${t?`version `:``}${n.replace(/\./g,` dot `)}`},{name:`decimal`,pattern:/\b(\d+)\.(\d+)\b/g,replace:(e,t,n)=>`${t} point ${xe(n)}`},{name:`hash`,pattern:/\b(?=[0-9a-f]{7,40}\b)(?=[0-9a-f]*[a-f])(?=[0-9a-f]*\d)[0-9a-f]{7,40}\b/gi,replace:e=>Se(e)},{name:`id-camel`,pattern:/([a-z])(Id|ID)(s)?\b/g,replace:(e,t,n,r)=>`${t} I D${r?`s`:``}`},{name:`id-word`,pattern:/\b(?:id|Id|ID)(s)?\b/g,replace:(e,t)=>`I D${t?`s`:``}`},{name:`byte-unit`,pattern:/\b(\d+)\s?(kb|mb|gb|tb)\b/gi,replace:(e,t,n)=>`${t} ${be[n.toLowerCase()]}`},{name:`ms-unit`,pattern:/\b(\d{1,5})\s?ms\b/g,replace:(e,t)=>`${t} ${be.ms}`},{name:`s-unit`,pattern:/\b(\d{1,3})\s?s\b/g,replace:(e,t)=>`${t} ${be.s}`},{name:`live-adjective`,pattern:/\b(is|are|was|were|be|been|being|now|and|stays?|staying|went|go|goes|going|deployed|it's|that's|here's|there's|we're|you're|they're)\s+live\b/gi,replace:(e,t)=>`${t} lyve`},{name:`interior-dot`,pattern:/\.(?=[A-Za-z0-9])/g,replace:` dot `}];function we(e){if(!e)return``;let t=e;for(let e of Ce)t=t.replace(e.pattern,e.replace);return t.replace(/[ \t]{2,}/g,` `).trim()}function Te(e){return we(he(e))}var Ee=[{id:`am_michael`,label:`Michael (US ♂)`},{id:`am_adam`,label:`Adam (US ♂)`},{id:`af_heart`,label:`Heart (US ♀)`},{id:`af_bella`,label:`Bella (US ♀)`},{id:`af_nicole`,label:`Nicole (US ♀)`},{id:`af_sarah`,label:`Sarah (US ♀)`},{id:`bm_george`,label:`George (UK ♂)`},{id:`bf_emma`,label:`Emma (UK ♀)`}],O=220;function De(e){let t=e.match(/[^.!?]+[.!?]*\s*/g)?.map(e=>e.trim()).filter(Boolean)??[e],n=[];for(let e of t){if(e.length<=O){n.push(e);continue}let t=e;for(;t.length>O;){let e=t.lastIndexOf(` `,O);e<=0&&(e=O),n.push(t.slice(0,e).trim()),t=t.slice(e).trim()}t&&n.push(t)}return n}var Oe=typeof window<`u`&&`speechSynthesis`in window,k=new class{enabled=!1;lang=`en-US`;mode=`kokoro`;kokoroVoice=`am_michael`;browserVoice=``;active=null;queue=[];currentChat=null;speaking=!1;gen=0;audioEl=null;audioUrl=null;playingKey=null;manual=!1;listeners=new Set;get available(){return Oe||typeof Audio<`u`}isEnabled(){return this.enabled}subscribe(e){return this.listeners.add(e),()=>{this.listeners.delete(e)}}getPlayingKey(){return this.playingKey}setPlayingKey(e){if(e!==this.playingKey){this.playingKey=e;for(let e of this.listeners)e()}}setEnabled(e){e!==this.enabled&&(this.enabled=e,e||this.reset())}setLang(e){this.lang=e}setMode(e){e!==this.mode&&(this.mode=e,this.reset())}setKokoroVoice(e){this.kokoroVoice=e}setBrowserVoice(e){this.browserVoice=e}setActiveChat(e){e!==this.active&&(this.active=e,this.queue=this.queue.filter(t=>t.chatId===e))}onResponse(e,t){if(!this.enabled||!this.available||!e||e!==this.active)return;let n=Te(t);n&&(this.speaking&&(this.manual||this.currentChat&&this.currentChat!==e)&&(this.queue=[],this.cancel()),this.queue.push({chatId:e,text:n}),this.pump())}speak(e,t){if(!this.available)return;let n=Te(e);if(!n)return;this.reset(),this.manual=!0,this.speaking=!0,this.currentChat=null,this.setPlayingKey(t??null);let r=++this.gen,i=De(n),a=()=>{r===this.gen&&(this.speaking=!1,this.manual=!1,this.setPlayingKey(null))};this.mode===`kokoro`?this.speakKokoro(i,0,r,a):this.speakBrowser(i,0,r,a)}bargeIn(){this.reset()}reset(){this.queue=[],this.cancel()}cancel(){this.gen++,this.currentChat=null,this.speaking=!1,this.manual=!1,this.setPlayingKey(null);try{window.speechSynthesis.cancel()}catch{}this.stopAudio()}stopAudio(){if(this.audioEl)try{this.audioEl.pause(),this.audioEl.src=``}catch{}if(this.audioUrl){try{URL.revokeObjectURL(this.audioUrl)}catch{}this.audioUrl=null}}pump(){if(this.speaking)return;let e=this.queue.shift();if(!e)return;this.speaking=!0,this.manual=!1,this.currentChat=e.chatId;let t=++this.gen,n=De(e.text),r=()=>{t===this.gen&&(this.speaking=!1,this.currentChat=null,this.pump())};this.mode===`kokoro`?this.speakKokoro(n,0,t,r):this.speakBrowser(n,0,t,r)}speakBrowser(e,t,n,r){if(n!==this.gen)return;if(!Oe||t>=e.length)return r();let i=new SpeechSynthesisUtterance(e[t]),a=this.browserVoice?window.speechSynthesis.getVoices().find(e=>e.voiceURI===this.browserVoice):void 0;a?(i.voice=a,i.lang=a.lang):i.lang=this.lang||navigator.language||`en-US`,i.onend=()=>this.speakBrowser(e,t+1,n,r),i.onerror=()=>this.speakBrowser(e,t+1,n,r),window.speechSynthesis.speak(i)}speakKokoro(e,t,n,r,i){if(n!==this.gen)return;let a=e[t];if(a===void 0)return r();let o=i??this.fetchSpeech(a),s=e[t+1],c=s===void 0?void 0:this.fetchSpeech(s);o.then(i=>{n===this.gen&&this.playBlob(i,n,()=>this.speakKokoro(e,t+1,n,r,c),()=>{this.speakBrowser(e,t,n,r)})}).catch(()=>{n===this.gen&&this.speakBrowser(e,t,n,r)})}fetchSpeech(e){return r(`/connectors/voice/call/speak`,{text:e,voice:this.kokoroVoice})}playBlob(e,t,n,r){if(t!==this.gen)return;if(typeof Audio>`u`)return r();this.stopAudio(),this.audioEl||=new Audio;let i=URL.createObjectURL(e);this.audioUrl=i;let a=this.audioEl;a.src=i,a.onended=()=>{t===this.gen&&n()},a.onerror=()=>{t===this.gen&&r()},a.play().catch(()=>{t===this.gen&&r()})}};function ke(){if(!Oe)return[];try{return window.speechSynthesis.getVoices().map(e=>({uri:e.voiceURI,label:`${e.name} (${e.lang})`,lang:e.lang})).sort((e,t)=>e.lang.localeCompare(t.lang)||e.label.localeCompare(t.label))}catch{return[]}}var Ae=typeof navigator<`u`&&!!navigator.mediaDevices?.getUserMedia&&typeof window<`u`&&`MediaRecorder`in window;function je(){for(let e of[`audio/webm;codecs=opus`,`audio/webm`,`audio/ogg;codecs=opus`,`audio/mp4`])if(typeof MediaRecorder<`u`&&MediaRecorder.isTypeSupported?.(e))return e}var Me=class{rec=null;chunks=[];stream=null;async start(){this.stream=await navigator.mediaDevices.getUserMedia({audio:!0}),this.chunks=[];let e=je();this.rec=new MediaRecorder(this.stream,e?{mimeType:e}:void 0),this.rec.ondataavailable=e=>{e.data.size&&this.chunks.push(e.data)},this.rec.start()}async stop(){let e=this.rec;if(!e)return this.teardown(),null;let t=new Promise(t=>{e.onstop=()=>t()});try{e.stop()}catch{}await t;let n=e.mimeType||`audio/webm`,r=new Blob(this.chunks,{type:n});return this.teardown(),r.size?r:null}cancel(){try{this.rec?.stop()}catch{}this.teardown()}teardown(){this.stream?.getTracks().forEach(e=>e.stop()),this.rec=null,this.stream=null,this.chunks=[]}};async function Ne(e){return((await c(`/connectors/voice/call/transcribe`,e))?.text??``).trim()}var A=de((e,t)=>({now:Date.now(),_timer:null,start(){t()._timer||e({_timer:setInterval(()=>e({now:Date.now()}),1e3)})},stop(){let n=t()._timer;n&&(clearInterval(n),e({_timer:null}))}}));function Pe(){return A(e=>e.now)}function Fe(e=3e4){return A(t=>Math.floor(t.now/e))}var Ie=.1,Le=.9,Re=.8,ze=.4,j=256e3,Be=1e6;function Ve(e){return{provider:e.id,label:e.label,defaultModel:e.catalog.defaultModel,models:e.catalog.models}}var He=Object.fromEntries(p().map(e=>[e.id,Ve(e)]));function Ue(e){let t=We(e);return{selfCompactUtilization:t,warnUtilization:Ge(t),hardBackstopUtilization:Math.max(Le,t)}}function We(e){return!Number.isFinite(e)||!e||e<=j?Re:e>=Be?ze:Ke(Re-(e-j)/(Be-j)*(Re-ze))}function Ge(e){return Ke(Math.max(0,e-Ie))}function Ke(e){return Math.round(e*1e3)/1e3}function M(e,t){let n=t?.find(t=>t.provider===e)??He[e];if(!n)throw Error(`unknown provider catalog: ${e}`);return n}function qe(e){return!e.disabled&&!e.unavailable}function Je(e){let t=e.defaultModel,n=t?e.models.find(e=>e.alias===t):void 0;if(n&&qe(n))return{alias:n.alias,preferred:t,fellBack:!1};let r=e.models.find(qe);return{alias:r?.alias,preferred:t,fellBack:r?.alias!==t}}function N(e){return e?.providers[0]??u()[0]??``}function P(e,t){return M(e,t).models.filter(e=>!e.disabled)}function F(e,t){return Je(M(e,t)).alias??``}function Ye(e,t){return e.filter(e=>e.status===`online`&&v(t,e.baseDir)).sort((e,t)=>_(t.baseDir).length-_(e.baseDir).length)[0]}function Xe(e,t){let n=e.find(e=>e.managedAgents.some(e=>e.agentId===t.id));if(n)return n;let r=typeof t.meta?.cwd==`string`?t.meta.cwd:``;return r?Ye(e,r):void 0}var Ze=`/settings/chat/scroll`,Qe=150,$e=1e3,I=new Map,L=new Map,R=new Set,z=null,et=null,tt=!1;function nt(e){if(!e||typeof e!=`object`)return null;let t=e;if(typeof t.stick!=`boolean`||t.topKey!==null&&typeof t.topKey!=`string`||typeof t.offset!=`number`||!Number.isFinite(t.offset))return null;let n=typeof t.anchorMessageId==`number`&&Number.isFinite(t.anchorMessageId)?t.anchorMessageId:void 0,r=typeof t.anchorEndMessageId==`number`&&Number.isFinite(t.anchorEndMessageId)?t.anchorEndMessageId:void 0;return{stick:t.stick,topKey:t.topKey,...n===void 0?{}:{anchorMessageId:n},...r===void 0?{}:{anchorEndMessageId:r},offset:Math.max(0,t.offset)}}function rt(e){if(!e||typeof e!=`object`)return 0;let t=e.updatedAt;return typeof t==`number`&&Number.isFinite(t)?t:0}function it(e){return I.get(e)}function at(e,t,n){I.delete(e),I.set(e,t),L.set(e,n)}function ot(e,t){at(e,t,Date.now()),R.add(e),st(),mt(),ut()}function st(){for(;I.size>Qe;){let e=I.keys().next().value;if(e===void 0)break;I.delete(e),L.delete(e),R.delete(e)}}function ct(e){let t={};for(let n of e){let e=I.get(n);e&&(t[n]={...e,updatedAt:L.get(n)??Date.now()})}return t}function lt(e){if(!(!e||typeof e!=`object`)){for(let[t,n]of Object.entries(e)){if(R.has(t))continue;let e=nt(n);if(!e)continue;let r=rt(n),i=L.get(t);i!==void 0&&i>=r||at(t,e,r)}st()}}function ut(){z!==null&&clearTimeout(z),z=setTimeout(()=>{dt(!1)},$e)}async function dt(e){if(R.size===0)return;let t=R;R=new Set;let r=ct(t);try{lt((await n(`PUT`,Ze,{value:r},e?{keepalive:!0}:void 0)).value)}catch{for(let e of t)R.add(e)}}function ft(){z!==null&&(clearTimeout(z),z=null),dt(!0)}async function pt(){try{lt((await n(`GET`,Ze)).value)}catch{}}function mt(){tt||typeof document>`u`||typeof window>`u`||(tt=!0,document.addEventListener(`visibilitychange`,()=>{document.visibilityState===`hidden`?ft():pt()}),window.addEventListener(`pagehide`,ft))}function ht(){return mt(),et||(et=pt(),et)}function gt(e,t){let n=e?{...e,...t}:t,r=e?.meta||t.meta?{...e?.meta??{},...t.meta??{}}:void 0;return r&&f(e?.meta?.workspace)&&f(t.meta?.workspace)&&(r.workspace={...e.meta.workspace,...t.meta.workspace}),{...n,...r?{meta:r}:{},...!t.issueRepo&&e?.issueRepo?{issueRepo:e.issueRepo}:{}}}function _t(e){let t={};for(let n of e)t[n.id]=n;return t}function B(e,t){let n=e.findIndex(e=>e.id===t.id),r=[...e];return n>=0?r[n]=t:r.push(t),r}var vt=3e3;function yt(e,t,n,r=Date.now(),i){if(!t||!n)return e;let a=[...e[t]||[]],o=i||`s-${n}-${r}`;return a.some(e=>e.id===o)||a.some(e=>e.status===n&&Math.abs(e.timestamp-r)<=vt)?e:(a.push({id:o,status:n,timestamp:r}),a.length>200&&a.splice(0,a.length-200),{...e,[t]:a})}function bt(e,t){if(!(!e||e.status===t.status)){if((e.status===`offline`||e.status===`stale`)&&(t.status===`online`||t.status===`idle`||t.status===`busy`))return`online`;if(t.status===`offline`)return`offline`}}var xt=new Set([`compacting`,`compacted`,`clearing-context`,`context-cleared`]);function St(e){let t=e.meta?.timelineEvent;if(!t||typeof t!=`object`||Array.isArray(t))return;let n=t.status;if(typeof n!=`string`||!n)return;let r=t.id,i=t.timestamp;return{status:n,...typeof r==`string`?{id:r}:{},...typeof i==`number`&&Number.isFinite(i)?{timestamp:i}:{}}}function Ct(e){let t=e.params?.agentId;return typeof t==`string`&&t?t:typeof e.target==`string`&&e.target?e.target:void 0}function wt(e,t){if(t===`command.dispatched`)return e.type===`agent.compact`?`compaction-requested`:e.type===`agent.clearContext`?`clear-requested`:e.type===`agent.shutdown`?`shutting-down`:void 0;if(t===`command.succeeded`){if(e.type===`agent.shutdown`)return`shutdown`;if(e.type===`agent.restart`)return`restarted`}}function Tt(e){return JSON.stringify(e)}function Et(e,t){let n=new Map(e.map(e=>[e.id,e])),r=!(e.length===t.length&&e.every((e,n)=>e.id===t[n]?.id)),i=t.map(e=>{let t=n.get(e.id);return t&&Tt(t)===Tt(e)?t:(r=!0,e)});return r?i:e}function V(e,t){let n=[...new Map(t.map(e=>[e.id,e])).values()],r=new Map(e.map(e=>[e.id,e])),i=!(e.length===n.length&&e.every((e,t)=>e.id===n[t]?.id)),a=n.map(e=>{let t=r.get(e.id);return t===e||t&&JSON.stringify(t)===JSON.stringify(e)?t:(i=!0,e)});return i?a:e}function Dt(){return typeof document>`u`?!0:document.hidden}function Ot(e,t){return!!(e&&t.view===`chat`&&t.selectedInboxThread===e&&!Dt())}function kt(e){return e.threadPeer||e.agentId||``}function At(e,t){return Ot(kt(e),t)}function jt(e){return e.filter(e=>e.to===`user`&&e.from!==`user`&&y(e)).reduce((e,t)=>Math.max(e,t.id),0)}function Mt(e){if(e.from===`user`||e.to===`user`)return!0;let t=typeof e.payload?.direction==`string`?e.payload.direction:void 0;return e.kind===`channel.event`&&t===`inbound`}var Nt={enabled:!0,browserEnabled:!1,messages:!0,replies:!0,errors:!0};function Pt(e,t){return t.enabled?e.kind===`message`?t.messages:e.kind===`reply`?t.replies:t.errors:!1}function Ft(){return typeof window<`u`&&`Notification`in window}function H(){return Ft()?window.Notification.permission:`unsupported`}function It(e,t){return!Pt(e,t.notificationSettings)||!t.notificationSettings.browserEnabled||H()!==`granted`||At(e,t)?!1:Dt()||t.view!==`chat`}function Lt(e,t){if(H()===`granted`)try{let n=new window.Notification(e.title,{body:e.body,tag:e.id,icon:`icons/agent-relay-192.png`,data:{view:e.view,threadPeer:e.threadPeer,agentId:e.agentId,messageId:e.messageId}});n.onclick=()=>{window.focus(),t(),n.close()}}catch{}}var Rt=(e,t)=>({notification:null,toastNotification:null,notifications:[],notificationUnread:0,notificationSettings:{...Nt},notificationPermission:H(),confirmModal:{show:!1,title:``,message:``,action:null},errorModal:{show:!1,title:``,message:``},openConfirm(t,n,r){e({confirmModal:{show:!0,title:t,message:n,action:r}})},showError(t,n){e({errorModal:{show:!0,title:t,message:n}})},showNotification(t){e({notification:t,toastNotification:null}),setTimeout(()=>e({notification:null}),3e3)},handleRelayNotification(n){let r=t();if(!Pt(n,r.notificationSettings)||r.notifications.some(e=>e.id===n.id))return;if(n.messageId&&(n.kind===`message`||n.kind===`reply`)){let e=r.messages.find(e=>e.id===n.messageId);if(e&&!Mt(e))return}let i=At(n,r),a=`${n.title}: ${n.body}`;e({notifications:[n,...r.notifications].slice(0,100),notificationUnread:i?r.notificationUnread:Math.min(99,r.notificationUnread+1),notification:i?r.notification:a,toastNotification:i?r.toastNotification:n}),i||setTimeout(()=>{t().toastNotification?.id===n.id&&e({notification:null,toastNotification:null})},4500),It(n,r)&&Lt(n,()=>t().openNotification(n)),i&&n.threadPeer&&n.messageId&&t().markInboxThreadReadTo(n.threadPeer,n.messageId)},async openNotification(n){if(e({notificationUnread:0}),n.threadPeer&&(t().openInboxThread(n.threadPeer),n.messageId&&t().markInboxThreadReadTo(n.threadPeer,n.messageId)),n.view&&await t().switchView(n.view),n.agentId&&n.view===`agents`){let e=t().agentsById[n.agentId];e&&t().openAgentDetail(e)}},dismissToast(){e({notification:null,toastNotification:null})},markNotificationsRead(){e({notificationUnread:0})},clearNotifications(){e({notifications:[],notificationUnread:0})},async requestBrowserNotifications(){if(!Ft()){e({notificationPermission:`unsupported`,notificationSettings:{...t().notificationSettings,browserEnabled:!1}}),t().showNotification(`Browser notifications are not supported here`);return}let n=await window.Notification.requestPermission();e({notificationPermission:n,notificationSettings:{...t().notificationSettings,browserEnabled:n===`granted`}}),t().showNotification(n===`granted`?`Browser notifications enabled`:`Browser notifications not enabled`)}}),zt=e=>({voiceTtsEnabled:!1,voiceTtsLang:`en-US`,voiceTtsMode:`kokoro`,voiceTtsKokoroVoice:`am_michael`,voiceTtsBrowserVoice:``,voiceInputMode:`compose`,setVoiceTtsEnabled(t){k.setEnabled(t),e({voiceTtsEnabled:t})},setVoiceTtsLang(t){k.setLang(t),e({voiceTtsLang:t})},setVoiceTtsMode(t){k.setMode(t),e({voiceTtsMode:t})},setVoiceTtsKokoroVoice(t){k.setKokoroVoice(t),e({voiceTtsKokoroVoice:t})},setVoiceTtsBrowserVoice(t){k.setBrowserVoice(t),e({voiceTtsBrowserVoice:t})},setVoiceInputMode(t){e({voiceInputMode:t})}}),Bt=null;function Vt(e){let t=e.voiceTtsEnabled&&e.view===`chat`&&e.selectedInboxThread||null;t!==Bt&&(Bt=t,k.setActiveChat(t))}function Ht(e){let t=f(e.result)?e.result:void 0;return d(e.error)??d(t?.error)??d(t?.reason)??d(t?.message)??`spawn command failed`}function Ut(e){let t=e.id||e.correlationId||`${e.type}:${e.updatedAt??e.createdAt??Date.now()}`,n=0;for(let e=0;e<t.length;e++)n=n*31+t.charCodeAt(e)>>>0;return-Math.max(1,n)}function Wt(e){let t=Object.entries(e().agentChatByAgent).filter(([,e])=>e.loadedInitial).map(([e])=>e);return Promise.all(t.map(t=>e().gapFillAgentChat(t)))}function Gt(e,t){if(t.clientId){let n=e.findIndex(e=>e.clientId===t.clientId);if(n>=0){let r=[...e];return r[n]=t,r}}return B(e,t)}var Kt=e=>(t,r)=>({theme:`dark`,view:`overview`,autoRefresh:!0,mobileMenuOpen:!1,commandPaletteOpen:!1,commandQuery:``,connected:!1,connectionError:!1,quotaSeq:0,authNeeded:!1,authToken:``,stats:{},fileOrchestratorId:``,filePath:``,fileSelectedPath:``,fileSelectedLine:0,fileOverlayOpen:!1,_es:null,_refreshTimer:null,_refreshInFlight:!1,set:e=>t(e),async init(){await e.waitForHydration();let i=r().authToken;i&&s(i),a(r().view),k.setEnabled(r().voiceTtsEnabled),k.setLang(r().voiceTtsLang),k.setMode(r().voiceTtsMode),k.setKokoroVoice(r().voiceTtsKokoroVoice),k.setBrowserVoice(r().voiceTtsBrowserVoice),Vt(r()),o(()=>{r().authNeeded||t({authNeeded:!0,connectionError:!1})}),ht(),t({notificationPermission:H()}),r().startClock();try{t({stats:await n(`GET`,`/stats`)})}catch(e){if(e.status===401){t({authNeeded:!0});return}}await r().refresh(),r().fetchAllIssueRefs(),r().connectSSE(),r().startAutoRefresh()},async switchView(e){a(e),t({view:e,mobileMenuOpen:!1});let n=r();[`chat`,`messages`].includes(e)&&await Promise.all([n.fetchMessages(),n.fetchChatHistoryImports(),n.fetchDeliverableTasks({unfiltered:!0})]),e===`activity`&&await Promise.all([n.fetchMessages(),n.fetchPairs(),n.fetchTasks(),n.fetchActivityEvents()]),e===`work`&&await Promise.all([n.fetchMessages(),n.fetchTasks()]),e===`pairs`&&await n.fetchPairs(),e===`channels`&&await Promise.all([n.fetchChannels(),n.fetchIntegrations()]),e===`connectors`&&await n.fetchConnectors(),e===`integrations`&&await n.fetchIntegrations(),e===`memory`&&await n.refreshMemory(),e===`tasks`&&await Promise.all([n.fetchTasks(),n.fetchDeliverableTasks()]),e===`teams`&&await Promise.all([n.fetchTeams(),n.fetchTeamOutcomeAggregates(),n.refreshIssueRefs()]),e===`automation`&&await Promise.all([n.fetchAutomations(),n.fetchAutomationRuns()]),e===`maintenance`&&await n.fetchMaintenanceJobs(),e===`workspaces`&&await Promise.all([n.fetchWorkspaces(),n.fetchOrchestrators(),n.fetchAgents()]),e===`files`&&await n.fetchOrchestrators(),e===`analytics`&&await n.fetchAnalytics()},startClock(){A.getState().start()},stopClock(){A.getState().stop()},startAutoRefresh(){r().stopAutoRefresh(),r().autoRefresh&&t({_refreshTimer:setInterval(()=>r().refreshLiveData(),b)})},stopAutoRefresh(){let e=r();e._refreshTimer&&(clearInterval(e._refreshTimer),t({_refreshTimer:null}))},async apiCall(e,t,r){return n(e,t,r)},async openFilesAt(e){let n=r();t({fileOrchestratorId:e.orchestratorId||Ye(n.orchestrators,e.selectedPath||e.path)?.id||n.orchestrators.find(e=>e.status===`online`)?.id||``,filePath:e.path,fileSelectedPath:e.selectedPath||``,fileSelectedLine:e.line||0,fileOverlayOpen:e.overlay===!0}),e.overlay||await r().switchView(`files`)},async openFilesForAgent(e,t=!1){let n=typeof e.meta?.cwd==`string`?e.meta.cwd:``;if(!n){r().showNotification(`Agent has no cwd`);return}let i=Xe(r().orchestrators,e);if(!i){r().showNotification(`No online orchestrator covers that cwd`);return}await r().openFilesAt({orchestratorId:i.id,path:n,overlay:t})},closeFileOverlay(){t({fileOverlayOpen:!1})},async refresh(){let e=r();await Promise.all([e.fetchStats(),e.fetchHealth(),e.fetchAgents(),e.fetchUsers(),e.fetchOrchestrators(),e.fetchPairs(),e.fetchMessages(),e.fetchTasks(),e.fetchDeliverableTasks({unfiltered:!0}),e.fetchChannels(),e.fetchConnectors(),e.fetchIntegrations(),e.fetchAutomations(),e.fetchAutomationRuns(),e.fetchManagedPolicies(),e.fetchAgentProfiles(),e.fetchToolGroupCatalog(),e.fetchMaintenanceJobs(),e.fetchWorkspaces(),e.fetchInboxState(),e.fetchActivityEvents(),e.fetchChatHistoryImports(),e.fetchProviderCatalog()])},async refreshLiveData(){if(!(r()._refreshInFlight||r().authNeeded)){t({_refreshInFlight:!0});try{try{let e=await n(`GET`,`/stats`);t(r().connectionError?{stats:e,connectionError:!1}:{stats:e})}catch(e){if(e.status===401)return;r().connectionError||t({connectionError:!0});return}let e=r(),i=[e.fetchHealth(),e.fetchAgents(),e.fetchOrchestrators(),e.fetchPairs(),e.fetchMessages(),e.fetchTasks(),e.fetchManagedPolicies(),e.fetchInboxState()],a=e.view;[`chat`,`messages`].includes(a)&&i.push(e.fetchChatHistoryImports(),e.fetchDeliverableTasks({unfiltered:!0})),a===`activity`&&i.push(e.fetchActivityEvents()),a===`memory`&&i.push(e.refreshMemory()),a===`automation`&&i.push(e.fetchAutomations(),e.fetchAutomationRuns()),a===`channels`&&i.push(e.fetchChannels(),e.fetchIntegrations()),a===`connectors`&&i.push(e.fetchConnectors()),a===`integrations`&&i.push(e.fetchIntegrations()),a===`maintenance`&&i.push(e.fetchMaintenanceJobs()),a===`profiles`&&i.push(e.fetchAgentProfiles()),a===`workspaces`&&i.push(e.fetchWorkspaces()),a===`analytics`&&i.push(e.fetchAnalytics()),a===`teams`&&i.push(e.fetchTeams(),e.fetchTeamOutcomeAggregates(),e.refreshIssueRefs()),e.agentDetailOpen&&e.agentDetailId&&i.push(e.fetchAgentIssueActivity(e.agentDetailId)),a===`tasks`&&i.push(e.fetchDeliverableTasks()),e.taskDetailOpen&&e.taskDetailId&&i.push(e.fetchTaskDetail(e.taskDetailId)),await Promise.all(i)}finally{t({_refreshInFlight:!1})}}},async fetchStats(){try{t({stats:await n(`GET`,`/stats`)})}catch{}},connectSSE(){r().disconnectSSE(),t({_es:i(r().authToken,{connected:(e={})=>{t(r().connectionError?{connected:!0,connectionError:!1}:{connected:!0}),Wt(r),e.replay?.available||(r().refreshLiveData(),r().refreshPlans(),r().refreshIssueRefs())},disconnected:()=>t({connected:!1}),message:(e,n)=>{if(e!==`connected`){if(e===`replay.gap`){r().refreshLiveData(),Wt(r),r().refreshPlans(),r().refreshIssueRefs();return}if(e===`message.new`){let e=JSON.parse(n);if(e.kind===`session`&&e.from!==`user`){let t=e.payload?.session;t?.type===`response`&&t?.origin===`provider`&&k.onResponse(ae(e),e.body)}let i=r();if(!i.messages.some(t=>t.id===e.id)){let n=[...i.messages,e];n.length>500&&n.splice(0,n.length-500),t({messages:n})}let a=ae(e);for(let t of Object.keys(r().agentChatByAgent))r().appendChatTail(t,[e]);ee(e)&&y(e)&&Ot(a,i)&&r().markInboxThreadReadTo(a,e.id);return}if(e===`message.queued`||e===`message.expired`||e===`message.delivery_updated`||e===`message.reaction_updated`||e===`message.finalized`){let e=JSON.parse(n);t({messages:B(r().messages,e)}),r().applyChatMessageUpdate(e);return}if(e===`notification.created`){r().handleRelayNotification(JSON.parse(n));return}if(e===`plan.created`||e===`plan.changed`){let e=JSON.parse(n),t=e.plan??e.data?.plan;t&&r().upsertPlan(t);return}if(e===`plan.deleted`){let e=JSON.parse(n),t=e.plan??e.data?.plan,i=t?.id??e.planId??e.id??e.data?.planId??e.data?.id;(t||i)&&r().removePlan(t??i);return}if(e===`team.dissolved`){let e=JSON.parse(n);e.teamId&&r().markTeamDissolved({teamId:e.teamId,outcomeStatus:e.outcomeStatus,reason:e.reason}),Promise.all([r().fetchTeams(),r().fetchTeamOutcomeAggregates()]);return}if(e===`activity.created`){let e=JSON.parse(n);t({activityEvents:B(r().activityEvents,e)}),e.issueRefId&&r().fetchIssueRef(e.issueRefId),e.agentId&&r().agentDetailOpen&&r().agentDetailId===e.agentId&&r().fetchAgentIssueActivity(e.agentId);return}if(e===`agent.status`){let e=JSON.parse(n),i=r(),a=i.agentsById[e.id],o=gt(a,e);if(t({agents:B(i.agents,o),agentsById:{...i.agentsById,[o.id]:o}}),i.livenessMismatches[o.id]&&o.status!==`offline`){let e={...i.livenessMismatches};delete e[o.id],t({livenessMismatches:e})}let s=i.commandStalls[o.id];if(s){let e=St(o);if(e?.status&&xt.has(e.status)&&(e.timestamp??0)>s.ts){let e={...i.commandStalls};delete e[o.id],t({commandStalls:e})}}let c=St(o),l=c?.status??bt(a,o);if(l){let e=c?.timestamp??Date.now(),n=c?.id||`agent-status:${o.id}:${l}:${e}`;t({chatStatusEvents:yt(i.chatStatusEvents,o.id,l,e,n)})}return}if(e===`dashboard.presence`){let e=JSON.parse(n);e.agentId&&r().applyPresence(e.agentId,e.viewers??[]);return}if(e===`liveness.mismatch`){let e=JSON.parse(n);e.agentId&&t({livenessMismatches:{...r().livenessMismatches,[e.agentId]:{agentId:e.agentId,detail:e.detail??`Process reported running but relay marked it offline`,ts:Date.now(),policyName:e.policyName,spawnRequestId:e.spawnRequestId}}});return}if(e===`command.stalled`){let e=JSON.parse(n);if(e.agentId){let n=Date.now(),i=e.kind??`compact`,a=i===`clear`?`clear-stalled`:`compaction-stalled`;t({commandStalls:{...r().commandStalls,[e.agentId]:{agentId:e.agentId,kind:i,detail:e.detail??`A context command was requested but never started — the session may need manual intervention.`,ts:n,commandId:e.commandId}},chatStatusEvents:yt(r().chatStatusEvents,e.agentId,a,n,`command-stalled:${e.agentId}:${e.commandId??n}`)})}return}if(e===`agent.removed`){let e=JSON.parse(n),i=r(),a={...i.agentsById};delete a[e.id];let o={...i.livenessMismatches};delete o[e.id];let s={...i.commandStalls};delete s[e.id],t({livenessMismatches:o,commandStalls:s}),t({agents:i.agents.filter(t=>t.id!==e.id),agentsById:a});return}if(e===`provider-quota.updated`){t({quotaSeq:r().quotaSeq+1});return}if(e===`message.claimed`){let e=JSON.parse(n);t({messages:r().messages.map(t=>t.id===e.messageId?{...t,claimedBy:e.claimedBy,claimExpiresAt:e.claimExpiresAt}:t)});return}if(e===`message.claim_released`){let e=JSON.parse(n);t({messages:r().messages.map(t=>t.id===e.messageId?{...t,claimedBy:void 0,claimedAt:void 0,claimExpiresAt:void 0}:t)});return}if(e===`message.deleted`){let e=JSON.parse(n);t({messages:r().messages.filter(t=>t.id!==e.messageId)});return}if(e===`orchestrator.status`){let e=JSON.parse(n);t({orchestrators:B(r().orchestrators,e)});return}if(e===`orchestrator.removed`){let e=JSON.parse(n);t({orchestrators:r().orchestrators.filter(t=>t.id!==e.id)});return}if(e===`policy.state.changed`||e===`config.changed`){r().fetchManagedPolicies();return}if(e===`command.failed`){let e=JSON.parse(n).command;if(e?.type===`agent.spawn`){let n=Ht(e),i=typeof e.updatedAt==`number`?e.updatedAt:typeof e.createdAt==`number`?e.createdAt:Date.now(),a=f(e.params)?e.params:{},o=d(a.spawnRequestId)??e.correlationId,s=d(a.provider),c=`command:${e.id??o??i}:agent-spawn-failed`,l={id:Ut(e),clientId:c,kind:`state`,title:`agent.spawn · failed`,body:n,meta:[s,o].filter(Boolean).join(` · `)||e.target,icon:`ti-alert-triangle`,view:`agents`,createdAt:i,ts:i,metadata:{commandId:e.id,commandType:e.type,status:e.status??`failed`,target:e.target,provider:s,spawnRequestId:o}};t({activityEvents:Gt(r().activityEvents,l)}),r().showNotification(`Spawn failed: ${n}`)}return}if(e===`command.dispatched`||e===`command.succeeded`){let i=JSON.parse(n).command;if(i){let n=wt(i,e);if(n){let e=typeof i.updatedAt==`number`?i.updatedAt:typeof i.createdAt==`number`?i.createdAt:Date.now();t({chatStatusEvents:yt(r().chatStatusEvents,Ct(i),n,e,i.id?`command:${i.id}:${n}`:void 0)})}}return}if(e.startsWith(`task.`)){let e=JSON.parse(n);if(e.kind===`deliverable`){let n=r(),i=B(n.deliverableTasks,e),a=!n.deliverableStatusFilter||e.status===n.deliverableStatusFilter,o=e.deliverableStage??`none`,s=!n.deliverableStageFilter||o===n.deliverableStageFilter,c=!n.deliverableProjectFilter||e.projectId===n.deliverableProjectFilter;t({deliverableTasks:a&&s&&c?i:i.filter(t=>t.id!==e.id)}),n.taskDetailById[e.id]&&t({taskDetailById:{...n.taskDetailById,[e.id]:e}})}else t({tasks:B(r().tasks,e)})}}}})})},disconnectSSE(){let e=r()._es;e&&(e.close(),t({_es:null}))},openCommandPalette(){t({commandQuery:``,commandPaletteOpen:!0})},closeCommandPalette(){t({commandPaletteOpen:!1,commandQuery:``})},async runCommand(e){let{action:n,payload:i}=e;if(r().closeCommandPalette(),n===`openView`)await r().switchView(i.view);else if(n===`agentPreset`)t({showOffline:!0,agentPresetFilter:i.preset||``}),await r().switchView(`agents`);else if(n===`copy`)try{await navigator.clipboard?.writeText(i.value||``)}catch{}else if(n===`messageAgent`){let e=r().agentsById[i.agentId];e&&r().openComposeToAgent(e)}else n===`pairAgent`?r().openPairInvite(i.agentId):n===`filterTag`?(t({agentTagFilter:i.tag||``,tagFilter:i.tag||``}),await r().switchView(`agents`)):n===`exportActivity`&&r().exportActivity(i.format||`markdown`)},async saveTokenAndRefresh(){let e=r().authToken;s(e);try{await n(`GET`,`/stats`)}catch(e){if(e.status===401){t({authNeeded:!0});return}}t({authNeeded:!1,connectionError:!1}),r().connectSSE(),await r().refresh(),r().startAutoRefresh()},destroy(){o(null),r().disconnectSSE(),r().stopAutoRefresh(),r().stopClock()}}),qt=(e,t)=>({users:[],usersById:{},presenceByAgent:{},async fetchUsers(){try{let r=await n(`GET`,`/users`),i=V(t().users,r);if(i===t().users)return;let a={};for(let e of i)a[e.id]=e;e({users:i,usersById:a})}catch{}},applyPresence(n,r){e({presenceByAgent:{...t().presenceByAgent,[n]:r}})},async announcePresence(e,r,i){try{let a=await n(`POST`,`/agents/`+encodeURIComponent(e)+`/presence`,{typing:r,...i?{leaving:!0}:{}});t().applyPresence(e,a.viewers??[])}catch{}}}),Jt=(e,t)=>({agents:[],agentsById:{},showOffline:!1,showBuiltIns:!1,agentSort:`status`,agentSortDir:`asc`,agentPresetFilter:``,agentStatusFilter:``,agentTagFilter:``,agentHostFilter:``,selectedAgent:``,agentDetailOpen:!1,agentDetailId:``,livenessMismatches:{},commandStalls:{},channelDetailOpen:!1,channelDetailId:``,renameModal:{show:!1,agentId:``,label:``},tagFilter:``,async fetchAgents(){try{let r=await n(`GET`,`/agents`),i=V(t().agents,r);if(i===t().agents)return;e({agents:i,agentsById:_t(i)})}catch{}},openAgentDetail(n){e({agentDetailId:n.id,agentDetailOpen:!0}),t().fetchAgents()},closeAgentDetail(){e({agentDetailOpen:!1})},openChannelDetail(t){e({channelDetailId:t.id,channelDetailOpen:!0})},closeChannelDetail(){e({channelDetailOpen:!1})},openRename(t){e({renameModal:{show:!0,agentId:t.id,label:t.label||``}})},async doRename(){let r=t(),i=r.renameModal.label.trim()||null;try{await n(`PATCH`,`/agents/`+r.renameModal.agentId+`/label`,{label:i}),e({renameModal:{...r.renameModal,show:!1}})}catch(e){t().showError(`Rename Failed`,e.message)}},async doDeleteAgent(r){try{await n(`DELETE`,`/agents/`+r);let i=t(),a={...i.agentsById};delete a[r],e({agents:i.agents.filter(e=>e.id!==r),agentsById:a,selectedAgent:i.selectedAgent===r?``:i.selectedAgent})}catch(e){t().showError(`Delete Failed`,e.message)}},async doAgentAction(e,r,i){try{await n(`POST`,`/agents/`+encodeURIComponent(e.id)+`/actions`,{action:r,...i?{surface:{component:i}}:{}});let a=r===`restart`?`Restart`:r===`resume`?`Resume`:r===`shutdown`?`Shutdown`:r===`compact`?`Compact`:r===`clearContext`?`Clear context`:r;t().showNotification(`${a} command sent to ${ne(e)}`),await Promise.all([t().fetchMessages(),t().fetchActivityEvents()])}catch(e){t().showError(`Action Failed`,e.message)}}}),U=300,W={messages:[],oldestLoadedId:null,hasMore:!0,loading:!1,loadedInitial:!1,gapBeforeId:null};function G(e,t){let n=new URLSearchParams;for(let[e,r]of Object.entries(t))n.set(e,String(r));return`/agents/${encodeURIComponent(e)}/chat?${n.toString()}`}function K(e,t){return t.filter(t=>h(e,t)&&!g(t)).sort((e,t)=>e.id-t.id)}function q(e,t){return V(e,[...e,...t].sort((e,t)=>e.id-t.id))}var Yt=10;async function Xt(e,t,r){let i=[],a=t;for(let t=0;t<Yt;t++){let t=await n(`GET`,G(e,{before:a,limit:U})),o=K(e,t);if(o.length===0)break;i.push(...o);let s=o[0].id;if(r.has(s)||t.length<U)break;a=s}return i}function Zt(e,t){return t.some(e=>e.from===`user`)?e.filter(e=>e.id>=0||e.from!==`user`):e}function J(e){return e[0]?.id??null}var Qt=12,Y=[];function $t(e){let t=Y.indexOf(e);t!==-1&&Y.splice(t,1),Y.unshift(e)}function en(e,t){let n=new Set(t.filter(Boolean)),r=0;for(let t of Y){if(r>=Qt)break;e[t]?.loadedInitial&&(n.add(t),r++)}let i={};for(let[t,r]of Object.entries(e))(!r.loadedInitial||n.has(t))&&(i[t]=r);return i}var tn=(e,t)=>({messages:[],agentChatByAgent:{},threadHistory:{},threadMessages:[],threadOpen:!1,chatHistoryImports:[],selectedInboxThread:``,replyTo:null,composeOpen:!1,showReasoning:!1,chatAgentSearch:``,chatAgentProviderFilter:``,chatAgentStatusFilter:``,chatAgentTagFilter:``,chatAgentCapFilter:``,chatAgentHostFilter:``,chatAgentSort:`status`,chatAgentSortDir:`asc`,chatAgentGroupBy:``,chatAgentFiltersCollapsed:!0,chatCollapsedChildren:[],feedObserveAll:!1,coordinatorFollows:[],coordinatorMutes:[],chatStatusEvents:{},chatStickToBottom:!0,chatHasNewItems:!1,inboxReadCursors:{},inboxArchivedThreads:{},inboxDrafts:{},chatSending:!1,inboxSearch:``,inboxSort:`attention`,inboxSortDir:`desc`,inboxShowArchived:!1,channelFilter:``,compose:{...m},inboxCompose:{...x},async fetchMessages(){try{let r=t(),i=`/messages?limit=100`;r.view===`messages`&&r.selectedAgent&&(i+=`&for=`+encodeURIComponent(r.selectedAgent)),r.view===`messages`&&r.channelFilter&&(i+=`&channel=`+encodeURIComponent(r.channelFilter));let a=await n(`GET`,i),o=Et(t().messages,a);e({messages:o});let s=t(),c=s.selectedInboxThread;if(Ot(c,s)){let e=0;for(let t of o)t.id>e&&ae(t)===c&&ee(t)&&y(t)&&(e=t.id);e&&t().markInboxThreadReadTo(c,e)}}catch{}},async loadAgentChat(r){if(!r)return;$t(r);let i=t().agentChatByAgent[r];if(!i?.loading){i?.loadedInitial&&i.messages.length>0||e(e=>({agentChatByAgent:{...e.agentChatByAgent,[r]:{...e.agentChatByAgent[r]??W,loading:!0}}}));try{let i=await n(`GET`,G(r,{limit:U})),a=K(r,i),o=t().agentChatByAgent[r]??W,s=o.loadedInitial?q(Zt(o.messages,a),a):V([],a),c=o.loadedInitial?o.hasMore:i.length===U;if(e(e=>({agentChatByAgent:en({...e.agentChatByAgent,[r]:{messages:s,oldestLoadedId:J(s),hasMore:c,loading:!1,loadedInitial:!0,gapBeforeId:o.loadedInitial?o.gapBeforeId??null:null}},[r,t().selectedAgent,t().selectedInboxThread])})),o.loadedInitial&&o.messages.length>0&&a.length>0&&i.length===U){let t=o.messages[o.messages.length-1].id,n=a[0].id;if(n>t)try{let t=await Xt(r,n,new Set(o.messages.map(e=>e.id)));t.length&&e(e=>{let n=e.agentChatByAgent[r];if(!n)return{};let i=q(n.messages,t);return{agentChatByAgent:{...e.agentChatByAgent,[r]:{...n,messages:i,oldestLoadedId:J(i)}}}})}catch(t){console.warn(`[chat] gap backfill failed for ${r}, marking for retry on next reconnect: ${t.message}`),e(e=>{let t=e.agentChatByAgent[r];if(!t)return{};let i=t.gapBeforeId===null?n:Math.min(t.gapBeforeId,n);return{agentChatByAgent:{...e.agentChatByAgent,[r]:{...t,gapBeforeId:i}}}})}}}catch(n){e(e=>({agentChatByAgent:{...e.agentChatByAgent,[r]:{...e.agentChatByAgent[r]??W,loading:!1}}})),t().showError(`Chat Load Failed`,n.message)}}},async loadOlder(r){if(!r)return;let i=t().agentChatByAgent[r];if(!i?.loadedInitial){await t().loadAgentChat(r);return}if(!i.loading){if(i.gapBeforeId!==null){await t().gapFillAgentChat(r);return}if(!(!i.hasMore||i.oldestLoadedId===null)){e(e=>({agentChatByAgent:{...e.agentChatByAgent,[r]:{...i,loading:!0}}}));try{let a=await n(`GET`,G(r,{before:i.oldestLoadedId,limit:U})),o=K(r,a),s=t().agentChatByAgent[r]??i,c=V(s.messages,[...o,...s.messages].sort((e,t)=>e.id-t.id));e(e=>({agentChatByAgent:{...e.agentChatByAgent,[r]:{...s,messages:c,oldestLoadedId:J(c),hasMore:a.length===U,loading:!1,loadedInitial:!0}}}))}catch(n){e(e=>({agentChatByAgent:{...e.agentChatByAgent,[r]:{...e.agentChatByAgent[r]??i,loading:!1}}})),t().showError(`Chat Load Failed`,n.message)}}}},async gapFillAgentChat(r){if(!r)return;let i=t().agentChatByAgent[r];if(!(!i?.loadedInitial||i.messages.length===0)){try{if(i.gapBeforeId!==null){let t=new Set(i.messages.map(e=>e.id)),n=await Xt(r,i.gapBeforeId,t);e(e=>{let t=e.agentChatByAgent[r]??i,a=n.length?q(t.messages,n):t.messages;return{agentChatByAgent:{...e.agentChatByAgent,[r]:{...t,messages:a,oldestLoadedId:J(a),gapBeforeId:null}}}})}}catch(e){console.warn(`[chat] gap backfill retry skipped for ${r}: ${e.message}`)}try{let e=t().agentChatByAgent[r]??i,a=e.messages[e.messages.length-1].id;for(;;){let e=a,i=await n(`GET`,G(r,{since:a,limit:U}));if(i.length===0||(t().appendChatTail(r,i.filter(t=>t.id>e)),a=i[i.length-1].id,a<=e)||i.length<U)return;let o=t().agentChatByAgent[r],s=o?.messages[o.messages.length-1]?.id;s&&s>a&&(a=s)}}catch(e){console.warn(`[chat] gap-fill skipped for ${r}: ${e.message}`)}}},appendChatTail(n,r){if(!n||r.length===0)return;let i=K(n,r);if(i.length===0)return;let a=t().agentChatByAgent[n]??W,o=q(Zt(a.messages,i),i);e({agentChatByAgent:{...t().agentChatByAgent,[n]:{...a,messages:o,oldestLoadedId:J(o)}}})},async fetchThreadHistory(r){if(r)try{let i=await n(`GET`,`/messages?for=`+encodeURIComponent(r)+`&limit=500`);e({threadHistory:{...t().threadHistory,[r]:i}})}catch{}},async fetchChatHistoryImports(){try{e({chatHistoryImports:await n(`GET`,`/chat/history-imports?limit=500`)})}catch{}},async fetchInboxState(){try{let r=await n(`GET`,`/inbox/state?operatorId=user`),i={},a={},o={};for(let e of r?.threads||[])e.readCursorMessageId&&(i[e.peerId]=e.readCursorMessageId),e.archivedAtMessageId&&(a[e.peerId]=e.archivedAtMessageId);for(let e of r?.drafts||[])e.body&&(o[e.peerId]=e.body);let s=t().inboxDrafts;e({inboxReadCursors:i,inboxArchivedThreads:a,...Object.keys(s).length>0?{}:{inboxDrafts:o}})}catch{}},openCompose(){e({composeOpen:!0,compose:{...m,from:T}})},openComposeToAgent(t){e({replyTo:null,compose:{...m,from:T,to:t.id},composeOpen:!0})},async doSend(){let r=t();if(!r.compose.from||!r.compose.to||!r.compose.body){t().showError(`Validation`,`From, To, and Message are required.`);return}try{let i={from:r.compose.from,to:r.compose.to,body:r.compose.body};r.compose.channel&&(i.channel=r.compose.channel),r.compose.subject&&(i.subject=r.compose.subject),r.replyTo&&(i.replyTo=r.replyTo.id),r.compose.claimable&&(i.claimable=!0,i.kind=`task`,i.payload={title:r.compose.subject||`Claimable task`}),await n(`POST`,`/messages`,i),e({composeOpen:!1,replyTo:null,compose:{...m,from:T}}),await t().fetchMessages()}catch(e){t().showError(`Send Failed`,e.message)}},async doClaim(e){let r=t(),i=r.compose.from||r.selectedAgent;if(!i){t().showError(`Validation`,`Select an agent first.`);return}try{let r=await n(`POST`,`/messages/`+e+`/claim`,{agentId:i});r.ok||t().showError(`Claim Failed`,r.error||`unknown`),r.ok&&await Promise.all([t().fetchMessages(),t().fetchTasks()])}catch(e){t().showError(`Claim Failed`,e.message)}},async doDeliveryAction(e,r,i){try{await n(`POST`,`/messages/`+e+`/delivery/actions`,{action:r,reason:i,agentId:t().compose.from||t().selectedAgent||`user`}),await t().fetchMessages()}catch(e){t().showError(`Delivery Update Failed`,e.message)}},async doDeleteMessage(r){try{await n(`DELETE`,`/messages/`+r),e({messages:t().messages.filter(e=>e.id!==r)})}catch(e){t().showError(`Delete Failed`,e.message)}},applyChatMessageUpdate(n){let r=t().agentChatByAgent,i={};for(let[e,t]of Object.entries(r))t.messages.some(e=>e.id===n.id)&&(i[e]={...t,messages:t.messages.map(e=>e.id===n.id?n:e)});Object.keys(i).length!==0&&e({agentChatByAgent:{...r,...i}})},async reactToMessage(r,i){try{let a=(r.reactions||[]).some(e=>e.actorId===`user`&&e.emoji===i),o=await n(`POST`,`/messages/`+r.id+`/reactions`,{actorId:T,emoji:i,action:a?`remove`:`add`});e({messages:B(t().messages,o)}),t().applyChatMessageUpdate(o)}catch(e){t().showError(`Reaction Failed`,e.message)}},startReply(t){let n=t.from===`user`?t.to:t.from;e({replyTo:{id:t.id,from:t.from},compose:{...m,from:T,to:n,channel:t.channel||``},composeOpen:!0})},cancelReply(){e({replyTo:null})},async openThread(r){e({threadMessages:[],threadOpen:!0});try{e({threadMessages:await n(`GET`,`/messages/`+r+`/thread`)})}catch(e){t().showError(`Thread Load Failed`,e.message)}},openInboxThread(n,r=[]){e({selectedInboxThread:n}),r.length&&t().markInboxThreadRead(n,r)},async sendChatMessage(r,i,a=[]){if(!r.trim()&&a.length===0||t().chatSending)return;let o=i.peer;e({chatSending:!0});let s=t().inboxDrafts[o],c={...t().inboxDrafts};delete c[o],e({inboxDrafts:c});let l=-Date.now(),u={id:l,from:T,to:o,kind:`chat`,body:r.trim()||`Attachment`,...i.lastMessage?.channel?{channel:i.lastMessage.channel}:{},payload:a.length?{attachments:a}:{},readBy:[T],createdAt:Date.now()};e(e=>{let t=e.agentChatByAgent[o]??W,n=[...t.messages,u];return{agentChatByAgent:{...e.agentChatByAgent,[o]:{...t,messages:n,oldestLoadedId:J(n)}}}});try{let s=t().agentsById[o]?.providerCapabilities?.liveSession?.inject,c=null;if(s)await n(`POST`,`/agents/`+encodeURIComponent(o)+`/prompt`,{body:r.trim()||`Attachment`,...a.length?{attachments:a}:{}});else{let e={from:T,to:o,body:r.trim()||`Attachment`};i.lastMessage?.channel&&(e.channel=i.lastMessage.channel),i.lastMessage?.id&&(e.replyTo=i.lastMessage.id),a.length&&(e.payload={attachments:a}),c=await n(`POST`,`/messages`,e)}e(e=>{let t=e.agentChatByAgent[o];if(!t)return{};let n=t.messages.filter(e=>e.id!==l);if(c){let r=n.some(e=>e.id===c.id)?n:q(n,[c]);return{agentChatByAgent:{...e.agentChatByAgent,[o]:{...t,messages:r,oldestLoadedId:J(r)}}}}return{agentChatByAgent:{...e.agentChatByAgent,[o]:{...t,messages:n,oldestLoadedId:J(n)}}}}),n(`DELETE`,`/inbox/drafts?operatorId=`+encodeURIComponent(S)+`&peerId=`+encodeURIComponent(o)).catch(()=>{}),Promise.all([t().fetchMessages(),t().loadAgentChat(o)])}catch(n){s!==void 0&&e(e=>e.inboxDrafts[o]===void 0?{inboxDrafts:{...e.inboxDrafts,[o]:s}}:{}),e(e=>{let t=e.agentChatByAgent[o];if(!t)return{};let n=t.messages.filter(e=>e.id!==l);return{agentChatByAgent:{...e.agentChatByAgent,[o]:{...t,messages:n,oldestLoadedId:J(n)}}}}),t().showError(`Send Failed`,n.message)}e({chatSending:!1})},async sendPermissionDecision(e,r,i,a){try{await n(`POST`,`/agents/`+encodeURIComponent(e)+`/permission-decision`,{approvalId:r,decision:i,...a?{answers:a}:{}});let o=i===`approve`?`Approved`:i===`approve-session`?`Approved for session`:i===`abort`?`Aborted`:i===`answer`?`Answer sent for`:`Denied`;t().showNotification(`${o} ${i===`answer`?`Claude's question`:`permission request`}`),await t().fetchAgents()}catch(e){t().showError(`Permission Failed`,e.message)}},markInboxThreadReadTo(r,i){!r||i<=(t().inboxReadCursors[r]||0)||(e({inboxReadCursors:{...t().inboxReadCursors,[r]:i}}),n(`PATCH`,`/inbox/threads`,{operatorId:S,peerId:r,readCursorMessageId:i}).catch(()=>{}))},markInboxThreadRead(e,n){!e||!n.length||t().markInboxThreadReadTo(e,jt(n))},markInboxThreadUnread(r){let i={...t().inboxReadCursors};delete i[r],e({inboxReadCursors:i}),n(`PATCH`,`/inbox/threads`,{operatorId:S,peerId:r,readCursorMessageId:null}).catch(()=>{})},archiveInboxThread(r,i){e({inboxArchivedThreads:{...t().inboxArchivedThreads,[r]:i}}),t().selectedInboxThread===r&&e({selectedInboxThread:``}),n(`PATCH`,`/inbox/threads`,{operatorId:S,peerId:r,archivedAtMessageId:i}).catch(()=>{})},unarchiveInboxThread(r){let i={...t().inboxArchivedThreads};delete i[r],e({inboxArchivedThreads:i}),n(`PATCH`,`/inbox/threads`,{operatorId:S,peerId:r,archivedAtMessageId:null}).catch(()=>{})},setReplyDraft(r,i){let a={...t().inboxDrafts};i?a[r]=i:delete a[r],e({inboxDrafts:a}),i?n(`PUT`,`/inbox/drafts`,{operatorId:S,peerId:r,body:i}).catch(()=>{}):n(`DELETE`,`/inbox/drafts?operatorId=`+encodeURIComponent(S)+`&peerId=`+encodeURIComponent(r)).catch(()=>{})},async sendInboxReply(r,i){let a=(t().inboxDrafts[r]||``).trim();if(!a||t().chatSending){a||t().showError(`Validation`,`Reply body is required.`);return}e({chatSending:!0});try{let o={from:T,to:r,body:a};i?.channel&&(o.channel=i.channel),i?.id&&(o.replyTo=i.id),await n(`POST`,`/messages`,o);let s={...t().inboxDrafts};delete s[r],e({inboxDrafts:s}),n(`DELETE`,`/inbox/drafts?operatorId=`+encodeURIComponent(S)+`&peerId=`+encodeURIComponent(r)).catch(()=>{}),await t().fetchMessages()}catch(e){t().showError(`Reply Failed`,e.message)}e({chatSending:!1})},toggleChatChildrenCollapsed(n){let r=t().chatCollapsedChildren;e({chatCollapsedChildren:r.includes(n)?r.filter(e=>e!==n):[...r,n]})},setFeedObserveAll(t){e({feedObserveAll:t})},toggleCoordinatorFollow(n){let r=t().coordinatorFollows,i=t().coordinatorMutes;r.includes(n)?e({coordinatorFollows:r.filter(e=>e!==n)}):e({coordinatorFollows:[...r,n],coordinatorMutes:i.filter(e=>e!==n)})},toggleCoordinatorMute(n){let r=t().coordinatorMutes,i=t().coordinatorFollows;r.includes(n)?e({coordinatorMutes:r.filter(e=>e!==n)}):e({coordinatorMutes:[...r,n],coordinatorFollows:i.filter(e=>e!==n)})},async doSendInboxCompose(){let r=t().inboxCompose,i=r.to;if(i){if(r.toMode===`tag`?i=`tag:`+i:r.toMode===`cap`&&(i=`cap:`+i),!r.body){t().showError(`Validation`,`Message is required.`);return}try{let a={from:T,to:i,body:r.body};r.channel&&(a.channel=r.channel),r.subject&&(a.subject=r.subject),r.claimable&&(a.claimable=!0,a.kind=`task`,a.payload={title:r.subject||`Claimable task`}),await n(`POST`,`/messages`,a),e({inboxCompose:{...x,toMode:r.toMode,to:r.to}}),await t().fetchMessages()}catch(e){t().showError(`Send Failed`,e.message)}}}});function X(e,t){return JSON.stringify([String(e),t||``])}function Z(e,t){return JSON.stringify([`team`,e,t||``])}function nn(e){return{threadId:String(e.threadId),...e.channel?{channel:e.channel}:{}}}function rn(e){return e.teamId?{teamId:e.teamId,...e.channel?{channel:e.channel}:{}}:null}function an(e){return`teamId`in e?Z(e.teamId,e.channel):X(e.threadId,e.channel)}function on(e){let t=new URLSearchParams(`teamId`in e?{teamId:e.teamId}:{threadId:String(e.threadId)});return e.channel&&t.set(`channel`,e.channel),`/plans?${t.toString()}`}var sn=(e,t)=>({plansById:{},plansByThread:{},plansByTeam:{},planLookups:{},planLoading:{},planCollapsed:null,sessionTasksCollapsed:!1,setPlanCollapsed(t){e({planCollapsed:t})},setSessionTasksCollapsed(t){e({sessionTasksCollapsed:t})},async fetchPlan(r){let i=`teamId`in r?{teamId:r.teamId,...r.channel?{channel:r.channel}:{}}:{threadId:String(r.threadId),...r.channel?{channel:r.channel}:{}},a=an(i);e({planLookups:{...t().planLookups,[a]:i},planLoading:{...t().planLoading,[a]:!0}});try{let r=await n(`GET`,on(i)),o=nn(r),s=X(o.threadId,o.channel),c=rn(r),l=c?Z(c.teamId,c.channel):``,u=!(`teamId`in i),d=`teamId`in i;e({plansById:{...t().plansById,[r.id]:r},plansByThread:{...t().plansByThread,...u?{[a]:r}:{},[s]:r},plansByTeam:c?{...t().plansByTeam,...d?{[a]:r}:{},[l]:r}:t().plansByTeam,planLookups:{...t().planLookups,[a]:i,[s]:o,...c?{[l]:c}:{}},planLoading:{...t().planLoading,[a]:!1,[s]:!1,...c?{[l]:!1}:{}}}),t().hydrateIssueRefsForPlan(r)}catch(n){let r=typeof n.status==`number`?n.status:0;e({plansByThread:r===404&&!(`teamId`in i)?{...t().plansByThread,[a]:null}:t().plansByThread,plansByTeam:r===404&&`teamId`in i?{...t().plansByTeam,[a]:null}:t().plansByTeam,planLoading:{...t().planLoading,[a]:!1}}),r&&r!==404&&t().showError(`Plan Load Failed`,n.message)}},async refreshPlans(){let e=Object.values(t().planLookups);await Promise.all(e.map(e=>t().fetchPlan(e)))},async setPlanArchived(e,r){try{let i=await n(`PATCH`,`/plans/${encodeURIComponent(e)}/archive`,{archived:r});t().upsertPlan(i)}catch(e){t().showError(r?`Plan Archive Failed`:`Plan Unarchive Failed`,e.message)}},upsertPlan(n){let r=nn(n),i=X(r.threadId,r.channel),a=rn(n),o=a?Z(a.teamId,a.channel):``;e({plansById:{...t().plansById,[n.id]:n},plansByThread:{...t().plansByThread,[i]:n},plansByTeam:a?{...t().plansByTeam,[o]:n}:t().plansByTeam,planLookups:{...t().planLookups,[i]:r,...a?{[o]:a}:{}},planLoading:{...t().planLoading,[i]:!1,...a?{[o]:!1}:{}}}),t().hydrateIssueRefsForPlan(n)},removePlan(n){let r=typeof n==`string`?n:n.id,i={...t().plansById};delete i[r],e({plansById:i,plansByThread:Object.fromEntries(Object.entries(t().plansByThread).filter(([,e])=>e?.id!==r)),plansByTeam:Object.fromEntries(Object.entries(t().plansByTeam).filter(([,e])=>e?.id!==r)),planLookups:Object.fromEntries(Object.entries(t().planLookups).filter(([e])=>t().plansByThread[e]?.id!==r&&t().plansByTeam[e]?.id!==r))})}}),cn=(e,t)=>({teams:[],teamsLoading:!1,teamsError:null,teamOutcomeAggregates:null,teamOutcomeAggregatesLoading:!1,teamOutcomeAggregatesError:null,async fetchTeams(){e({teamsLoading:!0,teamsError:null});try{let r=await n(`GET`,`/teams`),i=V(t().teams,r.teams);return e({teams:i,teamsLoading:!1,teamsError:null}),i}catch(n){return e({teamsLoading:!1,teamsError:l(n)}),t().teams}},async fetchTeamOutcomeAggregates(){e({teamOutcomeAggregatesLoading:!0,teamOutcomeAggregatesError:null});try{let t=await n(`GET`,`/teams/outcomes`);return e({teamOutcomeAggregates:t,teamOutcomeAggregatesLoading:!1,teamOutcomeAggregatesError:null}),t}catch(n){return e({teamOutcomeAggregatesLoading:!1,teamOutcomeAggregatesError:l(n)}),t().teamOutcomeAggregates}},upsertTeam(n){let r=B(t().teams,n);r!==t().teams&&e({teams:r})},markTeamDissolved(n){let r=Date.now();e({teams:t().teams.map(e=>e.id===n.teamId?{...e,status:`dissolved`,updatedAt:r,dissolvedAt:e.dissolvedAt??r,zeroMembersSince:void 0,...n.outcomeStatus?{outcomeStatus:n.outcomeStatus}:{},...n.reason?{outcomeSummary:n.reason}:{}}:e)})},async dissolveTeam(e){try{let r=await n(`POST`,`/teams/${encodeURIComponent(e)}/dissolve`,{});t().upsertTeam(r),t().showNotification(`Team dissolved`),await Promise.all([t().fetchTeams(),t().fetchTeamOutcomeAggregates(),t().fetchActivityEvents()])}catch(e){t().showError(`Dissolve Failed`,l(e))}}});function ln(e,t){return JSON.stringify([e,t])}function un(e){return[...new Set(e.nodes.map(e=>e.refs?.issueId).filter(e=>!!e))]}function Q(e,t){let n=!1,r={...e};for(let i of t){let t=e[i.id];(!t||JSON.stringify(t)!==JSON.stringify(i))&&(r[i.id]=i,n=!0)}return n?r:e}var dn=(e,t)=>({issueRefsById:{},issuesByEntity:{},issueActivityByAgent:{},issueLoading:{},issueErrors:{},async fetchAllIssueRefs(){try{let r=await n(`GET`,`/issue-refs?limit=500`);e({issueRefsById:Q(t().issueRefsById,r.issueRefs)})}catch{}},async fetchIssueRef(r){let i=`ref:${r}`;e({issueLoading:{...t().issueLoading,[i]:!0},issueErrors:{...t().issueErrors,[i]:null}});try{let a=await n(`GET`,`/issue-refs/${encodeURIComponent(r)}`);return e({issueRefsById:Q(t().issueRefsById,[a.issueRef]),issueLoading:{...t().issueLoading,[i]:!1}}),a.issueRef}catch(n){return e({issueLoading:{...t().issueLoading,[i]:!1},issueErrors:{...t().issueErrors,[i]:l(n)}}),t().issueRefsById[r]??null}},async fetchIssuesForEntity(r,i){let a=ln(r,i);e({issueLoading:{...t().issueLoading,[a]:!0},issueErrors:{...t().issueErrors,[a]:null}});try{let o=await n(`GET`,`/issue-associations/entities/${encodeURIComponent(r)}/${encodeURIComponent(i)}/issues`);return e({issuesByEntity:{...t().issuesByEntity,[a]:o.issues},issueRefsById:Q(t().issueRefsById,o.issues.map(e=>e.issueRef)),issueLoading:{...t().issueLoading,[a]:!1}}),o.issues}catch(n){return e({issueLoading:{...t().issueLoading,[a]:!1},issueErrors:{...t().issueErrors,[a]:l(n)}}),t().issuesByEntity[a]??[]}},async fetchAgentIssueActivity(r){let i=`agent:${r}`;e({issueLoading:{...t().issueLoading,[i]:!0},issueErrors:{...t().issueErrors,[i]:null}});try{let a=await n(`GET`,`/issue-activity/agents/${encodeURIComponent(r)}`);return e({issueActivityByAgent:{...t().issueActivityByAgent,[r]:a.issues},issueRefsById:Q(t().issueRefsById,a.issues.map(e=>e.issueRef)),issueLoading:{...t().issueLoading,[i]:!1}}),a.issues}catch(n){return e({issueLoading:{...t().issueLoading,[i]:!1},issueErrors:{...t().issueErrors,[i]:l(n)}}),t().issueActivityByAgent[r]??[]}},async hydrateIssueRefsForPlan(e){let n=un(e).filter(e=>!t().issueRefsById[e]);await Promise.all(n.map(e=>t().fetchIssueRef(e)))},async refreshIssueRefs(){let e=Object.keys(t().issueRefsById).map(e=>t().fetchIssueRef(e)),n=Object.keys(t().issuesByEntity).map(e=>{try{let[n,r]=JSON.parse(e);return t().fetchIssuesForEntity(n,r)}catch{return Promise.resolve([])}});await Promise.all([...e,...n])},upsertIssueRef(n){let r=Q(t().issueRefsById,[n]);r!==t().issueRefsById&&e({issueRefsById:r})}}),fn={title:``,intent:``,doneWhen:``,issueRefs:``,dependsOn:``,dispatchComplexity:``,dispatchType:``,dispatchFootprint:``,dispatchCriticality:``},pn=(e,t)=>({pairs:[],tasks:[],taskEvents:[],taskEventCache:{},taskEventsOpen:!1,pairInviteOpen:!1,pairMessageOpen:!1,pairInvite:{...E},deliverableTasks:[],deliverableStatusFilter:``,deliverableStageFilter:``,deliverableProjectFilter:``,taskDetailById:{},taskMemoryById:{},taskHistoryById:{},taskDetailOpen:!1,taskDetailId:null,taskCreateOpen:!1,taskCreateForm:{...fn},taskDispatchResultById:{},taskDispatchLoadingId:null,pairMessage:{...C},pairStatusFilter:`open`,taskStatusFilter:``,taskSourceFilter:``,async fetchPairs(){try{let r=t(),i;if(r.view===`activity`)i=await n(`GET`,`/pairs`);else if(r.pairStatusFilter===`open`){let[e,t]=await Promise.all([n(`GET`,`/pairs?status=active`),n(`GET`,`/pairs?status=pending`)]);i=[...e,...t]}else i=r.pairStatusFilter?await n(`GET`,`/pairs?status=`+encodeURIComponent(r.pairStatusFilter)):await n(`GET`,`/pairs`);let a=i.sort((e,t)=>new Date(t.updatedAt).getTime()-new Date(e.updatedAt).getTime()),o=V(t().pairs,a);o!==t().pairs&&e({pairs:o})}catch{}},async fetchTasks(){try{let r=t(),i=new URLSearchParams({limit:`100`});r.taskStatusFilter&&i.set(`status`,r.taskStatusFilter),r.taskSourceFilter&&i.set(`source`,r.taskSourceFilter);let a=V(t().tasks,await n(`GET`,`/tasks?`+i.toString()));a!==t().tasks&&e({tasks:a})}catch{}},async fetchDeliverableTasks(r){try{let i=t(),a=new URLSearchParams({kind:`deliverable`,limit:`200`});r?.unfiltered||(i.deliverableStatusFilter&&a.set(`status`,i.deliverableStatusFilter),i.deliverableStageFilter&&a.set(`deliverableStage`,i.deliverableStageFilter),i.deliverableProjectFilter&&a.set(`projectId`,i.deliverableProjectFilter));let o=await n(`GET`,`/tasks?`+a.toString()),s=V(t().deliverableTasks,o);s!==t().deliverableTasks&&e({deliverableTasks:s})}catch{}},async fetchTaskDetail(r){try{let i=await n(`GET`,`/tasks/`+r+`/detail`);e({taskDetailById:{...t().taskDetailById,[r]:i}})}catch{}},async fetchTaskMemory(r){try{let i=await n(`GET`,`/tasks/`+r+`/memory`);e({taskMemoryById:{...t().taskMemoryById,[r]:i}})}catch{}},async fetchTaskHistory(r){try{let i=await n(`GET`,`/tasks/`+r+`/history`);e({taskHistoryById:{...t().taskHistoryById,[r]:i}})}catch{}},openTaskDetail(n){e({taskDetailOpen:!0,taskDetailId:n.id}),t().fetchTaskDetail(n.id),t().fetchTaskMemory(n.id),t().fetchTaskHistory(n.id)},openTaskDetailById(n){e({taskDetailOpen:!0,taskDetailId:n}),t().fetchTaskDetail(n),t().fetchTaskMemory(n),t().fetchTaskHistory(n)},closeTaskDetail(){e({taskDetailOpen:!1,taskDetailId:null})},async doClaimTask(e){let r=t(),i=r.compose.from||r.selectedAgent;if(!i){t().showError(`Validation`,`Select an agent first.`);return}try{let r=await n(`POST`,`/tasks/`+e+`/claim`,{agentId:i});r.ok?await Promise.all([t().fetchTasks(),t().fetchMessages()]):t().showError(`Claim Failed`,r.error||`unknown`)}catch(e){t().showError(`Claim Failed`,e.message)}},async doUpdateTaskStatus(r,i){if(!(!r||!i||i===r.status))try{let a={status:i},o=r.claimedBy||t().compose.from||t().selectedAgent;o&&(a.agentId=o);let s=await n(`PATCH`,`/tasks/`+r.id+`/status`,a),c=s.task||s;if(e({tasks:t().tasks.map(e=>e.id===r.id?c:e)}),s.memoryEvent){let n=t().taskEventCache[r.id]||[];e({taskEventCache:{...t().taskEventCache,[r.id]:[...n,s.memoryEvent]},...t().taskEventsOpen?{taskEvents:[...t().taskEvents,s.memoryEvent]}:{}})}s.memory&&t().showNotification(`Memory captured: ${s.memory.title}`)}catch(e){t().showError(`Status Update Failed`,e.message),await t().fetchTasks()}},async openTaskEvents(r){e({taskEvents:[],taskEventsOpen:!0});try{let i=await n(`GET`,`/tasks/`+r.id+`/events`);e({taskEvents:i,taskEventCache:{...t().taskEventCache,[r.id]:i}})}catch(e){t().showError(`Task Events Failed`,e.message)}},openTaskCreate(){e({taskCreateOpen:!0,taskCreateForm:{...fn}})},closeTaskCreate(){e({taskCreateOpen:!1})},setTaskCreateForm(n){e({taskCreateForm:{...t().taskCreateForm,...n}})},async doCreateTask(){let{taskCreateForm:r}=t(),i=r.title.trim();if(!i){t().showError(`Validation`,`Title is required.`);return}let a=r.intent.trim()||i,o={};r.dispatchComplexity&&(o.complexity=r.dispatchComplexity),r.dispatchType&&(o.type=r.dispatchType),r.dispatchFootprint&&(o.contextFootprint=r.dispatchFootprint),r.dispatchCriticality&&(o.criticality=r.dispatchCriticality);let s=r.issueRefs.split(`,`).map(e=>e.trim()).filter(Boolean),c=r.dependsOn.split(`,`).map(e=>Number(e.trim())).filter(e=>Number.isInteger(e)&&e>0);try{await n(`POST`,`/tasks`,{title:i,intent:a,...r.doneWhen.trim()?{doneWhen:r.doneWhen.trim()}:{},...s.length?{issueRefs:s}:{},...c.length?{dependsOn:c}:{},...Object.keys(o).length?{dispatch:o}:{}}),e({taskCreateOpen:!1,taskCreateForm:{...fn}}),await t().fetchDeliverableTasks()}catch(e){t().showError(`Create Task Failed`,e.message)}},async doEditTask(r,i){try{let a=await n(`PATCH`,`/tasks/`+r,i);e({taskDetailById:{...t().taskDetailById,[r]:a},deliverableTasks:t().deliverableTasks.map(e=>e.id===r?{...e,...a}:e)})}catch(e){t().showError(`Edit Task Failed`,e.message)}},async doDispatchTask(r,i){e({taskDispatchLoadingId:r});try{let a={};i&&Object.keys(i).length&&(a.pin=i);let o=await n(`POST`,`/tasks/`+r+`/dispatch`,a);e({taskDispatchResultById:{...t().taskDispatchResultById,[r]:o},taskDispatchLoadingId:null})}catch(n){e({taskDispatchLoadingId:null}),t().showError(`Dispatch Failed`,n.message)}},async doSpawnWithTask(e,r){let i=t().spawnOrchId;try{let a={provider:r.provider,taskId:e};r.model&&(a.model=r.model),r.effort&&(a.effort=r.effort),i&&(a.orchestratorId=i),await n(`POST`,`/agents/spawn`,a),t().showNotification(`Worker spawning for T${e} (${r.provider})`)}catch(e){t().showError(`Spawn Failed`,e.message)}},openPairInvite(n){e({pairInvite:{...E,requesterId:n||t().selectedAgent||``},pairInviteOpen:!0})},closePairInvite(){e({pairInviteOpen:!1,pairInvite:{...E}})},async doCreatePair(){let r=t();if(!r.pairInvite.requesterId||!r.pairInvite.targetId){t().showError(`Validation`,`Requester and Target are required.`);return}if(r.pairInvite.requesterId===r.pairInvite.targetId){t().showError(`Validation`,`Requester and Target must be different.`);return}try{let i={from:r.pairInvite.requesterId,target:r.pairInvite.targetId};r.pairInvite.objective&&(i.objective=r.pairInvite.objective),await n(`POST`,`/pairs`,i),e({pairInviteOpen:!1,pairInvite:{...E}}),await Promise.all([t().fetchPairs(),t().fetchMessages()])}catch(e){t().showError(`Pair Invite Failed`,e.message)}},openPairMessage(t,n){e({pairMessage:{...C,pairId:t.id,from:n||t.requesterId},pairMessageOpen:!0})},closePairMessage(){e({pairMessageOpen:!1,pairMessage:{...C}})},async doSendPairMessage(){let r=t();if(!r.pairMessage.pairId||!r.pairMessage.from||!r.pairMessage.body){t().showError(`Validation`,`Pair, From, and Message are required.`);return}try{let i={from:r.pairMessage.from,body:r.pairMessage.body};r.pairMessage.subject&&(i.subject=r.pairMessage.subject),await n(`POST`,`/pairs/`+encodeURIComponent(r.pairMessage.pairId)+`/messages`,i),e({pairMessageOpen:!1,pairMessage:{...C}}),await Promise.all([t().fetchPairs(),t().fetchMessages()])}catch(e){t().showError(`Pair Message Failed`,e.message)}},async doAcceptPair(e){try{await n(`POST`,`/pairs/`+encodeURIComponent(e.id)+`/accept`,{agentId:e.targetId}),await Promise.all([t().fetchPairs(),t().fetchMessages()])}catch(e){t().showError(`Accept Failed`,e.message)}},async doRejectPair(e){try{await n(`POST`,`/pairs/`+encodeURIComponent(e.id)+`/reject`,{agentId:e.targetId}),await Promise.all([t().fetchPairs(),t().fetchMessages()])}catch(e){t().showError(`Reject Failed`,e.message)}},async doHangupPair(e,r){try{await n(`POST`,`/pairs/`+encodeURIComponent(e.id)+`/hangup`,{agentId:r||e.requesterId}),await Promise.all([t().fetchPairs(),t().fetchMessages()])}catch(e){t().showError(`Hang Up Failed`,e.message)}}}),mn=(e,t)=>({orchestrators:[],providerCatalog:[],orchestratorSpawnOpen:!1,orchestratorInstallOpen:!1,spawnOrchId:``,spawnProvider:N(void 0),spawnModel:F(N(void 0)),spawnEffort:``,spawnProfile:`default-relay`,spawnCwd:``,spawnLabel:``,spawnApproval:`guarded`,spawnWorkspaceMode:`inherit`,spawnPrompt:``,spawnSystemPromptAppend:``,spawnCount:1,spawnCwdHistory:[],isSpawning:!1,spawnDirBrowser:{open:!1,loading:!1,path:``,parent:``,baseDir:``,entries:[],error:``},pendingForkImport:null,async fetchOrchestrators(){try{let r=V(t().orchestrators,await n(`GET`,`/orchestrators`));r!==t().orchestrators&&e({orchestrators:r})}catch{}},async fetchProviderCatalog(){try{e({providerCatalog:(await n(`GET`,`/providers`)).catalog})}catch{}},async refreshOrchestratorProviders(e){try{await n(`GET`,`/orchestrators/`+encodeURIComponent(e)+`/providers?refresh=1`),await t().fetchOrchestrators(),t().showNotification(`Provider status refreshed`)}catch(e){t().showError(`Provider Refresh Failed`,e.message)}},openAgentSpawn(){t().openOrchestratorSpawn()},closeAgentSpawn(){e({orchestratorSpawnOpen:!1})},async doSpawnAgent(){await t().submitOrchestratorSpawn()},openOrchestratorSpawn(){t().openOrchestratorSpawnAt()},openOrchestratorSpawnAt(n={}){let r=t().orchestrators.filter(e=>e.status===`online`);if(!r.length){t().showError(`No Orchestrators`,`No orchestrators are currently online.`);return}t().fetchProviderCatalog();let i=t(),a=n.orchestratorId?r.find(e=>e.id===n.orchestratorId):void 0;if(n.orchestratorId&&!a){t().showError(`Orchestrator Offline`,`The selected orchestrator is not online.`);return}let o=n.cwd?.trim()||i.spawnCwd,s=o?r.find(e=>v(o,e.baseDir)):void 0,c=i.spawnOrchId?r.find(e=>e.id===i.spawnOrchId):void 0,l=a?.id||s?.id||c?.id||r[0].id,u=r.find(e=>e.id===l),d=i.spawnProvider&&u.providers.includes(i.spawnProvider)?i.spawnProvider:N(u),f=i.spawnProvider===d&&i.spawnModel&&P(d,i.providerCatalog).some(e=>e.alias===i.spawnModel)?i.spawnModel:F(d,i.providerCatalog),p=o&&v(o,u.baseDir)?o:u.baseDir||``;e({spawnOrchId:l,spawnProvider:d,spawnModel:f,spawnEffort:i.spawnProvider===d&&i.spawnModel===f?i.spawnEffort:``,spawnProfile:i.spawnProfile||`default-relay`,spawnCwd:p,spawnLabel:``,spawnWorkspaceMode:`inherit`,spawnPrompt:``,spawnSystemPromptAppend:``,spawnCount:1,pendingForkImport:null,orchestratorSpawnOpen:!0})},forkFromAgent(n,r){let i=t(),a=i.agentsById[n];if(!a){t().showError(`Fork`,`Agent not found.`);return}let o=i.orchestrators.filter(e=>e.status===`online`);if(!o.length){t().showError(`No Orchestrators`,`No orchestrators are currently online.`);return}t().fetchProviderCatalog();let s=a.providerCapabilities,c=s?.model?.provider||(typeof a.meta?.provider==`string`?a.meta.provider:``),l=s?.model?.alias||s?.model?.id||``,u=(c?M(c,i.providerCatalog):void 0)?.models.find(e=>e.alias===l||e.providerModel===l)?.alias||``,p=s?.model?.effort||``,m=a.meta?.workspace,h=f(m)?m:{},g=d(h.repoRoot)||d(h.sourceCwd)||(typeof a.meta?.cwd==`string`?a.meta.cwd:``),_=d(h.mode),y=_===`isolated`?`isolated`:_===`shared`?`shared`:`inherit`,ee=s?.session?.approvalMode||(typeof a.meta?.approvalMode==`string`?a.meta.approvalMode:`guarded`),te=a.label?`${a.label} (fork)`:``,b=o.find(e=>e.hostname===a.machine)||o.find(e=>v(g,e.baseDir))||o[0],x=ne(a),S=[];for(let e of r){let t=re(e).trim();if(!t)continue;let n=e.from===`user`?`user`:`agent`;S.push(`[${n}]: ${t}`)}let C=S.join(`
|
|
6
6
|
`),w=14e3,ie=`You are continuing work from a previous agent session (${x}). Below is the conversation history. Treat it as context for your work, not as your own actions.\n\n${C.length>w?`...
|
|
7
|
-
`+C.slice(C.length-w):C}`,T=r.filter(e=>typeof e.id==`number`&&e.id>0).map(e=>e.id);e({spawnOrchId:b.id,spawnProvider:c||N(b),spawnModel:u||F(c||N(b)),spawnEffort:p,spawnProfile:i.spawnProfile||`default-relay`,spawnCwd:g||b.baseDir||``,spawnLabel:te,spawnApproval:ee,spawnWorkspaceMode:y,spawnPrompt:`Continue from this previous session.`,spawnSystemPromptAppend:ie,spawnCount:1,pendingForkImport:{sourcePeerId:a.id,sourceAgentId:a.id,sourceThreadId:a.id,sourceAgentLabel:x,messageIds:T},orchestratorSpawnOpen:!0})},openOrchestratorInstall(){e({orchestratorInstallOpen:!0})},openOrchestratorSpawnFor(n){let r=t(),i=r.orchestrators.find(e=>e.id===n),a=N(i),o=F(a,r.providerCatalog),s=r.spawnProvider===a&&r.spawnModel===o?r.spawnEffort:``,c=r.spawnCwd&&v(r.spawnCwd,i?.baseDir)?r.spawnCwd:i?.baseDir||``;e({spawnOrchId:n,spawnProvider:a,spawnModel:o,spawnEffort:s,spawnProfile:r.spawnProfile||`default-relay`,spawnCwd:c,spawnLabel:``,spawnWorkspaceMode:`inherit`,spawnPrompt:``,spawnSystemPromptAppend:``,spawnCount:1,pendingForkImport:null,orchestratorSpawnOpen:!0})},selectSpawnHistory(n,r){let i=t(),a=i.orchestrators.find(e=>e.id===n&&e.status===`online`);if(!a){t().showError(`Unavailable`,`That orchestrator is no longer online.`);return}if(n===i.spawnOrchId){e({spawnCwd:r});return}let o=i.spawnProvider&&a.providers.includes(i.spawnProvider)?i.spawnProvider:N(a),s=i.spawnProvider===o&&i.spawnModel&&P(o,i.providerCatalog).some(e=>e.alias===i.spawnModel)?i.spawnModel:F(o,i.providerCatalog);e({spawnOrchId:n,spawnProvider:o,spawnModel:s,spawnEffort:i.spawnProvider===o&&i.spawnModel===s?i.spawnEffort:``,spawnCwd:r})},async submitOrchestratorSpawn(){let n=t();if(n.isSpawning)return;if(!n.spawnOrchId){t().showError(`Validation`,`Select an orchestrator.`);return}let r=n.orchestrators.find(e=>e.id===n.spawnOrchId);if(!r){t().showError(`Validation`,`Selected orchestrator is not available.`);return}let a=n.spawnCwd.trim();if(!a){t().showError(`Validation`,`Select a working directory.`);return}if(!v(a,r.baseDir)){t().showError(`Validation`,`Working directory must be under ${r.baseDir}.`);return}let o=n.pendingForkImport,s=o?1:Math.max(1,Math.min(10,Math.round(n.spawnCount)||1));e({isSpawning:!0});try{for(let e=0;e<s;e++){let t={provider:n.spawnProvider,orchestratorId:n.spawnOrchId,approvalMode:n.spawnApproval,workspaceMode:n.spawnWorkspaceMode||`inherit`};n.spawnModel&&(t.model=n.spawnModel),n.spawnEffort&&(t.effort=n.spawnEffort),n.spawnProfile&&(t.profile=n.spawnProfile),t.cwd=a,n.spawnLabel&&(t.label=s>1?`${n.spawnLabel} ${e+1}`:n.spawnLabel),n.spawnPrompt&&(t.prompt=n.spawnPrompt),n.spawnSystemPromptAppend&&(t.systemPromptAppend=n.spawnSystemPromptAppend);let r=(await i(`POST`,`/agents/spawn`,t)).command?.params?.spawnRequestId;o&&r&&o.messageIds.length>0&&await i(`POST`,`/chat/history-imports`,{targetSpawnRequestId:r,sourcePeerId:o.sourcePeerId,sourceAgentId:o.sourceAgentId,sourceThreadId:o.sourceThreadId,sourceAgentLabel:o.sourceAgentLabel,importedBy:S,messageIds:o.messageIds})}e({orchestratorSpawnOpen:!1,pendingForkImport:null,isSpawning:!1,spawnCwdHistory:[{orchId:n.spawnOrchId,cwd:a},...n.spawnCwdHistory.filter(e=>!(e.orchId===n.spawnOrchId&&e.cwd===a))].slice(0,5)}),await Promise.all([t().fetchAgents(),t().fetchOrchestrators(),t().fetchActivityEvents(),t().fetchChatHistoryImports()])}catch(n){e({isSpawning:!1}),t().showError(`Spawn Failed`,n.message)}},orchestratorAction(e,n,r,a){let o=n===`restart`?`Restart`:`Shutdown`,s=r?`agent "${r}"`:`all agents`;t().openConfirm(`${o} Agent`,`${o} ${s} on orchestrator "${e}"?`,async()=>{try{await i(`POST`,`/orchestrators/`+encodeURIComponent(e)+`/actions`,{action:n,agentId:r,...a?{surface:{component:a}}:{}}),await Promise.all([t().fetchOrchestrators(),t().fetchActivityEvents()])}catch(e){t().showError(`${o} Failed`,e.message)}})},upgradeOrchestrator(e,n){let r=n?` to v${n}`:` to match the relay`;t().openConfirm(`Upgrade Orchestrator`,`Upgrade "${e}"${r}? It will install the new version and restart itself.`,async()=>{try{await i(`POST`,`/orchestrators/`+encodeURIComponent(e)+`/actions`,{action:`upgrade`,...n?{targetVersion:n}:{}}),await Promise.all([t().fetchOrchestrators(),t().fetchActivityEvents()])}catch(e){t().showError(`Upgrade Failed`,e.message)}})},deleteOrchestrator(e){t().openConfirm(`Remove Orchestrator`,`Remove orchestrator "${e}"?`,async()=>{try{await i(`DELETE`,`/orchestrators/`+encodeURIComponent(e)),await Promise.all([t().fetchOrchestrators(),t().fetchActivityEvents()])}catch(e){t().showError(`Delete Failed`,e.message)}})},async browseSpawnDirectory(n){let r=t().spawnOrchId;if(!r)return;let a=t().spawnDirBrowser;e({spawnDirBrowser:{...a,loading:!0,error:``}});try{let a=n?`?path=`+encodeURIComponent(n):``,o=await i(`GET`,`/orchestrators/`+encodeURIComponent(r)+`/directories`+a);e({spawnDirBrowser:{open:!0,loading:!1,path:o.path||``,parent:o.parent||``,baseDir:o.baseDir||``,entries:o.entries||[],error:``},spawnCwd:o.path||t().spawnCwd})}catch(n){e({spawnDirBrowser:{...t().spawnDirBrowser,loading:!1,error:n.message}})}},selectSpawnDirectory(n){e({spawnCwd:n||t().spawnDirBrowser.path,spawnDirBrowser:{...t().spawnDirBrowser,open:!1}})}}),hn=(e,t)=>({managedPolicies:[],policyModal:{open:!1,editing:``,name:``,description:``,orchestratorId:``,cwd:``,enabled:void 0,provider:N(void 0),rig:``,model:F(N(void 0)),effort:``,profile:`default-relay`,providerArgs:``,prompt:``,tags:``,capabilities:``,label:``,mode:`always-on`,permissionMode:`guarded`,restartOnUpdate:!0,scheduledDailyRestart:!1,keepaliveSeconds:`300`,backoffSchedule:`5,15,60,300`,backoffResetAfterSeconds:`600`,channelId:``},policyDirBrowser:{open:!1,loading:!1,path:``,parent:``,baseDir:``,entries:[],error:``},agentProfiles:[],toolGroupCatalog:[],toolGroupCatalogStatus:{loading:!1,loaded:!1,error:null},profileModal:{open:!1,mode:`create`,profile:{name:``,description:``,provider:`any`,base:`host`,instructions:{system:``,append:[],repoInstructions:`allow`,globalInstructions:`allow`},relay:{context:!0,skills:!0,plugins:!0,statusLine:!0,mcp:!0},skills:[],plugins:[],mcp:{mode:`host`},hooks:{mode:`host`},permissions:{filesystem:`host`},env:{},providerOptions:{}},relayToolsMode:`full`},async fetchManagedPolicies(){try{e({managedPolicies:await i(`GET`,`/spawn-policies/health`)})}catch{}},async fetchAgentProfiles(){try{e({agentProfiles:(await i(`GET`,`/agent-profiles`)).map(e=>e.value)})}catch{}},async fetchToolGroupCatalog(){e({toolGroupCatalogStatus:{loading:!0,loaded:t().toolGroupCatalogStatus.loaded,error:null}});try{e({toolGroupCatalog:await i(`GET`,`/agent-profiles/tool-groups`),toolGroupCatalogStatus:{loading:!1,loaded:!0,error:null}})}catch(t){e({toolGroupCatalog:[],toolGroupCatalogStatus:{loading:!1,loaded:!0,error:l(t)}})}},openPolicyCreate(){let n=t().orchestrators.filter(e=>e.status===`online`);if(!n.length){t().showError(`No Orchestrators`,`No orchestrators are currently online.`);return}t().fetchProviderCatalog(),e({policyModal:{open:!0,editing:``,name:``,description:``,orchestratorId:n[0].id,cwd:``,enabled:void 0,provider:N(n[0]),rig:``,model:F(N(n[0]),t().providerCatalog),effort:``,profile:`default-relay`,providerArgs:``,prompt:``,tags:``,capabilities:``,label:``,mode:`always-on`,permissionMode:`guarded`,restartOnUpdate:!0,scheduledDailyRestart:!1,keepaliveSeconds:`300`,backoffSchedule:`5,15,60,300`,backoffResetAfterSeconds:`600`,channelId:``},policyDirBrowser:{open:!1,loading:!1,path:``,parent:``,baseDir:``,entries:[],error:``}})},openPolicyEdit(n){t().fetchProviderCatalog(),e({policyModal:{open:!0,editing:n.name,name:n.name,enabled:n.enabled,description:n.description||``,orchestratorId:n.orchestratorId,cwd:n.cwd,provider:n.provider,rig:n.rig||``,model:n.model||F(n.provider,t().providerCatalog),effort:n.effort||``,profile:n.profile||`default-relay`,providerArgs:(n.providerArgs||[]).join(` `),prompt:n.prompt||``,tags:(n.tags||[]).join(`, `),capabilities:(n.capabilities||[]).join(`, `),label:n.label||``,mode:n.mode,permissionMode:n.permissionMode,restartOnUpdate:n.restartOnUpdate,scheduledDailyRestart:n.scheduledDailyRestart,keepaliveSeconds:String(n.onDemand?.keepaliveSeconds??300),backoffSchedule:(n.backoff?.schedule||[5,15,60,300]).join(`, `),backoffResetAfterSeconds:String(n.backoff?.resetAfterSeconds??600),channelId:n.binding?.channelId||``},policyDirBrowser:{open:!1,loading:!1,path:``,parent:``,baseDir:``,entries:[],error:``}})},async submitPolicy(){let n=t().policyModal;if(!n.name.trim()){t().showError(`Validation`,`Policy name is required.`);return}if(!n.orchestratorId){t().showError(`Validation`,`Select an orchestrator.`);return}if(!n.cwd.trim()){t().showError(`Validation`,`Working directory is required.`);return}let r=e=>e.split(/[,\s]+/).map(e=>e.trim()).filter(Boolean),a={name:n.name.trim(),...n.description.trim()?{description:n.description.trim()}:{},...n.enabled===void 0?{}:{enabled:n.enabled},orchestratorId:n.orchestratorId,cwd:n.cwd.trim(),provider:n.provider,...n.rig.trim()?{rig:n.rig.trim()}:{},...n.model?{model:n.model}:{},...n.effort?{effort:n.effort}:{},...n.profile?{profile:n.profile}:{},providerArgs:n.providerArgs.trim()?n.providerArgs.trim().split(/\s+/):[],...n.prompt.trim()?{prompt:n.prompt.trim()}:{},tags:r(n.tags),capabilities:r(n.capabilities),...n.label.trim()?{label:n.label.trim()}:{},mode:n.mode,permissionMode:n.permissionMode,restartOnUpdate:n.restartOnUpdate,scheduledDailyRestart:n.scheduledDailyRestart,...n.mode===`on-demand`?{onDemand:{keepaliveSeconds:Number(n.keepaliveSeconds)||300,idleDefinition:`no-activity`}}:{},backoff:{schedule:r(n.backoffSchedule).map(Number).filter(e=>e>0),resetAfterSeconds:Number(n.backoffResetAfterSeconds)||600},...n.channelId.trim()?{binding:{type:`channel`,channelId:n.channelId.trim()}}:{}};a.backoff.schedule.length||(a.backoff.schedule=[5,15,60,300]);try{await i(`PUT`,`/spawn-policy/`+encodeURIComponent(a.name),a),e({policyModal:{...n,open:!1}}),await t().fetchManagedPolicies()}catch(e){t().showError(`Save Failed`,e.message)}},deletePolicy(e){t().openConfirm(`Delete Policy`,`Delete managed agent policy "${e}"? This will stop any running agent.`,async()=>{try{await i(`DELETE`,`/spawn-policy/`+encodeURIComponent(e)),await t().fetchManagedPolicies()}catch(e){t().showError(`Delete Failed`,e.message)}})},async browsePolicyDirectory(n){let r=t().policyModal.orchestratorId;if(!r)return;let a=t().policyDirBrowser;e({policyDirBrowser:{...a,loading:!0,error:``}});try{let a=n?`?path=`+encodeURIComponent(n):``,o=await i(`GET`,`/orchestrators/`+encodeURIComponent(r)+`/directories`+a);e({policyDirBrowser:{open:!0,loading:!1,path:o.path||``,parent:o.parent||``,baseDir:o.baseDir||``,entries:o.entries||[],error:``},policyModal:{...t().policyModal,cwd:o.path||t().policyModal.cwd}})}catch(n){e({policyDirBrowser:{...t().policyDirBrowser,loading:!1,error:n.message}})}},selectPolicyDirectory(n){e({policyModal:{...t().policyModal,cwd:n||t().policyDirBrowser.path},policyDirBrowser:{...t().policyDirBrowser,open:!1}})},openProfileModal(n,r){t().fetchToolGroupCatalog();let i={name:``,description:``,provider:`any`,base:`host`,instructions:{system:``,append:[],repoInstructions:`allow`,globalInstructions:`allow`},relay:{context:!0,skills:!0,plugins:!0,statusLine:!0,mcp:!0},skills:[],plugins:[],mcp:{mode:`host`},hooks:{mode:`host`},permissions:{filesystem:`host`},env:{},providerOptions:{}},a;r&&n===`duplicate`?(a=JSON.parse(JSON.stringify(r)),a.name=r.name+`-copy`,delete a.builtIn):a=r&&(n===`edit`||n===`view`)?JSON.parse(JSON.stringify(r)):i;let o=(a.relay.tools?.groups?.length??0)>0?`custom`:`full`;e({profileModal:{open:!0,mode:n,profile:a,relayToolsMode:o}})},closeProfileModal(){e({profileModal:{...t().profileModal,open:!1}})},updateProfileModal(n){let r=t().profileModal.profile;e({profileModal:{...t().profileModal,profile:{...r,...n}}})},setRelayToolsMode(n){if(e({profileModal:{...t().profileModal,relayToolsMode:n}}),n===`full`){let{profile:n}=t().profileModal;e({profileModal:{...t().profileModal,profile:{...n,relay:{...n.relay,tools:void 0}}}})}},async saveProfile(){let{mode:n,profile:r}=t().profileModal;if(!r.name.trim()){t().showError(`Validation`,`Profile name is required.`);return}if(n!==`view`)try{await i(`PUT`,`/agent-profiles/`+encodeURIComponent(r.name.trim()),r),e({profileModal:{...t().profileModal,open:!1}}),await t().fetchAgentProfiles(),t().showNotification(`Profile "${r.name}" saved`)}catch(e){t().showError(`Save Failed`,e.message)}},deleteProfile(e){let n=typeof e==`string`?t().agentProfiles.find(t=>t.name===e):e,r=typeof e==`string`?e:e.name,a=n?.builtIn===!0;t().openConfirm(a?`Reset Profile`:`Delete Profile`,a?`Reset built-in profile "${r}" to its default?`:`Delete agent profile "${r}"?`,async()=>{try{await i(`DELETE`,`/agent-profiles/`+encodeURIComponent(r)),await t().fetchAgentProfiles(),t().showNotification(a?`Profile "${r}" reset to default`:`Profile "${r}" deleted`)}catch(e){t().showError(`Delete Failed`,e.message)}})}}),gn=(e,t)=>({operatorActivity:[],recordOperatorActivity(n){let r={id:Date.now(),kind:`operator`,title:n.title||`Activity`,body:n.body,meta:n.meta,icon:n.icon,view:n.view,peer:n.peer,messageId:n.messageId,pairId:n.pairId,taskId:n.taskId,agentId:n.agentId,ts:Date.now(),clientId:`op-`+Date.now(),createdAt:Date.now()};e({operatorActivity:[r,...t().operatorActivity.slice(0,79)]}),i(`POST`,`/activity`,{operatorId:S,clientId:r.clientId,kind:r.kind,title:r.title,body:r.body,meta:r.meta,icon:r.icon,view:r.view,peer:r.peer,messageId:r.messageId,pairId:r.pairId,taskId:r.taskId,agentId:r.agentId}).catch(()=>{})},async openActivityItem(e){if(e.view&&await t().switchView(e.view===`inbox`?`chat`:e.view),e.peer&&t().openInboxThread(e.peer),e.agentId){let n=t().agentsById[e.agentId];n&&t().openAgentDetail(n)}e.taskId&&t().openTaskDetailById(e.taskId)}});function _n(e){return ie(e.createdAt??e.ts)}function vn(e,t){let n=[`# Agent Relay Timeline`,``,`Exported: ${t}`,`Events: ${e.length}`,``];for(let t of e){let e=new Date(_n(t)).toISOString();n.push(`## ${t.title||t.kind||`Event`}`),n.push(`- When: ${e}`),t.kind&&n.push(`- Kind: ${t.kind}`),t.agentId&&n.push(`- Agent: ${t.agentId}`),t.peer&&n.push(`- Peer: ${t.peer}`),t.body&&n.push(``,t.body),n.push(``)}return n.join(`
|
|
8
|
-
`)}var yn=(e,t)=>({activityEvents:[],activityFilter:``,async fetchActivityEvents(){try{e({activityEvents:await i(`GET`,`/activity?limit=200`)})}catch{}},exportActivity(e){let n=t(),r=[...n.operatorActivity,...n.activityEvents].sort((e,t)=>_n(t)-_n(e)),i=new Date().toISOString(),a=`agent-relay-timeline-${i.slice(0,10)}.${e===`json`?`json`:`md`}`;e===`json`?w(a,JSON.stringify({title:`Agent Relay Timeline`,exportedAt:i,events:r},null,2),`application/json`):w(a,vn(r,i),`text/markdown`)},exportThread(e,t){let n=`agent-relay-thread-${te(e.peer)}.${t===`json`?`json`:`md`}`,r={title:`Thread: `+e.peer,importedHistory:e.importedHistory||[],messages:e.messages,exportedAt:new Date().toISOString()};w(n,JSON.stringify(r,null,2),t===`json`?`application/json`:`text/markdown`)},exportPair(e,t){let n=`agent-relay-pair-${te(e.id)}.${t===`json`?`json`:`md`}`,r={title:`Pair: `+e.id,pair:e,exportedAt:new Date().toISOString()};w(n,JSON.stringify(r,null,2),t===`json`?`application/json`:`text/markdown`)},async exportTask(n,r){let a=t().taskEventCache[n.id]||[];if(!a.length)try{a=await i(`GET`,`/tasks/`+n.id+`/events`),e({taskEventCache:{...t().taskEventCache,[n.id]:a}})}catch{}let o=`agent-relay-task-${n.id}.${r===`json`?`json`:`md`}`,s={title:`Task: `+(n.title||`T`+n.id),task:n,events:a,exportedAt:new Date().toISOString()};w(o,JSON.stringify(s,null,2),r===`json`?`application/json`:`text/markdown`)}}),bn=(e,t)=>({channels:[],connectors:[],integrations:[],automations:[],automationRuns:[],health:null,maintenanceJobs:[],analyticsPeriod:`24h`,analyticsData:null,async fetchChannels(){try{e({channels:await i(`GET`,`/channels`)})}catch{}},async fetchConnectors(){try{e({connectors:await i(`GET`,`/connectors`)})}catch{}},async fetchIntegrations(){try{e({integrations:await i(`GET`,`/integrations`)})}catch{}},async fetchAutomations(){try{e({automations:await i(`GET`,`/automations`)})}catch{}},async fetchAutomationRuns(t){try{let n=new URLSearchParams({limit:`100`});t&&n.set(`automationId`,t),e({automationRuns:await i(`GET`,`/automation-runs?`+n.toString())})}catch{}},async fetchHealth(){try{e({health:await i(`GET`,`/health`)})}catch{}},async fetchMaintenanceJobs(){try{e({maintenanceJobs:await i(`GET`,`/maintenance/jobs`)})}catch{}},async runMaintenanceJob(n){try{let r=await i(`POST`,`/maintenance/jobs/`+encodeURIComponent(n)+`/run`,{});return e({maintenanceJobs:r.jobs}),t().showNotification(r.run.status===`succeeded`?`Maintenance job completed`:`Maintenance job skipped`),r.run}catch(e){return t().showError(`Maintenance Job Failed`,e.message),await t().fetchMaintenanceJobs(),null}},async runHealthAction(n){if(n.preset&&e({agentPresetFilter:n.preset,showOffline:!0}),n.api&&n.path&&(await i(n.api,n.path),await t().refreshLiveData()),n.view&&await t().switchView(n.view),n.copy)try{await navigator.clipboard?.writeText(n.copy)}catch{}},async runConnectorAction(e,n){try{let r=await i(`POST`,`/connectors/`+encodeURIComponent(e)+`/actions`,{action:n});if(await t().fetchConnectors(),!r.ok)throw Error(r.stderr||`${n} failed`);return r}catch(e){throw t().showError(`Connector Action Failed`,e.message),e}},async fetchAnalytics(){try{e({analyticsData:await i(`GET`,`/stats/analytics?period=`+t().analyticsPeriod)})}catch{}},setAnalyticsPeriod(n){e({analyticsPeriod:n}),t().fetchAnalytics()}}),xn=(e,t)=>({workspaces:[],workspaceFocusId:null,workspaceGitState:{},workspaceMergePreview:{},workspaceDiff:{},workspaceOrphans:[],async openWorkspaceFocus(n){e({workspaceFocusId:n}),await t().switchView(`workspaces`)},async fetchWorkspaces(){try{e({workspaces:await i(`GET`,`/workspaces`)})}catch{}},async fetchWorkspaceGitState(t){try{let n=await i(`GET`,`/workspaces/`+encodeURIComponent(t)+`/git-state`);e(e=>({workspaceGitState:{...e.workspaceGitState,[t]:n}}))}catch(n){e(e=>({workspaceGitState:{...e.workspaceGitState,[t]:{available:!1,reason:n.message}}}))}},async fetchWorkspaceMergePreview(t){try{let n=await i(`GET`,`/workspaces/`+encodeURIComponent(t)+`/merge-preview`);e(e=>({workspaceMergePreview:{...e.workspaceMergePreview,[t]:n}}))}catch(n){e(e=>({workspaceMergePreview:{...e.workspaceMergePreview,[t]:{available:!1,reason:n.message}}}))}},async fetchWorkspaceDiff(t){try{let n=await i(`GET`,`/workspaces/`+encodeURIComponent(t)+`/diff`);e(e=>({workspaceDiff:{...e.workspaceDiff,[t]:n}}))}catch(n){e(e=>({workspaceDiff:{...e.workspaceDiff,[t]:{available:!1,reason:n.message}}}))}},async fetchWorkspaceOrphans(){try{e({workspaceOrphans:(await i(`GET`,`/workspaces/orphans`)).orphans??[]})}catch{}},async reclaimWorkspaceOrphan(e){t().openConfirm(`Reclaim Orphan Worktree`,`Remove the orphaned worktree "${e.branch||e.worktreePath}" from disk? It has no live agent.`,async()=>{try{await i(`POST`,`/workspaces/orphans/reclaim`,{worktreePath:e.worktreePath,repoRoot:e.repoRoot,branch:e.branch}),t().showNotification(`Orphan reclaim dispatched`),await Promise.all([t().fetchWorkspaceOrphans(),t().fetchActivityEvents()])}catch(e){t().showError(`Reclaim Failed`,e.message)}})},async workspaceAction(e,n){let r=n===`ready`?`Mark ready`:n===`request-review`?`Request review`:n===`merge-plan`?`Mark merge planned`:n===`merge`?`Merge`:n===`abandon`?`Abandon`:`Cleanup`,a=async()=>{try{await i(`POST`,`/workspaces/`+encodeURIComponent(e)+`/actions`,{action:n}),t().showNotification(n===`cleanup`?`Workspace cleanup requested`:n===`merge`?`Workspace merge dispatched`:`Workspace updated: ${r}`),await Promise.all([t().fetchWorkspaces(),t().fetchOrchestrators(),t().fetchActivityEvents()])}catch(e){t().showError(`Workspace Action Failed`,e.message)}};if(n===`cleanup`||n===`abandon`||n===`merge`){let r=t().workspaces.find(t=>t.id===e),i=r?.branch||r?.worktreePath||e;if(n===`merge`){let n=t().workspaceMergePreview[e],r=n&&n.available!==!1?` — ${n.strategy===`pr`?`opens a PR`:`rebases & fast-forwards into ${n.baseRef||`base`}, then deletes the branch`}.`:` — lands the work and deletes the branch.`;t().openConfirm(`Merge Workspace`,`Merge workspace "${i}"?${r}`,a);return}if(n===`cleanup`){await t().fetchWorkspaceGitState(e);let n=t().workspaceGitState[e],r=``;if(n&&n.available!==!1&&!n.missing){let e=n.ahead??0,t=n.dirtyCount??0;(e>0||t>0)&&(r=` ⚠ This destroys ${[e>0?`${e} unmerged commit(s)`:``,t>0?`${t} uncommitted change(s)`:``].filter(Boolean).join(` and `)}.`)}t().openConfirm(`Cleanup Workspace`,`Remove the worktree for "${i}" on the host?${r}`,a);return}t().openConfirm(`Abandon Workspace`,`Abandon workspace "${i}"?`,a);return}await a()},async purgeWorkspace(e){let n=t().workspaces.find(t=>t.id===e),r=n?.branch||n?.worktreePath||e;t().openConfirm(`Purge Workspace Record`,`Permanently remove the record for "${r}"? This only clears the dashboard row — it does not touch disk.`,async()=>{try{await i(`DELETE`,`/workspaces/`+encodeURIComponent(e)),t().showNotification(`Workspace record purged`),await Promise.all([t().fetchWorkspaces(),t().fetchActivityEvents()])}catch(e){t().showError(`Purge Failed`,e.message)}})}}),Sn=(e,t)=>({memories:[],memoryTotal:0,memoryBrokerInfo:null,memoryStats:null,memoryFilters:{search:``,type:``,scope:``,tags:``,visibility:``,minRelevance:`0`},selectedMemoryId:``,memoryLoading:!1,async refreshMemory(){await Promise.all([t().fetchMemoryBroker(),t().fetchMemoryStats(),t().fetchMemories()])},async fetchMemoryBroker(){try{e({memoryBrokerInfo:await i(`GET`,`/memories/broker`)})}catch(e){t().showError(`Memory Broker Failed`,e.message)}},async fetchMemoryStats(){try{e({memoryStats:await i(`GET`,`/memories/stats`)})}catch{}},async fetchMemories(){let n=t().memoryFilters,r={limit:100};if(n.type&&(r.type=n.type),n.scope.trim()&&(r.scope=n.scope.trim()),n.visibility&&(r.visibility=n.visibility),n.tags.trim()&&(r.tags=n.tags.split(`,`).map(e=>e.trim()).filter(Boolean)),n.minRelevance.trim()!==``){let e=Number(n.minRelevance);Number.isFinite(e)&&(r.minRelevance=Math.max(0,Math.min(1,e)))}e({memoryLoading:!0});try{let n=await i(`POST`,`/memories/search`,r),a=n.memories.some(e=>e.id===t().selectedMemoryId)?t().selectedMemoryId:n.memories[0]?.id||``;e({memories:n.memories,memoryTotal:n.total,selectedMemoryId:a})}catch(e){t().showError(`Memory Search Failed`,e.message)}finally{e({memoryLoading:!1})}},async saveMemory(n,r){try{e({selectedMemoryId:(r?await i(`PATCH`,`/memories/`+encodeURIComponent(r),n):await i(`POST`,`/memories`,n)).id}),await Promise.all([t().fetchMemories(),t().fetchMemoryStats()]),t().showNotification(r?`Memory updated`:`Memory created`)}catch(e){t().showError(`Memory Save Failed`,e.message)}},deleteMemory(n){t().openConfirm(`Delete Memory`,`Delete memory "${n}"?`,async()=>{try{await i(`DELETE`,`/memories/`+encodeURIComponent(n)),e({selectedMemoryId:``}),await Promise.all([t().fetchMemories(),t().fetchMemoryStats()]),t().showNotification(`Memory deleted`)}catch(e){t().showError(`Delete Failed`,e.message)}})},async injectMemory(e){try{let n=await i(`POST`,`/memories/inject`,e);return t().showNotification(`Memory inject command sent to ${e.agentId}`),n}catch(e){return t().showError(`Memory Inject Failed`,e.message),null}}}),Cn=(e,t)=>({projectFocusId:null,projectByCwd:{},async openProjectFocus(n){e({projectFocusId:n}),await t().switchView(`projects`)},consumeProjectFocus(){t().projectFocusId!==null&&e({projectFocusId:null})},async fetchProjectForCwd(n){if(!(!n||n in t().projectByCwd))try{let t=await i(`GET`,`/projects/resolve?cwd=`+encodeURIComponent(n));e(e=>({projectByCwd:{...e.projectByCwd,[n]:t.project??null}}))}catch{}}});function wn(){return $.persist.hasHydrated()?Promise.resolve():new Promise(e=>{let t=$.persist.onFinishHydration(()=>{t(),e()})})}var $=de()(me((...e)=>({...Kt({waitForHydration:wn})(...e),...qt(...e),...Jt(...e),...tn(...e),...sn(...e),...cn(...e),...dn(...e),...pn(...e),...mn(...e),...hn(...e),...Rt(...e),...gn(...e),...yn(...e),...zt(...e),...bn(...e),...xn(...e),...Sn(...e),...Cn(...e)}),{name:`agent-relay-dashboard`,partialize:e=>({theme:e.theme,view:e.view,showOffline:e.showOffline,showBuiltIns:e.showBuiltIns,showReasoning:e.showReasoning,autoRefresh:e.autoRefresh,voiceTtsEnabled:e.voiceTtsEnabled,voiceTtsLang:e.voiceTtsLang,voiceTtsMode:e.voiceTtsMode,voiceTtsKokoroVoice:e.voiceTtsKokoroVoice,voiceTtsBrowserVoice:e.voiceTtsBrowserVoice,voiceInputMode:e.voiceInputMode,agentSort:e.agentSort,agentSortDir:e.agentSortDir,agentPresetFilter:e.agentPresetFilter,agentStatusFilter:e.agentStatusFilter,agentTagFilter:e.agentTagFilter,agentHostFilter:e.agentHostFilter,pairStatusFilter:e.pairStatusFilter,inboxSort:e.inboxSort,inboxSortDir:e.inboxSortDir,inboxShowArchived:e.inboxShowArchived,chatAgentProviderFilter:e.chatAgentProviderFilter,chatAgentStatusFilter:e.chatAgentStatusFilter,chatAgentTagFilter:e.chatAgentTagFilter,chatAgentCapFilter:e.chatAgentCapFilter,chatAgentHostFilter:e.chatAgentHostFilter,chatAgentSort:e.chatAgentSort,chatAgentSortDir:e.chatAgentSortDir,chatAgentGroupBy:e.chatAgentGroupBy,chatAgentFiltersCollapsed:e.chatAgentFiltersCollapsed,chatCollapsedChildren:e.chatCollapsedChildren,feedObserveAll:e.feedObserveAll,coordinatorFollows:e.coordinatorFollows,coordinatorMutes:e.coordinatorMutes,planCollapsed:e.planCollapsed,sessionTasksCollapsed:e.sessionTasksCollapsed,activityFilter:e.activityFilter,analyticsPeriod:e.analyticsPeriod,memoryFilters:e.memoryFilters,authToken:e.authToken,inboxReadCursors:e.inboxReadCursors,inboxArchivedThreads:e.inboxArchivedThreads,inboxDrafts:e.inboxDrafts,chatStatusEvents:e.chatStatusEvents,operatorActivity:e.operatorActivity,notifications:e.notifications,notificationUnread:e.notificationUnread,notificationSettings:e.notificationSettings,spawnOrchId:e.spawnOrchId,spawnProvider:e.spawnProvider,spawnModel:e.spawnModel,spawnEffort:e.spawnEffort,spawnProfile:e.spawnProfile,spawnCwd:e.spawnCwd,spawnApproval:e.spawnApproval,spawnWorkspaceMode:e.spawnWorkspaceMode,spawnCwdHistory:e.spawnCwdHistory})}));$.subscribe(Vt);export{ke as _,it as a,k as b,P as c,Ue as d,A as f,Me as g,Ee as h,Z as i,F as l,Fe as m,ln as n,ht as o,Pe as p,X as r,ot as s,$ as t,N as u,Ae as v,Ne as y};
|
|
9
|
-
//# sourceMappingURL=store-
|
|
7
|
+
`+C.slice(C.length-w):C}`,T=r.filter(e=>typeof e.id==`number`&&e.id>0).map(e=>e.id);e({spawnOrchId:b.id,spawnProvider:c||N(b),spawnModel:u||F(c||N(b)),spawnEffort:p,spawnProfile:i.spawnProfile||`default-relay`,spawnCwd:g||b.baseDir||``,spawnLabel:te,spawnApproval:ee,spawnWorkspaceMode:y,spawnPrompt:`Continue from this previous session.`,spawnSystemPromptAppend:ie,spawnCount:1,pendingForkImport:{sourcePeerId:a.id,sourceAgentId:a.id,sourceThreadId:a.id,sourceAgentLabel:x,messageIds:T},orchestratorSpawnOpen:!0})},openOrchestratorInstall(){e({orchestratorInstallOpen:!0})},openOrchestratorSpawnFor(n){let r=t(),i=r.orchestrators.find(e=>e.id===n),a=N(i),o=F(a,r.providerCatalog),s=r.spawnProvider===a&&r.spawnModel===o?r.spawnEffort:``,c=r.spawnCwd&&v(r.spawnCwd,i?.baseDir)?r.spawnCwd:i?.baseDir||``;e({spawnOrchId:n,spawnProvider:a,spawnModel:o,spawnEffort:s,spawnProfile:r.spawnProfile||`default-relay`,spawnCwd:c,spawnLabel:``,spawnWorkspaceMode:`inherit`,spawnPrompt:``,spawnSystemPromptAppend:``,spawnCount:1,pendingForkImport:null,orchestratorSpawnOpen:!0})},selectSpawnHistory(n,r){let i=t(),a=i.orchestrators.find(e=>e.id===n&&e.status===`online`);if(!a){t().showError(`Unavailable`,`That orchestrator is no longer online.`);return}if(n===i.spawnOrchId){e({spawnCwd:r});return}let o=i.spawnProvider&&a.providers.includes(i.spawnProvider)?i.spawnProvider:N(a),s=i.spawnProvider===o&&i.spawnModel&&P(o,i.providerCatalog).some(e=>e.alias===i.spawnModel)?i.spawnModel:F(o,i.providerCatalog);e({spawnOrchId:n,spawnProvider:o,spawnModel:s,spawnEffort:i.spawnProvider===o&&i.spawnModel===s?i.spawnEffort:``,spawnCwd:r})},async submitOrchestratorSpawn(){let r=t();if(r.isSpawning)return;if(!r.spawnOrchId){t().showError(`Validation`,`Select an orchestrator.`);return}let i=r.orchestrators.find(e=>e.id===r.spawnOrchId);if(!i){t().showError(`Validation`,`Selected orchestrator is not available.`);return}let a=r.spawnCwd.trim();if(!a){t().showError(`Validation`,`Select a working directory.`);return}if(!v(a,i.baseDir)){t().showError(`Validation`,`Working directory must be under ${i.baseDir}.`);return}let o=r.pendingForkImport,s=o?1:Math.max(1,Math.min(10,Math.round(r.spawnCount)||1));e({isSpawning:!0});try{for(let e=0;e<s;e++){let t={provider:r.spawnProvider,orchestratorId:r.spawnOrchId,approvalMode:r.spawnApproval,workspaceMode:r.spawnWorkspaceMode||`inherit`};r.spawnModel&&(t.model=r.spawnModel),r.spawnEffort&&(t.effort=r.spawnEffort),r.spawnProfile&&(t.profile=r.spawnProfile),t.cwd=a,r.spawnLabel&&(t.label=s>1?`${r.spawnLabel} ${e+1}`:r.spawnLabel),r.spawnPrompt&&(t.prompt=r.spawnPrompt),r.spawnSystemPromptAppend&&(t.systemPromptAppend=r.spawnSystemPromptAppend);let i=(await n(`POST`,`/agents/spawn`,t)).command?.params?.spawnRequestId;o&&i&&o.messageIds.length>0&&await n(`POST`,`/chat/history-imports`,{targetSpawnRequestId:i,sourcePeerId:o.sourcePeerId,sourceAgentId:o.sourceAgentId,sourceThreadId:o.sourceThreadId,sourceAgentLabel:o.sourceAgentLabel,importedBy:S,messageIds:o.messageIds})}e({orchestratorSpawnOpen:!1,pendingForkImport:null,isSpawning:!1,spawnCwdHistory:[{orchId:r.spawnOrchId,cwd:a},...r.spawnCwdHistory.filter(e=>!(e.orchId===r.spawnOrchId&&e.cwd===a))].slice(0,5)}),await Promise.all([t().fetchAgents(),t().fetchOrchestrators(),t().fetchActivityEvents(),t().fetchChatHistoryImports()])}catch(n){e({isSpawning:!1}),t().showError(`Spawn Failed`,n.message)}},orchestratorAction(e,r,i,a){let o=r===`restart`?`Restart`:`Shutdown`,s=i?`agent "${i}"`:`all agents`;t().openConfirm(`${o} Agent`,`${o} ${s} on orchestrator "${e}"?`,async()=>{try{await n(`POST`,`/orchestrators/`+encodeURIComponent(e)+`/actions`,{action:r,agentId:i,...a?{surface:{component:a}}:{}}),await Promise.all([t().fetchOrchestrators(),t().fetchActivityEvents()])}catch(e){t().showError(`${o} Failed`,e.message)}})},upgradeOrchestrator(e,r){let i=r?` to v${r}`:` to match the relay`;t().openConfirm(`Upgrade Orchestrator`,`Upgrade "${e}"${i}? It will install the new version and restart itself.`,async()=>{try{await n(`POST`,`/orchestrators/`+encodeURIComponent(e)+`/actions`,{action:`upgrade`,...r?{targetVersion:r}:{}}),await Promise.all([t().fetchOrchestrators(),t().fetchActivityEvents()])}catch(e){t().showError(`Upgrade Failed`,e.message)}})},deleteOrchestrator(e){t().openConfirm(`Remove Orchestrator`,`Remove orchestrator "${e}"?`,async()=>{try{await n(`DELETE`,`/orchestrators/`+encodeURIComponent(e)),await Promise.all([t().fetchOrchestrators(),t().fetchActivityEvents()])}catch(e){t().showError(`Delete Failed`,e.message)}})},async browseSpawnDirectory(r){let i=t().spawnOrchId;if(!i)return;let a=t().spawnDirBrowser;e({spawnDirBrowser:{...a,loading:!0,error:``}});try{let a=r?`?path=`+encodeURIComponent(r):``,o=await n(`GET`,`/orchestrators/`+encodeURIComponent(i)+`/directories`+a);e({spawnDirBrowser:{open:!0,loading:!1,path:o.path||``,parent:o.parent||``,baseDir:o.baseDir||``,entries:o.entries||[],error:``},spawnCwd:o.path||t().spawnCwd})}catch(n){e({spawnDirBrowser:{...t().spawnDirBrowser,loading:!1,error:n.message}})}},selectSpawnDirectory(n){e({spawnCwd:n||t().spawnDirBrowser.path,spawnDirBrowser:{...t().spawnDirBrowser,open:!1}})}}),hn=(e,t)=>({managedPolicies:[],policyModal:{open:!1,editing:``,name:``,description:``,orchestratorId:``,cwd:``,enabled:void 0,provider:N(void 0),rig:``,model:F(N(void 0)),effort:``,profile:`default-relay`,providerArgs:``,prompt:``,tags:``,capabilities:``,label:``,mode:`always-on`,permissionMode:`guarded`,restartOnUpdate:!0,scheduledDailyRestart:!1,keepaliveSeconds:`300`,backoffSchedule:`5,15,60,300`,backoffResetAfterSeconds:`600`,channelId:``},policyDirBrowser:{open:!1,loading:!1,path:``,parent:``,baseDir:``,entries:[],error:``},agentProfiles:[],toolGroupCatalog:[],toolGroupCatalogStatus:{loading:!1,loaded:!1,error:null},profileModal:{open:!1,mode:`create`,profile:{name:``,description:``,provider:`any`,base:`host`,instructions:{system:``,append:[],repoInstructions:`allow`,globalInstructions:`allow`},relay:{context:!0,skills:!0,plugins:!0,statusLine:!0,mcp:!0},skills:[],plugins:[],mcp:{mode:`host`},hooks:{mode:`host`},permissions:{filesystem:`host`},env:{},providerOptions:{}},relayToolsMode:`full`},async fetchManagedPolicies(){try{e({managedPolicies:await n(`GET`,`/spawn-policies/health`)})}catch{}},async fetchAgentProfiles(){try{e({agentProfiles:(await n(`GET`,`/agent-profiles`)).map(e=>e.value)})}catch{}},async fetchToolGroupCatalog(){e({toolGroupCatalogStatus:{loading:!0,loaded:t().toolGroupCatalogStatus.loaded,error:null}});try{e({toolGroupCatalog:await n(`GET`,`/agent-profiles/tool-groups`),toolGroupCatalogStatus:{loading:!1,loaded:!0,error:null}})}catch(t){e({toolGroupCatalog:[],toolGroupCatalogStatus:{loading:!1,loaded:!0,error:l(t)}})}},openPolicyCreate(){let n=t().orchestrators.filter(e=>e.status===`online`);if(!n.length){t().showError(`No Orchestrators`,`No orchestrators are currently online.`);return}t().fetchProviderCatalog(),e({policyModal:{open:!0,editing:``,name:``,description:``,orchestratorId:n[0].id,cwd:``,enabled:void 0,provider:N(n[0]),rig:``,model:F(N(n[0]),t().providerCatalog),effort:``,profile:`default-relay`,providerArgs:``,prompt:``,tags:``,capabilities:``,label:``,mode:`always-on`,permissionMode:`guarded`,restartOnUpdate:!0,scheduledDailyRestart:!1,keepaliveSeconds:`300`,backoffSchedule:`5,15,60,300`,backoffResetAfterSeconds:`600`,channelId:``},policyDirBrowser:{open:!1,loading:!1,path:``,parent:``,baseDir:``,entries:[],error:``}})},openPolicyEdit(n){t().fetchProviderCatalog(),e({policyModal:{open:!0,editing:n.name,name:n.name,enabled:n.enabled,description:n.description||``,orchestratorId:n.orchestratorId,cwd:n.cwd,provider:n.provider,rig:n.rig||``,model:n.model||F(n.provider,t().providerCatalog),effort:n.effort||``,profile:n.profile||`default-relay`,providerArgs:(n.providerArgs||[]).join(` `),prompt:n.prompt||``,tags:(n.tags||[]).join(`, `),capabilities:(n.capabilities||[]).join(`, `),label:n.label||``,mode:n.mode,permissionMode:n.permissionMode,restartOnUpdate:n.restartOnUpdate,scheduledDailyRestart:n.scheduledDailyRestart,keepaliveSeconds:String(n.onDemand?.keepaliveSeconds??300),backoffSchedule:(n.backoff?.schedule||[5,15,60,300]).join(`, `),backoffResetAfterSeconds:String(n.backoff?.resetAfterSeconds??600),channelId:n.binding?.channelId||``},policyDirBrowser:{open:!1,loading:!1,path:``,parent:``,baseDir:``,entries:[],error:``}})},async submitPolicy(){let r=t().policyModal;if(!r.name.trim()){t().showError(`Validation`,`Policy name is required.`);return}if(!r.orchestratorId){t().showError(`Validation`,`Select an orchestrator.`);return}if(!r.cwd.trim()){t().showError(`Validation`,`Working directory is required.`);return}let i=e=>e.split(/[,\s]+/).map(e=>e.trim()).filter(Boolean),a={name:r.name.trim(),...r.description.trim()?{description:r.description.trim()}:{},...r.enabled===void 0?{}:{enabled:r.enabled},orchestratorId:r.orchestratorId,cwd:r.cwd.trim(),provider:r.provider,...r.rig.trim()?{rig:r.rig.trim()}:{},...r.model?{model:r.model}:{},...r.effort?{effort:r.effort}:{},...r.profile?{profile:r.profile}:{},providerArgs:r.providerArgs.trim()?r.providerArgs.trim().split(/\s+/):[],...r.prompt.trim()?{prompt:r.prompt.trim()}:{},tags:i(r.tags),capabilities:i(r.capabilities),...r.label.trim()?{label:r.label.trim()}:{},mode:r.mode,permissionMode:r.permissionMode,restartOnUpdate:r.restartOnUpdate,scheduledDailyRestart:r.scheduledDailyRestart,...r.mode===`on-demand`?{onDemand:{keepaliveSeconds:Number(r.keepaliveSeconds)||300,idleDefinition:`no-activity`}}:{},backoff:{schedule:i(r.backoffSchedule).map(Number).filter(e=>e>0),resetAfterSeconds:Number(r.backoffResetAfterSeconds)||600},...r.channelId.trim()?{binding:{type:`channel`,channelId:r.channelId.trim()}}:{}};a.backoff.schedule.length||(a.backoff.schedule=[5,15,60,300]);try{await n(`PUT`,`/spawn-policy/`+encodeURIComponent(a.name),a),e({policyModal:{...r,open:!1}}),await t().fetchManagedPolicies()}catch(e){t().showError(`Save Failed`,e.message)}},deletePolicy(e){t().openConfirm(`Delete Policy`,`Delete managed agent policy "${e}"? This will stop any running agent.`,async()=>{try{await n(`DELETE`,`/spawn-policy/`+encodeURIComponent(e)),await t().fetchManagedPolicies()}catch(e){t().showError(`Delete Failed`,e.message)}})},async browsePolicyDirectory(r){let i=t().policyModal.orchestratorId;if(!i)return;let a=t().policyDirBrowser;e({policyDirBrowser:{...a,loading:!0,error:``}});try{let a=r?`?path=`+encodeURIComponent(r):``,o=await n(`GET`,`/orchestrators/`+encodeURIComponent(i)+`/directories`+a);e({policyDirBrowser:{open:!0,loading:!1,path:o.path||``,parent:o.parent||``,baseDir:o.baseDir||``,entries:o.entries||[],error:``},policyModal:{...t().policyModal,cwd:o.path||t().policyModal.cwd}})}catch(n){e({policyDirBrowser:{...t().policyDirBrowser,loading:!1,error:n.message}})}},selectPolicyDirectory(n){e({policyModal:{...t().policyModal,cwd:n||t().policyDirBrowser.path},policyDirBrowser:{...t().policyDirBrowser,open:!1}})},openProfileModal(n,r){t().fetchToolGroupCatalog();let i={name:``,description:``,provider:`any`,base:`host`,instructions:{system:``,append:[],repoInstructions:`allow`,globalInstructions:`allow`},relay:{context:!0,skills:!0,plugins:!0,statusLine:!0,mcp:!0},skills:[],plugins:[],mcp:{mode:`host`},hooks:{mode:`host`},permissions:{filesystem:`host`},env:{},providerOptions:{}},a;r&&n===`duplicate`?(a=JSON.parse(JSON.stringify(r)),a.name=r.name+`-copy`,delete a.builtIn):a=r&&(n===`edit`||n===`view`)?JSON.parse(JSON.stringify(r)):i;let o=(a.relay.tools?.groups?.length??0)>0?`custom`:`full`;e({profileModal:{open:!0,mode:n,profile:a,relayToolsMode:o}})},closeProfileModal(){e({profileModal:{...t().profileModal,open:!1}})},updateProfileModal(n){let r=t().profileModal.profile;e({profileModal:{...t().profileModal,profile:{...r,...n}}})},setRelayToolsMode(n){if(e({profileModal:{...t().profileModal,relayToolsMode:n}}),n===`full`){let{profile:n}=t().profileModal;e({profileModal:{...t().profileModal,profile:{...n,relay:{...n.relay,tools:void 0}}}})}},async saveProfile(){let{mode:r,profile:i}=t().profileModal;if(!i.name.trim()){t().showError(`Validation`,`Profile name is required.`);return}if(r!==`view`)try{await n(`PUT`,`/agent-profiles/`+encodeURIComponent(i.name.trim()),i),e({profileModal:{...t().profileModal,open:!1}}),await t().fetchAgentProfiles(),t().showNotification(`Profile "${i.name}" saved`)}catch(e){t().showError(`Save Failed`,e.message)}},deleteProfile(e){let r=typeof e==`string`?t().agentProfiles.find(t=>t.name===e):e,i=typeof e==`string`?e:e.name,a=r?.builtIn===!0;t().openConfirm(a?`Reset Profile`:`Delete Profile`,a?`Reset built-in profile "${i}" to its default?`:`Delete agent profile "${i}"?`,async()=>{try{await n(`DELETE`,`/agent-profiles/`+encodeURIComponent(i)),await t().fetchAgentProfiles(),t().showNotification(a?`Profile "${i}" reset to default`:`Profile "${i}" deleted`)}catch(e){t().showError(`Delete Failed`,e.message)}})}}),gn=(e,t)=>({operatorActivity:[],recordOperatorActivity(r){let i={id:Date.now(),kind:`operator`,title:r.title||`Activity`,body:r.body,meta:r.meta,icon:r.icon,view:r.view,peer:r.peer,messageId:r.messageId,pairId:r.pairId,taskId:r.taskId,agentId:r.agentId,ts:Date.now(),clientId:`op-`+Date.now(),createdAt:Date.now()};e({operatorActivity:[i,...t().operatorActivity.slice(0,79)]}),n(`POST`,`/activity`,{operatorId:S,clientId:i.clientId,kind:i.kind,title:i.title,body:i.body,meta:i.meta,icon:i.icon,view:i.view,peer:i.peer,messageId:i.messageId,pairId:i.pairId,taskId:i.taskId,agentId:i.agentId}).catch(()=>{})},async openActivityItem(e){if(e.view&&await t().switchView(e.view===`inbox`?`chat`:e.view),e.peer&&t().openInboxThread(e.peer),e.agentId){let n=t().agentsById[e.agentId];n&&t().openAgentDetail(n)}e.taskId&&t().openTaskDetailById(e.taskId)}});function _n(e){return ie(e.createdAt??e.ts)}function vn(e,t){let n=[`# Agent Relay Timeline`,``,`Exported: ${t}`,`Events: ${e.length}`,``];for(let t of e){let e=new Date(_n(t)).toISOString();n.push(`## ${t.title||t.kind||`Event`}`),n.push(`- When: ${e}`),t.kind&&n.push(`- Kind: ${t.kind}`),t.agentId&&n.push(`- Agent: ${t.agentId}`),t.peer&&n.push(`- Peer: ${t.peer}`),t.body&&n.push(``,t.body),n.push(``)}return n.join(`
|
|
8
|
+
`)}var yn=(e,t)=>({activityEvents:[],activityFilter:``,async fetchActivityEvents(){try{e({activityEvents:await n(`GET`,`/activity?limit=200`)})}catch{}},exportActivity(e){let n=t(),r=[...n.operatorActivity,...n.activityEvents].sort((e,t)=>_n(t)-_n(e)),i=new Date().toISOString(),a=`agent-relay-timeline-${i.slice(0,10)}.${e===`json`?`json`:`md`}`;e===`json`?w(a,JSON.stringify({title:`Agent Relay Timeline`,exportedAt:i,events:r},null,2),`application/json`):w(a,vn(r,i),`text/markdown`)},exportThread(e,t){let n=`agent-relay-thread-${te(e.peer)}.${t===`json`?`json`:`md`}`,r={title:`Thread: `+e.peer,importedHistory:e.importedHistory||[],messages:e.messages,exportedAt:new Date().toISOString()};w(n,JSON.stringify(r,null,2),t===`json`?`application/json`:`text/markdown`)},exportPair(e,t){let n=`agent-relay-pair-${te(e.id)}.${t===`json`?`json`:`md`}`,r={title:`Pair: `+e.id,pair:e,exportedAt:new Date().toISOString()};w(n,JSON.stringify(r,null,2),t===`json`?`application/json`:`text/markdown`)},async exportTask(r,i){let a=t().taskEventCache[r.id]||[];if(!a.length)try{a=await n(`GET`,`/tasks/`+r.id+`/events`),e({taskEventCache:{...t().taskEventCache,[r.id]:a}})}catch{}let o=`agent-relay-task-${r.id}.${i===`json`?`json`:`md`}`,s={title:`Task: `+(r.title||`T`+r.id),task:r,events:a,exportedAt:new Date().toISOString()};w(o,JSON.stringify(s,null,2),i===`json`?`application/json`:`text/markdown`)}}),bn=(e,t)=>({channels:[],connectors:[],integrations:[],automations:[],automationRuns:[],health:null,maintenanceJobs:[],analyticsPeriod:`24h`,analyticsData:null,async fetchChannels(){try{e({channels:await n(`GET`,`/channels`)})}catch{}},async fetchConnectors(){try{e({connectors:await n(`GET`,`/connectors`)})}catch{}},async fetchIntegrations(){try{e({integrations:await n(`GET`,`/integrations`)})}catch{}},async fetchAutomations(){try{e({automations:await n(`GET`,`/automations`)})}catch{}},async fetchAutomationRuns(t){try{let r=new URLSearchParams({limit:`100`});t&&r.set(`automationId`,t),e({automationRuns:await n(`GET`,`/automation-runs?`+r.toString())})}catch{}},async fetchHealth(){try{e({health:await n(`GET`,`/health`)})}catch{}},async fetchMaintenanceJobs(){try{e({maintenanceJobs:await n(`GET`,`/maintenance/jobs`)})}catch{}},async runMaintenanceJob(r){try{let i=await n(`POST`,`/maintenance/jobs/`+encodeURIComponent(r)+`/run`,{});return e({maintenanceJobs:i.jobs}),t().showNotification(i.run.status===`succeeded`?`Maintenance job completed`:`Maintenance job skipped`),i.run}catch(e){return t().showError(`Maintenance Job Failed`,e.message),await t().fetchMaintenanceJobs(),null}},async runHealthAction(r){if(r.preset&&e({agentPresetFilter:r.preset,showOffline:!0}),r.api&&r.path&&(await n(r.api,r.path),await t().refreshLiveData()),r.view&&await t().switchView(r.view),r.copy)try{await navigator.clipboard?.writeText(r.copy)}catch{}},async runConnectorAction(e,r){try{let i=await n(`POST`,`/connectors/`+encodeURIComponent(e)+`/actions`,{action:r});if(await t().fetchConnectors(),!i.ok)throw Error(i.stderr||`${r} failed`);return i}catch(e){throw t().showError(`Connector Action Failed`,e.message),e}},async fetchAnalytics(){try{e({analyticsData:await n(`GET`,`/stats/analytics?period=`+t().analyticsPeriod)})}catch{}},setAnalyticsPeriod(n){e({analyticsPeriod:n}),t().fetchAnalytics()}}),xn=(e,t)=>({workspaces:[],workspaceFocusId:null,workspaceGitState:{},workspaceMergePreview:{},workspaceDiff:{},workspaceOrphans:[],async openWorkspaceFocus(n){e({workspaceFocusId:n}),await t().switchView(`workspaces`)},async fetchWorkspaces(){try{e({workspaces:await n(`GET`,`/workspaces`)})}catch{}},async fetchWorkspaceGitState(t){try{let r=await n(`GET`,`/workspaces/`+encodeURIComponent(t)+`/git-state`);e(e=>({workspaceGitState:{...e.workspaceGitState,[t]:r}}))}catch(n){e(e=>({workspaceGitState:{...e.workspaceGitState,[t]:{available:!1,reason:n.message}}}))}},async fetchWorkspaceMergePreview(t){try{let r=await n(`GET`,`/workspaces/`+encodeURIComponent(t)+`/merge-preview`);e(e=>({workspaceMergePreview:{...e.workspaceMergePreview,[t]:r}}))}catch(n){e(e=>({workspaceMergePreview:{...e.workspaceMergePreview,[t]:{available:!1,reason:n.message}}}))}},async fetchWorkspaceDiff(t){try{let r=await n(`GET`,`/workspaces/`+encodeURIComponent(t)+`/diff`);e(e=>({workspaceDiff:{...e.workspaceDiff,[t]:r}}))}catch(n){e(e=>({workspaceDiff:{...e.workspaceDiff,[t]:{available:!1,reason:n.message}}}))}},async fetchWorkspaceOrphans(){try{e({workspaceOrphans:(await n(`GET`,`/workspaces/orphans`)).orphans??[]})}catch{}},async reclaimWorkspaceOrphan(e){t().openConfirm(`Reclaim Orphan Worktree`,`Remove the orphaned worktree "${e.branch||e.worktreePath}" from disk? It has no live agent.`,async()=>{try{await n(`POST`,`/workspaces/orphans/reclaim`,{worktreePath:e.worktreePath,repoRoot:e.repoRoot,branch:e.branch}),t().showNotification(`Orphan reclaim dispatched`),await Promise.all([t().fetchWorkspaceOrphans(),t().fetchActivityEvents()])}catch(e){t().showError(`Reclaim Failed`,e.message)}})},async workspaceAction(e,r){let i=r===`ready`?`Mark ready`:r===`request-review`?`Request review`:r===`merge-plan`?`Mark merge planned`:r===`merge`?`Merge`:r===`abandon`?`Abandon`:`Cleanup`,a=async()=>{try{await n(`POST`,`/workspaces/`+encodeURIComponent(e)+`/actions`,{action:r}),t().showNotification(r===`cleanup`?`Workspace cleanup requested`:r===`merge`?`Workspace merge dispatched`:`Workspace updated: ${i}`),await Promise.all([t().fetchWorkspaces(),t().fetchOrchestrators(),t().fetchActivityEvents()])}catch(e){t().showError(`Workspace Action Failed`,e.message)}};if(r===`cleanup`||r===`abandon`||r===`merge`){let n=t().workspaces.find(t=>t.id===e),i=n?.branch||n?.worktreePath||e;if(r===`merge`){let n=t().workspaceMergePreview[e],r=n&&n.available!==!1?` — ${n.strategy===`pr`?`opens a PR`:`rebases & fast-forwards into ${n.baseRef||`base`}, then deletes the branch`}.`:` — lands the work and deletes the branch.`;t().openConfirm(`Merge Workspace`,`Merge workspace "${i}"?${r}`,a);return}if(r===`cleanup`){await t().fetchWorkspaceGitState(e);let n=t().workspaceGitState[e],r=``;if(n&&n.available!==!1&&!n.missing){let e=n.ahead??0,t=n.dirtyCount??0;(e>0||t>0)&&(r=` ⚠ This destroys ${[e>0?`${e} unmerged commit(s)`:``,t>0?`${t} uncommitted change(s)`:``].filter(Boolean).join(` and `)}.`)}t().openConfirm(`Cleanup Workspace`,`Remove the worktree for "${i}" on the host?${r}`,a);return}t().openConfirm(`Abandon Workspace`,`Abandon workspace "${i}"?`,a);return}await a()},async purgeWorkspace(e){let r=t().workspaces.find(t=>t.id===e),i=r?.branch||r?.worktreePath||e;t().openConfirm(`Purge Workspace Record`,`Permanently remove the record for "${i}"? This only clears the dashboard row — it does not touch disk.`,async()=>{try{await n(`DELETE`,`/workspaces/`+encodeURIComponent(e)),t().showNotification(`Workspace record purged`),await Promise.all([t().fetchWorkspaces(),t().fetchActivityEvents()])}catch(e){t().showError(`Purge Failed`,e.message)}})}}),Sn=(e,t)=>({memories:[],memoryTotal:0,memoryBrokerInfo:null,memoryStats:null,memoryFilters:{search:``,type:``,scope:``,tags:``,visibility:``,minRelevance:`0`},selectedMemoryId:``,memoryLoading:!1,async refreshMemory(){await Promise.all([t().fetchMemoryBroker(),t().fetchMemoryStats(),t().fetchMemories()])},async fetchMemoryBroker(){try{e({memoryBrokerInfo:await n(`GET`,`/memories/broker`)})}catch(e){t().showError(`Memory Broker Failed`,e.message)}},async fetchMemoryStats(){try{e({memoryStats:await n(`GET`,`/memories/stats`)})}catch{}},async fetchMemories(){let r=t().memoryFilters,i={limit:100};if(r.type&&(i.type=r.type),r.scope.trim()&&(i.scope=r.scope.trim()),r.visibility&&(i.visibility=r.visibility),r.tags.trim()&&(i.tags=r.tags.split(`,`).map(e=>e.trim()).filter(Boolean)),r.minRelevance.trim()!==``){let e=Number(r.minRelevance);Number.isFinite(e)&&(i.minRelevance=Math.max(0,Math.min(1,e)))}e({memoryLoading:!0});try{let r=await n(`POST`,`/memories/search`,i),a=r.memories.some(e=>e.id===t().selectedMemoryId)?t().selectedMemoryId:r.memories[0]?.id||``;e({memories:r.memories,memoryTotal:r.total,selectedMemoryId:a})}catch(e){t().showError(`Memory Search Failed`,e.message)}finally{e({memoryLoading:!1})}},async saveMemory(r,i){try{e({selectedMemoryId:(i?await n(`PATCH`,`/memories/`+encodeURIComponent(i),r):await n(`POST`,`/memories`,r)).id}),await Promise.all([t().fetchMemories(),t().fetchMemoryStats()]),t().showNotification(i?`Memory updated`:`Memory created`)}catch(e){t().showError(`Memory Save Failed`,e.message)}},deleteMemory(r){t().openConfirm(`Delete Memory`,`Delete memory "${r}"?`,async()=>{try{await n(`DELETE`,`/memories/`+encodeURIComponent(r)),e({selectedMemoryId:``}),await Promise.all([t().fetchMemories(),t().fetchMemoryStats()]),t().showNotification(`Memory deleted`)}catch(e){t().showError(`Delete Failed`,e.message)}})},async injectMemory(e){try{let r=await n(`POST`,`/memories/inject`,e);return t().showNotification(`Memory inject command sent to ${e.agentId}`),r}catch(e){return t().showError(`Memory Inject Failed`,e.message),null}}}),Cn=(e,t)=>({projectFocusId:null,projectByCwd:{},async openProjectFocus(n){e({projectFocusId:n}),await t().switchView(`projects`)},consumeProjectFocus(){t().projectFocusId!==null&&e({projectFocusId:null})},async fetchProjectForCwd(r){if(!(!r||r in t().projectByCwd))try{let t=await n(`GET`,`/projects/resolve?cwd=`+encodeURIComponent(r));e(e=>({projectByCwd:{...e.projectByCwd,[r]:t.project??null}}))}catch{}}});function wn(){return $.persist.hasHydrated()?Promise.resolve():new Promise(e=>{let t=$.persist.onFinishHydration(()=>{t(),e()})})}var $=de()(me((...e)=>({...Kt({waitForHydration:wn})(...e),...qt(...e),...Jt(...e),...tn(...e),...sn(...e),...cn(...e),...dn(...e),...pn(...e),...mn(...e),...hn(...e),...Rt(...e),...gn(...e),...yn(...e),...zt(...e),...bn(...e),...xn(...e),...Sn(...e),...Cn(...e)}),{name:`agent-relay-dashboard`,partialize:e=>({theme:e.theme,view:e.view,showOffline:e.showOffline,showBuiltIns:e.showBuiltIns,showReasoning:e.showReasoning,autoRefresh:e.autoRefresh,voiceTtsEnabled:e.voiceTtsEnabled,voiceTtsLang:e.voiceTtsLang,voiceTtsMode:e.voiceTtsMode,voiceTtsKokoroVoice:e.voiceTtsKokoroVoice,voiceTtsBrowserVoice:e.voiceTtsBrowserVoice,voiceInputMode:e.voiceInputMode,agentSort:e.agentSort,agentSortDir:e.agentSortDir,agentPresetFilter:e.agentPresetFilter,agentStatusFilter:e.agentStatusFilter,agentTagFilter:e.agentTagFilter,agentHostFilter:e.agentHostFilter,pairStatusFilter:e.pairStatusFilter,inboxSort:e.inboxSort,inboxSortDir:e.inboxSortDir,inboxShowArchived:e.inboxShowArchived,chatAgentProviderFilter:e.chatAgentProviderFilter,chatAgentStatusFilter:e.chatAgentStatusFilter,chatAgentTagFilter:e.chatAgentTagFilter,chatAgentCapFilter:e.chatAgentCapFilter,chatAgentHostFilter:e.chatAgentHostFilter,chatAgentSort:e.chatAgentSort,chatAgentSortDir:e.chatAgentSortDir,chatAgentGroupBy:e.chatAgentGroupBy,chatAgentFiltersCollapsed:e.chatAgentFiltersCollapsed,chatCollapsedChildren:e.chatCollapsedChildren,feedObserveAll:e.feedObserveAll,coordinatorFollows:e.coordinatorFollows,coordinatorMutes:e.coordinatorMutes,planCollapsed:e.planCollapsed,sessionTasksCollapsed:e.sessionTasksCollapsed,activityFilter:e.activityFilter,analyticsPeriod:e.analyticsPeriod,memoryFilters:e.memoryFilters,authToken:e.authToken,inboxReadCursors:e.inboxReadCursors,inboxArchivedThreads:e.inboxArchivedThreads,inboxDrafts:e.inboxDrafts,chatStatusEvents:e.chatStatusEvents,operatorActivity:e.operatorActivity,notifications:e.notifications,notificationUnread:e.notificationUnread,notificationSettings:e.notificationSettings,spawnOrchId:e.spawnOrchId,spawnProvider:e.spawnProvider,spawnModel:e.spawnModel,spawnEffort:e.spawnEffort,spawnProfile:e.spawnProfile,spawnCwd:e.spawnCwd,spawnApproval:e.spawnApproval,spawnWorkspaceMode:e.spawnWorkspaceMode,spawnCwdHistory:e.spawnCwdHistory})}));$.subscribe(Vt);export{ke as _,it as a,k as b,P as c,Ue as d,A as f,Me as g,Ee as h,Z as i,F as l,Fe as m,ln as n,ht as o,Pe as p,X as r,ot as s,$ as t,N as u,Ae as v,Ne as y};
|
|
9
|
+
//# sourceMappingURL=store-DKTb9O0v.js.map
|