@arbor-education/agent-view-frontend 0.4.11-alpha.2 → 0.5.0

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/README.md CHANGED
@@ -70,14 +70,14 @@ make demo
70
70
  | `AGENT_SERVICE_PROXY_TARGET` | `http://localhost:3001` | Where the demo proxies `/api/ai-agent-service` |
71
71
  | `AGENT_SERVICE_URL` | `/api/ai-agent-service` | Initial service URL for the demo (overridable in Debug options) |
72
72
  | `AGENT_SERVICE_TOKEN` | _(empty)_ | Initial bearer token for the demo |
73
- | `PUSHER_REPOLL` | auto if key+cluster set | `true`/`false` — enable Pusher REPOLL in AgentView (no Debug UI control) |
73
+ | `PUSHER_REPOLL` | auto if key+cluster set | `true`/`false` — initial state of the **Use Pusher to repoll** Debug toggle |
74
74
  | `PUSHER_KEY` | _(empty)_ | Public Pusher app key (client subscribe) |
75
75
  | `PUSHER_CLUSTER` | _(empty)_ | Pusher cluster (e.g. `eu`) |
76
76
  | `PUSHER_CHANNEL_PREFIX` | `arbor-agent-` | Channel prefix; full channel is `{prefix}{agent.id}` |
77
77
  | `PUSHER_SECRET` | _(empty)_ | **Not** exposed to the browser — use only in local trigger scripts |
78
78
  | `PUSHER_APP_ID` | _(empty)_ | Same as above; for server-side `pusher` package scripts |
79
79
 
80
- Copy `demo/.env.example` to `demo/.env` and fill Pusher credentials. There are no Pusher fields in the Debug UI configure via env only. Vite loads env from the demo root; only an allowlisted set of prefixes is exposed to the client (`PUSHER_SECRET` is excluded).
80
+ Copy `demo/.env.example` to `demo/.env` and fill Pusher credentials. The Debug panel only exposes a **Use Pusher to repoll** toggle, which overrides `PUSHER_REPOLL` for the current session; the key, cluster and channel prefix are configured via env only. Vite loads env from the demo root; only an allowlisted set of prefixes is exposed to the client (`PUSHER_SECRET` is excluded).
81
81
 
82
82
  ---
83
83
 
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"),i=require("react"),z=require("classnames"),u=require("@arbor-education/design-system.components"),ve=require("@arbor-education/ask-arbor-chat-panel"),A={"generating-a-response":"generating-a-response",hitl:"hitl",complete:"complete",failed:"failed"},U={"generating-a-response":"generating-a-response",hitl:"hitl",complete:"complete",failed:"failed"},H={briefing:"briefing",running:"running",stopped:"stopped",complete:"complete"},X={agent:"agent",user:"user",system:"system"},ie={document_html:"document_html",mis_record:"mis_record",workflow:"workflow",file:"file",user_file:"user_file",link:"link"},_s={user_file:"user_file"},xt={cancelled:"cancelled",archived:"archived"},tt={in_progress:"in_progress",requires_attention:"requires_attention",available:"available"},Y={[U.complete]:{label:"Complete",icon:"circle-check",color:"var(--color-semantic-success-600)"},[U.failed]:{label:"Failed",icon:"circle-x",color:"var(--color-semantic-destructive-600)"},[U.hitl]:{label:"Requires attention",icon:"triangle-alert",color:"var(--color-semantic-warning-600)"},[U["generating-a-response"]]:{label:"Generating a response",icon:"sparkles",color:"var(--color-brand-600)"}},qe={[A["generating-a-response"]]:{status:A["generating-a-response"],title:"Active",dotColour:"green",statusIcon:{name:Y["generating-a-response"].icon,color:Y["generating-a-response"].color}},[A.hitl]:{status:A.hitl,title:"Requires attention",dotColour:"orange",statusIcon:{name:Y.hitl.icon,color:Y.hitl.color}},[A.complete]:{status:A.complete,title:"Complete",dotColour:"green",dotModifier:"grey-dark",statusIcon:{name:Y.complete.icon,color:Y.complete.color}},[A.failed]:{status:A.failed,title:"Failed",dotColour:"salmon",statusIcon:{name:Y.failed.icon,color:Y.failed.color}}},fs=[A["generating-a-response"],A.hitl],vs=[A.complete,A.failed],ws="m4",xs="1",Lt="msg-opening",ze="Unable to load agent tasks. Please try again.",ks="Unable to load the resources for this agent",ys="Unable to load this document. Please try again.",Ot="Unable to load the timeline for this agent",Ss="Something went wrong. Please try again.",Mt="Unable to load agents. Please try again.",_e="Loading tasks…",kt="Loading agents…",bs="Task",Ns={[H.briefing]:"Briefing",[H.running]:"Working",[H.stopped]:"Stopped",[H.complete]:"Complete"},As=[A["generating-a-response"],A.hitl,A.complete,A.failed],js={[A["generating-a-response"]]:"Agents currently working on tasks for you.",[A.hitl]:"Agents that need your input before they can continue.",[A.complete]:"Agents that have finished their work.",[A.failed]:"Agents that failed or were stopped."},Cs=()=>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)"})]}),Es=({status:e})=>{const t=qe[e];return t.statusIcon?s.jsx(u.Icon,{name:t.statusIcon.name,size:16,color:t.statusIcon.color,screenReaderText:t.title}):s.jsx(u.Dot,{colour:t.dotColour,label:t.title})},Rs=()=>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(u.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:As.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(Es,{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:js[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(Cs,{})})]}),Ts=()=>({needsInput:[],complete:[],failed:[],tasks:[]}),Is=(e,t)=>({...e,...t.length>0?{children:t}:{}}),Ut=e=>{const t=[],n=[],a=[],r=[];for(const l of e){const o=l.children?Ut(l.children):Ts();if(t.push(...o.needsInput),n.push(...o.complete),a.push(...o.failed),l.status===U.hitl){t.push({...l,children:void 0});continue}if(l.status===U.complete){n.push({...l,children:void 0});continue}if(l.status===U.failed){a.push({...l,children:void 0});continue}r.push(Is(l,o.tasks))}return{needsInput:t,complete:n,failed:a,tasks:r}},yt=e=>e===U.hitl?0:e===U.complete?1:e===U.failed?2:3,Ls=e=>e.map((t,n)=>({item:t,index:n})).sort((t,n)=>{const a=yt(t.item.status)-yt(n.item.status);return a!==0?a:t.index-n.index}).map(({item:t})=>t),st=2,Os=e=>{if(!e)return{canScrollUp:!1,canScrollDown:!1};const t=e.scrollHeight-e.clientHeight;return t<=st?{canScrollUp:!1,canScrollDown:!1}:{canScrollUp:e.scrollTop>st,canScrollDown:e.scrollTop<t-st}},Ms=(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}},Je=({children:e,className:t,contentClassName:n,scrollSelector:a,style:r,"aria-label":l})=>{const o=i.useRef(null),p=i.useRef(null),[c,g]=i.useState(!1),[_,y]=i.useState(!1),[x,E]=i.useState(null),T=()=>{var R;return a?((R=o.current)==null?void 0:R.querySelector(a))??null:p.current},f=()=>{const R=T(),S=Os(R);if(g(m=>m===S.canScrollUp?m:S.canScrollUp),y(m=>m===S.canScrollDown?m:S.canScrollDown),a){const m=Ms(o.current,R);E(b=>(b==null?void 0:b.top)===(m==null?void 0:m.top)&&(b==null?void 0:b.left)===(m==null?void 0:m.left)&&(b==null?void 0:b.width)===(m==null?void 0:m.width)&&(b==null?void 0:b.height)===(m==null?void 0:m.height)?b:m)}else E(m=>m===null?m:null)};i.useLayoutEffect(()=>{f()}),i.useEffect(()=>{const R=o.current;if(!R)return;let S=null,m=null;const b=()=>{S==null||S.removeEventListener("scroll",f),m==null||m.disconnect(),m=null,S=null},v=P=>{if(P===S){f();return}if(b(),S=P,!S){f();return}S.addEventListener("scroll",f,{passive:!0}),m=new ResizeObserver(()=>f()),m.observe(S),S.firstElementChild instanceof HTMLElement&&m.observe(S.firstElementChild),f()};v(T());const C=new MutationObserver(()=>{v(T())});return C.observe(R,{childList:!0,subtree:!0,characterData:!0}),window.addEventListener("resize",f),()=>{window.removeEventListener("resize",f),C.disconnect(),b()}},[a]);const G=R=>{const S=T();if(!S)return;const m=Math.max(S.clientHeight*.75,120);S.scrollBy({top:R==="up"?-m:m,behavior:"smooth"})},j=s.jsxs(s.Fragment,{children:[c&&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:()=>G("up"),children:s.jsx(u.Icon,{name:"chevron-up",size:16,color:"currentColor"})})]}),_&&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:()=>G("down"),children:s.jsx(u.Icon,{name:"chevron-down",size:16,color:"currentColor"})})]})]});return s.jsx("div",{ref:o,className:z("scrollable-region",t),style:r,"aria-label":l,children:a?s.jsxs(s.Fragment,{children:[e,x&&(c||_)&&s.jsx("div",{className:"scrollable-region__overlay",style:{top:x.top,left:x.left,width:x.width,height:x.height},children:j})]}):s.jsxs(s.Fragment,{children:[j,s.jsx("div",{ref:p,className:z("scrollable-region__viewport",n),children:e})]})})},Us=48,Ps=({checklist:e})=>{const t=i.useRef(null),n=i.useRef(!1);return i.useLayoutEffect(()=>{const a=t.current;if(!a)return;const r=a.scrollHeight-a.scrollTop-a.clientHeight;(!n.current||r<=Us)&&(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(Je,{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:Ls(e).map(a=>{const r=Y[a.status];return s.jsxs("li",{className:z("agent-view__progress-item",`agent-view__progress-item--${a.status.replace(/_/g,"-")}`),children:[s.jsx(u.Icon,{name:r.icon,size:16,color:r.color,screenReaderText:`${r.label}:`}),s.jsxs("div",{className:"agent-view__progress-item-content",children:[s.jsx("span",{className:"agent-view__progress-label",children:a.task}),a.status!==U.complete&&s.jsx("span",{className:"agent-view__progress-description",children:a.description})]})]},a.task)})})})},Ds=({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 $s{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 r=await this.connector.sendMessage(t.userMessage,t.uploadFiles);return this.onTurn(r),{id:r.message.id,text:r.message.text,type:ve.CHAT_RESPONSE_TYPE_AGENT,...r.message.followUpPrompts?{followUpPrompts:r.message.followUpPrompts}:{}}}catch{return{id:`error-${Date.now()}`,text:Ss,type:ve.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 Hs=({connector:e,phase:t,chatHistory:n,chatSessionKey:a,startQuery:r,clarificationMessage:l,enableUpload:o=!1,onTurn:p,onAwaitingChange:c,onClarificationPrompt:g,onDismissClarification:_})=>{const y=i.useMemo(()=>new $s(e,{canSend:()=>t===H.running,onTurn:p,onAwaitingChange:c}),[e,t,p,c]),x=t!==H.running,E=t===H.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(Ds,{prompts:l.followUpPrompts,onSelect:g}),s.jsx("button",{type:"button",className:"agent-workspace__clarification-dismiss",onClick:_,children:"Dismiss"})]}),s.jsx("div",{className:"agent-workspace__ask-arbor",children:s.jsx(Je,{scrollSelector:".chat-panel-message-list",children:s.jsx(ve.ChatPanel,{connector:y,chatHistory:n,startQuery:r,lockConversation:x,enableUpload:o,speechEnabled:E,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:E?"Message the agent, paste a link, or attach a file…":"The agent is not accepting messages."},a)})}),t===H.stopped&&s.jsxs("div",{className:"agent-workspace__notice",role:"status",children:[s.jsx(u.Icon,{name:"circle-alert",size:16,color:"var(--color-semantic-warning-600)"}),s.jsx("span",{children:"You stopped the agent. Its progress is saved in the checklist."})]}),t===H.complete&&s.jsxs("div",{className:"agent-workspace__notice",role:"status",children:[s.jsx(u.Icon,{name:"party-popper",size:16,color:"var(--color-semantic-success-600)"}),s.jsx("span",{children:"The agent has finished."})]})]})},Pt=({item:e,depth:t,canRequestInput:n,onAttentionItemClick:a})=>{const r=Y[e.status],l=e.status.replace(/_/g,"-"),o=e.status===U.hitl&&n&&a,p=s.jsxs("div",{className:"agent-workspace__task-row",children:[s.jsx(u.Icon,{name:r.icon,size:16,color:r.color,screenReaderText:`${r.label}:`}),s.jsxs("div",{className:"agent-workspace__task-content",children:[s.jsx("span",{className:"agent-workspace__task-label",children:e.task}),e.status!==U.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:p}):p,e.children&&e.children.length>0&&s.jsx("ul",{className:"agent-workspace__task-children",children:e.children.map(c=>s.jsx(Pt,{item:c,depth:t+1,canRequestInput:n,onAttentionItemClick:a},c.task))})]})},Ge=({items:e,ariaLabel:t,canRequestInput:n,onAttentionItemClick:a})=>s.jsx("ul",{className:"agent-workspace__task-list","aria-label":t,children:e.map(r=>s.jsx(Pt,{item:r,depth:0,canRequestInput:n,onAttentionItemClick:a},r.task))}),Fs=({checklist:e,isLoading:t,error:n,phase:a,canRequestInput:r,onAttentionItemClick:l})=>{const o=i.useMemo(()=>e?Ut(e):null,[e]);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:s.jsx(u.Heading,{level:4,children:"Checklist"})}),s.jsx("div",{className:"agent-workspace__panel-body","aria-live":"polite",children:s.jsxs(Je,{children:[t&&s.jsxs("div",{className:"agent-workspace__loading",children:[s.jsx(u.Icon,{name:"loader",size:16,color:"var(--color-brand-600)",className:"agent-workspace__task-icon--spinning",screenReaderText:_e}),s.jsx("span",{children:_e})]}),!t&&n&&s.jsx("p",{className:"agent-workspace__error",role:"alert",children:n}),!t&&!n&&o&&s.jsxs(s.Fragment,{children:[o.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(Ge,{items:o.needsInput,ariaLabel:"Tasks needing your input",canRequestInput:r,onAttentionItemClick:l})]}),o.complete.length>0&&s.jsxs("div",{className:z("agent-workspace__task-group",{"agent-workspace__task-group--following":o.needsInput.length>0}),children:[(o.needsInput.length>0||o.failed.length>0||o.tasks.length>0)&&s.jsx("p",{className:"agent-workspace__task-group-label",children:"Completed"}),s.jsx(Ge,{items:o.complete,ariaLabel:"Completed tasks",canRequestInput:r,onAttentionItemClick:l})]}),o.failed.length>0&&s.jsxs("div",{className:z("agent-workspace__task-group",{"agent-workspace__task-group--following":o.needsInput.length>0||o.complete.length>0}),children:[(o.needsInput.length>0||o.complete.length>0||o.tasks.length>0)&&s.jsx("p",{className:"agent-workspace__task-group-label",children:"Failed"}),s.jsx(Ge,{items:o.failed,ariaLabel:"Failed tasks",canRequestInput:r,onAttentionItemClick:l})]}),o.tasks.length>0&&s.jsxs("div",{className:z("agent-workspace__task-group",{"agent-workspace__task-group--following":o.needsInput.length>0||o.complete.length>0||o.failed.length>0}),children:[(o.needsInput.length>0||o.complete.length>0||o.failed.length>0)&&s.jsx("p",{className:"agent-workspace__task-group-label",children:"Working on"}),s.jsx(Ge,{items:o.tasks,ariaLabel:"Agent tasks",canRequestInput:r,onAttentionItemClick:l})]})]}),!t&&!n&&(!o||o.needsInput.length===0&&o.complete.length===0&&o.failed.length===0&&o.tasks.length===0)&&s.jsx("p",{className:"agent-workspace__empty",children:a===H.briefing?"Tasks will appear here once the agent starts.":"No tasks to display."})]})})]})},Bs=({resource:e,html:t,isLoading:n,error:a,onClose:r})=>{i.useEffect(()=>{if(!e)return;const o=u.SlideoverUtils.removeSlideover;return u.SlideoverUtils.removeSlideover=()=>{o(),r()},()=>{u.SlideoverUtils.removeSlideover=o}},[e,r]),i.useEffect(()=>{if(!e)return;const o=p=>{p.key==="Escape"&&u.SlideoverUtils.removeSlideover()};return window.addEventListener("keydown",o),()=>window.removeEventListener("keydown",o)},[e]);const l=i.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(u.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(u.SlideoverManager,{slideovers:l})})},Gs={[ie.mis_record]:{icon:"table",label:"Arbor MIS",color:"var(--color-brand-600)"},[ie.document_html]:{icon:"file",label:"Document",color:"var(--color-semantic-caution-800)"},[ie.file]:{icon:"file",label:"File",color:"var(--color-semantic-caution-800)"},[ie.user_file]:{icon:"upload",label:"File upload",color:"var(--color-semantic-caution-800)"},[ie.workflow]:{icon:"list-tree",label:"Workflow",color:"var(--color-semantic-warning-700)"},[ie.link]:{icon:"link",label:"Link",color:"var(--color-semantic-info-700)"}},zs=({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(u.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(Je,{children:[t&&s.jsxs("div",{className:"agent-workspace__loading",children:[s.jsx(u.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(r=>{const l=Gs[r.type],o=r.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:p=>{p.preventDefault(),a(r)},children:s.jsx(St,{resource:r,config:l,external:!0})}):s.jsx("button",{type:"button",className:"agent-workspace__resource-card",onClick:()=>a(r),children:s.jsx(St,{resource:r,config:l})})},r.id)})}),!t&&!n&&e.length===0&&s.jsx("p",{className:"agent-workspace__empty",children:"No resources yet."})]})})]}),St=({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(u.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(u.Icon,{name:"external-link",size:12,color:"var(--color-grey-500)",screenReaderText:"Opens in a new tab",className:"agent-workspace__resource-open"})]}),bt=e=>{const t=Date.parse(e);return Number.isFinite(t)?t:0},qs=new Intl.DateTimeFormat("en-GB",{day:"numeric",month:"long",year:"numeric",hour:"numeric",minute:"2-digit"}),nt=e=>{const t=new Date(e);return Number.isFinite(t.getTime())?qs.format(t):e},Nt=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(" ")),At=e=>{const n=e.replace(/[A-Za-z0-9]+(?:[_-][A-Za-z0-9]+)+/g,a=>a.split(/[_-]/).map(r=>r.toLowerCase()).join(" ")).toLowerCase();return n&&n.charAt(0).toUpperCase()+n.slice(1)},Js=60*60*1e3,Dt=60*60*1e3,Re=24*Dt,rt=7*Re,Ks=e=>e.type!=="message-sent",Ws=(e,t)=>{const n=e.filter(Ks).map((r,l)=>({kind:"action",id:`action-${r.timestamp}-${l}`,timestampMs:bt(r.timestamp),item:r})),a=t.map(r=>({kind:"chat",id:r.sessionId,timestampMs:bt(r.timestamp),session:r}));return[...n,...a].sort((r,l)=>r.timestampMs-l.timestampMs||r.id.localeCompare(l.id))},Vs=e=>e>=rt?"weeks":e>=Re?"days":"hours",Ys=e=>{if(e<Re){const a=Math.max(1,Math.round(e/Dt));return a===1?"1 hour later":`${a} hours later`}if(e<rt){const a=Math.max(1,Math.round(e/Re));return a===1?"1 day later":`${a} days later`}const t=Math.max(1,Math.round(e/rt));if(t<5)return t===1?"1 week later":`${t} weeks later`;const n=Math.max(1,Math.round(e/(30*Re)));return n===1?"1 month later":`${n} months later`},Xs=(e,t=Js)=>{if(e.length===0)return[];const n=[e[0]];for(let a=1;a<e.length;a+=1){const r=e[a-1],l=e[a],o=l.timestampMs-r.timestampMs;o>=t&&n.push({kind:"gap",id:`gap-${r.id}-${l.id}`,durationMs:o,label:Ys(o),size:Vs(o)}),n.push(l)}return n},Zs=e=>e.type==="checklist-updated"?"checklist":e.type==="status-transition"?"status":"note",Qs=({timeline:e,isLoading:t,error:n,onOpenChatSession:a})=>{const r=(e==null?void 0:e.actionLog)??[],l=(e==null?void 0:e.chatSessions)??[],o=Ws(r,l),p=Xs(o),c=!t&&!n&&o.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||Ot}),c&&s.jsx("p",{className:"agent-workspace__timeline-status",role:"status",children:"No timeline activity yet."}),!t&&!n&&!c&&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-node agent-timeline__station-node--terminus","aria-hidden":"true",children:s.jsx(u.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"})})]}),p.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 ${nt(g.session.timestamp)}`,onClick:()=>a(g.session.sessionId),children:s.jsx(u.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:nt(g.session.timestamp)})]})]},g.id);const{item:_}=g,y=Zs(_),x=y==="checklist",E=y==="status";return s.jsxs("div",{className:`agent-timeline__station agent-timeline__station--${y}`,children:[s.jsxs("button",{type:"button",className:`agent-timeline__station-node agent-timeline__station-node--${y}`,"aria-label":`${Nt(_.type)}: ${At(_.entry)}`,children:[x&&s.jsx(u.Icon,{name:"check-solid",size:16,color:"currentColor"}),E&&s.jsx(u.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:Nt(_.type)}),s.jsx("span",{className:"agent-timeline__label-entry",children:At(_.entry)}),s.jsx("span",{className:"agent-timeline__label-time",children:nt(_.timestamp)})]})]},g.id)}),s.jsxs("div",{className:"agent-timeline__station agent-timeline__station--terminus",children:[s.jsx("span",{className:"agent-timeline__station-node agent-timeline__station-node--terminus","aria-hidden":"true",children:s.jsx(u.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"})})]})]})]})},en=["I'll get the details and come back to you","Skip this for now"],tn=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:X.agent,text:t,followUpPrompts:e.clarificationPrompts??en}},me=e=>({id:e.id,text:e.text,type:e.author===X.user?ve.CHAT_RESPONSE_TYPE_USER:e.author===X.system?ve.CHAT_RESPONSE_TYPE_INFO:ve.CHAT_RESPONSE_TYPE_AGENT,...e.followUpPrompts?{followUpPrompts:e.followUpPrompts}:{}}),it="MESSAGE_TYPE_REPOLL",ot="agentMessage:new_message",dt="arbor-agent-",oe={all:"ALL",checklist:"CHECKLIST",resources:"RESOURCES",chat:"CHAT",timeline:"TIMELINE"},sn=new Set(Object.values(oe)),$t=(e,t)=>`${e.endsWith("-")?e:`${e}-`}${t}`,nn=e=>typeof e=="string"&&sn.has(e)?e:oe.all,an=e=>{if(!e||typeof e!="object")return null;const t=e;return t.type!==it?null:{type:it,target:nn(t.target)}},Ht=e=>{const t=Array.isArray(e)?e:[e],n=[];for(const a of t){const r=an(a);r&&n.push(r)}return n},rn=({enabled:e,channelPrefix:t,agentId:n,subscribeToPusher:a,onRepoll:r})=>{const l=i.useRef(r);i.useEffect(()=>{l.current=r},[r]),i.useEffect(()=>{if(!e||!(t!=null&&t.trim())||!a||!n)return;const o=$t(t.trim(),n),p=a(o,ot,c=>{console.log("[agent-view pusher] message received",{channel:o,event:ot,payload:c});for(const g of Ht(c))l.current(g.target)});return()=>{p()}},[e,t,n,a])};class fe extends Error{constructor(t,n,a){super(a??`Agent service request failed (${t})`),this.name="AgentServiceError",this.status=t,this.detail=n}}const on="/api/v1",$={agentDefinitions:"/agent-definitions",agents:"/agents",conversations:"/conversations",tripOptions:"/trip-options",demoDataset:"/demo/dataset"},B={GET:"GET",POST:"POST"},ln={error:"error"},cn={user:"user"},ue={acceptJson:"application/json",acceptHtml:"text/html",acceptEventStream:"text/event-stream",contentTypeJson:"application/json",arborApplicationUrl:"X-Arbor-Application-Url"},dn=100,Ft=e=>{switch(e){case xt.cancelled:return A.failed;case xt.archived:return A.complete;case A.hitl:case A.complete:case A.failed:case A["generating-a-response"]:return e;default:return A["generating-a-response"]}},Bt=e=>{switch(e){case tt.requires_attention:return U.hitl;case tt.in_progress:case tt.available:return U["generating-a-response"];case U.failed:case U.complete:case U.hitl:case U["generating-a-response"]:return e;default:return U["generating-a-response"]}},ut=e=>({ref:e.name,display_name:e.display_name,agent_intent:e.agent_intent??"",description:e.description}),un=e=>({id:e.id,name:e.name,...e.has_run_before?{hasRunBefore:e.has_run_before}:{}}),gn=new Set(Object.values(ie)),hn=e=>gn.has(e)?e:ie.document_html,Gt=e=>({id:e.id,type:hn(e.type),title:e.title,createdDatetime:e.created_datetime,lastUpdatedDatetime:e.last_updated_datetime,misRecordUrl:e.mis_record_url}),zt=e=>({resources:e.resources.map(Gt),pageNumber:e.page_number,pageSize:e.page_size,totalRecords:e.total_records}),qt=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}))}),lt=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:Ft(e.status),context_ref:e.context_ref??null,checklist_ref:e.checklist_ref??null}},gt=e=>{var t;return{task:e.item??e.task??e.name??e.label??bs,status:Bt(e.status),description:e.description??"",...e.prompt?{prompt:e.prompt}:{},...(t=e.follow_up_prompts)!=null&&t.length?{clarificationPrompts:e.follow_up_prompts}:{}}},pn=e=>Array.isArray(e)?e:e.checklist_items??e.checklist??e.items??[],ht=(e,t,n)=>{var l;const a=!Array.isArray(t)&&(t.opening_message||(l=t.opening_follow_up_prompts)!=null&&l.length)?t:n,r=a?Te(a):void 0;return{invocation_id:e,checklist:pn(t).map(gt),...r?{openingMessage:r}:{}}},Jt=(e,t)=>{const n=Te(t);return{invocation_id:t.invocation_id??e,checklist:(t.checklist_items??[]).map(gt),...n?{openingMessage:n}:{}}},Te=e=>{var n,a;const t=(n=e.opening_message)==null?void 0:n.trim();if(t)return{id:Lt,author:X.agent,text:t,...(a=e.opening_follow_up_prompts)!=null&&a.length?{followUpPrompts:e.opening_follow_up_prompts}:{}}},Kt=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},Wt=e=>{const t=e.trim();return t.length>0?`File upload
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const s=require("react/jsx-runtime"),i=require("react"),z=require("classnames"),u=require("@arbor-education/design-system.components"),ve=require("@arbor-education/ask-arbor-chat-panel"),A={"generating-a-response":"generating-a-response",hitl:"hitl",complete:"complete",failed:"failed"},P={"generating-a-response":"generating-a-response",hitl:"hitl",complete:"complete",failed:"failed"},H={briefing:"briefing",running:"running",stopped:"stopped",complete:"complete"},X={agent:"agent",user:"user",system:"system"},ie={document_html:"document_html",mis_record:"mis_record",workflow:"workflow",file:"file",user_file:"user_file",link:"link"},xs={user_file:"user_file"},Nt={cancelled:"cancelled",archived:"archived"},tt={in_progress:"in_progress",requires_attention:"requires_attention",available:"available"},Y={[P.complete]:{label:"Complete",icon:"circle-check",color:"var(--color-semantic-success-600)"},[P.failed]:{label:"Failed",icon:"circle-x",color:"var(--color-semantic-destructive-600)"},[P.hitl]:{label:"Requires attention",icon:"triangle-alert",color:"var(--color-semantic-warning-600)"},[P["generating-a-response"]]:{label:"Generating a response",icon:"sparkles",color:"var(--color-brand-600)"}},qe={[A["generating-a-response"]]:{status:A["generating-a-response"],title:"Active",dotColour:"green",statusIcon:{name:Y["generating-a-response"].icon,color:Y["generating-a-response"].color}},[A.hitl]:{status:A.hitl,title:"Requires attention",dotColour:"orange",statusIcon:{name:Y.hitl.icon,color:Y.hitl.color}},[A.complete]:{status:A.complete,title:"Complete",dotColour:"green",dotModifier:"grey-dark",statusIcon:{name:Y.complete.icon,color:Y.complete.color}},[A.failed]:{status:A.failed,title:"Failed",dotColour:"salmon",statusIcon:{name:Y.failed.icon,color:Y.failed.color}}},ks=[A["generating-a-response"],A.hitl],Ss=[A.complete,A.failed],ys="m4",Ns="1",Ut="msg-opening",ze="Unable to load agent tasks. Please try again.",bs="Unable to load the resources for this agent",As="Unable to load this document. Please try again.",Dt="Unable to load the timeline for this agent",js="Unable to stop the agent. Please try again.",Cs="Something went wrong. Please try again.",$t="Unable to load agents. Please try again.",_e="Loading tasks…",bt="Loading agents…",Es="Task",Rs={[H.briefing]:"Briefing",[H.running]:"Working",[H.stopped]:"Stopped",[H.complete]:"Complete"},Ts=[A["generating-a-response"],A.hitl,A.complete,A.failed],Is={[A["generating-a-response"]]:"Agents currently working on tasks for you.",[A.hitl]:"Agents that need your input before they can continue.",[A.complete]:"Agents that have finished their work.",[A.failed]:"Agents that failed or were stopped."},Os=()=>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)"})]}),Ls=({status:e})=>{const t=qe[e];return t.statusIcon?s.jsx(u.Icon,{name:t.statusIcon.name,size:16,color:t.statusIcon.color,screenReaderText:t.title}):s.jsx(u.Dot,{colour:t.dotColour,label:t.title})},Ms=()=>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(u.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:Ts.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(Ls,{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:Is[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(Os,{})})]}),Ps=()=>({needsInput:[],complete:[],failed:[],tasks:[]}),Us=(e,t)=>({...e,...t.length>0?{children:t}:{}}),Ht=e=>{const t=[],n=[],a=[],r=[];for(const l of e){const o=l.children?Ht(l.children):Ps();if(t.push(...o.needsInput),n.push(...o.complete),a.push(...o.failed),l.status===P.hitl){t.push({...l,children:void 0});continue}if(l.status===P.complete){n.push({...l,children:void 0});continue}if(l.status===P.failed){a.push({...l,children:void 0});continue}r.push(Us(l,o.tasks))}return{needsInput:t,complete:n,failed:a,tasks:r}},At=e=>e===P.hitl?0:e===P.complete?1:e===P.failed?2:3,Ds=e=>e.map((t,n)=>({item:t,index:n})).sort((t,n)=>{const a=At(t.item.status)-At(n.item.status);return a!==0?a:t.index-n.index}).map(({item:t})=>t),st=2,$s=e=>{if(!e)return{canScrollUp:!1,canScrollDown:!1};const t=e.scrollHeight-e.clientHeight;return t<=st?{canScrollUp:!1,canScrollDown:!1}:{canScrollUp:e.scrollTop>st,canScrollDown:e.scrollTop<t-st}},Hs=(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}},Je=({children:e,className:t,contentClassName:n,scrollSelector:a,style:r,"aria-label":l})=>{const o=i.useRef(null),p=i.useRef(null),[c,g]=i.useState(!1),[m,S]=i.useState(!1),[x,E]=i.useState(null),R=()=>{var I;return a?((I=o.current)==null?void 0:I.querySelector(a))??null:p.current},f=()=>{const I=R(),y=$s(I);if(g(_=>_===y.canScrollUp?_:y.canScrollUp),S(_=>_===y.canScrollDown?_:y.canScrollDown),a){const _=Hs(o.current,I);E(N=>(N==null?void 0:N.top)===(_==null?void 0:_.top)&&(N==null?void 0:N.left)===(_==null?void 0:_.left)&&(N==null?void 0:N.width)===(_==null?void 0:_.width)&&(N==null?void 0:N.height)===(_==null?void 0:_.height)?N:_)}else E(_=>_===null?_:null)};i.useLayoutEffect(()=>{f()}),i.useEffect(()=>{const I=o.current;if(!I)return;let y=null,_=null;const N=()=>{y==null||y.removeEventListener("scroll",f),_==null||_.disconnect(),_=null,y=null},v=U=>{if(U===y){f();return}if(N(),y=U,!y){f();return}y.addEventListener("scroll",f,{passive:!0}),_=new ResizeObserver(()=>f()),_.observe(y),y.firstElementChild instanceof HTMLElement&&_.observe(y.firstElementChild),f()};v(R());const C=new MutationObserver(()=>{v(R())});return C.observe(I,{childList:!0,subtree:!0,characterData:!0}),window.addEventListener("resize",f),()=>{window.removeEventListener("resize",f),C.disconnect(),N()}},[a]);const G=I=>{const y=R();if(!y)return;const _=Math.max(y.clientHeight*.75,120);y.scrollBy({top:I==="up"?-_:_,behavior:"smooth"})},j=s.jsxs(s.Fragment,{children:[c&&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:()=>G("up"),children:s.jsx(u.Icon,{name:"chevron-up",size:16,color:"currentColor"})})]}),m&&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:()=>G("down"),children:s.jsx(u.Icon,{name:"chevron-down",size:16,color:"currentColor"})})]})]});return s.jsx("div",{ref:o,className:z("scrollable-region",t),style:r,"aria-label":l,children:a?s.jsxs(s.Fragment,{children:[e,x&&(c||m)&&s.jsx("div",{className:"scrollable-region__overlay",style:{top:x.top,left:x.left,width:x.width,height:x.height},children:j})]}):s.jsxs(s.Fragment,{children:[j,s.jsx("div",{ref:p,className:z("scrollable-region__viewport",n),children:e})]})})},Fs=48,Bs=({checklist:e})=>{const t=i.useRef(null),n=i.useRef(!1);return i.useLayoutEffect(()=>{const a=t.current;if(!a)return;const r=a.scrollHeight-a.scrollTop-a.clientHeight;(!n.current||r<=Fs)&&(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(Je,{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:Ds(e).map(a=>{const r=Y[a.status];return s.jsxs("li",{className:z("agent-view__progress-item",`agent-view__progress-item--${a.status.replace(/_/g,"-")}`),children:[s.jsx(u.Icon,{name:r.icon,size:16,color:r.color,screenReaderText:`${r.label}:`}),s.jsxs("div",{className:"agent-view__progress-item-content",children:[s.jsx("span",{className:"agent-view__progress-label",children:a.task}),a.status!==P.complete&&s.jsx("span",{className:"agent-view__progress-description",children:a.description})]})]},a.task)})})})},Gs=({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 zs{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 r=await this.connector.sendMessage(t.userMessage,t.uploadFiles);return this.onTurn(r),{id:r.message.id,text:r.message.text,type:ve.CHAT_RESPONSE_TYPE_AGENT,...r.message.followUpPrompts?{followUpPrompts:r.message.followUpPrompts}:{}}}catch{return{id:`error-${Date.now()}`,text:Cs,type:ve.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 qs=({connector:e,phase:t,chatHistory:n,chatSessionKey:a,startQuery:r,clarificationMessage:l,enableUpload:o=!1,onTurn:p,onAwaitingChange:c,onClarificationPrompt:g,onDismissClarification:m})=>{const S=i.useMemo(()=>new zs(e,{canSend:()=>t===H.running,onTurn:p,onAwaitingChange:c}),[e,t,p,c]),x=t!==H.running,E=t===H.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(Gs,{prompts:l.followUpPrompts,onSelect:g}),s.jsx("button",{type:"button",className:"agent-workspace__clarification-dismiss",onClick:m,children:"Dismiss"})]}),s.jsx("div",{className:"agent-workspace__ask-arbor",children:s.jsx(Je,{scrollSelector:".chat-panel-message-list",children:s.jsx(ve.ChatPanel,{connector:S,chatHistory:n,startQuery:r,lockConversation:x,enableUpload:o,speechEnabled:E,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:E?"Message the agent, paste a link, or attach a file…":"The agent is not accepting messages."},a)})}),t===H.stopped&&s.jsxs("div",{className:"agent-workspace__notice",role:"status",children:[s.jsx(u.Icon,{name:"circle-alert",size:16,color:"var(--color-semantic-warning-600)"}),s.jsx("span",{children:"You stopped the agent. Its progress is saved in the checklist."})]}),t===H.complete&&s.jsxs("div",{className:"agent-workspace__notice",role:"status",children:[s.jsx(u.Icon,{name:"party-popper",size:16,color:"var(--color-semantic-success-600)"}),s.jsx("span",{children:"The agent has finished."})]})]})},Ft=({item:e,depth:t,canRequestInput:n,onAttentionItemClick:a})=>{const r=Y[e.status],l=e.status.replace(/_/g,"-"),o=e.status===P.hitl&&n&&a,p=s.jsxs("div",{className:"agent-workspace__task-row",children:[s.jsx(u.Icon,{name:r.icon,size:16,color:r.color,screenReaderText:`${r.label}:`}),s.jsxs("div",{className:"agent-workspace__task-content",children:[s.jsx("span",{className:"agent-workspace__task-label",children:e.task}),e.status!==P.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:p}):p,e.children&&e.children.length>0&&s.jsx("ul",{className:"agent-workspace__task-children",children:e.children.map(c=>s.jsx(Ft,{item:c,depth:t+1,canRequestInput:n,onAttentionItemClick:a},c.task))})]})},Ge=({items:e,ariaLabel:t,canRequestInput:n,onAttentionItemClick:a})=>s.jsx("ul",{className:"agent-workspace__task-list","aria-label":t,children:e.map(r=>s.jsx(Ft,{item:r,depth:0,canRequestInput:n,onAttentionItemClick:a},r.task))}),Js=({checklist:e,isLoading:t,error:n,phase:a,canRequestInput:r,onAttentionItemClick:l})=>{const o=i.useMemo(()=>e?Ht(e):null,[e]);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:s.jsx(u.Heading,{level:4,children:"Checklist"})}),s.jsx("div",{className:"agent-workspace__panel-body","aria-live":"polite",children:s.jsxs(Je,{children:[t&&s.jsxs("div",{className:"agent-workspace__loading",children:[s.jsx(u.Icon,{name:"loader",size:16,color:"var(--color-brand-600)",className:"agent-workspace__task-icon--spinning",screenReaderText:_e}),s.jsx("span",{children:_e})]}),!t&&n&&s.jsx("p",{className:"agent-workspace__error",role:"alert",children:n}),!t&&!n&&o&&s.jsxs(s.Fragment,{children:[o.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(Ge,{items:o.needsInput,ariaLabel:"Tasks needing your input",canRequestInput:r,onAttentionItemClick:l})]}),o.complete.length>0&&s.jsxs("div",{className:z("agent-workspace__task-group",{"agent-workspace__task-group--following":o.needsInput.length>0}),children:[(o.needsInput.length>0||o.failed.length>0||o.tasks.length>0)&&s.jsx("p",{className:"agent-workspace__task-group-label",children:"Completed"}),s.jsx(Ge,{items:o.complete,ariaLabel:"Completed tasks",canRequestInput:r,onAttentionItemClick:l})]}),o.failed.length>0&&s.jsxs("div",{className:z("agent-workspace__task-group",{"agent-workspace__task-group--following":o.needsInput.length>0||o.complete.length>0}),children:[(o.needsInput.length>0||o.complete.length>0||o.tasks.length>0)&&s.jsx("p",{className:"agent-workspace__task-group-label",children:"Failed"}),s.jsx(Ge,{items:o.failed,ariaLabel:"Failed tasks",canRequestInput:r,onAttentionItemClick:l})]}),o.tasks.length>0&&s.jsxs("div",{className:z("agent-workspace__task-group",{"agent-workspace__task-group--following":o.needsInput.length>0||o.complete.length>0||o.failed.length>0}),children:[(o.needsInput.length>0||o.complete.length>0||o.failed.length>0)&&s.jsx("p",{className:"agent-workspace__task-group-label",children:"Working on"}),s.jsx(Ge,{items:o.tasks,ariaLabel:"Agent tasks",canRequestInput:r,onAttentionItemClick:l})]})]}),!t&&!n&&(!o||o.needsInput.length===0&&o.complete.length===0&&o.failed.length===0&&o.tasks.length===0)&&s.jsx("p",{className:"agent-workspace__empty",children:a===H.briefing?"Tasks will appear here once the agent starts.":"No tasks to display."})]})})]})},Ks=({resource:e,html:t,isLoading:n,error:a,onClose:r})=>{i.useEffect(()=>{if(!e)return;const o=u.SlideoverUtils.removeSlideover;return u.SlideoverUtils.removeSlideover=()=>{o(),r()},()=>{u.SlideoverUtils.removeSlideover=o}},[e,r]),i.useEffect(()=>{if(!e)return;const o=p=>{p.key==="Escape"&&u.SlideoverUtils.removeSlideover()};return window.addEventListener("keydown",o),()=>window.removeEventListener("keydown",o)},[e]);const l=i.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(u.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(u.SlideoverManager,{slideovers:l})})},Ws={[ie.mis_record]:{icon:"table",label:"Arbor MIS",color:"var(--color-brand-600)"},[ie.document_html]:{icon:"file",label:"Document",color:"var(--color-semantic-caution-800)"},[ie.file]:{icon:"file",label:"File",color:"var(--color-semantic-caution-800)"},[ie.user_file]:{icon:"upload",label:"File upload",color:"var(--color-semantic-caution-800)"},[ie.workflow]:{icon:"list-tree",label:"Workflow",color:"var(--color-semantic-warning-700)"},[ie.link]:{icon:"link",label:"Link",color:"var(--color-semantic-info-700)"}},Vs=({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(u.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(Je,{children:[t&&s.jsxs("div",{className:"agent-workspace__loading",children:[s.jsx(u.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(r=>{const l=Ws[r.type],o=r.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:p=>{p.preventDefault(),a(r)},children:s.jsx(jt,{resource:r,config:l,external:!0})}):s.jsx("button",{type:"button",className:"agent-workspace__resource-card",onClick:()=>a(r),children:s.jsx(jt,{resource:r,config:l})})},r.id)})}),!t&&!n&&e.length===0&&s.jsx("p",{className:"agent-workspace__empty",children:"No resources yet."})]})})]}),jt=({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(u.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(u.Icon,{name:"external-link",size:12,color:"var(--color-grey-500)",screenReaderText:"Opens in a new tab",className:"agent-workspace__resource-open"})]}),Ct=e=>{const t=Date.parse(e);return Number.isFinite(t)?t:0},Ys=new Intl.DateTimeFormat("en-GB",{day:"numeric",month:"long",year:"numeric",hour:"numeric",minute:"2-digit"}),nt=e=>{const t=new Date(e);return Number.isFinite(t.getTime())?Ys.format(t):e},Et=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(" ")),Rt=e=>{const n=e.replace(/[A-Za-z0-9]+(?:[_-][A-Za-z0-9]+)+/g,a=>a.split(/[_-]/).map(r=>r.toLowerCase()).join(" ")).toLowerCase();return n&&n.charAt(0).toUpperCase()+n.slice(1)},Xs=60*60*1e3,Bt=60*60*1e3,Re=24*Bt,rt=7*Re,Zs=e=>e.type!=="message-sent",Qs=(e,t)=>{const n=e.filter(Zs).map((r,l)=>({kind:"action",id:`action-${r.timestamp}-${l}`,timestampMs:Ct(r.timestamp),item:r})),a=t.map(r=>({kind:"chat",id:r.sessionId,timestampMs:Ct(r.timestamp),session:r}));return[...n,...a].sort((r,l)=>r.timestampMs-l.timestampMs||r.id.localeCompare(l.id))},en=e=>e>=rt?"weeks":e>=Re?"days":"hours",tn=e=>{if(e<Re){const a=Math.max(1,Math.round(e/Bt));return a===1?"1 hour later":`${a} hours later`}if(e<rt){const a=Math.max(1,Math.round(e/Re));return a===1?"1 day later":`${a} days later`}const t=Math.max(1,Math.round(e/rt));if(t<5)return t===1?"1 week later":`${t} weeks later`;const n=Math.max(1,Math.round(e/(30*Re)));return n===1?"1 month later":`${n} months later`},sn=(e,t=Xs)=>{if(e.length===0)return[];const n=[e[0]];for(let a=1;a<e.length;a+=1){const r=e[a-1],l=e[a],o=l.timestampMs-r.timestampMs;o>=t&&n.push({kind:"gap",id:`gap-${r.id}-${l.id}`,durationMs:o,label:tn(o),size:en(o)}),n.push(l)}return n},nn=e=>e.type==="checklist-updated"?"checklist":e.type==="status-transition"?"status":"note",an=({timeline:e,isLoading:t,error:n,onOpenChatSession:a})=>{const r=(e==null?void 0:e.actionLog)??[],l=(e==null?void 0:e.chatSessions)??[],o=Qs(r,l),p=sn(o),c=!t&&!n&&o.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||Dt}),c&&s.jsx("p",{className:"agent-workspace__timeline-status",role:"status",children:"No timeline activity yet."}),!t&&!n&&!c&&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(u.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"})})]}),p.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 ${nt(g.session.timestamp)}`,onClick:()=>a(g.session.sessionId),children:s.jsx(u.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:nt(g.session.timestamp)})]})]},g.id);const{item:m}=g,S=nn(m),x=S==="checklist",E=S==="status";return s.jsxs("div",{className:`agent-timeline__station agent-timeline__station--${S}`,children:[s.jsx("span",{className:"agent-timeline__station-rail",children:s.jsxs("button",{type:"button",className:`agent-timeline__station-node agent-timeline__station-node--${S}`,"aria-label":`${Et(m.type)}: ${Rt(m.entry)}`,children:[x&&s.jsx(u.Icon,{name:"check-solid",size:16,color:"currentColor"}),E&&s.jsx(u.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:Et(m.type)}),s.jsx("span",{className:"agent-timeline__label-entry",children:Rt(m.entry)}),s.jsx("span",{className:"agent-timeline__label-time",children:nt(m.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(u.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"})})]})]})]})},rn=["I'll get the details and come back to you","Skip this for now"],on=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:X.agent,text:t,followUpPrompts:e.clarificationPrompts??rn}},me=e=>({id:e.id,text:e.text,type:e.author===X.user?ve.CHAT_RESPONSE_TYPE_USER:e.author===X.system?ve.CHAT_RESPONSE_TYPE_INFO:ve.CHAT_RESPONSE_TYPE_AGENT,...e.followUpPrompts?{followUpPrompts:e.followUpPrompts}:{}}),it="MESSAGE_TYPE_REPOLL",Gt="agentUi:update",ct="arbor-agent-",oe={all:"ALL",checklist:"CHECKLIST",resources:"RESOURCES",chat:"CHAT",timeline:"TIMELINE"},ln=new Set(Object.values(oe)),zt=(e,t)=>`${e.endsWith("-")?e:`${e}-`}${t}`,cn=e=>typeof e=="string"&&ln.has(e)?e:oe.all,dn=e=>{if(!e||typeof e!="object")return null;const t=e;return t.type!==it?null:{type:it,target:cn(t.target)}},qt=e=>{const t=Array.isArray(e)?e:[e],n=[];for(const a of t){const r=dn(a);r&&n.push(r)}return n},un=({enabled:e,channelPrefix:t,agentId:n,subscribeToPusher:a,onRepoll:r})=>{const l=i.useRef(r),o=t==null?void 0:t.trim(),p=!!(e&&a&&o&&n.trim());return i.useEffect(()=>{l.current=r},[r]),i.useEffect(()=>{if(!p||!a||!o)return;const c=a(zt(o,n),Gt,g=>{for(const m of qt(g))l.current(m.target)});return()=>{c()}},[p,o,n,a]),p};class fe extends Error{constructor(t,n,a){super(a??`Agent service request failed (${t})`),this.name="AgentServiceError",this.status=t,this.detail=n}}const gn="/api/v1",$={agentDefinitions:"/agent-definitions",agents:"/agents",conversations:"/conversations",tripOptions:"/trip-options",demoDataset:"/demo/dataset"},B={GET:"GET",POST:"POST"},hn={error:"error"},pn={user:"user"},ue={acceptJson:"application/json",acceptHtml:"text/html",acceptEventStream:"text/event-stream",contentTypeJson:"application/json",arborApplicationUrl:"X-Arbor-Application-Url"},mn=100,Jt=e=>{switch(e){case Nt.cancelled:return A.failed;case Nt.archived:return A.complete;case A.hitl:case A.complete:case A.failed:case A["generating-a-response"]:return e;default:return A["generating-a-response"]}},Kt=e=>{switch(e){case tt.requires_attention:return P.hitl;case tt.in_progress:case tt.available:return P["generating-a-response"];case P.failed:case P.complete:case P.hitl:case P["generating-a-response"]:return e;default:return P["generating-a-response"]}},dt=e=>({ref:e.name,display_name:e.display_name,agent_intent:e.agent_intent??"",description:e.description}),_n=e=>({id:e.id,name:e.name,...e.has_run_before?{hasRunBefore:e.has_run_before}:{}}),fn=new Set(Object.values(ie)),vn=e=>fn.has(e)?e:ie.document_html,Wt=e=>({id:e.id,type:vn(e.type),title:e.title,createdDatetime:e.created_datetime,lastUpdatedDatetime:e.last_updated_datetime,misRecordUrl:e.mis_record_url}),Vt=e=>({resources:e.resources.map(Wt),pageNumber:e.page_number,pageSize:e.page_size,totalRecords:e.total_records}),Yt=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}))}),ot=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:Jt(e.status),context_ref:e.context_ref??null,checklist_ref:e.checklist_ref??null}},ut=e=>{var t;return{task:e.item??e.task??e.name??e.label??Es,status:Kt(e.status),description:e.description??"",...e.prompt?{prompt:e.prompt}:{},...(t=e.follow_up_prompts)!=null&&t.length?{clarificationPrompts:e.follow_up_prompts}:{}}},wn=e=>Array.isArray(e)?e:e.checklist_items??e.checklist??e.items??[],gt=(e,t,n)=>{var l;const a=!Array.isArray(t)&&(t.opening_message||(l=t.opening_follow_up_prompts)!=null&&l.length)?t:n,r=a?Te(a):void 0;return{invocation_id:e,checklist:wn(t).map(ut),...r?{openingMessage:r}:{}}},Xt=(e,t)=>{const n=Te(t);return{invocation_id:t.invocation_id??e,checklist:(t.checklist_items??[]).map(ut),...n?{openingMessage:n}:{}}},Te=e=>{var n,a;const t=(n=e.opening_message)==null?void 0:n.trim();if(t)return{id:Ut,author:X.agent,text:t,...(a=e.opening_follow_up_prompts)!=null&&a.length?{followUpPrompts:e.opening_follow_up_prompts}:{}}},Zt=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},Qt=e=>{const t=e.trim();return t.length>0?`File upload
3
3
 
4
- ${t}`:"File upload"},Vt=e=>e.filter(t=>t.message_type==="user_file"&&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=>{if(t.message_type==="user_file"){const n=typeof t.content=="string"?t.content:"",a=Kt(n);return{id:t.message_id,author:X.user,kind:_s.user_file,text:Wt(a)}}return{id:t.message_id,author:t.role==="user"?X.user:X.agent,text:t.content}}),mn=/:invocationId\b/g,_n=/:resourceId\b/g,fn=e=>e.trim().replace(/^Bearer\s+/i,""),vn=e=>e.endsWith("/")?e.slice(0,-1):e;class Ke{constructor(t){var a;this.baseUrl=vn(t.baseUrl??"");const n=(a=t.token)==null?void 0:a.trim();this.token=n?fn(n):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(B.GET,this.resolveUrl("agentDefinitions",$.agentDefinitions))).agent_definitions??[]}getAgentDefinition(t){return this.request(B.GET,this.apiUrl(`${$.agentDefinitions}/${encodeURIComponent(t)}`))}listTripOptions(){return this.request(B.GET,this.apiUrl($.tripOptions))}getDataset(){return this.request(B.GET,this.apiUrl($.demoDataset))}setDataset(t){return this.request(B.POST,this.apiUrl($.demoDataset),{dataset:t})}listAgents(t={}){const n=new URLSearchParams;t.status&&n.set("status",t.status),t.agentDefinitionRef&&n.set("agent_definition_ref",t.agentDefinitionRef);const a=n.toString()?`?${n.toString()}`:"";return this.request(B.GET,`${this.resolveUrl("agents",$.agents)}${a}`)}createAgent(t,n={}){var o,p;const a={agent_definition_ref:t},r=(o=n.invocationName)==null?void 0:o.trim(),l=(p=n.agentIntent)==null?void 0:p.trim();return r&&(a.invocation_name=r),l&&(a.agent_intent=l),this.request(B.POST,this.resolveUrl("agents",$.agents),a)}getAgent(t){return this.request(B.GET,this.resolveUrl("agent",`${$.agents}/${encodeURIComponent(t)}`,t))}getAgentChecklist(t){return this.request(B.GET,this.resolveUrl("agentChecklist",`${$.agents}/${encodeURIComponent(t)}/checklist`,t))}getAgentResources(t,n={}){const a=new URLSearchParams;n.pageNumber!==void 0&&a.set("page_number",String(n.pageNumber)),n.pageSize!==void 0&&a.set("page_size",String(n.pageSize)),n.type&&a.set("type",n.type);const r=a.toString(),l=this.resolveUrl("agentResources",`${$.agents}/${encodeURIComponent(t)}/resources`,t);return this.request(B.GET,r?`${l}?${r}`:l)}async listAllAgentResources(t){const n=dn;let a=1;const r=[];let l=Number.POSITIVE_INFINITY;for(;r.length<l;){const o=zt(await this.getAgentResources(t,{pageNumber:a,pageSize:n}));if(l=o.totalRecords,o.resources.length===0||(r.push(...o.resources),r.length>=l))break;a+=1}return r}getAgentResourceHtml(t,n){return this.requestText(B.GET,this.resolveResourceHtmlUrl(t,n))}getAgentTimeline(t){return this.request(B.GET,this.resolveUrl("agentTimeline",`${$.agents}/${encodeURIComponent(t)}/agent-timeline`,t))}getAgentContext(t){return this.request(B.GET,this.apiUrl(`${$.agents}/${encodeURIComponent(t)}/context`))}cancelAgent(t){return this.request(B.POST,this.resolveUrl("stopAgent",`${$.agents}/${encodeURIComponent(t)}/cancel`,t))}archiveAgent(t){return this.request(B.POST,this.apiUrl(`${$.agents}/${encodeURIComponent(t)}/archive`))}getConversation(t){return this.request(B.GET,this.resolveUrl("agentConversation",`${$.conversations}/${encodeURIComponent(t)}`,t))}async chat(t,n,a={}){const r=!!(a.uploadFiles&&a.uploadFiles.length>0),l=await this.fetchImpl(this.resolveUrl("agentChat",`${$.agents}/${encodeURIComponent(t)}/chat`,t),{method:B.POST,headers:{...this.customHeaders,...this.authHeaders(),Accept:ue.acceptEventStream,...r?{}:{"Content-Type":ue.contentTypeJson}},body:r?xn(n,a.uploadFiles??[]):JSON.stringify(n),signal:a.signal});if(!l.ok)throw await this.toError(l);if(!l.body)throw new fe(l.status,null,"Chat response contained no stream body");return this.consumeSse(l.body,a.onEvent)}authHeaders(){return this.token?{Authorization:`Bearer ${this.token}`}:{}}apiUrl(t){return`${this.baseUrl}${on}${t}`}resolveUrl(t,n,a,r){const l=this.urls[t];if(!l)return this.apiUrl(n);let o=l;return a&&(o=o.replace(mn,encodeURIComponent(a))),r&&(o=o.replace(_n,encodeURIComponent(r))),o}resolveResourceHtmlUrl(t,n){return this.urls.agentResourceHtml?this.resolveUrl("agentResourceHtml",`${$.agents}/${encodeURIComponent(t)}/resources/${encodeURIComponent(n)}`,t,n):this.urls.agentResources?`${this.resolveUrl("agentResources",`${$.agents}/${encodeURIComponent(t)}/resources`,t).replace(/\/$/,"")}/${encodeURIComponent(n)}`:this.apiUrl(`${$.agents}/${encodeURIComponent(t)}/resources/${encodeURIComponent(n)}`)}async request(t,n,a){const r=await this.fetchImpl(n,{method:t,headers:{...this.customHeaders,...this.authHeaders(),Accept:ue.acceptJson,...a===void 0?{}:{"Content-Type":ue.contentTypeJson}},...a===void 0?{}:{body:JSON.stringify(a)}});if(!r.ok)throw await this.toError(r);if(r.status!==204)return await r.json()}async requestText(t,n){const a=await this.fetchImpl(n,{method:t,headers:{...this.customHeaders,...this.authHeaders(),Accept:ue.acceptHtml}});if(!a.ok)throw await this.toError(a);return a.text()}async toError(t){let n=null;try{n=await t.json()}catch{}return new fe(t.status,n,`Agent service request failed (${t.status} ${t.statusText})`)}async consumeSse(t,n){const a=t.getReader(),r=new TextDecoder;let l="",o;const p=c=>{const{event:g,data:_}=wn(c);if(_===null)return;if(g===ln.error){const x=jt(_);throw new fe(502,x,(x==null?void 0:x.message)??"Chat stream error")}const y=jt(_);y&&(o=y,n==null||n(y))};for(;;){const{done:c,value:g}=await a.read();if(c)break;l+=r.decode(g,{stream:!0});const _=l.split(`
4
+ ${t}`:"File upload"},es=e=>e.filter(t=>t.message_type==="user_file"&&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=>{if(t.message_type==="user_file"){const n=typeof t.content=="string"?t.content:"",a=Zt(n);return{id:t.message_id,author:X.user,kind:xs.user_file,text:Qt(a)}}return{id:t.message_id,author:t.role==="user"?X.user:X.agent,text:t.content}}),xn=/:invocationId\b/g,kn=/:resourceId\b/g,Sn=e=>e.trim().replace(/^Bearer\s+/i,""),yn=e=>e.endsWith("/")?e.slice(0,-1):e;class Ke{constructor(t){var a;this.baseUrl=yn(t.baseUrl??"");const n=(a=t.token)==null?void 0:a.trim();this.token=n?Sn(n):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(B.GET,this.resolveUrl("agentDefinitions",$.agentDefinitions))).agent_definitions??[]}getAgentDefinition(t){return this.request(B.GET,this.apiUrl(`${$.agentDefinitions}/${encodeURIComponent(t)}`))}listTripOptions(){return this.request(B.GET,this.apiUrl($.tripOptions))}getDataset(){return this.request(B.GET,this.apiUrl($.demoDataset))}setDataset(t){return this.request(B.POST,this.apiUrl($.demoDataset),{dataset:t})}listAgents(t={}){const n=new URLSearchParams;t.status&&n.set("status",t.status),t.agentDefinitionRef&&n.set("agent_definition_ref",t.agentDefinitionRef);const a=n.toString()?`?${n.toString()}`:"";return this.request(B.GET,`${this.resolveUrl("agents",$.agents)}${a}`)}createAgent(t,n={}){var o,p;const a={agent_definition_ref:t},r=(o=n.invocationName)==null?void 0:o.trim(),l=(p=n.agentIntent)==null?void 0:p.trim();return r&&(a.invocation_name=r),l&&(a.agent_intent=l),this.request(B.POST,this.resolveUrl("agents",$.agents),a)}getAgent(t){return this.request(B.GET,this.resolveUrl("agent",`${$.agents}/${encodeURIComponent(t)}`,t))}getAgentChecklist(t){return this.request(B.GET,this.resolveUrl("agentChecklist",`${$.agents}/${encodeURIComponent(t)}/checklist`,t))}getAgentResources(t,n={}){const a=new URLSearchParams;n.pageNumber!==void 0&&a.set("page_number",String(n.pageNumber)),n.pageSize!==void 0&&a.set("page_size",String(n.pageSize)),n.type&&a.set("type",n.type);const r=a.toString(),l=this.resolveUrl("agentResources",`${$.agents}/${encodeURIComponent(t)}/resources`,t);return this.request(B.GET,r?`${l}?${r}`:l)}async listAllAgentResources(t){const n=mn;let a=1;const r=[];let l=Number.POSITIVE_INFINITY;for(;r.length<l;){const o=Vt(await this.getAgentResources(t,{pageNumber:a,pageSize:n}));if(l=o.totalRecords,o.resources.length===0||(r.push(...o.resources),r.length>=l))break;a+=1}return r}getAgentResourceHtml(t,n){return this.requestText(B.GET,this.resolveResourceHtmlUrl(t,n))}getAgentTimeline(t){return this.request(B.GET,this.resolveUrl("agentTimeline",`${$.agents}/${encodeURIComponent(t)}/agent-timeline`,t))}getAgentContext(t){return this.request(B.GET,this.apiUrl(`${$.agents}/${encodeURIComponent(t)}/context`))}cancelAgent(t){return this.request(B.POST,this.resolveUrl("stopAgent",`${$.agents}/${encodeURIComponent(t)}/cancel`,t))}archiveAgent(t){return this.request(B.POST,this.apiUrl(`${$.agents}/${encodeURIComponent(t)}/archive`))}getConversation(t){return this.request(B.GET,this.resolveUrl("agentConversation",`${$.conversations}/${encodeURIComponent(t)}`,t))}async chat(t,n,a={}){const r=!!(a.uploadFiles&&a.uploadFiles.length>0),l=await this.fetchImpl(this.resolveUrl("agentChat",`${$.agents}/${encodeURIComponent(t)}/chat`,t),{method:B.POST,headers:{...this.customHeaders,...this.authHeaders(),Accept:ue.acceptEventStream,...r?{}:{"Content-Type":ue.contentTypeJson}},body:r?bn(n,a.uploadFiles??[]):JSON.stringify(n),signal:a.signal});if(!l.ok)throw await this.toError(l);if(!l.body)throw new fe(l.status,null,"Chat response contained no stream body");return this.consumeSse(l.body,a.onEvent)}authHeaders(){return this.token?{Authorization:`Bearer ${this.token}`}:{}}apiUrl(t){return`${this.baseUrl}${gn}${t}`}resolveUrl(t,n,a,r){const l=this.urls[t];if(!l)return this.apiUrl(n);let o=l;return a&&(o=o.replace(xn,encodeURIComponent(a))),r&&(o=o.replace(kn,encodeURIComponent(r))),o}resolveResourceHtmlUrl(t,n){return this.urls.agentResourceHtml?this.resolveUrl("agentResourceHtml",`${$.agents}/${encodeURIComponent(t)}/resources/${encodeURIComponent(n)}`,t,n):this.urls.agentResources?`${this.resolveUrl("agentResources",`${$.agents}/${encodeURIComponent(t)}/resources`,t).replace(/\/$/,"")}/${encodeURIComponent(n)}`:this.apiUrl(`${$.agents}/${encodeURIComponent(t)}/resources/${encodeURIComponent(n)}`)}async request(t,n,a){const r=await this.fetchImpl(n,{method:t,headers:{...this.customHeaders,...this.authHeaders(),Accept:ue.acceptJson,...a===void 0?{}:{"Content-Type":ue.contentTypeJson}},...a===void 0?{}:{body:JSON.stringify(a)}});if(!r.ok)throw await this.toError(r);if(r.status!==204)return await r.json()}async requestText(t,n){const a=await this.fetchImpl(n,{method:t,headers:{...this.customHeaders,...this.authHeaders(),Accept:ue.acceptHtml}});if(!a.ok)throw await this.toError(a);return a.text()}async toError(t){let n=null;try{n=await t.json()}catch{}return new fe(t.status,n,`Agent service request failed (${t.status} ${t.statusText})`)}async consumeSse(t,n){const a=t.getReader(),r=new TextDecoder;let l="",o;const p=c=>{const{event:g,data:m}=Nn(c);if(m===null)return;if(g===hn.error){const x=Tt(m);throw new fe(502,x,(x==null?void 0:x.message)??"Chat stream error")}const S=Tt(m);S&&(o=S,n==null||n(S))};for(;;){const{done:c,value:g}=await a.read();if(c)break;l+=r.decode(g,{stream:!0});const m=l.split(`
5
5
 
6
- `);l=_.pop()??"";for(const y of _)p(y)}if(l.trim()&&p(l),!o)throw new fe(502,null,"Chat stream ended without any events");return o}}const wn=e=>{let t=null;const n=[];for(const a of e.split(`
6
+ `);l=m.pop()??"";for(const S of m)p(S)}if(l.trim()&&p(l),!o)throw new fe(502,null,"Chat stream ended without any events");return o}}const Nn=e=>{let t=null;const n=[];for(const a of e.split(`
7
7
  `)){const r=a.trimEnd();r.startsWith("event:")?t=r.slice(6).trim():r.startsWith("data:")&&n.push(r.slice(5).trim())}return{event:t,data:n.length>0?n.join(`
8
- `):null}},jt=e=>{try{return JSON.parse(e)}catch{return}};function xn(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 kn={id:Lt,author:X.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 Ct=0;const yn=e=>(Ct+=1,`${e}-${Date.now()}-${Ct}`),Sn=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 Yt{constructor(t,n,a={}){this.seededChecklist=[],this.client=t,this.agentId=n,this.chatId=a.chatId??n,this.opening=a.openingMessage??kn,this.model=a.model}openingMessage(){return this.opening}async bootstrapConversation(){const t=await this.client.getConversation(this.chatId),n=Vt(t.messages);return n.length===0?[this.opening]:n}async start(t){return{...await this.exchange(Sn(t)),phase:H.running}}sendMessage(t,n){return this.exchange(t,n)}async stop(){await this.client.cancelAgent(this.agentId)}seedChecklist(t){this.seededChecklist=t}async exchange(t,n){var o;const a=[{role:cn.user,content:t}],r=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:r.event_id||yn("msg-agent"),author:X.agent,text:r.message.content,...(o=r.follow_up_prompts)!=null&&o.length?{followUpPrompts:r.follow_up_prompts}:{}};try{const p=await this.client.getAgent(this.agentId),{checklist:c}=Jt(this.agentId,p);return this.seededChecklist=c,{message:l,checklist:c}}catch{return{message:l,...this.seededChecklist.length?{checklist:this.seededChecklist}:{}}}}}const pt=(e,t)=>n=>{var a,r;return new Yt(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:((r=t==null?void 0:t.resolveOpeningMessage)==null?void 0:r.call(t,n))??(t==null?void 0:t.openingMessage)})},Xt=e=>e instanceof fe?e.message:e instanceof TypeError?"Network error while contacting the agent service.":e instanceof Error&&e.message?e.message:Mt,bn=e=>{const t={};for(const n of e){const a=Te(n);if(!a)continue;const r=n.invocation_id??n.id;t[r]=a,t[n.id]=a}return t},Nn=e=>JSON.stringify(e),at=(e,t)=>JSON.stringify(e)===JSON.stringify(t),Zt=e=>{const{jwt:t,headers:n,urls:a}=e,r=JSON.stringify(n??{}),l=Nn(a),o=i.useMemo(()=>new Ke({token:t,headers:n,urls:a}),[t,l]);i.useLayoutEffect(()=>{o.setHeaders(n)},[o,r]);const[p,c]=i.useState([]),[g,_]=i.useState([]),[y,x]=i.useState({}),[E,T]=i.useState("loading"),[f,G]=i.useState(null),[j,R]=i.useState(0),S=i.useCallback((I,D)=>{const F=I.map(lt),K=D.map(ut),W=bn(I);c(O=>at(O,F)?O:F),_(O=>at(O,K)?O:K),x(O=>at(O,W)?O:W),T("idle"),G(null)},[]);i.useEffect(()=>{let I=!1;return T("loading"),G(null),(async()=>{try{const[D,F]=await Promise.all([o.listAgents(),o.listAgentDefinitions()]);if(I)return;S(D,F)}catch(D){if(I)return;c([]),_([]),x({}),T("error"),G(Xt(D))}})(),()=>{I=!0}},[S,o,j]);const m=i.useCallback(()=>{R(I=>I+1)},[]),b=i.useCallback(async()=>{try{const[I,D]=await Promise.all([o.listAgents(),o.listAgentDefinitions()]);S(I,D)}catch{}},[S,o]),v=i.useCallback(async I=>{const[D,F]=await Promise.all([o.getAgentChecklist(I),o.getAgent(I).catch(()=>null)]);return ht(I,D,F??void 0)},[o]),C=i.useCallback(async I=>o.listAllAgentResources(I),[o]),P=i.useCallback(async({definition:I,invocationName:D})=>{const F=await o.createAgent(I.ref,{invocationName:D}),K=await o.getAgent(F.id),W=lt(K),O=Te(K);return c(L=>[W,...L]),O&&x(L=>({...L,[W.invocation_id]:O,[W.id]:O})),W},[o]),we=i.useMemo(()=>pt(o,{resolveOpeningMessage:I=>y[I.invocation_id]??y[I.id]}),[o,y]);return{agents:p,agentDefinitions:g,loadState:E,loadError:f,reload:m,refresh:b,fetchAgentChecklist:v,fetchAgentResources:C,createAgent:P,chatConnector:we}},An=e=>JSON.stringify(e),Qt=e=>{const{agent:t,jwt:n,headers:a,urls:r,chatId:l}=e,o=JSON.stringify(a??{}),p=An(r),c=i.useMemo(()=>new Ke({token:n,headers:a,urls:{agent:r.agentUrl,agentChecklist:r.agentChecklistUrl,...r.agentResourcesUrl?{agentResources:r.agentResourcesUrl}:{},...r.agentTimelineUrl?{agentTimeline:r.agentTimelineUrl}:{},agentChat:r.agentChatUrl,agentConversation:r.agentConversationUrl,...r.stopAgentUrl?{stopAgent:r.stopAgentUrl}:{}}}),[n,p]);i.useLayoutEffect(()=>{c.setHeaders(a)},[c,o]);const g=i.useCallback(async T=>{const[f,G]=await Promise.all([c.getAgentChecklist(T),c.getAgent(T).catch(()=>null)]);return ht(T,f,G??void 0)},[c]),_=i.useCallback(async T=>c.listAllAgentResources(T),[c]),y=i.useCallback(async(T,f)=>c.getAgentResourceHtml(T,f),[c]),x=i.useCallback(async T=>{const f=await c.getAgentTimeline(T);return qt(f)},[c]);return{connector:i.useMemo(()=>pt(c,{chatId:l??t.invocation_id})(t),[c,t.invocation_id,l]),fetchAgentChecklist:g,fetchAgentResources:_,fetchAgentResourceHtml:y,fetchAgentTimeline:x}},es=e=>{const t=document.querySelector(e);t instanceof HTMLElement&&t.removeAttribute("aria-describedby")},jn=3e4,Cn=(e,t)=>{const n=e.hasRunBefore?t||"This trip":e.tripName.trim()||"A new trip",a=e.destination?` to ${e.destination}`:"",r=e.hasRunBefore?" It has run before.":"";return`${n}${a}.${r}`.trim()},En=e=>{switch(e){case A.failed:return H.stopped;case A.complete:return H.complete;default:return H.running}},Et=(e,t)=>{t([me(e)])},Rn=(e,t)=>e.length===t.length&&e.every((n,a)=>{const r=t[a];return r!==void 0&&n.id===r.id&&n.text===r.text}),ts=({agent:e,invocationId:t,open:n,onClose:a,jwt:r,headers:l,agentUrl:o,agentChecklistUrl:p,agentResourcesUrl:c,agentTimelineUrl:g,agentChatUrl:_,agentConversationUrl:y,stopAgentUrl:x,chatId:E,enableUpload:T,initialBrief:f,initialPhase:G,initialChecklist:j,usePusherToRepoll:R=!1,pusherChannelPrefix:S=dt,subscribeToPusher:m})=>{const[b,v]=i.useState(E??t),[C,P]=i.useState("chat"),[we,I]=i.useState(!1),{connector:D,fetchAgentChecklist:F,fetchAgentResources:K,fetchAgentResourceHtml:W,fetchAgentTimeline:O}=Qt({agent:{...e,invocation_id:t},jwt:r,headers:l,chatId:b,urls:{agentUrl:o,agentChecklistUrl:p,agentResourcesUrl:c,agentTimelineUrl:g,agentChatUrl:_,agentConversationUrl:y,stopAgentUrl:x}}),L=i.useRef(D),[Z,xe]=i.useState(G??(f?H.running:En(e.status))),[Ie,q]=i.useState([]),[Le,ge]=i.useState(0),[ke,he]=i.useState(),[We,ne]=i.useState(null),[Ve,ye]=i.useState([]),[le,Se]=i.useState(!1),[Oe,pe]=i.useState(null),[Me,Ue]=i.useState(null),[Pe,be]=i.useState(null),[De,Ne]=i.useState(!1),[Ye,Ae]=i.useState(null),[ae,je]=i.useState(null),[h,N]=i.useState(!1),[k,J]=i.useState(null),[Q,ee]=i.useState(j??null),[ce,Ce]=i.useState(!1),[as,Xe]=i.useState(null),[$e,Ze]=i.useState(!1),[He,rs]=i.useState(!1),[Fe,is]=i.useState(!1),mt=i.useRef($e),_t=i.useRef(0),ft=i.useRef(0);i.useEffect(()=>{L.current=D},[D]),i.useLayoutEffect(()=>{n&&es(".agent-workspace")},[n]),i.useEffect(()=>{mt.current=$e},[$e]),i.useEffect(()=>{v(E??t),P("chat"),I(!1),q([]),ge(d=>d+1)},[t,E]),i.useEffect(()=>{if(!n||f)return;const d=L.current.bootstrapConversation;if(!d){Et(L.current.openingMessage(),q);return}let w=!1;return Ze(!0),(async()=>{try{const M=await d.call(L.current);if(w)return;q(M.map(me))}catch{w||Et(L.current.openingMessage(),q)}finally{w||Ze(!1)}})(),()=>{w=!0}},[n,f,t,b]);const te=i.useCallback(()=>{const d=++_t.current;(async()=>{var w,M;try{const V=await F(t);if(d!==_t.current)return;ee(re=>JSON.stringify(re)===JSON.stringify(V.checklist)?re:V.checklist),Xe(null),(M=(w=L.current).seedChecklist)==null||M.call(w,V.checklist)}catch{}})()},[F,t]),de=i.useCallback(()=>{c&&(async()=>{try{const d=await K(t);ye(d),pe(null)}catch{}})()},[c,K,t]),se=i.useCallback(()=>{if(!g)return;const d=++ft.current;(async()=>{try{const w=await O(t);if(d!==ft.current)return;je(M=>JSON.stringify(M)===JSON.stringify(w)?M:w),J(null)}catch{}})()},[g,O,t]),Ee=i.useCallback(d=>{const w=L.current.bootstrapConversation;w&&(async()=>{try{const M=await w.call(L.current);if(mt.current)return;const V=M.map(me);let re=!1;q(wt=>Rn(wt,V)?wt:(re=!0,V)),re&&(d!=null&&d.refreshSidePanelsOnChange)&&(te(),se())}catch{}})()},[te,se]),os=i.useCallback(d=>{switch(d){case oe.checklist:te();return;case oe.resources:de();return;case oe.chat:Ee();return;case oe.timeline:se();return;case oe.all:default:te(),de(),Ee(),se()}},[te,Ee,de,se]);rn({enabled:n&&R,channelPrefix:S,agentId:e.id,subscribeToPusher:m,onRepoll:os}),i.useEffect(()=>{if(!n||f||R)return;const d=window.setInterval(()=>{Ee({refreshSidePanelsOnChange:!0})},jn);return()=>{window.clearInterval(d)}},[n,f,R,t,b,Ee]);const ls=i.useCallback(d=>{var w,M;d.checklist?(ee(d.checklist),(M=(w=L.current).seedChecklist)==null||M.call(w,d.checklist)):te(),d.phase&&xe(d.phase),de(),se()},[te,de,se]);i.useEffect(()=>{var d,w;!n||f||j&&j.length>0&&((w=(d=L.current).seedChecklist)==null||w.call(d,j))},[n,f,j]),i.useEffect(()=>{if(!n||f)return;let d=!1;return Ce(w=>j!=null&&j.length?!1:w||Q===null||Q.length===0),Xe(null),(async()=>{var w,M;try{const V=await F(t);if(d)return;j!=null&&j.length||(ee(V.checklist),(M=(w=L.current).seedChecklist)==null||M.call(w,V.checklist))}catch{!d&&!(j!=null&&j.length)&&Xe(ze)}finally{d||Ce(!1)}})(),()=>{d=!0}},[n,t,f,j,F]),i.useEffect(()=>{if(!n||!c)return;let d=!1;return Se(!0),pe(null),(async()=>{try{const w=await K(t);d||ye(w)}catch{d||pe(ks)}finally{d||Se(!1)}})(),()=>{d=!0}},[n,t,c,K]);const cs=i.useCallback(()=>{Ue(null),be(null),Ae(null),Ne(!1)},[]),ds=i.useCallback(d=>{if(d.misRecordUrl){window.open(d.misRecordUrl,"_blank","noopener,noreferrer");return}Ue(d),be(null),Ae(null),Ne(!0),(async()=>{try{const w=await W(t,d.id);be(w)}catch{Ae(ys)}finally{Ne(!1)}})()},[W,t]);i.useEffect(()=>{if(!n||!g)return;let d=!1;return N(w=>w||ae===null),J(null),(async()=>{try{const w=await O(t);d||je(w)}catch{d||J(Ot)}finally{d||N(!1)}})(),()=>{d=!0}},[n,t,g,O]),i.useEffect(()=>{if(!n||!f)return;let d=!1;const w={id:`user-brief-${Date.now()}`,author:X.user,text:Cn(f,e.invocation_name)};return(async()=>{var V,re;const M=await L.current.start(f);d||(q([me(L.current.openingMessage()),me(w),me(M.message)]),M.checklist?(ee(M.checklist),(re=(V=L.current).seedChecklist)==null||re.call(V,M.checklist)):te(),xe(M.phase??H.running),de(),se())})(),()=>{d=!0}},[n,f,e.invocation_name,t,te,de,se]);const us=i.useCallback(d=>{ne(tn(d))},[]),Qe=E??t,Be=ae==null?void 0:ae.chatSessions,vt=Be!=null&&Be.length?Be.reduce((d,w)=>Date.parse(w.timestamp)<Date.parse(d.timestamp)?w:d).sessionId:void 0,et=i.useCallback(()=>{P("chat"),I(!1),b!==Qe&&(v(Qe),q([]),ge(d=>d+1))},[b,Qe]),gs=i.useCallback(d=>{if(d===vt){et();return}v(d),I(!0),P("chat"),q([]),ge(w=>w+1)},[vt,et]),hs=i.useCallback(d=>{ne(null),he(d),ge(w=>w+1)},[]),ps=i.useCallback(async()=>{await L.current.stop(),xe(H.stopped)},[]),ms=Q;return s.jsxs(u.Modal,{open:n,closeHandler:a,hideCloseButton:!0,className:"agent-workspace",children:[s.jsxs(u.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(u.Icon,{name:"ask-arbor",size:24})}),s.jsx(u.Modal.Title,{children:e.invocation_name}),s.jsx("span",{className:z("agent-workspace__phase",`agent-workspace__phase--${Z}`),children:Ns[Z]})]}),s.jsxs("div",{className:"agent-workspace__header-actions",children:[s.jsx(u.Button,{variant:He?"secondary":"primary",size:"S",iconLeftName:"clipboard-list",iconLeftScreenReaderText:"Toggle checklist","aria-pressed":!He,onClick:()=>rs(d=>!d),children:"Checklist"}),s.jsx(u.Button,{variant:Fe?"secondary":"primary",size:"S",iconLeftName:"files",iconLeftScreenReaderText:"Toggle resources","aria-pressed":!Fe,onClick:()=>is(d=>!d),children:"Resources"}),s.jsx(u.Button,{variant:"secondary",size:"S",iconLeftName:"x",iconLeftScreenReaderText:"Close",onClick:a,children:"Close"})]})]}),s.jsxs(u.Modal.Body,{className:z("agent-workspace__body",{"agent-workspace__body--no-checklist":He,"agent-workspace__body--no-resources":Fe}),children:[" ",s.jsxs("section",{className:z("agent-workspace__panel","agent-workspace__panel--chat",{"agent-workspace__panel--timeline":!!g&&C==="timeline"}),"aria-label":"Agent",children:[s.jsxs("div",{className:"agent-workspace__panel-header",children:[s.jsx(u.Heading,{level:4,children:"Agent"}),x&&Z===H.running&&s.jsx(u.Button,{className:"agent-workspace__panel-header-action",variant:"secondary-destructive",size:"S",iconLeftName:"circle-x",iconLeftScreenReaderText:"Stop",onClick:()=>void ps(),children:"Stop agent"})]}),g&&s.jsxs(u.Tabs,{className:"agent-workspace__center-tabs","aria-label":"Center panel",children:[s.jsx(u.Tabs.Item,{active:C==="chat",tabElementProps:{id:"agent-center-tab-chat",onClick:()=>P("chat")},children:"Chat"}),s.jsx(u.Tabs.Item,{active:C==="timeline",tabElementProps:{id:"agent-center-tab-timeline",onClick:()=>P("timeline")},children:"Timeline"})]}),g&&C==="chat"&&we&&s.jsx("div",{className:"agent-workspace__center-back",children:s.jsx(u.Button,{variant:"tertiary",size:"S",iconLeftName:"arrow-left",iconLeftScreenReaderText:"Back to main chat",onClick:et,children:"Back to main chat"})}),g&&C==="timeline"&&s.jsx(Qs,{timeline:ae,isLoading:h,error:k,onOpenChatSession:gs}),s.jsx("div",{className:"agent-workspace__chat-keep-alive",hidden:!!g&&C!=="chat",children:s.jsx(Hs,{connector:D,phase:Z,chatHistory:Ie,chatSessionKey:Le,startQuery:ke,clarificationMessage:We,enableUpload:T,onTurn:ls,onAwaitingChange:Ze,onClarificationPrompt:hs,onDismissClarification:()=>ne(null)})})]}),!He&&s.jsx(Fs,{checklist:ms,isLoading:ce,error:as,phase:Z,canRequestInput:Z===H.running&&!$e,onAttentionItemClick:us}),!Fe&&s.jsx(zs,{resources:Ve,isLoading:le,error:Oe,onOpenResource:ds}),s.jsx(Bs,{resource:Me,html:Pe,isLoading:De,error:Ye,onClose:cs})]})]})},Tn="Unable to load agent definitions. Please try again.",In="Unable to start the agent.",Rt="Loading agents…",ss=({open:e,onClose:t,onStart:n,agentDefinitions:a,definitionsState:r="idle",definitionsError:l=null,onRetryDefinitions:o,embedded:p=!1})=>{const[c,g]=i.useState(void 0),[_,y]=i.useState(""),[x,E]=i.useState(!1),[T,f]=i.useState(null),G=[...a].sort((v,C)=>v.display_name.localeCompare(C.display_name)).map(v=>({value:v.ref,label:v.display_name}));i.useEffect(()=>{e&&(g(void 0),y(""),E(!1),f(null))},[e]),i.useLayoutEffect(()=>{!e||p||es(".new-agent")},[e,p]);const j=c!==void 0&&_.trim().length>0,R=i.useCallback(v=>{const C=a.find(P=>P.ref===v[0]);C&&g(C)},[a]),S=i.useCallback(async()=>{if(!(!c||!j||x)){E(!0),f(null);try{await n({definition:c,invocationName:_.trim()})}catch(v){f(v instanceof Error?v.message:In)}finally{E(!1)}}},[j,c,_,x,n]);if(r==="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(u.Icon,{name:"ask-arbor",size:24})}),p?s.jsx("h2",{className:"new-agent__title",children:"Start an agent"}):s.jsx(u.Modal.Title,{children:"Start an agent"})]});let b;return r==="loading"?b=s.jsxs("div",{className:"new-agent__state","aria-live":"polite",children:[s.jsx(u.Icon,{name:"loader",size:24,color:"var(--color-brand-600)",className:"new-agent__spinner",screenReaderText:Rt}),s.jsx("p",{className:"new-agent__state-message",children:Rt})]}):r==="error"?b=s.jsxs("div",{className:"new-agent__state new-agent__state--error",role:"alert",children:[s.jsx(u.Icon,{name:"triangle-alert",size:24,color:"var(--color-semantic-destructive-600)"}),s.jsx("p",{className:"new-agent__state-message",children:l??Tn}),o?s.jsx(u.Button,{variant:"secondary",size:"S",onClick:o,children:"Try again"}):null]}):b=s.jsxs("form",{className:"new-agent__form","aria-label":"Start an agent",onSubmit:v=>{v.preventDefault(),j&&!x&&S()},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(u.SelectDropdown,{id:"new-agent-type",placeholder:"Which agent would you like to start?",options:G,selectedValues:c?[c.ref]:[],onSelectionChange:R})]}),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(u.TextInput,{id:"new-agent-invocation-name",value:_,placeholder:"What would you like to call your agent?",onChange:v=>y(v.target.value)})]}),T?s.jsx("p",{className:"new-agent__error",role:"alert",children:T}):null,s.jsx("div",{className:"new-agent__actions",children:s.jsx(u.Button,{type:"submit",variant:"primary",className:z("new-agent__start-button",{"new-agent__start-button--starting":x}),disabled:!j||x,iconLeftName:x?"loader":"sparkles",iconLeftScreenReaderText:x?"Starting":void 0,children:x?"Starting…":"Start"})})]}),p?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:b})]}):s.jsxs(u.Modal,{open:e,closeHandler:t,className:"new-agent",children:[s.jsx(u.Modal.Header,{className:"new-agent__header",children:m}),s.jsx(u.Modal.Body,{className:"new-agent__body",children:b})]})},Tt=e=>{window.location.assign(e)},Ln=({open:e,authToken:t,headers:n,agentDefinitionsUrl:a,agentsUrl:r,closeUrl:l,successUrl:o,onClose:p,onStart:c,embedded:g=!1})=>{const _=JSON.stringify(n??{}),y=i.useMemo(()=>new Ke({token:t,headers:n,urls:{agentDefinitions:a,agents:r}}),[t,a,r,_]),[x,E]=i.useState([]),[T,f]=i.useState("loading"),[G,j]=i.useState(null),[R,S]=i.useState(0);i.useEffect(()=>{if(!e)return;let C=!1;return f("loading"),j(null),(async()=>{try{const P=await y.listAgentDefinitions();if(C)return;E(P.map(ut)),f("idle")}catch(P){if(C)return;E([]),j(Xt(P)),f("error")}})(),()=>{C=!0}},[y,e,R]);const m=i.useCallback(()=>{p==null||p(),l&&Tt(l)},[l,p]),b=i.useCallback(async C=>{await y.createAgent(C.definition.ref,{invocationName:C.invocationName}),c==null||c(C),o&&Tt(o)},[y,c,o]),v=i.useCallback(()=>{S(C=>C+1)},[]);return s.jsx(ss,{open:e,onClose:m,onStart:b,agentDefinitions:x,definitionsState:T,definitionsError:G,onRetryDefinitions:v,embedded:g})},On=e=>"agentDefinitionsUrl"in e,ns=e=>On(e)?s.jsx(Ln,{...e}):s.jsx(ss,{...e}),Mn=e=>e!==void 0&&e.some(t=>t.status===U.hitl),Un=(e,t)=>Mn(t)?A.hitl:e.status,Pn=({column:e,label:t})=>e.statusIcon?s.jsx("span",{className:"agent-view__status-indicator",children:s.jsx(u.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(u.Dot,{colour:e.dotColour,label:t})}),Dn=({agent:e,agentName:t,column:n,isExpanded:a,isLoading:r,checklist:l,error:o,onToggle:p,onViewAgent:c})=>{const{id:g,invocation_name:_}=e,y=`agent-card-${g}-header`,x=`agent-card-${g}-progress`;return s.jsx("li",{className:z("agent-view__card",{"agent-view__card--expanded":a}),children:s.jsxs(u.Card,{spacing:"dense",children:[s.jsx("button",{type:"button",className:"agent-view__card-toggle","aria-expanded":a,"aria-controls":x,"aria-label":_,id:y,onClick:()=>p(g),children:s.jsxs("div",{className:"agent-view__card-content",children:[s.jsx(Pn,{column:n}),s.jsx("span",{className:"agent-view__card-invocation-name",children:_}),s.jsx("span",{className:"agent-view__card-agent-name",children:t}),s.jsx(u.Icon,{name:a?"chevron-up":"chevron-down",size:16,className:"agent-view__card-chevron"})]})}),a&&s.jsxs("div",{id:x,"aria-labelledby":y,className:"agent-view__card-progress",children:[r&&s.jsxs("div",{className:"agent-view__progress-loading","aria-live":"polite",children:[s.jsx(u.Icon,{name:"loader",size:16,color:"var(--color-brand-600)",className:"agent-view__progress-icon--spinning",screenReaderText:_e}),s.jsx("span",{children:_e})]}),!r&&o&&s.jsx("p",{className:"agent-view__progress-error",role:"alert",children:o}),!r&&!o&&l!==null&&s.jsx(Ps,{checklist:l}),!r&&!o&&l===null&&s.jsxs("div",{className:"agent-view__progress-loading","aria-live":"polite",children:[s.jsx(u.Icon,{name:"loader",size:16,color:"var(--color-brand-600)",className:"agent-view__progress-icon--spinning",screenReaderText:_e}),s.jsx("span",{children:_e})]}),s.jsx("div",{className:"agent-view__card-actions",children:s.jsx(u.Button,{variant:"secondary",size:"S",onClick:()=>c==null?void 0:c(e),children:"View agent"})})]})]})})},It=({column:e,agents:t,expandedAgentId:n,loadingAgentId:a,checklistByInvocationId:r,errorByAgentId:l,definitionNameByRef:o,onToggleAgent:p,onViewAgent:c,isSplit:g=!1})=>s.jsxs("section",{className:z("agent-view__column",{"agent-view__column--split":g}),"aria-label":e.title,children:[s.jsxs("div",{className:"agent-view__column-header",children:[s.jsx(u.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(_=>s.jsx(Dn,{agent:_,agentName:ct(_,o),column:e,isExpanded:n===_.id,isLoading:a===_.id,checklist:r[_.invocation_id]??null,error:l[_.id]??null,onToggle:p,onViewAgent:c},_.id))})]}),ct=(e,t)=>t.get(e.agent_definition_ref)??e.agent_definition_ref.replace(/_/g," "),$n=({jwt:e,headers:t,agentDefinitionsUrl:n,agentsUrl:a,agentUrl:r,agentChecklistUrl:l,agentResourcesUrl:o,agentTimelineUrl:p,agentChatUrl:c,agentConversationUrl:g,stopAgentUrl:_,enableUpload:y,showHeader:x=!1,institutions:E,usePusherToRepoll:T=!1,pusherChannelPrefix:f=dt,subscribeToPusher:G})=>{var je;const j=i.useMemo(()=>({agentDefinitions:n,agents:a,agent:r,agentChecklist:l,...o?{agentResources:o}:{},...p?{agentTimeline:p}:{},agentChat:c,agentConversation:g}),[n,a,r,l,o,p,c,g]),[R,S]=i.useState(null),m=R?(je=E==null?void 0:E.find(h=>h.applicationId===R.application_id))==null?void 0:je.applicationUrl:void 0,b=i.useMemo(()=>{const h={...t??{}};return m?h[ue.arborApplicationUrl]=m:delete h[ue.arborApplicationUrl],h},[t,m]),{agents:v,agentDefinitions:C,loadState:P,loadError:we,reload:I,refresh:D,fetchAgentChecklist:F,createAgent:K}=Zt({jwt:e,headers:b,urls:j}),[W,O]=i.useState(!1),[L,Z]=i.useState(null),[xe,Ie]=i.useState(null),[q,Le]=i.useState({}),[ge,ke]=i.useState({}),[he,We]=i.useState([]),[ne,Ve]=i.useState([]),ye=i.useMemo(()=>{const h=new Set(v.map(k=>k.application_id)),N=new Map((E??[]).map(k=>[k.applicationId,k.name]));return[...h].sort((k,J)=>(N.get(k)??k).localeCompare(N.get(J)??J)).map(k=>({value:k,label:N.get(k)??k}))},[v,E]),le=i.useMemo(()=>new Map(C.map(h=>[h.ref,h.display_name])),[C]),Se=i.useMemo(()=>[...new Set(v.map(N=>ct(N,le)))].sort((N,k)=>N.localeCompare(k)).map(N=>({value:N,label:N})),[v,le]),Oe=i.useMemo(()=>v.filter(h=>!(he.length>0&&!he.includes(h.application_id)||ne.length>0&&!ne.includes(ct(h,le)))),[v,le,ne,he]),pe=ye.length>1,Me=Se.length>1,Ue=pe||Me;i.useEffect(()=>{const h=window.setInterval(()=>{D()},6e4);return()=>{window.clearInterval(h)}},[D]),i.useEffect(()=>{if(v.length===0)return;let h=!1;return(async()=>{const N=await Promise.allSettled(v.map(async k=>{const J=await F(k.invocation_id);return{agentId:k.id,invocationId:k.invocation_id,checklist:J.checklist}}));h||(Le(k=>{const J={...k};let Q=!1;for(const ee of N){if(ee.status!=="fulfilled")continue;const{invocationId:ce,checklist:Ce}=ee.value;JSON.stringify(k[ce])!==JSON.stringify(Ce)&&(J[ce]=Ce,Q=!0)}return Q?J:k}),ke(k=>{const J={...k};let Q=!1;return N.forEach((ee,ce)=>{ee.status==="rejected"&&J[v[ce].id]!==ze&&(J[v[ce].id]=ze,Q=!0)}),Q?J:k}))})(),()=>{h=!0}},[v,F]);const Pe=i.useCallback(async h=>{if(!q[h.invocation_id]){Ie(h.id),ke(N=>{const k={...N};return delete k[h.id],k});try{const N=await F(h.invocation_id);Le(k=>({...k,[h.invocation_id]:N.checklist}))}catch{ke(N=>({...N,[h.id]:ze}))}finally{Ie(N=>N===h.id?null:N)}}},[F,q]),be=i.useCallback(h=>{if(L===h){Z(null);return}const N=v.find(({id:k})=>k===h);N&&(Z(h),Pe(N))},[v,L,Pe]),De=i.useMemo(()=>{const h={};for(const N of Oe){const k=Un(N,q[N.invocation_id]);(h[k]??(h[k]=[])).push(N)}return h},[Oe,q]),Ne=i.useCallback(h=>{S(h)},[]),Ye=i.useCallback(async h=>{const N=await K(h);S(N),O(!1)},[K]),Ae=i.useCallback(()=>{S(null)},[]),ae={expandedAgentId:L,loadingAgentId:xe,checklistByInvocationId:q,errorByAgentId:ge,definitionNameByRef:le,onToggleAgent:be,onViewAgent:Ne};return s.jsxs("div",{className:"agent-view-frontend agent-view",children:[x&&s.jsxs("div",{className:"agent-view__header",children:[s.jsx(u.Heading,{level:1,children:"Agents"}),s.jsx(u.Button,{variant:"primary",size:"S",iconLeftName:"sparkles",iconLeftScreenReaderText:"Start an agent",onClick:()=>O(!0),children:"Start an agent"})]}),v.length>0&&Ue&&s.jsxs("div",{className:"agent-view__filters",children:[pe&&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(u.Combobox,{id:"agent-view-institution-filter",triggerVariant:"button",multiple:!0,searchType:"substring",placeholder:"All institutions",options:ye,value:he,onValueChange:We,showSelectionCountBadge:!0,showClearAll:!0,clearAllLabel:"Clear institutions"})]}),Me&&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(u.Combobox,{id:"agent-view-agent-filter",triggerVariant:"button",multiple:!0,searchType:"substring",placeholder:"All agents",options:Se,value:ne,onValueChange:Ve,showSelectionCountBadge:!0,showClearAll:!0,clearAllLabel:"Clear agents"})]})]}),P==="error"?s.jsxs("div",{className:"agent-view__state agent-view__state--error",role:"alert",children:[s.jsx(u.Icon,{name:"triangle-alert",size:24,color:"var(--color-semantic-destructive-600)"}),s.jsx("p",{className:"agent-view__state-message",children:we??Mt}),s.jsx(u.Button,{variant:"secondary",size:"S",onClick:I,children:"Try again"})]}):P==="loading"&&v.length===0?s.jsxs("div",{className:"agent-view__state","aria-live":"polite",children:[s.jsx(u.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})]}):v.length===0?s.jsx(Rs,{}):s.jsxs("div",{className:"agent-view__board",children:[fs.map(h=>s.jsx(It,{column:qe[h],agents:De[h]??[],...ae},h)),s.jsx("div",{className:"agent-view__split-column",children:vs.map(h=>s.jsx(It,{column:qe[h],agents:De[h]??[],isSplit:!0,...ae},h))})]}),R&&s.jsx(ts,{agent:R,invocationId:R.invocation_id,open:!0,jwt:e,headers:b,agentUrl:r,agentChecklistUrl:l,agentResourcesUrl:o,agentTimelineUrl:p,agentChatUrl:c,agentConversationUrl:g,stopAgentUrl:_,enableUpload:y,initialChecklist:q[R.invocation_id]??null,usePusherToRepoll:T,pusherChannelPrefix:f,subscribeToPusher:G,onClose:Ae},R.id),s.jsx(ns,{open:W,onClose:()=>O(!1),onStart:Ye,agentDefinitions:C})]})},Hn=(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:ws,created_by:xs,status:A["generating-a-response"],context_ref:null,checklist_ref:null}};exports.AgentMonitorKanban=$n;exports.AgentServiceClient=Ke;exports.AgentServiceError=fe;exports.AgentView=ts;exports.DEFAULT_PUSHER_CHANNEL_PREFIX=dt;exports.HttpChatConnector=Yt;exports.MESSAGE_TYPE_REPOLL=it;exports.NewAgentModal=ns;exports.PUSHER_AGENT_MESSAGE_EVENT=ot;exports.REPOLL_TARGET=oe;exports.buildAgentFromDefinition=Hn;exports.buildAgentPusherChannel=$t;exports.createHttpChatConnectorFactory=pt;exports.formatUserFileChatCardText=Wt;exports.mapApiAgent=lt;exports.mapApiAgentDefinition=ut;exports.mapApiAgentStatus=Ft;exports.mapApiAgentTimelineResponse=qt;exports.mapApiChecklistEndpointResponse=ht;exports.mapApiChecklistItem=gt;exports.mapApiChecklistResponse=Jt;exports.mapApiChecklistStatus=Bt;exports.mapApiConversationMessages=Vt;exports.mapApiOpeningMessage=Te;exports.mapApiResource=Gt;exports.mapApiResourcesEndpointResponse=zt;exports.mapApiTripOption=un;exports.parseConversationContentCaption=Kt;exports.parseRepollMessages=Ht;exports.useAgentService=Zt;exports.useAgentWorkspace=Qt;
8
+ `):null}},Tt=e=>{try{return JSON.parse(e)}catch{return}};function bn(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 An={id:Ut,author:X.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 It=0;const jn=e=>(It+=1,`${e}-${Date.now()}-${It}`),Cn=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 ts{constructor(t,n,a={}){this.seededChecklist=[],this.client=t,this.agentId=n,this.chatId=a.chatId??n,this.opening=a.openingMessage??An,this.model=a.model}openingMessage(){return this.opening}async bootstrapConversation(){const t=await this.client.getConversation(this.chatId),n=es(t.messages);return n.length===0?[this.opening]:n}async start(t){return{...await this.exchange(Cn(t)),phase:H.running}}sendMessage(t,n){return this.exchange(t,n)}async stop(){await this.client.cancelAgent(this.agentId)}seedChecklist(t){this.seededChecklist=t}async exchange(t,n){var o;const a=[{role:pn.user,content:t}],r=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:r.event_id||jn("msg-agent"),author:X.agent,text:r.message.content,...(o=r.follow_up_prompts)!=null&&o.length?{followUpPrompts:r.follow_up_prompts}:{}};try{const p=await this.client.getAgent(this.agentId),{checklist:c}=Xt(this.agentId,p);return this.seededChecklist=c,{message:l,checklist:c}}catch{return{message:l,...this.seededChecklist.length?{checklist:this.seededChecklist}:{}}}}}const ht=(e,t)=>n=>{var a,r;return new ts(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:((r=t==null?void 0:t.resolveOpeningMessage)==null?void 0:r.call(t,n))??(t==null?void 0:t.openingMessage)})},ss=e=>e instanceof fe?e.message:e instanceof TypeError?"Network error while contacting the agent service.":e instanceof Error&&e.message?e.message:$t,En=e=>{const t={};for(const n of e){const a=Te(n);if(!a)continue;const r=n.invocation_id??n.id;t[r]=a,t[n.id]=a}return t},Rn=e=>JSON.stringify(e),at=(e,t)=>JSON.stringify(e)===JSON.stringify(t),ns=e=>{const{jwt:t,headers:n,urls:a}=e,r=JSON.stringify(n??{}),l=Rn(a),o=i.useMemo(()=>new Ke({token:t,headers:n,urls:a}),[t,l]);i.useLayoutEffect(()=>{o.setHeaders(n)},[o,r]);const[p,c]=i.useState([]),[g,m]=i.useState([]),[S,x]=i.useState({}),[E,R]=i.useState("loading"),[f,G]=i.useState(null),[j,I]=i.useState(0),y=i.useCallback((T,D)=>{const F=T.map(ot),K=D.map(dt),W=En(T);c(L=>at(L,F)?L:F),m(L=>at(L,K)?L:K),x(L=>at(L,W)?L:W),R("idle"),G(null)},[]);i.useEffect(()=>{let T=!1;return R("loading"),G(null),(async()=>{try{const[D,F]=await Promise.all([o.listAgents(),o.listAgentDefinitions()]);if(T)return;y(D,F)}catch(D){if(T)return;c([]),m([]),x({}),R("error"),G(ss(D))}})(),()=>{T=!0}},[y,o,j]);const _=i.useCallback(()=>{I(T=>T+1)},[]),N=i.useCallback(async()=>{try{const[T,D]=await Promise.all([o.listAgents(),o.listAgentDefinitions()]);y(T,D)}catch{}},[y,o]),v=i.useCallback(async T=>{const[D,F]=await Promise.all([o.getAgentChecklist(T),o.getAgent(T).catch(()=>null)]);return gt(T,D,F??void 0)},[o]),C=i.useCallback(async T=>o.listAllAgentResources(T),[o]),U=i.useCallback(async({definition:T,invocationName:D})=>{const F=await o.createAgent(T.ref,{invocationName:D}),K=await o.getAgent(F.id),W=ot(K),L=Te(K);return c(O=>[W,...O]),L&&x(O=>({...O,[W.invocation_id]:L,[W.id]:L})),W},[o]),we=i.useMemo(()=>ht(o,{resolveOpeningMessage:T=>S[T.invocation_id]??S[T.id]}),[o,S]);return{agents:p,agentDefinitions:g,loadState:E,loadError:f,reload:_,refresh:N,fetchAgentChecklist:v,fetchAgentResources:C,createAgent:U,chatConnector:we}},Tn=e=>JSON.stringify(e),as=e=>{const{agent:t,jwt:n,headers:a,urls:r,chatId:l}=e,o=JSON.stringify(a??{}),p=Tn(r),c=i.useMemo(()=>new Ke({token:n,headers:a,urls:{agent:r.agentUrl,agentChecklist:r.agentChecklistUrl,...r.agentResourcesUrl?{agentResources:r.agentResourcesUrl}:{},...r.agentTimelineUrl?{agentTimeline:r.agentTimelineUrl}:{},agentChat:r.agentChatUrl,agentConversation:r.agentConversationUrl,...r.stopAgentUrl?{stopAgent:r.stopAgentUrl}:{}}}),[n,p]);i.useLayoutEffect(()=>{c.setHeaders(a)},[c,o]);const g=i.useCallback(async R=>{const[f,G]=await Promise.all([c.getAgentChecklist(R),c.getAgent(R).catch(()=>null)]);return gt(R,f,G??void 0)},[c]),m=i.useCallback(async R=>c.listAllAgentResources(R),[c]),S=i.useCallback(async(R,f)=>c.getAgentResourceHtml(R,f),[c]),x=i.useCallback(async R=>{const f=await c.getAgentTimeline(R);return Yt(f)},[c]);return{connector:i.useMemo(()=>ht(c,{chatId:l??t.invocation_id})(t),[c,t.invocation_id,l]),fetchAgentChecklist:g,fetchAgentResources:m,fetchAgentResourceHtml:S,fetchAgentTimeline:x}},In=3e4,On=(e,t)=>{const n=e.hasRunBefore?t||"This trip":e.tripName.trim()||"A new trip",a=e.destination?` to ${e.destination}`:"",r=e.hasRunBefore?" It has run before.":"";return`${n}${a}.${r}`.trim()},Ln=e=>{switch(e){case A.failed:return H.stopped;case A.complete:return H.complete;default:return H.running}},Ot=(e,t)=>{t([me(e)])},Mn=(e,t)=>e.length===t.length&&e.every((n,a)=>{const r=t[a];return r!==void 0&&n.id===r.id&&n.text===r.text}),rs=({agent:e,invocationId:t,open:n,onClose:a,jwt:r,headers:l,agentUrl:o,agentChecklistUrl:p,agentResourcesUrl:c,agentTimelineUrl:g,agentChatUrl:m,agentConversationUrl:S,stopAgentUrl:x,chatId:E,enableUpload:R,initialBrief:f,initialPhase:G,initialChecklist:j,usePusherToRepoll:I=!1,pusherChannelPrefix:y=ct,subscribeToPusher:_})=>{const[N,v]=i.useState(E??t),[C,U]=i.useState("chat"),[we,T]=i.useState(!1),{connector:D,fetchAgentChecklist:F,fetchAgentResources:K,fetchAgentResourceHtml:W,fetchAgentTimeline:L}=as({agent:{...e,invocation_id:t},jwt:r,headers:l,chatId:N,urls:{agentUrl:o,agentChecklistUrl:p,agentResourcesUrl:c,agentTimelineUrl:g,agentChatUrl:m,agentConversationUrl:S,stopAgentUrl:x}}),O=i.useRef(D),[Z,xe]=i.useState(G??(f?H.running:Ln(e.status))),[Ie,q]=i.useState([]),[Oe,ge]=i.useState(0),[ke,he]=i.useState(),[We,ne]=i.useState(null),[Ve,Se]=i.useState([]),[le,ye]=i.useState(!1),[Le,pe]=i.useState(null),[Me,Pe]=i.useState(null),[Ue,Ne]=i.useState(null),[De,be]=i.useState(!1),[Ye,Ae]=i.useState(null),[ae,je]=i.useState(null),[h,b]=i.useState(!1),[k,J]=i.useState(null),[Q,ee]=i.useState(j??null),[ce,Ce]=i.useState(!1),[ls,Xe]=i.useState(null),[pt,mt]=i.useState(!1),[_t,ft]=i.useState(null),[$e,Ze]=i.useState(!1),[He,cs]=i.useState(!1),[Fe,ds]=i.useState(!1),vt=i.useRef($e),wt=i.useRef(0),xt=i.useRef(0);i.useEffect(()=>{O.current=D},[D]),i.useEffect(()=>{vt.current=$e},[$e]),i.useEffect(()=>{v(E??t),U("chat"),T(!1),q([]),ge(d=>d+1)},[t,E]),i.useEffect(()=>{if(!n||f)return;const d=O.current.bootstrapConversation;if(!d){Ot(O.current.openingMessage(),q);return}let w=!1;return Ze(!0),(async()=>{try{const M=await d.call(O.current);if(w)return;q(M.map(me))}catch{w||Ot(O.current.openingMessage(),q)}finally{w||Ze(!1)}})(),()=>{w=!0}},[n,f,t,N]);const te=i.useCallback(()=>{const d=++wt.current;(async()=>{var w,M;try{const V=await F(t);if(d!==wt.current)return;ee(re=>JSON.stringify(re)===JSON.stringify(V.checklist)?re:V.checklist),Xe(null),(M=(w=O.current).seedChecklist)==null||M.call(w,V.checklist)}catch{}})()},[F,t]),de=i.useCallback(()=>{c&&(async()=>{try{const d=await K(t);Se(d),pe(null)}catch{}})()},[c,K,t]),se=i.useCallback(()=>{if(!g)return;const d=++xt.current;(async()=>{try{const w=await L(t);if(d!==xt.current)return;je(M=>JSON.stringify(M)===JSON.stringify(w)?M:w),J(null)}catch{}})()},[g,L,t]),Ee=i.useCallback(d=>{const w=O.current.bootstrapConversation;w&&(async()=>{try{const M=await w.call(O.current);if(vt.current)return;const V=M.map(me);let re=!1;q(yt=>Mn(yt,V)?yt:(re=!0,V)),re&&(d!=null&&d.refreshSidePanelsOnChange)&&(te(),se())}catch{}})()},[te,se]),us=i.useCallback(d=>{switch(d){case oe.checklist:te();return;case oe.resources:de();return;case oe.chat:Ee();return;case oe.timeline:se();return;case oe.all:default:te(),de(),Ee(),se()}},[te,Ee,de,se]),kt=un({enabled:n&&I,channelPrefix:y,agentId:e.id,subscribeToPusher:_,onRepoll:us});i.useEffect(()=>{if(!n||f||kt)return;const d=window.setInterval(()=>{Ee({refreshSidePanelsOnChange:!0})},In);return()=>{window.clearInterval(d)}},[n,f,kt,t,N,Ee]);const gs=i.useCallback(d=>{var w,M;d.checklist?(ee(d.checklist),(M=(w=O.current).seedChecklist)==null||M.call(w,d.checklist)):te(),d.phase&&xe(d.phase),de(),se()},[te,de,se]);i.useEffect(()=>{var d,w;!n||f||j&&j.length>0&&((w=(d=O.current).seedChecklist)==null||w.call(d,j))},[n,f,j]),i.useEffect(()=>{if(!n||f)return;let d=!1;return Ce(w=>j!=null&&j.length?!1:w||Q===null||Q.length===0),Xe(null),(async()=>{var w,M;try{const V=await F(t);if(d)return;j!=null&&j.length||(ee(V.checklist),(M=(w=O.current).seedChecklist)==null||M.call(w,V.checklist))}catch{!d&&!(j!=null&&j.length)&&Xe(ze)}finally{d||Ce(!1)}})(),()=>{d=!0}},[n,t,f,j,F]),i.useEffect(()=>{if(!n||!c)return;let d=!1;return ye(!0),pe(null),(async()=>{try{const w=await K(t);d||Se(w)}catch{d||pe(bs)}finally{d||ye(!1)}})(),()=>{d=!0}},[n,t,c,K]);const hs=i.useCallback(()=>{Pe(null),Ne(null),Ae(null),be(!1)},[]),ps=i.useCallback(d=>{if(d.misRecordUrl){window.open(d.misRecordUrl,"_blank","noopener,noreferrer");return}Pe(d),Ne(null),Ae(null),be(!0),(async()=>{try{const w=await W(t,d.id);Ne(w)}catch{Ae(As)}finally{be(!1)}})()},[W,t]);i.useEffect(()=>{if(!n||!g)return;let d=!1;return b(w=>w||ae===null),J(null),(async()=>{try{const w=await L(t);d||je(w)}catch{d||J(Dt)}finally{d||b(!1)}})(),()=>{d=!0}},[n,t,g,L]),i.useEffect(()=>{if(!n||!f)return;let d=!1;const w={id:`user-brief-${Date.now()}`,author:X.user,text:On(f,e.invocation_name)};return(async()=>{var V,re;const M=await O.current.start(f);d||(q([me(O.current.openingMessage()),me(w),me(M.message)]),M.checklist?(ee(M.checklist),(re=(V=O.current).seedChecklist)==null||re.call(V,M.checklist)):te(),xe(M.phase??H.running),de(),se())})(),()=>{d=!0}},[n,f,e.invocation_name,t,te,de,se]);const ms=i.useCallback(d=>{ne(on(d))},[]),Qe=E??t,Be=ae==null?void 0:ae.chatSessions,St=Be!=null&&Be.length?Be.reduce((d,w)=>Date.parse(w.timestamp)<Date.parse(d.timestamp)?w:d).sessionId:void 0,et=i.useCallback(()=>{U("chat"),T(!1),N!==Qe&&(v(Qe),q([]),ge(d=>d+1))},[N,Qe]),_s=i.useCallback(d=>{if(d===St){et();return}v(d),T(!0),U("chat"),q([]),ge(w=>w+1)},[St,et]),fs=i.useCallback(d=>{ne(null),he(d),ge(w=>w+1)},[]),vs=i.useCallback(async()=>{ft(null),mt(!0);try{await O.current.stop(),xe(H.stopped)}catch{ft(js)}finally{mt(!1)}},[]),ws=Q;return s.jsxs(u.Modal,{open:n,closeHandler:a,hideCloseButton:!0,className:"agent-workspace",children:[s.jsxs(u.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(u.Icon,{name:"ask-arbor",size:24})}),s.jsx(u.Modal.Title,{children:e.invocation_name}),s.jsx("span",{className:z("agent-workspace__phase",`agent-workspace__phase--${Z}`),children:Rs[Z]})]}),s.jsxs("div",{className:"agent-workspace__header-actions",children:[s.jsx(u.Button,{variant:He?"secondary":"primary",size:"S",iconLeftName:"clipboard-list",iconLeftScreenReaderText:"Toggle checklist","aria-pressed":!He,onClick:()=>cs(d=>!d),children:"Checklist"}),s.jsx(u.Button,{variant:Fe?"secondary":"primary",size:"S",iconLeftName:"files",iconLeftScreenReaderText:"Toggle resources","aria-pressed":!Fe,onClick:()=>ds(d=>!d),children:"Resources"}),s.jsx(u.Button,{variant:"secondary",size:"S",iconLeftName:"x",iconLeftScreenReaderText:"Close",onClick:a,children:"Close"})]})]}),s.jsxs(u.Modal.Body,{className:z("agent-workspace__body",{"agent-workspace__body--no-checklist":He,"agent-workspace__body--no-resources":Fe}),children:[s.jsxs("section",{className:z("agent-workspace__panel","agent-workspace__panel--chat",{"agent-workspace__panel--timeline":!!g&&C==="timeline"}),"aria-label":"Agent",children:[s.jsxs("div",{className:"agent-workspace__panel-header",children:[s.jsx(u.Heading,{level:4,children:"Agent"}),x&&Z===H.running&&s.jsx(u.Button,{className:"agent-workspace__panel-header-action",variant:"secondary-destructive",size:"S",iconLeftName:"circle-x",iconLeftScreenReaderText:"Stop",disabled:pt,onClick:()=>void vs(),children:pt?"Stopping…":"Stop agent"})]}),_t&&s.jsx("p",{className:"agent-workspace__error agent-workspace__stop-error",role:"alert",children:_t}),g&&s.jsxs(u.Tabs,{className:"agent-workspace__center-tabs","aria-label":"Center panel",children:[s.jsx(u.Tabs.Item,{active:C==="chat",tabElementProps:{id:"agent-center-tab-chat",onClick:()=>U("chat")},children:"Chat"}),s.jsx(u.Tabs.Item,{active:C==="timeline",tabElementProps:{id:"agent-center-tab-timeline",onClick:()=>U("timeline")},children:"Timeline"})]}),g&&C==="chat"&&we&&s.jsx("div",{className:"agent-workspace__center-back",children:s.jsx(u.Button,{variant:"tertiary",size:"S",iconLeftName:"arrow-left",iconLeftScreenReaderText:"Back to main chat",onClick:et,children:"Back to main chat"})}),g&&C==="timeline"&&s.jsx(an,{timeline:ae,isLoading:h,error:k,onOpenChatSession:_s}),s.jsx("div",{className:"agent-workspace__chat-keep-alive",hidden:!!g&&C!=="chat",children:s.jsx(qs,{connector:D,phase:Z,chatHistory:Ie,chatSessionKey:Oe,startQuery:ke,clarificationMessage:We,enableUpload:R,onTurn:gs,onAwaitingChange:Ze,onClarificationPrompt:fs,onDismissClarification:()=>ne(null)})})]}),!He&&s.jsx(Js,{checklist:ws,isLoading:ce,error:ls,phase:Z,canRequestInput:Z===H.running&&!$e,onAttentionItemClick:ms}),!Fe&&s.jsx(Vs,{resources:Ve,isLoading:le,error:Le,onOpenResource:ps}),s.jsx(Ks,{resource:Me,html:Ue,isLoading:De,error:Ye,onClose:hs})]})]})},Pn="Unable to load agent definitions. Please try again.",Un="Unable to start the agent.",Lt="Loading agents…",is=({open:e,onClose:t,onStart:n,agentDefinitions:a,definitionsState:r="idle",definitionsError:l=null,onRetryDefinitions:o,embedded:p=!1})=>{const[c,g]=i.useState(void 0),[m,S]=i.useState(""),[x,E]=i.useState(!1),[R,f]=i.useState(null),G=[...a].sort((v,C)=>v.display_name.localeCompare(C.display_name)).map(v=>({value:v.ref,label:v.display_name}));i.useEffect(()=>{e&&(g(void 0),S(""),E(!1),f(null))},[e]);const j=c!==void 0&&m.trim().length>0,I=i.useCallback(v=>{const C=a.find(U=>U.ref===v[0]);C&&g(C)},[a]),y=i.useCallback(async()=>{if(!(!c||!j||x)){E(!0),f(null);try{await n({definition:c,invocationName:m.trim()})}catch(v){f(v instanceof Error?v.message:Un)}finally{E(!1)}}},[j,c,m,x,n]);if(r==="idle"&&a.length===0||!e)return null;const _=s.jsxs("div",{className:"new-agent__header-title",children:[s.jsx("span",{className:"new-agent__header-avatar","aria-hidden":"true",children:s.jsx(u.Icon,{name:"ask-arbor",size:24})}),p?s.jsx("h2",{className:"new-agent__title",children:"Start an agent"}):s.jsx(u.Modal.Title,{children:"Start an agent"})]});let N;return r==="loading"?N=s.jsxs("div",{className:"new-agent__state","aria-live":"polite",children:[s.jsx(u.Icon,{name:"loader",size:24,color:"var(--color-brand-600)",className:"new-agent__spinner",screenReaderText:Lt}),s.jsx("p",{className:"new-agent__state-message",children:Lt})]}):r==="error"?N=s.jsxs("div",{className:"new-agent__state new-agent__state--error",role:"alert",children:[s.jsx(u.Icon,{name:"triangle-alert",size:24,color:"var(--color-semantic-destructive-600)"}),s.jsx("p",{className:"new-agent__state-message",children:l??Pn}),o?s.jsx(u.Button,{variant:"secondary",size:"S",onClick:o,children:"Try again"}):null]}):N=s.jsxs("form",{className:"new-agent__form","aria-label":"Start an agent",onSubmit:v=>{v.preventDefault(),j&&!x&&y()},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(u.SelectDropdown,{id:"new-agent-type",placeholder:"Which agent would you like to start?",options:G,selectedValues:c?[c.ref]:[],onSelectionChange:I})]}),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(u.TextInput,{id:"new-agent-invocation-name",value:m,placeholder:"What would you like to call your agent?",onChange:v=>S(v.target.value)})]}),R?s.jsx("p",{className:"new-agent__error",role:"alert",children:R}):null,s.jsx("div",{className:"new-agent__actions",children:s.jsx(u.Button,{type:"submit",variant:"primary",className:z("new-agent__start-button",{"new-agent__start-button--starting":x}),disabled:!j||x,iconLeftName:x?"loader":"sparkles",iconLeftScreenReaderText:x?"Starting":void 0,children:x?"Starting…":"Start"})})]}),p?s.jsxs("div",{className:z("new-agent","new-agent--embedded"),children:[s.jsx("div",{className:"new-agent__header",children:_}),s.jsx("div",{className:"new-agent__body",children:N})]}):s.jsxs(u.Modal,{open:e,closeHandler:t,className:"new-agent",children:[s.jsx(u.Modal.Header,{className:"new-agent__header",children:_}),s.jsx(u.Modal.Body,{className:"new-agent__body",children:N})]})},Mt=e=>{window.location.assign(e)},Dn=({open:e,authToken:t,headers:n,agentDefinitionsUrl:a,agentsUrl:r,closeUrl:l,successUrl:o,onClose:p,onStart:c,embedded:g=!1})=>{const m=JSON.stringify(n??{}),S=i.useMemo(()=>new Ke({token:t,headers:n,urls:{agentDefinitions:a,agents:r}}),[t,a,r,m]),[x,E]=i.useState([]),[R,f]=i.useState("loading"),[G,j]=i.useState(null),[I,y]=i.useState(0);i.useEffect(()=>{if(!e)return;let C=!1;return f("loading"),j(null),(async()=>{try{const U=await S.listAgentDefinitions();if(C)return;E(U.map(dt)),f("idle")}catch(U){if(C)return;E([]),j(ss(U)),f("error")}})(),()=>{C=!0}},[S,e,I]);const _=i.useCallback(()=>{p==null||p(),l&&Mt(l)},[l,p]),N=i.useCallback(async C=>{await S.createAgent(C.definition.ref,{invocationName:C.invocationName}),c==null||c(C),o&&Mt(o)},[S,c,o]),v=i.useCallback(()=>{y(C=>C+1)},[]);return s.jsx(is,{open:e,onClose:_,onStart:N,agentDefinitions:x,definitionsState:R,definitionsError:G,onRetryDefinitions:v,embedded:g})},$n=e=>"agentDefinitionsUrl"in e,os=e=>$n(e)?s.jsx(Dn,{...e}):s.jsx(is,{...e}),Hn=e=>e!==void 0&&e.some(t=>t.status===P.hitl),Fn=(e,t)=>Hn(t)?A.hitl:e.status,Bn=({column:e,label:t})=>e.statusIcon?s.jsx("span",{className:"agent-view__status-indicator",children:s.jsx(u.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(u.Dot,{colour:e.dotColour,label:t})}),Gn=({agent:e,agentName:t,column:n,isExpanded:a,isLoading:r,checklist:l,error:o,onToggle:p,onViewAgent:c})=>{const{id:g,invocation_name:m}=e,S=`agent-card-${g}-header`,x=`agent-card-${g}-progress`;return s.jsx("li",{className:z("agent-view__card",{"agent-view__card--expanded":a}),children:s.jsxs(u.Card,{spacing:"dense",children:[s.jsx("button",{type:"button",className:"agent-view__card-toggle","aria-expanded":a,"aria-controls":x,"aria-label":m,id:S,onClick:()=>p(g),children:s.jsxs("div",{className:"agent-view__card-content",children:[s.jsx(Bn,{column:n}),s.jsx("span",{className:"agent-view__card-invocation-name",children:m}),s.jsx("span",{className:"agent-view__card-agent-name",children:t}),s.jsx(u.Icon,{name:a?"chevron-up":"chevron-down",size:16,className:"agent-view__card-chevron"})]})}),a&&s.jsxs("div",{id:x,"aria-labelledby":S,className:"agent-view__card-progress",children:[r&&s.jsxs("div",{className:"agent-view__progress-loading","aria-live":"polite",children:[s.jsx(u.Icon,{name:"loader",size:16,color:"var(--color-brand-600)",className:"agent-view__progress-icon--spinning",screenReaderText:_e}),s.jsx("span",{children:_e})]}),!r&&o&&s.jsx("p",{className:"agent-view__progress-error",role:"alert",children:o}),!r&&!o&&l!==null&&s.jsx(Bs,{checklist:l}),!r&&!o&&l===null&&s.jsxs("div",{className:"agent-view__progress-loading","aria-live":"polite",children:[s.jsx(u.Icon,{name:"loader",size:16,color:"var(--color-brand-600)",className:"agent-view__progress-icon--spinning",screenReaderText:_e}),s.jsx("span",{children:_e})]}),s.jsx("div",{className:"agent-view__card-actions",children:s.jsx(u.Button,{variant:"secondary",size:"S",onClick:()=>c==null?void 0:c(e),children:"View agent"})})]})]})})},Pt=({column:e,agents:t,expandedAgentId:n,loadingAgentId:a,checklistByInvocationId:r,errorByAgentId:l,definitionNameByRef:o,onToggleAgent:p,onViewAgent:c,isSplit:g=!1})=>s.jsxs("section",{className:z("agent-view__column",{"agent-view__column--split":g}),"aria-label":e.title,children:[s.jsxs("div",{className:"agent-view__column-header",children:[s.jsx(u.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(m=>s.jsx(Gn,{agent:m,agentName:lt(m,o),column:e,isExpanded:n===m.id,isLoading:a===m.id,checklist:r[m.invocation_id]??null,error:l[m.id]??null,onToggle:p,onViewAgent:c},m.id))})]}),lt=(e,t)=>t.get(e.agent_definition_ref)??e.agent_definition_ref.replace(/_/g," "),zn=({jwt:e,headers:t,agentDefinitionsUrl:n,agentsUrl:a,agentUrl:r,agentChecklistUrl:l,agentResourcesUrl:o,agentTimelineUrl:p,agentChatUrl:c,agentConversationUrl:g,stopAgentUrl:m,enableUpload:S,showHeader:x=!1,institutions:E,usePusherToRepoll:R=!1,pusherChannelPrefix:f=ct,subscribeToPusher:G})=>{var je;const j=i.useMemo(()=>({agentDefinitions:n,agents:a,agent:r,agentChecklist:l,...o?{agentResources:o}:{},...p?{agentTimeline:p}:{},agentChat:c,agentConversation:g}),[n,a,r,l,o,p,c,g]),[I,y]=i.useState(null),_=I?(je=E==null?void 0:E.find(h=>h.applicationId===I.application_id))==null?void 0:je.applicationUrl:void 0,N=i.useMemo(()=>{const h={...t??{}};return _?h[ue.arborApplicationUrl]=_:delete h[ue.arborApplicationUrl],h},[t,_]),{agents:v,agentDefinitions:C,loadState:U,loadError:we,reload:T,refresh:D,fetchAgentChecklist:F,createAgent:K}=ns({jwt:e,headers:N,urls:j}),[W,L]=i.useState(!1),[O,Z]=i.useState(null),[xe,Ie]=i.useState(null),[q,Oe]=i.useState({}),[ge,ke]=i.useState({}),[he,We]=i.useState([]),[ne,Ve]=i.useState([]),Se=i.useMemo(()=>{const h=new Set(v.map(k=>k.application_id)),b=new Map((E??[]).map(k=>[k.applicationId,k.name]));return[...h].sort((k,J)=>(b.get(k)??k).localeCompare(b.get(J)??J)).map(k=>({value:k,label:b.get(k)??k}))},[v,E]),le=i.useMemo(()=>new Map(C.map(h=>[h.ref,h.display_name])),[C]),ye=i.useMemo(()=>[...new Set(v.map(b=>lt(b,le)))].sort((b,k)=>b.localeCompare(k)).map(b=>({value:b,label:b})),[v,le]),Le=i.useMemo(()=>v.filter(h=>!(he.length>0&&!he.includes(h.application_id)||ne.length>0&&!ne.includes(lt(h,le)))),[v,le,ne,he]),pe=Se.length>1,Me=ye.length>1,Pe=pe||Me;i.useEffect(()=>{const h=window.setInterval(()=>{D()},6e4);return()=>{window.clearInterval(h)}},[D]),i.useEffect(()=>{if(v.length===0)return;let h=!1;return(async()=>{const b=await Promise.allSettled(v.map(async k=>{const J=await F(k.invocation_id);return{agentId:k.id,invocationId:k.invocation_id,checklist:J.checklist}}));h||(Oe(k=>{const J={...k};let Q=!1;for(const ee of b){if(ee.status!=="fulfilled")continue;const{invocationId:ce,checklist:Ce}=ee.value;JSON.stringify(k[ce])!==JSON.stringify(Ce)&&(J[ce]=Ce,Q=!0)}return Q?J:k}),ke(k=>{const J={...k};let Q=!1;return b.forEach((ee,ce)=>{ee.status==="rejected"&&J[v[ce].id]!==ze&&(J[v[ce].id]=ze,Q=!0)}),Q?J:k}))})(),()=>{h=!0}},[v,F]);const Ue=i.useCallback(async h=>{if(!q[h.invocation_id]){Ie(h.id),ke(b=>{const k={...b};return delete k[h.id],k});try{const b=await F(h.invocation_id);Oe(k=>({...k,[h.invocation_id]:b.checklist}))}catch{ke(b=>({...b,[h.id]:ze}))}finally{Ie(b=>b===h.id?null:b)}}},[F,q]),Ne=i.useCallback(h=>{if(O===h){Z(null);return}const b=v.find(({id:k})=>k===h);b&&(Z(h),Ue(b))},[v,O,Ue]),De=i.useMemo(()=>{const h={};for(const b of Le){const k=Fn(b,q[b.invocation_id]);(h[k]??(h[k]=[])).push(b)}return h},[Le,q]),be=i.useCallback(h=>{y(h)},[]),Ye=i.useCallback(async h=>{const b=await K(h);y(b),L(!1)},[K]),Ae=i.useCallback(()=>{y(null)},[]),ae={expandedAgentId:O,loadingAgentId:xe,checklistByInvocationId:q,errorByAgentId:ge,definitionNameByRef:le,onToggleAgent:Ne,onViewAgent:be};return s.jsxs("div",{className:"agent-view-frontend agent-view",children:[x&&s.jsxs("div",{className:"agent-view__header",children:[s.jsx(u.Heading,{level:1,children:"Agents"}),s.jsx(u.Button,{variant:"primary",size:"S",iconLeftName:"sparkles",iconLeftScreenReaderText:"Start an agent",onClick:()=>L(!0),children:"Start an agent"})]}),v.length>0&&Pe&&s.jsxs("div",{className:"agent-view__filters",children:[pe&&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(u.Combobox,{id:"agent-view-institution-filter",triggerVariant:"button",multiple:!0,searchType:"substring",placeholder:"All institutions",options:Se,value:he,onValueChange:We,showSelectionCountBadge:!0,showClearAll:!0,clearAllLabel:"Clear institutions"})]}),Me&&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(u.Combobox,{id:"agent-view-agent-filter",triggerVariant:"button",multiple:!0,searchType:"substring",placeholder:"All agents",options:ye,value:ne,onValueChange:Ve,showSelectionCountBadge:!0,showClearAll:!0,clearAllLabel:"Clear agents"})]})]}),U==="error"?s.jsxs("div",{className:"agent-view__state agent-view__state--error",role:"alert",children:[s.jsx(u.Icon,{name:"triangle-alert",size:24,color:"var(--color-semantic-destructive-600)"}),s.jsx("p",{className:"agent-view__state-message",children:we??$t}),s.jsx(u.Button,{variant:"secondary",size:"S",onClick:T,children:"Try again"})]}):U==="loading"&&v.length===0?s.jsxs("div",{className:"agent-view__state","aria-live":"polite",children:[s.jsx(u.Icon,{name:"loader",size:24,color:"var(--color-brand-600)",className:"agent-view__progress-icon--spinning",screenReaderText:bt}),s.jsx("p",{className:"agent-view__state-message",children:bt})]}):v.length===0?s.jsx(Ms,{}):s.jsxs("div",{className:"agent-view__board",children:[ks.map(h=>s.jsx(Pt,{column:qe[h],agents:De[h]??[],...ae},h)),s.jsx("div",{className:"agent-view__split-column",children:Ss.map(h=>s.jsx(Pt,{column:qe[h],agents:De[h]??[],isSplit:!0,...ae},h))})]}),I&&s.jsx(rs,{agent:I,invocationId:I.invocation_id,open:!0,jwt:e,headers:N,agentUrl:r,agentChecklistUrl:l,agentResourcesUrl:o,agentTimelineUrl:p,agentChatUrl:c,agentConversationUrl:g,stopAgentUrl:m,enableUpload:S,initialChecklist:q[I.invocation_id]??null,usePusherToRepoll:R,pusherChannelPrefix:f,subscribeToPusher:G,onClose:Ae},I.id),s.jsx(os,{open:W,onClose:()=>L(!1),onStart:Ye,agentDefinitions:C})]})},qn=(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:ys,created_by:Ns,status:A["generating-a-response"],context_ref:null,checklist_ref:null}};exports.AgentMonitorKanban=zn;exports.AgentServiceClient=Ke;exports.AgentServiceError=fe;exports.AgentView=rs;exports.DEFAULT_PUSHER_CHANNEL_PREFIX=ct;exports.HttpChatConnector=ts;exports.MESSAGE_TYPE_REPOLL=it;exports.NewAgentModal=os;exports.PUSHER_AGENT_MESSAGE_EVENT=Gt;exports.REPOLL_TARGET=oe;exports.buildAgentFromDefinition=qn;exports.buildAgentPusherChannel=zt;exports.createHttpChatConnectorFactory=ht;exports.formatUserFileChatCardText=Qt;exports.mapApiAgent=ot;exports.mapApiAgentDefinition=dt;exports.mapApiAgentStatus=Jt;exports.mapApiAgentTimelineResponse=Yt;exports.mapApiChecklistEndpointResponse=gt;exports.mapApiChecklistItem=ut;exports.mapApiChecklistResponse=Xt;exports.mapApiChecklistStatus=Kt;exports.mapApiConversationMessages=es;exports.mapApiOpeningMessage=Te;exports.mapApiResource=Wt;exports.mapApiResourcesEndpointResponse=Vt;exports.mapApiTripOption=_n;exports.parseConversationContentCaption=Zt;exports.parseRepollMessages=qt;exports.useAgentService=ns;exports.useAgentWorkspace=as;
package/dist/index.d.ts CHANGED
@@ -596,7 +596,7 @@ export declare const parseConversationContentCaption: (content: string) => strin
596
596
 
597
597
  export declare const parseRepollMessages: (payload: unknown) => RepollMessage[];
598
598
 
599
- export declare const PUSHER_AGENT_MESSAGE_EVENT: "agentMessage:new_message";
599
+ export declare const PUSHER_AGENT_MESSAGE_EVENT: "agentUi:update";
600
600
 
601
601
  export declare const REPOLL_TARGET: {
602
602
  readonly all: "ALL";