site-operator 0.2.9 → 0.3.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -263,6 +263,8 @@
|
|
|
263
263
|
color: var(--agent-text-foreground, #09090b);
|
|
264
264
|
line-height: 1.5;
|
|
265
265
|
white-space: pre-wrap;
|
|
266
|
+
overflow-wrap: anywhere;
|
|
267
|
+
word-break: break-word;
|
|
266
268
|
}
|
|
267
269
|
|
|
268
270
|
:host([role="user"]) .bubble {
|
|
@@ -334,17 +336,27 @@
|
|
|
334
336
|
transform: scale(1);
|
|
335
337
|
}
|
|
336
338
|
}
|
|
337
|
-
|
|
339
|
+
.debug-id {
|
|
340
|
+
font-size: 0.65rem;
|
|
341
|
+
color: var(--agent-text-zinc-400, #a1a1aa);
|
|
342
|
+
margin-top: 0.25rem;
|
|
343
|
+
font-family: monospace;
|
|
344
|
+
opacity: 0.6;
|
|
345
|
+
user-select: all;
|
|
346
|
+
}
|
|
347
|
+
`,P=new class extends EventTarget{constructor(){super(),this.processor=t.v0_8.Data.createSignalA2uiMessageProcessor(),this.surfaceMessageRegistry=new Map,this.processedMessageIds=new Set}clearRegistry(){this.surfaceMessageRegistry.clear(),this.processedMessageIds.clear()}resolveValue(e,t){if(t){if(t.literalString!==void 0)return t.literalString;if(t.literalNumber!==void 0)return t.literalNumber;if(t.literalBoolean!==void 0)return t.literalBoolean;if(t.literalArray!==void 0)return t.literalArray;if(t.path){let n=this.processor.getSurfaces().get(e);if(n){let e=t.path.startsWith(`/`)?t.path.substring(1):t.path,r=n.dataModel.get(e);if(r!==void 0)return r}console.warn(`A2UIService: Could not resolve path ${t.path} for surface ${e}`)}}}mapMessage(e){if(e.role!==`assistant`||!e.toolCalls)throw Error(`Unsupported message type for A2UI processing`);let t=[];for(let n of e.toolCalls){if(n.type!==`function`||!n.function)continue;let e=n.function.name,r=this.parseToolArguments(n.function.arguments,e);if(r){if(e===`a2ui_begin_rendering`){let e=this.mapBeginRendering(r);e&&t.push({beginRendering:e});continue}if(e===`a2ui_update_surface`){let e=this.mapSurfaceUpdate(r);e&&t.push({surfaceUpdate:e});continue}if(e===`a2ui_update_data_model`){let e=this.mapDataModelUpdate(r);e&&t.push({dataModelUpdate:e});continue}if(e===`a2ui_delete_surface`){let e=this.mapDeleteSurface(r);e&&t.push({deleteSurface:e});continue}}}return t}parseToolArguments(e,t){if(e==null)return console.warn(`A2UIService: Missing arguments for ${t}`),null;if(typeof e==`string`){let n=e.trim();if(n===``)return{};try{return JSON.parse(n)}catch(e){return console.warn(`A2UIService: Failed to parse arguments for ${t}`,e),null}}return typeof e==`object`?e:(console.warn(`A2UIService: Unsupported arguments type for ${t}`),null)}mapBeginRendering(e){let t=this.getSurfaceId(e),n=this.getRootComponentId(e);if(!t||!n)return console.warn(`A2UIService: Missing surfaceId or root for begin rendering`),null;let r=typeof e.styles==`object`&&e.styles?e.styles:void 0;return r?{surfaceId:t,root:n,styles:r}:{surfaceId:t,root:n}}mapSurfaceUpdate(e){let t=this.getSurfaceId(e);return t?{surfaceId:t,components:Array.isArray(e.components)?e.components:[]}:(console.warn(`A2UIService: Missing surfaceId for surface update`),null)}mapDataModelUpdate(e){let t=this.getSurfaceId(e);if(!t)return console.warn(`A2UIService: Missing surfaceId for data model update`),null;let n={surfaceId:t,contents:this.normalizeValueMapArray(e.contents)};return typeof e.path==`string`&&(n.path=e.path),n}normalizeDataModelUpdate(e){let t=e.surfaceId||e.surface_id,n={surfaceId:t,contents:this.normalizeValueMapArray(e.contents)};return typeof e.path==`string`&&(n.path=e.path),console.log(`A2UIService: Normalized DataModelUpdate for ${t}`,n),n}mapDeleteSurface(e){let t=this.getSurfaceId(e);return t?{surfaceId:t}:(console.warn(`A2UIService: Missing surfaceId for delete surface`),null)}getSurfaceId(e){let t=e.surfaceId??e.surface_id;return typeof t==`string`&&t.trim()?t:typeof t==`number`?String(t):null}getRootComponentId(e){let t=e.root??e.rootComponentId??e.root_component??e.root_component_id;return typeof t==`string`&&t.trim()?t:typeof t==`number`?String(t):null}normalizeValueMapArray(e){return Array.isArray(e)?e.filter(e=>e&&typeof e==`object`&&(`key`in e||`path`in e)).map(e=>this.normalizeValueMapEntry(e)):[]}normalizeValueMapEntry(e){let t={...e};if(`value_string`in e&&(t.valueString=e.value_string),`valueString`in e&&(t.valueString=e.valueString),`value_number`in e&&(t.valueNumber=e.value_number),`valueNumber`in e&&(t.valueNumber=e.valueNumber),`value_boolean`in e&&(t.valueBoolean=e.value_boolean),`valueBoolean`in e&&(t.valueBoolean=e.valueBoolean),!(`key`in t)&&`path`in e&&(t.key=e.path),!(`valueString`in t)&&!(`valueNumber`in t)&&!(`valueBoolean`in t)&&`value`in e){let n=e.value;typeof n==`string`?t.valueString=n:typeof n==`number`?t.valueNumber=n:typeof n==`boolean`&&(t.valueBoolean=n)}let n=e.valueMap??e.value_map;n!==void 0&&(t.valueMap=this.normalizeValueMapArray(n)),delete t.value_string,delete t.value_number,delete t.value_boolean,delete t.value_map,typeof t.key!=`string`&&(t.key=String(t.key??``));let r=t.key;return r.startsWith(`/`)&&(t.key=r.substring(1)),t}isServerToClientMessage(e){if(!e||typeof e!=`object`)return!1;let t=e,n=t.content,r=typeof n==`object`&&!!n&&(`beginRendering`in n||`surfaceUpdate`in n);return`beginRendering`in t||`begin_rendering`in t||`surfaceUpdate`in t||`surface_update`in t||`dataModelUpdate`in t||`data_model_update`in t||`deleteSurface`in t||`delete_surface`in t||r}normalizeServerMessage(e){let t=e;if(`beginRendering`in t||`surfaceUpdate`in t||`dataModelUpdate`in t||`deleteSurface`in t){let t=e;return t.dataModelUpdate?{...t,dataModelUpdate:this.normalizeDataModelUpdate(t.dataModelUpdate)}:t}let n={},r=t.begin_rendering;if(r&&typeof r==`object`){let e=this.mapBeginRendering(r);e&&(n.beginRendering=e)}let i=t.surface_update;if(i&&typeof i==`object`){let e=this.mapSurfaceUpdate(i);e&&(n.surfaceUpdate=e)}let a=t.data_model_update;if(a&&typeof a==`object`){let e=this.mapDataModelUpdate(a);e&&(n.dataModelUpdate=e)}let o=t.delete_surface;if(o&&typeof o==`object`){let e=this.mapDeleteSurface(o);e&&(n.deleteSurface=e)}return n}processMessages(e){let t=[];for(let n of e){if(this.processedMessageIds.has(n.id)&&!n.isThinking)continue;if(this.isServerToClientMessage(n)){t.push(this.normalizeServerMessage(n));continue}if(n.role===`tool`&&typeof n.content==`string`){try{let e=JSON.parse(n.content);if(e.role===`activity`&&e.activity_type===`a2ui`&&e.content){let n=e.content;if(this.isServerToClientMessage(n))t.push(this.normalizeServerMessage(n));else{let e=Array.isArray(n)?n:[n];for(let n of e)this.isServerToClientMessage(n)&&t.push(this.normalizeServerMessage(n))}}}catch{}continue}let e=n;if(e.role===`activity`&&e.activityType===`a2ui`&&e.content){if(this.isServerToClientMessage(e.content))t.push(this.normalizeServerMessage(e.content));else{let n=e.content,r=Array.isArray(n)?n:[n];for(let e of r)this.isServerToClientMessage(e)&&t.push(this.normalizeServerMessage(e))}continue}n.role===`assistant`&&n.toolCalls&&t.push(...this.mapMessage(n))}if(t.length!==0&&t.length>0){console.log(`A2UIService: Processing mapped messages:`,JSON.stringify(t,null,2)),this.processor.processMessages(t);for(let t of e)this.processedMessageIds.add(t.id);this.dispatchEvent(new CustomEvent(`processor-update`))}}consolidateStream(e,t){let n=this.getA2UIPayloads(e);if(n.length===0)return[...t,e];let r=!1,i=!1;for(let t of n){let n=(t.beginRendering||t.surfaceUpdate||t.dataModelUpdate||t.deleteSurface)?.surfaceId;n&&(t.beginRendering||t.surfaceUpdate||t.dataModelUpdate?this.surfaceMessageRegistry.has(n)?r=!0:(this.surfaceMessageRegistry.set(n,e),i=!0):t.deleteSurface&&this.surfaceMessageRegistry.has(n)&&(r=!0))}return this.processor.processMessages(n),this.processedMessageIds.add(e.id),this.dispatchEvent(new CustomEvent(`processor-update`)),r&&!i?(console.log(`A2UIService: Consolidating update for surface(s). Discarding visual message ${e.id}`),t):[...t,e]}processMessage(e){this.processMessages([e])}processSnapshot(e){if(e.activityType===`a2ui`&&e.content){let t=e.content,n=Array.isArray(t)?t:[t],r=this.getSurfaceIdsFromEvent(e),i=e.replace===!1?[]:r.map(e=>({deleteSurface:{surfaceId:e}})),a=n.map(e=>{if(e.surfaceUpdate||e.surface_update){let t=e.surfaceUpdate||e.surface_update,n=t.surfaceId||t.surface_id,r=t.components||[];if(n&&r.length>0){let t=this.processor.getSurfaces().get(n)?.rootComponentId;if(!r.some(e=>e.id===t)||!t){let t=r[0].id;return console.warn(`A2UIService: Auto-fixing root mismatch for surface ${n}. Mapeando root a ${t}`),[{beginRendering:{surfaceId:n,root:t}},e]}}}return e}).flat(),o=[...i,...a].map(e=>this.normalizeServerMessage(e));console.log(`A2UIService: Processing messages (fixed & normalized)`,JSON.stringify(o,null,2)),this.processor.processMessages(o);let s=Array.from(this.processor.getSurfaces().entries());console.log(`A2UIService: Estado del procesador tras procesado:`,s.map(([e,t])=>({id:e,root:t.rootComponentId,components:t.components.size,hasTree:!!t.componentTree})))}}getSurfaceIdsFromEvent(e){if(e.activityType!==`a2ui`||!e.content)return[];let t=e.content,n=Array.isArray(t)?t:[t],r=new Set;return n.forEach(e=>{let t=e.beginRendering||e.begin_rendering||e.surfaceUpdate||e.surface_update||e.deleteSurface||e.delete_surface,n=t?.surfaceId||t?.surface_id;n&&r.add(n)}),Array.from(r)}isBeginRenderingOnly(e){let t=this.getA2UIPayloads(e);return t.length===0?!1:t.every(e=>{let t=!!e.beginRendering,n=!!e.surfaceUpdate||!!e.dataModelUpdate||!!e.deleteSurface;return t&&!n})}isA2UIMessage(e){return!e||e.role!==`assistant`&&e.role!==`activity`?!1:e.role===`activity`&&e.activityType===`a2ui`?!0:e.role===`assistant`&&e.toolCalls?e.toolCalls.some(e=>e.function?.name.startsWith(`a2ui_`)):!1}getA2UIPayloads(e){let t=[];if(!e)return t;if(e.role===`assistant`&&e.toolCalls)t.push(...this.mapMessage(e));else if(e.role===`activity`&&e.activityType===`a2ui`&&e.content){let n=e.content;(Array.isArray(n)?n:[n]).forEach(e=>{this.isServerToClientMessage(e)&&t.push(this.normalizeServerMessage(e))})}else if(e.role===`tool`&&typeof e.content==`string`)try{let n=JSON.parse(e.content);if((n.role===`activity`||n.activity_type===`a2ui`)&&n.content){let e=n.content;(Array.isArray(e)?e:[e]).forEach(e=>{this.isServerToClientMessage(e)&&t.push(this.normalizeServerMessage(e))})}else this.isServerToClientMessage(n)&&t.push(this.normalizeServerMessage(n))}catch{}return t}};var F=class extends k{constructor(...e){super(...e),this.isLast=!1,this.isStreaming=!1,this.agentAvatar=``,this._processorUpdated=!1,this._handleProcessorUpdate=()=>{P.isA2UIMessage(this.message)&&this.requestUpdate()}}static#e=this.styles=dt;connectedCallback(){super.connectedCallback(),P.addEventListener(`processor-update`,this._handleProcessorUpdate)}disconnectedCallback(){P.removeEventListener(`processor-update`,this._handleProcessorUpdate),super.disconnectedCallback()}updated(e){e.has(`message`)&&(this.setAttribute(`role`,this.message.role),this.requestUpdate())}_handleCopy(){let e=typeof this.message.content==`string`?this.message.content:JSON.stringify(this.message.content||``);navigator.clipboard.writeText(e)}_handleReload(){this.dispatchEvent(new CustomEvent(`reload-message`,{detail:{id:this.message.id},bubbles:!0,composed:!0}))}render(){let e=this.message.role===`user`;if(P.isA2UIMessage(this.message)){let e=P.getA2UIPayloads(this.message),t=new Set(e.map(e=>(e.beginRendering||e.surfaceUpdate||e.dataModelUpdate||e.deleteSurface)?.surfaceId).filter(Boolean)),n=P.processor,r=Array.from(n.getSurfaces().entries()).filter(([e])=>t.has(e));if(r.length>0)return S`
|
|
338
348
|
<div class="message-container activity">
|
|
349
|
+
${this.agentAvatar?S`<img src="${this.agentAvatar}" class="avatar-img" alt="AI">`:S`<div class="avatar">C</div>`}
|
|
339
350
|
<div class="content-wrapper">
|
|
340
|
-
${
|
|
351
|
+
${r.map(([e,t])=>S`
|
|
341
352
|
<a2ui-theme-provider
|
|
342
353
|
.surfaceId="${e}"
|
|
343
|
-
.processor="${
|
|
344
|
-
.surface="${
|
|
354
|
+
.processor="${n}"
|
|
355
|
+
.surface="${t}"
|
|
345
356
|
.enableCustomElements="${!0}"
|
|
346
357
|
></a2ui-theme-provider>
|
|
347
358
|
`)}
|
|
359
|
+
<div class="debug-id">${this.message.id}</div>
|
|
348
360
|
</div>
|
|
349
361
|
</div>
|
|
350
362
|
`}return S`
|
|
@@ -361,6 +373,7 @@
|
|
|
361
373
|
<div class="typing-dot"></div>
|
|
362
374
|
</div>
|
|
363
375
|
`:this.message.content}</div>
|
|
376
|
+
<div class="debug-id">${this.message.id}</div>
|
|
364
377
|
|
|
365
378
|
${e?``:S`
|
|
366
379
|
<div class="actions">
|
|
@@ -374,14 +387,14 @@
|
|
|
374
387
|
`}
|
|
375
388
|
</div>
|
|
376
389
|
</div>
|
|
377
|
-
`}};N([j({type:Object})],F.prototype,`message`,void 0),N([j({type:Boolean})],F.prototype,`isLast`,void 0),N([j({type:Boolean})],F.prototype,`isStreaming`,void 0),N([j({type:String})],F.prototype,`agentAvatar`,void 0),F=N([A(`agent-chat-message`)],F);var I=class extends k{constructor(...e){super(...e),this.messages=[],this.isRunning=!1,this.agentAvatar=``,this.emptyText=``}static#e=this.styles=ut;updated(e){e.has(`messages`)&&this.scrollToBottom()}async scrollToBottom(){await this.updateComplete,(this.shadowRoot?.querySelector(`agent-chat-message:last-of-type`))?.scrollIntoView({behavior:`smooth`,block:`end`})}render(){return this.messages.length===0?S`
|
|
390
|
+
`}};N([j({type:Object})],F.prototype,`message`,void 0),N([j({type:Boolean})],F.prototype,`isLast`,void 0),N([j({type:Boolean})],F.prototype,`isStreaming`,void 0),N([j({type:String})],F.prototype,`agentAvatar`,void 0),N([j({type:Boolean})],F.prototype,`_processorUpdated`,void 0),F=N([A(`agent-chat-message`)],F);var I=class extends k{constructor(...e){super(...e),this.messages=[],this.isRunning=!1,this.agentAvatar=``,this.emptyText=``}static#e=this.styles=ut;updated(e){e.has(`messages`)&&(P.processMessages(this.messages),this.scrollToBottom())}async scrollToBottom(){await this.updateComplete,(this.shadowRoot?.querySelector(`agent-chat-message:last-of-type`))?.scrollIntoView({behavior:`smooth`,block:`end`})}render(){return this.messages.length===0?S`
|
|
378
391
|
<div class="empty-state">
|
|
379
392
|
${this.agentAvatar?S`<img src="${this.agentAvatar}" alt="Agent Avatar" class="empty-avatar-img">`:S`<div class="empty-avatar">SM</div>`}
|
|
380
393
|
<p class="empty-text">${this.emptyText}</p>
|
|
381
394
|
</div>
|
|
382
395
|
`:S`
|
|
383
396
|
<div class="messages-list">
|
|
384
|
-
${this.messages.filter(e=>e.role===`
|
|
397
|
+
${this.messages.filter(e=>P.isA2UIMessage(e)||e.role===`user`||e.role===`assistant`?!0:!(e.role===`tool`||e.role===`activity`)).map((e,t,n)=>S`
|
|
385
398
|
<agent-chat-message
|
|
386
399
|
.message=${e}
|
|
387
400
|
.isLast=${t===n.length-1}
|
|
@@ -929,7 +942,7 @@
|
|
|
929
942
|
<button class="edit-button" @click="${()=>this._handleEdit(t)}">Edit</button>
|
|
930
943
|
</div>
|
|
931
944
|
<pre>${JSON.stringify(t,null,2)}</pre>
|
|
932
|
-
`}_handleEdit(e){this._editedData=JSON.stringify(e,null,2),this._isEditing=!0}_handleCancelEdit(){this._isEditing=!1}_handleSave(e){try{let t=JSON.parse(this._editedData),n=e===`context`?`context-update`:`state-update`;this.dispatchEvent(new CustomEvent(n,{detail:t,bubbles:!0,composed:!0})),this._isEditing=!1}catch(e){alert(`Invalid JSON: `+e.message)}}};N([M()],q.prototype,`_activeTab`,void 0),N([M()],q.prototype,`_context`,void 0),N([M()],q.prototype,`_appState`,void 0),N([M()],q.prototype,`_messages`,void 0),N([M()],q.prototype,`_stream`,void 0),N([M()],q.prototype,`_isEditing`,void 0),N([M()],q.prototype,`_editedData`,void 0),q=N([A(`agent-inspector-window`)],q);var Zn={thread:`thr`,message:`msg`,toolCall:`tc`,workflow:`wf`,task:`tsk`,attachment:`atc`,sdkHiddenContext:`shcx`};function Qn(e){return`${Zn[e]}_${crypto.randomUUID().replace(/-/g,``).slice(0,8)}`}var $n=class e extends EventTarget{constructor(){super(),this._context=null,this._visibleTargetIds=new Set,this._executePlanHandler=null}static getInstance(){return e._instance||=new e,e._instance}registerPortal(e,t){console.log(`Registering app context`,e),this._context=e,t?.executePlan&&(this._executePlanHandler=t.executePlan),this.dispatchEvent(new CustomEvent(`portal-registered`,{detail:e}))}setVisibleTargets(e){this._visibleTargetIds=new Set(e),this.dispatchEvent(new CustomEvent(`targets-updated`,{detail:e}))}async executePlan(e){if(e.type===`plan`){let t=e.steps;console.log(`ChatPortalService: Executing multi-step plan with ${t.length} steps.`);for(let e of t){let t=await this.executePlan(e);if(t.status===`error`)return t}return{status:`ok`}}if(e.type===`click`||e.type===`setValue`){let t=e.targetId;if(console.log(`ChatPortalService: Waiting for target "${t}" for action "${e.type}"...`),!await this._waitForTarget(t))return{status:`error`,details:`Target "${t}" not found or not visible after timeout.`}}return this._executePlanHandler?this._executePlanHandler(e):this._context?(console.log(`Executing plan (simplified):`,e),{status:`ok`}):(console.warn(`No portal registered. Cannot execute plan.`),{status:`error`,details:`No portal registered`})}_waitForTarget(e,t=1e4){return this._visibleTargetIds.has(e)?Promise.resolve(!0):new Promise(n=>{let r=setTimeout(()=>{this.removeEventListener(`targets-updated`,i),n(!1)},t),i=()=>{this._visibleTargetIds.has(e)&&(clearTimeout(r),this.removeEventListener(`targets-updated`,i),n(!0))};this.addEventListener(`targets-updated`,i)})}get context(){return this._context}get specs(){return this._context}};let J=$n.getInstance();var er=class{constructor(e){this.service=e}onRunFinishedEvent(e){K.addEvent(`onRunFinishedEvent`,e.event),this.service.cleanupThinkingPlaceholder()}onRunStartedEvent(e){K.addEvent(`onRunStartedEvent`,e.event),this.service.addPlaceholderMessage()}onRunErrorEvent(e){K.addEvent(`onRunErrorEvent`,e.event),console.error(`ChatSubscriber: Run Error`,e.event),this.service.cleanupThinkingPlaceholder()}onStepStartedEvent(e){K.addEvent(`onStepStartedEvent`,e.event)}onStepFinishedEvent(e){K.addEvent(`onStepFinishedEvent`,e.event)}onTextMessageStartEvent(e){K.addEvent(`onTextMessageStartEvent`,e.event),this.service.prepareMessageForStreaming(e.event.messageId)}onTextMessageContentEvent(e){K.addEvent(`onTextMessageContentEvent`,e.event);let t=e.event.delta||``;this.service.appendMessageContent(e.event.messageId,t)}onTextMessageEndEvent(e){K.addEvent(`onTextMessageEndEvent`,e.event)}onMessagesSnapshotEvent(e){K.addEvent(`onMessagesSnapshotEvent`,e.event);let t=e.event.messages.map(e=>({...e,createdAt:e.createdAt||Date.now()}));this.service.setMessages(t)}onToolCallStartEvent(e){K.addEvent(`onToolCallStartEvent`,e.event)}onToolCallArgsEvent(e){K.addEvent(`onToolCallArgsEvent`,e.event)}async onToolCallEndEvent(e){if(K.addEvent(`onToolCallEndEvent`,e.event),e.toolCallName===`executePlan`){console.log(`ChatSubscriber: Received executePlan tool call`,e.toolCallArgs);let t=await J.executePlan(e.toolCallArgs);console.log(`ChatSubscriber: executePlan result`,t)}if(e.toolCallName===`navigate_user`){console.log(`ChatSubscriber: Received navigate_user tool call`,e.toolCallArgs);let t=await J.executePlan({type:`navigate`,toPath:e.toolCallArgs.path,reason:e.toolCallArgs.reason});console.log(`ChatSubscriber: navigate_user result`,t)}if(e.toolCallName===`click_element`){console.log(`ChatSubscriber: Received click_element tool call`,e.toolCallArgs);let t=await J.executePlan({type:`click`,targetId:e.toolCallArgs.target_id,reason:e.toolCallArgs.reason});console.log(`ChatSubscriber: click_element result`,t)}if(e.toolCallName===`set_value`){console.log(`ChatSubscriber: Received set_value tool call`,e.toolCallArgs);let t=await J.executePlan({type:`setValue`,targetId:e.toolCallArgs.target_id,value:e.toolCallArgs.value,reason:e.toolCallArgs.reason});console.log(`ChatSubscriber: set_value result`,t)}if(e.toolCallName===`execute_ui_plan`||e.toolCallName===`executePlan`){console.log(`ChatSubscriber: Received UI plan tool call`,e.toolCallArgs);let t=await J.executePlan(e.toolCallArgs);console.log(`ChatSubscriber: UI plan result`,t)}}onToolCallResultEvent(e){K.addEvent(`onToolCallResultEvent`,e.event)}onStateSnapshotEvent(e){K.addEvent(`onStateSnapshotEvent`,e.event)}onStateDeltaEvent(e){K.addEvent(`onStateDeltaEvent`,e.event)}onActivitySnapshotEvent(e){K.addEvent(`onActivitySnapshotEvent`,e.event),e.event.activityType==`a2ui`&&e.event.content.surfaceUpdate?this.service.addA2UIMessage(e.event):e.event.activityType==`a2ui`&&e.event.content.beginRendering?P.processMessages([e.event.content]):[`navigation`,`click`,`setValue`,`plan`].includes(e.event.activityType)&&J.executePlan(e.event.content)}onActivityDeltaEvent(e){K.addEvent(`onActivityDeltaEvent`,e.event)}onCustomEvent(e){K.addEvent(`onCustomEvent`,e.event)}async onClientToolCall(e){K.addEvent(`onClientToolCall`,e.event),e.toolName===`executePlan`&&(console.log(`ChatSubscriber: Received executePlan client tool call`,e.args),await J.executePlan(e.args))}onEvent(e){K.addEvent(`onEvent:${e.event.type}`,e.event)}onRawEvent(e){K.addEvent(`onRawEvent`,e.event)}},tr=class{constructor(){this.baseUrl=`/api/conversations`}initialize(e){this.baseUrl=`${e}/api/conversations`}async getConversations(){let e=await fetch(`${this.baseUrl}`);if(!e.ok)throw Error(`Failed to fetch conversations: ${e.statusText}`);return e.json()}async getConversation(e){let t=await fetch(`${this.baseUrl}/${e}`);if(!t.ok)throw Error(`Failed to fetch conversation: ${t.statusText}`);return t.json()}async createConversation(e){let t={...e,title:e.title||`Nueva conversación`},n=await fetch(this.baseUrl,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify(t)});if(!n.ok)throw Error(`Failed to create conversation: ${n.statusText}`);return n.json()}async updateConversation(e,t){let n=await fetch(`${this.baseUrl}/${e}`,{method:`PUT`,headers:{"Content-Type":`application/json`},body:JSON.stringify(t)});if(!n.ok)throw Error(`Failed to update conversation: ${n.statusText}`);return n.json()}async deleteConversation(e){let t=await fetch(`${this.baseUrl}/${e}`,{method:`DELETE`});if(!t.ok)throw Error(`Failed to delete conversation: ${t.statusText}`)}};let Y=new tr;var X=`thread-placeholder`,Z=`site-operator-thread-id`,nr=`/ag_ui`;let Q=new class extends EventTarget{get isRunning(){return this.agent?.isRunning||!1}get messages(){return this.agent?.messages||[]}get suggestedPrompts(){return this._suggestedPrompts}get showPrompts(){return this._showPrompts}constructor(){super(),this._conversations=[],this._appContext=null,this._appState={v:`1.1`,location:{path:``},ui:{visibleClickTargetIds:[]}},this._suggestedPrompts=[],this._showPrompts=!1,this.subscriber=new er(this),J.addEventListener(`portal-registered`,e=>{let t=e.detail;console.log(`ChatService: Portal context detected`,t),this.setAppContext(t)})}async initialize(e){let t=localStorage.getItem(Z);this.agent=new r.HttpAgent({url:`${e.backendUrl}${nr}`,threadId:t||X}),Y.initialize(e.backendUrl),J.context?this._appContext=J.context:this._appContext={v:`1.1`,site:{name:e.appName,locale:window.navigator.language||window.navigator.languages[0]||`en`}},t&&await this.loadConversation(t),K.setContext(this._appContext),K.setState(this._appState),K.setMessages(this.agent?.messages||[])}async loadConversation(e){try{let t=await Y.getConversation(e);this.agent&&(this.agent.threadId=t.id,this.agent.messages=t.messages||[],localStorage.setItem(Z,t.id)),this.notify()}catch(e){console.error(`Failed to load conversation`,e),this.agent&&(this.agent.threadId=X,this.agent.messages=[],localStorage.removeItem(Z)),this.notify()}}get conversations(){return this._conversations}setAppContext(e){this._appContext=e,K.setContext(this._appContext),this.notify()}setAppState(e){this._appState=e,K.setState(this._appState),e.ui?.visibleClickTargetIds&&J.setVisibleTargets(e.ui.visibleClickTargetIds),this.notify()}updateAppState(e){this._appState={...this._appState,...e},this.notify()}setAppLocation(e){this._appState.location=e,this.notify()}setAppUI(e){this._appState.ui=e,e?.visibleClickTargetIds&&J.setVisibleTargets(e.visibleClickTargetIds),this.notify()}setAppFocus(e){this._appState.focus=e,this.notify()}setSuggestedPrompts(e){this._suggestedPrompts=e.map(e=>({...e,caption:e.caption.slice(0,50)})),this._showPrompts=!0,this.notify()}hideSuggestedPrompts(){this._showPrompts=!1,this.notify()}async sendMessage(e,t=`user`){if(!this.agent){console.error(`ChatService not initialized. Call initialize() first.`);return}let n=Qn(`message`),r=Date.now(),i;switch(t){case`activity`:i={id:n,role:`activity`,activityType:`message`,content:{text:e},createdAt:r};break;case`tool`:i={id:n,role:`tool`,content:e,toolCallId:Qn(`toolCall`),createdAt:r};break;case`user`:i={id:n,role:`user`,content:e,createdAt:r};break;case`assistant`:i={id:n,role:`assistant`,content:e,createdAt:r};break;case`system`:i={id:n,role:`system`,content:e,createdAt:r};break;case`developer`:i={id:n,role:`developer`,content:e,createdAt:r};break}this.notify();try{this.agent?.threadId==X&&await this._ensureConversation(),this.agent.addMessage(i),this.agent.state={appState:this._appState},await this.agent.runAgent({tools:[]},this.subscriber)}catch(e){console.error(`Failed to send message`,e)}finally{this._showPrompts=!1,this.notify()}}async _ensureConversation(){if(!this.agent)throw Error(`Agent not initialized`);if(this.agent?.threadId==X){let e=await Y.createConversation({appContext:this._appContext||void 0});this.agent.threadId=e.id,localStorage.setItem(Z,e.id)}}addPlaceholderMessage(){if(!this.agent)throw Error(`Agent not initialized`);let e={id:`thinking-placeholder`,role:`assistant`,content:``,createdAt:Date.now(),isThinking:!0};this.agent.messages=[...this.agent.messages||[],e],this.notify()}cleanupThinkingPlaceholder(){if(!this.agent)return;let e=this.agent.messages.filter(e=>e.id!==`thinking-placeholder`);e.length!==this.agent.messages.length&&(this.agent.messages=e,this.notify())}prepareMessageForStreaming(e){if(!this.agent)throw Error(`Agent not initialized`);this.agent.messages=this.agent.messages.map(t=>t.id===`thinking-placeholder`&&this.isRunning?{...t,id:e,isThinking:!1}:t),this.notify()}appendMessageContent(e,t){if(!this.agent)throw Error(`Agent not initialized`);this.agent.messages=this.agent.messages.map(n=>n.id===e&&typeof n.content==`string`?{...n,content:(n.content||``)+t}:n),this.notify()}setMessages(e){if(!this.agent)throw Error(`Agent not initialized`);let t=this.agent.messages.filter(e=>e.role===`activity`),n=new Set(e.map(e=>e.id)),r=t.filter(e=>!n.has(e.id));console.log(`ChatService: setMessages - Preserving activities`,r.length),this.agent.messages=[...e,...r],this.agent.messages.sort((e,t)=>(e.createdAt||0)-(t.createdAt||0)),this.notify()}addA2UIMessage(e){if(!this.agent)throw Error(`Agent not initialized`);let t=e.content;if(typeof t==`string`)try{t=JSON.parse(t)}catch(e){console.error(`ChatService: Failed to parse activity content string`,e)}let n={id:e.messageId,role:`activity`,activityType:e.activityType,content:e.content,createdAt:Date.now()},r=this.agent.messages.filter(t=>t.id!==e.messageId);this.agent.messages=[...r,n],this.notify()}async startNewThread(){localStorage.removeItem(Z),this.agent&&(this.agent.threadId=X,this.agent.messages=[],this.agent.isRunning=!1),this._suggestedPrompts.length>0&&(this._showPrompts=!0),this.notify()}async getConversations(){return await this.refreshConversations(),this._conversations}async refreshConversations(){try{this._conversations=(await Y.getConversations()).map(e=>({id:e.id,title:e.title})),this.notify()}catch(e){console.error(`Failed to refresh conversations`,e)}}notify(){K.setMessages(this.agent?.messages||[]),K.setState(this._appState),this.dispatchEvent(new CustomEvent(`state-change`))}};var rr=class{constructor(e){this._onStateChange=()=>{this._host.requestUpdate()},this._host=e,this._host.addController(this)}initialize(e){return Q.initialize(e)}hostConnected(){Q.addEventListener(`state-change`,this._onStateChange)}hostDisconnected(){Q.removeEventListener(`state-change`,this._onStateChange)}get isRunning(){return Q.isRunning}get messages(){return Q.messages}get conversations(){return Q.conversations}get suggestedPrompts(){return Q.suggestedPrompts}get showPrompts(){return Q.showPrompts}sendMessage(e,t=`user`){return Q.sendMessage(e,t)}startNewThread(){return Q.startNewThread()}loadConversation(e){return Q.loadConversation(e)}setAppContext(e){return Q.setAppContext(e)}setAppState(e){return Q.setAppState(e)}setAppLocation(e){return Q.setAppLocation(e)}setAppUI(e){return Q.setAppUI(e)}setAppFocus(e){return Q.setAppFocus(e)}setSuggestedPrompts(e){return Q.setSuggestedPrompts(e)}hideSuggestedPrompts(){return Q.hideSuggestedPrompts()}refreshConversations(){return Q.refreshConversations()}getConversations(){return Q.getConversations()}},ir=class{constructor(){this.originalFetch=window.fetch.bind(window),this._isEnabled=!1}get isEnabled(){return this._isEnabled}init(){if(this._isEnabled)return;let e=this;window.fetch=async function(t,n){try{let r=new Headers(n?.headers||{});return r.has(`Authorization`)||r.append(`Authorization`,`Bearer eyJhbGciOiJSUzI1NiIsImtpZCI6InhmcDRfR0tObWNBMHl3UUNrZ1BXVkJjTHZmRDVfZXZKOWg3bUhGbExBVWMiLCJ0eXAiOiJKV1QifQ.eyJhdWQiOiIwZWZhNWFhNy04OWRiLTQ5MTYtYmZlNC0wNTM3MjhlZWY2M2QiLCJpc3MiOiJodHRwczovL3NrY290ZXN0LmIyY2xvZ2luLmNvbS8wZGI2ZGJjMy02OTA4LTQ1MTctYTdmMi04MWVhNjg1YTI1ZTIvdjIuMC8iLCJleHAiOjE3NjkxMjA3OTgsIm5iZiI6MTc2OTExOTg5OCwibmFtZSI6IlZpYW5hIFZlbGFzcXVleiwgSm9zZSBTdGV2ZW4iLCJpZHBfYWNjZXNzX3Rva2VuIjoiZXlKMGVYQWlPaUpLVjFRaUxDSnViMjVqWlNJNkltNTFURzV6ZVc1WFFYSTFOa2hNYTFCblRXMUViWFF0UW14YVVsWjBXRFV0TUdSbVlYVk1WRTgxY3pnaUxDSmhiR2NpT2lKU1V6STFOaUlzSW5nMWRDSTZJbEJqV0RrNFIxZzBNakJVTVZnMmMwSkVhM3BvVVcxeFozZE5WU0lzSW10cFpDSTZJbEJqV0RrNFIxZzBNakJVTVZnMmMwSkVhM3BvVVcxeFozZE5WU0o5LmV5SmhkV1FpT2lJd01EQXdNREF3TXkwd01EQXdMVEF3TURBdFl6QXdNQzB3TURBd01EQXdNREF3TURBaUxDSnBjM01pT2lKb2RIUndjem92TDNOMGN5NTNhVzVrYjNkekxtNWxkQzh3T0RJM01XWTBNaTA0TVdWbUxUUTFaRFl0T0RGaFl5MDBPVGMzTm1NMFltVTJNVFV2SWl3aWFXRjBJam94TnpZNU1EazNORGt5TENKdVltWWlPakUzTmprd09UYzBPVElzSW1WNGNDSTZNVGMyT1RFd01UZzRNU3dpWVdOamRDSTZNQ3dpWVdOeUlqb2lNU0lzSW1GamNuTWlPbHNpY0RFaVhTd2lZV2x2SWpvaVFXVlJRVWN2T0dKQlFVRkJUVTQ0YmpFdllqWk9kMVZTTmpGMFpGSlZXSGhNUzJOak5WQnNVREpyYUdvcmVEbDFlWFZXTkVGYU5WRjZUSEo1U0dSTlVVeGpOSHBpVFV0UE9GQTJXRGREVEZVd1luVjFUMGczTml0WlVIUTBOamx1Unk5Q1ZEVjZiMDF5WkRkbmFXTnlXVk12VW5ac1VYaHVTWHBETkc5bE9HMXFTSFUyUkdodmVUUm1RakJGWlcwNGVTdFdLMGhRVEdoSWRraElhVlZUVFdFMWRYRlhaRlJvVTJrNE1WVndlakZzYUUxWFJVaFlZMGhaUjFORGRESkhVR0puWVRoUFNtSjRaVEJNVm5kaFpWTm9MMVZPYkdkU1VHdEdURlZLWlZwWWFURkNVVFJzVldjNU1YSXdTM1ZIY1dNeGMxTkZaSEp4SzJoWlVtTlZNMWRNUkRJd1VqVTJSRVl2WkhkbU1WVjZUVVZqUkRFMlZVa3hZelpXVjBjdlQweElSRzFyUVRkUFMzTkVOMFpGWkZWVlZXdERSbEU5SWl3aVlXMXlJanBiSW5CM1pDSXNJbTFtWVNKZExDSmhjSEJmWkdsemNHeGhlVzVoYldVaU9pSkVZV3hwTFZCeVpDSXNJbUZ3Y0dsa0lqb2laR1prTURrNVlqQXRaV05pT1MwME0yVTFMV0kzWWpjdE5USTVObUk0TUdFME5qSXdJaXdpWVhCd2FXUmhZM0lpT2lJeElpd2labUZ0YVd4NVgyNWhiV1VpT2lKV2FXRnVZU0JXWld4aGMzRjFaWG9pTENKbmFYWmxibDl1WVcxbElqb2lTbTl6WlNCVGRHVjJaVzRpTENKcFpIUjVjQ0k2SW5WelpYSWlMQ0pwY0dGa1pISWlPaUl6T0M0NUxqSXlNQzR4TXpJaUxDSnVZVzFsSWpvaVZtbGhibUVnVm1Wc1lYTnhkV1Y2TENCS2IzTmxJRk4wWlhabGJpSXNJbTlwWkNJNkltVXdNbU0wTmpaakxXVTVaRGd0TkdGa01pMDVaVGhrTFdReFltUTJObUV6TkRNd01pSXNJbTl1Y0hKbGJWOXphV1FpT2lKVExURXROUzB5TVMweU5EZzVPVGM1T1RRd0xUSTFOVEl3TVRnM016RXRNVGN3TWpjeE9UTTFPUzB5TVRrNE1DSXNJbkJzWVhSbUlqb2lPQ0lzSW5CMWFXUWlPaUl4TURBek1qQXdNVUV4UWpCQ016azBJaXdpY21naU9pSXhMa0ZVVVVGUmFEaHVRMDh0UWpGclYwSnlSV3d6WWtWMmJVWlJUVUZCUVVGQlFVRkJRWGRCUVVGQlFVRkJRVUZDVVVGUmF6QkJRUzRpTENKelkzQWlPaUpOWVdsc0xsSmxZV1FnVFdGcGJDNVRaVzVrSUc5d1pXNXBaQ0J3Y205bWFXeGxJRlZ6WlhJdVVtVmhaQ0JsYldGcGJDSXNJbk5wWkNJNklqQXdNVEkxTnpaaExXTmhOVFF0TVdVeVl5MWlZbVEwTFdFNU4yVTBNekUzT1dNeE15SXNJbk5wWjI1cGJsOXpkR0YwWlNJNld5SnJiWE5wSWwwc0luTjFZaUk2SW5GaFNsbFhNelEzT0RWcFdFUktVbDlyYVZCa1NuSm5VWGhoVGs5d1RsaHRhVmhFV0dVM1NVTktaMWtpTENKMFpXNWhiblJmY21WbmFXOXVYM05qYjNCbElqb2lVMEVpTENKMGFXUWlPaUl3T0RJM01XWTBNaTA0TVdWbUxUUTFaRFl0T0RGaFl5MDBPVGMzTm1NMFltVTJNVFVpTENKMWJtbHhkV1ZmYm1GdFpTSTZJbXAyYVdGdVlVQnphMkZ1WkdsaExtTnZiUzVqYnlJc0luVndiaUk2SW1wMmFXRnVZVUJ6YTJGdVpHbGhMbU52YlM1amJ5SXNJblYwYVNJNkluSlVaMVpmZUVWTVJHdFBSMmx3Y210R01tZDVRVUVpTENKMlpYSWlPaUl4TGpBaUxDSjNhV1J6SWpwYkltSTNPV1ppWmpSa0xUTmxaamt0TkRZNE9TMDRNVFF6TFRjMllqRTVOR1U0TlRVd09TSmRMQ0o0YlhOZllXTmtJam94TnpVeU5UZzVNVEk0TENKNGJYTmZZV04wWDJaamRDSTZJak1nT1NJc0luaHRjMTltZEdRaU9pSXRkalJ3UW10NmRXRlFYMjVSUmpkVVZVWnlRVkZtYkdSNlIzTlpjRWxwT1dnMGFrdDZhbU5SVFZaQlFtUllUbXhaV0U0d1RGZFNlbUpZVFNJc0luaHRjMTlwWkhKbGJDSTZJakVnTWpBaUxDSjRiWE5mYzNRaU9uc2ljM1ZpSWpvaWMzUkNiazAzV25FME1td3hVa1l5ZEV0RU1GaEJVbVpoVGtOUlFXOW9WbTFmVUZWWFltSnJSbDlST0NKOUxDSjRiWE5mYzNWaVgyWmpkQ0k2SWpFd0lETWlMQ0o0YlhOZmRHTmtkQ0k2TVRNNU16WXdNek0wTVN3aWVHMXpYM1J1ZEY5bVkzUWlPaUkySURNaWZRLkEyZl9aRHNVcmp3UFh1NFVRMkYxN2tLNzVXTE1lN3lWX09YNHFKYk1zNTQxQmFmdk1GU3pOQnJILVJsR1FTdjEybjlrRm0yTGJ6bzdoMnJzR0JiRWsyOFQzdmtlTW95TVNPVFdfaldELUFHSVZOVVdaYnc3emVZWHVZYmEydUtfblR5cGpwQVNoV3hBNlJkMUV5QUhGZjVQakIxOTlYRGgySkp2bWJfZzVHazhJY2VEZ3QzcEVRRWF0QUdzZzVZRjN0ZlctLTdGT05EY3NTQjJjS2pMdXJwUl8tUG90LVF6TV9CaV9CeHhBZU1tNlAtb2JGRzB4WGRlRnFkUW9lS2pIVFEzN2EzeE9MMkZ2TFg4ZUhjN2x1SWstUkFBQnlmOXhhMnlxS0NkWGFiQkVSejRzeWhCRkpuMzdCeDc1cUlsZk1rQUlTX2NlemZZYndnSEJJWmZEZyIsInN1YiI6Ijg4MjBkNmI2LTcyNWItNDA0NC1hZGNiLWEzZTE4YTM4ZTRmYyIsImdpdmVuX25hbWUiOiJKb3NlIFN0ZXZlbiIsImZhbWlseV9uYW1lIjoiVmlhbmEgVmVsYXNxdWV6IiwiZW1haWwiOiJqdmlhbmFAc2thbmRpYS5jb20uY28iLCJub25jZSI6IjAxOWJlNjcyLTA4NWYtNzkxNi04MmZjLTk0MTA4OTRjODMyNSIsImF6cCI6IjBlZmE1YWE3LTg5ZGItNDkxNi1iZmU0LTA1MzcyOGVlZjYzZCIsInZlciI6IjEuMCIsImlhdCI6MTc2OTExOTg5OH0.TrBEO5lXpR34n7aA7J5LniTPw36mpwR51latCn7whw0s496hSXf7NJl-822mSGlmhShjQXiiIZCodQa-3nh2A4V1ecGDeCdqh_m-BCqlSsEO8LPEQ3-F-tm74J4iiO6NUm7FDQf3tK0jfxHlpFZJaP45T22389B3xVsPmnvDezHxsltOjtFJtv2sN2csF3CgNiJVvQv6xaX_cs7R4PpTxELCVOyUdjJ3NthE7kMKFvFQgz8Okq_buR7-O8ylRq35Ixxqp8He3nCJ3OWuZEj3xGLBCocGwlc8Vwt4_03Fu94UoU_XHmMD9RsjDA4nJY-o43Dkeldyj_1O5Deo7fhjtg`),e.originalFetch(t,{...n,headers:r})}catch(e){return Promise.reject(e)}},this._isEnabled=!0,console.log(`Fetch interceptor initialized with test Authorization header (Native implementation).`)}destroy(){this._isEnabled&&(window.fetch=this.originalFetch,this._isEnabled=!1,console.log(`Fetch interceptor destroyed (Native implementation).`))}};let ar=new ir;var $=class extends k{constructor(...e){super(...e),this._chatController=new rr(this),this.backendUrl=``,this.appName=`Lit-Chat-App`,this.conversationUrl=``,this.agentAvatar=``,this.disclaimer=`Agent puede cometer errores. Verifica la información importante.`,this.emptyText=`¿En qué puedo ayudarte hoy?`,this.placeholder=`Enviar un mensaje a Agent`,this.headerTitle=`Agent`,this.hideHeader=!1,this.interceptor=!1,this._historyOpen=!1,this._inspectorOpen=!1,this._inspectorEnabled=!1}static#e=this.styles=Qe;get controller(){return this._chatController}firstUpdated(){this.dispatchEvent(new CustomEvent(`controller-ready`,{detail:this._chatController}))}connectedCallback(){super.connectedCallback(),this.addEventListener(`a2uiaction`,this._handleA2UIAction)}disconnectedCallback(){this.removeEventListener(`a2uiaction`,this._handleA2UIAction),super.disconnectedCallback()}willUpdate(e){e.has(`interceptor`)&&(this.interceptor?this.enableFetchInterceptor():ar.destroy()),(e.has(`backendUrl`)||e.has(`appName`)||e.has(`conversationUrl`))&&(this._chatController.initialize({backendUrl:this.backendUrl,appName:this.appName,conversationUrl:this.conversationUrl,inspector:this.hasAttribute(`inspector`)||this.inspector}),this._inspectorEnabled=this.hasAttribute(`inspector`)||this.inspector)}enableFetchInterceptor(){console.warn(`Fetch interceptor is only available in development mode.`)}_handleSend(e){this._chatController.sendMessage(e.detail.content)}_handleNewThread(){this._chatController.startNewThread()}setAppContext(e){this._chatController.setAppContext(e)}setAppState(e){this._chatController.setAppState(e)}setAppLocation(e){this._chatController.setAppLocation(e)}setAppUI(e){this._chatController.setAppUI(e)}setAppFocus(e){this._chatController.setAppFocus(e)}setSuggestedPrompts(e){this._chatController.setSuggestedPrompts(e)}_toggleHistory(){this._historyOpen=!this._historyOpen,this._historyOpen&&this._chatController.refreshConversations()}_handleSelectThread(e){console.log(`Selected conversation:`,e.detail.conversation),this._chatController.loadConversation(e.detail.conversation.id),this._historyOpen=!1}_toggleInspector(){this._inspectorOpen=!this._inspectorOpen}render(){return S`
|
|
945
|
+
`}_handleEdit(e){this._editedData=JSON.stringify(e,null,2),this._isEditing=!0}_handleCancelEdit(){this._isEditing=!1}_handleSave(e){try{let t=JSON.parse(this._editedData),n=e===`context`?`context-update`:`state-update`;this.dispatchEvent(new CustomEvent(n,{detail:t,bubbles:!0,composed:!0})),this._isEditing=!1}catch(e){alert(`Invalid JSON: `+e.message)}}};N([M()],q.prototype,`_activeTab`,void 0),N([M()],q.prototype,`_context`,void 0),N([M()],q.prototype,`_appState`,void 0),N([M()],q.prototype,`_messages`,void 0),N([M()],q.prototype,`_stream`,void 0),N([M()],q.prototype,`_isEditing`,void 0),N([M()],q.prototype,`_editedData`,void 0),q=N([A(`agent-inspector-window`)],q);var Zn={thread:`thr`,message:`msg`,toolCall:`tc`,workflow:`wf`,task:`tsk`,attachment:`atc`,sdkHiddenContext:`shcx`};function Qn(e){return`${Zn[e]}_${crypto.randomUUID().replace(/-/g,``).slice(0,8)}`}var $n=class e extends EventTarget{constructor(){super(),this._context=null,this._visibleTargetIds=new Set,this._executePlanHandler=null}static getInstance(){return e._instance||=new e,e._instance}registerPortal(e,t){console.log(`Registering app context`,e),this._context=e,t?.executePlan&&(this._executePlanHandler=t.executePlan),this.dispatchEvent(new CustomEvent(`portal-registered`,{detail:e}))}setVisibleTargets(e){this._visibleTargetIds=new Set(e),this.dispatchEvent(new CustomEvent(`targets-updated`,{detail:e}))}async executePlan(e){if(e.type===`plan`){let t=e.steps;console.log(`ChatPortalService: Executing multi-step plan with ${t.length} steps.`);for(let e of t){let t=await this.executePlan(e);if(t.status===`error`)return t}return{status:`ok`}}if(e.type===`click`||e.type===`setValue`){let t=e.targetId;if(console.log(`ChatPortalService: Waiting for target "${t}" for action "${e.type}"...`),!await this._waitForTarget(t))return{status:`error`,details:`Target "${t}" not found or not visible after timeout.`}}return this._executePlanHandler?this._executePlanHandler(e):this._context?(console.log(`Executing plan (simplified):`,e),{status:`ok`}):(console.warn(`No portal registered. Cannot execute plan.`),{status:`error`,details:`No portal registered`})}_waitForTarget(e,t=1e4){return this._visibleTargetIds.has(e)?Promise.resolve(!0):new Promise(n=>{let r=setTimeout(()=>{this.removeEventListener(`targets-updated`,i),n(!1)},t),i=()=>{this._visibleTargetIds.has(e)&&(clearTimeout(r),this.removeEventListener(`targets-updated`,i),n(!0))};this.addEventListener(`targets-updated`,i)})}get context(){return this._context}get specs(){return this._context}};let J=$n.getInstance();var er=class{constructor(e){this.service=e}onRunFinishedEvent(e){K.addEvent(`onRunFinishedEvent`,e.event),this.service.cleanupThinkingPlaceholder()}onRunStartedEvent(e){K.addEvent(`onRunStartedEvent`,e.event),this.service.addPlaceholderMessage()}onRunErrorEvent(e){K.addEvent(`onRunErrorEvent`,e.event),console.error(`ChatSubscriber: Run Error`,e.event),this.service.cleanupThinkingPlaceholder()}onStepStartedEvent(e){K.addEvent(`onStepStartedEvent`,e.event)}onStepFinishedEvent(e){K.addEvent(`onStepFinishedEvent`,e.event)}onTextMessageStartEvent(e){K.addEvent(`onTextMessageStartEvent`,e.event),this.service.prepareMessageForStreaming(e.event.messageId)}onTextMessageContentEvent(e){K.addEvent(`onTextMessageContentEvent`,e.event);let t=e.event.delta||``;this.service.appendMessageContent(e.event.messageId,t)}onTextMessageEndEvent(e){K.addEvent(`onTextMessageEndEvent`,e.event)}onMessagesSnapshotEvent(e){K.addEvent(`onMessagesSnapshotEvent`,e.event);let t=e.event.messages.filter(e=>{if(e.role===`tool`)return!1;if(e.role===`assistant`&&e.toolCalls&&e.toolCalls.length>0){let t=e.toolCalls.some(e=>e.function?.name?.startsWith(`a2ui_`)),n=typeof e.content==`string`&&e.content.trim().length>0;if(!t&&!n)return!1}return!0}).map(e=>({...e,createdAt:e.createdAt||Date.now()}));this.service.setMessages(t)}onToolCallStartEvent(e){K.addEvent(`onToolCallStartEvent`,e.event)}onToolCallArgsEvent(e){K.addEvent(`onToolCallArgsEvent`,e.event)}async onToolCallEndEvent(e){if(K.addEvent(`onToolCallEndEvent`,e.event),e.toolCallName===`executePlan`){console.log(`ChatSubscriber: Received executePlan tool call`,e.toolCallArgs);let t=await J.executePlan(e.toolCallArgs);console.log(`ChatSubscriber: executePlan result`,t)}if(e.toolCallName===`navigate_user`){console.log(`ChatSubscriber: Received navigate_user tool call`,e.toolCallArgs);let t=await J.executePlan({type:`navigate`,toPath:e.toolCallArgs.path,reason:e.toolCallArgs.reason});console.log(`ChatSubscriber: navigate_user result`,t)}if(e.toolCallName===`click_element`){console.log(`ChatSubscriber: Received click_element tool call`,e.toolCallArgs);let t=await J.executePlan({type:`click`,targetId:e.toolCallArgs.target_id,reason:e.toolCallArgs.reason});console.log(`ChatSubscriber: click_element result`,t)}if(e.toolCallName===`set_value`){console.log(`ChatSubscriber: Received set_value tool call`,e.toolCallArgs);let t=await J.executePlan({type:`setValue`,targetId:e.toolCallArgs.target_id,value:e.toolCallArgs.value,reason:e.toolCallArgs.reason});console.log(`ChatSubscriber: set_value result`,t)}if(e.toolCallName===`execute_ui_plan`||e.toolCallName===`executePlan`){console.log(`ChatSubscriber: Received UI plan tool call`,e.toolCallArgs);let t=await J.executePlan(e.toolCallArgs);console.log(`ChatSubscriber: UI plan result`,t)}}onToolCallResultEvent(e){K.addEvent(`onToolCallResultEvent`,e.event)}onStateSnapshotEvent(e){K.addEvent(`onStateSnapshotEvent`,e.event)}onStateDeltaEvent(e){K.addEvent(`onStateDeltaEvent`,e.event)}onActivitySnapshotEvent(e){K.addEvent(`onActivitySnapshotEvent`,e.event),e.event.activityType===`a2ui`?P.processSnapshot(e.event):[`navigation`,`click`,`setValue`,`plan`].includes(e.event.activityType)&&J.executePlan(e.event.content)}onActivityDeltaEvent(e){K.addEvent(`onActivityDeltaEvent`,e.event)}onCustomEvent(e){K.addEvent(`onCustomEvent`,e.event)}async onClientToolCall(e){K.addEvent(`onClientToolCall`,e.event),e.toolName===`executePlan`&&(console.log(`ChatSubscriber: Received executePlan client tool call`,e.args),await J.executePlan(e.args))}onEvent(e){K.addEvent(`onEvent:${e.event.type}`,e.event)}onRawEvent(e){K.addEvent(`onRawEvent`,e.event)}},tr=class{constructor(){this.baseUrl=`/api/conversations`}initialize(e){this.baseUrl=`${e}/api/conversations`}async getConversations(){let e=await fetch(`${this.baseUrl}`);if(!e.ok)throw Error(`Failed to fetch conversations: ${e.statusText}`);return e.json()}async getConversation(e){let t=await fetch(`${this.baseUrl}/${e}`);if(!t.ok)throw Error(`Failed to fetch conversation: ${t.statusText}`);return t.json()}async createConversation(e){let t={...e,title:e.title||`Nueva conversación`},n=await fetch(this.baseUrl,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify(t)});if(!n.ok)throw Error(`Failed to create conversation: ${n.statusText}`);return n.json()}async updateConversation(e,t){let n=await fetch(`${this.baseUrl}/${e}`,{method:`PUT`,headers:{"Content-Type":`application/json`},body:JSON.stringify(t)});if(!n.ok)throw Error(`Failed to update conversation: ${n.statusText}`);return n.json()}async deleteConversation(e){let t=await fetch(`${this.baseUrl}/${e}`,{method:`DELETE`});if(!t.ok)throw Error(`Failed to delete conversation: ${t.statusText}`)}};let Y=new tr;var X=`thread-placeholder`,Z=`site-operator-thread-id`,nr=`/ag_ui`;let Q=new class extends EventTarget{get isRunning(){return this.agent?.isRunning||!1}get messages(){return this.agent?.messages||[]}get suggestedPrompts(){return this._suggestedPrompts}get showPrompts(){return this._showPrompts}constructor(){super(),this._conversations=[],this._appContext=null,this._appState={v:`1.1`,location:{path:``},ui:{visibleClickTargetIds:[]}},this._suggestedPrompts=[],this._showPrompts=!1,this.subscriber=new er(this),J.addEventListener(`portal-registered`,e=>{let t=e.detail;console.log(`ChatService: Portal context detected`,t),this.setAppContext(t)})}async initialize(e){let t=localStorage.getItem(Z);this.agent=new r.HttpAgent({url:`${e.backendUrl}${nr}`,threadId:t||X}),Y.initialize(e.backendUrl),J.context?this._appContext=J.context:this._appContext={v:`1.1`,site:{name:e.appName,locale:window.navigator.language||window.navigator.languages[0]||`en`}},t?await this.loadConversation(t):P.clearRegistry(),K.setContext(this._appContext),K.setState(this._appState),K.setMessages(this.agent?.messages||[])}async loadConversation(e){try{let t=await Y.getConversation(e);this.agent&&(this.agent.threadId=t.id,this.agent.messages=t.messages||[],localStorage.setItem(Z,t.id)),this.notify()}catch(e){console.error(`Failed to load conversation`,e),this.agent&&(this.agent.threadId=X,this.agent.messages=[],localStorage.removeItem(Z)),this.notify()}}get conversations(){return this._conversations}setAppContext(e){this._appContext=e,K.setContext(this._appContext),this.notify()}setAppState(e){this._appState=e,K.setState(this._appState),e.ui?.visibleClickTargetIds&&J.setVisibleTargets(e.ui.visibleClickTargetIds),this.notify()}updateAppState(e){this._appState={...this._appState,...e},this.notify()}setAppLocation(e){this._appState.location=e,this.notify()}setAppUI(e){this._appState.ui=e,e?.visibleClickTargetIds&&J.setVisibleTargets(e.visibleClickTargetIds),this.notify()}setAppFocus(e){this._appState.focus=e,this.notify()}setSuggestedPrompts(e){this._suggestedPrompts=e.map(e=>({...e,caption:e.caption.slice(0,50)})),this._showPrompts=!0,this.notify()}hideSuggestedPrompts(){this._showPrompts=!1,this.notify()}async sendMessage(e,t=`user`){if(!this.agent){console.error(`ChatService not initialized. Call initialize() first.`);return}let n=Qn(`message`),r=Date.now(),i;switch(t){case`activity`:i={id:n,role:`activity`,activityType:`message`,content:{text:e},createdAt:r};break;case`tool`:i={id:n,role:`tool`,content:e,toolCallId:Qn(`toolCall`),createdAt:r};break;case`user`:i={id:n,role:`user`,content:e,createdAt:r};break;case`assistant`:i={id:n,role:`assistant`,content:e,createdAt:r};break;case`system`:i={id:n,role:`system`,content:e,createdAt:r};break;case`developer`:i={id:n,role:`developer`,content:e,createdAt:r};break}this.agent.addMessage(i),this.notify();try{this.agent?.threadId==X&&await this._ensureConversation(),this.agent.state={appState:this._appState},await this.agent.runAgent({tools:[]},this.subscriber)}catch(e){console.error(`Failed to send message`,e)}finally{this._showPrompts=!1,this.notify()}}async _ensureConversation(){if(!this.agent)throw Error(`Agent not initialized`);if(this.agent?.threadId==X){let e=await Y.createConversation({appContext:this._appContext||void 0});this.agent.threadId=e.id,localStorage.setItem(Z,e.id)}}addPlaceholderMessage(){if(!this.agent)throw Error(`Agent not initialized`);let e={id:`thinking-placeholder`,role:`assistant`,content:``,createdAt:Date.now(),isThinking:!0};this.agent.messages=[...this.agent.messages||[],e],this.notify()}cleanupThinkingPlaceholder(){if(!this.agent)return;let e=this.agent.messages.filter(e=>e.id!==`thinking-placeholder`);e.length!==this.agent.messages.length&&(this.agent.messages=e,this.notify())}prepareMessageForStreaming(e){if(!this.agent)throw Error(`Agent not initialized`);this.agent.messages=this.agent.messages.map(t=>t.id===`thinking-placeholder`&&this.isRunning?{...t,id:e,isThinking:!1}:t),this.notify()}appendMessageContent(e,t){if(!this.agent)throw Error(`Agent not initialized`);this.agent.messages=this.agent.messages.map(n=>n.id===e&&typeof n.content==`string`?{...n,content:(n.content||``)+t}:n),this.notify()}setMessages(e){if(!this.agent)throw Error(`Agent not initialized`);P.clearRegistry();let t=[];for(let n of e)t=P.consolidateStream(n,t);t.sort((e,t)=>(e.createdAt||0)-(t.createdAt||0)),this.agent.messages=t,this.notify()}addA2UIMessage(e){if(!this.agent)throw Error(`Agent not initialized`);let t=e.content;if(typeof t==`string`)try{t=JSON.parse(t)}catch(e){console.error(`ChatService: Failed to parse activity content string`,e)}let n={id:e.messageId,role:`activity`,activityType:e.activityType,content:e.content,createdAt:Date.now()},r=P.consolidateStream(n,this.agent.messages);this.agent.messages=r,this.notify()}async startNewThread(){localStorage.removeItem(Z),console.log(`ChatService: startNewThread`),this.agent&&(this.agent.threadId=X,this.agent.messages=[],this.agent.isRunning=!1),this._suggestedPrompts.length>0&&(this._showPrompts=!0),P.clearRegistry(),this.notify()}async getConversations(){return await this.refreshConversations(),this._conversations}async refreshConversations(){try{this._conversations=(await Y.getConversations()).map(e=>({id:e.id,title:e.title})),this.notify()}catch(e){console.error(`Failed to refresh conversations`,e)}}notify(){K.setMessages(this.agent?.messages||[]),K.setState(this._appState),this.dispatchEvent(new CustomEvent(`state-change`))}};var rr=class{constructor(e){this._onStateChange=()=>{this._host.requestUpdate()},this._host=e,this._host.addController(this)}initialize(e){return Q.initialize(e)}hostConnected(){Q.addEventListener(`state-change`,this._onStateChange)}hostDisconnected(){Q.removeEventListener(`state-change`,this._onStateChange)}get isRunning(){return Q.isRunning}get messages(){return Q.messages}get conversations(){return Q.conversations}get suggestedPrompts(){return Q.suggestedPrompts}get showPrompts(){return Q.showPrompts}sendMessage(e,t=`user`){return Q.sendMessage(e,t)}startNewThread(){return console.log(`Starting new thread`),Q.startNewThread()}loadConversation(e){return Q.loadConversation(e)}setAppContext(e){return Q.setAppContext(e)}setAppState(e){return Q.setAppState(e)}setAppLocation(e){return Q.setAppLocation(e)}setAppUI(e){return Q.setAppUI(e)}setAppFocus(e){return Q.setAppFocus(e)}setSuggestedPrompts(e){return Q.setSuggestedPrompts(e)}hideSuggestedPrompts(){return Q.hideSuggestedPrompts()}refreshConversations(){return Q.refreshConversations()}getConversations(){return Q.getConversations()}},ir=class{constructor(){this.originalFetch=window.fetch.bind(window),this._isEnabled=!1}get isEnabled(){return this._isEnabled}init(){if(this._isEnabled)return;let e=this;window.fetch=async function(t,n){try{let r=new Headers(n?.headers||{});return r.has(`Authorization`)||r.append(`Authorization`,`Bearer eyJhbGciOiJSUzI1NiIsImtpZCI6InhmcDRfR0tObWNBMHl3UUNrZ1BXVkJjTHZmRDVfZXZKOWg3bUhGbExBVWMiLCJ0eXAiOiJKV1QifQ.eyJhdWQiOiIwZWZhNWFhNy04OWRiLTQ5MTYtYmZlNC0wNTM3MjhlZWY2M2QiLCJpc3MiOiJodHRwczovL3NrY290ZXN0LmIyY2xvZ2luLmNvbS8wZGI2ZGJjMy02OTA4LTQ1MTctYTdmMi04MWVhNjg1YTI1ZTIvdjIuMC8iLCJleHAiOjE3NzAxNzYyNzUsIm5iZiI6MTc3MDE3NTM3NSwibmFtZSI6IlZpYW5hIFZlbGFzcXVleiwgSm9zZSBTdGV2ZW4iLCJpZHBfYWNjZXNzX3Rva2VuIjoiZXlKMGVYQWlPaUpLVjFRaUxDSnViMjVqWlNJNklrZzRWbmMwWkV4UlowRnBhbnB1V0ZWMldrWkxaRkF4YlVsQ1ZrVXlZMXBGYlVOaVoybExkRXM1TjJNaUxDSmhiR2NpT2lKU1V6STFOaUlzSW5nMWRDSTZJbEJqV0RrNFIxZzBNakJVTVZnMmMwSkVhM3BvVVcxeFozZE5WU0lzSW10cFpDSTZJbEJqV0RrNFIxZzBNakJVTVZnMmMwSkVhM3BvVVcxeFozZE5WU0o5LmV5SmhkV1FpT2lJd01EQXdNREF3TXkwd01EQXdMVEF3TURBdFl6QXdNQzB3TURBd01EQXdNREF3TURBaUxDSnBjM01pT2lKb2RIUndjem92TDNOMGN5NTNhVzVrYjNkekxtNWxkQzh3T0RJM01XWTBNaTA0TVdWbUxUUTFaRFl0T0RGaFl5MDBPVGMzTm1NMFltVTJNVFV2SWl3aWFXRjBJam94Tnpjd01UY3lNREk1TENKdVltWWlPakUzTnpBeE56SXdNamtzSW1WNGNDSTZNVGMzTURFM05qZzNOeXdpWVdOamRDSTZNQ3dpWVdOeUlqb2lNU0lzSW1GamNuTWlPbHNpY0RFaVhTd2lZV2x2SWpvaVFWSlJRall2TkdKQlFVRkJOWGRHUWtRNVQwRldZekU0TUZSSU0xVllOMGR4VkdodU1rNXRTM1ZVZGpaclFtcEZSSHBpZFRsR1lqZ3JlRE5TT1c1Ulp6bHZZV1Z0Vm1OdWJVNHJkVFJtZW1kVVVUZExVMW80WmtSSlVXMDVTekExZVhwRFJsbFFTRFJTTHpaRFJqSXpNR050VTFCd1FWcGtZVGxNWTA4eFRrUXpkV1Y1VjBsQmFXaHhTWFJQWVdKVlJGVnJiRUpaZWpVMVV6ZHZTRmMzTm1Sa1RscHVhMFpyV2s5WFFYaE1NVXhPUmxsbGIyMUVRMUpFU21SYVFVd3ZlVVpVY1Rock4wSlRRbE5OU0VwNVNFdzJkV3AxVlRNMVZqWXJjV3R0WldRemRHYzVWVVYzZEhGM2MzaEJjMDV5YW1oNU1qbG9kazUyUlRGNmNVSm9ORTFTTW5jM1RWUm1TMFF2U2taM2IwaGFWMFpsWVc1cVRqbDVNVEYwVVdJemVUazNOamxzWlZNeFVqQlNVakpDVGxScFUzSkdTa2hRVGxoWFpXSkdiRWhvYWpnMGRDdHNORGRFY0dWalZuQk1Za3gyTlZWdWVqaFBRa0owUkVSUmIzaFllRlozYTNwc01XUTRkVzV1TXpCblJuTnJTWEJOUFNJc0ltRnRjaUk2V3lKd2QyUWlMQ0p0Wm1FaVhTd2lZWEJ3WDJScGMzQnNZWGx1WVcxbElqb2lSR0ZzYVMxUWNtUWlMQ0poY0hCcFpDSTZJbVJtWkRBNU9XSXdMV1ZqWWprdE5ETmxOUzFpTjJJM0xUVXlPVFppT0RCaE5EWXlNQ0lzSW1Gd2NHbGtZV055SWpvaU1TSXNJbVpoYldsc2VWOXVZVzFsSWpvaVZtbGhibUVnVm1Wc1lYTnhkV1Y2SWl3aVoybDJaVzVmYm1GdFpTSTZJa3B2YzJVZ1UzUmxkbVZ1SWl3aWFXUjBlWEFpT2lKMWMyVnlJaXdpYVhCaFpHUnlJam9pTXpndU9TNHlNakF1TVRNeUlpd2libUZ0WlNJNklsWnBZVzVoSUZabGJHRnpjWFZsZWl3Z1NtOXpaU0JUZEdWMlpXNGlMQ0p2YVdRaU9pSmxNREpqTkRZMll5MWxPV1E0TFRSaFpESXRPV1U0WkMxa01XSmtOalpoTXpRek1ESWlMQ0p2Ym5CeVpXMWZjMmxrSWpvaVV5MHhMVFV0TWpFdE1qUTRPVGszT1RrME1DMHlOVFV5TURFNE56TXhMVEUzTURJM01Ua3pOVGt0TWpFNU9EQWlMQ0p3YkdGMFppSTZJamdpTENKd2RXbGtJam9pTVRBd016SXdNREZCTVVJd1FqTTVOQ0lzSW5Kb0lqb2lNUzVCVkZGQlVXZzRia05QTFVJeGExZENja1ZzTTJKRmRtMUdVVTFCUVVGQlFVRkJRVUYzUVVGQlFVRkJRVUZCUWxGQlVXc3dRVUV1SWl3aWMyTndJam9pVFdGcGJDNVNaV0ZrSUUxaGFXd3VVMlZ1WkNCdmNHVnVhV1FnY0hKdlptbHNaU0JWYzJWeUxsSmxZV1FnWlcxaGFXd2lMQ0p6YVdRaU9pSXdNREV5TlRjMllTMWpZVFUwTFRGbE1tTXRZbUprTkMxaE9UZGxORE14Tnpsak1UTWlMQ0p6YVdkdWFXNWZjM1JoZEdVaU9sc2lhMjF6YVNKZExDSnpkV0lpT2lKeFlVcFpWek0wTnpnMWFWaEVTbEpmYTJsUVpFcHlaMUY0WVU1UGNFNVliV2xZUkZobE4wbERTbWRaSWl3aWRHVnVZVzUwWDNKbFoybHZibDl6WTI5d1pTSTZJbE5CSWl3aWRHbGtJam9pTURneU56Rm1OREl0T0RGbFppMDBOV1EyTFRneFlXTXRORGszTnpaak5HSmxOakUxSWl3aWRXNXBjWFZsWDI1aGJXVWlPaUpxZG1saGJtRkFjMnRoYm1ScFlTNWpiMjB1WTI4aUxDSjFjRzRpT2lKcWRtbGhibUZBYzJ0aGJtUnBZUzVqYjIwdVkyOGlMQ0oxZEdraU9pSjNRVTVCUVdSMVltcEZObGxITjBKMlZsQlZXVUZCSWl3aWRtVnlJam9pTVM0d0lpd2lkMmxrY3lJNld5SmlOemxtWW1ZMFpDMHpaV1k1TFRRMk9Ea3RPREUwTXkwM05tSXhPVFJsT0RVMU1Ea2lYU3dpZUcxelgyRmpaQ0k2TVRjMU1qVTRPVEV5T0N3aWVHMXpYMkZqZEY5bVkzUWlPaUl6SURraUxDSjRiWE5mWm5Sa0lqb2laVlZmZVVsMmFXdzNRV1JQUzBOaVluRnVUVTVTZVRGVmVHSlpPSFl5VFROSWFVaE5Wa00yVFcxaU9FSmtXRTR6V2xoT01FMTVNV3RqTWpGNklpd2llRzF6WDJsa2NtVnNJam9pTVNBeUlpd2llRzF6WDNOMElqcDdJbk4xWWlJNkluTjBRbTVOTjFweE5ESnNNVkpHTW5STFJEQllRVkptWVU1RFVVRnZhRlp0WDFCVlYySmlhMFpmVVRnaWZTd2llRzF6WDNOMVlsOW1ZM1FpT2lJeklERXlJaXdpZUcxelgzUmpaSFFpT2pFek9UTTJNRE16TkRFc0luaHRjMTkwYm5SZlptTjBJam9pTXlBMkluMC5oU3JhR3lJWFNmSkpXMWtqUzBucXRHVU9vcjVUQzhBWVlxdHBDbG1xWGVtUGRJY2pCVmFVc2ozNUlMLTIwRmNnV09JS2hSX0gwVVVpNFNILWthX2JDaUdldzlhbTlwV1otbnIxR2pJc01MM3oxNkh3Y21qdzgxeTl1VlNVeGVkMmVjblR4cDdxaU42b3hpcVl1MHpOQ2FMZGhYeEd0dDB6dkhqS201T0pNN0tYdFRkMDlhNHpnVW5Hc29LTDVXVjhIU3hoeVd0LWNWWXkxdzNYMmVXSmFqeXhHVDdhUWhHLUxaaFlKbm0tbFZvbEgtLWhBbmpEVTRSdnAxS2c3WHpTNkFWLWkwSzBpbHdFcXl5OGZ3b2RaSVBDdW95VnppcHlPVUZvb1RlMnU1bG53dVJmSTVGeGdIcUgwdDV2N1pfQ1lJU2RNSjhLV194NTd0Ungwc29EYUEiLCJzdWIiOiI4ODIwZDZiNi03MjViLTQwNDQtYWRjYi1hM2UxOGEzOGU0ZmMiLCJnaXZlbl9uYW1lIjoiSm9zZSBTdGV2ZW4iLCJmYW1pbHlfbmFtZSI6IlZpYW5hIFZlbGFzcXVleiIsImVtYWlsIjoianZpYW5hQHNrYW5kaWEuY29tLmNvIiwibm9uY2UiOiIwMTljMjY3ZS0yODdkLTc3MzYtYWIzYi0zMmQ1MTRiYWE3YWEiLCJhenAiOiIwZWZhNWFhNy04OWRiLTQ5MTYtYmZlNC0wNTM3MjhlZWY2M2QiLCJ2ZXIiOiIxLjAiLCJpYXQiOjE3NzAxNzUzNzV9.iq5_XGYbTzWHs-oOGrC28e_fzBeAtE-jBZJdoCZ4aNNUSZbqUdBpWG260JdchanBnDivCieDiMIVvauN3x23qe4aIXpWZgxan4A05JIcP6Eg-tW_F2T5vckawXwHLto19d4JVwQXsuDd-pWRNNr7DsR3Sn5a6ZMQ6npvw4xFUA2NCY6EAcmTW2HDbjFKZFJBtbFYN7KKBSQCuEhnPJHPsKNEdoUT7JJ-jN_EyC4mxzauwqgFBsphOjxXZvBXkemlbyOsQFndg6mjtShjx6u0EH-g1oHoekzVSHmO7SNBc0bMlZj3dCSWEPMJUTNSTRoUtKdspOgRNLtVt-4KtJjL4g`),e.originalFetch(t,{...n,headers:r})}catch(e){return Promise.reject(e)}},this._isEnabled=!0,console.log(`Fetch interceptor initialized with test Authorization header (Native implementation).`)}destroy(){this._isEnabled&&(window.fetch=this.originalFetch,this._isEnabled=!1,console.log(`Fetch interceptor destroyed (Native implementation).`))}};let ar=new ir;var $=class extends k{constructor(...e){super(...e),this._chatController=new rr(this),this.backendUrl=``,this.appName=`Lit-Chat-App`,this.conversationUrl=``,this.agentAvatar=``,this.disclaimer=`Agent puede cometer errores. Verifica la información importante.`,this.emptyText=`¿En qué puedo ayudarte hoy?`,this.placeholder=`Enviar un mensaje a Agent`,this.headerTitle=`Agent`,this.hideHeader=!1,this.interceptor=!1,this._historyOpen=!1,this._inspectorOpen=!1,this._inspectorEnabled=!1}static#e=this.styles=Qe;get controller(){return this._chatController}firstUpdated(){this.dispatchEvent(new CustomEvent(`controller-ready`,{detail:this._chatController}))}connectedCallback(){super.connectedCallback(),this._injectFonts(),this.addEventListener(`a2uiaction`,this._handleA2UIAction)}_injectFonts(){[`https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:opsz,wght,FILL,GRAD@20..48,100..700,0..1,-50..200`,`https://fonts.googleapis.com/css2?family=Material+Symbols+Rounded:opsz,wght,FILL,GRAD@20..48,100..700,0..1,-50..200`].forEach(e=>{if(!document.querySelector(`link[href="${e}"]`)){let t=document.createElement(`link`);t.rel=`stylesheet`,t.href=e,document.head.appendChild(t)}})}disconnectedCallback(){this.removeEventListener(`a2uiaction`,this._handleA2UIAction),super.disconnectedCallback()}willUpdate(e){e.has(`interceptor`)&&(this.interceptor?this.enableFetchInterceptor():ar.destroy()),(e.has(`backendUrl`)||e.has(`appName`)||e.has(`conversationUrl`))&&(this._chatController.initialize({backendUrl:this.backendUrl,appName:this.appName,conversationUrl:this.conversationUrl,inspector:this.hasAttribute(`inspector`)||this.inspector}),this._inspectorEnabled=this.hasAttribute(`inspector`)||this.inspector)}enableFetchInterceptor(){console.warn(`Fetch interceptor is only available in development mode.`)}_handleSend(e){this._chatController.sendMessage(e.detail.content)}_handleNewThread(){this._chatController.startNewThread()}setAppContext(e){this._chatController.setAppContext(e)}setAppState(e){this._chatController.setAppState(e)}setAppLocation(e){this._chatController.setAppLocation(e)}setAppUI(e){this._chatController.setAppUI(e)}setAppFocus(e){this._chatController.setAppFocus(e)}setSuggestedPrompts(e){this._chatController.setSuggestedPrompts(e)}_toggleHistory(){this._historyOpen=!this._historyOpen,this._historyOpen&&this._chatController.refreshConversations()}_handleSelectThread(e){console.log(`Selected conversation:`,e.detail.conversation),this._chatController.loadConversation(e.detail.conversation.id),this._historyOpen=!1}_toggleInspector(){this._inspectorOpen=!this._inspectorOpen}render(){return S`
|
|
933
946
|
<div class="chat-layout">
|
|
934
947
|
${this.hideHeader?``:S`
|
|
935
948
|
<agent-chat-header
|
|
@@ -971,5 +984,5 @@
|
|
|
971
984
|
></agent-inspector-window>
|
|
972
985
|
`:``}
|
|
973
986
|
</div>
|
|
974
|
-
`}_handleContextUpdate(e){this.setAppContext(e.detail)}_handleA2UIAction(e){let{action:t}=e.detail;if(t)
|
|
987
|
+
`}_handleContextUpdate(e){this.setAppContext(e.detail)}_handleA2UIAction(e){let{action:t,surfaceId:n}=e.detail;if(!t)return;console.log(`AgentChat: A2UI Action received:`,t,`Surface:`,n);let r=n||Array.from(P.processor.getSurfaces().keys())[0]||`root`;if(t.name===`decision`){this._handleAuthDecision(t,r);return}this._handleGenericUrlAction(t,r)}_handleAuthDecision(e,t){let n=e.context||[],r=n.find(e=>e.key===`userDecision`),i=P.resolveValue(t,r?.value),a=n.find(e=>[`url`,`href`,`link`,`uri`].includes(e.key?.toLowerCase())),o=P.resolveValue(t,a?.value);if(console.log(`AgentChat: Specialized decision handler: ${i}`,e),i===`deny`){console.log(`AgentChat: User denied the request.`),this._chatController.sendMessage(`User selected "Deny" for action "${e.name}".`,`tool`);return}if(i===`approve`)if(o){console.log(`AgentChat: User selected "Approve". Opening auth URL: ${o}`);let t=window.open(o,`_blank`);if(t){let n=setInterval(()=>{t.closed&&(clearInterval(n),console.log(`AgentChat: Auth tab closed. Notifying approval.`),this._chatController.sendMessage(`User approved the request "${e.name}" and completed authentication.`,`tool`))},1e3)}else console.error(`AgentChat: Failed to open auth tab.`)}else console.log(`AgentChat: User approved (no URL provided).`),this._chatController.sendMessage(`User selected "Approve" for action "${e.name}".`,`tool`)}_handleGenericUrlAction(e,t){let n=e.context?.find(e=>[`url`,`href`,`link`,`uri`].includes(e.key?.toLowerCase())),r=P.resolveValue(t,n?.value);r?(console.log(`AgentChat: Opening generic URL: ${r}`),window.open(r,`_blank`)):e.name===`openLink`?console.warn(`AgentChat: openLink action received but no URL could be resolved:`,e):console.warn(`AgentChat: A2UI Action received without recognizable purpose:`,e)}_handleStateUpdate(e){this.setAppState(e.detail)}};N([j({type:String,attribute:`backend-url`})],$.prototype,`backendUrl`,void 0),N([j({type:String,attribute:`app-name`})],$.prototype,`appName`,void 0),N([j({type:String,attribute:`conversation-url`})],$.prototype,`conversationUrl`,void 0),N([j({type:String,attribute:`agent-avatar`})],$.prototype,`agentAvatar`,void 0),N([j({type:String,attribute:`disclaimer`})],$.prototype,`disclaimer`,void 0),N([j({type:String,attribute:`empty-text`})],$.prototype,`emptyText`,void 0),N([j({type:String,attribute:`placeholder`})],$.prototype,`placeholder`,void 0),N([j({type:String,attribute:`header-title`})],$.prototype,`headerTitle`,void 0),N([j({type:Boolean,attribute:`hide-header`})],$.prototype,`hideHeader`,void 0),N([j({type:Boolean,attribute:`interceptor`})],$.prototype,`interceptor`,void 0),N([M()],$.prototype,`_historyOpen`,void 0),N([M()],$.prototype,`_inspectorOpen`,void 0),N([M()],$.prototype,`_inspectorEnabled`,void 0),$=N([A(`agent-chat`)],$);function or(e,t={}){let n=document.createElement(`agent-chat`);return Object.keys(t).forEach(e=>{e in n&&(n[e]=t[e])}),e.appendChild(n),n}function sr(){}Object.defineProperty(e,`AgentChat`,{enumerable:!0,get:function(){return $}}),e.ChatController=rr,e.ChatPortalService=$n,e.ConversationService=tr,e.FetchInterceptorService=ir,e.chatPortalService=J,e.conversationService=Y,e.fetchInterceptorService=ar,e.mount=or,e.register=sr});
|
|
975
988
|
//# sourceMappingURL=site-operator.umd.js.map
|