@arbor-education/agent-view-frontend 0.6.0 → 0.7.1
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/dist/index.cjs +6 -6
- package/dist/index.d.ts +22 -4
- package/dist/index.js +2174 -1760
- package/dist/style.css +1 -1
- package/package.json +1 -1
package/dist/index.cjs
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const s=require("react/jsx-runtime"),r=require("react"),z=require("classnames"),d=require("@arbor-education/design-system.components"),Ne=require("@arbor-education/ask-arbor-chat-panel"),y={"generating-a-response":"generating-a-response",hitl:"hitl",paused:"paused",complete:"complete",failed:"failed"},$={"generating-a-response":"generating-a-response",hitl:"hitl",complete:"complete",failed:"failed"},U={briefing:"briefing",running:"running",paused:"paused",complete:"complete"},Q={agent:"agent",user:"user",system:"system"},ue={document_html:"document_html",mis_record:"mis_record",workflow:"workflow",file:"file",user_file:"user_file",link:"link"},is={user_file:"user_file"},mt={paused:"paused",cancelled:"cancelled",archived:"archived"},_t={in_progress:"in_progress",requires_attention:"requires_attention",available:"available"},X={[$.complete]:{label:"Complete",icon:"circle-check",color:"var(--color-semantic-success-600)"},[$.failed]:{label:"Failed",icon:"circle-x",color:"var(--color-semantic-destructive-600)"},[$.hitl]:{label:"Requires attention",icon:"triangle-alert",color:"var(--color-semantic-warning-600)"},[$["generating-a-response"]]:{label:"Generating a response",icon:"sparkles",color:"var(--color-brand-600)"}},Qe={[y["generating-a-response"]]:{status:y["generating-a-response"],title:"Active",dotColour:"green",statusIcon:{name:X["generating-a-response"].icon,color:X["generating-a-response"].color}},[y.hitl]:{status:y.hitl,title:"Requires attention",dotColour:"orange",statusIcon:{name:X.hitl.icon,color:X.hitl.color}},[y.paused]:{status:y.paused,title:"Paused",dotColour:"green",statusIcon:{name:X["generating-a-response"].icon,color:X["generating-a-response"].color}},[y.complete]:{status:y.complete,title:"Complete",dotColour:"green",dotModifier:"grey-dark",statusIcon:{name:X.complete.icon,color:X.complete.color}},[y.failed]:{status:y.failed,title:"Failed",dotColour:"salmon",statusIcon:{name:X.failed.icon,color:X.failed.color}}},Ys=[y["generating-a-response"],y.hitl],Xs=[y.complete,y.failed],Zs="m4",Qs="1",os="msg-opening",Ze="Unable to load agent tasks. Please try again.",en="Unable to load context.",tn="Unable to load the resources for this agent",sn="Unable to load this document. Please try again.",ls="Unable to load the timeline for this agent",nn="Unable to pause the agent. Please try again.",an="Unable to resume the agent. Please try again.",rn="The agent was resumed but could not be woken. Send a message to continue.",qt="You have been resumed after being paused. Reassess your current progress and continue your work from where you left off.",on="Unable to rename the agent. Please try again.",ln="Something went wrong. Please try again.",cs="Unable to load agents. Please try again.",ye="Loading tasks…",Kt="Loading agents…",cn="Task",dn={[U.briefing]:"Briefing",[U.running]:"Working",[U.paused]:"Paused",[U.complete]:"Complete"},un=[y["generating-a-response"],y.hitl,y.complete,y.failed],gn={[y["generating-a-response"]]:"Agents currently working on tasks for you.",[y.hitl]:"Agents that need your input before they can continue.",[y.paused]:"Agents that are paused until you resume them.",[y.complete]:"Agents that have finished their work.",[y.failed]:"Agents that failed or were stopped."},hn=()=>s.jsxs("svg",{className:"agent-view__empty-illustration",viewBox:"0 0 360 240",xmlns:"http://www.w3.org/2000/svg",role:"img","aria-label":"Preview of the agents board layout",children:[s.jsx("rect",{x:"0",y:"0",width:"360",height:"240",rx:"12",fill:"var(--color-grey-100)"}),s.jsx("rect",{x:"16",y:"16",width:"100",height:"208",rx:"8",fill:"var(--card-default-color-background)",stroke:"var(--card-default-color-border)"}),s.jsx("rect",{x:"130",y:"16",width:"100",height:"208",rx:"8",fill:"var(--card-default-color-background)",stroke:"var(--card-default-color-border)"}),s.jsx("rect",{x:"244",y:"16",width:"100",height:"100",rx:"8",fill:"var(--card-default-color-background)",stroke:"var(--card-default-color-border)"}),s.jsx("rect",{x:"244",y:"124",width:"100",height:"100",rx:"8",fill:"var(--card-default-color-background)",stroke:"var(--card-default-color-border)"}),s.jsx("rect",{x:"28",y:"52",width:"76",height:"36",rx:"6",fill:"var(--color-grey-050)"}),s.jsx("rect",{x:"28",y:"96",width:"76",height:"36",rx:"6",fill:"var(--color-grey-050)"}),s.jsx("rect",{x:"142",y:"52",width:"76",height:"36",rx:"6",fill:"var(--color-semantic-warning-050)"}),s.jsx("circle",{cx:"40",cy:"70",r:"4",fill:"var(--color-brand-600)"}),s.jsx("circle",{cx:"40",cy:"114",r:"4",fill:"var(--color-brand-600)"}),s.jsx("circle",{cx:"154",cy:"70",r:"4",fill:"var(--color-semantic-warning-600)"}),s.jsx("circle",{cx:"256",cy:"52",r:"4",fill:"var(--color-grey-400)"}),s.jsx("circle",{cx:"256",cy:"160",r:"4",fill:"var(--color-semantic-destructive-500)"})]}),pn=({status:e})=>{const t=Qe[e];return t.statusIcon?s.jsx(d.Icon,{name:t.statusIcon.name,size:16,color:t.statusIcon.color,screenReaderText:t.title}):s.jsx(d.Dot,{colour:t.dotColour,label:t.title})},mn=()=>s.jsxs("section",{className:"agent-view__empty","aria-label":"About the agents board",children:[s.jsxs("div",{className:"agent-view__empty-content",children:[s.jsx(d.Heading,{level:4,children:"Your agents board"}),s.jsx("p",{className:"agent-view__empty-lead",children:"When you start an agent, it appears here so you can track progress at a glance. Agents move between columns as their status changes."}),s.jsx("ul",{className:"agent-view__empty-columns",children:un.map(e=>{const t=Qe[e];return s.jsxs("li",{className:"agent-view__empty-column",children:[s.jsx("span",{className:"agent-view__empty-column-indicator",children:s.jsx(pn,{status:e})}),s.jsxs("span",{className:"agent-view__empty-column-text",children:[s.jsx("span",{className:"agent-view__empty-column-title",children:t.title}),s.jsx("span",{className:"agent-view__empty-column-description",children:gn[e]})]})]},e)})}),s.jsxs("p",{className:"agent-view__empty-hint",children:["Use ",s.jsx("strong",{children:"Start an agent"})," above to begin."]})]}),s.jsx("div",{className:"agent-view__empty-visual",children:s.jsx(hn,{})})]}),_n=()=>({needsInput:[],complete:[],failed:[],tasks:[]}),fn=(e,t)=>({...e,...t.length>0?{children:t}:{}}),ds=e=>{const t=[],n=[],a=[],i=[];for(const l of e){const o=l.children?ds(l.children):_n();if(t.push(...o.needsInput),n.push(...o.complete),a.push(...o.failed),l.status===$.hitl){t.push({...l,children:void 0});continue}if(l.status===$.complete){n.push({...l,children:void 0});continue}if(l.status===$.failed){a.push({...l,children:void 0});continue}i.push(fn(l,o.tasks))}return{needsInput:t,complete:n,failed:a,tasks:i}},Jt=e=>e===$.hitl?0:e===$.complete?1:e===$.failed?2:3,vn=e=>e.map((t,n)=>({item:t,index:n})).sort((t,n)=>{const a=Jt(t.item.status)-Jt(n.item.status);return a!==0?a:t.index-n.index}).map(({item:t})=>t),ft=2,wn=e=>{if(!e)return{canScrollUp:!1,canScrollDown:!1};const t=e.scrollHeight-e.clientHeight;return t<=ft?{canScrollUp:!1,canScrollDown:!1}:{canScrollUp:e.scrollTop>ft,canScrollDown:e.scrollTop<t-ft}},xn=(e,t)=>{if(!e||!t)return null;const n=e.getBoundingClientRect(),a=t.getBoundingClientRect();return{top:a.top-n.top,left:a.left-n.left,width:a.width,height:a.height}},et=({children:e,className:t,contentClassName:n,scrollSelector:a,style:i,"aria-label":l})=>{const o=r.useRef(null),h=r.useRef(null),[u,v]=r.useState(!1),[g,k]=r.useState(!1),[x,O]=r.useState(null),p=()=>{var P;return a?((P=o.current)==null?void 0:P.querySelector(a))??null:h.current},A=()=>{const P=p(),w=wn(P);if(v(m=>m===w.canScrollUp?m:w.canScrollUp),k(m=>m===w.canScrollDown?m:w.canScrollDown),a){const m=xn(o.current,P);O(C=>(C==null?void 0:C.top)===(m==null?void 0:m.top)&&(C==null?void 0:C.left)===(m==null?void 0:m.left)&&(C==null?void 0:C.width)===(m==null?void 0:m.width)&&(C==null?void 0:C.height)===(m==null?void 0:m.height)?C:m)}else O(m=>m===null?m:null)};r.useLayoutEffect(()=>{A()}),r.useEffect(()=>{const P=o.current;if(!P)return;let w=null,m=null;const C=()=>{w==null||w.removeEventListener("scroll",A),m==null||m.disconnect(),m=null,w=null},L=E=>{if(E===w){A();return}if(C(),w=E,!w){A();return}w.addEventListener("scroll",A,{passive:!0}),m=new ResizeObserver(()=>A()),m.observe(w),w.firstElementChild instanceof HTMLElement&&m.observe(w.firstElementChild),A()};L(p());const T=new MutationObserver(()=>{L(p())});return T.observe(P,{childList:!0,subtree:!0,characterData:!0}),window.addEventListener("resize",A),()=>{window.removeEventListener("resize",A),T.disconnect(),C()}},[a]);const j=P=>{const w=p();if(!w)return;const m=Math.max(w.clientHeight*.75,120);w.scrollBy({top:P==="up"?-m:m,behavior:"smooth"})},N=s.jsxs(s.Fragment,{children:[u&&s.jsxs(s.Fragment,{children:[s.jsx("div",{className:"scrollable-region__fade scrollable-region__fade--top","aria-hidden":"true"}),s.jsx("button",{type:"button",className:"scrollable-region__edge scrollable-region__edge--top","aria-label":"Scroll up",onClick:()=>j("up"),children:s.jsx(d.Icon,{name:"chevron-up",size:16,color:"currentColor"})})]}),g&&s.jsxs(s.Fragment,{children:[s.jsx("div",{className:"scrollable-region__fade scrollable-region__fade--bottom","aria-hidden":"true"}),s.jsx("button",{type:"button",className:"scrollable-region__edge scrollable-region__edge--bottom","aria-label":"Scroll down",onClick:()=>j("down"),children:s.jsx(d.Icon,{name:"chevron-down",size:16,color:"currentColor"})})]})]});return s.jsx("div",{ref:o,className:z("scrollable-region",t),style:i,"aria-label":l,children:a?s.jsxs(s.Fragment,{children:[e,x&&(u||g)&&s.jsx("div",{className:"scrollable-region__overlay",style:{top:x.top,left:x.left,width:x.width,height:x.height},children:N})]}):s.jsxs(s.Fragment,{children:[N,s.jsx("div",{ref:h,className:z("scrollable-region__viewport",n),children:e})]})})},kn=48,yn=({checklist:e})=>{const t=r.useRef(null),n=r.useRef(!1);return r.useLayoutEffect(()=>{const a=t.current;if(!a)return;const i=a.scrollHeight-a.scrollTop-a.clientHeight;(!n.current||i<=kn)&&(a.scrollTop=a.scrollHeight,n.current=!0)},[e]),e.length===0?s.jsx("p",{className:"agent-view__progress-empty",children:"No tasks to display."}):s.jsx(et,{className:"agent-view__progress-scroll",scrollSelector:".agent-view__progress-list",children:s.jsx("ul",{ref:t,className:"agent-view__progress-list","aria-label":"Agent tasks",children:vn(e).map(a=>{const i=X[a.status];return s.jsxs("li",{className:z("agent-view__progress-item",`agent-view__progress-item--${a.status.replace(/_/g,"-")}`),children:[s.jsx(d.Icon,{name:i.icon,size:16,color:i.color,screenReaderText:`${i.label}:`}),s.jsxs("div",{className:"agent-view__progress-item-content",children:[s.jsx("span",{className:"agent-view__progress-label",children:a.task}),a.status!==$.complete&&s.jsx("span",{className:"agent-view__progress-description",children:a.description})]})]},a.task)})})})},Sn=({prompts:e,classNamePrefix:t="agent-workspace",onSelect:n})=>e.length===0?null:s.jsx("div",{className:`${t}__chips`,children:e.map(a=>s.jsx("button",{type:"button",className:`${t}__chip`,onClick:()=>n(a),children:a},a))});class Nn{constructor(t,n){this.connector=t,this.canSend=n.canSend,this.onTurn=n.onTurn,this.onAwaitingChange=n.onAwaitingChange}get canRate(){return!1}get canLoadHistory(){return!1}get canListInteractions(){return!1}get canSendNotification(){return!1}get ratingPopupUrls(){return{}}async sendMessage(t){var n,a;if(!this.canSend())return null;(n=this.onAwaitingChange)==null||n.call(this,!0);try{const i=await this.connector.sendMessage(t.userMessage,t.uploadFiles);return this.onTurn(i),{id:i.message.id,text:i.message.text,type:Ne.CHAT_RESPONSE_TYPE_AGENT,...i.message.followUpPrompts?{followUpPrompts:i.message.followUpPrompts}:{}}}catch{return{id:`error-${Date.now()}`,text:ln,type:Ne.CHAT_RESPONSE_TYPE_ERROR}}finally{(a=this.onAwaitingChange)==null||a.call(this,!1)}}async loadHistory(t){return null}async listInteractions(){return null}async rateMessage(t){}async sendNotification(t){return!1}}const bn=({connector:e,phase:t,chatHistory:n,chatSessionKey:a,startQuery:i,clarificationMessage:l,enableUpload:o=!1,onTurn:h,onAwaitingChange:u,onClarificationPrompt:v,onDismissClarification:g})=>{const k=r.useMemo(()=>new Nn(e,{canSend:()=>t===U.running,onTurn:h,onAwaitingChange:u}),[e,t,h,u]),x=t!==U.running,O=t===U.running;return s.jsxs("section",{className:"agent-workspace__chat-body","aria-label":"Chat",children:[l&&s.jsxs("div",{className:"agent-workspace__clarification",role:"region","aria-label":"Agent question",children:[s.jsx("p",{className:"agent-workspace__clarification-text",children:l.text}),l.followUpPrompts&&s.jsx(Sn,{prompts:l.followUpPrompts,onSelect:v}),s.jsx("button",{type:"button",className:"agent-workspace__clarification-dismiss",onClick:g,children:"Dismiss"})]}),s.jsx("div",{className:"agent-workspace__ask-arbor",children:s.jsx(et,{scrollSelector:".chat-panel-message-list",children:s.jsx(Ne.ChatPanel,{connector:k,chatHistory:n,startQuery:i,lockConversation:x,enableUpload:o,speechEnabled:O,speechLanguage:"en-GB",speechSubmissionDelay:1e3,slashMenuItems:[],menuContent:[],introHeading:"Message your agent",introBody:"Ask questions, share trip details, or paste a link. The agent will update the checklist as it works.",placeholder:O?"Message the agent, paste a link, or attach a file…":"The agent is not accepting messages."},a)})}),t===U.paused&&s.jsxs("div",{className:"agent-workspace__notice",role:"status",children:[s.jsx(d.Icon,{name:"circle-alert",size:16,color:"var(--color-semantic-warning-600)"}),s.jsx("span",{children:"The agent is paused. Its progress is saved in the checklist."})]}),t===U.complete&&s.jsxs("div",{className:"agent-workspace__notice",role:"status",children:[s.jsx(d.Icon,{name:"party-popper",size:16,color:"var(--color-semantic-success-600)"}),s.jsx("span",{children:"The agent has finished."})]})]})},us=({item:e,depth:t,canRequestInput:n,onAttentionItemClick:a})=>{const i=X[e.status],l=e.status.replace(/_/g,"-"),o=e.status===$.hitl&&n&&a,h=s.jsxs("div",{className:"agent-workspace__task-row",children:[s.jsx(d.Icon,{name:i.icon,size:16,color:i.color,screenReaderText:`${i.label}:`}),s.jsxs("div",{className:"agent-workspace__task-content",children:[s.jsx("span",{className:"agent-workspace__task-label",children:e.task}),e.status!==$.complete&&e.description&&s.jsx("span",{className:"agent-workspace__task-description",children:e.description})]})]});return s.jsxs("li",{className:z("agent-workspace__task",`agent-workspace__task--${l}`,{"agent-workspace__task--child":t>0}),children:[o?s.jsx("button",{type:"button",className:"agent-workspace__task-button","aria-label":`Provide input for ${e.task}`,onClick:()=>a(e),children:h}):h,e.children&&e.children.length>0&&s.jsx("ul",{className:"agent-workspace__task-children",children:e.children.map(u=>s.jsx(us,{item:u,depth:t+1,canRequestInput:n,onAttentionItemClick:a},u.task))})]})},Ye=({items:e,ariaLabel:t,canRequestInput:n,onAttentionItemClick:a})=>s.jsx("ul",{className:"agent-workspace__task-list","aria-label":t,children:e.map(i=>s.jsx(us,{item:i,depth:0,canRequestInput:n,onAttentionItemClick:a},i.task))}),An=({checklist:e,isLoading:t,error:n,phase:a,canRequestInput:i,onAttentionItemClick:l,adminMode:o=!1,context:h,contextLoaded:u=!1,contextLoading:v=!1,contextError:g=null,onContextSelect:k})=>{const[x,O]=r.useState("checklist"),p=r.useMemo(()=>e?ds(e):null,[e]),A=()=>{O("context"),k==null||k()};return s.jsxs("section",{className:"agent-workspace__panel agent-workspace__panel--checklist","aria-label":"Checklist",children:[s.jsx("div",{className:"agent-workspace__panel-header",children:o?s.jsxs(d.Tabs,{className:"agent-workspace__checklist-tabs","aria-label":"Checklist panel",children:[s.jsx(d.Tabs.Item,{active:x==="checklist",tabElementProps:{id:"agent-checklist-tab-checklist",onClick:()=>O("checklist")},children:"Checklist"}),s.jsx(d.Tabs.Item,{active:x==="context",tabElementProps:{id:"agent-checklist-tab-context",onClick:A},children:"Context"})]}):s.jsx(d.Heading,{level:4,children:"Checklist"})}),s.jsx("div",{className:"agent-workspace__panel-body","aria-live":"polite",children:s.jsx(et,{children:x==="context"?s.jsxs(s.Fragment,{children:[v&&s.jsxs("div",{className:"agent-workspace__loading",children:[s.jsx(d.Icon,{name:"loader",size:16,color:"var(--color-brand-600)",className:"agent-workspace__task-icon--spinning",screenReaderText:"Loading context"}),s.jsx("span",{children:"Loading context…"})]}),!v&&g&&s.jsx("p",{className:"agent-workspace__error",role:"alert",children:g}),!v&&!g&&u&&h==null&&s.jsx("p",{className:"agent-workspace__empty",children:"No context available."}),!v&&!g&&u&&h!==null&&h!==void 0&&s.jsx("pre",{className:"agent-workspace__context-json",children:JSON.stringify(h,null,2)})]}):s.jsxs(s.Fragment,{children:[t&&s.jsxs("div",{className:"agent-workspace__loading",children:[s.jsx(d.Icon,{name:"loader",size:16,color:"var(--color-brand-600)",className:"agent-workspace__task-icon--spinning",screenReaderText:ye}),s.jsx("span",{children:ye})]}),!t&&n&&s.jsx("p",{className:"agent-workspace__error",role:"alert",children:n}),!t&&!n&&p&&s.jsxs(s.Fragment,{children:[p.needsInput.length>0&&s.jsxs("div",{className:"agent-workspace__task-group",children:[s.jsx("p",{className:"agent-workspace__task-group-label",children:"Needs your input"}),s.jsx(Ye,{items:p.needsInput,ariaLabel:"Tasks needing your input",canRequestInput:i,onAttentionItemClick:l})]}),p.complete.length>0&&s.jsxs("div",{className:z("agent-workspace__task-group",{"agent-workspace__task-group--following":p.needsInput.length>0}),children:[(p.needsInput.length>0||p.failed.length>0||p.tasks.length>0)&&s.jsx("p",{className:"agent-workspace__task-group-label",children:"Completed"}),s.jsx(Ye,{items:p.complete,ariaLabel:"Completed tasks",canRequestInput:i,onAttentionItemClick:l})]}),p.failed.length>0&&s.jsxs("div",{className:z("agent-workspace__task-group",{"agent-workspace__task-group--following":p.needsInput.length>0||p.complete.length>0}),children:[(p.needsInput.length>0||p.complete.length>0||p.tasks.length>0)&&s.jsx("p",{className:"agent-workspace__task-group-label",children:"Failed"}),s.jsx(Ye,{items:p.failed,ariaLabel:"Failed tasks",canRequestInput:i,onAttentionItemClick:l})]}),p.tasks.length>0&&s.jsxs("div",{className:z("agent-workspace__task-group",{"agent-workspace__task-group--following":p.needsInput.length>0||p.complete.length>0||p.failed.length>0}),children:[(p.needsInput.length>0||p.complete.length>0||p.failed.length>0)&&s.jsx("p",{className:"agent-workspace__task-group-label",children:"Working on"}),s.jsx(Ye,{items:p.tasks,ariaLabel:"Agent tasks",canRequestInput:i,onAttentionItemClick:l})]})]}),!t&&!n&&(!p||p.needsInput.length===0&&p.complete.length===0&&p.failed.length===0&&p.tasks.length===0)&&s.jsx("p",{className:"agent-workspace__empty",children:a===U.briefing?"Tasks will appear here once the agent starts.":"No tasks to display."})]})})})]})},jn=({resource:e,html:t,isLoading:n,error:a,onClose:i})=>{r.useEffect(()=>{if(!e)return;const o=d.SlideoverUtils.removeSlideover;return d.SlideoverUtils.removeSlideover=()=>{o(),i()},()=>{d.SlideoverUtils.removeSlideover=o}},[e,i]),r.useEffect(()=>{if(!e)return;const o=h=>{h.key==="Escape"&&d.SlideoverUtils.removeSlideover()};return window.addEventListener("keydown",o),()=>window.removeEventListener("keydown",o)},[e]);const l=r.useMemo(()=>e?[{centerHeaderText:!1,children:s.jsxs("div",{className:"resource-preview-slideover__body",children:[n&&s.jsxs("div",{className:"resource-preview-slideover__status",children:[s.jsx(d.Icon,{name:"loader",size:16,color:"var(--color-brand-600)",className:"agent-workspace__task-icon--spinning",screenReaderText:"Loading document"}),s.jsx("span",{children:"Loading document…"})]}),!n&&a&&s.jsx("p",{className:"resource-preview-slideover__error",role:"alert",children:a}),!n&&!a&&t!==null&&s.jsx("iframe",{className:"resource-preview-slideover__frame",title:e.title,sandbox:"",srcDoc:t})]})}]:[],[e,t,n,a]);return s.jsx("div",{className:"resource-preview-slideover",children:s.jsx(d.SlideoverManager,{slideovers:l})})},Cn={[ue.mis_record]:{icon:"table",label:"Arbor MIS",color:"var(--color-brand-600)"},[ue.document_html]:{icon:"file",label:"Document",color:"var(--color-semantic-caution-800)"},[ue.file]:{icon:"file",label:"File",color:"var(--color-semantic-caution-800)"},[ue.user_file]:{icon:"upload",label:"File upload",color:"var(--color-semantic-caution-800)"},[ue.workflow]:{icon:"list-tree",label:"Workflow",color:"var(--color-semantic-warning-700)"},[ue.link]:{icon:"link",label:"Link",color:"var(--color-semantic-info-700)"}},En=({resources:e,isLoading:t=!1,error:n=null,onOpenResource:a})=>s.jsxs("section",{className:"agent-workspace__panel agent-workspace__panel--documents","aria-label":"Resources",children:[s.jsxs("div",{className:"agent-workspace__panel-header",children:[s.jsx(d.Heading,{level:4,children:"Resources"}),s.jsx("span",{className:"agent-workspace__panel-count",children:e.length})]}),s.jsx("div",{className:"agent-workspace__panel-body","aria-live":"polite",children:s.jsxs(et,{children:[t&&s.jsxs("div",{className:"agent-workspace__loading",children:[s.jsx(d.Icon,{name:"loader",size:16,color:"var(--color-brand-600)",className:"agent-workspace__task-icon--spinning",screenReaderText:"Loading resources"}),s.jsx("span",{children:"Loading resources…"})]}),!t&&n&&s.jsx("p",{className:"agent-workspace__error",role:"alert",children:n}),!t&&!n&&e.length>0&&s.jsx("ul",{className:"agent-workspace__resource-list","aria-label":"Agent resources",children:e.map(i=>{const l=Cn[i.type],o=i.misRecordUrl;return s.jsx("li",{className:"agent-workspace__resource",children:o?s.jsx("a",{className:"agent-workspace__resource-card",href:o,target:"_blank",rel:"noreferrer",onClick:h=>{h.preventDefault(),a(i)},children:s.jsx(Wt,{resource:i,config:l,external:!0})}):s.jsx("button",{type:"button",className:"agent-workspace__resource-card",onClick:()=>a(i),children:s.jsx(Wt,{resource:i,config:l})})},i.id)})}),!t&&!n&&e.length===0&&s.jsx("p",{className:"agent-workspace__empty",children:"No resources yet."})]})})]}),Wt=({resource:e,config:t,external:n=!1})=>s.jsxs(s.Fragment,{children:[s.jsx("span",{className:`agent-workspace__resource-icon agent-workspace__resource-icon--${e.type}`,children:s.jsx(d.Icon,{name:t.icon,size:16,color:t.color,screenReaderText:`${t.label}:`})}),s.jsx("span",{className:"agent-workspace__resource-content",children:s.jsxs("span",{className:"agent-workspace__resource-top",children:[s.jsx("span",{className:"agent-workspace__resource-name",children:e.title}),s.jsx("span",{className:`agent-workspace__resource-badge agent-workspace__resource-badge--${e.type}`,children:t.label})]})}),n&&s.jsx(d.Icon,{name:"external-link",size:12,color:"var(--color-grey-500)",screenReaderText:"Opens in a new tab",className:"agent-workspace__resource-open"})]}),vt=e=>{const t=Date.parse(e);return Number.isFinite(t)?t:0},Rn=new Intl.DateTimeFormat("en-GB",{day:"numeric",month:"long",year:"numeric",hour:"numeric",minute:"2-digit"}),Xe=e=>{const t=new Date(e);return Number.isFinite(t.getTime())?Rn.format(t):e},Vt=e=>e.replace(/[A-Za-z0-9]+(?:[_-][A-Za-z0-9]+)+/g,t=>t.split(/[_-]/).map(n=>n.charAt(0).toUpperCase()+n.slice(1).toLowerCase()).join(" ")),Yt=e=>{const n=e.replace(/[A-Za-z0-9]+(?:[_-][A-Za-z0-9]+)+/g,a=>a.split(/[_-]/).map(i=>i.toLowerCase()).join(" ")).toLowerCase();return n&&n.charAt(0).toUpperCase()+n.slice(1)},Tn=60*60*1e3,gs=60*60*1e3,Le=24*gs,xt=7*Le,In=e=>e.type!=="message-sent",On=e=>{if(e==null||e<=0)return null;if(e%86400===0){const n=e/86400;return n===1?"every day":`every ${n} days`}if(e%3600===0){const n=e/3600;return n===1?"every hour":`every ${n} hours`}if(e%60===0){const n=e/60;return n===1?"every minute":`every ${n} minutes`}const t=Math.max(1,Math.round(e/60));return t===1?"every minute":`every ${t} minutes`},Ln=e=>{if(e.recurrence==="one_off")return"Scheduled to run once";const t=On(e.repeatIntervalSeconds);return t?`Repeating ${t}`:"Repeating run scheduled"},Pn=e=>e.recurrence==="one_off"?"scheduled-one-off":"scheduled-repeating",Un=(e,t,n=[])=>{const a=e.filter(In).map((o,h)=>({kind:"action",id:`action-${o.timestamp}-${h}`,timestampMs:vt(o.timestamp),item:o})),i=t.map(o=>({kind:"chat",id:o.sessionId,timestampMs:vt(o.timestamp),session:o})),l=n.map(o=>({kind:"scheduled",id:`scheduled-${o.scheduleId}`,timestampMs:vt(o.dueAt),run:o}));return[...a,...i,...l].sort((o,h)=>o.timestampMs-h.timestampMs||o.id.localeCompare(h.id))},Mn=e=>e>=xt?"weeks":e>=Le?"days":"hours",$n=e=>{if(e<Le){const a=Math.max(1,Math.round(e/gs));return a===1?"1 hour later":`${a} hours later`}if(e<xt){const a=Math.max(1,Math.round(e/Le));return a===1?"1 day later":`${a} days later`}const t=Math.max(1,Math.round(e/xt));if(t<5)return t===1?"1 week later":`${t} weeks later`;const n=Math.max(1,Math.round(e/(30*Le)));return n===1?"1 month later":`${n} months later`},Dn=(e,t=Tn)=>{if(e.length===0)return[];const n=[e[0]];for(let a=1;a<e.length;a+=1){const i=e[a-1],l=e[a],o=l.timestampMs-i.timestampMs;o>=t&&n.push({kind:"gap",id:`gap-${i.id}-${l.id}`,durationMs:o,label:$n(o),size:Mn(o)}),n.push(l)}return n},Hn=e=>e.type==="checklist-updated"?"checklist":e.type==="status-transition"?"status":"note",Bn=({timeline:e,isLoading:t,error:n,onOpenChatSession:a})=>{const i=(e==null?void 0:e.actionLog)??[],l=(e==null?void 0:e.chatSessions)??[],o=(e==null?void 0:e.scheduledRuns)??[],h=Un(i,l,o),u=Dn(h),v=!t&&!n&&h.length===0;return s.jsxs("section",{className:"agent-workspace__timeline","aria-label":"Agent timeline",children:[t&&s.jsx("p",{className:"agent-workspace__timeline-status",role:"status",children:"Loading timeline…"}),n&&s.jsx("p",{className:"agent-workspace__timeline-status",role:"alert",children:n||ls}),v&&s.jsx("p",{className:"agent-workspace__timeline-status",role:"status",children:"No timeline activity yet."}),!t&&!n&&!v&&s.jsxs("div",{className:"agent-timeline",children:[s.jsx("div",{className:"agent-timeline__track","aria-hidden":"true"}),s.jsxs("div",{className:"agent-timeline__station agent-timeline__station--terminus",children:[s.jsx("span",{className:"agent-timeline__station-rail",children:s.jsx("span",{className:"agent-timeline__station-node agent-timeline__station-node--terminus","aria-hidden":"true",children:s.jsx(d.Icon,{name:"arrow-right-from-line",size:16,color:"currentColor"})})}),s.jsx("div",{className:"agent-timeline__label",children:s.jsx("strong",{className:"agent-timeline__label-type",children:"Start"})})]}),u.map(g=>{if(g.kind==="gap")return s.jsxs("div",{className:`agent-timeline__gap agent-timeline__gap--${g.size}`,role:"separator","aria-label":g.label,children:[s.jsx("span",{className:"agent-timeline__gap-rail","aria-hidden":"true",children:s.jsx("span",{className:"agent-timeline__gap-dot"})}),s.jsx("span",{className:"agent-timeline__gap-label",children:g.label})]},g.id);if(g.kind==="chat")return s.jsxs("div",{className:"agent-timeline__chat-station",children:[s.jsx("button",{type:"button",className:"agent-timeline__chat-node","aria-label":`Open chat session from ${Xe(g.session.timestamp)}`,onClick:()=>a(g.session.sessionId),children:s.jsx(d.Icon,{name:"sparkles",size:16,color:"currentColor"})}),s.jsxs("div",{className:"agent-timeline__label",children:[s.jsx("strong",{className:"agent-timeline__label-type",children:"Chat session"}),s.jsx("span",{className:"agent-timeline__label-time",children:Xe(g.session.timestamp)})]})]},g.id);if(g.kind==="scheduled"){const A=Pn(g.run),j=g.run.recurrence==="one_off"?"One-off run":"Repeating run";return s.jsxs("div",{className:`agent-timeline__station agent-timeline__station--${A}`,children:[s.jsx("span",{className:"agent-timeline__station-rail",children:s.jsx("span",{className:`agent-timeline__station-node agent-timeline__station-node--${A}`,"aria-hidden":"true",children:s.jsx(d.Icon,{name:"date",size:16,color:"currentColor"})})}),s.jsxs("div",{className:"agent-timeline__label",children:[s.jsx("strong",{className:"agent-timeline__label-type",children:j}),s.jsx("span",{className:"agent-timeline__label-entry",children:Ln(g.run)}),s.jsx("span",{className:"agent-timeline__label-time",children:Xe(g.run.dueAt)})]})]},g.id)}const{item:k}=g,x=Hn(k),O=x==="checklist",p=x==="status";return s.jsxs("div",{className:`agent-timeline__station agent-timeline__station--${x}`,children:[s.jsx("span",{className:"agent-timeline__station-rail",children:s.jsxs("button",{type:"button",className:`agent-timeline__station-node agent-timeline__station-node--${x}`,"aria-label":`${Vt(k.type)}: ${Yt(k.entry)}`,children:[O&&s.jsx(d.Icon,{name:"check-solid",size:16,color:"currentColor"}),p&&s.jsx(d.Icon,{name:"iteration-ccw",size:16,color:"currentColor"})]})}),s.jsxs("div",{className:"agent-timeline__label",children:[s.jsx("strong",{className:"agent-timeline__label-type",children:Vt(k.type)}),s.jsx("span",{className:"agent-timeline__label-entry",children:Yt(k.entry)}),s.jsx("span",{className:"agent-timeline__label-time",children:Xe(k.timestamp)})]})]},g.id)}),s.jsxs("div",{className:"agent-timeline__station agent-timeline__station--terminus",children:[s.jsx("span",{className:"agent-timeline__station-rail",children:s.jsx("span",{className:"agent-timeline__station-node agent-timeline__station-node--terminus","aria-hidden":"true",children:s.jsx(d.Icon,{name:"flag",size:16,color:"currentColor"})})}),s.jsx("div",{className:"agent-timeline__label",children:s.jsx("strong",{className:"agent-timeline__label-type",children:"Finish"})})]})]})]})},Fn=["I'll get the details and come back to you","Skip this for now"],Gn=e=>{var n;const t=(n=e.prompt)!=null&&n.trim()?e.prompt.trim():`I need a bit more from you on "${e.task}". ${e.description} What can you tell me?`;return{id:`clarification-${Date.now()}`,author:Q.agent,text:t,followUpPrompts:e.clarificationPrompts??Fn}},zn=e=>e.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,"""),qn=e=>e.kind===is.user_file?`<strong>${zn(e.text)}</strong>`:e.text,de=e=>({id:e.id,text:qn(e),type:e.author===Q.user?Ne.CHAT_RESPONSE_TYPE_USER:e.author===Q.system?Ne.CHAT_RESPONSE_TYPE_INFO:Ne.CHAT_RESPONSE_TYPE_AGENT,...e.followUpPrompts?{followUpPrompts:e.followUpPrompts}:{}}),kt="MESSAGE_TYPE_REPOLL",hs="agentUi:update",Nt="arbor-agent-",ge={all:"ALL",checklist:"CHECKLIST",resources:"RESOURCES",chat:"CHAT",timeline:"TIMELINE"},Kn=new Set(Object.values(ge)),ps=(e,t)=>`${e.endsWith("-")?e:`${e}-`}${t}`,Jn=e=>typeof e=="string"&&Kn.has(e)?e:ge.all,Wn=e=>{if(!e||typeof e!="object")return null;const t=e;return t.type!==kt?null:{type:kt,target:Jn(t.target)}},ms=e=>{const t=Array.isArray(e)?e:[e],n=[];for(const a of t){const i=Wn(a);i&&n.push(i)}return n},Vn=({enabled:e,channelPrefix:t,agentId:n,subscribeToPusher:a,onRepoll:i})=>{const l=r.useRef(i),o=t==null?void 0:t.trim(),h=!!(e&&a&&o&&n.trim());return r.useEffect(()=>{l.current=i},[i]),r.useEffect(()=>{if(!h||!a||!o)return;const u=a(ps(o,n),hs,v=>{for(const g of ms(v))l.current(g.target)});return()=>{u()}},[h,o,n,a]),h};class Se extends Error{constructor(t,n,a){super(a??`Agent service request failed (${t})`),this.name="AgentServiceError",this.status=t,this.detail=n}}const Yn="/api/v1",M={agentDefinitions:"/agent-definitions",agents:"/agents",conversations:"/conversations",tripOptions:"/trip-options",demoDataset:"/demo/dataset"},B={GET:"GET",POST:"POST",PATCH:"PATCH"},Xn={error:"error"},Zn={user:"user"},fe={acceptJson:"application/json",acceptHtml:"text/html",acceptEventStream:"text/event-stream",contentTypeJson:"application/json",arborApplicationUrl:"X-Arbor-Application-Url"},Qn=100,_s=e=>{switch(e){case mt.paused:return y.paused;case mt.cancelled:return y.failed;case mt.archived:return y.complete;case y.hitl:case y.complete:case y.failed:case y["generating-a-response"]:return e;default:return y["generating-a-response"]}},fs=e=>{switch(e){case _t.requires_attention:return $.hitl;case _t.in_progress:case _t.available:return $["generating-a-response"];case $.failed:case $.complete:case $.hitl:case $["generating-a-response"]:return e;default:return $["generating-a-response"]}},bt=e=>({ref:e.name,display_name:e.display_name,agent_intent:e.agent_intent??"",description:e.description}),ea=e=>({id:e.id,name:e.name,...e.has_run_before?{hasRunBefore:e.has_run_before}:{}}),ta=new Set(Object.values(ue)),sa=e=>ta.has(e)?e:ue.document_html,vs=e=>({id:e.id,type:sa(e.type),title:e.title,createdDatetime:e.created_datetime,lastUpdatedDatetime:e.last_updated_datetime,misRecordUrl:e.mis_record_url}),ws=e=>({resources:e.resources.map(vs),pageNumber:e.page_number,pageSize:e.page_size,totalRecords:e.total_records}),xs=e=>({actionLog:(e.action_log??[]).map(t=>({timestamp:t.timestamp,type:t.type,entry:t.entry,origin:t.origin})),chatSessions:(e.chat_sessions??[]).map(t=>({sessionId:t.session_id,timestamp:t.timestamp})),scheduledRuns:(e.scheduled_runs??[]).map(t=>({scheduleId:t.schedule_id,dueAt:t.due_at,recurrence:t.recurrence,repeatIntervalSeconds:t.repeat_interval_seconds,wakePrompt:t.wake_prompt}))}),yt=e=>{var n;const t=e.invocation_id??e.id;return{id:e.id,invocation_id:t,agent_definition_ref:e.agent_definition_ref,...e.agent_intent?{agent_intent:e.agent_intent}:{},invocation_name:((n=e.invocation_name)==null?void 0:n.trim())||e.agent_definition_ref,application_id:e.application_id,...e.application_name?{application_name:e.application_name}:{},created_by:e.created_by,status:_s(e.status),context_ref:e.context_ref??null,checklist_ref:e.checklist_ref??null}},At=e=>{var t;return{task:e.item??e.task??e.name??e.label??cn,status:fs(e.status),description:e.description??"",...e.prompt?{prompt:e.prompt}:{},...(t=e.follow_up_prompts)!=null&&t.length?{clarificationPrompts:e.follow_up_prompts}:{}}},na=e=>Array.isArray(e)?e:e.checklist_items??e.checklist??e.items??[],jt=(e,t,n)=>{var l;const a=!Array.isArray(t)&&(t.opening_message||(l=t.opening_follow_up_prompts)!=null&&l.length)?t:n,i=a?Pe(a):void 0;return{invocation_id:e,checklist:na(t).map(At),...i?{openingMessage:i}:{}}},ks=(e,t)=>{const n=Pe(t);return{invocation_id:t.invocation_id??e,checklist:(t.checklist_items??[]).map(At),...n?{openingMessage:n}:{}}},Pe=e=>{var n,a;const t=(n=e.opening_message)==null?void 0:n.trim();if(t)return{id:os,author:Q.agent,text:t,...(a=e.opening_follow_up_prompts)!=null&&a.length?{followUpPrompts:e.opening_follow_up_prompts}:{}}},aa=e=>{try{const t=JSON.parse(e);if(Array.isArray(t)){const n=t.filter(a=>!!a&&typeof a=="object"&&typeof a.text=="string").map(a=>a.text);if(n.length>0)return n.join(`
|
|
2
|
-
`)}}catch{}return e},
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const n=require("react/jsx-runtime"),r=require("react"),W=require("classnames"),c=require("@arbor-education/design-system.components"),Ge=require("@arbor-education/ask-arbor-chat-panel"),y={"generating-a-response":"generating-a-response",hitl:"hitl",paused:"paused",complete:"complete"},$={"generating-a-response":"generating-a-response",hitl:"hitl",complete:"complete",failed:"failed"},U={briefing:"briefing",running:"running",paused:"paused",complete:"complete"},ne={agent:"agent",user:"user",system:"system"},xe={document_html:"document_html",mis_record:"mis_record",workflow:"workflow",file:"file",user_file:"user_file",link:"link"},En={user_file:"user_file"},Ht={active:"active",complete:"complete",paused:"paused"},Bt={in_progress:"in_progress",requires_attention:"requires_attention",available:"available"},we={[$.complete]:{label:"Complete",icon:"circle-check",color:"var(--color-semantic-success-600)"},[$.failed]:{label:"Failed",icon:"circle-x",color:"var(--color-semantic-destructive-600)"},[$.hitl]:{label:"Requires attention",icon:"triangle-alert",color:"var(--color-semantic-warning-600)"},[$["generating-a-response"]]:{label:"Generating a response",icon:"sparkles",color:"var(--color-brand-600)"}},jn="var(--color-grey-600)",at={[y["generating-a-response"]]:{status:y["generating-a-response"],title:"Active",dotColour:"green",statusIcon:{name:we["generating-a-response"].icon,color:we["generating-a-response"].color}},[y.hitl]:{status:y.hitl,title:"Requires attention",dotColour:"orange",statusIcon:{name:we.hitl.icon,color:we.hitl.color}},[y.paused]:{status:y.paused,title:"Paused",dotColour:"green",statusIcon:{name:"circle-x",color:jn}},[y.complete]:{status:y.complete,title:"Complete",dotColour:"green",dotModifier:"grey-dark",statusIcon:{name:we.complete.icon,color:we.complete.color}}},Ns={name:"archive",color:jn},bs=[y["generating-a-response"],y.hitl,y.complete],Cs="m4",Ss="1",Rn="msg-opening",yt="Unable to load agent tasks. Please try again.",Es="Unable to load context.",js="Unable to load the resources for this agent",Rs="Unable to load this document. Please try again.",Tn="Unable to load the timeline for this agent",Ts="Unable to pause the agent. Please try again.",Jt="Unable to archive the agent. Please try again.",Is="Archive this agent?",Os="Archiving cannot be undone. This agent will leave the board and cannot be restored or run again. You will not be able to retrieve it as active work. You can still open it from Archived to view the timeline and resources. Chat is not available.",Ls="This agent is still in progress.",Ps="Unable to delete the agent. Please try again.",Ms="You do not have permission to delete this agent.",Us="This agent must be paused or archived before it can be deleted.",Ds="This agent could not be found. It may have already been deleted.",$s="Delete this agent?",Hs="Deleting cannot be undone. This permanently removes the agent and its related data. It will not appear in Archived and cannot be restored.",Bs="Unable to resume the agent. Please try again.",Fs="The agent was resumed but could not be woken. Send a message to continue.",pn="You have been resumed after being paused. Reassess your current progress and continue your work from where you left off.",Gs="Unable to rename the agent. Please try again.",zs="Something went wrong. Please try again.",In="Unable to load agents. Please try again.",Fe="Loading tasks…",mn="Loading agents…",qs="Task",Ks={[U.briefing]:"Briefing",[U.running]:"Working",[U.paused]:"Paused",[U.complete]:"Complete"},Js=[y["generating-a-response"],y.hitl,y.complete],Vs={[y["generating-a-response"]]:"Agents currently working on tasks for you.",[y.hitl]:"Agents that need your input before they can continue.",[y.paused]:"Agents that are paused until you resume them.",[y.complete]:"Agents that have finished their work."},Ys=()=>n.jsxs("svg",{className:"agent-view__empty-illustration",viewBox:"0 0 360 240",xmlns:"http://www.w3.org/2000/svg",role:"img","aria-label":"Preview of the agents board layout",children:[n.jsx("rect",{x:"0",y:"0",width:"360",height:"240",rx:"12",fill:"var(--color-grey-100)"}),n.jsx("rect",{x:"16",y:"16",width:"100",height:"208",rx:"8",fill:"var(--card-default-color-background)",stroke:"var(--card-default-color-border)"}),n.jsx("rect",{x:"130",y:"16",width:"100",height:"208",rx:"8",fill:"var(--card-default-color-background)",stroke:"var(--card-default-color-border)"}),n.jsx("rect",{x:"244",y:"16",width:"100",height:"208",rx:"8",fill:"var(--card-default-color-background)",stroke:"var(--card-default-color-border)"}),n.jsx("rect",{x:"28",y:"52",width:"76",height:"36",rx:"6",fill:"var(--color-grey-050)"}),n.jsx("rect",{x:"28",y:"96",width:"76",height:"36",rx:"6",fill:"var(--color-grey-050)"}),n.jsx("rect",{x:"142",y:"52",width:"76",height:"36",rx:"6",fill:"var(--color-semantic-warning-050)"}),n.jsx("rect",{x:"256",y:"52",width:"76",height:"36",rx:"6",fill:"var(--color-grey-050)"}),n.jsx("circle",{cx:"40",cy:"70",r:"4",fill:"var(--color-brand-600)"}),n.jsx("circle",{cx:"40",cy:"114",r:"4",fill:"var(--color-brand-600)"}),n.jsx("circle",{cx:"154",cy:"70",r:"4",fill:"var(--color-semantic-warning-600)"}),n.jsx("circle",{cx:"256",cy:"70",r:"4",fill:"var(--color-grey-400)"})]}),Ws=({status:e})=>{const t=at[e];return t.statusIcon?n.jsx(c.Icon,{name:t.statusIcon.name,size:16,color:t.statusIcon.color,screenReaderText:t.title}):n.jsx(c.Dot,{colour:t.dotColour,label:t.title})},Xs=()=>n.jsxs("section",{className:"agent-view__empty","aria-label":"About the agents board",children:[n.jsxs("div",{className:"agent-view__empty-content",children:[n.jsx(c.Heading,{level:4,children:"Your agents board"}),n.jsx("p",{className:"agent-view__empty-lead",children:"When you start an agent, it appears here so you can track progress at a glance. Agents move between columns as their status changes."}),n.jsx("ul",{className:"agent-view__empty-columns",children:Js.map(e=>{const t=at[e];return n.jsxs("li",{className:"agent-view__empty-column",children:[n.jsx("span",{className:"agent-view__empty-column-indicator",children:n.jsx(Ws,{status:e})}),n.jsxs("span",{className:"agent-view__empty-column-text",children:[n.jsx("span",{className:"agent-view__empty-column-title",children:t.title}),n.jsx("span",{className:"agent-view__empty-column-description",children:Vs[e]})]})]},e)})}),n.jsxs("p",{className:"agent-view__empty-hint",children:["Use ",n.jsx("strong",{children:"Start an agent"})," above to begin."]})]}),n.jsx("div",{className:"agent-view__empty-visual",children:n.jsx(Ys,{})})]}),Zs=()=>({needsInput:[],complete:[],failed:[],tasks:[]}),Qs=(e,t)=>({...e,...t.length>0?{children:t}:{}}),On=e=>{const t=[],s=[],a=[],i=[];for(const o of e){const l=o.children?On(o.children):Zs();if(t.push(...l.needsInput),s.push(...l.complete),a.push(...l.failed),o.status===$.hitl){t.push({...o,children:void 0});continue}if(o.status===$.complete){s.push({...o,children:void 0});continue}if(o.status===$.failed){a.push({...o,children:void 0});continue}i.push(Qs(o,l.tasks))}return{needsInput:t,complete:s,failed:a,tasks:i}},_n=e=>e===$.hitl?0:e===$.complete?1:e===$.failed?2:3,ea=e=>e.map((t,s)=>({item:t,index:s})).sort((t,s)=>{const a=_n(t.item.status)-_n(s.item.status);return a!==0?a:t.index-s.index}).map(({item:t})=>t),Ft=2,ta=e=>{if(!e)return{canScrollUp:!1,canScrollDown:!1};const t=e.scrollHeight-e.clientHeight;return t<=Ft?{canScrollUp:!1,canScrollDown:!1}:{canScrollUp:e.scrollTop>Ft,canScrollDown:e.scrollTop<t-Ft}},na=(e,t)=>{if(!e||!t)return null;const s=e.getBoundingClientRect(),a=t.getBoundingClientRect();return{top:a.top-s.top,left:a.left-s.left,width:a.width,height:a.height}},bt=({children:e,className:t,contentClassName:s,scrollSelector:a,style:i,"aria-label":o})=>{const l=r.useRef(null),g=r.useRef(null),[h,k]=r.useState(!1),[m,v]=r.useState(!1),[x,j]=r.useState(null),_=()=>{var f;return a?((f=l.current)==null?void 0:f.querySelector(a))??null:g.current},C=()=>{const f=_(),A=ta(f);if(k(p=>p===A.canScrollUp?p:A.canScrollUp),v(p=>p===A.canScrollDown?p:A.canScrollDown),a){const p=na(l.current,f);j(S=>(S==null?void 0:S.top)===(p==null?void 0:p.top)&&(S==null?void 0:S.left)===(p==null?void 0:p.left)&&(S==null?void 0:S.width)===(p==null?void 0:p.width)&&(S==null?void 0:S.height)===(p==null?void 0:p.height)?S:p)}else j(p=>p===null?p:null)};r.useLayoutEffect(()=>{C()}),r.useEffect(()=>{const f=l.current;if(!f)return;let A=null,p=null;const S=()=>{A==null||A.removeEventListener("scroll",C),p==null||p.disconnect(),p=null,A=null},R=K=>{if(K===A){C();return}if(S(),A=K,!A){C();return}A.addEventListener("scroll",C,{passive:!0}),p=new ResizeObserver(()=>C()),p.observe(A),A.firstElementChild instanceof HTMLElement&&p.observe(A.firstElementChild),C()};R(_());const L=new MutationObserver(()=>{R(_())});return L.observe(f,{childList:!0,subtree:!0,characterData:!0}),window.addEventListener("resize",C),()=>{window.removeEventListener("resize",C),L.disconnect(),S()}},[a]);const T=f=>{const A=_();if(!A)return;const p=Math.max(A.clientHeight*.75,120);A.scrollBy({top:f==="up"?-p:p,behavior:"smooth"})},O=n.jsxs(n.Fragment,{children:[h&&n.jsxs(n.Fragment,{children:[n.jsx("div",{className:"scrollable-region__fade scrollable-region__fade--top","aria-hidden":"true"}),n.jsx("button",{type:"button",className:"scrollable-region__edge scrollable-region__edge--top","aria-label":"Scroll up",onClick:()=>T("up"),children:n.jsx(c.Icon,{name:"chevron-up",size:16,color:"currentColor"})})]}),m&&n.jsxs(n.Fragment,{children:[n.jsx("div",{className:"scrollable-region__fade scrollable-region__fade--bottom","aria-hidden":"true"}),n.jsx("button",{type:"button",className:"scrollable-region__edge scrollable-region__edge--bottom","aria-label":"Scroll down",onClick:()=>T("down"),children:n.jsx(c.Icon,{name:"chevron-down",size:16,color:"currentColor"})})]})]});return n.jsx("div",{ref:l,className:W("scrollable-region",t),style:i,"aria-label":o,children:a?n.jsxs(n.Fragment,{children:[e,x&&(h||m)&&n.jsx("div",{className:"scrollable-region__overlay",style:{top:x.top,left:x.left,width:x.width,height:x.height},children:O})]}):n.jsxs(n.Fragment,{children:[O,n.jsx("div",{ref:g,className:W("scrollable-region__viewport",s),children:e})]})})},sa=48,aa=({checklist:e})=>{const t=r.useRef(null),s=r.useRef(!1);return r.useLayoutEffect(()=>{const a=t.current;if(!a)return;const i=a.scrollHeight-a.scrollTop-a.clientHeight;(!s.current||i<=sa)&&(a.scrollTop=a.scrollHeight,s.current=!0)},[e]),e.length===0?n.jsx("p",{className:"agent-view__progress-empty",children:"No tasks to display."}):n.jsx(bt,{className:"agent-view__progress-scroll",scrollSelector:".agent-view__progress-list",children:n.jsx("ul",{ref:t,className:"agent-view__progress-list","aria-label":"Agent tasks",children:ea(e).map(a=>{const i=we[a.status];return n.jsxs("li",{className:W("agent-view__progress-item",`agent-view__progress-item--${a.status.replace(/_/g,"-")}`),children:[n.jsx(c.Icon,{name:i.icon,size:16,color:i.color,screenReaderText:`${i.label}:`}),n.jsxs("div",{className:"agent-view__progress-item-content",children:[n.jsx("span",{className:"agent-view__progress-label",children:a.task}),a.status!==$.complete&&n.jsx("span",{className:"agent-view__progress-description",children:a.description})]})]},a.task)})})})},Ln=({open:e,isInProgress:t,isArchiving:s,error:a,onCancel:i,onConfirm:o})=>{const l=r.useId(),g=r.useId();return n.jsxs(c.Modal,{open:e,closeHandler:i,className:"archive-agent-confirm",children:[n.jsx(c.Modal.Header,{className:"archive-agent-confirm__header",children:n.jsx(c.Modal.Title,{id:l,children:Is})}),n.jsxs(c.Modal.Body,{className:"archive-agent-confirm__body",children:[n.jsxs("div",{role:"alertdialog","aria-labelledby":l,"aria-describedby":g,children:[n.jsx("p",{id:g,className:"archive-agent-confirm__lead",children:Os}),t?n.jsx("p",{className:"archive-agent-confirm__progress",children:Ls}):null,a?n.jsx("p",{className:"archive-agent-confirm__error",role:"alert",children:a}):null]}),n.jsxs("div",{className:"archive-agent-confirm__actions",children:[n.jsx(c.Button,{variant:"secondary",size:"S",disabled:s,onClick:i,children:"Cancel"}),n.jsx(c.Button,{variant:"secondary-destructive",size:"S",disabled:s,onClick:o,children:s?"Archiving…":"Archive"})]})]})]})},Pn=({open:e,isDeleting:t,error:s,onCancel:a,onConfirm:i})=>{const o=r.useId(),l=r.useId();return n.jsxs(c.Modal,{open:e,closeHandler:a,className:"archive-agent-confirm",children:[n.jsx(c.Modal.Header,{className:"archive-agent-confirm__header",children:n.jsx(c.Modal.Title,{id:o,children:$s})}),n.jsxs(c.Modal.Body,{className:"archive-agent-confirm__body",children:[n.jsxs("div",{role:"alertdialog","aria-labelledby":o,"aria-describedby":l,children:[n.jsx("p",{id:l,className:"archive-agent-confirm__lead",children:Hs}),s?n.jsx("p",{className:"archive-agent-confirm__error",role:"alert",children:s}):null]}),n.jsxs("div",{className:"archive-agent-confirm__actions",children:[n.jsx(c.Button,{variant:"secondary",size:"S",disabled:t,onClick:a,children:"Cancel"}),n.jsx(c.Button,{variant:"secondary-destructive",size:"S",disabled:t,onClick:i,children:t?"Deleting…":"Delete"})]})]})]})},ra=e=>e!==void 0&&e.some(t=>t.status===$.hitl),Mn=e=>e!==void 0&&e.length>0&&e.every(t=>t.status===$.complete),Gt=(e,t)=>e.status===y.paused?Mn(t)?y.complete:y["generating-a-response"]:ra(t)?y.hitl:e.status===y.complete?y.complete:e.status===y.hitl?y.hitl:y["generating-a-response"],ia=({prompts:e,classNamePrefix:t="agent-workspace",onSelect:s})=>e.length===0?null:n.jsx("div",{className:`${t}__chips`,children:e.map(a=>n.jsx("button",{type:"button",className:`${t}__chip`,onClick:()=>s(a),children:a},a))});class la{constructor(t,s){this.connector=t,this.canSend=s.canSend,this.onTurn=s.onTurn,this.onAwaitingChange=s.onAwaitingChange}get canRate(){return!1}get canLoadHistory(){return!1}get canListInteractions(){return!1}get canSendNotification(){return!1}get ratingPopupUrls(){return{}}async sendMessage(t){var s,a;if(!this.canSend())return null;(s=this.onAwaitingChange)==null||s.call(this,!0);try{const i=await this.connector.sendMessage(t.userMessage,t.uploadFiles);return this.onTurn(i),{id:i.message.id,text:i.message.text,type:Ge.CHAT_RESPONSE_TYPE_AGENT,...i.message.followUpPrompts?{followUpPrompts:i.message.followUpPrompts}:{}}}catch{return{id:`error-${Date.now()}`,text:zs,type:Ge.CHAT_RESPONSE_TYPE_ERROR}}finally{(a=this.onAwaitingChange)==null||a.call(this,!1)}}async loadHistory(t){return null}async listInteractions(){return null}async rateMessage(t){}async sendNotification(t){return!1}}const oa=({connector:e,phase:t,chatHistory:s,chatSessionKey:a,startQuery:i,clarificationMessage:o,enableUpload:l=!1,onTurn:g,onAwaitingChange:h,onClarificationPrompt:k,onDismissClarification:m})=>{const v=r.useMemo(()=>new la(e,{canSend:()=>t===U.running,onTurn:g,onAwaitingChange:h}),[e,t,g,h]),x=t!==U.running,j=t===U.running;return n.jsxs("section",{className:"agent-workspace__chat-body","aria-label":"Chat",children:[o&&n.jsxs("div",{className:"agent-workspace__clarification",role:"region","aria-label":"Agent question",children:[n.jsx("p",{className:"agent-workspace__clarification-text",children:o.text}),o.followUpPrompts&&n.jsx(ia,{prompts:o.followUpPrompts,onSelect:k}),n.jsx("button",{type:"button",className:"agent-workspace__clarification-dismiss",onClick:m,children:"Dismiss"})]}),n.jsx("div",{className:"agent-workspace__ask-arbor",children:n.jsx(bt,{scrollSelector:".chat-panel-message-list",children:n.jsx(Ge.ChatPanel,{connector:v,chatHistory:s,startQuery:i,lockConversation:x,enableUpload:l,speechEnabled:j,speechLanguage:"en-GB",speechSubmissionDelay:1e3,slashMenuItems:[],menuContent:[],introHeading:"Message your agent",introBody:"Ask questions, share trip details, or paste a link. The agent will update the checklist as it works.",placeholder:j?"Message the agent, paste a link, or attach a file…":"The agent is not accepting messages."},a)})}),t===U.paused&&n.jsxs("div",{className:"agent-workspace__notice",role:"status",children:[n.jsx(c.Icon,{name:"circle-alert",size:16,color:"var(--color-semantic-warning-600)"}),n.jsx("span",{children:"The agent is paused. Its progress is saved in the checklist."})]}),t===U.complete&&n.jsxs("div",{className:"agent-workspace__notice",role:"status",children:[n.jsx(c.Icon,{name:"party-popper",size:16,color:"var(--color-semantic-success-600)"}),n.jsx("span",{children:"The agent has finished."})]})]})},Un=({item:e,depth:t,canRequestInput:s,onAttentionItemClick:a})=>{const i=we[e.status],o=e.status.replace(/_/g,"-"),l=e.status===$.hitl&&s&&a,g=n.jsxs("div",{className:"agent-workspace__task-row",children:[n.jsx(c.Icon,{name:i.icon,size:16,color:i.color,screenReaderText:`${i.label}:`}),n.jsxs("div",{className:"agent-workspace__task-content",children:[n.jsx("span",{className:"agent-workspace__task-label",children:e.task}),e.status!==$.complete&&e.description&&n.jsx("span",{className:"agent-workspace__task-description",children:e.description})]})]});return n.jsxs("li",{className:W("agent-workspace__task",`agent-workspace__task--${o}`,{"agent-workspace__task--child":t>0}),children:[l?n.jsx("button",{type:"button",className:"agent-workspace__task-button","aria-label":`Provide input for ${e.task}`,onClick:()=>a(e),children:g}):g,e.children&&e.children.length>0&&n.jsx("ul",{className:"agent-workspace__task-children",children:e.children.map(h=>n.jsx(Un,{item:h,depth:t+1,canRequestInput:s,onAttentionItemClick:a},h.task))})]})},At=({items:e,ariaLabel:t,canRequestInput:s,onAttentionItemClick:a})=>n.jsx("ul",{className:"agent-workspace__task-list","aria-label":t,children:e.map(i=>n.jsx(Un,{item:i,depth:0,canRequestInput:s,onAttentionItemClick:a},i.task))}),ca=({checklist:e,isLoading:t,error:s,phase:a,canRequestInput:i,onAttentionItemClick:o,adminMode:l=!1,context:g,contextLoaded:h=!1,contextLoading:k=!1,contextError:m=null,onContextSelect:v})=>{const[x,j]=r.useState("checklist"),_=r.useMemo(()=>e?On(e):null,[e]),C=()=>{j("context"),v==null||v()};return n.jsxs("section",{className:"agent-workspace__panel agent-workspace__panel--checklist","aria-label":"Checklist",children:[n.jsx("div",{className:"agent-workspace__panel-header",children:l?n.jsxs(c.Tabs,{className:"agent-workspace__checklist-tabs","aria-label":"Checklist panel",children:[n.jsx(c.Tabs.Item,{active:x==="checklist",tabElementProps:{id:"agent-checklist-tab-checklist",onClick:()=>j("checklist")},children:"Checklist"}),n.jsx(c.Tabs.Item,{active:x==="context",tabElementProps:{id:"agent-checklist-tab-context",onClick:C},children:"Context"})]}):n.jsx(c.Heading,{level:4,children:"Checklist"})}),n.jsx("div",{className:"agent-workspace__panel-body","aria-live":"polite",children:n.jsx(bt,{children:x==="context"?n.jsxs(n.Fragment,{children:[k&&n.jsxs("div",{className:"agent-workspace__loading",children:[n.jsx(c.Icon,{name:"loader",size:16,color:"var(--color-brand-600)",className:"agent-workspace__task-icon--spinning",screenReaderText:"Loading context"}),n.jsx("span",{children:"Loading context…"})]}),!k&&m&&n.jsx("p",{className:"agent-workspace__error",role:"alert",children:m}),!k&&!m&&h&&g==null&&n.jsx("p",{className:"agent-workspace__empty",children:"No context available."}),!k&&!m&&h&&g!==null&&g!==void 0&&n.jsx("pre",{className:"agent-workspace__context-json",children:JSON.stringify(g,null,2)})]}):n.jsxs(n.Fragment,{children:[t&&n.jsxs("div",{className:"agent-workspace__loading",children:[n.jsx(c.Icon,{name:"loader",size:16,color:"var(--color-brand-600)",className:"agent-workspace__task-icon--spinning",screenReaderText:Fe}),n.jsx("span",{children:Fe})]}),!t&&s&&n.jsx("p",{className:"agent-workspace__error",role:"alert",children:s}),!t&&!s&&_&&n.jsxs(n.Fragment,{children:[_.needsInput.length>0&&n.jsxs("div",{className:"agent-workspace__task-group",children:[n.jsx("p",{className:"agent-workspace__task-group-label",children:"Needs your input"}),n.jsx(At,{items:_.needsInput,ariaLabel:"Tasks needing your input",canRequestInput:i,onAttentionItemClick:o})]}),_.complete.length>0&&n.jsxs("div",{className:W("agent-workspace__task-group",{"agent-workspace__task-group--following":_.needsInput.length>0}),children:[(_.needsInput.length>0||_.failed.length>0||_.tasks.length>0)&&n.jsx("p",{className:"agent-workspace__task-group-label",children:"Completed"}),n.jsx(At,{items:_.complete,ariaLabel:"Completed tasks",canRequestInput:i,onAttentionItemClick:o})]}),_.failed.length>0&&n.jsxs("div",{className:W("agent-workspace__task-group",{"agent-workspace__task-group--following":_.needsInput.length>0||_.complete.length>0}),children:[(_.needsInput.length>0||_.complete.length>0||_.tasks.length>0)&&n.jsx("p",{className:"agent-workspace__task-group-label",children:"Failed"}),n.jsx(At,{items:_.failed,ariaLabel:"Failed tasks",canRequestInput:i,onAttentionItemClick:o})]}),_.tasks.length>0&&n.jsxs("div",{className:W("agent-workspace__task-group",{"agent-workspace__task-group--following":_.needsInput.length>0||_.complete.length>0||_.failed.length>0}),children:[(_.needsInput.length>0||_.complete.length>0||_.failed.length>0)&&n.jsx("p",{className:"agent-workspace__task-group-label",children:"Working on"}),n.jsx(At,{items:_.tasks,ariaLabel:"Agent tasks",canRequestInput:i,onAttentionItemClick:o})]})]}),!t&&!s&&(!_||_.needsInput.length===0&&_.complete.length===0&&_.failed.length===0&&_.tasks.length===0)&&n.jsx("p",{className:"agent-workspace__empty",children:a===U.briefing?"Tasks will appear here once the agent starts.":"No tasks to display."})]})})})]})},da=({resource:e,html:t,isLoading:s,error:a,onClose:i})=>{r.useEffect(()=>{if(!e)return;const l=c.SlideoverUtils.removeSlideover;return c.SlideoverUtils.removeSlideover=()=>{l(),i()},()=>{c.SlideoverUtils.removeSlideover=l}},[e,i]),r.useEffect(()=>{if(!e)return;const l=g=>{g.key==="Escape"&&c.SlideoverUtils.removeSlideover()};return window.addEventListener("keydown",l),()=>window.removeEventListener("keydown",l)},[e]);const o=r.useMemo(()=>e?[{centerHeaderText:!1,children:n.jsxs("div",{className:"resource-preview-slideover__body",children:[s&&n.jsxs("div",{className:"resource-preview-slideover__status",children:[n.jsx(c.Icon,{name:"loader",size:16,color:"var(--color-brand-600)",className:"agent-workspace__task-icon--spinning",screenReaderText:"Loading document"}),n.jsx("span",{children:"Loading document…"})]}),!s&&a&&n.jsx("p",{className:"resource-preview-slideover__error",role:"alert",children:a}),!s&&!a&&t!==null&&n.jsx("iframe",{className:"resource-preview-slideover__frame",title:e.title,sandbox:"",srcDoc:t})]})}]:[],[e,t,s,a]);return n.jsx("div",{className:"resource-preview-slideover",children:n.jsx(c.SlideoverManager,{slideovers:o})})},ua={[xe.mis_record]:{icon:"table",label:"Arbor MIS",color:"var(--color-brand-600)"},[xe.document_html]:{icon:"file",label:"Document",color:"var(--color-semantic-caution-800)"},[xe.file]:{icon:"file",label:"File",color:"var(--color-semantic-caution-800)"},[xe.user_file]:{icon:"upload",label:"File upload",color:"var(--color-semantic-caution-800)"},[xe.workflow]:{icon:"list-tree",label:"Workflow",color:"var(--color-semantic-warning-700)"},[xe.link]:{icon:"link",label:"Link",color:"var(--color-semantic-info-700)"}},ha=({resources:e,isLoading:t=!1,error:s=null,onOpenResource:a})=>n.jsxs("section",{className:"agent-workspace__panel agent-workspace__panel--documents","aria-label":"Resources",children:[n.jsxs("div",{className:"agent-workspace__panel-header",children:[n.jsx(c.Heading,{level:4,children:"Resources"}),n.jsx("span",{className:"agent-workspace__panel-count",children:e.length})]}),n.jsx("div",{className:"agent-workspace__panel-body","aria-live":"polite",children:n.jsxs(bt,{children:[t&&n.jsxs("div",{className:"agent-workspace__loading",children:[n.jsx(c.Icon,{name:"loader",size:16,color:"var(--color-brand-600)",className:"agent-workspace__task-icon--spinning",screenReaderText:"Loading resources"}),n.jsx("span",{children:"Loading resources…"})]}),!t&&s&&n.jsx("p",{className:"agent-workspace__error",role:"alert",children:s}),!t&&!s&&e.length>0&&n.jsx("ul",{className:"agent-workspace__resource-list","aria-label":"Agent resources",children:e.map(i=>{const o=ua[i.type],l=i.misRecordUrl;return n.jsx("li",{className:"agent-workspace__resource",children:l?n.jsx("a",{className:"agent-workspace__resource-card",href:l,target:"_blank",rel:"noreferrer",onClick:g=>{g.preventDefault(),a(i)},children:n.jsx(fn,{resource:i,config:o,external:!0})}):n.jsx("button",{type:"button",className:"agent-workspace__resource-card",onClick:()=>a(i),children:n.jsx(fn,{resource:i,config:o})})},i.id)})}),!t&&!s&&e.length===0&&n.jsx("p",{className:"agent-workspace__empty",children:"No resources yet."})]})})]}),fn=({resource:e,config:t,external:s=!1})=>n.jsxs(n.Fragment,{children:[n.jsx("span",{className:`agent-workspace__resource-icon agent-workspace__resource-icon--${e.type}`,children:n.jsx(c.Icon,{name:t.icon,size:16,color:t.color,screenReaderText:`${t.label}:`})}),n.jsx("span",{className:"agent-workspace__resource-content",children:n.jsxs("span",{className:"agent-workspace__resource-top",children:[n.jsx("span",{className:"agent-workspace__resource-name",children:e.title}),n.jsx("span",{className:`agent-workspace__resource-badge agent-workspace__resource-badge--${e.type}`,children:t.label})]})}),s&&n.jsx(c.Icon,{name:"external-link",size:12,color:"var(--color-grey-500)",screenReaderText:"Opens in a new tab",className:"agent-workspace__resource-open"})]}),zt=e=>{const t=Date.parse(e);return Number.isFinite(t)?t:0},ga=new Intl.DateTimeFormat("en-GB",{day:"numeric",month:"long",year:"numeric",hour:"numeric",minute:"2-digit"}),qt=e=>{const t=new Date(e);return Number.isFinite(t.getTime())?ga.format(t):e},vn=e=>e.replace(/[A-Za-z0-9]+(?:[_-][A-Za-z0-9]+)+/g,t=>t.split(/[_-]/).map(s=>s.charAt(0).toUpperCase()+s.slice(1).toLowerCase()).join(" ")),xn=e=>{const s=e.replace(/[A-Za-z0-9]+(?:[_-][A-Za-z0-9]+)+/g,a=>a.split(/[_-]/).map(i=>i.toLowerCase()).join(" ")).toLowerCase();return s&&s.charAt(0).toUpperCase()+s.slice(1)},pa=60*60*1e3,Dn=60*60*1e3,nt=24*Dn,Vt=7*nt,ma=e=>e.type!=="message-sent",_a=e=>{if(e==null||e<=0)return null;if(e%86400===0){const s=e/86400;return s===1?"every day":`every ${s} days`}if(e%3600===0){const s=e/3600;return s===1?"every hour":`every ${s} hours`}if(e%60===0){const s=e/60;return s===1?"every minute":`every ${s} minutes`}const t=Math.max(1,Math.round(e/60));return t===1?"every minute":`every ${t} minutes`},fa=e=>{if(e.recurrence==="one_off")return"Scheduled to run once";const t=_a(e.repeatIntervalSeconds);return t?`Repeating ${t}`:"Repeating run scheduled"},va=e=>e.recurrence==="one_off"?"scheduled-one-off":"scheduled-repeating",xa=(e,t,s=[])=>{const a=e.filter(ma).map((l,g)=>({kind:"action",id:`action-${l.timestamp}-${g}`,timestampMs:zt(l.timestamp),item:l})),i=t.map(l=>({kind:"chat",id:l.sessionId,timestampMs:zt(l.timestamp),session:l})),o=s.map(l=>({kind:"scheduled",id:`scheduled-${l.scheduleId}`,timestampMs:zt(l.dueAt),run:l}));return[...a,...i,...o].sort((l,g)=>l.timestampMs-g.timestampMs||l.id.localeCompare(g.id))},wa=e=>e>=Vt?"weeks":e>=nt?"days":"hours",ka=e=>{if(e<nt){const a=Math.max(1,Math.round(e/Dn));return a===1?"1 hour later":`${a} hours later`}if(e<Vt){const a=Math.max(1,Math.round(e/nt));return a===1?"1 day later":`${a} days later`}const t=Math.max(1,Math.round(e/Vt));if(t<5)return t===1?"1 week later":`${t} weeks later`;const s=Math.max(1,Math.round(e/(30*nt)));return s===1?"1 month later":`${s} months later`},Aa=(e,t=pa)=>{if(e.length===0)return[];const s=[e[0]];for(let a=1;a<e.length;a+=1){const i=e[a-1],o=e[a],l=o.timestampMs-i.timestampMs;l>=t&&s.push({kind:"gap",id:`gap-${i.id}-${o.id}`,durationMs:l,label:ka(l),size:wa(l)}),s.push(o)}return s},ya=e=>e.type==="checklist-updated"?"checklist":e.type==="status-transition"?"status":"note",Na=({timeline:e,isLoading:t,error:s,onOpenChatSession:a})=>{const i=(e==null?void 0:e.actionLog)??[],o=(e==null?void 0:e.chatSessions)??[],l=(e==null?void 0:e.scheduledRuns)??[],g=xa(i,o,l),h=Aa(g),k=!t&&!s&&g.length===0;return n.jsxs("section",{className:"agent-workspace__timeline","aria-label":"Agent timeline",children:[t&&n.jsx("p",{className:"agent-workspace__timeline-status",role:"status",children:"Loading timeline…"}),s&&n.jsx("p",{className:"agent-workspace__timeline-status",role:"alert",children:s||Tn}),k&&n.jsx("p",{className:"agent-workspace__timeline-status",role:"status",children:"No timeline activity yet."}),!t&&!s&&!k&&n.jsxs("div",{className:"agent-timeline",children:[n.jsx("div",{className:"agent-timeline__track","aria-hidden":"true"}),n.jsxs("div",{className:"agent-timeline__station agent-timeline__station--terminus",children:[n.jsx("span",{className:"agent-timeline__station-rail",children:n.jsx("span",{className:"agent-timeline__station-node agent-timeline__station-node--terminus","aria-hidden":"true",children:n.jsx(c.Icon,{name:"arrow-right-from-line",size:16,color:"currentColor"})})}),n.jsx("div",{className:"agent-timeline__label",children:n.jsx("strong",{className:"agent-timeline__label-type",children:"Start"})})]}),h.map(m=>{if(m.kind==="gap")return n.jsxs("div",{className:`agent-timeline__gap agent-timeline__gap--${m.size}`,role:"separator","aria-label":m.label,children:[n.jsx("span",{className:"agent-timeline__gap-rail","aria-hidden":"true",children:n.jsx("span",{className:"agent-timeline__gap-dot"})}),n.jsx("span",{className:"agent-timeline__gap-label",children:m.label})]},m.id);if(m.kind==="chat"){const C=qt(m.session.timestamp),T=n.jsx(c.Icon,{name:"sparkles",size:16,color:"currentColor"});return n.jsxs("div",{className:"agent-timeline__chat-station",children:[a?n.jsx("button",{type:"button",className:"agent-timeline__chat-node","aria-label":`Open chat session from ${C}`,onClick:()=>a(m.session.sessionId),children:T}):n.jsx("span",{className:"agent-timeline__chat-node agent-timeline__chat-node--static","aria-hidden":"true",children:T}),n.jsxs("div",{className:"agent-timeline__label",children:[n.jsx("strong",{className:"agent-timeline__label-type",children:"Chat session"}),n.jsx("span",{className:"agent-timeline__label-time",children:C})]})]},m.id)}if(m.kind==="scheduled"){const C=va(m.run),T=m.run.recurrence==="one_off"?"One-off run":"Repeating run";return n.jsxs("div",{className:`agent-timeline__station agent-timeline__station--${C}`,children:[n.jsx("span",{className:"agent-timeline__station-rail",children:n.jsx("span",{className:`agent-timeline__station-node agent-timeline__station-node--${C}`,"aria-hidden":"true",children:n.jsx(c.Icon,{name:"date",size:16,color:"currentColor"})})}),n.jsxs("div",{className:"agent-timeline__label",children:[n.jsx("strong",{className:"agent-timeline__label-type",children:T}),n.jsx("span",{className:"agent-timeline__label-entry",children:fa(m.run)}),n.jsx("span",{className:"agent-timeline__label-time",children:qt(m.run.dueAt)})]})]},m.id)}const{item:v}=m,x=ya(v),j=x==="checklist",_=x==="status";return n.jsxs("div",{className:`agent-timeline__station agent-timeline__station--${x}`,children:[n.jsx("span",{className:"agent-timeline__station-rail",children:n.jsxs("button",{type:"button",className:`agent-timeline__station-node agent-timeline__station-node--${x}`,"aria-label":`${vn(v.type)}: ${xn(v.entry)}`,children:[j&&n.jsx(c.Icon,{name:"check-solid",size:16,color:"currentColor"}),_&&n.jsx(c.Icon,{name:"iteration-ccw",size:16,color:"currentColor"})]})}),n.jsxs("div",{className:"agent-timeline__label",children:[n.jsx("strong",{className:"agent-timeline__label-type",children:vn(v.type)}),n.jsx("span",{className:"agent-timeline__label-entry",children:xn(v.entry)}),n.jsx("span",{className:"agent-timeline__label-time",children:qt(v.timestamp)})]})]},m.id)}),n.jsxs("div",{className:"agent-timeline__station agent-timeline__station--terminus",children:[n.jsx("span",{className:"agent-timeline__station-rail",children:n.jsx("span",{className:"agent-timeline__station-node agent-timeline__station-node--terminus","aria-hidden":"true",children:n.jsx(c.Icon,{name:"flag",size:16,color:"currentColor"})})}),n.jsx("div",{className:"agent-timeline__label",children:n.jsx("strong",{className:"agent-timeline__label-type",children:"Finish"})})]})]})]})},ba=["I'll get the details and come back to you","Skip this for now"],Ca=e=>{var s;const t=(s=e.prompt)!=null&&s.trim()?e.prompt.trim():`I need a bit more from you on "${e.task}". ${e.description} What can you tell me?`;return{id:`clarification-${Date.now()}`,author:ne.agent,text:t,followUpPrompts:e.clarificationPrompts??ba}},Sa=e=>e.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,"""),Ea=e=>e.kind===En.user_file?`<strong>${Sa(e.text)}</strong>`:e.text,ve=e=>({id:e.id,text:Ea(e),type:e.author===ne.user?Ge.CHAT_RESPONSE_TYPE_USER:e.author===ne.system?Ge.CHAT_RESPONSE_TYPE_INFO:Ge.CHAT_RESPONSE_TYPE_AGENT,...e.followUpPrompts?{followUpPrompts:e.followUpPrompts}:{}}),Yt="MESSAGE_TYPE_REPOLL",$n="agentUi:update",Wt="arbor-agent-",ke={all:"ALL",checklist:"CHECKLIST",resources:"RESOURCES",chat:"CHAT",timeline:"TIMELINE"},ja=new Set(Object.values(ke)),Hn=(e,t)=>`${e.endsWith("-")?e:`${e}-`}${t}`,Ra=e=>typeof e=="string"&&ja.has(e)?e:ke.all,Ta=e=>{if(!e||typeof e!="object")return null;const t=e;return t.type!==Yt?null:{type:Yt,target:Ra(t.target)}},Bn=e=>{const t=Array.isArray(e)?e:[e],s=[];for(const a of t){const i=Ta(a);i&&s.push(i)}return s},Ia=({enabled:e,channelPrefix:t,agentId:s,subscribeToPusher:a,onRepoll:i})=>{const o=r.useRef(i),l=t==null?void 0:t.trim(),g=!!(e&&a&&l&&s.trim());return r.useEffect(()=>{o.current=i},[i]),r.useEffect(()=>{if(!g||!a||!l)return;const h=a(Hn(l,s),$n,k=>{for(const m of Bn(k))o.current(m.target)});return()=>{h()}},[g,l,s,a]),g};class Te extends Error{constructor(t,s,a){super(a??`Agent service request failed (${t})`),this.name="AgentServiceError",this.status=t,this.detail=s}}const Oa="/api/v1",D={agentDefinitions:"/agent-definitions",agents:"/agents",conversations:"/conversations",tripOptions:"/trip-options",demoDataset:"/demo/dataset"},q={GET:"GET",POST:"POST",PATCH:"PATCH",DELETE:"DELETE"},La={error:"error"},Pa={user:"user"},Re={acceptJson:"application/json",acceptHtml:"text/html",acceptEventStream:"text/event-stream",contentTypeJson:"application/json",arborApplicationUrl:"X-Arbor-Application-Url"},Ma=100,Fn=e=>{switch(e){case Ht.paused:return y.paused;case Ht.complete:return y.complete;case y.hitl:return y.hitl;case Ht.active:case y["generating-a-response"]:return y["generating-a-response"];default:return y["generating-a-response"]}},Gn=e=>{switch(e){case Bt.requires_attention:return $.hitl;case Bt.in_progress:case Bt.available:return $["generating-a-response"];case $.failed:case $.complete:case $.hitl:case $["generating-a-response"]:return e;default:return $["generating-a-response"]}},Xt=e=>({ref:e.name,display_name:e.display_name,agent_intent:e.agent_intent??"",description:e.description}),Ua=e=>({id:e.id,name:e.name,...e.has_run_before?{hasRunBefore:e.has_run_before}:{}}),Da=new Set(Object.values(xe)),$a=e=>Da.has(e)?e:xe.document_html,zn=e=>({id:e.id,type:$a(e.type),title:e.title,createdDatetime:e.created_datetime,lastUpdatedDatetime:e.last_updated_datetime,misRecordUrl:e.mis_record_url}),qn=e=>({resources:e.resources.map(zn),pageNumber:e.page_number,pageSize:e.page_size,totalRecords:e.total_records}),Kn=e=>({actionLog:(e.action_log??[]).map(t=>({timestamp:t.timestamp,type:t.type,entry:t.entry,origin:t.origin})),chatSessions:(e.chat_sessions??[]).map(t=>({sessionId:t.session_id,timestamp:t.timestamp})),scheduledRuns:(e.scheduled_runs??[]).map(t=>({scheduleId:t.schedule_id,dueAt:t.due_at,recurrence:t.recurrence,repeatIntervalSeconds:t.repeat_interval_seconds,wakePrompt:t.wake_prompt}))}),st=e=>{var s;const t=e.invocation_id??e.id;return{id:e.id,invocation_id:t,agent_definition_ref:e.agent_definition_ref,...e.agent_intent?{agent_intent:e.agent_intent}:{},invocation_name:((s=e.invocation_name)==null?void 0:s.trim())||e.agent_definition_ref,application_id:e.application_id,...e.application_name?{application_name:e.application_name}:{},created_by:e.created_by,status:Fn(e.status),archivedAt:e.archived_at??null,context_ref:e.context_ref??null,checklist_ref:e.checklist_ref??null}},Zt=e=>{var t;return{task:e.item??e.task??e.name??e.label??qs,status:Gn(e.status),description:e.description??"",...e.prompt?{prompt:e.prompt}:{},...(t=e.follow_up_prompts)!=null&&t.length?{clarificationPrompts:e.follow_up_prompts}:{}}},Ha=e=>Array.isArray(e)?e:e.checklist_items??e.checklist??e.items??[],Qt=(e,t,s)=>{var o;const a=!Array.isArray(t)&&(t.opening_message||(o=t.opening_follow_up_prompts)!=null&&o.length)?t:s,i=a?rt(a):void 0;return{invocation_id:e,checklist:Ha(t).map(Zt),...i?{openingMessage:i}:{}}},Jn=(e,t)=>{const s=rt(t);return{invocation_id:t.invocation_id??e,checklist:(t.checklist_items??[]).map(Zt),...s?{openingMessage:s}:{}}},rt=e=>{var s,a;const t=(s=e.opening_message)==null?void 0:s.trim();if(t)return{id:Rn,author:ne.agent,text:t,...(a=e.opening_follow_up_prompts)!=null&&a.length?{followUpPrompts:e.opening_follow_up_prompts}:{}}},Ba=e=>{try{const t=JSON.parse(e);if(Array.isArray(t)){const s=t.filter(a=>!!a&&typeof a=="object"&&typeof a.text=="string").map(a=>a.text);if(s.length>0)return s.join(`
|
|
2
|
+
`)}}catch{}return e},Fa=e=>{const t=e.trim();return t.length>0?`File upload
|
|
3
3
|
|
|
4
|
-
${t}`:"File upload"},
|
|
4
|
+
${t}`:"File upload"},wn=e=>{var s;const t=(s=e.filename)==null?void 0:s.trim();return t||null},Vn=e=>e.filter(t=>wn(t)&&t.role==="user"?!0:(t.role==="user"||t.role==="assistant")&&typeof t.content=="string"&&t.content.length>0&&t.message_type!=="tool_request").map(t=>{const s=wn(t);return s&&t.role==="user"?{id:t.message_id,author:ne.user,kind:En.user_file,text:s}:{id:t.message_id,author:t.role==="user"?ne.user:ne.agent,text:t.content}}),Ga=/:invocationId\b/g,za=/:resourceId\b/g,qa=e=>e.trim().replace(/^Bearer\s+/i,""),kn=e=>e.endsWith("/")?e.slice(0,-1):e;class Ct{constructor(t){var a;this.baseUrl=kn(t.baseUrl??"");const s=(a=t.token)==null?void 0:a.trim();this.token=s?qa(s):void 0,this.customHeaders=t.headers,this.urls=t.urls??{},this.fetchImpl=t.fetch??globalThis.fetch.bind(globalThis)}setHeaders(t){this.customHeaders=t}async listAgentDefinitions(){return(await this.request(q.GET,this.resolveUrl("agentDefinitions",D.agentDefinitions))).agent_definitions??[]}getAgentDefinition(t){return this.request(q.GET,this.apiUrl(`${D.agentDefinitions}/${encodeURIComponent(t)}`))}listTripOptions(){return this.request(q.GET,this.apiUrl(D.tripOptions))}getDataset(){return this.request(q.GET,this.apiUrl(D.demoDataset))}setDataset(t){return this.request(q.POST,this.apiUrl(D.demoDataset),{dataset:t})}listAgents(t={}){const s=new URLSearchParams;t.status&&s.set("status",t.status),t.agentDefinitionRef&&s.set("agent_definition_ref",t.agentDefinitionRef);const a=s.toString()?`?${s.toString()}`:"";return this.request(q.GET,`${this.resolveUrl("agents",D.agents)}${a}`)}createAgent(t,s={}){var l,g;const a={agent_definition_ref:t},i=(l=s.invocationName)==null?void 0:l.trim(),o=(g=s.agentIntent)==null?void 0:g.trim();return i&&(a.invocation_name=i),o&&(a.agent_intent=o),this.request(q.POST,this.resolveUrl("agents",D.agents),a)}getAgent(t){return this.request(q.GET,this.resolveUrl("agent",`${D.agents}/${encodeURIComponent(t)}`,t))}updateAgent(t,s){const i={invocation_name:s.invocationName.trim()};return this.request(q.PATCH,this.resolveUrl("agent",`${D.agents}/${encodeURIComponent(t)}`,t),i)}getAgentChecklist(t){return this.request(q.GET,this.resolveUrl("agentChecklist",`${D.agents}/${encodeURIComponent(t)}/checklist`,t))}getAgentResources(t,s={}){const a=new URLSearchParams;s.pageNumber!==void 0&&a.set("page_number",String(s.pageNumber)),s.pageSize!==void 0&&a.set("page_size",String(s.pageSize)),s.type&&a.set("type",s.type);const i=a.toString(),o=this.resolveUrl("agentResources",`${D.agents}/${encodeURIComponent(t)}/resources`,t);return this.request(q.GET,i?`${o}?${i}`:o)}async listAllAgentResources(t){const s=Ma;let a=1;const i=[];let o=Number.POSITIVE_INFINITY;for(;i.length<o;){const l=qn(await this.getAgentResources(t,{pageNumber:a,pageSize:s}));if(o=l.totalRecords,l.resources.length===0||(i.push(...l.resources),i.length>=o))break;a+=1}return i}getAgentResourceHtml(t,s){return this.requestText(q.GET,this.resolveResourceHtmlUrl(t,s))}getAgentTimeline(t){return this.request(q.GET,this.resolveUrl("agentTimeline",`${D.agents}/${encodeURIComponent(t)}/agent-timeline`,t))}getAgentContext(t){const s=this.resolveUrl("agent",`${D.agents}/${encodeURIComponent(t)}`,t);return this.request(q.GET,`${kn(s)}/context`)}pauseAgent(t){return this.request(q.POST,this.resolveUrl("pauseAgent",`${D.agents}/${encodeURIComponent(t)}/pause`,t))}resumeAgent(t){return this.request(q.POST,this.resolveUrl("resumeAgent",`${D.agents}/${encodeURIComponent(t)}/resume`,t))}archiveAgent(t){return this.request(q.POST,this.resolveUrl("archiveAgent",`${D.agents}/${encodeURIComponent(t)}/archive`,t))}deleteAgent(t){return this.request(q.DELETE,this.resolveUrl("agent",`${D.agents}/${encodeURIComponent(t)}`,t))}getConversation(t){return this.request(q.GET,this.resolveUrl("agentConversation",`${D.conversations}/${encodeURIComponent(t)}`,t))}async chat(t,s,a={}){const i=!!(a.uploadFiles&&a.uploadFiles.length>0),o=await this.fetchImpl(this.resolveUrl("agentChat",`${D.agents}/${encodeURIComponent(t)}/chat`,t),{method:q.POST,headers:{...this.customHeaders,...this.authHeaders(),Accept:Re.acceptEventStream,...i?{}:{"Content-Type":Re.contentTypeJson}},body:i?Ja(s,a.uploadFiles??[]):JSON.stringify(s),signal:a.signal});if(!o.ok)throw await this.toError(o);if(!o.body)throw new Te(o.status,null,"Chat response contained no stream body");return this.consumeSse(o.body,a.onEvent)}authHeaders(){return this.token?{Authorization:`Bearer ${this.token}`}:{}}apiUrl(t){return`${this.baseUrl}${Oa}${t}`}resolveUrl(t,s,a,i){const o=this.urls[t];if(!o)return this.apiUrl(s);let l=o;return a&&(l=l.replace(Ga,encodeURIComponent(a))),i&&(l=l.replace(za,encodeURIComponent(i))),l}resolveResourceHtmlUrl(t,s){return this.urls.agentResourceHtml?this.resolveUrl("agentResourceHtml",`${D.agents}/${encodeURIComponent(t)}/resources/${encodeURIComponent(s)}`,t,s):this.urls.agentResources?`${this.resolveUrl("agentResources",`${D.agents}/${encodeURIComponent(t)}/resources`,t).replace(/\/$/,"")}/${encodeURIComponent(s)}`:this.apiUrl(`${D.agents}/${encodeURIComponent(t)}/resources/${encodeURIComponent(s)}`)}async request(t,s,a){const i=await this.fetchImpl(s,{method:t,headers:{...this.customHeaders,...this.authHeaders(),Accept:Re.acceptJson,...a===void 0?{}:{"Content-Type":Re.contentTypeJson}},...a===void 0?{}:{body:JSON.stringify(a)}});if(!i.ok)throw await this.toError(i);if(i.status!==204)return await i.json()}async requestText(t,s){const a=await this.fetchImpl(s,{method:t,headers:{...this.customHeaders,...this.authHeaders(),Accept:Re.acceptHtml}});if(!a.ok)throw await this.toError(a);return a.text()}async toError(t){let s=null;try{s=await t.json()}catch{}return new Te(t.status,s,`Agent service request failed (${t.status} ${t.statusText})`)}async consumeSse(t,s){const a=t.getReader(),i=new TextDecoder;let o="",l;const g=h=>{const{event:k,data:m}=Ka(h);if(m===null)return;if(k===La.error){const x=An(m);throw new Te(502,x,(x==null?void 0:x.message)??"Chat stream error")}const v=An(m);v&&(l=v,s==null||s(v))};for(;;){const{done:h,value:k}=await a.read();if(h)break;o+=i.decode(k,{stream:!0});const m=o.split(`
|
|
5
5
|
|
|
6
|
-
`);
|
|
7
|
-
`)){const i=a.trimEnd();i.startsWith("event:")?t=i.slice(6).trim():i.startsWith("data:")&&
|
|
8
|
-
`):null}},Qt=e=>{try{return JSON.parse(e)}catch{return}};function da(e,t){const n=new FormData;n.append("body",JSON.stringify(e));for(const a of t)n.append("files",a,a.name);return n}const ua={id:os,author:Q.agent,text:"Type a question or upload a file. You can ask it how it's progressing, or send an instruction and it'll act on it."};let es=0;const ga=e=>(es+=1,`${e}-${Date.now()}-${es}`),ha=e=>{const t=e.destination?` to ${e.destination}`:"";return`Let's get started on ${e.tripName.trim()||e.destination.trim()||"this task"}${t}. What will you do first?`};class Ss{constructor(t,n,a={}){this.seededChecklist=[],this.client=t,this.agentId=n,this.chatId=a.chatId??n,this.opening=a.openingMessage??ua,this.model=a.model}openingMessage(){return this.opening}async bootstrapConversation(){const t=await this.client.getConversation(this.chatId),n=ys(t.messages);return n.length===0?[this.opening]:n}async start(t){return{...await this.exchange(ha(t)),phase:U.running}}sendMessage(t,n){return this.exchange(t,n)}async pause(){await this.client.pauseAgent(this.agentId)}async resume(){await this.client.resumeAgent(this.agentId)}seedChecklist(t){this.seededChecklist=t}async exchange(t,n){var o;const a=[{role:Zn.user,content:t}],i=await this.client.chat(this.agentId,{messages:a,chat_id:this.chatId,...this.model?{model:this.model}:{},moderation_enabled:!0,meta:{feature_id:"agent_view",source:"agent_view_frontend"}},...n&&n.length>0?[{uploadFiles:n}]:[]),l={id:i.event_id||ga("msg-agent"),author:Q.agent,text:i.message.content,...(o=i.follow_up_prompts)!=null&&o.length?{followUpPrompts:i.follow_up_prompts}:{}};try{const h=await this.client.getAgent(this.agentId),{checklist:u}=ks(this.agentId,h);return this.seededChecklist=u,{message:l,checklist:u}}catch{return{message:l,...this.seededChecklist.length?{checklist:this.seededChecklist}:{}}}}}const Ct=(e,t)=>n=>{var a,i;return new Ss(e,n.invocation_id,{model:t==null?void 0:t.model,chatId:((a=t==null?void 0:t.resolveChatId)==null?void 0:a.call(t,n))??(t==null?void 0:t.chatId)??n.invocation_id,openingMessage:((i=t==null?void 0:t.resolveOpeningMessage)==null?void 0:i.call(t,n))??(t==null?void 0:t.openingMessage)})},Ns=e=>e instanceof Se?e.message:e instanceof TypeError?"Network error while contacting the agent service.":e instanceof Error&&e.message?e.message:cs,pa=e=>{const t={};for(const n of e){const a=Pe(n);if(!a)continue;const i=n.invocation_id??n.id;t[i]=a,t[n.id]=a}return t},ma=e=>JSON.stringify(e),wt=(e,t)=>JSON.stringify(e)===JSON.stringify(t),bs=e=>{const{jwt:t,headers:n,urls:a}=e,i=JSON.stringify(n??{}),l=ma(a),o=r.useMemo(()=>new tt({token:t,headers:n,urls:a}),[t,l]);r.useLayoutEffect(()=>{o.setHeaders(n)},[o,i]);const[h,u]=r.useState([]),[v,g]=r.useState([]),[k,x]=r.useState({}),[O,p]=r.useState("loading"),[A,j]=r.useState(null),[N,P]=r.useState(0),w=r.useCallback((R,q)=>{const J=R.map(yt),W=q.map(bt),G=pa(R);u(F=>wt(F,J)?F:J),g(F=>wt(F,W)?F:W),x(F=>wt(F,G)?F:G),p("idle"),j(null)},[]);r.useEffect(()=>{let R=!1;return p("loading"),j(null),(async()=>{try{const[q,J]=await Promise.all([o.listAgents(),o.listAgentDefinitions()]);if(R)return;w(q,J)}catch(q){if(R)return;u([]),g([]),x({}),p("error"),j(Ns(q))}})(),()=>{R=!0}},[w,o,N]);const m=r.useCallback(()=>{P(R=>R+1)},[]),C=r.useCallback(async()=>{try{const[R,q]=await Promise.all([o.listAgents(),o.listAgentDefinitions()]);w(R,q)}catch{}},[w,o]),L=r.useCallback(async R=>{const[q,J]=await Promise.all([o.getAgentChecklist(R),o.getAgent(R).catch(()=>null)]);return jt(R,q,J??void 0)},[o]),T=r.useCallback(async R=>o.listAllAgentResources(R),[o]),E=r.useCallback(async({definition:R,invocationName:q})=>{const J=await o.createAgent(R.ref,{invocationName:q}),W=await o.getAgent(J.id),G=yt(W),F=Pe(W);return u(ee=>[G,...ee]),F&&x(ee=>({...ee,[G.invocation_id]:F,[G.id]:F})),G},[o]),Y=r.useMemo(()=>Ct(o,{resolveOpeningMessage:R=>k[R.invocation_id]??k[R.id]}),[o,k]);return{agents:h,agentDefinitions:v,loadState:O,loadError:A,reload:m,refresh:C,fetchAgentChecklist:L,fetchAgentResources:T,createAgent:E,chatConnector:Y}},_a=e=>JSON.stringify(e),As=e=>{const{agent:t,jwt:n,headers:a,urls:i,chatId:l}=e,o=JSON.stringify(a??{}),h=_a(i),u=r.useMemo(()=>new tt({token:n,headers:a,urls:{agent:i.agentUrl,agentChecklist:i.agentChecklistUrl,...i.agentResourcesUrl?{agentResources:i.agentResourcesUrl}:{},...i.agentTimelineUrl?{agentTimeline:i.agentTimelineUrl}:{},agentChat:i.agentChatUrl,agentConversation:i.agentConversationUrl,...i.pauseAgentUrl?{pauseAgent:i.pauseAgentUrl}:{},...i.resumeAgentUrl?{resumeAgent:i.resumeAgentUrl}:{}}}),[n,h]);r.useLayoutEffect(()=>{u.setHeaders(a)},[u,o]);const v=r.useCallback(async j=>{const[N,P]=await Promise.all([u.getAgentChecklist(j),u.getAgent(j).catch(()=>null)]);return jt(j,N,P??void 0)},[u]),g=r.useCallback(async j=>u.listAllAgentResources(j),[u]),k=r.useCallback(async j=>u.getAgentContext(j),[u]),x=r.useCallback(async(j,N)=>u.getAgentResourceHtml(j,N),[u]),O=r.useCallback(async j=>{const N=await u.getAgentTimeline(j);return xs(N)},[u]),p=r.useCallback(async(j,N)=>{await u.updateAgent(j,{invocationName:N})},[u]);return{connector:r.useMemo(()=>Ct(u,{chatId:l??t.invocation_id})(t),[u,t.invocation_id,l]),fetchAgentChecklist:v,fetchAgentContext:k,fetchAgentResources:g,fetchAgentResourceHtml:x,fetchAgentTimeline:O,updateAgentInvocationName:p}},fa=3e4,va=(e,t)=>{const n=e.hasRunBefore?t||"This trip":e.tripName.trim()||"A new trip",a=e.destination?` to ${e.destination}`:"",i=e.hasRunBefore?" It has run before.":"";return`${n}${a}.${i}`.trim()},wa=e=>{switch(e){case y.paused:return U.paused;case y.failed:return U.paused;case y.complete:return U.complete;default:return U.running}},ts=e=>e===y.paused,ss=(e,t)=>{t([de(e)])},xa=(e,t)=>e.length===t.length&&e.every((n,a)=>{const i=t[a];return i!==void 0&&n.id===i.id&&n.text===i.text}),js=({agent:e,invocationId:t,open:n,onClose:a,jwt:i,headers:l,agentUrl:o,agentChecklistUrl:h,agentResourcesUrl:u,agentTimelineUrl:v,agentChatUrl:g,agentConversationUrl:k,pauseAgentUrl:x,resumeAgentUrl:O,chatId:p,enableUpload:A,adminMode:j=!1,initialBrief:N,initialPhase:P,initialChecklist:w,usePusherToRepoll:m=!1,pusherChannelPrefix:C=Nt,subscribeToPusher:L})=>{const[T,E]=r.useState(p??t),[Y,R]=r.useState("chat"),[q,J]=r.useState(!1),{connector:W,fetchAgentChecklist:G,fetchAgentContext:F,fetchAgentResources:ee,fetchAgentResourceHtml:ve,fetchAgentTimeline:ie,updateAgentInvocationName:be}=As({agent:{...e,invocation_id:t},jwt:i,headers:l,chatId:T,urls:{agentUrl:o,agentChecklistUrl:h,agentResourcesUrl:u,agentTimelineUrl:v,agentChatUrl:g,agentConversationUrl:k,pauseAgentUrl:x,resumeAgentUrl:O}}),H=r.useRef(W),[we,te]=r.useState(e.invocation_name),[Ue,Ae]=r.useState(0),[xe,oe]=r.useState(null),[se,ne]=r.useState(P??(N?U.running:wa(e.status))),[st,V]=r.useState([]),[he,pe]=r.useState(0),[Me,$e]=r.useState(),[De,je]=r.useState(null),[He,Be]=r.useState([]),[Fe,Ge]=r.useState(!1),[nt,Ce]=r.useState(null),[ze,Ee]=r.useState(null),[_,b]=r.useState(null),[S,K]=r.useState(!1),[me,le]=r.useState(null),[Z,Re]=r.useState(null),[Rs,Et]=r.useState(!1),[Ts,at]=r.useState(null),[rt,qe]=r.useState(w??null),[Is,Rt]=r.useState(!1),[Os,it]=r.useState(null),[Ls,Tt]=r.useState(void 0),[ot,It]=r.useState(!1),[lt,ct]=r.useState(!1),[Ps,dt]=r.useState(null),[Ot,Lt]=r.useState(!1),[Pt,Ut]=r.useState(!1),[Mt,Te]=r.useState(null),[Us,ut]=r.useState(()=>ts(e.status)),[Ke,Ie]=r.useState(!1),[Je,Ms]=r.useState(!1),[We,$s]=r.useState(!1),$t=r.useRef(Ke),Dt=r.useRef(e.invocation_name),Ht=r.useRef(0),Bt=r.useRef(0),ke=r.useRef(0);r.useEffect(()=>{H.current=W},[W]),r.useEffect(()=>{Dt.current=e.invocation_name},[e.invocation_name]),r.useEffect(()=>{$t.current=Ke},[Ke]),r.useEffect(()=>{E(p??t),R("chat"),J(!1),V([]),pe(c=>c+1),oe(null)},[t,p]),r.useEffect(()=>(ke.current+=1,Tt(void 0),It(!1),ct(!1),dt(null),()=>{ke.current+=1}),[t]),r.useEffect(()=>{ut(ts(e.status))},[e.status,t]),r.useEffect(()=>{te(e.invocation_name),Ae(c=>c+1)},[e.invocation_name]),r.useEffect(()=>{if(!n||N)return;const c=H.current.bootstrapConversation;if(!c){ss(H.current.openingMessage(),V);return}let f=!1;return Ie(!0),(async()=>{try{const I=await c.call(H.current);if(f)return;V(I.map(de))}catch{f||ss(H.current.openingMessage(),V)}finally{f||Ie(!1)}})(),()=>{f=!0}},[n,N,t,T]);const ae=r.useCallback(()=>{const c=++Ht.current;(async()=>{var f,I;try{const D=await G(t);if(c!==Ht.current)return;qe(ce=>JSON.stringify(ce)===JSON.stringify(D.checklist)?ce:D.checklist),it(null),(I=(f=H.current).seedChecklist)==null||I.call(f,D.checklist)}catch{}})()},[G,t]),_e=r.useCallback(()=>{u&&(async()=>{try{const c=await ee(t);Be(c),Ce(null)}catch{}})()},[u,ee,t]),re=r.useCallback(()=>{if(!v)return;const c=++Bt.current;(async()=>{try{const f=await ie(t);if(c!==Bt.current)return;Re(I=>JSON.stringify(I)===JSON.stringify(f)?I:f),at(null)}catch{}})()},[v,ie,t]),Oe=r.useCallback(c=>{const f=H.current.bootstrapConversation;f&&(async()=>{try{const I=await f.call(H.current);if($t.current)return;const D=I.map(de);let ce=!1;V(zt=>xa(zt,D)?zt:(ce=!0,D)),ce&&(c!=null&&c.refreshSidePanelsOnChange)&&(ae(),re())}catch{}})()},[ae,re]),Ds=r.useCallback(c=>{switch(c){case ge.checklist:ae();return;case ge.resources:_e();return;case ge.chat:Oe();return;case ge.timeline:re();return;case ge.all:default:ae(),_e(),Oe(),re()}},[ae,Oe,_e,re]),Ft=Vn({enabled:n&&m,channelPrefix:C,agentId:e.id,subscribeToPusher:L,onRepoll:Ds});r.useEffect(()=>{if(!n||N||Ft)return;const c=window.setInterval(()=>{Oe({refreshSidePanelsOnChange:!0})},fa);return()=>{window.clearInterval(c)}},[n,N,Ft,t,T,Oe]);const gt=r.useCallback(c=>{var f,I;c.checklist?(qe(c.checklist),(I=(f=H.current).seedChecklist)==null||I.call(f,c.checklist)):ae(),c.phase&&ne(c.phase),_e(),re()},[ae,_e,re]);r.useEffect(()=>{var c,f;!n||N||w&&w.length>0&&((f=(c=H.current).seedChecklist)==null||f.call(c,w))},[n,N,w]),r.useEffect(()=>{if(!n||N)return;let c=!1;return Rt(f=>w!=null&&w.length?!1:f||rt===null||rt.length===0),it(null),(async()=>{var f,I;try{const D=await G(t);if(c)return;w!=null&&w.length||(qe(D.checklist),(I=(f=H.current).seedChecklist)==null||I.call(f,D.checklist))}catch{!c&&!(w!=null&&w.length)&&it(Ze)}finally{c||Rt(!1)}})(),()=>{c=!0}},[n,t,N,w,G]),r.useEffect(()=>{if(!n||!u)return;let c=!1;return Ge(!0),Ce(null),(async()=>{try{const f=await ee(t);c||Be(f)}catch{c||Ce(tn)}finally{c||Ge(!1)}})(),()=>{c=!0}},[n,t,u,ee]);const Hs=r.useCallback(()=>{Ee(null),b(null),le(null),K(!1)},[]),Bs=r.useCallback(c=>{if(c.misRecordUrl){window.open(c.misRecordUrl,"_blank","noopener,noreferrer");return}Ee(c),b(null),le(null),K(!0),(async()=>{try{const f=await ve(t,c.id);b(f)}catch{le(sn)}finally{K(!1)}})()},[ve,t]);r.useEffect(()=>{if(!n||!v)return;let c=!1;return Et(f=>f||Z===null),at(null),(async()=>{try{const f=await ie(t);c||Re(f)}catch{c||at(ls)}finally{c||Et(!1)}})(),()=>{c=!0}},[n,t,v,ie]),r.useEffect(()=>{if(!n||!N)return;let c=!1;const f={id:`user-brief-${Date.now()}`,author:Q.user,text:va(N,Dt.current)};return(async()=>{var D,ce;const I=await H.current.start(N);c||(V([de(H.current.openingMessage()),de(f),de(I.message)]),I.checklist?(qe(I.checklist),(ce=(D=H.current).seedChecklist)==null||ce.call(D,I.checklist)):ae(),ne(I.phase??U.running),_e(),re())})(),()=>{c=!0}},[n,N,t,ae,_e,re]);const Fs=r.useCallback(c=>{je(Gn(c))},[]),ht=p??t,Ve=Z==null?void 0:Z.chatSessions,Gt=Ve!=null&&Ve.length?Ve.reduce((c,f)=>Date.parse(f.timestamp)<Date.parse(c.timestamp)?f:c).sessionId:void 0,pt=r.useCallback(()=>{R("chat"),J(!1),T!==ht&&(E(ht),V([]),pe(c=>c+1))},[T,ht]),Gs=r.useCallback(c=>{if(c===Gt){pt();return}E(c),J(!0),R("chat"),V([]),pe(f=>f+1)},[Gt,pt]),zs=r.useCallback(c=>{je(null),$e(c),pe(f=>f+1)},[]),qs=r.useCallback(async()=>{Te(null),Lt(!0);try{await H.current.pause(),ne(U.paused),ut(!0)}catch{Te(nn)}finally{Lt(!1)}},[]),Ks=r.useCallback(async()=>{Te(null),Ut(!0);let c=!1;try{await H.current.resume(),c=!0,ne(U.running),ut(!1),Ie(!0);const f={id:`wake-${Date.now()}`,author:Q.user,text:qt};V(D=>[...D,de(f)]);const I=await H.current.sendMessage(qt);V(D=>[...D,de(I.message)]),gt(I)}catch{Te(c?rn:an)}finally{Ut(!1),Ie(!1)}},[gt]),Js=r.useCallback(c=>{const f=c.trim(),I=we;if(oe(null),!f){Ae(D=>D+1);return}f!==I&&(te(f),(async()=>{try{await be(t,f)}catch{te(I),Ae(D=>D+1),oe(on)}})())},[we,t,be]),Ws=r.useCallback(()=>{if(!j||ot||lt)return;const c=++ke.current;ct(!0),dt(null),(async()=>{try{const f=await F(t);if(ke.current!==c)return;Tt(f),It(!0)}catch{ke.current===c&&dt(en)}finally{ke.current===c&&ct(!1)}})()},[j,ot,lt,F,t]),Vs=rt;return s.jsxs(d.Modal,{open:n,closeHandler:a,hideCloseButton:!0,className:"agent-workspace",children:[s.jsxs(d.Modal.Header,{className:"agent-workspace__header",children:[s.jsxs("div",{className:"agent-workspace__header-title",children:[s.jsx("span",{className:"agent-workspace__header-avatar","aria-hidden":"true",children:s.jsx(d.Icon,{name:"ask-arbor",size:24})}),s.jsx(d.Modal.Title,{children:s.jsx(d.EditableText,{className:"agent-workspace__header-name",text:we,onEditSave:Js},Ue)}),s.jsx("span",{className:z("agent-workspace__phase",`agent-workspace__phase--${se}`),children:dn[se]}),xe&&s.jsx("p",{className:"agent-workspace__error agent-workspace__name-error",role:"alert",children:xe})]}),s.jsxs("div",{className:"agent-workspace__header-actions",children:[s.jsx(d.Button,{variant:Je?"secondary":"primary",size:"S",iconLeftName:"clipboard-list",iconLeftScreenReaderText:"Toggle checklist","aria-pressed":!Je,onClick:()=>Ms(c=>!c),children:"Checklist"}),s.jsx(d.Button,{variant:We?"secondary":"primary",size:"S",iconLeftName:"files",iconLeftScreenReaderText:"Toggle resources","aria-pressed":!We,onClick:()=>$s(c=>!c),children:"Resources"}),s.jsx(d.Button,{variant:"secondary",size:"S",iconLeftName:"x",iconLeftScreenReaderText:"Close",onClick:a,children:"Close"})]})]}),s.jsxs(d.Modal.Body,{className:z("agent-workspace__body",{"agent-workspace__body--no-checklist":Je,"agent-workspace__body--no-resources":We}),children:[s.jsxs("section",{className:z("agent-workspace__panel","agent-workspace__panel--chat",{"agent-workspace__panel--timeline":!!v&&Y==="timeline"}),"aria-label":"Agent",children:[s.jsxs("div",{className:"agent-workspace__panel-header",children:[s.jsx(d.Heading,{level:4,children:"Agent"}),x&&se===U.running&&s.jsx(d.Button,{className:"agent-workspace__panel-header-action",variant:"secondary-destructive",size:"S",iconLeftName:"circle-x",iconLeftScreenReaderText:"Pause",disabled:Ot,onClick:()=>void qs(),children:Ot?"Pausing…":"Pause agent"}),O&&se===U.paused&&Us&&s.jsx(d.Button,{className:"agent-workspace__panel-header-action",variant:"secondary",size:"S",iconLeftName:"iteration-ccw",iconLeftScreenReaderText:"Resume",disabled:Pt,onClick:()=>void Ks(),children:Pt?"Resuming…":"Resume agent"})]}),Mt&&s.jsx("p",{className:"agent-workspace__error agent-workspace__lifecycle-error",role:"alert",children:Mt}),v&&s.jsxs(d.Tabs,{className:"agent-workspace__center-tabs","aria-label":"Center panel",children:[s.jsx(d.Tabs.Item,{active:Y==="chat",tabElementProps:{id:"agent-center-tab-chat",onClick:()=>R("chat")},children:"Chat"}),s.jsx(d.Tabs.Item,{active:Y==="timeline",tabElementProps:{id:"agent-center-tab-timeline",onClick:()=>R("timeline")},children:"Timeline"})]}),v&&Y==="chat"&&q&&s.jsx("div",{className:"agent-workspace__center-back",children:s.jsx(d.Button,{variant:"tertiary",size:"S",iconLeftName:"arrow-left",iconLeftScreenReaderText:"Back to main chat",onClick:pt,children:"Back to main chat"})}),v&&Y==="timeline"&&s.jsx(Bn,{timeline:Z,isLoading:Rs,error:Ts,onOpenChatSession:Gs}),s.jsx("div",{className:"agent-workspace__chat-keep-alive",hidden:!!v&&Y!=="chat",children:s.jsx(bn,{connector:W,phase:se,chatHistory:st,chatSessionKey:he,startQuery:Me,clarificationMessage:De,enableUpload:A,onTurn:gt,onAwaitingChange:Ie,onClarificationPrompt:zs,onDismissClarification:()=>je(null)})})]}),!Je&&s.jsx(An,{checklist:Vs,isLoading:Is,error:Os,phase:se,canRequestInput:se===U.running&&!Ke,onAttentionItemClick:Fs,adminMode:j,context:Ls,contextLoaded:ot,contextLoading:lt,contextError:Ps,onContextSelect:Ws},t),!We&&s.jsx(En,{resources:He,isLoading:Fe,error:nt,onOpenResource:Bs}),s.jsx(jn,{resource:ze,html:_,isLoading:S,error:me,onClose:Hs})]})]})},ka="Unable to load agent definitions. Please try again.",ya="Unable to start the agent.",ns="Loading agents…",Cs=({open:e,onClose:t,onStart:n,agentDefinitions:a,definitionsState:i="idle",definitionsError:l=null,onRetryDefinitions:o,embedded:h=!1})=>{const[u,v]=r.useState(void 0),[g,k]=r.useState(""),[x,O]=r.useState(!1),[p,A]=r.useState(null),j=[...a].sort((L,T)=>L.display_name.localeCompare(T.display_name)).map(L=>({value:L.ref,label:L.display_name}));r.useEffect(()=>{e&&(v(void 0),k(""),O(!1),A(null))},[e]);const N=u!==void 0&&g.trim().length>0,P=r.useCallback(L=>{const T=a.find(E=>E.ref===L[0]);T&&v(T)},[a]),w=r.useCallback(async()=>{if(!(!u||!N||x)){O(!0),A(null);try{await n({definition:u,invocationName:g.trim()})}catch(L){A(L instanceof Error?L.message:ya)}finally{O(!1)}}},[N,u,g,x,n]);if(i==="idle"&&a.length===0||!e)return null;const m=s.jsxs("div",{className:"new-agent__header-title",children:[s.jsx("span",{className:"new-agent__header-avatar","aria-hidden":"true",children:s.jsx(d.Icon,{name:"ask-arbor",size:24})}),h?s.jsx("h2",{className:"new-agent__title",children:"Start an agent"}):s.jsx(d.Modal.Title,{children:"Start an agent"})]});let C;return i==="loading"?C=s.jsxs("div",{className:"new-agent__state","aria-live":"polite",children:[s.jsx(d.Icon,{name:"loader",size:24,color:"var(--color-brand-600)",className:"new-agent__spinner",screenReaderText:ns}),s.jsx("p",{className:"new-agent__state-message",children:ns})]}):i==="error"?C=s.jsxs("div",{className:"new-agent__state new-agent__state--error",role:"alert",children:[s.jsx(d.Icon,{name:"triangle-alert",size:24,color:"var(--color-semantic-destructive-600)"}),s.jsx("p",{className:"new-agent__state-message",children:l??ka}),o?s.jsx(d.Button,{variant:"secondary",size:"S",onClick:o,children:"Try again"}):null]}):C=s.jsxs("form",{className:"new-agent__form","aria-label":"Start an agent",onSubmit:L=>{L.preventDefault(),N&&!x&&w()},children:[s.jsxs("div",{className:"new-agent__type-field",children:[s.jsx("label",{className:"new-agent__type-label",htmlFor:"new-agent-type",children:"What would you like your agent to do?"}),s.jsx(d.SelectDropdown,{id:"new-agent-type",placeholder:"Which agent would you like to start?",options:j,selectedValues:u?[u.ref]:[],onSelectionChange:P})]}),s.jsxs("div",{className:"new-agent__type-field",children:[s.jsx("label",{className:"new-agent__type-label",htmlFor:"new-agent-invocation-name",children:"Name"}),s.jsx(d.TextInput,{id:"new-agent-invocation-name",value:g,placeholder:"What would you like to call your agent?",onChange:L=>k(L.target.value)})]}),p?s.jsx("p",{className:"new-agent__error",role:"alert",children:p}):null,s.jsx("div",{className:"new-agent__actions",children:s.jsx(d.Button,{type:"submit",variant:"primary",className:z("new-agent__start-button",{"new-agent__start-button--starting":x}),disabled:!N||x,iconLeftName:x?"loader":"sparkles",iconLeftScreenReaderText:x?"Starting":void 0,children:x?"Starting…":"Start"})})]}),h?s.jsxs("div",{className:z("new-agent","new-agent--embedded"),children:[s.jsx("div",{className:"new-agent__header",children:m}),s.jsx("div",{className:"new-agent__body",children:C})]}):s.jsxs(d.Modal,{open:e,closeHandler:t,className:"new-agent",children:[s.jsx(d.Modal.Header,{className:"new-agent__header",children:m}),s.jsx(d.Modal.Body,{className:"new-agent__body",children:C})]})},as=e=>{window.location.assign(e)},Sa=({open:e,authToken:t,headers:n,agentDefinitionsUrl:a,agentsUrl:i,closeUrl:l,successUrl:o,onClose:h,onStart:u,embedded:v=!1})=>{const g=JSON.stringify(n??{}),k=r.useMemo(()=>new tt({token:t,headers:n,urls:{agentDefinitions:a,agents:i}}),[t,a,i,g]),[x,O]=r.useState([]),[p,A]=r.useState("loading"),[j,N]=r.useState(null),[P,w]=r.useState(0);r.useEffect(()=>{if(!e)return;let T=!1;return A("loading"),N(null),(async()=>{try{const E=await k.listAgentDefinitions();if(T)return;O(E.map(bt)),A("idle")}catch(E){if(T)return;O([]),N(Ns(E)),A("error")}})(),()=>{T=!0}},[k,e,P]);const m=r.useCallback(()=>{h==null||h(),l&&as(l)},[l,h]),C=r.useCallback(async T=>{await k.createAgent(T.definition.ref,{invocationName:T.invocationName}),u==null||u(T),o&&as(o)},[k,u,o]),L=r.useCallback(()=>{w(T=>T+1)},[]);return s.jsx(Cs,{open:e,onClose:m,onStart:C,agentDefinitions:x,definitionsState:p,definitionsError:j,onRetryDefinitions:L,embedded:v})},Na=e=>"agentDefinitionsUrl"in e,Es=e=>Na(e)?s.jsx(Sa,{...e}):s.jsx(Cs,{...e}),ba=e=>e!==void 0&&e.some(t=>t.status===$.hitl),Aa=(e,t)=>ba(t)?y.hitl:e.status===y.paused?y["generating-a-response"]:e.status,ja=({column:e,label:t})=>e.statusIcon?s.jsx("span",{className:"agent-view__status-indicator",children:s.jsx(d.Icon,{name:e.statusIcon.name,size:16,color:e.statusIcon.color,className:z({"agent-view__progress-icon--spinning":e.statusIcon.spin}),screenReaderText:t})}):s.jsx("span",{className:z("agent-view__dot",{[`agent-view__dot--${e.dotModifier}`]:e.dotModifier}),children:s.jsx(d.Dot,{colour:e.dotColour,label:t})}),Ca=({agent:e,agentName:t,column:n,isExpanded:a,isLoading:i,checklist:l,error:o,onToggle:h,onViewAgent:u})=>{const{id:v,invocation_name:g}=e,k=`agent-card-${v}-header`,x=`agent-card-${v}-progress`;return s.jsx("li",{className:z("agent-view__card",{"agent-view__card--expanded":a}),children:s.jsxs(d.Card,{spacing:"dense",children:[s.jsx("button",{type:"button",className:"agent-view__card-toggle","aria-expanded":a,"aria-controls":x,"aria-label":g,id:k,onClick:()=>h(v),children:s.jsxs("div",{className:"agent-view__card-content",children:[s.jsx(ja,{column:n}),s.jsx("span",{className:"agent-view__card-invocation-name",children:g}),s.jsx("span",{className:"agent-view__card-agent-name",children:t}),s.jsx(d.Icon,{name:a?"chevron-up":"chevron-down",size:16,className:"agent-view__card-chevron"})]})}),a&&s.jsxs("div",{id:x,"aria-labelledby":k,className:"agent-view__card-progress",children:[i&&s.jsxs("div",{className:"agent-view__progress-loading","aria-live":"polite",children:[s.jsx(d.Icon,{name:"loader",size:16,color:"var(--color-brand-600)",className:"agent-view__progress-icon--spinning",screenReaderText:ye}),s.jsx("span",{children:ye})]}),!i&&o&&s.jsx("p",{className:"agent-view__progress-error",role:"alert",children:o}),!i&&!o&&l!==null&&s.jsx(yn,{checklist:l}),!i&&!o&&l===null&&s.jsxs("div",{className:"agent-view__progress-loading","aria-live":"polite",children:[s.jsx(d.Icon,{name:"loader",size:16,color:"var(--color-brand-600)",className:"agent-view__progress-icon--spinning",screenReaderText:ye}),s.jsx("span",{children:ye})]}),s.jsx("div",{className:"agent-view__card-actions",children:s.jsx(d.Button,{variant:"secondary",size:"S",onClick:()=>u==null?void 0:u(e),children:"View agent"})})]})]})})},rs=({column:e,agents:t,expandedAgentId:n,loadingAgentId:a,checklistByInvocationId:i,errorByAgentId:l,definitionNameByRef:o,onToggleAgent:h,onViewAgent:u,isSplit:v=!1})=>s.jsxs("section",{className:z("agent-view__column",{"agent-view__column--split":v}),"aria-label":e.title,children:[s.jsxs("div",{className:"agent-view__column-header",children:[s.jsx(d.Heading,{level:4,children:e.title}),s.jsx("span",{className:"agent-view__column-count",children:t.length})]}),s.jsx("ul",{className:"agent-view__card-list",children:t.map(g=>s.jsx(Ca,{agent:g,agentName:St(g,o),column:e,isExpanded:n===g.id,isLoading:a===g.id,checklist:i[g.invocation_id]??null,error:l[g.id]??null,onToggle:h,onViewAgent:u},g.id))})]}),St=(e,t)=>t.get(e.agent_definition_ref)??e.agent_definition_ref.replace(/_/g," "),Ea=({jwt:e,headers:t,agentDefinitionsUrl:n,agentsUrl:a,agentUrl:i,agentChecklistUrl:l,agentResourcesUrl:o,agentTimelineUrl:h,agentChatUrl:u,agentConversationUrl:v,pauseAgentUrl:g,resumeAgentUrl:k,enableUpload:x,adminMode:O=!1,showHeader:p=!1,institutions:A,usePusherToRepoll:j=!1,pusherChannelPrefix:N=Nt,subscribeToPusher:P})=>{var Ee;const w=r.useMemo(()=>({agentDefinitions:n,agents:a,agent:i,agentChecklist:l,...o?{agentResources:o}:{},...h?{agentTimeline:h}:{},agentChat:u,agentConversation:v}),[n,a,i,l,o,h,u,v]),[m,C]=r.useState(null),L=m?(Ee=A==null?void 0:A.find(_=>_.applicationId===m.application_id))==null?void 0:Ee.applicationUrl:void 0,T=r.useMemo(()=>{const _={...t??{}};return L?_[fe.arborApplicationUrl]=L:delete _[fe.arborApplicationUrl],_},[t,L]),{agents:E,agentDefinitions:Y,loadState:R,loadError:q,reload:J,refresh:W,fetchAgentChecklist:G,createAgent:F}=bs({jwt:e,headers:T,urls:w}),[ee,ve]=r.useState(!1),[ie,be]=r.useState(null),[H,we]=r.useState(null),[te,Ue]=r.useState({}),[Ae,xe]=r.useState({}),[oe,se]=r.useState([]),[ne,st]=r.useState([]),V=r.useMemo(()=>{const _=new Set(E.map(S=>S.application_id)),b=new Map((A??[]).map(S=>[S.applicationId,S.name]));return[..._].sort((S,K)=>(b.get(S)??S).localeCompare(b.get(K)??K)).map(S=>({value:S,label:b.get(S)??S}))},[E,A]),he=r.useMemo(()=>new Map(Y.map(_=>[_.ref,_.display_name])),[Y]),pe=r.useMemo(()=>[...new Set(E.map(b=>St(b,he)))].sort((b,S)=>b.localeCompare(S)).map(b=>({value:b,label:b})),[E,he]),Me=r.useMemo(()=>E.filter(_=>!(oe.length>0&&!oe.includes(_.application_id)||ne.length>0&&!ne.includes(St(_,he)))),[E,he,ne,oe]),$e=V.length>1,De=pe.length>1,je=$e||De;r.useEffect(()=>{const _=window.setInterval(()=>{W()},6e4);return()=>{window.clearInterval(_)}},[W]),r.useEffect(()=>{if(E.length===0)return;let _=!1;return(async()=>{const b=await Promise.allSettled(E.map(async S=>{const K=await G(S.invocation_id);return{agentId:S.id,invocationId:S.invocation_id,checklist:K.checklist}}));_||(Ue(S=>{const K={...S};let me=!1;for(const le of b){if(le.status!=="fulfilled")continue;const{invocationId:Z,checklist:Re}=le.value;JSON.stringify(S[Z])!==JSON.stringify(Re)&&(K[Z]=Re,me=!0)}return me?K:S}),xe(S=>{const K={...S};let me=!1;return b.forEach((le,Z)=>{le.status==="rejected"&&K[E[Z].id]!==Ze&&(K[E[Z].id]=Ze,me=!0)}),me?K:S}))})(),()=>{_=!0}},[E,G]);const He=r.useCallback(async _=>{if(!te[_.invocation_id]){we(_.id),xe(b=>{const S={...b};return delete S[_.id],S});try{const b=await G(_.invocation_id);Ue(S=>({...S,[_.invocation_id]:b.checklist}))}catch{xe(b=>({...b,[_.id]:Ze}))}finally{we(b=>b===_.id?null:b)}}},[G,te]),Be=r.useCallback(_=>{if(ie===_){be(null);return}const b=E.find(({id:S})=>S===_);b&&(be(_),He(b))},[E,ie,He]),Fe=r.useMemo(()=>{const _={};for(const b of Me){const S=Aa(b,te[b.invocation_id]);(_[S]??(_[S]=[])).push(b)}return _},[Me,te]),Ge=r.useCallback(_=>{C(_)},[]),nt=r.useCallback(async _=>{const b=await F(_);C(b),ve(!1)},[F]),Ce=r.useCallback(()=>{C(null)},[]),ze={expandedAgentId:ie,loadingAgentId:H,checklistByInvocationId:te,errorByAgentId:Ae,definitionNameByRef:he,onToggleAgent:Be,onViewAgent:Ge};return s.jsxs("div",{className:"agent-view-frontend agent-view",children:[p&&s.jsxs("div",{className:"agent-view__header",children:[s.jsx(d.Heading,{level:1,children:"Agents"}),s.jsx(d.Button,{variant:"primary",size:"S",iconLeftName:"sparkles",iconLeftScreenReaderText:"Start an agent",onClick:()=>ve(!0),children:"Start an agent"})]}),E.length>0&&je&&s.jsxs("div",{className:"agent-view__filters",children:[$e&&s.jsxs("div",{className:"agent-view__filter",children:[s.jsx("label",{className:"agent-view__filter-label",htmlFor:"agent-view-institution-filter",children:"Institution"}),s.jsx(d.Combobox,{id:"agent-view-institution-filter",triggerVariant:"button",multiple:!0,searchType:"substring",placeholder:"All institutions",options:V,value:oe,onValueChange:se,showSelectionCountBadge:!0,showClearAll:!0,clearAllLabel:"Clear institutions"})]}),De&&s.jsxs("div",{className:"agent-view__filter",children:[s.jsx("label",{className:"agent-view__filter-label",htmlFor:"agent-view-agent-filter",children:"Agent"}),s.jsx(d.Combobox,{id:"agent-view-agent-filter",triggerVariant:"button",multiple:!0,searchType:"substring",placeholder:"All agents",options:pe,value:ne,onValueChange:st,showSelectionCountBadge:!0,showClearAll:!0,clearAllLabel:"Clear agents"})]})]}),R==="error"?s.jsxs("div",{className:"agent-view__state agent-view__state--error",role:"alert",children:[s.jsx(d.Icon,{name:"triangle-alert",size:24,color:"var(--color-semantic-destructive-600)"}),s.jsx("p",{className:"agent-view__state-message",children:q??cs}),s.jsx(d.Button,{variant:"secondary",size:"S",onClick:J,children:"Try again"})]}):R==="loading"&&E.length===0?s.jsxs("div",{className:"agent-view__state","aria-live":"polite",children:[s.jsx(d.Icon,{name:"loader",size:24,color:"var(--color-brand-600)",className:"agent-view__progress-icon--spinning",screenReaderText:Kt}),s.jsx("p",{className:"agent-view__state-message",children:Kt})]}):E.length===0?s.jsx(mn,{}):s.jsxs("div",{className:"agent-view__board",children:[Ys.map(_=>s.jsx(rs,{column:Qe[_],agents:Fe[_]??[],...ze},_)),s.jsx("div",{className:"agent-view__split-column",children:Xs.map(_=>s.jsx(rs,{column:Qe[_],agents:Fe[_]??[],isSplit:!0,...ze},_))})]}),m&&s.jsx(js,{agent:m,invocationId:m.invocation_id,open:!0,jwt:e,headers:T,agentUrl:i,agentChecklistUrl:l,agentResourcesUrl:o,agentTimelineUrl:h,agentChatUrl:u,agentConversationUrl:v,pauseAgentUrl:g,resumeAgentUrl:k,enableUpload:x,adminMode:O,initialChecklist:te[m.invocation_id]??null,usePusherToRepoll:j,pusherChannelPrefix:N,subscribeToPusher:P,onClose:Ce},m.id),s.jsx(Es,{open:ee,onClose:()=>ve(!1),onStart:nt,agentDefinitions:Y})]})},Ra=(e,t)=>{const n=Date.now(),a=t.trim()||e.agent_intent;return{id:`agent-${n}`,invocation_id:`inv-${n}`,agent_definition_ref:e.ref,agent_intent:e.agent_intent,invocation_name:a,application_id:Zs,created_by:Qs,status:y["generating-a-response"],context_ref:null,checklist_ref:null}};exports.AgentMonitorKanban=Ea;exports.AgentServiceClient=tt;exports.AgentServiceError=Se;exports.AgentView=js;exports.DEFAULT_PUSHER_CHANNEL_PREFIX=Nt;exports.HttpChatConnector=Ss;exports.MESSAGE_TYPE_REPOLL=kt;exports.NewAgentModal=Es;exports.PUSHER_AGENT_MESSAGE_EVENT=hs;exports.REPOLL_TARGET=ge;exports.buildAgentFromDefinition=Ra;exports.buildAgentPusherChannel=ps;exports.createHttpChatConnectorFactory=Ct;exports.formatUserFileChatCardText=ra;exports.mapApiAgent=yt;exports.mapApiAgentDefinition=bt;exports.mapApiAgentStatus=_s;exports.mapApiAgentTimelineResponse=xs;exports.mapApiChecklistEndpointResponse=jt;exports.mapApiChecklistItem=At;exports.mapApiChecklistResponse=ks;exports.mapApiChecklistStatus=fs;exports.mapApiConversationMessages=ys;exports.mapApiOpeningMessage=Pe;exports.mapApiResource=vs;exports.mapApiResourcesEndpointResponse=ws;exports.mapApiTripOption=ea;exports.parseConversationContentCaption=aa;exports.parseRepollMessages=ms;exports.useAgentService=bs;exports.useAgentWorkspace=As;
|
|
6
|
+
`);o=m.pop()??"";for(const v of m)g(v)}if(o.trim()&&g(o),!l)throw new Te(502,null,"Chat stream ended without any events");return l}}const Ka=e=>{let t=null;const s=[];for(const a of e.split(`
|
|
7
|
+
`)){const i=a.trimEnd();i.startsWith("event:")?t=i.slice(6).trim():i.startsWith("data:")&&s.push(i.slice(5).trim())}return{event:t,data:s.length>0?s.join(`
|
|
8
|
+
`):null}},An=e=>{try{return JSON.parse(e)}catch{return}};function Ja(e,t){const s=new FormData;s.append("body",JSON.stringify(e));for(const a of t)s.append("files",a,a.name);return s}const Va={id:Rn,author:ne.agent,text:"Type a question or upload a file. You can ask it how it's progressing, or send an instruction and it'll act on it."};let yn=0;const Ya=e=>(yn+=1,`${e}-${Date.now()}-${yn}`),Wa=e=>{const t=e.destination?` to ${e.destination}`:"";return`Let's get started on ${e.tripName.trim()||e.destination.trim()||"this task"}${t}. What will you do first?`};class Yn{constructor(t,s,a={}){this.seededChecklist=[],this.client=t,this.agentId=s,this.chatId=a.chatId??s,this.opening=a.openingMessage??Va,this.model=a.model}openingMessage(){return this.opening}async bootstrapConversation(){const t=await this.client.getConversation(this.chatId),s=Vn(t.messages);return s.length===0?[this.opening]:s}async start(t){return{...await this.exchange(Wa(t)),phase:U.running}}sendMessage(t,s){return this.exchange(t,s)}async pause(){await this.client.pauseAgent(this.agentId)}async resume(){await this.client.resumeAgent(this.agentId)}seedChecklist(t){this.seededChecklist=t}async exchange(t,s){var l;const a=[{role:Pa.user,content:t}],i=await this.client.chat(this.agentId,{messages:a,chat_id:this.chatId,...this.model?{model:this.model}:{},moderation_enabled:!0,meta:{feature_id:"agent_view",source:"agent_view_frontend"}},...s&&s.length>0?[{uploadFiles:s}]:[]),o={id:i.event_id||Ya("msg-agent"),author:ne.agent,text:i.message.content,...(l=i.follow_up_prompts)!=null&&l.length?{followUpPrompts:i.follow_up_prompts}:{}};try{const g=await this.client.getAgent(this.agentId),{checklist:h}=Jn(this.agentId,g);return this.seededChecklist=h,{message:o,checklist:h}}catch{return{message:o,...this.seededChecklist.length?{checklist:this.seededChecklist}:{}}}}}const en=(e,t)=>s=>{var a,i;return new Yn(e,s.invocation_id,{model:t==null?void 0:t.model,chatId:((a=t==null?void 0:t.resolveChatId)==null?void 0:a.call(t,s))??(t==null?void 0:t.chatId)??s.invocation_id,openingMessage:((i=t==null?void 0:t.resolveOpeningMessage)==null?void 0:i.call(t,s))??(t==null?void 0:t.openingMessage)})},Wn=e=>e instanceof Te?e.message:e instanceof TypeError?"Network error while contacting the agent service.":e instanceof Error&&e.message?e.message:In,Xn=e=>{if(e instanceof Te){if(e.status===403)return Ms;if(e.status===409)return Us;if(e.status===404)return Ds}return Ps},Xa=e=>{const t={};for(const s of e){const a=rt(s);if(!a)continue;const i=s.invocation_id??s.id;t[i]=a,t[s.id]=a}return t},Za=e=>JSON.stringify(e),Kt=(e,t)=>JSON.stringify(e)===JSON.stringify(t),Zn=e=>{const{jwt:t,headers:s,urls:a}=e,i=JSON.stringify(s??{}),o=Za(a),l=r.useMemo(()=>new Ct({token:t,headers:s,urls:a}),[t,o]);r.useLayoutEffect(()=>{l.setHeaders(s)},[l,i]);const[g,h]=r.useState([]),[k,m]=r.useState([]),[v,x]=r.useState({}),[j,_]=r.useState("loading"),[C,T]=r.useState(null),[O,f]=r.useState(0),A=r.useCallback((N,H)=>{const M=N.map(st),V=H.map(Xt),B=Xa(N);h(J=>Kt(J,M)?J:M),m(J=>Kt(J,V)?J:V),x(J=>Kt(J,B)?J:B),_("idle"),T(null)},[]);r.useEffect(()=>{let N=!1;return _("loading"),T(null),(async()=>{try{const[H,M]=await Promise.all([l.listAgents(),l.listAgentDefinitions()]);if(N)return;A(H,M)}catch(H){if(N)return;h([]),m([]),x({}),_("error"),T(Wn(H))}})(),()=>{N=!0}},[A,l,O]);const p=r.useCallback(()=>{f(N=>N+1)},[]),S=r.useCallback(async()=>{try{const[N,H]=await Promise.all([l.listAgents(),l.listAgentDefinitions()]);A(N,H)}catch{}},[A,l]),R=r.useCallback(async N=>{const[H,M]=await Promise.all([l.getAgentChecklist(N),l.getAgent(N).catch(()=>null)]);return Qt(N,H,M??void 0)},[l]),L=r.useCallback(async N=>l.listAllAgentResources(N),[l]),K=r.useCallback(async({definition:N,invocationName:H})=>{const M=await l.createAgent(N.ref,{invocationName:H}),V=await l.getAgent(M.id),B=st(V),J=rt(V);return h(ae=>[B,...ae]),J&&x(ae=>({...ae,[B.invocation_id]:J,[B.id]:J})),B},[l]),P=r.useCallback(async N=>{const H=await l.archiveAgent(N),M=st(H);return h(V=>V.map(B=>B.id===M.id||B.id===N||B.invocation_id===N?M:B)),M},[l]),ee=r.useCallback(N=>{h(H=>H.filter(M=>M.id!==N&&M.invocation_id!==N))},[]),ce=r.useCallback(async N=>{await l.deleteAgent(N),ee(N)},[l,ee]),se=r.useMemo(()=>en(l,{resolveOpeningMessage:N=>v[N.invocation_id]??v[N.id]}),[l,v]);return{agents:g,agentDefinitions:k,loadState:j,loadError:C,reload:p,refresh:S,fetchAgentChecklist:R,fetchAgentResources:L,createAgent:K,archiveAgent:P,deleteAgent:ce,removeAgent:ee,chatConnector:se}},Qa=e=>JSON.stringify(e),Qn=e=>{const{agent:t,jwt:s,headers:a,urls:i,chatId:o}=e,l=JSON.stringify(a??{}),g=Qa(i),h=r.useMemo(()=>new Ct({token:s,headers:a,urls:{agent:i.agentUrl,agentChecklist:i.agentChecklistUrl,...i.agentResourcesUrl?{agentResources:i.agentResourcesUrl}:{},...i.agentTimelineUrl?{agentTimeline:i.agentTimelineUrl}:{},agentChat:i.agentChatUrl,agentConversation:i.agentConversationUrl,...i.pauseAgentUrl?{pauseAgent:i.pauseAgentUrl}:{},...i.resumeAgentUrl?{resumeAgent:i.resumeAgentUrl}:{},...i.archiveAgentUrl?{archiveAgent:i.archiveAgentUrl}:{}}}),[s,g]);r.useLayoutEffect(()=>{h.setHeaders(a)},[h,l]);const k=r.useCallback(async f=>{const[A,p]=await Promise.all([h.getAgentChecklist(f),h.getAgent(f).catch(()=>null)]);return Qt(f,A,p??void 0)},[h]),m=r.useCallback(async f=>h.listAllAgentResources(f),[h]),v=r.useCallback(async f=>h.getAgentContext(f),[h]),x=r.useCallback(async(f,A)=>h.getAgentResourceHtml(f,A),[h]),j=r.useCallback(async f=>{const A=await h.getAgentTimeline(f);return Kn(A)},[h]),_=r.useCallback(async(f,A)=>{await h.updateAgent(f,{invocationName:A})},[h]),C=r.useCallback(async f=>st(await h.archiveAgent(f)),[h]),T=r.useCallback(async f=>{await h.deleteAgent(f)},[h]);return{connector:r.useMemo(()=>en(h,{chatId:o??t.invocation_id})(t),[h,t.invocation_id,o]),fetchAgentChecklist:k,fetchAgentContext:v,fetchAgentResources:m,fetchAgentResourceHtml:x,fetchAgentTimeline:j,updateAgentInvocationName:_,archiveAgent:C,deleteAgent:T}},er=3e4,tr=(e,t)=>{const s=e.hasRunBefore?t||"This trip":e.tripName.trim()||"A new trip",a=e.destination?` to ${e.destination}`:"",i=e.hasRunBefore?" It has run before.":"";return`${s}${a}.${i}`.trim()},nr=e=>{switch(e){case y.paused:return U.paused;case y.complete:return U.complete;default:return U.running}},Nn=e=>e===y.paused,bn=(e,t)=>{t([ve(e)])},sr=(e,t)=>e.length===t.length&&e.every((s,a)=>{const i=t[a];return i!==void 0&&s.id===i.id&&s.text===i.text}),es=({agent:e,invocationId:t,open:s,onClose:a,jwt:i,headers:o,agentUrl:l,agentChecklistUrl:g,agentResourcesUrl:h,agentTimelineUrl:k,agentChatUrl:m,agentConversationUrl:v,pauseAgentUrl:x,resumeAgentUrl:j,archiveAgentUrl:_,chatId:C,enableUpload:T,adminMode:O=!1,initialBrief:f,initialPhase:A,initialChecklist:p,usePusherToRepoll:S=!1,pusherChannelPrefix:R=Wt,subscribeToPusher:L,onArchived:K,onDeleted:P})=>{const[ee,ce]=r.useState(C??t),[se,N]=r.useState("chat"),[H,M]=r.useState(!1),{connector:V,fetchAgentChecklist:B,fetchAgentContext:J,fetchAgentResources:ae,fetchAgentResourceHtml:it,fetchAgentTimeline:de,updateAgentInvocationName:Ae,archiveAgent:ye,deleteAgent:ze}=Qn({agent:{...e,invocation_id:t},jwt:i,headers:o,chatId:ee,urls:{agentUrl:l,agentChecklistUrl:g,agentResourcesUrl:h,agentTimelineUrl:k,agentChatUrl:m,agentConversationUrl:v,pauseAgentUrl:x,resumeAgentUrl:j,archiveAgentUrl:_}}),F=r.useRef(V),[X,Ie]=r.useState(e.invocation_name),[lt,ue]=r.useState(0),[Ne,qe]=r.useState(null),[Z,Oe]=r.useState(A??(f?U.running:nr(e.status))),[te,Q]=r.useState([]),[Ke,be]=r.useState(0),[St,Le]=r.useState(),[Et,Ce]=r.useState(null),[Se,Pe]=r.useState([]),[Je,Ve]=r.useState(!1),[jt,he]=r.useState(null),[ot,ie]=r.useState(null),[ct,ge]=r.useState(null),[dt,Me]=r.useState(!1),[Rt,Ue]=r.useState(null),[pe,De]=r.useState(null),[ut,ht]=r.useState(!1),[gt,Ye]=r.useState(null),[$e,He]=r.useState(p??null),[Tt,pt]=r.useState(!1),[It,We]=r.useState(null),[Ot,mt]=r.useState(void 0),[Xe,Ze]=r.useState(!1),[d,b]=r.useState(!1),[E,Y]=r.useState(null),[me,Ee]=r.useState(!1),[_e,Qe]=r.useState(!1),[tn,nn]=r.useState(!1),[as,Lt]=r.useState(!1),[rs,_t]=r.useState(null),[sn,an]=r.useState(!1),[is,Pt]=r.useState(!1),[ls,ft]=r.useState(null),[rn,re]=r.useState(null),[os,Mt]=r.useState(()=>Nn(e.status)),G=!!e.archivedAt,[vt,et]=r.useState(!1),[xt,cs]=r.useState(!1),[wt,ds]=r.useState(!1),ln=r.useRef(vt),on=r.useRef(e.invocation_name),cn=r.useRef(0),dn=r.useRef(0),Be=r.useRef(0);r.useEffect(()=>{F.current=V},[V]),r.useEffect(()=>{on.current=e.invocation_name},[e.invocation_name]),r.useEffect(()=>{ln.current=vt},[vt]),r.useEffect(()=>{ce(C??t),N("chat"),M(!1),Q([]),be(u=>u+1),qe(null)},[t,C]),r.useEffect(()=>(Be.current+=1,mt(void 0),Ze(!1),b(!1),Y(null),()=>{Be.current+=1}),[t]),r.useEffect(()=>{Mt(Nn(e.status))},[e.status,t]),r.useEffect(()=>{Ie(e.invocation_name),ue(u=>u+1)},[e.invocation_name]),r.useEffect(()=>{G&&N("timeline")},[G]),r.useEffect(()=>{if(!s||f||G)return;const u=F.current.bootstrapConversation;if(!u){bn(F.current.openingMessage(),Q);return}let w=!1;return et(!0),(async()=>{try{const I=await u.call(F.current);if(w)return;Q(I.map(ve))}catch{w||bn(F.current.openingMessage(),Q)}finally{w||et(!1)}})(),()=>{w=!0}},[s,f,G,t,ee]);const le=r.useCallback(()=>{const u=++cn.current;(async()=>{var w,I;try{const z=await B(t);if(u!==cn.current)return;He(fe=>JSON.stringify(fe)===JSON.stringify(z.checklist)?fe:z.checklist),We(null),(I=(w=F.current).seedChecklist)==null||I.call(w,z.checklist)}catch{}})()},[B,t]),je=r.useCallback(()=>{h&&(async()=>{try{const u=await ae(t);Pe(u),he(null)}catch{}})()},[h,ae,t]),oe=r.useCallback(()=>{if(!k)return;const u=++dn.current;(async()=>{try{const w=await de(t);if(u!==dn.current)return;De(I=>JSON.stringify(I)===JSON.stringify(w)?I:w),Ye(null)}catch{}})()},[k,de,t]),tt=r.useCallback(u=>{const w=F.current.bootstrapConversation;w&&(async()=>{try{const I=await w.call(F.current);if(ln.current)return;const z=I.map(ve);let fe=!1;Q(gn=>sr(gn,z)?gn:(fe=!0,z)),fe&&(u!=null&&u.refreshSidePanelsOnChange)&&(le(),oe())}catch{}})()},[le,oe]),us=r.useCallback(u=>{switch(u){case ke.checklist:le();return;case ke.resources:je();return;case ke.chat:tt();return;case ke.timeline:oe();return;case ke.all:default:le(),je(),tt(),oe()}},[le,tt,je,oe]),un=Ia({enabled:s&&S,channelPrefix:R,agentId:e.id,subscribeToPusher:L,onRepoll:us});r.useEffect(()=>{if(!s||f||G||un)return;const u=window.setInterval(()=>{tt({refreshSidePanelsOnChange:!0})},er);return()=>{window.clearInterval(u)}},[s,f,G,un,t,ee,tt]);const Ut=r.useCallback(u=>{var w,I;u.checklist?(He(u.checklist),(I=(w=F.current).seedChecklist)==null||I.call(w,u.checklist)):le(),u.phase&&Oe(u.phase),je(),oe()},[le,je,oe]);r.useEffect(()=>{var u,w;!s||f||p&&p.length>0&&((w=(u=F.current).seedChecklist)==null||w.call(u,p))},[s,f,p]),r.useEffect(()=>{if(!s||f)return;let u=!1;return pt(w=>p!=null&&p.length?!1:w||$e===null||$e.length===0),We(null),(async()=>{var w,I;try{const z=await B(t);if(u)return;p!=null&&p.length||(He(z.checklist),(I=(w=F.current).seedChecklist)==null||I.call(w,z.checklist))}catch{!u&&!(p!=null&&p.length)&&We(yt)}finally{u||pt(!1)}})(),()=>{u=!0}},[s,t,f,p,B]),r.useEffect(()=>{if(!s||!h)return;let u=!1;return Ve(!0),he(null),(async()=>{try{const w=await ae(t);u||Pe(w)}catch{u||he(js)}finally{u||Ve(!1)}})(),()=>{u=!0}},[s,t,h,ae]);const hs=r.useCallback(()=>{ie(null),ge(null),Ue(null),Me(!1)},[]),gs=r.useCallback(u=>{if(u.misRecordUrl){window.open(u.misRecordUrl,"_blank","noopener,noreferrer");return}ie(u),ge(null),Ue(null),Me(!0),(async()=>{try{const w=await it(t,u.id);ge(w)}catch{Ue(Rs)}finally{Me(!1)}})()},[it,t]);r.useEffect(()=>{if(!s||!k)return;let u=!1;return ht(w=>w||pe===null),Ye(null),(async()=>{try{const w=await de(t);u||De(w)}catch{u||Ye(Tn)}finally{u||ht(!1)}})(),()=>{u=!0}},[s,t,k,de]),r.useEffect(()=>{if(!s||!f)return;let u=!1;const w={id:`user-brief-${Date.now()}`,author:ne.user,text:tr(f,on.current)};return(async()=>{var z,fe;const I=await F.current.start(f);u||(Q([ve(F.current.openingMessage()),ve(w),ve(I.message)]),I.checklist?(He(I.checklist),(fe=(z=F.current).seedChecklist)==null||fe.call(z,I.checklist)):le(),Oe(I.phase??U.running),je(),oe())})(),()=>{u=!0}},[s,f,t,le,je,oe]);const ps=r.useCallback(u=>{Ce(Ca(u))},[]),Dt=C??t,kt=pe==null?void 0:pe.chatSessions,hn=kt!=null&&kt.length?kt.reduce((u,w)=>Date.parse(w.timestamp)<Date.parse(u.timestamp)?w:u).sessionId:void 0,$t=r.useCallback(()=>{N("chat"),M(!1),ee!==Dt&&(ce(Dt),Q([]),be(u=>u+1))},[ee,Dt]),ms=r.useCallback(u=>{if(u===hn){$t();return}ce(u),M(!0),N("chat"),Q([]),be(w=>w+1)},[hn,$t]),_s=r.useCallback(u=>{Ce(null),Le(u),be(w=>w+1)},[]),fs=r.useCallback(async()=>{re(null),Ee(!0);try{await F.current.pause(),Oe(U.paused),Mt(!0)}catch{re(Ts)}finally{Ee(!1)}},[]),vs=r.useCallback(async()=>{re(null),Qe(!0);let u=!1;try{await F.current.resume(),u=!0,Oe(U.running),Mt(!1),et(!0);const w={id:`wake-${Date.now()}`,author:ne.user,text:pn};Q(z=>[...z,ve(w)]);const I=await F.current.sendMessage(pn);Q(z=>[...z,ve(I.message)]),Ut(I)}catch{re(u?Fs:Bs)}finally{Qe(!1),et(!1)}},[Ut]),xs=r.useCallback(async()=>{re(null),_t(null),nn(!0);try{await ye(t),Lt(!1),K==null||K(),a()}catch{_t(Jt),re(Jt)}finally{nn(!1)}},[t,ye,K,a]),ws=r.useCallback(async()=>{re(null),ft(null),an(!0);try{await ze(t),Pt(!1),P==null||P(),a()}catch(u){ft(Xn(u))}finally{an(!1)}},[t,ze,P,a]),ks=r.useCallback(u=>{const w=u.trim(),I=X;if(qe(null),!w){ue(z=>z+1);return}w!==I&&(Ie(w),(async()=>{try{await Ae(t,w)}catch{Ie(I),ue(z=>z+1),qe(Gs)}})())},[X,t,Ae]),As=r.useCallback(()=>{if(!O||Xe||d)return;const u=++Be.current;b(!0),Y(null),(async()=>{try{const w=await J(t);if(Be.current!==u)return;mt(w),Ze(!0)}catch{Be.current===u&&Y(Es)}finally{Be.current===u&&b(!1)}})()},[O,Xe,d,J,t]),ys=$e;return n.jsxs(n.Fragment,{children:[n.jsxs(c.Modal,{open:s,closeHandler:a,hideCloseButton:!0,className:"agent-workspace",children:[n.jsxs(c.Modal.Header,{className:"agent-workspace__header",children:[n.jsxs("div",{className:"agent-workspace__header-title",children:[n.jsx("span",{className:"agent-workspace__header-avatar","aria-hidden":"true",children:n.jsx(c.Icon,{name:"ask-arbor",size:24})}),n.jsx(c.Modal.Title,{children:G?n.jsx("span",{className:"agent-workspace__header-name",children:X}):n.jsx(c.EditableText,{className:"agent-workspace__header-name",text:X,onEditSave:ks},lt)}),n.jsx("span",{className:W("agent-workspace__phase",`agent-workspace__phase--${Z}`),children:Ks[Z]}),G?n.jsx("span",{className:"agent-workspace__phase agent-workspace__phase--archived",children:"Archived"}):null,Ne&&n.jsx("p",{className:"agent-workspace__error agent-workspace__name-error",role:"alert",children:Ne})]}),n.jsxs("div",{className:"agent-workspace__header-actions",children:[n.jsx(c.Button,{variant:xt?"secondary":"primary",size:"S",iconLeftName:"clipboard-list",iconLeftScreenReaderText:"Toggle checklist","aria-pressed":!xt,onClick:()=>cs(u=>!u),children:"Checklist"}),n.jsx(c.Button,{variant:wt?"secondary":"primary",size:"S",iconLeftName:"files",iconLeftScreenReaderText:"Toggle resources","aria-pressed":!wt,onClick:()=>ds(u=>!u),children:"Resources"}),n.jsx(c.Button,{variant:"secondary",size:"S",iconLeftName:"x",iconLeftScreenReaderText:"Close",onClick:a,children:"Close"})]})]}),n.jsxs(c.Modal.Body,{className:W("agent-workspace__body",{"agent-workspace__body--no-checklist":xt,"agent-workspace__body--no-resources":wt}),children:[n.jsxs("section",{className:W("agent-workspace__panel","agent-workspace__panel--chat",{"agent-workspace__panel--timeline":!!k&&(G||se==="timeline")}),"aria-label":"Agent",children:[n.jsxs("div",{className:"agent-workspace__panel-header",children:[n.jsx(c.Heading,{level:4,children:"Agent"}),x&&!G&&Z===U.running&&n.jsx(c.Button,{className:"agent-workspace__panel-header-action",variant:"secondary-destructive",size:"S",iconLeftName:"circle-x",iconLeftScreenReaderText:"Pause",disabled:me,onClick:()=>void fs(),children:me?"Pausing…":"Pause agent"}),j&&!G&&Z===U.paused&&os&&n.jsx(c.Button,{className:"agent-workspace__panel-header-action",variant:"secondary",size:"S",iconLeftName:"iteration-ccw",iconLeftScreenReaderText:"Resume",disabled:_e,onClick:()=>void vs(),children:_e?"Resuming…":"Resume agent"}),_&&!G&&n.jsx(c.Button,{className:"agent-workspace__panel-header-action",variant:"secondary",size:"S",iconLeftName:"archive",iconLeftScreenReaderText:"Archive",onClick:()=>{_t(null),re(null),Lt(!0)},children:"Archive agent"}),O&&G&&n.jsx(c.Button,{className:"agent-workspace__panel-header-action",variant:"secondary-destructive",size:"S",onClick:()=>{ft(null),re(null),Pt(!0)},children:"Delete agent"})]}),rn&&n.jsx("p",{className:"agent-workspace__error agent-workspace__lifecycle-error",role:"alert",children:rn}),k&&!G&&n.jsxs(c.Tabs,{className:"agent-workspace__center-tabs","aria-label":"Center panel",children:[n.jsx(c.Tabs.Item,{active:se==="chat",tabElementProps:{id:"agent-center-tab-chat",onClick:()=>N("chat")},children:"Chat"}),n.jsx(c.Tabs.Item,{active:se==="timeline",tabElementProps:{id:"agent-center-tab-timeline",onClick:()=>N("timeline")},children:"Timeline"})]}),k&&!G&&se==="chat"&&H&&n.jsx("div",{className:"agent-workspace__center-back",children:n.jsx(c.Button,{variant:"tertiary",size:"S",iconLeftName:"arrow-left",iconLeftScreenReaderText:"Back to main chat",onClick:$t,children:"Back to main chat"})}),k&&(G||se==="timeline")&&n.jsx(Na,{timeline:pe,isLoading:ut,error:gt,onOpenChatSession:G?void 0:ms}),!G&&n.jsx("div",{className:"agent-workspace__chat-keep-alive",hidden:!!k&&se!=="chat",children:n.jsx(oa,{connector:V,phase:Z,chatHistory:te,chatSessionKey:Ke,startQuery:St,clarificationMessage:Et,enableUpload:T,onTurn:Ut,onAwaitingChange:et,onClarificationPrompt:_s,onDismissClarification:()=>Ce(null)})}),G&&!k&&n.jsx("p",{className:"agent-workspace__timeline-status",role:"status",children:"Chat is not available for archived agents."})]}),!xt&&n.jsx(ca,{checklist:ys,isLoading:Tt,error:It,phase:Z,canRequestInput:!G&&Z===U.running&&!vt,onAttentionItemClick:ps,adminMode:O,context:Ot,contextLoaded:Xe,contextLoading:d,contextError:E,onContextSelect:As},t),!wt&&n.jsx(ha,{resources:Se,isLoading:Je,error:jt,onOpenResource:gs}),n.jsx(da,{resource:ot,html:ct,isLoading:dt,error:Rt,onClose:hs})]})]}),n.jsx(Ln,{open:as,isInProgress:Z===U.running||Z===U.paused&&!Mn($e??void 0),isArchiving:tn,error:rs,onCancel:()=>{tn||(_t(null),Lt(!1))},onConfirm:()=>{xs()}}),n.jsx(Pn,{open:is,isDeleting:sn,error:ls,onCancel:()=>{sn||(ft(null),Pt(!1))},onConfirm:()=>{ws()}})]})},ar="Unable to load agent definitions. Please try again.",rr="Unable to start the agent.",Cn="Loading agents…",ts=({open:e,onClose:t,onStart:s,agentDefinitions:a,definitionsState:i="idle",definitionsError:o=null,onRetryDefinitions:l,embedded:g=!1})=>{const[h,k]=r.useState(void 0),[m,v]=r.useState(""),[x,j]=r.useState(!1),[_,C]=r.useState(null),T=[...a].sort((R,L)=>R.display_name.localeCompare(L.display_name)).map(R=>({value:R.ref,label:R.display_name}));r.useEffect(()=>{e&&(k(void 0),v(""),j(!1),C(null))},[e]);const O=h!==void 0&&m.trim().length>0,f=r.useCallback(R=>{const L=a.find(K=>K.ref===R[0]);L&&k(L)},[a]),A=r.useCallback(async()=>{if(!(!h||!O||x)){j(!0),C(null);try{await s({definition:h,invocationName:m.trim()})}catch(R){C(R instanceof Error?R.message:rr)}finally{j(!1)}}},[O,h,m,x,s]);if(i==="idle"&&a.length===0||!e)return null;const p=n.jsxs("div",{className:"new-agent__header-title",children:[n.jsx("span",{className:"new-agent__header-avatar","aria-hidden":"true",children:n.jsx(c.Icon,{name:"ask-arbor",size:24})}),g?n.jsx("h2",{className:"new-agent__title",children:"Start an agent"}):n.jsx(c.Modal.Title,{children:"Start an agent"})]});let S;return i==="loading"?S=n.jsxs("div",{className:"new-agent__state","aria-live":"polite",children:[n.jsx(c.Icon,{name:"loader",size:24,color:"var(--color-brand-600)",className:"new-agent__spinner",screenReaderText:Cn}),n.jsx("p",{className:"new-agent__state-message",children:Cn})]}):i==="error"?S=n.jsxs("div",{className:"new-agent__state new-agent__state--error",role:"alert",children:[n.jsx(c.Icon,{name:"triangle-alert",size:24,color:"var(--color-semantic-destructive-600)"}),n.jsx("p",{className:"new-agent__state-message",children:o??ar}),l?n.jsx(c.Button,{variant:"secondary",size:"S",onClick:l,children:"Try again"}):null]}):S=n.jsxs("form",{className:"new-agent__form","aria-label":"Start an agent",onSubmit:R=>{R.preventDefault(),O&&!x&&A()},children:[n.jsxs("div",{className:"new-agent__type-field",children:[n.jsx("label",{className:"new-agent__type-label",htmlFor:"new-agent-type",children:"What would you like your agent to do?"}),n.jsx(c.SelectDropdown,{id:"new-agent-type",placeholder:"Which agent would you like to start?",options:T,selectedValues:h?[h.ref]:[],onSelectionChange:f})]}),n.jsxs("div",{className:"new-agent__type-field",children:[n.jsx("label",{className:"new-agent__type-label",htmlFor:"new-agent-invocation-name",children:"Name"}),n.jsx(c.TextInput,{id:"new-agent-invocation-name",value:m,placeholder:"What would you like to call your agent?",onChange:R=>v(R.target.value)})]}),_?n.jsx("p",{className:"new-agent__error",role:"alert",children:_}):null,n.jsx("div",{className:"new-agent__actions",children:n.jsx(c.Button,{type:"submit",variant:"primary",className:W("new-agent__start-button",{"new-agent__start-button--starting":x}),disabled:!O||x,iconLeftName:x?"loader":"sparkles",iconLeftScreenReaderText:x?"Starting":void 0,children:x?"Starting…":"Start"})})]}),g?n.jsxs("div",{className:W("new-agent","new-agent--embedded"),children:[n.jsx("div",{className:"new-agent__header",children:p}),n.jsx("div",{className:"new-agent__body",children:S})]}):n.jsxs(c.Modal,{open:e,closeHandler:t,className:"new-agent",children:[n.jsx(c.Modal.Header,{className:"new-agent__header",children:p}),n.jsx(c.Modal.Body,{className:"new-agent__body",children:S})]})},Sn=e=>{window.location.assign(e)},ir=({open:e,authToken:t,headers:s,agentDefinitionsUrl:a,agentsUrl:i,closeUrl:o,successUrl:l,onClose:g,onStart:h,embedded:k=!1})=>{const m=JSON.stringify(s??{}),v=r.useMemo(()=>new Ct({token:t,headers:s,urls:{agentDefinitions:a,agents:i}}),[t,a,i,m]),[x,j]=r.useState([]),[_,C]=r.useState("loading"),[T,O]=r.useState(null),[f,A]=r.useState(0);r.useEffect(()=>{if(!e)return;let L=!1;return C("loading"),O(null),(async()=>{try{const K=await v.listAgentDefinitions();if(L)return;j(K.map(Xt)),C("idle")}catch(K){if(L)return;j([]),O(Wn(K)),C("error")}})(),()=>{L=!0}},[v,e,f]);const p=r.useCallback(()=>{g==null||g(),o&&Sn(o)},[o,g]),S=r.useCallback(async L=>{await v.createAgent(L.definition.ref,{invocationName:L.invocationName}),h==null||h(L),l&&Sn(l)},[v,h,l]),R=r.useCallback(()=>{A(L=>L+1)},[]);return n.jsx(ts,{open:e,onClose:p,onStart:S,agentDefinitions:x,definitionsState:_,definitionsError:T,onRetryDefinitions:R,embedded:k})},lr=e=>"agentDefinitionsUrl"in e,ns=e=>lr(e)?n.jsx(ir,{...e}):n.jsx(ts,{...e}),or=e=>e.archivedAt?"archived":e.status===y.paused?"paused":null,cr=e=>{if(e==="archived")return Ns;if(e==="paused")return at[y.paused].statusIcon},dr=({column:e,overlayIcon:t,label:s})=>{const a=t??e.statusIcon;return a?n.jsx("span",{className:"agent-view__status-indicator",children:n.jsx(c.Icon,{name:a.name,size:16,color:a.color,className:W({"agent-view__progress-icon--spinning":a.spin}),screenReaderText:s})}):n.jsx("span",{className:W("agent-view__dot",{[`agent-view__dot--${e.dotModifier}`]:e.dotModifier}),children:n.jsx(c.Dot,{colour:e.dotColour,label:s})})},ss=({agent:e,agentName:t,column:s,isExpanded:a,isLoading:i,checklist:o,error:l,canArchive:g,canDelete:h=!1,onToggle:k,onViewAgent:m,onArchive:v,onDelete:x})=>{const{id:j,invocation_name:_}=e,C=`agent-card-${j}-header`,T=`agent-card-${j}-progress`,O=or(e),f=cr(O);return n.jsx("li",{className:W("agent-view__card",{"agent-view__card--expanded":a,"agent-view__card--paused":O==="paused","agent-view__card--archived":O==="archived"}),children:n.jsxs(c.Card,{spacing:"dense",children:[n.jsx("button",{type:"button",className:"agent-view__card-toggle","aria-expanded":a,"aria-controls":T,"aria-label":_,id:C,onClick:()=>k(j),children:n.jsxs("div",{className:"agent-view__card-content",children:[n.jsx(dr,{column:s,overlayIcon:f}),n.jsx("span",{className:"agent-view__card-invocation-name",children:_}),n.jsx("span",{className:"agent-view__card-agent-name",children:t}),O==="paused"?n.jsx("span",{className:"agent-view__card-state-pill",children:"Paused"}):null,O==="archived"?n.jsx("span",{className:"agent-view__card-state-pill",children:"Archived"}):null,n.jsx(c.Icon,{name:a?"chevron-up":"chevron-down",size:16,className:"agent-view__card-chevron"})]})}),a&&n.jsxs("div",{id:T,"aria-labelledby":C,className:"agent-view__card-progress",children:[i&&n.jsxs("div",{className:"agent-view__progress-loading","aria-live":"polite",children:[n.jsx(c.Icon,{name:"loader",size:16,color:"var(--color-brand-600)",className:"agent-view__progress-icon--spinning",screenReaderText:Fe}),n.jsx("span",{children:Fe})]}),!i&&l&&n.jsx("p",{className:"agent-view__progress-error",role:"alert",children:l}),!i&&!l&&o!==null&&n.jsx(aa,{checklist:o}),!i&&!l&&o===null&&n.jsxs("div",{className:"agent-view__progress-loading","aria-live":"polite",children:[n.jsx(c.Icon,{name:"loader",size:16,color:"var(--color-brand-600)",className:"agent-view__progress-icon--spinning",screenReaderText:Fe}),n.jsx("span",{children:Fe})]}),n.jsxs("div",{className:"agent-view__card-actions",children:[g?n.jsx(c.Button,{variant:"secondary",size:"S",iconLeftName:"archive",iconLeftScreenReaderText:"Archive",onClick:()=>v==null?void 0:v(e),children:"Archive"}):h?n.jsx(c.Button,{variant:"secondary-destructive",size:"S",onClick:()=>x==null?void 0:x(e),children:"Delete"}):n.jsx("span",{}),n.jsx(c.Button,{variant:"secondary",size:"S",onClick:()=>m==null?void 0:m(e),children:"View agent"})]})]})]})})},ur=({column:e,agents:t,expandedAgentId:s,loadingAgentId:a,checklistByInvocationId:i,errorByAgentId:o,definitionNameByRef:l,onToggleAgent:g,onViewAgent:h,onArchiveAgent:k,canArchive:m})=>n.jsxs("section",{className:"agent-view__column","aria-label":e.title,children:[n.jsxs("div",{className:"agent-view__column-header",children:[n.jsx(c.Heading,{level:4,children:e.title}),n.jsx("span",{className:"agent-view__column-count",children:t.length})]}),n.jsx("ul",{className:"agent-view__card-list",children:t.map(v=>n.jsx(ss,{agent:v,agentName:Nt(v,l),column:e,isExpanded:s===v.id,isLoading:a===v.id,checklist:i[v.invocation_id]??null,error:o[v.id]??null,canArchive:m&&!v.archivedAt,onToggle:g,onViewAgent:h,onArchive:k},v.id))})]}),Nt=(e,t)=>t.get(e.agent_definition_ref)??e.agent_definition_ref.replace(/_/g," "),hr=({jwt:e,headers:t,agentDefinitionsUrl:s,agentsUrl:a,agentUrl:i,agentChecklistUrl:o,agentResourcesUrl:l,agentTimelineUrl:g,agentChatUrl:h,agentConversationUrl:k,pauseAgentUrl:m,resumeAgentUrl:v,archiveAgentUrl:x,enableUpload:j,adminMode:_=!1,showHeader:C=!1,institutions:T,usePusherToRepoll:O=!1,pusherChannelPrefix:f=Wt,subscribeToPusher:A})=>{var Ze;const p=r.useMemo(()=>({agentDefinitions:s,agents:a,agent:i,agentChecklist:o,...l?{agentResources:l}:{},...g?{agentTimeline:g}:{},agentChat:h,agentConversation:k,...x?{archiveAgent:x}:{}}),[s,a,i,o,l,g,h,k,x]),[S,R]=r.useState(null),L=S?(Ze=T==null?void 0:T.find(d=>d.applicationId===S.application_id))==null?void 0:Ze.applicationUrl:void 0,K=r.useMemo(()=>{const d={...t??{}};return L?d[Re.arborApplicationUrl]=L:delete d[Re.arborApplicationUrl],d},[t,L]),{agents:P,agentDefinitions:ee,loadState:ce,loadError:se,reload:N,refresh:H,fetchAgentChecklist:M,createAgent:V,archiveAgent:B,deleteAgent:J,removeAgent:ae}=Zn({jwt:e,headers:K,urls:p}),[it,de]=r.useState(!1),[Ae,ye]=r.useState(null),[ze,F]=r.useState(null),[X,Ie]=r.useState({}),[lt,ue]=r.useState({}),[Ne,qe]=r.useState([]),[Z,Oe]=r.useState([]),[te,Q]=r.useState(null),[Ke,be]=r.useState(!1),[St,Le]=r.useState(null),[Et,Ce]=r.useState(!1),[Se,Pe]=r.useState(null),[Je,Ve]=r.useState(!1),[jt,he]=r.useState(null);r.useEffect(()=>{R(d=>d?P.find(b=>b.id===d.id)??d:null)},[P]);const ot=r.useMemo(()=>{const d=new Set(P.map(E=>E.application_id)),b=new Map((T??[]).map(E=>[E.applicationId,E.name]));return[...d].sort((E,Y)=>(b.get(E)??E).localeCompare(b.get(Y)??Y)).map(E=>({value:E,label:b.get(E)??E}))},[P,T]),ie=r.useMemo(()=>new Map(ee.map(d=>[d.ref,d.display_name])),[ee]),ct=r.useMemo(()=>[...new Set(P.map(b=>Nt(b,ie)))].sort((b,E)=>b.localeCompare(E)).map(b=>({value:b,label:b})),[P,ie]),ge=r.useMemo(()=>P.filter(d=>!(Ne.length>0&&!Ne.includes(d.application_id)||Z.length>0&&!Z.includes(Nt(d,ie)))),[P,ie,Z,Ne]),dt=ot.length>1,Me=ct.length>1,Rt=dt||Me;r.useEffect(()=>{const d=window.setInterval(()=>{H()},6e4);return()=>{window.clearInterval(d)}},[H]),r.useEffect(()=>{if(P.length===0)return;let d=!1;return(async()=>{const b=await Promise.allSettled(P.map(async E=>{const Y=await M(E.invocation_id);return{agentId:E.id,invocationId:E.invocation_id,checklist:Y.checklist}}));d||(Ie(E=>{const Y={...E};let me=!1;for(const Ee of b){if(Ee.status!=="fulfilled")continue;const{invocationId:_e,checklist:Qe}=Ee.value;JSON.stringify(E[_e])!==JSON.stringify(Qe)&&(Y[_e]=Qe,me=!0)}return me?Y:E}),ue(E=>{const Y={...E};let me=!1;return b.forEach((Ee,_e)=>{Ee.status==="rejected"&&Y[P[_e].id]!==yt&&(Y[P[_e].id]=yt,me=!0)}),me?Y:E}))})(),()=>{d=!0}},[P,M]);const Ue=r.useCallback(async d=>{if(!X[d.invocation_id]){F(d.id),ue(b=>{const E={...b};return delete E[d.id],E});try{const b=await M(d.invocation_id);Ie(E=>({...E,[d.invocation_id]:b.checklist}))}catch{ue(b=>({...b,[d.id]:yt}))}finally{F(b=>b===d.id?null:b)}}},[M,X]),pe=r.useCallback(d=>{if(Ae===d){ye(null);return}const b=P.find(({id:E})=>E===d);b&&(ye(d),Ue(b))},[P,Ae,Ue]),De=r.useMemo(()=>ge.filter(d=>!!d.archivedAt),[ge]),ut=r.useMemo(()=>ge.filter(d=>!d.archivedAt),[ge]),ht=r.useMemo(()=>{const d={};for(const b of ut){const E=Gt(b,X[b.invocation_id]);(d[E]??(d[E]=[])).push(b)}return d},[ut,X]),gt=r.useCallback(d=>{R(d)},[]),Ye=r.useCallback(d=>{Le(null),Q(d)},[]),$e=r.useCallback(()=>{Ke||(Le(null),Q(null))},[Ke]),He=r.useCallback(async()=>{if(te){be(!0),Le(null),ue(d=>{const b={...d};return delete b[te.id],b});try{await B(te.invocation_id),R(d=>(d==null?void 0:d.id)===te.id?null:d),ye(te.id),Ce(!0),Q(null)}catch{Le(Jt)}finally{be(!1)}}},[te,B]),Tt=te?Gt(te,X[te.invocation_id])!==y.complete:!1,pt=r.useCallback(async d=>{const b=await V(d);R(b),de(!1)},[V]),It=r.useCallback(d=>{he(null),Pe(d)},[]),We=r.useCallback(()=>{Je||(he(null),Pe(null))},[Je]),Ot=r.useCallback(async()=>{if(Se){Ve(!0),he(null);try{await J(Se.invocation_id),R(d=>(d==null?void 0:d.id)===Se.id?null:d),Pe(null)}catch(d){he(Xn(d))}finally{Ve(!1)}}},[Se,J]),mt=r.useCallback(()=>{R(null)},[]),Xe={expandedAgentId:Ae,loadingAgentId:ze,checklistByInvocationId:X,errorByAgentId:lt,definitionNameByRef:ie,onToggleAgent:pe,onViewAgent:gt,onArchiveAgent:Ye,canArchive:!!x};return n.jsxs("div",{className:"agent-view-frontend agent-view",children:[C&&n.jsxs("div",{className:"agent-view__header",children:[n.jsx(c.Heading,{level:1,children:"Agents"}),n.jsx(c.Button,{variant:"primary",size:"S",iconLeftName:"sparkles",iconLeftScreenReaderText:"Start an agent",onClick:()=>de(!0),children:"Start an agent"})]}),P.length>0&&Rt&&n.jsxs("div",{className:"agent-view__filters",children:[dt&&n.jsxs("div",{className:"agent-view__filter",children:[n.jsx("label",{className:"agent-view__filter-label",htmlFor:"agent-view-institution-filter",children:"Institution"}),n.jsx(c.Combobox,{id:"agent-view-institution-filter",triggerVariant:"button",multiple:!0,searchType:"substring",placeholder:"All institutions",options:ot,value:Ne,onValueChange:qe,showSelectionCountBadge:!0,showClearAll:!0,clearAllLabel:"Clear institutions"})]}),Me&&n.jsxs("div",{className:"agent-view__filter",children:[n.jsx("label",{className:"agent-view__filter-label",htmlFor:"agent-view-agent-filter",children:"Agent"}),n.jsx(c.Combobox,{id:"agent-view-agent-filter",triggerVariant:"button",multiple:!0,searchType:"substring",placeholder:"All agents",options:ct,value:Z,onValueChange:Oe,showSelectionCountBadge:!0,showClearAll:!0,clearAllLabel:"Clear agents"})]})]}),ce==="error"?n.jsxs("div",{className:"agent-view__state agent-view__state--error",role:"alert",children:[n.jsx(c.Icon,{name:"triangle-alert",size:24,color:"var(--color-semantic-destructive-600)"}),n.jsx("p",{className:"agent-view__state-message",children:se??In}),n.jsx(c.Button,{variant:"secondary",size:"S",onClick:N,children:"Try again"})]}):ce==="loading"&&P.length===0?n.jsxs("div",{className:"agent-view__state","aria-live":"polite",children:[n.jsx(c.Icon,{name:"loader",size:24,color:"var(--color-brand-600)",className:"agent-view__progress-icon--spinning",screenReaderText:mn}),n.jsx("p",{className:"agent-view__state-message",children:mn})]}):P.length===0?n.jsx(Xs,{}):n.jsxs(n.Fragment,{children:[n.jsx("div",{className:"agent-view__board",children:bs.map(d=>n.jsx(ur,{column:at[d],agents:ht[d]??[],...Xe},d))}),De.length>0?n.jsxs("details",{className:"agent-view__archived",open:Et,onToggle:d=>{Ce(d.currentTarget.open)},children:[n.jsxs("summary",{className:"agent-view__archived-summary",children:[n.jsx(c.Heading,{level:4,children:"Archived"}),n.jsx("span",{className:"agent-view__column-count",children:De.length})]}),n.jsx("ul",{className:"agent-view__card-list agent-view__archived-list",children:De.map(d=>n.jsx(ss,{agent:d,agentName:Nt(d,ie),column:at[Gt(d,X[d.invocation_id])],isExpanded:Ae===d.id,isLoading:ze===d.id,checklist:X[d.invocation_id]??null,error:lt[d.id]??null,canArchive:!1,canDelete:_,onToggle:pe,onViewAgent:gt,onDelete:It},d.id))})]}):null]}),S&&n.jsx(es,{agent:S,invocationId:S.invocation_id,open:!0,jwt:e,headers:K,agentUrl:i,agentChecklistUrl:o,agentResourcesUrl:l,agentTimelineUrl:g,agentChatUrl:h,agentConversationUrl:k,pauseAgentUrl:m,resumeAgentUrl:v,archiveAgentUrl:x,enableUpload:j,adminMode:_,initialChecklist:X[S.invocation_id]??null,usePusherToRepoll:O,pusherChannelPrefix:f,subscribeToPusher:A,onClose:mt,onArchived:()=>{ye(S.id),Ce(!0),H()},onDeleted:()=>{ae(S.invocation_id)}},S.id),n.jsx(Ln,{open:!!te,isInProgress:Tt,isArchiving:Ke,error:St,onCancel:$e,onConfirm:()=>{He()}}),n.jsx(Pn,{open:!!Se,isDeleting:Je,error:jt,onCancel:We,onConfirm:()=>{Ot()}}),n.jsx(ns,{open:it,onClose:()=>de(!1),onStart:pt,agentDefinitions:ee})]})},gr=(e,t)=>{const s=Date.now(),a=t.trim()||e.agent_intent;return{id:`agent-${s}`,invocation_id:`inv-${s}`,agent_definition_ref:e.ref,agent_intent:e.agent_intent,invocation_name:a,application_id:Cs,created_by:Ss,status:y["generating-a-response"],archivedAt:null,context_ref:null,checklist_ref:null}};exports.AgentMonitorKanban=hr;exports.AgentServiceClient=Ct;exports.AgentServiceError=Te;exports.AgentView=es;exports.DEFAULT_PUSHER_CHANNEL_PREFIX=Wt;exports.HttpChatConnector=Yn;exports.MESSAGE_TYPE_REPOLL=Yt;exports.NewAgentModal=ns;exports.PUSHER_AGENT_MESSAGE_EVENT=$n;exports.REPOLL_TARGET=ke;exports.buildAgentFromDefinition=gr;exports.buildAgentPusherChannel=Hn;exports.createHttpChatConnectorFactory=en;exports.formatUserFileChatCardText=Fa;exports.mapApiAgent=st;exports.mapApiAgentDefinition=Xt;exports.mapApiAgentStatus=Fn;exports.mapApiAgentTimelineResponse=Kn;exports.mapApiChecklistEndpointResponse=Qt;exports.mapApiChecklistItem=Zt;exports.mapApiChecklistResponse=Jn;exports.mapApiChecklistStatus=Gn;exports.mapApiConversationMessages=Vn;exports.mapApiOpeningMessage=rt;exports.mapApiResource=zn;exports.mapApiResourcesEndpointResponse=qn;exports.mapApiTripOption=Ua;exports.parseConversationContentCaption=Ba;exports.parseRepollMessages=Bn;exports.useAgentService=Zn;exports.useAgentWorkspace=Qn;
|
package/dist/index.d.ts
CHANGED
|
@@ -10,6 +10,7 @@ export declare type Agent = {
|
|
|
10
10
|
application_name?: string;
|
|
11
11
|
created_by: string;
|
|
12
12
|
status: AgentStatus;
|
|
13
|
+
archivedAt?: string | null;
|
|
13
14
|
context_ref: string | null;
|
|
14
15
|
checklist_ref: string | null;
|
|
15
16
|
};
|
|
@@ -62,7 +63,7 @@ export declare type AgentDefinition = {
|
|
|
62
63
|
description: string;
|
|
63
64
|
};
|
|
64
65
|
|
|
65
|
-
export declare const AgentMonitorKanban: ({ jwt, headers, agentDefinitionsUrl, agentsUrl, agentUrl, agentChecklistUrl, agentResourcesUrl, agentTimelineUrl, agentChatUrl, agentConversationUrl, pauseAgentUrl, resumeAgentUrl, enableUpload, adminMode, showHeader, institutions, usePusherToRepoll, pusherChannelPrefix, subscribeToPusher, }: AgentMonitorKanbanProps) => JSX_2.Element;
|
|
66
|
+
export declare const AgentMonitorKanban: ({ jwt, headers, agentDefinitionsUrl, agentsUrl, agentUrl, agentChecklistUrl, agentResourcesUrl, agentTimelineUrl, agentChatUrl, agentConversationUrl, pauseAgentUrl, resumeAgentUrl, archiveAgentUrl, enableUpload, adminMode, showHeader, institutions, usePusherToRepoll, pusherChannelPrefix, subscribeToPusher, }: AgentMonitorKanbanProps) => JSX_2.Element;
|
|
66
67
|
|
|
67
68
|
export declare type AgentMonitorKanbanProps = {
|
|
68
69
|
jwt?: string;
|
|
@@ -79,6 +80,7 @@ export declare type AgentMonitorKanbanProps = {
|
|
|
79
80
|
agentConversationUrl: string;
|
|
80
81
|
pauseAgentUrl?: string;
|
|
81
82
|
resumeAgentUrl?: string;
|
|
83
|
+
archiveAgentUrl?: string;
|
|
82
84
|
enableUpload?: boolean;
|
|
83
85
|
adminMode?: boolean;
|
|
84
86
|
showHeader?: boolean;
|
|
@@ -141,6 +143,7 @@ export declare class AgentServiceClient {
|
|
|
141
143
|
pauseAgent(agentId: string): Promise<ApiAgentInvocation>;
|
|
142
144
|
resumeAgent(agentId: string): Promise<ApiAgentInvocation>;
|
|
143
145
|
archiveAgent(agentId: string): Promise<ApiAgentInvocation>;
|
|
146
|
+
deleteAgent(agentId: string): Promise<ApiAgentDeleteResponse>;
|
|
144
147
|
getConversation(agentId: string): Promise<ApiConversationResponse>;
|
|
145
148
|
chat(agentId: string, request: ApiChatRequest, options?: ChatOptions): Promise<ApiChatStreamEvent>;
|
|
146
149
|
private authHeaders;
|
|
@@ -187,11 +190,12 @@ export declare type AgentServiceUrlOverrides = {
|
|
|
187
190
|
agentConversation?: string;
|
|
188
191
|
pauseAgent?: string;
|
|
189
192
|
resumeAgent?: string;
|
|
193
|
+
archiveAgent?: string;
|
|
190
194
|
};
|
|
191
195
|
|
|
192
196
|
export declare type AgentServiceUrls = AgentServiceUrlOverrides;
|
|
193
197
|
|
|
194
|
-
export declare type AgentStatus = 'generating-a-response' | 'hitl' | 'paused' | 'complete'
|
|
198
|
+
export declare type AgentStatus = 'generating-a-response' | 'hitl' | 'paused' | 'complete';
|
|
195
199
|
|
|
196
200
|
declare type AgentTimeline = {
|
|
197
201
|
actionLog: AgentTimelineActionLogEntry[];
|
|
@@ -221,7 +225,7 @@ declare type AgentTimelineScheduledRun = {
|
|
|
221
225
|
|
|
222
226
|
declare type AgentTimelineScheduledRunRecurrence = 'one_off' | 'repeating';
|
|
223
227
|
|
|
224
|
-
export declare const AgentView: ({ agent, invocationId, open, onClose, jwt, headers, agentUrl, agentChecklistUrl, agentResourcesUrl, agentTimelineUrl, agentChatUrl, agentConversationUrl, pauseAgentUrl, resumeAgentUrl, chatId, enableUpload, adminMode, initialBrief, initialPhase, initialChecklist, usePusherToRepoll, pusherChannelPrefix, subscribeToPusher, }: AgentViewProps) => JSX_2.Element;
|
|
228
|
+
export declare const AgentView: ({ agent, invocationId, open, onClose, jwt, headers, agentUrl, agentChecklistUrl, agentResourcesUrl, agentTimelineUrl, agentChatUrl, agentConversationUrl, pauseAgentUrl, resumeAgentUrl, archiveAgentUrl, chatId, enableUpload, adminMode, initialBrief, initialPhase, initialChecklist, usePusherToRepoll, pusherChannelPrefix, subscribeToPusher, onArchived, onDeleted, }: AgentViewProps) => JSX_2.Element;
|
|
225
229
|
|
|
226
230
|
export declare type AgentViewProps = {
|
|
227
231
|
agent: Agent;
|
|
@@ -238,6 +242,9 @@ export declare type AgentViewProps = {
|
|
|
238
242
|
agentConversationUrl: string;
|
|
239
243
|
pauseAgentUrl?: string;
|
|
240
244
|
resumeAgentUrl?: string;
|
|
245
|
+
archiveAgentUrl?: string;
|
|
246
|
+
onArchived?: () => void;
|
|
247
|
+
onDeleted?: () => void;
|
|
241
248
|
chatId?: string;
|
|
242
249
|
enableUpload?: boolean;
|
|
243
250
|
adminMode?: boolean;
|
|
@@ -258,6 +265,7 @@ export declare type AgentWorkspaceUrls = {
|
|
|
258
265
|
agentConversationUrl: string;
|
|
259
266
|
pauseAgentUrl?: string;
|
|
260
267
|
resumeAgentUrl?: string;
|
|
268
|
+
archiveAgentUrl?: string;
|
|
261
269
|
};
|
|
262
270
|
|
|
263
271
|
export declare type ApiAgentDefinition = {
|
|
@@ -280,6 +288,10 @@ export declare type ApiAgentDefinition = {
|
|
|
280
288
|
tags?: string[];
|
|
281
289
|
};
|
|
282
290
|
|
|
291
|
+
export declare type ApiAgentDeleteResponse = {
|
|
292
|
+
status: 'deleted';
|
|
293
|
+
};
|
|
294
|
+
|
|
283
295
|
export declare type ApiAgentInvocation = {
|
|
284
296
|
id: string;
|
|
285
297
|
invocation_id?: string | null;
|
|
@@ -290,6 +302,7 @@ export declare type ApiAgentInvocation = {
|
|
|
290
302
|
application_name?: string;
|
|
291
303
|
created_by: string;
|
|
292
304
|
status: ApiAgentInvocationStatus;
|
|
305
|
+
archived_at?: string | null;
|
|
293
306
|
context_ref?: string | null;
|
|
294
307
|
checklist_ref?: string | null;
|
|
295
308
|
opening_message?: string;
|
|
@@ -300,7 +313,7 @@ export declare type ApiAgentInvocationDetail = ApiAgentInvocation & {
|
|
|
300
313
|
checklist_items?: ApiChecklistItem[] | null;
|
|
301
314
|
};
|
|
302
315
|
|
|
303
|
-
export declare type ApiAgentInvocationStatus = 'active' | '
|
|
316
|
+
export declare type ApiAgentInvocationStatus = 'active' | 'complete' | 'paused';
|
|
304
317
|
|
|
305
318
|
export declare type ApiAgentResource = {
|
|
306
319
|
id: string;
|
|
@@ -666,6 +679,9 @@ export declare type UseAgentServiceResult = {
|
|
|
666
679
|
fetchAgentChecklist: (invocationId: string) => Promise<AgentChecklistResponse>;
|
|
667
680
|
fetchAgentResources: (invocationId: string) => Promise<AgentResource[]>;
|
|
668
681
|
createAgent: (payload: NewAgentStartPayload) => Promise<Agent>;
|
|
682
|
+
archiveAgent: (agentId: string) => Promise<Agent>;
|
|
683
|
+
deleteAgent: (agentId: string) => Promise<void>;
|
|
684
|
+
removeAgent: (agentId: string) => void;
|
|
669
685
|
chatConnector: (agent: Agent) => ChatConnector;
|
|
670
686
|
};
|
|
671
687
|
|
|
@@ -687,6 +703,8 @@ export declare type UseAgentWorkspaceResult = {
|
|
|
687
703
|
fetchAgentResourceHtml: (invocationId: string, resourceId: string) => Promise<string>;
|
|
688
704
|
fetchAgentTimeline: (invocationId: string) => Promise<AgentTimeline>;
|
|
689
705
|
updateAgentInvocationName: (invocationId: string, invocationName: string) => Promise<void>;
|
|
706
|
+
archiveAgent: (agentId: string) => Promise<Agent>;
|
|
707
|
+
deleteAgent: (agentId: string) => Promise<void>;
|
|
690
708
|
};
|
|
691
709
|
|
|
692
710
|
export declare type WorkspacePhase = 'briefing' | 'running' | 'paused' | 'complete';
|