@kb-labs/agent-entry 2.14.0 → 2.15.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/dist/widgets/117.js +2 -0
- package/dist/widgets/117.js.map +1 -0
- package/dist/widgets/297.js +2 -0
- package/dist/widgets/297.js.map +1 -0
- package/dist/widgets/338.js +2 -0
- package/dist/widgets/338.js.map +1 -0
- package/dist/widgets/370.js +2 -0
- package/dist/widgets/370.js.map +1 -0
- package/dist/widgets/451.js +2 -0
- package/dist/widgets/451.js.map +1 -0
- package/dist/widgets/50.js +2 -0
- package/dist/widgets/50.js.map +1 -0
- package/dist/widgets/586.js +39 -0
- package/dist/widgets/586.js.map +1 -0
- package/dist/widgets/59.js +2 -0
- package/dist/widgets/59.js.map +1 -0
- package/dist/widgets/607.js +2 -0
- package/dist/widgets/607.js.map +1 -0
- package/dist/widgets/626.js +2 -0
- package/dist/widgets/626.js.map +1 -0
- package/dist/widgets/669.js +2 -0
- package/dist/widgets/669.js.map +1 -0
- package/dist/widgets/678.js +2 -0
- package/dist/widgets/678.js.map +1 -0
- package/dist/widgets/781.js +2 -0
- package/dist/widgets/781.js.map +1 -0
- package/dist/widgets/842.js +446 -0
- package/dist/widgets/842.js.map +1 -0
- package/dist/widgets/968.js +10 -0
- package/dist/widgets/968.js.map +1 -0
- package/dist/widgets/997.js +35 -0
- package/dist/widgets/997.js.map +1 -0
- package/dist/widgets/@mf-types.d.ts +3 -0
- package/dist/widgets/@mf-types.zip +0 -0
- package/dist/widgets/__federation_expose_AgentsPage.js +2 -0
- package/dist/widgets/__federation_expose_AgentsPage.js.map +1 -0
- package/dist/widgets/mf-manifest.json +262 -0
- package/dist/widgets/mf-stats.json +307 -0
- package/dist/widgets/remoteEntry.js +7 -0
- package/dist/widgets/remoteEntry.js.map +1 -0
- package/package.json +14 -14
|
Binary file
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";(self.webpackChunk_kb_labs_agent_entry=self.webpackChunk_kb_labs_agent_entry||[]).push([["596"],{572(e,t,n){var r=n(5259),o=Symbol.for("react.element"),l=Symbol.for("react.fragment"),i=Object.prototype.hasOwnProperty,s=r.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner,a={key:!0,ref:!0,__self:!0,__source:!0};function c(e,t,n){var r,l={},c=null,u=null;for(r in void 0!==n&&(c=""+n),void 0!==t.key&&(c=""+t.key),void 0!==t.ref&&(u=t.ref),t)i.call(t,r)&&!a.hasOwnProperty(r)&&(l[r]=t[r]);if(e&&e.defaultProps)for(r in t=e.defaultProps)void 0===l[r]&&(l[r]=t[r]);return{$$typeof:o,type:e,key:c,ref:u,props:l,_owner:s.current}}t.Fragment=l,t.jsx=c,t.jsxs=c},8048(e,t,n){e.exports=n(572)},5387(e,t,n){n.r(t),n.d(t,{default:()=>K});var r=n(8048),o=n(5259),l=n.n(o),i=n(4391),s=n(1349),a=n(2383);function c(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}function u(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n,r,o=null==e?null:"u">typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=o){var l=[],i=!0,s=!1;try{for(o=o.call(e);!(i=(n=o.next()).done)&&(l.push(n.value),!t||l.length!==t);i=!0);}catch(e){s=!0,r=e}finally{try{i||null==o.return||o.return()}finally{if(s)throw r}}return l}}(e,t)||f(e,t)||function(){throw TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function d(e){return function(e){if(Array.isArray(e))return c(e)}(e)||function(e){if("u">typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||f(e)||function(){throw TypeError("Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function f(e,t){if(e){if("string"==typeof e)return c(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);if("Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n)return Array.from(n);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return c(e,t)}}function p(e){var t,n=e.currentSessionId,o=e.onSessionChange,l=e.onNewChat,i=(0,s.useUITheme)().token,c=(0,a.useData)("/v1/plugins/agents/sessions?limit=20"),u=c.data,d=c.isLoading,f=null!=(t=null==u?void 0:u.sessions)?t:[],p=function(e){var t=f.find(function(t){return t.id===e});t&&o(e,t)};return(0,r.jsxs)(s.UISpace,{size:"small",style:{width:"100%"},children:[(0,r.jsx)(s.UIIcon,{name:"HistoryOutlined",style:{color:i.colorTextTertiary}}),(0,r.jsx)(s.UISelect,{style:{flex:1,minWidth:200},placeholder:"New chat",value:null!=n?n:void 0,onChange:function(e){return p(e)},loading:d,allowClear:!0,onClear:l,notFoundContent:d?(0,r.jsx)(s.UISpin,{size:"small"}):(0,r.jsx)(s.UITypographyText,{type:"secondary",children:"No sessions yet"}),optionLabelProp:"label",options:f.map(function(e){return{value:e.id,label:e.name||e.task||"Untitled",lastActivityAt:e.lastActivityAt}}),optionRender:function(e){var t,n,o,l,i;return(0,r.jsxs)(s.UISpace,{style:{width:"100%",justifyContent:"space-between"},children:[(0,r.jsx)(s.UITypographyText,{ellipsis:!0,style:{maxWidth:180},children:e.label}),(0,r.jsx)(s.UITypographyText,{type:"secondary",style:{fontSize:11},children:(t=new Date(e.data.lastActivityAt),o=Math.floor((n=new Date().getTime()-t.getTime())/6e4),l=Math.floor(n/36e5),i=Math.floor(n/864e5),o<1?"just now":o<60?"".concat(o,"m ago"):l<24?"".concat(l,"h ago"):i<7?"".concat(i,"d ago"):t.toLocaleDateString())})]})}}),(0,r.jsx)(s.UITooltip,{title:"New Chat",children:(0,r.jsx)(s.UIButton,{variant:"primary",icon:(0,r.jsx)(s.UIIcon,{name:"PlusOutlined"}),onClick:l})})]})}function y(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}function h(e,t,n,r,o,l,i){try{var s=e[l](i),a=s.value}catch(e){n(e);return}s.done?t(a):Promise.resolve(a).then(r,o)}function g(e){return function(){var t=this,n=arguments;return new Promise(function(r,o){var l=e.apply(t,n);function i(e){h(l,r,o,i,s,"next",e)}function s(e){h(l,r,o,i,s,"throw",e)}i(void 0)})}}function x(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter(function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable}))),r.forEach(function(t){var r;r=n[t],t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r})}return e}function m(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):(function(e){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t.push.apply(t,n)}return t})(Object(t)).forEach(function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))}),e}function v(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n,r,o=null==e?null:"u">typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=o){var l=[],i=!0,s=!1;try{for(o=o.call(e);!(i=(n=o.next()).done)&&(l.push(n.value),!t||l.length!==t);i=!0);}catch(e){s=!0,r=e}finally{try{i||null==o.return||o.return()}finally{if(s)throw r}}return l}}(e,t)||b(e,t)||function(){throw TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function b(e,t){if(e){if("string"==typeof e)return y(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);if("Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n)return Array.from(n);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return y(e,t)}}function S(e,t){var n,r,o,l={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]},i=Object.create(("function"==typeof Iterator?Iterator:Object).prototype),s=Object.defineProperty;return s(i,"next",{value:a(0)}),s(i,"throw",{value:a(1)}),s(i,"return",{value:a(2)}),"function"==typeof Symbol&&s(i,Symbol.iterator,{value:function(){return this}}),i;function a(s){return function(a){var c=[s,a];if(n)throw TypeError("Generator is already executing.");for(;i&&(i=0,c[0]&&(l=0)),l;)try{if(n=1,r&&(o=2&c[0]?r.return:c[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,c[1])).done)return o;switch(r=0,o&&(c=[2&c[0],o.value]),c[0]){case 0:case 1:o=c;break;case 4:return l.label++,{value:c[1],done:!1};case 5:l.label++,r=c[1],c=[0];continue;case 7:c=l.ops.pop(),l.trys.pop();continue;default:if(!(o=(o=l.trys).length>0&&o[o.length-1])&&(6===c[0]||2===c[0])){l=0;continue}if(3===c[0]&&(!o||c[1]>o[0]&&c[1]<o[3])){l.label=c[1];break}if(6===c[0]&&l.label<o[1]){l.label=o[1],o=c;break}if(o&&l.label<o[2]){l.label=o[2],l.ops.push(c);break}o[2]&&l.ops.pop(),l.trys.pop();continue}c=t.call(e,l)}catch(e){c=[6,e],r=0}finally{n=o=0}if(5&c[0])throw c[1];return{value:c[0]?c[1]:void 0,done:!0}}}}var j=n(4984).theme.useToken;function w(e){var t=e.turns,n=e.isLoading,o=e.sessionId,l=j().token;return n?(0,r.jsxs)(s.UIFlex,{justify:"center",align:"center",style:{minHeight:240,gap:8},children:[(0,r.jsx)(s.UISpin,{size:"small"}),(0,r.jsx)(s.UITypographyText,{type:"secondary",style:{fontSize:13},children:"Loading history..."})]}):0===t.length?(0,r.jsx)(s.UIFlex,{justify:"center",align:"center",style:{minHeight:240},children:(0,r.jsx)(s.UITypographyText,{type:"secondary",style:{fontSize:14},children:"Ask anything to get started"})}):(0,r.jsx)("div",{style:{display:"flex",flexDirection:"column",padding:"16px 16px 40px",gap:24},children:t.map(function(e){return(0,r.jsx)(I,{turn:e,sessionId:o,token:l},e.id)})})}function I(e){var t,n,o,l=e.turn,i=e.sessionId,a=e.token;if("user"===l.type){var c=l.steps.find(function(e){return"text"===e.type});return(0,r.jsx)("div",{style:{display:"flex",justifyContent:"flex-end"},children:(0,r.jsx)("span",{style:{maxWidth:"68%",background:a.colorFillTertiary,borderRadius:"".concat(a.borderRadiusLG,"px ").concat(a.borderRadiusLG,"px 3px ").concat(a.borderRadiusLG,"px"),padding:"10px 16px",fontSize:14,lineHeight:1.55,color:a.colorText,whiteSpace:"pre-wrap",wordBreak:"break-word"},children:(null==c?void 0:c.type)==="text"?c.content:""})})}var u="streaming"===l.status,d=l.steps.filter(function(e){return"text"===e.type}),f=d.filter(function(e){var t,n;return!M(null!=(t=e.content)?t:"")&&(null==(n=e.content)?void 0:n.trim())}),p=d.some(function(e){var t;return M(null!=(t=e.content)?t:"")}),y=l.steps.find(function(e){return"tool_use"===e.type&&"report"===e.toolName}),h=null==y||null==(t=y.input)?void 0:t.answer,g=l.steps.filter(function(e){return"text"!==e.type&&("tool_use"!==e.type||"report"!==e.toolName)}),x=g.length>0||u||p,m=h||null,v=null==(n=l.metadata)?void 0:n.fileChanges,b=null==(o=l.metadata)?void 0:o.runId,S=!u&&v&&v.length>0&&!!i&&!!b,j={display:"flex",flexDirection:"column",borderLeft:"2px solid ".concat(a.colorBorderSecondary),paddingLeft:12,gap:6,marginLeft:6};return(0,r.jsxs)("div",{style:{display:"flex",flexDirection:"column",gap:8},children:[x&&(0,r.jsxs)("div",{style:j,children:[g.map(function(e,t){return(0,r.jsx)(C,{step:e,isLast:!1,isStreaming:u&&t===g.length-1&&!m&&0===f.length,token:a},e.id)}),u&&(0===l.steps.length||p)&&(0,r.jsx)(T,{token:a})]}),m&&(0,r.jsx)("div",{style:j,children:(0,r.jsxs)("div",{style:{display:"flex",alignItems:"flex-start",gap:8},children:[(0,r.jsx)(k,{color:a.colorPrimary,pulse:!1}),(0,r.jsx)(s.UIMarkdownViewer,{content:m,style:{flex:1}})]})}),!m&&f.map(function(e){var t;return"text"===e.type&&(null==(t=e.content)?void 0:t.trim())?(0,r.jsx)("div",{style:j,children:(0,r.jsxs)("div",{style:{display:"flex",alignItems:"flex-start",gap:8},children:[(0,r.jsx)(k,{color:a.colorPrimary,pulse:!1}),(0,r.jsx)(s.UIMarkdownViewer,{content:e.content,style:{flex:1}})]})},e.id):null}),S&&(0,r.jsx)("div",{style:j,children:(0,r.jsx)(z,{sessionId:i,runId:b,fileChanges:v,token:a})})]})}function k(e){var t=e.color,n=e.pulse;return(0,r.jsx)("span",{style:{flexShrink:0,width:10,height:10,marginTop:5,borderRadius:"50%",background:t,opacity:n?.7:1,animation:n?"none":void 0}})}function T(e){var t=e.token;return(0,r.jsxs)("div",{style:{display:"flex",alignItems:"center",gap:8},children:[(0,r.jsx)(k,{color:t.colorTextTertiary,pulse:!0}),(0,r.jsx)(s.UITypographyText,{type:"secondary",style:{fontSize:13},children:"Agent is analyzing and executing steps..."})]})}function C(e){var t,n,o,l=e.step,i=e.isStreaming,a=e.token;switch(l.type){case"thinking":var c,u,d=null!=(c=null==(u=l.content)?void 0:u.trim())?c:"";if(M(d))return null;return(0,r.jsxs)("div",{style:{display:"flex",alignItems:"flex-start",gap:8},children:[(0,r.jsx)(k,{color:a.colorWarning,pulse:i}),(0,r.jsx)("div",{style:{flex:1},children:(0,r.jsx)(s.UIMarkdownViewer,{content:d,style:{fontSize:13,opacity:.8}})})]});case"tool_use":return(0,r.jsx)(O,{step:l,isStreaming:i,token:a});case"tool_result":return(0,r.jsxs)("div",{style:{display:"flex",alignItems:"flex-start",gap:8},children:[(0,r.jsx)(k,{color:l.success?a.colorSuccess:a.colorError}),(0,r.jsxs)("div",{style:{flex:1},children:[(0,r.jsxs)("span",{style:{fontSize:13,color:a.colorTextSecondary},children:[(0,r.jsx)("span",{style:{fontWeight:500,color:a.colorText},children:D(l.toolName)}),void 0!==l.durationMs&&(0,r.jsxs)("span",{style:{marginLeft:6,fontSize:11,color:a.colorTextTertiary},children:[l.durationMs,"ms"]})]}),!l.success&&l.error&&(0,r.jsx)("p",{style:{margin:"4px 0 0",fontSize:12,color:a.colorError},children:l.error})]})]});case"subagent":return(0,r.jsxs)("div",{style:{display:"flex",alignItems:"flex-start",gap:8},children:[(0,r.jsx)(k,{color:a.colorPrimary}),(0,r.jsxs)("span",{style:{fontSize:13,color:a.colorTextSecondary},children:[(0,r.jsxs)("span",{style:{fontWeight:500,color:a.colorText},children:["Agent: ",l.agentName]}),(0,r.jsxs)("span",{style:{marginLeft:6},children:[" — ",null==(n=l.task)?void 0:n.slice(0,60),(null!=(t=null==(o=l.task)?void 0:o.length)?t:0)>60?"...":""]})]})]});case"error":return(0,r.jsxs)("div",{style:{display:"flex",alignItems:"flex-start",gap:8},children:[(0,r.jsx)(k,{color:a.colorError}),(0,r.jsxs)("div",{style:{flex:1},children:[(0,r.jsx)("span",{style:{fontSize:13,fontWeight:500,color:a.colorError},children:l.code}),(0,r.jsx)("p",{style:{margin:"4px 0 0",fontSize:12,color:a.colorError},children:l.message})]})]});default:return null}}function O(e){var t,n,o=e.step,i=e.isStreaming,s=e.token,a=v(l().useState(!1),2),c=a[0],u=a[1],d="pending"===o.status,f="done"===o.status,p="error"===o.status,y=f&&!1===o.success,h=function(e){var t=e.input;if(!t)return{};var n=e.toolName.toLowerCase(),r=n.includes("read"),o=n.includes("write")||n.includes("patch")||n.includes("edit"),l=null!=(s=null!=(a=null!=(c=t.path)?c:t.filePath)?a:t.file_path)?s:t.file;if(l){var i=null!=(h=String(l).split("/").pop())?h:String(l);if(r){var s,a,c,u,d,f,p,y,h,g,x,m,v,b,S=null!=(x=null!=(m=t.offset)?m:t.startLine)?x:t.start_line,j=null!=(v=null!=(b=t.limit)?b:t.endLine)?v:t.end_line;void 0!==S&&void 0!==j?g="".concat(S,"-").concat(Number(S)+Number(j)):void 0!==j&&(g="".concat(j," lines"))}return{summary:i,filePath:String(l),badge:g}}var w=null!=(u=null!=(d=null!=(f=t.query)?f:t.text)?d:t.pattern)?u:t.search;if(w)return{summary:String(w).slice(0,100)};var I=null!=(p=t.command)?p:t.cmd;if(I)return{summary:String(I).slice(0,100)};if(o)return{};var k=null!=(y=t.content)?y:t.message;return k?{summary:String(k).slice(0,100)}:{}}(o),g=f&&!!(null==(n=o.metadata)?void 0:n.diff),x=f&&null!=o.output,m=o.input,b=/write|patch|edit/i.test(o.toolName)&&f&&!!(null!=(t=null==m?void 0:m.content)?t:null==m?void 0:m.new_content),S=x||g||b||p,j=d?i?s.colorTextTertiary:s.colorPrimary:f&&!y?s.colorSuccess:s.colorError,w=o.metadata,I=f&&(null==w?void 0:w.uiHint)==="todo"&&null!=w.structured?w.structured.todoList:void 0;return(0,r.jsxs)("div",{style:{display:"flex",alignItems:"flex-start",gap:8},children:[(0,r.jsx)(k,{color:j,pulse:d&&i}),(0,r.jsxs)("div",{style:{flex:1,minWidth:0},children:[(0,r.jsxs)("button",{onClick:function(){return S&&u(function(e){return!e})},disabled:!S,style:{display:"inline-flex",alignItems:"center",gap:6,background:"none",border:"none",padding:0,cursor:S?"pointer":"default",fontSize:13,color:s.colorText,flexWrap:"wrap"},children:[(0,r.jsx)("span",{style:{fontWeight:500},children:D(o.toolName)}),h.badge&&(0,r.jsx)("span",{style:{fontSize:11,color:s.colorTextSecondary,background:s.colorFillSecondary,borderRadius:s.borderRadiusSM,padding:"0 5px"},children:h.badge}),f&&(null==w?void 0:w.resultCount)!==void 0&&(0,r.jsxs)("span",{style:{fontSize:11,color:s.colorTextSecondary,background:s.colorFillSecondary,borderRadius:s.borderRadiusSM,padding:"0 5px"},children:[w.resultCount," results"]}),f&&(null==w?void 0:w.confidence)!==void 0&&(0,r.jsxs)("span",{style:{fontSize:11,color:s.colorTextSecondary,background:s.colorFillSecondary,borderRadius:s.borderRadiusSM,padding:"0 5px"},children:[Math.round(100*w.confidence),"%"]}),f&&(null==w?void 0:w.exitCode)!==void 0&&0!==w.exitCode&&(0,r.jsxs)("span",{style:{fontSize:11,color:s.colorError,background:s.colorErrorBg,borderRadius:s.borderRadiusSM,padding:"0 5px"},children:["exit ",w.exitCode]}),f&&((null==w?void 0:w.linesAdded)!==void 0||(null==w?void 0:w.linesRemoved)!==void 0)&&(0,r.jsxs)("span",{style:{fontSize:11,color:s.colorSuccess,background:s.colorSuccessBg,borderRadius:s.borderRadiusSM,padding:"0 5px"},children:[(null==w?void 0:w.linesAdded)!=null&&w.linesAdded>0?"+".concat(w.linesAdded):"",(null==w?void 0:w.linesRemoved)!=null&&w.linesRemoved>0?" -".concat(w.linesRemoved):""]}),!d&&void 0!==o.durationMs&&(0,r.jsxs)("span",{style:{fontSize:11,color:s.colorTextTertiary},children:[o.durationMs,"ms"]}),S&&(0,r.jsx)("span",{style:{fontSize:11,color:s.colorTextTertiary},children:c?"collapse":"expand"})]}),h.summary&&(0,r.jsx)("p",{style:{margin:"2px 0 0",fontSize:12,color:s.colorTextSecondary},children:h.filePath?(0,r.jsx)(U,{path:h.filePath,label:h.summary,token:s}):h.summary}),null!=I&&(0,r.jsx)(L,{todoList:I,token:s}),p&&o.error&&(0,r.jsx)("p",{style:{margin:"4px 0 0",fontSize:12,color:s.colorError},children:o.error}),y&&!c&&null!=o.output&&(0,r.jsx)("p",{style:{margin:"4px 0 0",fontSize:12,color:s.colorError},children:String(o.output)}),c&&(0,r.jsx)("div",{style:{marginTop:6},children:(0,r.jsx)(R,{step:o,hasDiff:g,hasOutput:x,token:s})})]})]})}function R(e){var t=e.step,n=e.hasDiff,o=e.hasOutput,l=e.token,i=t.input,a=t.toolName.toLowerCase(),c=a.includes("write")||a.includes("patch")||a.includes("edit"),u=a.includes("read"),d=a.includes("bash")||a.includes("exec")||a.includes("shell")||a.includes("run"),f=a.includes("grep")||a.includes("search")||a.includes("glob")||a.includes("list")||a.includes("rag"),p={margin:0,padding:"8px 10px",fontSize:12,lineHeight:1.5,borderRadius:l.borderRadius,overflow:"auto",maxHeight:300,whiteSpace:"pre-wrap",wordBreak:"break-all"};if(c){if(n)return(0,r.jsx)(A,{diff:t.metadata.diff,token:l});var y=null!=(h=null!=(g=null==i?void 0:i.content)?g:null==i?void 0:i.new_content)?h:null==i?void 0:i.text;if(y){var h,g,v,b,S,j=null!=(v=null!=(b=null!=(S=null==i?void 0:i.path)?S:null==i?void 0:i.filePath)?b:null==i?void 0:i.file_path)?v:null==i?void 0:i.file,w=j?j.split(".").pop():void 0;return(0,r.jsxs)("div",{children:[j&&(0,r.jsx)("div",{style:{fontSize:11,color:l.colorTextTertiary,padding:"3px 8px",background:l.colorFillSecondary,borderRadius:"".concat(l.borderRadius,"px ").concat(l.borderRadius,"px 0 0")},children:j}),(0,r.jsx)("pre",{style:m(x({},p),{background:l.colorFillSecondary,borderRadius:j?"0 0 ".concat(l.borderRadius,"px ").concat(l.borderRadius,"px"):l.borderRadius}),className:w?"lang-".concat(w):void 0,children:String(y)})]})}return null}if(u&&o)return(0,r.jsx)("pre",{style:m(x({},p),{background:l.colorFillSecondary}),children:W(t.output)});if(d&&o)return(0,r.jsx)("pre",{style:m(x({},p),{background:l.colorBgSpotlight,color:l.colorTextLightSolid}),children:W(t.output)});if(f&&o)return(0,r.jsx)("pre",{style:m(x({},p),{background:l.colorFillSecondary}),children:W(t.output)});if(n)return(0,r.jsx)(A,{diff:t.metadata.diff,token:l});if(o){var I="done"===t.status&&!1===t.success,k=W(t.output);return I?(0,r.jsx)("pre",{style:m(x({},p),{background:l.colorErrorBg,color:l.colorError}),children:k}):(0,r.jsx)(s.UIMarkdownViewer,{content:k,style:{fontSize:12}})}return null}function A(e){var t=e.diff,n=e.token,o=t.split("\n");return(0,r.jsx)("pre",{style:{margin:0,padding:"8px 10px",fontSize:12,lineHeight:1.5,borderRadius:n.borderRadius,overflow:"auto",maxHeight:300,background:n.colorFillSecondary,whiteSpace:"pre"},children:o.map(function(e,t){var o=e.startsWith("+")&&!e.startsWith("+++")?n.colorSuccess:e.startsWith("-")&&!e.startsWith("---")?n.colorError:e.startsWith("@@")?n.colorInfo:void 0;return(0,r.jsxs)("span",{style:o?{color:o}:void 0,children:[e,"\n"]},t)})})}function U(e){var t=e.path,n=e.label,o=e.token,i=v(l().useState(!1),2),s=i[0],a=i[1];return(0,r.jsxs)("span",{onClick:function(e){e.stopPropagation(),navigator.clipboard.writeText(t).then(function(){a(!0),setTimeout(function(){return a(!1)},1500)})},title:t,style:{cursor:"pointer",color:s?o.colorSuccess:o.colorTextSecondary,fontFamily:"monospace",fontSize:12},children:[n,s?" ✓":""]})}function z(e){var t=e.sessionId,n=e.runId,o=e.fileChanges,i=e.token,c=v(l().useState(new Set),2),u=c[0],d=c[1],f=(0,a.useMutateData)("/v1/plugins/agents/sessions/".concat(t,"/rollback"),"POST"),p=(0,a.useMutateData)("/v1/plugins/agents/sessions/".concat(t,"/approve"),"POST"),h=o.filter(function(e){return!u.has(e.changeId)&&!e.approved});if(0===h.length)return null;var x=h.every(function(e){return e.approved});return(0,r.jsxs)("div",{style:{display:"flex",alignItems:"flex-start",gap:8},children:[(0,r.jsx)(k,{color:i.colorSuccess}),(0,r.jsxs)("div",{style:{flex:1,minWidth:0},children:[(0,r.jsxs)("div",{style:{display:"flex",alignItems:"center",justifyContent:"space-between",marginBottom:4},children:[(0,r.jsxs)(s.UITypographyText,{style:{fontSize:13,fontWeight:500},children:[h.length," ",_(h.length)," changed"]}),!x&&(0,r.jsxs)(s.UIFlex,{gap:4,children:[(0,r.jsx)("button",{onClick:function(){return g(function(){return S(this,function(e){switch(e.label){case 0:return e.trys.push([0,2,,3]),[4,p.mutateAsync({runId:n})];case 1:return e.sent(),d(new Set(h.map(function(e){return e.changeId}))),[3,3];case 2:return e.sent(),console.error("Failed to approve changes"),[3,3];case 3:return[2]}})})()},disabled:p.isLoading||f.isLoading,title:"Approve all changes",style:{background:i.colorSuccessBg,border:"1px solid ".concat(i.colorSuccessBorder),color:i.colorSuccess,borderRadius:i.borderRadius,padding:"2px 8px",fontSize:12,cursor:"pointer"},children:"✓"}),(0,r.jsx)("button",{onClick:function(){(0,s.UIModalConfirm)({title:"Rollback changes?",content:"This will revert ".concat(h.length," ").concat(_(h.length)," to the state before the agent run."),okText:"Rollback",okButtonProps:{danger:!0},cancelText:"Cancel",onOk:function(){return g(function(){var e,t;return S(this,function(r){switch(r.label){case 0:return r.trys.push([0,2,,3]),[4,f.mutateAsync({runId:n})];case 1:return(null==(e=(t=r.sent()).conflicts)?void 0:e.length)&&console.warn("Rolled back: ".concat(t.rolledBack,", skipped due to conflicts: ").concat(t.skipped)),d(new Set(h.map(function(e){return e.changeId}))),[3,3];case 2:return r.sent(),console.error("Failed to rollback changes"),[3,3];case 3:return[2]}})})()}})},disabled:f.isLoading||p.isLoading,title:"Rollback all changes",style:{background:i.colorErrorBg,border:"1px solid ".concat(i.colorErrorBorder),color:i.colorError,borderRadius:i.borderRadius,padding:"2px 8px",fontSize:12,cursor:"pointer"},children:"✕"})]})]}),(0,r.jsx)("ul",{style:{listStyle:"none",margin:0,padding:0,display:"flex",flexDirection:"column",gap:2},children:h.map(function(e){return(0,r.jsx)(P,{change:e,sessionId:t,onDismiss:function(){return d(function(t){return new Set(((function(e){if(Array.isArray(e))return y(e)})(t)||function(e){if("u">typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(t)||b(t)||function(){throw TypeError("Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()).concat([e.changeId]))})},token:i},e.changeId)})})]})]})}function P(e){var t,n=e.change,o=e.sessionId,i=e.onDismiss,c=e.token,u=v(l().useState(!1),2),d=u[0],f=u[1],p=(0,a.useMutateData)("/v1/plugins/agents/sessions/".concat(o,"/rollback"),"POST"),y=(0,a.useMutateData)("/v1/plugins/agents/sessions/".concat(o,"/approve"),"POST"),h=d?"/v1/plugins/agents/sessions/".concat(o,"/changes/").concat(encodeURIComponent(n.changeId),"/diff"):"",x=(0,a.useData)(h,{enabled:d}),m=x.data,b=x.isLoading,j=x.isError,w=n.isNew?(0,r.jsx)(s.UITag,{color:"success",children:"new"}):"delete"===n.operation?(0,r.jsx)(s.UITag,{color:"error",children:"del"}):(0,r.jsx)(s.UITag,{color:"blue",children:"mod"});return(0,r.jsxs)("li",{children:[(0,r.jsxs)("div",{onClick:function(){return f(function(e){return!e})},style:{display:"flex",alignItems:"center",gap:6,fontSize:12,cursor:"pointer",padding:"2px 4px",borderRadius:c.borderRadiusSM,background:d?c.colorFillSecondary:"transparent"},children:[w,(0,r.jsx)("span",{style:{flex:1,fontFamily:"monospace",color:c.colorTextSecondary,overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:null!=(t=n.filePath.split("/").pop())?t:n.filePath}),(0,r.jsx)("span",{style:{color:c.colorTextTertiary,fontFamily:"monospace",fontSize:11},children:n.filePath.includes("/")?n.filePath.slice(0,n.filePath.lastIndexOf("/")):""}),!n.approved&&(0,r.jsxs)("div",{style:{display:"flex",gap:4},onClick:function(e){return e.stopPropagation()},children:[(0,r.jsx)("button",{onClick:function(e){e.stopPropagation(),y.mutateAsync({changeIds:[n.changeId]}).then(i).catch(function(){console.error("Failed to approve file")})},disabled:y.isLoading,title:"Approve",style:{background:"none",border:"none",cursor:"pointer",color:c.colorSuccess,fontSize:13,padding:"0 2px"},children:"✓"}),(0,r.jsx)("button",{onClick:function(e){e.stopPropagation(),(0,s.UIModalConfirm)({title:"Rollback file?",content:n.filePath,okText:"Rollback",okButtonProps:{danger:!0},cancelText:"Cancel",onOk:function(){return g(function(){return S(this,function(e){switch(e.label){case 0:return e.trys.push([0,2,,3]),[4,p.mutateAsync({changeIds:[n.changeId]})];case 1:return e.sent(),i(),[3,3];case 2:return e.sent(),console.error("Failed to rollback file"),[3,3];case 3:return[2]}})})()}})},disabled:p.isLoading,title:"Rollback",style:{background:"none",border:"none",cursor:"pointer",color:c.colorError,fontSize:13,padding:"0 2px"},children:"✕"})]})]}),d&&(0,r.jsxs)("div",{style:{marginTop:4,marginLeft:4},children:[b&&(0,r.jsx)(s.UISpin,{size:"small"}),(null==m?void 0:m.diff)&&(0,r.jsx)(A,{diff:m.diff,token:c}),j&&(0,r.jsx)("span",{style:{color:c.colorError,fontSize:12},children:"Failed to load diff"})]})]})}var E={completed:"✓","in-progress":"●",blocked:"✕",pending:"○"};function L(e){var t,n=e.todoList,o=e.token;if(!(null==n||null==(t=n.items)?void 0:t.length))return null;var l=n.items.filter(function(e){return"completed"===e.status}).length;return(0,r.jsxs)("div",{style:{marginTop:6,background:o.colorFillTertiary,borderRadius:o.borderRadius,padding:"8px 10px"},children:[(0,r.jsxs)("div",{style:{fontSize:11,color:o.colorTextTertiary,marginBottom:6,fontWeight:500},children:[l,"/",n.items.length]}),(0,r.jsx)("ul",{style:{listStyle:"none",margin:0,padding:0,display:"flex",flexDirection:"column",gap:2},children:n.items.map(function(e){var t;return(0,r.jsxs)("li",{style:{display:"flex",alignItems:"center",gap:8,fontSize:13,lineHeight:1.5,padding:"2px 0"},children:[(0,r.jsx)("span",{style:{fontSize:12,flexShrink:0,width:14,textAlign:"center",lineHeight:1},children:null!=(t=E[e.status])?t:"○"}),"completed"===e.status?(0,r.jsx)(s.UITypographyText,{type:"success",style:{flex:1,minWidth:0,textDecoration:"line-through"},children:e.description}):"pending"===e.status||"blocked"===e.status?(0,r.jsx)(s.UITypographyText,{type:"secondary",style:{flex:1,minWidth:0},children:e.description}):(0,r.jsx)(s.UITypographyText,{style:{flex:1,minWidth:0},children:e.description}),"medium"!==e.priority&&(0,r.jsx)(s.UITypographyText,{type:"secondary",style:{fontSize:11,flexShrink:0},children:e.priority})]},e.id)})})]})}function D(e){var t=e.trim().toLowerCase().replace(/[_-]/g," ");if(t.includes("fs read")||t.includes("read file"))return"Read";if(t.includes("fs write")||t.includes("write file"))return"Write";if(t.includes("fs patch")||t.includes("patch file")||t.includes("fs edit")||t.includes("edit file"))return"Edit";if(t.includes("fs delete")||t.includes("delete file")||t.includes("remove file"))return"Delete";if(t.includes("fs list")||t.includes("list files")||t.includes("glob"))return"Glob";if(t.includes("grep")||t.includes("search content"))return"Grep";if(t.includes("bash")||t.includes("exec")||t.includes("shell")||t.includes("run command"))return"Bash";if(t.includes("rag")||t.includes("mind"))return"Mind";if(t.includes("todo"))return"TodoWrite";var n=e.indexOf(":");return(n>=0?e.slice(n+1):e).replace(/[_-]/g," ").replace(/([a-z])([A-Z])/g,"$1 $2").replace(/\b\w/g,function(e){return e.toUpperCase()})}function M(e){var t=e.trim().toLowerCase();return!!("[executing tools...]"===t||"[thinking...]"===t||"[planning...]"===t||"[analyzing...]"===t||"analyzing context and choosing the next step."===t||t.startsWith("checking facts with tool:")||t.startsWith("running step with tool:")||t.startsWith("running the next step"))||"done."===t||"ok."===t||"done"===t||"ok"===t}function _(e){return 1===e?"file":"files"}function W(e){if("string"==typeof e)return e.slice(0,2e3);try{return JSON.stringify(e,null,2).slice(0,2e3)}catch(t){return String(e).slice(0,2e3)}}function B(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}function F(e,t,n,r,o,l,i){try{var s=e[l](i),a=s.value}catch(e){n(e);return}s.done?t(a):Promise.resolve(a).then(r,o)}function N(e){return function(){var t=this,n=arguments;return new Promise(function(r,o){var l=e.apply(t,n);function i(e){F(l,r,o,i,s,"next",e)}function s(e){F(l,r,o,i,s,"throw",e)}i(void 0)})}}function q(e,t){return null!=t&&"u">typeof Symbol&&t[Symbol.hasInstance]?!!t[Symbol.hasInstance](e):e instanceof t}function H(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n,r,o=null==e?null:"u">typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=o){var l=[],i=!0,s=!1;try{for(o=o.call(e);!(i=(n=o.next()).done)&&(l.push(n.value),!t||l.length!==t);i=!0);}catch(e){s=!0,r=e}finally{try{i||null==o.return||o.return()}finally{if(s)throw r}}return l}}(e,t)||$(e,t)||function(){throw TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function G(e){return function(e){if(Array.isArray(e))return B(e)}(e)||function(e){if("u">typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||$(e)||function(){throw TypeError("Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function $(e,t){if(e){if("string"==typeof e)return B(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);if("Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n)return Array.from(n);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return B(e,t)}}function V(e,t){var n,r,o,l={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]},i=Object.create(("function"==typeof Iterator?Iterator:Object).prototype),s=Object.defineProperty;return s(i,"next",{value:a(0)}),s(i,"throw",{value:a(1)}),s(i,"return",{value:a(2)}),"function"==typeof Symbol&&s(i,Symbol.iterator,{value:function(){return this}}),i;function a(s){return function(a){var c=[s,a];if(n)throw TypeError("Generator is already executing.");for(;i&&(i=0,c[0]&&(l=0)),l;)try{if(n=1,r&&(o=2&c[0]?r.return:c[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,c[1])).done)return o;switch(r=0,o&&(c=[2&c[0],o.value]),c[0]){case 0:case 1:o=c;break;case 4:return l.label++,{value:c[1],done:!1};case 5:l.label++,r=c[1],c=[0];continue;case 7:c=l.ops.pop(),l.trys.pop();continue;default:if(!(o=(o=l.trys).length>0&&o[o.length-1])&&(6===c[0]||2===c[0])){l=0;continue}if(3===c[0]&&(!o||c[1]>o[0]&&c[1]<o[3])){l.label=c[1];break}if(6===c[0]&&l.label<o[1]){l.label=o[1],o=c;break}if(o&&l.label<o[2]){l.label=o[2],l.ops.push(c);break}o[2]&&l.ops.pop(),l.trys.pop();continue}c=t.call(e,l)}catch(e){c=[6,e],r=0}finally{n=o=0}if(5&c[0])throw c[1];return{value:c[0]?c[1]:void 0,done:!0}}}}function J(e,t){if(e.sequence!==t.sequence)return e.sequence-t.sequence;if(e.type!==t.type){if("user"===e.type)return -1;if("user"===t.type)return 1}return e.startedAt.localeCompare(t.startedAt)}let K=function(){var e,t,n,c,f,y,h,g,x,m,v,b,S,j,I,k,T,C,O,R,A,U,z,P,E,L,D,M,_,W,B,F,$,K,Y=(0,s.useUITheme)().token,Z=l().useRef(null),Q=H((0,i.useSearchParams)(),2),X=Q[0],ee=Q[1],et=H((0,o.useState)(function(){return X.get("session")}),2),en=et[0],er=et[1],eo=H((0,o.useState)(function(){return X.get("session")}),2),el=eo[0],ei=eo[1],es=H((0,o.useState)(""),2),ea=es[0],ec=es[1],eu=H((0,o.useState)(null),2),ed=eu[0],ef=eu[1],ep=H((0,o.useState)("idle"),2),ey=ep[0],eh=ep[1],eg=H((0,o.useState)([]),2),ex=eg[0],em=eg[1],ev=H((0,o.useState)("auto"),2),eb=ev[0],eS=ev[1],ej=H((0,o.useState)("medium"),2),ew=ej[0],eI=ej[1],ek=H((0,o.useState)(!0),2),eT=ek[0],eC=ek[1],eO=H((0,o.useState)("execute"),2),eR=eO[0],eA=eO[1],eU=H((0,o.useState)(!1),2),ez=eU[0],eP=eU[1],eE="mind-assistant",eL=en?(e="https:"===window.location.protocol?"wss:":"ws:",t=window.location.host,"".concat(e,"//").concat(t,"/api/v1/ws/plugins/agents/session/").concat(en)):null,eD=(0,a.useMutateData)("/v1/plugins/agents/run","POST"),eM=(0,a.useMutateData)(ed?"/v1/plugins/agents/run/".concat(ed,"/stop"):"/v1/plugins/agents/run/noop/stop","POST"),e_=en?"/v1/plugins/agents/sessions/".concat(en,"/turns"):"",eW=(0,a.useData)(e_,{enabled:!!en}),eB=eW.data,eF=eW.isFetching,eN=eW.refetch;(0,o.useEffect)(function(){en&&eB&&!eF&&ei(en)},[en,eB,eF]);var eq=(c=(n={url:eL,onComplete:function(e,t){eh(e?"completed":"failed"),eN(),console.log("[AgentsPage] Run completed:",t)},onTurnsChanged:function(){em([])},onError:function(e){console.error("[AgentsPage] WebSocket error:",e),s.UIMessage.error("Connection error: ".concat(e.message))}}).url,y=void 0===(f=n.autoReconnect)||f,g=void 0===(h=n.reconnectDelay)?1e3:h,m=void 0===(x=n.maxReconnectAttempts)?5:x,v=n.onComplete,b=n.onTurnsChanged,S=n.onError,I=(j=u((0,o.useState)("disconnected"),2))[0],k=j[1],C=(T=u((0,o.useState)([]),2))[0],O=T[1],A=(R=u((0,o.useState)(null),2))[0],U=R[1],z=(0,o.useRef)(null),P=(0,o.useRef)(0),E=(0,o.useRef)(null),L=(0,o.useRef)(!1),D=(0,o.useRef)(!1),M=(0,o.useRef)(v),_=(0,o.useRef)(S),W=(0,o.useRef)(b),(0,o.useEffect)(function(){M.current=v},[v]),(0,o.useEffect)(function(){_.current=S},[S]),(0,o.useEffect)(function(){W.current=b},[b]),B=(0,o.useCallback)(function(){null!==E.current&&(clearTimeout(E.current),E.current=null),z.current&&(z.current.onclose=null,z.current.onerror=null,z.current.onmessage=null,z.current.close(),z.current=null)},[]),F=(0,o.useCallback)(function(e){B(),k("connecting"),P.current=0;var t=new WebSocket(e);z.current=t,t.onopen=function(){},t.onmessage=function(e){try{var t=JSON.parse(e.data);switch(t.type){case"conversation:snapshot":var n,r=t.payload,o=r.completedTurns,l=r.activeTurns,i=d(o).concat(d(l)).sort(function(e,t){return e.sequence-t.sequence});D.current=!1,O(function(e){if(0===e.length)return i;var t=new Map,n=!0,r=!1,o=void 0;try{for(var l,s=i[Symbol.iterator]();!(n=(l=s.next()).done);n=!0){var a=l.value;t.set(a.id,a)}}catch(e){r=!0,o=e}finally{try{n||null==s.return||s.return()}finally{if(r)throw o}}var c=!0,u=!1,f=void 0;try{for(var p,y=e[Symbol.iterator]();!(c=(p=y.next()).done);c=!0){var h=p.value,g=t.get(h.id);g&&"streaming"===h.status&&"streaming"===g.status&&h.steps.length>g.steps.length&&t.set(h.id,h)}}catch(e){u=!0,f=e}finally{try{c||null==y.return||y.return()}finally{if(u)throw f}}return d(t.values()).sort(function(e,t){return e.sequence-t.sequence})}),null==(n=W.current)||n.call(W);break;case"turn:snapshot":var s,a=t.payload.turn;D.current=!1,O(function(e){var t=d(e),n=t.findIndex(function(e){return e.id===a.id});if(n>=0){var r=t[n];if("streaming"===r.status&&"streaming"===a.status&&a.steps.length<r.steps.length)return e;t[n]=a}else{var o=t.findIndex(function(e){return e.sequence>a.sequence});o>=0?t.splice(o,0,a):t.push(a)}return t}),null==(s=W.current)||s.call(W);break;case"connection:ready":P.current=0,k("connected");break;case"run:completed":var c,u=t.payload,f=u.success,p=u.summary;D.current=!0,null==(c=M.current)||c.call(M,f,p);break;case"error":var y,h=t.payload,g=h.code,x=h.message;U({code:g,message:x}),null==(y=_.current)||y.call(_,{code:g,message:x})}}catch(e){console.error("[useAgentWebSocket] Failed to parse message:",e)}},t.onerror=function(){k("error")},t.onclose=function(t){L.current&&!D.current&&y&&P.current<m?(P.current++,k("reconnecting"),E.current=setTimeout(function(){L.current&&F(e)},g*P.current)):k("disconnected")}},[y,B,m,g]),$=(0,o.useCallback)(function(e){var t;(null==(t=z.current)?void 0:t.readyState)===WebSocket.OPEN&&z.current.send(JSON.stringify(e))},[]),K=(0,o.useCallback)(function(){O([]),U(null),D.current=!1},[]),(0,o.useEffect)(function(){return L.current=!1,B(),O([]),U(null),D.current=!1,c?(L.current=!0,F(c)):k("disconnected"),function(){L.current=!1,B()}},[c]),{status:I,isConnected:"connected"===I,turns:C,error:A,send:$,clearTurns:K}),eH=(0,o.useCallback)(function(e,t){er(e),ei(null),ee({session:e},{replace:!0}),ef(null),eh("idle"),em([]),eq.clearTurns()},[eq,ee]),eG=(0,o.useCallback)(function(){er(null),ei(null),ee({},{replace:!0}),ef(null),eh("idle"),em([]),eq.clearTurns()},[eq,ee]),e$=(0,o.useCallback)(function(){return N(function(){var e,t,n,r;return V(this,function(o){switch(o.label){case 0:if(!ea.trim())return[2];e=ea.trim(),ec(""),eh("running"),t={id:"optimistic-user-".concat(Date.now()),type:"user",sequence:9999,startedAt:new Date().toISOString(),completedAt:new Date().toISOString(),status:"completed",steps:[{type:"text",id:"opt-1",timestamp:new Date().toISOString(),content:e,role:"user"}],metadata:{agentId:"user"}},em(function(e){return G(e).concat([t])}),o.label=1;case 1:return o.trys.push([1,3,,4]),[4,eD.mutateAsync({task:e,agentId:eE,sessionId:null!=en?en:void 0,tier:ew,enableEscalation:eT,responseMode:eb})];case 2:return n=o.sent(),en||(er(n.sessionId),ei(n.sessionId),ee({session:n.sessionId},{replace:!0})),ef(n.runId),[3,4];case 3:return r=o.sent(),em(function(e){return e.filter(function(e){return e.id!==t.id})}),eh("failed"),s.UIMessage.error("Failed to start: ".concat(q(r,Error)?r.message:String(r))),[3,4];case 4:return[2]}})})()},[ea,eE,en,ew,eT,eb,ee,eD]),eV=(0,o.useCallback)(function(){return N(function(){var e;return V(this,function(t){switch(t.label){case 0:if(!ed)return[2];t.label=1;case 1:return t.trys.push([1,3,,4]),[4,eM.mutateAsync({reason:"Stopped by user"})];case 2:return t.sent(),eh("stopped"),s.UIMessage.info("Stopped"),[3,4];case 3:return e=t.sent(),s.UIMessage.error("Failed to stop: ".concat(q(e,Error)?e.message:String(e))),[3,4];case 4:return[2]}})})()},[ed,eM]),eJ="running"===ey||eD.isLoading,eK=null!==en&&en!==el,eY=function(){if(eK)return[];var e=null!=(i=null==eB?void 0:eB.turns)?i:[],t=eq.turns,n=new Map;if(0===t.length){var r=!0,o=!1,l=void 0;try{for(var i,s,a=e[Symbol.iterator]();!(r=(s=a.next()).done);r=!0){var c=s.value;n.set(c.id,c)}}catch(e){o=!0,l=e}finally{try{r||null==a.return||a.return()}finally{if(o)throw l}}}else{var u=!0,d=!1,f=void 0;try{for(var p,y=e[Symbol.iterator]();!(u=(p=y.next()).done);u=!0){var h=p.value;n.set(h.id,h)}}catch(e){d=!0,f=e}finally{try{u||null==y.return||y.return()}finally{if(d)throw f}}var g=!0,x=!1,m=void 0;try{for(var v,b=t[Symbol.iterator]();!(g=(v=b.next()).done);g=!0){var S=v.value;n.set(S.id,S)}}catch(e){x=!0,m=e}finally{try{g||null==b.return||b.return()}finally{if(x)throw m}}}var j=new Set(G(n.values()).filter(function(e){return"user"===e.type}).flatMap(function(e){return e.steps.filter(function(e){return"text"===e.type}).map(function(e){var t;return null==(t=e.content)?void 0:t.trim()})}).filter(Boolean)),w=!0,I=!1,k=void 0;try{for(var T,C=ex[Symbol.iterator]();!(w=(T=C.next()).done);w=!0){var O,R,A=T.value,U=null==(R=A.steps.find(function(e){return"text"===e.type}))||null==(O=R.content)?void 0:O.trim();U&&!j.has(U)&&n.set(A.id,A)}}catch(e){I=!0,k=e}finally{try{w||null==C.return||C.return()}finally{if(I)throw k}}return G(n.values()).sort(J)}(),eZ=function(){if(!eJ||eY.some(function(e){return"assistant"===e.type&&"streaming"===e.status}))return eY;var e=G(eY).reverse().find(function(e){return"user"===e.type});if(!e||eY.some(function(t){return"assistant"===t.type&&"completed"===t.status&&t.sequence>e.sequence}))return eY;var t={id:"thinking-loader-".concat(e.id),type:"assistant",sequence:e.sequence+.1,startedAt:new Date().toISOString(),completedAt:null,status:"streaming",steps:[],metadata:{agentId:"assistant-loader"}};return G(eY).concat([t]).sort(J)}(),eQ=eK||eF&&0===eY.length&&!!en;return(0,r.jsx)("div",{style:{padding:16,height:"100%"},children:(0,r.jsxs)(s.UICard,{title:(0,r.jsxs)(s.UISpace,{children:[(0,r.jsx)(s.UIIcon,{name:"RobotOutlined"}),(0,r.jsx)("span",{children:"Agent"})]}),extra:(0,r.jsx)(p,{currentSessionId:en,onSessionChange:eH,onNewChat:eG}),style:{height:"100%",display:"flex",flexDirection:"column"},styles:{body:{flex:1,display:"flex",flexDirection:"column",padding:0,overflow:"hidden"}},children:[(0,r.jsx)("div",{ref:Z,style:{flex:1,overflow:"auto"},children:(0,r.jsx)(w,{turns:eZ,isLoading:eQ,sessionId:en})}),(0,r.jsx)("div",{style:{borderTop:"1px solid ".concat(Y.colorBorderSecondary),padding:"12px 16px",background:Y.colorBgContainer,display:"flex",justifyContent:"center"},children:(0,r.jsxs)("div",{onFocus:function(){return eP(!0)},onBlur:function(){return eP(!1)},style:{width:"65%",maxWidth:780,border:"1px solid ".concat(ez?"execute"===eR?Y.colorError:Y.colorPrimary:"plan"===eR?Y.colorPrimary:Y.colorBorder),borderRadius:Y.borderRadiusLG,background:Y.colorBgContainer,boxShadow:ez?"0 0 0 2px ".concat("execute"===eR?Y.colorErrorBg:Y.colorPrimaryBg):"none",transition:"border-color 0.2s, box-shadow 0.2s",overflow:"hidden"},children:[(0,r.jsx)(s.UIInputTextArea,{value:ea,onChange:function(e){return ec(e.target.value)},onKeyDown:function(e){"Enter"!==e.key||e.shiftKey||"running"===ey||eD.isLoading||(e.preventDefault(),e$())},placeholder:"Message...",autoSize:{minRows:2,maxRows:8},disabled:eJ,variant:"borderless",style:{resize:"none",padding:"10px 12px 4px",border:"none",boxShadow:"none",outline:"none"}}),(0,r.jsxs)("div",{style:{display:"flex",alignItems:"center",justifyContent:"space-between",padding:"6px 8px 8px"},children:[(0,r.jsxs)(s.UISpace,{size:6,children:[(0,r.jsx)(s.UISelect,{value:eR,onChange:function(e){return eA(e)},disabled:eJ,size:"small",variant:"borderless",style:{width:110},options:[{value:"execute",label:"Execute"},{value:"plan",label:"Plan"}]}),(0,r.jsx)(s.UISelect,{value:eb,onChange:function(e){return eS(e)},disabled:eJ,size:"small",variant:"borderless",style:{width:80},options:[{value:"auto",label:"Auto"},{value:"brief",label:"Brief"},{value:"deep",label:"Deep"}]}),(0,r.jsx)(s.UISelect,{value:ew,onChange:function(e){return eI(e)},disabled:eJ,size:"small",variant:"borderless",style:{width:100},options:[{value:"small",label:"Small"},{value:"medium",label:"Medium"},{value:"large",label:"Large"}]}),(0,r.jsxs)(s.UISpace,{size:4,align:"center",children:[(0,r.jsx)(s.UISwitch,{checked:eT,onChange:eC,disabled:eJ||"large"===ew,size:"small"}),(0,r.jsx)(s.UITypographyText,{type:"secondary",style:{fontSize:12},children:"Auto escalate"})]})]}),(0,r.jsx)("div",{children:eJ?(0,r.jsx)(s.UIButton,{danger:!0,size:"small",icon:eM.isLoading?(0,r.jsx)(s.UIIcon,{name:"LoadingOutlined"}):(0,r.jsx)(s.UIIcon,{name:"StopOutlined"}),onClick:eV,disabled:eM.isLoading,children:"Stop"}):(0,r.jsx)(s.UIButton,{variant:"primary",size:"small",icon:eD.isLoading?(0,r.jsx)(s.UIIcon,{name:"LoadingOutlined"}):(0,r.jsx)(s.UIIcon,{name:"SendOutlined"}),onClick:e$,disabled:!ea.trim()||eD.isLoading,children:"Send"})})]})]})})]})})}}}]);
|
|
2
|
+
//# sourceMappingURL=__federation_expose_AgentsPage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"__federation_expose_AgentsPage.js","sources":["webpack://@kb-labs/agent-entry/../../../node_modules/.pnpm/react@18.3.1/node_modules/react/cjs/react-jsx-runtime.production.min.js","webpack://@kb-labs/agent-entry/../../../node_modules/.pnpm/react@18.3.1/node_modules/react/jsx-runtime.js","webpack://@kb-labs/agent-entry/./src/studio/components/SessionSelector.tsx","webpack://@kb-labs/agent-entry/./src/studio/components/ConversationView.tsx","webpack://@kb-labs/agent-entry/./src/studio/pages/AgentsPage.tsx","webpack://@kb-labs/agent-entry/./src/studio/hooks/use-agent-websocket.ts"],"sourcesContent":["/**\n * @license React\n * react-jsx-runtime.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n'use strict';var f=require(\"react\"),k=Symbol.for(\"react.element\"),l=Symbol.for(\"react.fragment\"),m=Object.prototype.hasOwnProperty,n=f.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner,p={key:!0,ref:!0,__self:!0,__source:!0};\nfunction q(c,a,g){var b,d={},e=null,h=null;void 0!==g&&(e=\"\"+g);void 0!==a.key&&(e=\"\"+a.key);void 0!==a.ref&&(h=a.ref);for(b in a)m.call(a,b)&&!p.hasOwnProperty(b)&&(d[b]=a[b]);if(c&&c.defaultProps)for(b in a=c.defaultProps,a)void 0===d[b]&&(d[b]=a[b]);return{$$typeof:k,type:c,key:e,ref:h,props:d,_owner:n.current}}exports.Fragment=l;exports.jsx=q;exports.jsxs=q;\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('./cjs/react-jsx-runtime.production.min.js');\n} else {\n module.exports = require('./cjs/react-jsx-runtime.development.js');\n}\n","/**\n * Session selector component for Agent widget\n */\n\nimport React from 'react';\nimport { useData, UISelect, UIButton, UISpace, UITypographyText, UISpin, UITooltip, UIIcon, useUITheme } from '@kb-labs/sdk/studio';\nimport type { AgentSessionInfo } from '@kb-labs/agent-contracts';\n\ninterface SessionSelectorProps {\n currentSessionId: string | null;\n onSessionChange: (sessionId: string, session: AgentSessionInfo) => void;\n onNewChat: () => void;\n}\n\nfunction formatRelativeTime(dateStr: string): string {\n const date = new Date(dateStr);\n const now = new Date();\n const diffMs = now.getTime() - date.getTime();\n const diffMins = Math.floor(diffMs / 60000);\n const diffHours = Math.floor(diffMs / 3600000);\n const diffDays = Math.floor(diffMs / 86400000);\n\n if (diffMins < 1) { return 'just now'; }\n if (diffMins < 60) { return `${diffMins}m ago`; }\n if (diffHours < 24) { return `${diffHours}h ago`; }\n if (diffDays < 7) { return `${diffDays}d ago`; }\n return date.toLocaleDateString();\n}\n\nexport function SessionSelector({\n currentSessionId,\n onSessionChange,\n onNewChat,\n}: SessionSelectorProps) {\n const { token } = useUITheme();\n const { data: sessionsData, isLoading } = useData<{ sessions: AgentSessionInfo[]; total: number }>(\n '/v1/plugins/agents/sessions?limit=20',\n );\n\n const sessions = sessionsData?.sessions ?? [];\n\n const handleSessionSelect = (sessionId: string) => {\n const session = sessions.find((s) => s.id === sessionId);\n if (session) {\n onSessionChange(sessionId, session);\n }\n };\n\n return (\n <UISpace size=\"small\" style={{ width: '100%' }}>\n <UIIcon name=\"HistoryOutlined\" style={{ color: token.colorTextTertiary }} />\n\n <UISelect\n style={{ flex: 1, minWidth: 200 }}\n placeholder=\"New chat\"\n value={currentSessionId ?? undefined}\n onChange={(v) => handleSessionSelect(v as string)}\n loading={isLoading}\n allowClear\n onClear={onNewChat}\n notFoundContent={\n isLoading ? (\n <UISpin size=\"small\" />\n ) : (\n <UITypographyText type=\"secondary\">No sessions yet</UITypographyText>\n )\n }\n optionLabelProp=\"label\"\n options={sessions.map((session) => ({\n value: session.id,\n label: session.name || session.task || 'Untitled',\n lastActivityAt: session.lastActivityAt,\n }))}\n optionRender={(option) => (\n <UISpace style={{ width: '100%', justifyContent: 'space-between' }}>\n <UITypographyText ellipsis style={{ maxWidth: 180 }}>\n {option.label}\n </UITypographyText>\n <UITypographyText type=\"secondary\" style={{ fontSize: 11 }}>\n {formatRelativeTime(option.data.lastActivityAt)}\n </UITypographyText>\n </UISpace>\n )}\n />\n\n <UITooltip title=\"New Chat\">\n <UIButton\n variant=\"primary\"\n icon={<UIIcon name=\"PlusOutlined\" />}\n onClick={onNewChat}\n />\n </UITooltip>\n </UISpace>\n );\n}\n","/**\n * Turn-based conversation UI — Claude Code style\n * Adapted from studio/modules/agents for plugin widget use.\n * UIKit-only: no CSS file, all styles via antd token.\n */\n\nimport React from 'react';\nimport { theme } from 'antd';\nimport type { Turn, TurnStep, FileChangeSummary } from '@kb-labs/agent-contracts';\nimport {\n useMutateData,\n useData,\n UISpin,\n UIMarkdownViewer,\n UIModalConfirm,\n UITag,\n UITypographyText,\n UIFlex,\n} from '@kb-labs/sdk/studio';\n\nconst { useToken } = theme;\n\ninterface ConversationViewProps {\n turns: Turn[];\n isLoading?: boolean;\n sessionId?: string | null;\n}\n\nexport function ConversationView({ turns, isLoading, sessionId }: ConversationViewProps) {\n const { token } = useToken();\n\n if (isLoading) {\n return (\n <UIFlex justify=\"center\" align=\"center\" style={{ minHeight: 240, gap: 8 }}>\n <UISpin size=\"small\" />\n <UITypographyText type=\"secondary\" style={{ fontSize: 13 }}>Loading history...</UITypographyText>\n </UIFlex>\n );\n }\n\n if (turns.length === 0) {\n return (\n <UIFlex justify=\"center\" align=\"center\" style={{ minHeight: 240 }}>\n <UITypographyText type=\"secondary\" style={{ fontSize: 14 }}>Ask anything to get started</UITypographyText>\n </UIFlex>\n );\n }\n\n return (\n <div style={{ display: 'flex', flexDirection: 'column', padding: '16px 16px 40px', gap: 24 }}>\n {turns.map((turn) => (\n <TurnView key={turn.id} turn={turn} sessionId={sessionId} token={token} />\n ))}\n </div>\n );\n}\n\n// ---------- TurnView ----------\n\nfunction TurnView({ turn, sessionId, token }: { turn: Turn; sessionId?: string | null; token: ReturnType<typeof useToken>['token'] }) {\n if (turn.type === 'user') {\n const text = turn.steps.find((s) => s.type === 'text');\n return (\n <div style={{ display: 'flex', justifyContent: 'flex-end' }}>\n <span style={{\n maxWidth: '68%',\n background: token.colorFillTertiary,\n borderRadius: `${token.borderRadiusLG}px ${token.borderRadiusLG}px 3px ${token.borderRadiusLG}px`,\n padding: '10px 16px',\n fontSize: 14,\n lineHeight: 1.55,\n color: token.colorText,\n whiteSpace: 'pre-wrap',\n wordBreak: 'break-word',\n }}>\n {text?.type === 'text' ? text.content : ''}\n </span>\n </div>\n );\n }\n\n const isStreaming = turn.status === 'streaming';\n const textSteps = turn.steps.filter((s) => s.type === 'text');\n const visibleTextSteps = textSteps.filter(\n (s) => !isInternalProgressText(s.content ?? '') && s.content?.trim(),\n );\n const hasInternalProgressText = textSteps.some((s) => isInternalProgressText(s.content ?? ''));\n\n const reportStep = turn.steps.find(\n (s) => s.type === 'tool_use' && (s as import('@kb-labs/agent-contracts').ToolUseStep).toolName === 'report'\n ) as import('@kb-labs/agent-contracts').ToolUseStep | undefined;\n const reportAnswer = (reportStep?.input as Record<string, unknown> | null)?.answer as string | undefined;\n\n const visibleSteps = turn.steps.filter(\n (s) => s.type !== 'text' && !(s.type === 'tool_use' && (s as import('@kb-labs/agent-contracts').ToolUseStep).toolName === 'report')\n );\n const hasToolSteps = visibleSteps.length > 0 || isStreaming || hasInternalProgressText;\n\n const answerContent = reportAnswer || null;\n const fileChanges = turn.metadata?.fileChanges;\n const runId = turn.metadata?.runId;\n const showFileChanges = !isStreaming && fileChanges && fileChanges.length > 0 && !!sessionId && !!runId;\n\n const timelineStyle: React.CSSProperties = {\n display: 'flex',\n flexDirection: 'column',\n borderLeft: `2px solid ${token.colorBorderSecondary}`,\n paddingLeft: 12,\n gap: 6,\n marginLeft: 6,\n };\n\n return (\n <div style={{ display: 'flex', flexDirection: 'column', gap: 8 }}>\n {hasToolSteps && (\n <div style={timelineStyle}>\n {visibleSteps.map((step, i) => (\n <StepRow\n key={step.id}\n step={step}\n isLast={false}\n isStreaming={isStreaming && i === visibleSteps.length - 1 && !answerContent && visibleTextSteps.length === 0}\n token={token}\n />\n ))}\n {isStreaming && (turn.steps.length === 0 || hasInternalProgressText) && (\n <ThinkingRow token={token} />\n )}\n </div>\n )}\n {answerContent && (\n <div style={timelineStyle}>\n <div style={{ display: 'flex', alignItems: 'flex-start', gap: 8 }}>\n <StepDot color={token.colorPrimary} pulse={false} />\n <UIMarkdownViewer content={answerContent} style={{ flex: 1 }} />\n </div>\n </div>\n )}\n {!answerContent && visibleTextSteps.map((step) => (\n step.type === 'text' && step.content?.trim() ? (\n <div key={step.id} style={timelineStyle}>\n <div style={{ display: 'flex', alignItems: 'flex-start', gap: 8 }}>\n <StepDot color={token.colorPrimary} pulse={false} />\n <UIMarkdownViewer content={step.content} style={{ flex: 1 }} />\n </div>\n </div>\n ) : null\n ))}\n {showFileChanges && (\n <div style={timelineStyle}>\n <FileChangesBlock\n sessionId={sessionId!}\n runId={runId!}\n fileChanges={fileChanges!}\n token={token}\n />\n </div>\n )}\n </div>\n );\n}\n\n// ---------- StepDot ----------\n\nfunction StepDot({ color, pulse }: { color: string; pulse?: boolean }) {\n return (\n <span style={{\n flexShrink: 0,\n width: 10,\n height: 10,\n marginTop: 5,\n borderRadius: '50%',\n background: color,\n opacity: pulse ? 0.7 : 1,\n animation: pulse ? 'none' : undefined,\n }} />\n );\n}\n\n// ---------- ThinkingRow ----------\n\nfunction ThinkingRow({ token }: { token: ReturnType<typeof useToken>['token'] }) {\n return (\n <div style={{ display: 'flex', alignItems: 'center', gap: 8 }}>\n <StepDot color={token.colorTextTertiary} pulse={true} />\n <UITypographyText type=\"secondary\" style={{ fontSize: 13 }}>Agent is analyzing and executing steps...</UITypographyText>\n </div>\n );\n}\n\n// ---------- StepRow ----------\n\nfunction StepRow({ step, isStreaming, token }: { step: TurnStep; isLast: boolean; isStreaming: boolean; token: ReturnType<typeof useToken>['token'] }) {\n switch (step.type) {\n case 'thinking': {\n const content = step.content?.trim() ?? '';\n if (isNoisyThinking(content)) { return null; }\n return (\n <div style={{ display: 'flex', alignItems: 'flex-start', gap: 8 }}>\n <StepDot color={token.colorWarning} pulse={isStreaming} />\n <div style={{ flex: 1 }}>\n <UIMarkdownViewer content={content} style={{ fontSize: 13, opacity: 0.8 }} />\n </div>\n </div>\n );\n }\n\n case 'tool_use':\n return <ToolRow step={step} isStreaming={isStreaming} token={token} />;\n\n case 'tool_result':\n return (\n <div style={{ display: 'flex', alignItems: 'flex-start', gap: 8 }}>\n <StepDot color={step.success ? token.colorSuccess : token.colorError} />\n <div style={{ flex: 1 }}>\n <span style={{ fontSize: 13, color: token.colorTextSecondary }}>\n <span style={{ fontWeight: 500, color: token.colorText }}>{formatToolName(step.toolName)}</span>\n {step.durationMs !== undefined && (\n <span style={{ marginLeft: 6, fontSize: 11, color: token.colorTextTertiary }}>{step.durationMs}ms</span>\n )}\n </span>\n {!step.success && step.error && (\n <p style={{ margin: '4px 0 0', fontSize: 12, color: token.colorError }}>{step.error}</p>\n )}\n </div>\n </div>\n );\n\n case 'subagent':\n return (\n <div style={{ display: 'flex', alignItems: 'flex-start', gap: 8 }}>\n <StepDot color={token.colorPrimary} />\n <span style={{ fontSize: 13, color: token.colorTextSecondary }}>\n <span style={{ fontWeight: 500, color: token.colorText }}>Agent: {step.agentName}</span>\n <span style={{ marginLeft: 6 }}> — {step.task?.slice(0, 60)}{(step.task?.length ?? 0) > 60 ? '...' : ''}</span>\n </span>\n </div>\n );\n\n case 'error':\n return (\n <div style={{ display: 'flex', alignItems: 'flex-start', gap: 8 }}>\n <StepDot color={token.colorError} />\n <div style={{ flex: 1 }}>\n <span style={{ fontSize: 13, fontWeight: 500, color: token.colorError }}>{step.code}</span>\n <p style={{ margin: '4px 0 0', fontSize: 12, color: token.colorError }}>{step.message}</p>\n </div>\n </div>\n );\n\n default:\n return null;\n }\n}\n\n// ---------- ToolRow ----------\n\nfunction ToolRow({\n step,\n isStreaming,\n token,\n}: {\n step: import('@kb-labs/agent-contracts').ToolUseStep;\n isStreaming: boolean;\n token: ReturnType<typeof useToken>['token'];\n}) {\n const [open, setOpen] = React.useState(false);\n\n const isPending = step.status === 'pending';\n const isDone = step.status === 'done';\n const isError = step.status === 'error';\n const isFailed = isDone && step.success === false;\n\n const meta = getToolMeta(step);\n const hasDiff = isDone && !!step.metadata?.diff;\n const hasOutput = isDone && step.output != null;\n const input = step.input as Record<string, unknown> | null | undefined;\n const isWriteTool = /write|patch|edit/i.test(step.toolName);\n const hasWriteInput = isWriteTool && isDone && !!(input?.content ?? input?.new_content);\n const canExpand = hasOutput || hasDiff || hasWriteInput || isError;\n\n const dotColor = isPending\n ? (isStreaming ? token.colorTextTertiary : token.colorPrimary)\n : (isDone && !isFailed ? token.colorSuccess : token.colorError);\n\n const m = step.metadata;\n const todoList = (isDone && m?.uiHint === 'todo' && m.structured != null)\n ? (m.structured as Record<string, unknown>).todoList as TodoListData | undefined\n : undefined;\n\n return (\n <div style={{ display: 'flex', alignItems: 'flex-start', gap: 8 }}>\n <StepDot color={dotColor} pulse={isPending && isStreaming} />\n <div style={{ flex: 1, minWidth: 0 }}>\n {/* Header button */}\n <button\n onClick={() => canExpand && setOpen((v) => !v)}\n disabled={!canExpand}\n style={{\n display: 'inline-flex',\n alignItems: 'center',\n gap: 6,\n background: 'none',\n border: 'none',\n padding: 0,\n cursor: canExpand ? 'pointer' : 'default',\n fontSize: 13,\n color: token.colorText,\n flexWrap: 'wrap',\n }}\n >\n <span style={{ fontWeight: 500 }}>{formatToolName(step.toolName)}</span>\n {meta.badge && (\n <span style={{ fontSize: 11, color: token.colorTextSecondary, background: token.colorFillSecondary, borderRadius: token.borderRadiusSM, padding: '0 5px' }}>\n {meta.badge}\n </span>\n )}\n {isDone && m?.resultCount !== undefined && (\n <span style={{ fontSize: 11, color: token.colorTextSecondary, background: token.colorFillSecondary, borderRadius: token.borderRadiusSM, padding: '0 5px' }}>\n {m.resultCount} results\n </span>\n )}\n {isDone && m?.confidence !== undefined && (\n <span style={{ fontSize: 11, color: token.colorTextSecondary, background: token.colorFillSecondary, borderRadius: token.borderRadiusSM, padding: '0 5px' }}>\n {Math.round(m.confidence * 100)}%\n </span>\n )}\n {isDone && m?.exitCode !== undefined && m.exitCode !== 0 && (\n <span style={{ fontSize: 11, color: token.colorError, background: token.colorErrorBg, borderRadius: token.borderRadiusSM, padding: '0 5px' }}>\n exit {m.exitCode}\n </span>\n )}\n {isDone && (m?.linesAdded !== undefined || m?.linesRemoved !== undefined) && (\n <span style={{ fontSize: 11, color: token.colorSuccess, background: token.colorSuccessBg, borderRadius: token.borderRadiusSM, padding: '0 5px' }}>\n {m?.linesAdded != null && m.linesAdded > 0 ? `+${m.linesAdded}` : ''}\n {m?.linesRemoved != null && m.linesRemoved > 0 ? ` -${m.linesRemoved}` : ''}\n </span>\n )}\n {!isPending && step.durationMs !== undefined && (\n <span style={{ fontSize: 11, color: token.colorTextTertiary }}>{step.durationMs}ms</span>\n )}\n {canExpand && (\n <span style={{ fontSize: 11, color: token.colorTextTertiary }}>{open ? 'collapse' : 'expand'}</span>\n )}\n </button>\n\n {/* Summary / file path */}\n {meta.summary && (\n <p style={{ margin: '2px 0 0', fontSize: 12, color: token.colorTextSecondary }}>\n {meta.filePath\n ? <CopyPath path={meta.filePath} label={meta.summary} token={token} />\n : meta.summary}\n </p>\n )}\n\n {/* Todo list */}\n {todoList != null && <TodoView todoList={todoList} token={token} />}\n\n {/* Errors */}\n {isError && step.error && (\n <p style={{ margin: '4px 0 0', fontSize: 12, color: token.colorError }}>{step.error}</p>\n )}\n {isFailed && !open && step.output != null && (\n <p style={{ margin: '4px 0 0', fontSize: 12, color: token.colorError }}>{String(step.output)}</p>\n )}\n\n {/* Expanded details */}\n {open && (\n <div style={{ marginTop: 6 }}>\n <ToolDetails step={step} hasDiff={hasDiff} hasOutput={hasOutput} token={token} />\n </div>\n )}\n </div>\n </div>\n );\n}\n\n// ---------- ToolDetails ----------\n\nfunction ToolDetails({\n step,\n hasDiff,\n hasOutput,\n token,\n}: {\n step: import('@kb-labs/agent-contracts').ToolUseStep;\n hasDiff: boolean;\n hasOutput: boolean;\n token: ReturnType<typeof useToken>['token'];\n}) {\n const input = step.input as Record<string, unknown> | null | undefined;\n const toolLower = step.toolName.toLowerCase();\n\n const isWrite = toolLower.includes('write') || toolLower.includes('patch') || toolLower.includes('edit');\n const isRead = toolLower.includes('read');\n const isShell = toolLower.includes('bash') || toolLower.includes('exec') || toolLower.includes('shell') || toolLower.includes('run');\n const isSearch = toolLower.includes('grep') || toolLower.includes('search') || toolLower.includes('glob') || toolLower.includes('list') || toolLower.includes('rag');\n\n const codePreStyle: React.CSSProperties = {\n margin: 0,\n padding: '8px 10px',\n fontSize: 12,\n lineHeight: 1.5,\n borderRadius: token.borderRadius,\n overflow: 'auto',\n maxHeight: 300,\n whiteSpace: 'pre-wrap',\n wordBreak: 'break-all',\n };\n\n if (isWrite) {\n if (hasDiff) { return <DiffView diff={step.metadata!.diff!} token={token} />; }\n const content = (input?.content ?? input?.new_content ?? input?.text) as string | undefined;\n if (content) {\n const filePath = (input?.path ?? input?.filePath ?? input?.file_path ?? input?.file) as string | undefined;\n const ext = filePath ? filePath.split('.').pop() : undefined;\n return (\n <div>\n {filePath && (\n <div style={{ fontSize: 11, color: token.colorTextTertiary, padding: '3px 8px', background: token.colorFillSecondary, borderRadius: `${token.borderRadius}px ${token.borderRadius}px 0 0` }}>\n {filePath}\n </div>\n )}\n <pre style={{ ...codePreStyle, background: token.colorFillSecondary, borderRadius: filePath ? `0 0 ${token.borderRadius}px ${token.borderRadius}px` : token.borderRadius }}\n className={ext ? `lang-${ext}` : undefined}\n >{String(content)}</pre>\n </div>\n );\n }\n return null;\n }\n\n if (isRead && hasOutput) {\n return <pre style={{ ...codePreStyle, background: token.colorFillSecondary }}>{formatOutput(step.output)}</pre>;\n }\n if (isShell && hasOutput) {\n return <pre style={{ ...codePreStyle, background: token.colorBgSpotlight, color: token.colorTextLightSolid }}>{formatOutput(step.output)}</pre>;\n }\n if (isSearch && hasOutput) {\n return <pre style={{ ...codePreStyle, background: token.colorFillSecondary }}>{formatOutput(step.output)}</pre>;\n }\n\n if (hasDiff) { return <DiffView diff={step.metadata!.diff!} token={token} />; }\n if (hasOutput) {\n const isFailed = step.status === 'done' && step.success === false;\n const outputStr = formatOutput(step.output);\n if (isFailed) {\n return (\n <pre style={{ ...codePreStyle, background: token.colorErrorBg, color: token.colorError }}>\n {outputStr}\n </pre>\n );\n }\n return <UIMarkdownViewer content={outputStr} style={{ fontSize: 12 }} />;\n }\n return null;\n}\n\n// ---------- DiffView ----------\n\nfunction DiffView({ diff, token }: { diff: string; token: ReturnType<typeof useToken>['token'] }) {\n const lines = diff.split('\\n');\n return (\n <pre style={{\n margin: 0,\n padding: '8px 10px',\n fontSize: 12,\n lineHeight: 1.5,\n borderRadius: token.borderRadius,\n overflow: 'auto',\n maxHeight: 300,\n background: token.colorFillSecondary,\n whiteSpace: 'pre',\n }}>\n {lines.map((line, i) => {\n const color =\n line.startsWith('+') && !line.startsWith('+++') ? token.colorSuccess :\n line.startsWith('-') && !line.startsWith('---') ? token.colorError :\n line.startsWith('@@') ? token.colorInfo :\n undefined;\n return (\n <span key={i} style={color ? { color } : undefined}>{line}{'\\n'}</span>\n );\n })}\n </pre>\n );\n}\n\n// ---------- CopyPath ----------\n\nfunction CopyPath({ path, label, token }: { path: string; label: string; token: ReturnType<typeof useToken>['token'] }) {\n const [copied, setCopied] = React.useState(false);\n const handleClick = (e: React.MouseEvent) => {\n e.stopPropagation();\n void navigator.clipboard.writeText(path).then(() => {\n setCopied(true);\n setTimeout(() => setCopied(false), 1500);\n });\n };\n return (\n <span\n onClick={handleClick}\n title={path}\n style={{ cursor: 'pointer', color: copied ? token.colorSuccess : token.colorTextSecondary, fontFamily: 'monospace', fontSize: 12 }}\n >\n {label}{copied ? ' ✓' : ''}\n </span>\n );\n}\n\n// ---------- FileChangesBlock ----------\n\ninterface FileChangesBlockProps {\n sessionId: string;\n runId: string;\n fileChanges: FileChangeSummary[];\n token: ReturnType<typeof useToken>['token'];\n}\n\nfunction FileChangesBlock({ sessionId, runId, fileChanges, token }: FileChangesBlockProps) {\n const [dismissed, setDismissed] = React.useState<Set<string>>(new Set());\n const rollback = useMutateData<{ runId?: string; changeIds?: string[] }, { rolledBack: number; skipped: number; conflicts: unknown[] }>(\n `/v1/plugins/agents/sessions/${sessionId}/rollback`,\n 'POST'\n );\n const approve = useMutateData<{ runId?: string; changeIds?: string[] }, { approved: number }>(\n `/v1/plugins/agents/sessions/${sessionId}/approve`,\n 'POST'\n );\n\n const visible = fileChanges.filter((c) => !dismissed.has(c.changeId) && !c.approved);\n if (visible.length === 0) { return null; }\n\n const allApproved = visible.every((c) => c.approved);\n\n const handleRollback = () => {\n UIModalConfirm({\n title: 'Rollback changes?',\n content: `This will revert ${visible.length} ${pluralFiles(visible.length)} to the state before the agent run.`,\n okText: 'Rollback',\n okButtonProps: { danger: true },\n cancelText: 'Cancel',\n onOk: async () => {\n try {\n const result = await rollback.mutateAsync({ runId });\n if (result.conflicts?.length) {\n console.warn(`Rolled back: ${result.rolledBack}, skipped due to conflicts: ${result.skipped}`);\n }\n setDismissed(new Set(visible.map((c) => c.changeId)));\n } catch {\n console.error('Failed to rollback changes');\n }\n },\n });\n };\n\n const handleApprove = async () => {\n try {\n await approve.mutateAsync({ runId });\n setDismissed(new Set(visible.map((c) => c.changeId)));\n } catch {\n console.error('Failed to approve changes');\n }\n };\n\n return (\n <div style={{ display: 'flex', alignItems: 'flex-start', gap: 8 }}>\n <StepDot color={token.colorSuccess} />\n <div style={{ flex: 1, minWidth: 0 }}>\n <div style={{ display: 'flex', alignItems: 'center', justifyContent: 'space-between', marginBottom: 4 }}>\n <UITypographyText style={{ fontSize: 13, fontWeight: 500 }}>\n {visible.length} {pluralFiles(visible.length)} changed\n </UITypographyText>\n {!allApproved && (\n <UIFlex gap={4}>\n <button\n onClick={handleApprove}\n disabled={approve.isLoading || rollback.isLoading}\n title=\"Approve all changes\"\n style={{\n background: token.colorSuccessBg,\n border: `1px solid ${token.colorSuccessBorder}`,\n color: token.colorSuccess,\n borderRadius: token.borderRadius,\n padding: '2px 8px',\n fontSize: 12,\n cursor: 'pointer',\n }}\n >✓</button>\n <button\n onClick={handleRollback}\n disabled={rollback.isLoading || approve.isLoading}\n title=\"Rollback all changes\"\n style={{\n background: token.colorErrorBg,\n border: `1px solid ${token.colorErrorBorder}`,\n color: token.colorError,\n borderRadius: token.borderRadius,\n padding: '2px 8px',\n fontSize: 12,\n cursor: 'pointer',\n }}\n >✕</button>\n </UIFlex>\n )}\n </div>\n <ul style={{ listStyle: 'none', margin: 0, padding: 0, display: 'flex', flexDirection: 'column', gap: 2 }}>\n {visible.map((change) => (\n <FileChangeRow\n key={change.changeId}\n change={change}\n sessionId={sessionId}\n onDismiss={() => setDismissed((prev) => new Set([...prev, change.changeId]))}\n token={token}\n />\n ))}\n </ul>\n </div>\n </div>\n );\n}\n\n// ---------- FileChangeRow ----------\n\ninterface FileChangeRowProps {\n change: FileChangeSummary;\n sessionId: string;\n onDismiss: () => void;\n token: ReturnType<typeof useToken>['token'];\n}\n\nfunction FileChangeRow({ change, sessionId, onDismiss, token }: FileChangeRowProps) {\n const [open, setOpen] = React.useState(false);\n const rollback = useMutateData<{ changeIds: string[] }, { rolledBack: number; skipped: number; conflicts: unknown[] }>(\n `/v1/plugins/agents/sessions/${sessionId}/rollback`,\n 'POST'\n );\n const approve = useMutateData<{ changeIds: string[] }, { approved: number }>(\n `/v1/plugins/agents/sessions/${sessionId}/approve`,\n 'POST'\n );\n\n const diffUrl = open ? `/v1/plugins/agents/sessions/${sessionId}/changes/${encodeURIComponent(change.changeId)}/diff` : '';\n const { data: diffData, isLoading: diffLoading, isError: diffError } = useData<{ diff: string }>(diffUrl, { enabled: open });\n\n const handleRollback = (e: React.MouseEvent) => {\n e.stopPropagation();\n UIModalConfirm({\n title: 'Rollback file?',\n content: change.filePath,\n okText: 'Rollback',\n okButtonProps: { danger: true },\n cancelText: 'Cancel',\n onOk: async () => {\n try {\n await rollback.mutateAsync({ changeIds: [change.changeId] });\n onDismiss();\n } catch {\n console.error('Failed to rollback file');\n }\n },\n });\n };\n\n const handleApprove = (e: React.MouseEvent) => {\n e.stopPropagation();\n approve.mutateAsync({ changeIds: [change.changeId] }).then(onDismiss).catch(() => {\n console.error('Failed to approve file');\n });\n };\n\n const opTag = change.isNew\n ? <UITag color=\"success\">new</UITag>\n : change.operation === 'delete'\n ? <UITag color=\"error\">del</UITag>\n : <UITag color=\"blue\">mod</UITag>;\n\n return (\n <li>\n <div\n onClick={() => setOpen((v) => !v)}\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: 6,\n fontSize: 12,\n cursor: 'pointer',\n padding: '2px 4px',\n borderRadius: token.borderRadiusSM,\n background: open ? token.colorFillSecondary : 'transparent',\n }}\n >\n {opTag}\n <span style={{ flex: 1, fontFamily: 'monospace', color: token.colorTextSecondary, overflow: 'hidden', textOverflow: 'ellipsis', whiteSpace: 'nowrap' }}>\n {change.filePath.split('/').pop() ?? change.filePath}\n </span>\n <span style={{ color: token.colorTextTertiary, fontFamily: 'monospace', fontSize: 11 }}>\n {change.filePath.includes('/') ? change.filePath.slice(0, change.filePath.lastIndexOf('/')) : ''}\n </span>\n {!change.approved && (\n <div style={{ display: 'flex', gap: 4 }} onClick={(e: React.MouseEvent) => e.stopPropagation()}>\n <button\n onClick={handleApprove}\n disabled={approve.isLoading}\n title=\"Approve\"\n style={{ background: 'none', border: 'none', cursor: 'pointer', color: token.colorSuccess, fontSize: 13, padding: '0 2px' }}\n >✓</button>\n <button\n onClick={handleRollback}\n disabled={rollback.isLoading}\n title=\"Rollback\"\n style={{ background: 'none', border: 'none', cursor: 'pointer', color: token.colorError, fontSize: 13, padding: '0 2px' }}\n >✕</button>\n </div>\n )}\n </div>\n {open && (\n <div style={{ marginTop: 4, marginLeft: 4 }}>\n {diffLoading && <UISpin size=\"small\" />}\n {diffData?.diff && <DiffView diff={diffData.diff} token={token} />}\n {diffError && <span style={{ color: token.colorError, fontSize: 12 }}>Failed to load diff</span>}\n </div>\n )}\n </li>\n );\n}\n\n// ---------- TodoView ----------\n\ninterface TodoItemData {\n id: string;\n description: string;\n status: 'pending' | 'in-progress' | 'completed' | 'blocked';\n priority: 'low' | 'medium' | 'high';\n}\n\ninterface TodoListData {\n sessionId: string;\n items: TodoItemData[];\n}\n\nconst TODO_STATUS_ICON: Record<string, string> = {\n 'completed': '✓',\n 'in-progress': '●',\n 'blocked': '✕',\n 'pending': '○',\n};\n\nfunction TodoView({ todoList, token }: { todoList?: TodoListData; token: ReturnType<typeof useToken>['token'] }) {\n if (!todoList?.items?.length) { return null; }\n const completed = todoList.items.filter((i) => i.status === 'completed').length;\n return (\n <div style={{\n marginTop: 6,\n background: token.colorFillTertiary,\n borderRadius: token.borderRadius,\n padding: '8px 10px',\n }}>\n <div style={{ fontSize: 11, color: token.colorTextTertiary, marginBottom: 6, fontWeight: 500 }}>\n {completed}/{todoList.items.length}\n </div>\n <ul style={{ listStyle: 'none', margin: 0, padding: 0, display: 'flex', flexDirection: 'column', gap: 2 }}>\n {todoList.items.map((item) => (\n <li key={item.id} style={{ display: 'flex', alignItems: 'center', gap: 8, fontSize: 13, lineHeight: 1.5, padding: '2px 0' }}>\n <span style={{ fontSize: 12, flexShrink: 0, width: 14, textAlign: 'center', lineHeight: 1 }}>\n {TODO_STATUS_ICON[item.status] ?? '○'}\n </span>\n {item.status === 'completed' ? (\n <UITypographyText type=\"success\" style={{ flex: 1, minWidth: 0, textDecoration: 'line-through' }}>{item.description}</UITypographyText>\n ) : item.status === 'pending' || item.status === 'blocked' ? (\n <UITypographyText type=\"secondary\" style={{ flex: 1, minWidth: 0 }}>{item.description}</UITypographyText>\n ) : (\n <UITypographyText style={{ flex: 1, minWidth: 0 }}>{item.description}</UITypographyText>\n )}\n {item.priority !== 'medium' && (\n <UITypographyText type=\"secondary\" style={{ fontSize: 11, flexShrink: 0 }}>{item.priority}</UITypographyText>\n )}\n </li>\n ))}\n </ul>\n </div>\n );\n}\n\n// ---------- Helpers ----------\n\ninterface ToolMeta {\n summary?: string;\n filePath?: string;\n badge?: string;\n}\n\nfunction getToolMeta(step: import('@kb-labs/agent-contracts').ToolUseStep): ToolMeta {\n const input = step.input as Record<string, unknown> | null | undefined;\n if (!input) { return {}; }\n\n const toolLower = step.toolName.toLowerCase();\n const isRead = toolLower.includes('read');\n const isWrite = toolLower.includes('write') || toolLower.includes('patch') || toolLower.includes('edit');\n\n const path = (input.path ?? input.filePath ?? input.file_path ?? input.file) as string | undefined;\n if (path) {\n const fileName = String(path).split('/').pop() ?? String(path);\n let badge: string | undefined;\n if (isRead) {\n const offset = input.offset ?? input.startLine ?? input.start_line;\n const limit = input.limit ?? input.endLine ?? input.end_line;\n if (offset !== undefined && limit !== undefined) { badge = `${offset}-${Number(offset) + Number(limit)}`; }\n else if (limit !== undefined) { badge = `${limit} lines`; }\n }\n return { summary: fileName, filePath: String(path), badge };\n }\n\n const query = (input.query ?? input.text ?? input.pattern ?? input.search) as string | undefined;\n if (query) { return { summary: String(query).slice(0, 100) }; }\n\n const command = (input.command ?? input.cmd) as string | undefined;\n if (command) { return { summary: String(command).slice(0, 100) }; }\n\n if (isWrite) { return {}; }\n\n const content = (input.content ?? input.message) as string | undefined;\n if (content) { return { summary: String(content).slice(0, 100) }; }\n\n return {};\n}\n\nfunction formatToolName(name: string): string {\n const normalized = name.trim().toLowerCase().replace(/[_-]/g, ' ');\n if (normalized.includes('fs read') || normalized.includes('read file')) { return 'Read'; }\n if (normalized.includes('fs write') || normalized.includes('write file')) { return 'Write'; }\n if (normalized.includes('fs patch') || normalized.includes('patch file')) { return 'Edit'; }\n if (normalized.includes('fs edit') || normalized.includes('edit file')) { return 'Edit'; }\n if (normalized.includes('fs delete') || normalized.includes('delete file') || normalized.includes('remove file')) { return 'Delete'; }\n if (normalized.includes('fs list') || normalized.includes('list files') || normalized.includes('glob')) { return 'Glob'; }\n if (normalized.includes('grep') || normalized.includes('search content')) { return 'Grep'; }\n if (normalized.includes('bash') || normalized.includes('exec') || normalized.includes('shell') || normalized.includes('run command')) { return 'Bash'; }\n if (normalized.includes('rag') || normalized.includes('mind')) { return 'Mind'; }\n if (normalized.includes('todo')) { return 'TodoWrite'; }\n\n const colonIdx = name.indexOf(':');\n const base = colonIdx >= 0 ? name.slice(colonIdx + 1) : name;\n return base\n .replace(/[_-]/g, ' ')\n .replace(/([a-z])([A-Z])/g, '$1 $2')\n .replace(/\\b\\w/g, (c) => c.toUpperCase());\n}\n\nfunction isNoisyThinking(content: string): boolean {\n const t = content.trim().toLowerCase();\n if (t === '[executing tools...]' || t === '[thinking...]' || t === '[planning...]' || t === '[analyzing...]') { return true; }\n if (t === 'analyzing context and choosing the next step.') { return true; }\n if (t.startsWith('checking facts with tool:') || t.startsWith('running step with tool:') || t.startsWith('running the next step')) { return true; }\n if (t === 'done.' || t === 'ok.' || t === 'done' || t === 'ok') { return true; }\n return false;\n}\n\nfunction isInternalProgressText(content: string): boolean {\n return isNoisyThinking(content);\n}\n\nfunction pluralFiles(n: number): string {\n return n === 1 ? 'file' : 'files';\n}\n\nfunction formatOutput(output: unknown): string {\n if (typeof output === 'string') { return output.slice(0, 2000); }\n try { return JSON.stringify(output, null, 2).slice(0, 2000); }\n catch { return String(output).slice(0, 2000); }\n}\n","/**\n * Agent chat page — Module Federation widget\n * Turn-based agent UI with snapshot-based architecture\n */\n\nimport React, { useState, useCallback, useEffect } from 'react';\nimport { useSearchParams } from 'react-router-dom';\nimport { useData, useMutateData, UIInputTextArea, UIButton, UISpace, UIMessage, UICard, UISelect, UISwitch, UITypographyText, UIIcon, useUITheme } from '@kb-labs/sdk/studio';\nimport { useAgentWebSocket, buildAgentWsUrl } from '../hooks/use-agent-websocket';\nimport { SessionSelector } from '../components/SessionSelector';\nimport { ConversationView } from '../components/ConversationView';\nimport type { AgentSessionInfo, Turn, AgentResponseMode } from '@kb-labs/agent-contracts';\n\n\ntype RunStatus = 'idle' | 'running' | 'completed' | 'failed' | 'stopped';\n\ninterface RunRequest {\n task: string;\n agentId: string;\n sessionId?: string;\n tier: 'small' | 'medium' | 'large';\n enableEscalation: boolean;\n responseMode: AgentResponseMode;\n}\n\ninterface RunResponse {\n runId: string;\n sessionId: string;\n}\n\ninterface StopRequest {\n reason?: string;\n}\n\nfunction compareTurns(a: Turn, b: Turn): number {\n if (a.sequence !== b.sequence) { return a.sequence - b.sequence; }\n if (a.type !== b.type) {\n if (a.type === 'user') { return -1; }\n if (b.type === 'user') { return 1; }\n }\n return a.startedAt.localeCompare(b.startedAt);\n}\n\nfunction AgentsPage() {\n const { token } = useUITheme();\n const scrollContainerRef = React.useRef<HTMLDivElement>(null);\n\n const [searchParams, setSearchParams] = useSearchParams();\n const [currentSessionId, setCurrentSessionId] = useState<string | null>(\n () => searchParams.get('session')\n );\n const [loadedSessionId, setLoadedSessionId] = useState<string | null>(\n () => searchParams.get('session')\n );\n\n const [task, setTask] = useState('');\n const [currentRunId, setCurrentRunId] = useState<string | null>(null);\n const [runStatus, setRunStatus] = useState<RunStatus>('idle');\n const [optimisticUserTurns, setOptimisticUserTurns] = useState<Turn[]>([]);\n const [responseMode, setResponseMode] = useState<AgentResponseMode>('auto');\n const [tier, setTier] = useState<'small' | 'medium' | 'large'>('medium');\n const [enableEscalation, setEnableEscalation] = useState(true);\n const [agentMode, setAgentMode] = useState<'execute' | 'plan'>('execute');\n const [inputFocused, setInputFocused] = useState(false);\n\n const agentId = 'mind-assistant';\n\n const wsUrl = currentSessionId ? buildAgentWsUrl(currentSessionId) : null;\n\n const startRunMutation = useMutateData<RunRequest, RunResponse>('/v1/plugins/agents/run', 'POST');\n const stopMutation = useMutateData<StopRequest, unknown>(\n currentRunId ? `/v1/plugins/agents/run/${currentRunId}/stop` : '/v1/plugins/agents/run/noop/stop',\n 'POST'\n );\n\n const sessionTurnsUrl = currentSessionId ? `/v1/plugins/agents/sessions/${currentSessionId}/turns` : '';\n const { data: sessionTurnsData, isFetching: turnsFetching, refetch: refetchTurns } = useData<{ turns: Turn[]; total: number }>(\n sessionTurnsUrl,\n { enabled: !!currentSessionId },\n );\n\n useEffect(() => {\n if (currentSessionId && sessionTurnsData && !turnsFetching) {\n setLoadedSessionId(currentSessionId);\n }\n }, [currentSessionId, sessionTurnsData, turnsFetching]);\n\n const ws = useAgentWebSocket({\n url: wsUrl,\n onComplete: (success, summary) => {\n setRunStatus(success ? 'completed' : 'failed');\n void refetchTurns();\n console.log('[AgentsPage] Run completed:', summary);\n },\n onTurnsChanged: () => {\n setOptimisticUserTurns([]);\n },\n onError: (error) => {\n console.error('[AgentsPage] WebSocket error:', error);\n UIMessage.error(`Connection error: ${error.message}`);\n },\n });\n\n const handleSessionChange = useCallback((sessionId: string, _session: AgentSessionInfo) => {\n setCurrentSessionId(sessionId);\n setLoadedSessionId(null);\n setSearchParams({ session: sessionId }, { replace: true });\n setCurrentRunId(null);\n setRunStatus('idle');\n setOptimisticUserTurns([]);\n ws.clearTurns();\n }, [ws, setSearchParams]);\n\n const handleNewChat = useCallback(() => {\n setCurrentSessionId(null);\n setLoadedSessionId(null);\n setSearchParams({}, { replace: true });\n setCurrentRunId(null);\n setRunStatus('idle');\n setOptimisticUserTurns([]);\n ws.clearTurns();\n }, [ws, setSearchParams]);\n\n const handleStart = useCallback(async () => {\n if (!task.trim()) { return; }\n\n const userMessage = task.trim();\n setTask('');\n setRunStatus('running');\n\n const optimisticTurn: Turn = {\n id: `optimistic-user-${Date.now()}`,\n type: 'user',\n sequence: 9999,\n startedAt: new Date().toISOString(),\n completedAt: new Date().toISOString(),\n status: 'completed',\n steps: [{ type: 'text', id: 'opt-1', timestamp: new Date().toISOString(), content: userMessage, role: 'user' }],\n metadata: { agentId: 'user' },\n };\n setOptimisticUserTurns((prev) => [...prev, optimisticTurn]);\n\n try {\n const response = await startRunMutation.mutateAsync({\n task: userMessage,\n agentId,\n sessionId: currentSessionId ?? undefined,\n tier,\n enableEscalation,\n responseMode,\n });\n\n if (!currentSessionId) {\n setCurrentSessionId(response.sessionId);\n setLoadedSessionId(response.sessionId);\n setSearchParams({ session: response.sessionId }, { replace: true });\n }\n\n setCurrentRunId(response.runId);\n } catch (error) {\n setOptimisticUserTurns((prev) => prev.filter((t) => t.id !== optimisticTurn.id));\n setRunStatus('failed');\n UIMessage.error(`Failed to start: ${error instanceof Error ? error.message : String(error)}`);\n }\n }, [\n task,\n agentId,\n currentSessionId,\n tier,\n enableEscalation,\n responseMode,\n setSearchParams,\n startRunMutation,\n ]);\n\n const handleStop = useCallback(async () => {\n if (!currentRunId) { return; }\n\n try {\n await stopMutation.mutateAsync({ reason: 'Stopped by user' });\n setRunStatus('stopped');\n UIMessage.info('Stopped');\n } catch (error) {\n UIMessage.error(`Failed to stop: ${error instanceof Error ? error.message : String(error)}`);\n }\n }, [currentRunId, stopMutation]);\n\n const handleKeyDown = (e: React.KeyboardEvent) => {\n if (e.key === 'Enter' && !e.shiftKey && runStatus !== 'running' && !startRunMutation.isLoading) {\n e.preventDefault();\n void handleStart();\n }\n };\n\n const isRunning = runStatus === 'running' || startRunMutation.isLoading;\n const isSwitchingSession = currentSessionId !== null && currentSessionId !== loadedSessionId;\n\n const turns = (() => {\n if (isSwitchingSession) { return []; }\n\n const restTurns = sessionTurnsData?.turns ?? [];\n const wsTurns = ws.turns;\n\n const merged = new Map<string, Turn>();\n if (wsTurns.length === 0) {\n for (const t of restTurns) { merged.set(t.id, t); }\n } else {\n for (const t of restTurns) { merged.set(t.id, t); }\n for (const t of wsTurns) { merged.set(t.id, t); }\n }\n\n const serverUserTexts = new Set(\n [...merged.values()]\n .filter((t) => t.type === 'user')\n .flatMap((t) => t.steps.filter((s) => s.type === 'text').map((s) => s.content?.trim()))\n .filter(Boolean)\n );\n for (const t of optimisticUserTurns) {\n const text = t.steps.find((s) => s.type === 'text')?.content?.trim();\n if (text && !serverUserTexts.has(text)) { merged.set(t.id, t); }\n }\n\n return [...merged.values()].sort(compareTurns);\n })();\n\n const turnsWithThinkingLoader: Turn[] = (() => {\n if (!isRunning) { return turns; }\n\n const hasActiveAssistant = turns.some((t) => t.type === 'assistant' && t.status === 'streaming');\n if (hasActiveAssistant) { return turns; }\n\n const lastUserTurn = [...turns].reverse().find((t) => t.type === 'user');\n if (!lastUserTurn) { return turns; }\n\n const hasCompletedAssistantAfterUser = turns.some(\n (t) => t.type === 'assistant' && t.status === 'completed' && t.sequence > lastUserTurn.sequence\n );\n if (hasCompletedAssistantAfterUser) { return turns; }\n\n const loaderTurn: Turn = {\n id: `thinking-loader-${lastUserTurn.id}`,\n type: 'assistant',\n sequence: lastUserTurn.sequence + 0.1,\n startedAt: new Date().toISOString(),\n completedAt: null,\n status: 'streaming',\n steps: [],\n metadata: { agentId: 'assistant-loader' },\n };\n\n return [...turns, loaderTurn].sort(compareTurns);\n })();\n\n const isLoading = isSwitchingSession || (turnsFetching && turns.length === 0 && !!currentSessionId);\n\n return (\n <div style={{ padding: 16, height: '100%' }}>\n <UICard\n title={\n <UISpace>\n <UIIcon name=\"RobotOutlined\" />\n <span>Agent</span>\n </UISpace>\n }\n extra={\n <SessionSelector\n currentSessionId={currentSessionId}\n onSessionChange={handleSessionChange}\n onNewChat={handleNewChat}\n />\n }\n style={{\n height: '100%',\n display: 'flex',\n flexDirection: 'column',\n }}\n styles={{\n body: {\n flex: 1,\n display: 'flex',\n flexDirection: 'column',\n padding: 0,\n overflow: 'hidden',\n },\n }}\n >\n <div\n ref={scrollContainerRef}\n style={{ flex: 1, overflow: 'auto' }}\n >\n <ConversationView\n turns={turnsWithThinkingLoader}\n isLoading={isLoading}\n sessionId={currentSessionId}\n />\n </div>\n\n <div\n style={{\n borderTop: `1px solid ${token.colorBorderSecondary}`,\n padding: '12px 16px',\n background: token.colorBgContainer,\n display: 'flex',\n justifyContent: 'center',\n }}\n >\n <div\n onFocus={() => setInputFocused(true)}\n onBlur={() => setInputFocused(false)}\n style={{\n width: '65%',\n maxWidth: 780,\n border: `1px solid ${\n inputFocused\n ? (agentMode === 'execute' ? token.colorError : token.colorPrimary)\n : (agentMode === 'plan' ? token.colorPrimary : token.colorBorder)\n }`,\n borderRadius: token.borderRadiusLG,\n background: token.colorBgContainer,\n boxShadow: inputFocused\n ? `0 0 0 2px ${agentMode === 'execute' ? token.colorErrorBg : token.colorPrimaryBg}`\n : 'none',\n transition: 'border-color 0.2s, box-shadow 0.2s',\n overflow: 'hidden',\n }}\n >\n <UIInputTextArea\n value={task}\n onChange={(e) => setTask(e.target.value)}\n onKeyDown={handleKeyDown}\n placeholder=\"Message...\"\n autoSize={{ minRows: 2, maxRows: 8 }}\n disabled={isRunning}\n variant=\"borderless\"\n style={{ resize: 'none', padding: '10px 12px 4px', border: 'none', boxShadow: 'none', outline: 'none' }}\n />\n <div style={{ display: 'flex', alignItems: 'center', justifyContent: 'space-between', padding: '6px 8px 8px' }}>\n <UISpace size={6}>\n <UISelect\n value={agentMode}\n onChange={(v) => setAgentMode(v as 'execute' | 'plan')}\n disabled={isRunning}\n size=\"small\"\n variant=\"borderless\"\n style={{ width: 110 }}\n options={[\n { value: 'execute', label: 'Execute' },\n { value: 'plan', label: 'Plan' },\n ]}\n />\n <UISelect\n value={responseMode}\n onChange={(v) => setResponseMode(v as AgentResponseMode)}\n disabled={isRunning}\n size=\"small\"\n variant=\"borderless\"\n style={{ width: 80 }}\n options={[\n { value: 'auto', label: 'Auto' },\n { value: 'brief', label: 'Brief' },\n { value: 'deep', label: 'Deep' },\n ]}\n />\n <UISelect\n value={tier}\n onChange={(v) => setTier(v as 'small' | 'medium' | 'large')}\n disabled={isRunning}\n size=\"small\"\n variant=\"borderless\"\n style={{ width: 100 }}\n options={[\n { value: 'small', label: 'Small' },\n { value: 'medium', label: 'Medium' },\n { value: 'large', label: 'Large' },\n ]}\n />\n <UISpace size={4} align=\"center\">\n <UISwitch\n checked={enableEscalation}\n onChange={setEnableEscalation}\n disabled={isRunning || tier === 'large'}\n size=\"small\"\n />\n <UITypographyText type=\"secondary\" style={{ fontSize: 12 }}>\n Auto escalate\n </UITypographyText>\n </UISpace>\n </UISpace>\n <div>\n {isRunning ? (\n <UIButton\n danger\n size=\"small\"\n icon={stopMutation.isLoading ? <UIIcon name=\"LoadingOutlined\" /> : <UIIcon name=\"StopOutlined\" />}\n onClick={handleStop}\n disabled={stopMutation.isLoading}\n >\n Stop\n </UIButton>\n ) : (\n <UIButton\n variant=\"primary\"\n size=\"small\"\n icon={startRunMutation.isLoading ? <UIIcon name=\"LoadingOutlined\" /> : <UIIcon name=\"SendOutlined\" />}\n onClick={handleStart}\n disabled={!task.trim() || startRunMutation.isLoading}\n >\n Send\n </UIButton>\n )}\n </div>\n </div>\n </div>\n </div>\n </UICard>\n </div>\n );\n}\nexport default AgentsPage;\n","/**\n * React hook for WebSocket connection to agent turn snapshots.\n * Self-contained copy for plugin widget use — no studio-data-client dependency.\n */\n\nimport { useState, useEffect, useCallback, useRef } from 'react';\nimport type { ServerMessage, Turn } from '@kb-labs/agent-contracts';\n\nexport interface UseAgentWebSocketOptions {\n url: string | null;\n autoReconnect?: boolean;\n reconnectDelay?: number;\n maxReconnectAttempts?: number;\n onComplete?: (success: boolean, summary: string) => void;\n onTurnsChanged?: () => void;\n onError?: (error: { code: string; message: string }) => void;\n}\n\nexport type ConnectionStatus = 'disconnected' | 'connecting' | 'connected' | 'reconnecting' | 'error';\n\nexport interface UseAgentWebSocketReturn {\n status: ConnectionStatus;\n isConnected: boolean;\n turns: Turn[];\n error: { code: string; message: string } | null;\n send: (message: unknown) => void;\n clearTurns: () => void;\n}\n\nexport function useAgentWebSocket(options: UseAgentWebSocketOptions): UseAgentWebSocketReturn {\n const {\n url,\n autoReconnect = true,\n reconnectDelay = 1000,\n maxReconnectAttempts = 5,\n onComplete,\n onTurnsChanged,\n onError,\n } = options;\n\n const [status, setStatus] = useState<ConnectionStatus>('disconnected');\n const [turns, setTurns] = useState<Turn[]>([]);\n const [error, setError] = useState<{ code: string; message: string } | null>(null);\n\n const wsRef = useRef<WebSocket | null>(null);\n const reconnectAttemptsRef = useRef(0);\n const reconnectTimeoutRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n const shouldReconnectRef = useRef(false);\n const isCompletedRef = useRef(false);\n\n const onCompleteRef = useRef(onComplete);\n const onErrorRef = useRef(onError);\n const onTurnsChangedRef = useRef(onTurnsChanged);\n useEffect(() => { onCompleteRef.current = onComplete; }, [onComplete]);\n useEffect(() => { onErrorRef.current = onError; }, [onError]);\n useEffect(() => { onTurnsChangedRef.current = onTurnsChanged; }, [onTurnsChanged]);\n\n const closeSocket = useCallback(() => {\n if (reconnectTimeoutRef.current !== null) {\n clearTimeout(reconnectTimeoutRef.current);\n reconnectTimeoutRef.current = null;\n }\n if (wsRef.current) {\n wsRef.current.onclose = null;\n wsRef.current.onerror = null;\n wsRef.current.onmessage = null;\n wsRef.current.close();\n wsRef.current = null;\n }\n }, []);\n\n const openSocket = useCallback((wsUrl: string) => {\n closeSocket();\n setStatus('connecting');\n reconnectAttemptsRef.current = 0;\n\n const ws = new WebSocket(wsUrl);\n wsRef.current = ws;\n\n ws.onopen = () => {\n // status set by connection:ready message\n };\n\n ws.onmessage = (event) => {\n try {\n const data = JSON.parse(event.data as string) as ServerMessage;\n\n switch (data.type) {\n case 'conversation:snapshot': {\n const { completedTurns, activeTurns } = data.payload;\n const incoming = [...completedTurns, ...activeTurns].sort((a, b) => a.sequence - b.sequence);\n isCompletedRef.current = false;\n setTurns((prev) => {\n if (prev.length === 0) { return incoming; }\n const merged = new Map<string, Turn>();\n for (const t of incoming) { merged.set(t.id, t); }\n for (const t of prev) {\n const snap = merged.get(t.id);\n if (snap && t.status === 'streaming' && snap.status === 'streaming' && t.steps.length > snap.steps.length) {\n merged.set(t.id, t);\n }\n }\n return [...merged.values()].sort((a, b) => a.sequence - b.sequence);\n });\n onTurnsChangedRef.current?.();\n break;\n }\n\n case 'turn:snapshot': {\n const { turn } = data.payload;\n isCompletedRef.current = false;\n setTurns((prev) => {\n const updated = [...prev];\n const idx = updated.findIndex((t) => t.id === turn.id);\n if (idx >= 0) {\n const existing = updated[idx]!;\n if (existing.status === 'streaming' && turn.status === 'streaming' && turn.steps.length < existing.steps.length) {\n return prev;\n }\n updated[idx] = turn;\n } else {\n const insertAt = updated.findIndex((t) => t.sequence > turn.sequence);\n if (insertAt >= 0) { updated.splice(insertAt, 0, turn); }\n else { updated.push(turn); }\n }\n return updated;\n });\n onTurnsChangedRef.current?.();\n break;\n }\n\n case 'connection:ready': {\n reconnectAttemptsRef.current = 0;\n setStatus('connected');\n break;\n }\n\n case 'run:completed': {\n const { success, summary } = data.payload;\n isCompletedRef.current = true;\n onCompleteRef.current?.(success, summary);\n break;\n }\n\n case 'error': {\n const { code, message } = data.payload;\n setError({ code, message });\n onErrorRef.current?.({ code, message });\n break;\n }\n }\n } catch (err) {\n console.error('[useAgentWebSocket] Failed to parse message:', err);\n }\n };\n\n ws.onerror = () => {\n setStatus('error');\n };\n\n ws.onclose = (event) => {\n if (\n shouldReconnectRef.current &&\n !isCompletedRef.current &&\n autoReconnect &&\n reconnectAttemptsRef.current < maxReconnectAttempts\n ) {\n reconnectAttemptsRef.current++;\n setStatus('reconnecting');\n reconnectTimeoutRef.current = setTimeout(() => {\n if (shouldReconnectRef.current) {\n openSocket(wsUrl);\n }\n }, reconnectDelay * reconnectAttemptsRef.current);\n } else {\n setStatus('disconnected');\n }\n };\n }, [autoReconnect, closeSocket, maxReconnectAttempts, reconnectDelay]);\n\n const send = useCallback((msg: unknown) => {\n if (wsRef.current?.readyState === WebSocket.OPEN) {\n wsRef.current.send(JSON.stringify(msg));\n }\n }, []);\n\n const clearTurns = useCallback(() => {\n setTurns([]);\n setError(null);\n isCompletedRef.current = false;\n }, []);\n\n useEffect(() => {\n shouldReconnectRef.current = false;\n closeSocket();\n setTurns([]);\n setError(null);\n isCompletedRef.current = false;\n\n if (url) {\n shouldReconnectRef.current = true;\n openSocket(url);\n } else {\n setStatus('disconnected');\n }\n\n return () => {\n shouldReconnectRef.current = false;\n closeSocket();\n };\n }, [url]);\n\n return {\n status,\n isConnected: status === 'connected',\n turns,\n error,\n send,\n clearTurns,\n };\n}\n\n/**\n * Build WebSocket URL for an agent session from current window location.\n * Assumes REST API is at /api/v1 on same host.\n */\nexport function buildAgentWsUrl(sessionId: string): string {\n const protocol = window.location.protocol === 'https:' ? 'wss:' : 'ws:';\n const host = window.location.host;\n return `${protocol}//${host}/api/v1/ws/plugins/agents/session/${sessionId}`;\n}\n"],"names":["Symbol","l","Object","SessionSelector","param","currentSessionId","onSessionChange","onNewChat","token","useUITheme","_useData","sessionsData","isLoading","sessions","handleSessionSelect","sessionId","session","s","UISpace","UIIcon","UISelect","undefined","onChange","v","UISpin","UITypographyText","optionRender","option","date","diffMs","diffMins","diffHours","diffDays","Date","Math","now","UITooltip","UIButton","useToken","theme","ConversationView","turns","UIFlex","turn","TurnView","_reportStep_input","_turn_metadata","_turn_metadata1","text","isStreaming","textSteps","visibleTextSteps","_s_content","_s_content1","isNoisyThinking","hasInternalProgressText","reportStep","reportAnswer","visibleSteps","hasToolSteps","answerContent","fileChanges","runId","showFileChanges","timelineStyle","step","i","StepRow","ThinkingRow","StepDot","UIMarkdownViewer","_step_content","FileChangesBlock","color","pulse","_step_task","_step_task1","content","ToolRow","formatToolName","_step_metadata","_React_useState","open","setOpen","isPending","isDone","isError","isFailed","meta","getToolMeta","input","toolLower","isRead","isWrite","path","_ref","fileName","_String_split_pop","String","_ref2","_input_command","_input_content","badge","_ref4","_ref5","offset","limit","Number","query","command","hasDiff","hasOutput","hasWriteInput","isWriteTool","canExpand","dotColor","m","todoList","onClick","CopyPath","TodoView","ToolDetails","isShell","isSearch","codePreStyle","DiffView","filePath","ext","formatOutput","outputStr","diff","lines","line","label","copied","setCopied","e","navigator","setTimeout","Set","dismissed","setDismissed","rollback","useMutateData","approve","visible","c","allApproved","pluralFiles","console","UIModalConfirm","onOk","_result_conflicts","result","change","FileChangeRow","onDismiss","prev","_change_filePath_split_pop","diffUrl","encodeURIComponent","diffData","diffLoading","diffError","opTag","UITag","TODO_STATUS_ICON","_todoList_items","completed","item","_TODO_STATUS_ICON_item_status","name","normalized","colonIdx","base","t","n","output","JSON","compareTurns","a","b","protocol","host","options","url","autoReconnect","reconnectDelay","maxReconnectAttempts","onComplete","onTurnsChanged","onError","_useState","status","setStatus","_useState1","setTurns","_useState2","error","setError","wsRef","reconnectAttemptsRef","reconnectTimeoutRef","shouldReconnectRef","isCompletedRef","onCompleteRef","onErrorRef","onTurnsChangedRef","closeSocket","openSocket","send","clearTurns","scrollContainerRef","React","_useSearchParams","searchParams","setSearchParams","setCurrentSessionId","loadedSessionId","setLoadedSessionId","task","setTask","_useState3","currentRunId","setCurrentRunId","_useState4","runStatus","setRunStatus","_useState5","optimisticUserTurns","setOptimisticUserTurns","_useState6","responseMode","setResponseMode","_useState7","tier","setTier","_useState8","enableEscalation","setEnableEscalation","_useState9","agentMode","setAgentMode","_useState10","inputFocused","setInputFocused","agentId","wsUrl","window","startRunMutation","stopMutation","sessionTurnsUrl","sessionTurnsData","turnsFetching","refetchTurns","useEffect","ws","success","summary","UIMessage","useRef","useCallback","clearTimeout","WebSocket","event","data","_data_payload","completedTurns","activeTurns","incoming","merged","Map","_iteratorError","_iteratorError1","t1","snap","updated","idx","existing","insertAt","_data_payload1","_data_payload2","code","message","err","msg","_wsRef_current","handleSessionChange","_session","handleNewChat","handleStart","userMessage","optimisticTurn","response","_instanceof","Error","handleStop","isRunning","isSwitchingSession","restTurns","wsTurns","_iteratorError2","t2","serverUserTexts","Boolean","_iteratorError3","_t_steps_find_content","t3","turnsWithThinkingLoader","lastUserTurn","loaderTurn","UICard","onFocus","onBlur","UIInputTextArea","UISwitch"],"mappings":"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"}
|