agent-relay-server 0.119.3 → 0.119.6
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 +4 -3
- package/public/assets/{MessageBubble-DbaaemH3.js → MessageBubble-Azda2GIf.js} +2 -2
- package/public/assets/{MessageBubble-DbaaemH3.js.map → MessageBubble-Azda2GIf.js.map} +1 -1
- package/public/assets/{PlanGraphPanel-C_hnK9yH.js → PlanGraphPanel-B9TN_KQr.js} +2 -2
- package/public/assets/{PlanGraphPanel-C_hnK9yH.js.map → PlanGraphPanel-B9TN_KQr.js.map} +1 -1
- package/public/assets/{activity-Cbw43afW.js → activity-B0hz4XPy.js} +2 -2
- package/public/assets/{activity-Cbw43afW.js.map → activity-B0hz4XPy.js.map} +1 -1
- package/public/assets/{agent-profiles-BZZpTAZn.js → agent-profiles-BF0oSOTq.js} +2 -2
- package/public/assets/{agent-profiles-BZZpTAZn.js.map → agent-profiles-BF0oSOTq.js.map} +1 -1
- package/public/assets/{agent-type-icon-2YWBWhYC.js → agent-type-icon-BEz393ra.js} +2 -2
- package/public/assets/{agent-type-icon-2YWBWhYC.js.map → agent-type-icon-BEz393ra.js.map} +1 -1
- package/public/assets/{agents-nvHlibqo.js → agents-CW4--j3Q.js} +2 -2
- package/public/assets/{agents-nvHlibqo.js.map → agents-CW4--j3Q.js.map} +1 -1
- package/public/assets/{analytics-B9bbDReP.js → analytics-CmSHiDAI.js} +2 -2
- package/public/assets/{analytics-B9bbDReP.js.map → analytics-CmSHiDAI.js.map} +1 -1
- package/public/assets/{automation-CjtLgS3h.js → automation-S6_bQ2t-.js} +2 -2
- package/public/assets/{automation-CjtLgS3h.js.map → automation-S6_bQ2t-.js.map} +1 -1
- package/public/assets/{branch-state-badge-DRFIs9q0.js → branch-state-badge-Db6uU7yT.js} +2 -2
- package/public/assets/{branch-state-badge-DRFIs9q0.js.map → branch-state-badge-Db6uU7yT.js.map} +1 -1
- package/public/assets/{channels-CL00bLDh.js → channels-trEI29j0.js} +2 -2
- package/public/assets/{channels-CL00bLDh.js.map → channels-trEI29j0.js.map} +1 -1
- package/public/assets/{chat-DKf_9fgB.js → chat-hoFhhvgy.js} +2 -2
- package/public/assets/{chat-DKf_9fgB.js.map → chat-hoFhhvgy.js.map} +1 -1
- package/public/assets/{connectors-QYtScfNz.js → connectors-DNV138gK.js} +2 -2
- package/public/assets/{connectors-QYtScfNz.js.map → connectors-DNV138gK.js.map} +1 -1
- package/public/assets/{display-CP3jEw1H.js → display-exQDWum3.js} +2 -2
- package/public/assets/{display-CP3jEw1H.js.map → display-exQDWum3.js.map} +1 -1
- package/public/assets/{formatted-body-BnSiFCc3.js → formatted-body-BHm145gP.js} +3 -3
- package/public/assets/{formatted-body-BnSiFCc3.js.map → formatted-body-BHm145gP.js.map} +1 -1
- package/public/assets/{formatted-body-impl-Cnchy-Iv.js → formatted-body-impl-CvE31j9F.js} +2 -2
- package/public/assets/{formatted-body-impl-Cnchy-Iv.js.map → formatted-body-impl-CvE31j9F.js.map} +1 -1
- package/public/assets/{index-kelZvgcV.js → index-TamtghSr.js} +6 -6
- package/public/assets/{index-kelZvgcV.js.map → index-TamtghSr.js.map} +1 -1
- package/public/assets/{insights-Ccz5zFIQ.js → insights-Ci9ftVfl.js} +2 -2
- package/public/assets/{insights-Ccz5zFIQ.js.map → insights-Ci9ftVfl.js.map} +1 -1
- package/public/assets/{integrations-BICEazmP.js → integrations-COnkRfWW.js} +2 -2
- package/public/assets/{integrations-BICEazmP.js.map → integrations-COnkRfWW.js.map} +1 -1
- package/public/assets/{maintenance-DpYnmrVo.js → maintenance-bVhNbr33.js} +2 -2
- package/public/assets/{maintenance-DpYnmrVo.js.map → maintenance-bVhNbr33.js.map} +1 -1
- package/public/assets/{managed-agents-qQtr531p.js → managed-agents-D5HO4dhI.js} +2 -2
- package/public/assets/{managed-agents-qQtr531p.js.map → managed-agents-D5HO4dhI.js.map} +1 -1
- package/public/assets/{markdown-preview-impl-DhkWrgsW.js → markdown-preview-impl-DO-p83dz.js} +2 -2
- package/public/assets/{markdown-preview-impl-DhkWrgsW.js.map → markdown-preview-impl-DO-p83dz.js.map} +1 -1
- package/public/assets/{memory-AsWF2gfa.js → memory-D72o8umQ.js} +2 -2
- package/public/assets/{memory-AsWF2gfa.js.map → memory-D72o8umQ.js.map} +1 -1
- package/public/assets/{messages-D0vT-ovM.js → messages-5L_Bc_9w.js} +2 -2
- package/public/assets/{messages-D0vT-ovM.js.map → messages-5L_Bc_9w.js.map} +1 -1
- package/public/assets/{orchestrators-Oo8U_GW2.js → orchestrators-CnfgkQpl.js} +2 -2
- package/public/assets/{orchestrators-Oo8U_GW2.js.map → orchestrators-CnfgkQpl.js.map} +1 -1
- package/public/assets/{overview-UTAK7pAB.js → overview-Bu39NIyR.js} +2 -2
- package/public/assets/{overview-UTAK7pAB.js.map → overview-Bu39NIyR.js.map} +1 -1
- package/public/assets/{pairs-TZYezwEi.js → pairs-WuamP5W5.js} +2 -2
- package/public/assets/{pairs-TZYezwEi.js.map → pairs-WuamP5W5.js.map} +1 -1
- package/public/assets/{projects-ClgQ10Al.js → projects-Dd8gYzcn.js} +2 -2
- package/public/assets/{projects-ClgQ10Al.js.map → projects-Dd8gYzcn.js.map} +1 -1
- package/public/assets/{prompt-settings-Tia685AV.js → prompt-settings-BCrQreU6.js} +2 -2
- package/public/assets/{prompt-settings-Tia685AV.js.map → prompt-settings-BCrQreU6.js.map} +1 -1
- package/public/assets/{registry-CAXZWvzr.js → registry-kHKn0xwg.js} +2 -2
- package/public/assets/{registry-CAXZWvzr.js.map → registry-kHKn0xwg.js.map} +1 -1
- package/public/assets/{security-BDAMCUzN.js → security-Dk5t3r_K.js} +2 -2
- package/public/assets/{security-BDAMCUzN.js.map → security-Dk5t3r_K.js.map} +1 -1
- package/public/assets/{select-ytVYIxZP.js → select-BdsZQfU2.js} +2 -2
- package/public/assets/{select-ytVYIxZP.js.map → select-BdsZQfU2.js.map} +1 -1
- package/public/assets/{settings-CnalH4Zd.js → settings-EpjzQHnZ.js} +2 -2
- package/public/assets/{settings-CnalH4Zd.js.map → settings-EpjzQHnZ.js.map} +1 -1
- package/public/assets/{store-BDCUnpt5.js → store-OLe8gFh0.js} +2 -2
- package/public/assets/{store-BDCUnpt5.js.map → store-OLe8gFh0.js.map} +1 -1
- package/public/assets/{tasks-CHGO51En.js → tasks-CedMQHbg.js} +2 -2
- package/public/assets/{tasks-CHGO51En.js.map → tasks-CedMQHbg.js.map} +1 -1
- package/public/assets/{teams-DDL-I-pP.js → teams-BlHBo5Qt.js} +2 -2
- package/public/assets/{teams-DDL-I-pP.js.map → teams-BlHBo5Qt.js.map} +1 -1
- package/public/assets/{terminal-viewer-impl-CnXpHy1R.js → terminal-viewer-impl-gGqYpsjq.js} +2 -2
- package/public/assets/{terminal-viewer-impl-CnXpHy1R.js.map → terminal-viewer-impl-gGqYpsjq.js.map} +1 -1
- package/public/assets/types-uVOXgvMT.js +2 -0
- package/public/assets/types-uVOXgvMT.js.map +1 -0
- package/public/assets/{user-avatar-Cw7jcQY-.js → user-avatar-DuwCFrER.js} +2 -2
- package/public/assets/{user-avatar-Cw7jcQY-.js.map → user-avatar-DuwCFrER.js.map} +1 -1
- package/public/assets/{work-queue-BwX92bVS.js → work-queue-D7opMqtU.js} +2 -2
- package/public/assets/{work-queue-BwX92bVS.js.map → work-queue-D7opMqtU.js.map} +1 -1
- package/public/assets/{workspaces-DSsvsOFa.js → workspaces-M3xEMNXu.js} +2 -2
- package/public/assets/{workspaces-DSsvsOFa.js.map → workspaces-M3xEMNXu.js.map} +1 -1
- package/public/index.html +6 -6
- package/runner/plugins/claude/.claude-plugin/plugin.json +1 -1
- package/runner/plugins/claude/monitors/relay-monitor.provisioned.mjs +2 -2
- package/runner/src/adapter.ts +1 -0
- package/runner/src/config.ts +6 -0
- package/src/provider-config-store.ts +2 -0
- package/src/settings/registry.ts +2 -0
- package/public/assets/types-8ThujPP2.js +0 -2
- package/public/assets/types-8ThujPP2.js.map +0 -1
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{r as e}from"./chunk-CilyBKbf.js";import{ar as t,dr as n,fr as r,hr as i,lr as a,mr as o,or as s,rr as c}from"./lucide-react-Dc3ZwCBi.js";import{_ as l,d as u,f as d,p as f,u as p}from"./types-
|
|
1
|
+
import{r as e}from"./chunk-CilyBKbf.js";import{ar as t,dr as n,fr as r,hr as i,lr as a,mr as o,or as s,rr as c}from"./lucide-react-Dc3ZwCBi.js";import{_ as l,d as u,f as d,p as f,u as p}from"./types-uVOXgvMT.js";import{$ as m,A as h,E as g,N as _,R as v,S as y,T as b,U as ee,at as x,d as te,et as S,it as C,k as ne,nt as w,p as T,q as re,rt as E,tt as D,y as ie}from"./display-exQDWum3.js";var O=e(i(),1),ae=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},oe=(e=>e?ae(e):ae),se=e=>e;function ce(e,t=se){let n=O.useSyncExternalStore(e.subscribe,O.useCallback(()=>t(e.getState()),[e,t]),O.useCallback(()=>t(e.getInitialState()),[e,t]));return O.useDebugValue(n),n}var le=e=>{let t=oe(e),n=e=>ce(t,e);return Object.assign(n,t),n},ue=(e=>e?le(e):le);function de(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 fe=e=>t=>{try{let n=e(t);return n instanceof Promise?n:{then(e){return fe(e)(n)},catch(e){return this}}}catch(e){return{then(e){return this},catch(t){return fe(t)(e)}}}},pe=(e,t)=>(n,r,i)=>{let a={storage:de(()=>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 fe(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 me(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=ve(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 he(e){return/\|/.test(e)&&e.trim().length>0}function ge(e){return/^\s*\|?\s*:?-{2,}:?\s*(\|\s*:?-{2,}:?\s*)+\|?\s*$/.test(e)}function _e(e){return e.trim().replace(/^\||\|$/g,``).split(`|`).map(e=>e.trim()).filter(e=>e.length>0)}function ve(e){let t=e.split(`
|
|
4
4
|
`),n=[],r=0;for(;r<t.length;){if(he(t[r])&&r+1<t.length&&ge(t[r+1])){let e=_e(t[r]),i=r+2,a=0;for(;i<t.length&&he(t[i])&&!ge(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(`
|
|
@@ -6,4 +6,4 @@ import{r as e}from"./chunk-CilyBKbf.js";import{ar as t,dr as n,fr as r,hr as i,l
|
|
|
6
6
|
`),T=14e3,re=`You are continuing work from a previous agent session (${S}). Below is the conversation history. Treat it as context for your work, not as your own actions.\n\n${w.length>T?`...
|
|
7
7
|
`+w.slice(w.length-T):w}`,E=r.filter(e=>typeof e.id==`number`&&e.id>0).map(e=>e.id);e({spawnOrchId:x.id,spawnProvider:c||L(x),spawnModel:f||z(c||L(x)),spawnEffort:p,spawnProfile:i.spawnProfile||`default-relay`,spawnCwd:g||x.baseDir||``,spawnLabel:ee,spawnApproval:b,spawnWorkspaceMode:y,spawnPrompt:`Continue from this previous session.`,spawnSystemPromptAppend:re,spawnCount:1,pendingForkImport:{sourcePeerId:a.id,sourceAgentId:a.id,sourceThreadId:a.id,sourceAgentLabel:S,messageIds:E},orchestratorSpawnOpen:!0})},openOrchestratorInstall(){e({orchestratorInstallOpen:!0})},openOrchestratorSpawnFor(n){let r=t(),i=r.orchestrators.find(e=>e.id===n),a=L(i),o=z(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:L(a),s=i.spawnProvider===o&&i.spawnModel&&R(o,i.providerCatalog).some(e=>e.alias===i.spawnModel)?i.spawnModel:z(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 i=n.spawnCwd.trim();if(!i){t().showError(`Validation`,`Select a working directory.`);return}if(!v(i,r.baseDir)){t().showError(`Validation`,`Working directory must be under ${r.baseDir}.`);return}let a=n.pendingForkImport,o=a?1:Math.max(1,Math.min(10,Math.round(n.spawnCount)||1));e({isSpawning:!0});try{for(let e=0;e<o;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=i,n.spawnLabel&&(t.label=o>1?`${n.spawnLabel} ${e+1}`:n.spawnLabel),n.spawnPrompt&&(t.prompt=n.spawnPrompt),n.spawnSystemPromptAppend&&(t.systemPromptAppend=n.spawnSystemPromptAppend);let r=(await c(`POST`,`/agents/spawn`,t)).command?.params?.spawnRequestId;a&&r&&a.messageIds.length>0&&await c(`POST`,`/chat/history-imports`,{targetSpawnRequestId:r,sourcePeerId:a.sourcePeerId,sourceAgentId:a.sourceAgentId,sourceThreadId:a.sourceThreadId,sourceAgentLabel:a.sourceAgentLabel,importedBy:C,messageIds:a.messageIds})}e({orchestratorSpawnOpen:!1,pendingForkImport:null,isSpawning:!1,spawnCwdHistory:[{orchId:n.spawnOrchId,cwd:i},...n.spawnCwdHistory.filter(e=>!(e.orchId===n.spawnOrchId&&e.cwd===i))].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,i){let a=n===`restart`?`Restart`:`Shutdown`,o=r?`agent "${r}"`:`all agents`;t().openConfirm(`${a} Agent`,`${a} ${o} on orchestrator "${e}"?`,async()=>{try{await c(`POST`,`/orchestrators/`+encodeURIComponent(e)+`/actions`,{action:n,agentId:r,...i?{surface:{component:i}}:{}}),await Promise.all([t().fetchOrchestrators(),t().fetchActivityEvents()])}catch(e){t().showError(`${a} 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 c(`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 c(`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 i=t().spawnDirBrowser;e({spawnDirBrowser:{...i,loading:!0,error:``}});try{let i=n?`?path=`+encodeURIComponent(n):``,a=await c(`GET`,`/orchestrators/`+encodeURIComponent(r)+`/directories`+i);e({spawnDirBrowser:{open:!0,loading:!1,path:a.path||``,parent:a.parent||``,baseDir:a.baseDir||``,entries:a.entries||[],error:``},spawnCwd:a.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}})}}),$t=(e,t)=>({managedPolicies:[],policyModal:{open:!1,editing:``,name:``,description:``,orchestratorId:``,cwd:``,enabled:void 0,provider:L(void 0),rig:``,model:z(L(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:[],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:{}}},async fetchManagedPolicies(){try{e({managedPolicies:await c(`GET`,`/spawn-policies/health`)})}catch{}},async fetchAgentProfiles(){try{e({agentProfiles:(await c(`GET`,`/agent-profiles`)).map(e=>e.value)})}catch{}},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:L(n[0]),rig:``,model:z(L(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||z(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),i={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()}}:{}};i.backoff.schedule.length||(i.backoff.schedule=[5,15,60,300]);try{await c(`PUT`,`/spawn-policy/`+encodeURIComponent(i.name),i),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 c(`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 i=t().policyDirBrowser;e({policyDirBrowser:{...i,loading:!0,error:``}});try{let i=n?`?path=`+encodeURIComponent(n):``,a=await c(`GET`,`/orchestrators/`+encodeURIComponent(r)+`/directories`+i);e({policyDirBrowser:{open:!0,loading:!1,path:a.path||``,parent:a.parent||``,baseDir:a.baseDir||``,entries:a.entries||[],error:``},policyModal:{...t().policyModal,cwd:a.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(t,n){let r={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:{}},i;n&&t===`duplicate`?(i=JSON.parse(JSON.stringify(n)),i.name=n.name+`-copy`,delete i.builtIn):i=n&&(t===`edit`||t===`view`)?JSON.parse(JSON.stringify(n)):r,e({profileModal:{open:!0,mode:t,profile:i}})},closeProfileModal(){e({profileModal:{...t().profileModal,open:!1}})},updateProfileModal(n){let r=t().profileModal.profile;e({profileModal:{...t().profileModal,profile:{...r,...n}}})},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 c(`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,i=n?.builtIn===!0;t().openConfirm(i?`Reset Profile`:`Delete Profile`,i?`Reset built-in profile "${r}" to its default?`:`Delete agent profile "${r}"?`,async()=>{try{await c(`DELETE`,`/agent-profiles/`+encodeURIComponent(r)),await t().fetchAgentProfiles(),t().showNotification(i?`Profile "${r}" reset to default`:`Profile "${r}" deleted`)}catch(e){t().showError(`Delete Failed`,e.message)}})}}),en=(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)]}),c(`POST`,`/activity`,{operatorId:C,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 tn(e){return re(e.createdAt??e.ts)}function nn(e,t){let n=[`# Agent Relay Timeline`,``,`Exported: ${t}`,`Events: ${e.length}`,``];for(let t of e){let e=new Date(tn(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
8
|
`)}var rn=(e,t)=>({activityEvents:[],activityFilter:``,async fetchActivityEvents(){try{e({activityEvents:await c(`GET`,`/activity?limit=200`)})}catch{}},exportActivity(e){let n=t(),r=[...n.operatorActivity,...n.activityEvents].sort((e,t)=>tn(t)-tn(e)),i=new Date().toISOString(),a=`agent-relay-timeline-${i.slice(0,10)}.${e===`json`?`json`:`md`}`;e===`json`?T(a,JSON.stringify({title:`Agent Relay Timeline`,exportedAt:i,events:r},null,2),`application/json`):T(a,nn(r,i),`text/markdown`)},exportThread(e,t){let n=`agent-relay-thread-${ee(e.peer)}.${t===`json`?`json`:`md`}`,r={title:`Thread: `+e.peer,importedHistory:e.importedHistory||[],messages:e.messages,exportedAt:new Date().toISOString()};T(n,JSON.stringify(r,null,2),t===`json`?`application/json`:`text/markdown`)},exportPair(e,t){let n=`agent-relay-pair-${ee(e.id)}.${t===`json`?`json`:`md`}`,r={title:`Pair: `+e.id,pair:e,exportedAt:new Date().toISOString()};T(n,JSON.stringify(r,null,2),t===`json`?`application/json`:`text/markdown`)},async exportTask(n,r){let i=t().taskEventCache[n.id]||[];if(!i.length)try{i=await c(`GET`,`/tasks/`+n.id+`/events`),e({taskEventCache:{...t().taskEventCache,[n.id]:i}})}catch{}let a=`agent-relay-task-${n.id}.${r===`json`?`json`:`md`}`,o={title:`Task: `+(n.title||`T`+n.id),task:n,events:i,exportedAt:new Date().toISOString()};T(a,JSON.stringify(o,null,2),r===`json`?`application/json`:`text/markdown`)}}),an=(e,t)=>({channels:[],connectors:[],integrations:[],automations:[],automationRuns:[],health:null,maintenanceJobs:[],analyticsPeriod:`24h`,analyticsData:null,async fetchChannels(){try{e({channels:await c(`GET`,`/channels`)})}catch{}},async fetchConnectors(){try{e({connectors:await c(`GET`,`/connectors`)})}catch{}},async fetchIntegrations(){try{e({integrations:await c(`GET`,`/integrations`)})}catch{}},async fetchAutomations(){try{e({automations:await c(`GET`,`/automations`)})}catch{}},async fetchAutomationRuns(t){try{let n=new URLSearchParams({limit:`100`});t&&n.set(`automationId`,t),e({automationRuns:await c(`GET`,`/automation-runs?`+n.toString())})}catch{}},async fetchHealth(){try{e({health:await c(`GET`,`/health`)})}catch{}},async fetchMaintenanceJobs(){try{e({maintenanceJobs:await c(`GET`,`/maintenance/jobs`)})}catch{}},async runMaintenanceJob(n){try{let r=await c(`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 c(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 c(`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 c(`GET`,`/stats/analytics?period=`+t().analyticsPeriod)})}catch{}},setAnalyticsPeriod(n){e({analyticsPeriod:n}),t().fetchAnalytics()}}),on=(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 c(`GET`,`/workspaces`)})}catch{}},async fetchWorkspaceGitState(t){try{let n=await c(`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 c(`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 c(`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 c(`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 c(`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`,i=async()=>{try{await c(`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),a=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 "${a}"?${r}`,i);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 "${a}" on the host?${r}`,i);return}t().openConfirm(`Abandon Workspace`,`Abandon workspace "${a}"?`,i);return}await i()},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 c(`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 c(`GET`,`/memories/broker`)})}catch(e){t().showError(`Memory Broker Failed`,e.message)}},async fetchMemoryStats(){try{e({memoryStats:await c(`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 c(`POST`,`/memories/search`,r),i=n.memories.some(e=>e.id===t().selectedMemoryId)?t().selectedMemoryId:n.memories[0]?.id||``;e({memories:n.memories,memoryTotal:n.total,selectedMemoryId:i})}catch(e){t().showError(`Memory Search Failed`,e.message)}finally{e({memoryLoading:!1})}},async saveMemory(n,r){try{e({selectedMemoryId:(r?await c(`PATCH`,`/memories/`+encodeURIComponent(r),n):await c(`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 c(`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 c(`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 c(`GET`,`/projects/resolve?cwd=`+encodeURIComponent(n));e(e=>({projectByCwd:{...e.projectByCwd,[n]:t.project??null}}))}catch{}}});function ln(){return $.persist.hasHydrated()?Promise.resolve():new Promise(e=>{let t=$.persist.onFinishHydration(()=>{t(),e()})})}var $=ue()(pe((...e)=>({...At({waitForHydration:ln})(...e),...jt(...e),...Mt(...e),...Bt(...e),...Gt(...e),...Kt(...e),...Yt(...e),...Zt(...e),...Qt(...e),...$t(...e),...Et(...e),...en(...e),...rn(...e),...Dt(...e),...an(...e),...on(...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(kt);export{De as _,Ze as a,z as c,N as d,je as f,Ee as g,ke as h,Z as i,L as l,we as m,qt as n,Qe as o,Me as p,X as r,R as s,$ as t,ze as u,Ae as v,M as y};
|
|
9
|
-
//# sourceMappingURL=store-
|
|
9
|
+
//# sourceMappingURL=store-OLe8gFh0.js.map
|