@asgard-js/core 0.3.3 → 0.3.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -114,7 +114,7 @@ const client = new AsgardServiceClient({
114
114
 
115
115
  ## API Reference
116
116
 
117
- The core package exports three main classes for different levels of abstraction (`AsgardServiceClient`, `Channel`, `Conversation`), an `HttpError` class with an `isHttpError` type guard for HTTP failure handling, and authentication types for dynamic API key management:
117
+ The core package exports three main classes for different levels of abstraction (`AsgardServiceClient`, `Channel`, `Conversation`), an `HttpError` class with an `isHttpError` type guard for HTTP failure handling, authentication types for dynamic API key management, and a set of framework-agnostic **derived-state** helpers (Task Check List / Subagent List) for headless / non-React consumers — see [Derived State](#derived-state):
118
118
 
119
119
  <a id="asgardserviceclient"></a>
120
120
  <br/>
@@ -143,7 +143,9 @@ The main client class for interacting with the Asgard AI platform.
143
143
 
144
144
  - **fetchSse(payload, options?)**: Send a message via Server-Sent Events. `payload.action` is a `FetchSseAction` value — `NONE` for a normal message, `RESET_CHANNEL` to (re)initialize the channel, `RESPONSE_TOOL_CALL_CONSENT` to answer a consent prompt
145
145
  - **uploadFile(file, customChannelId)**: Upload file to Blob API and return BlobUploadResponse
146
- - **downloadCwdFile(relativePath, customChannelId)**: `Promise<CwdDownloadResult>` - Download a file from the channel sandbox working directory (backs `cwd://` URI actions); resolves to `{ blob, filename }`
146
+ - **downloadChannelHomeFile(relativePath, customChannelId)**: `Promise<ChannelHomeDownloadResult>` - Download a file from the channel's Channel Home file-exchange plane (backs `channel-home://` URI actions); resolves to `{ blob, filename }`
147
+ - **rejoinSse(customChannelId, options?)**: Cold-start transcript rejoin — a `GET /message/sse` with an empty `Last-Event-ID` that replays the channel's collapsed history through the same reducer, so a returning user sees their prior conversation without re-POSTing. Optional on `IAsgardServiceClient` for backward compatibility
148
+ - **channelMetadata(customChannelId)**: `Promise<ChannelMetadata | null>` - Join-init existence + restore gate — `GET /channel/metadata`; resolves to the metadata on `200`, `null` on `404` (channel does not exist), and rejects on any other error. `ChannelMetadata` is `{ title: string | null; runState: 'RUNNING' | 'IDLE'; lastActivityAt?: string }`. Optional on `IAsgardServiceClient` for backward compatibility
147
149
  - **on(event, handler)**: Listen to a specific SSE event. `event` must be an `EventType` value (e.g. `EventType.MESSAGE`), not a plain string; registering a listener for an event replaces any previous one
148
150
  - **detach({ timeoutMs })**: Detach from the owning component without aborting in-flight runs — the connection stays open so the backend can finish the current run, then auto-closes once all runs settle (or after `timeoutMs` as a safety net). Backs the React `keepConnectionOnUnmount` prop
149
151
  - **close()**: Close the SSE connection and clean up resources (idempotent)
@@ -169,12 +171,16 @@ Higher-level abstraction for managing a conversation channel with reactive state
169
171
 
170
172
  #### Static Methods
171
173
 
172
- - **Channel.reset(config, payload?, options?)**: `Promise<Channel>` - Create and initialize a new channel
174
+ - **Channel.reset(config, payload?, options?)**: `Promise<Channel>` - Create a channel and send `RESET_CHANNEL`, starting a fresh conversation (the server replies with a welcome message)
175
+ - **Channel.restore(config, options?)**: `Promise<Channel>` - Join an **existing** channel without resetting it — seeds the title from `config.channelTitle` and replays the server transcript via `rejoinSse`, preserving history / session / title. This is the join-without-wiping path behind the metadata-gated mount (F-015)
176
+ - **Channel.create(config)**: `Channel` - Create a channel and subscribe to its state without any SSE request (no reset, no rejoin); the first connection happens when you call `sendMessage`
173
177
 
174
178
  #### Instance Methods
175
179
 
176
180
  - **sendMessage(payload, options?)**: `Promise<void>` - Send a message through the channel
177
181
  - **replyToolCallConsents(answers, options?, payload?)**: `Promise<void>` - Reply to a pending tool-call consent prompt. `answers` is an array of `ToolCallConsentAnswer` (each `{ toolCallId, result, denyReason }`, where `result` is a `ToolCallConsentResult` value)
182
+ - **getTasks() / getSubagents() / getChannelTitle()**: `Task[]` / `Subagent[]` / `string | null` - Current immutable snapshots of the derived state (for `getSnapshot()`-style bridging; see [Derived State](#derived-state))
183
+ - **setChannelTitle(title)**: `void` - Seed or override the reactive channel title (F-016)
178
184
  - **close()**: `void` - Close the channel and cleanup subscriptions
179
185
 
180
186
  #### Configuration (ChannelConfig)
@@ -183,12 +189,16 @@ Higher-level abstraction for managing a conversation channel with reactive state
183
189
  - **customChannelId**: `string` - Unique channel identifier
184
190
  - **customMessageId?**: `string` - Optional message ID
185
191
  - **conversation**: `Conversation` - Initial conversation state
186
- - **statesObserver?**: `ObserverOrNext<ChannelStates>` - Observer for channel state changes
192
+ - **channelTitle?**: `string | null` - Seed for the reactive channel-title store (F-016), typically the `title` from `channelMetadata()`. `null` = unnamed
193
+ - **statesObserver?**: `ObserverOrNext<ChannelStates>` - Observer for channel state changes. `ChannelStates` carries `isConnecting`, `conversation`, and (since 0.3.x) the derived `tasks: Task[]`, `subagents: Subagent[]`, and `channelTitle: string | null`
187
194
 
188
195
  #### Properties
189
196
 
190
197
  - **customChannelId**: `string` - The channel identifier
191
198
  - **customMessageId?**: `string` - Optional message identifier
199
+ - **tasks$**: `Observable<Task[]>` - Reactive Task Check List store; replays the current snapshot and emits only when the list changes (F-010 / F-013)
200
+ - **subagents$**: `Observable<Subagent[]>` - Reactive Subagent List store; replays the current snapshot and emits only when the list changes (F-012 / F-013)
201
+ - **channelTitle$**: `Observable<string | null>` - Reactive channel-title store; seeded from metadata, updated by `title.update` (F-016)
192
202
 
193
203
  #### Example Usage
194
204
 
@@ -242,7 +252,9 @@ Immutable conversation state manager that handles message updates and SSE event
242
252
 
243
253
  - **ConversationUserMessage**: User-sent messages with `text` and `time`
244
254
  - **ConversationBotMessage**: Bot responses with `message`, `isTyping`, `typingText`, `eventType`
245
- - **ConversationToolCallMessage**: Tool-call entries with `toolName`, `reason`, `parameter`, `result`, `isComplete`
255
+ - **ConversationToolCallMessage**: Tool-call entries with `toolName`, `reason`, `parameter`, `result`, `isComplete`, and (since 0.3.x) `isError` (backend failure flag, F-009), `toolUseId` / `parentToolUseId` (subagent correlation, F-012)
256
+ - **ConversationThinkingMessage**: Extended-thinking (reasoning) block with `text` and `isThinking`, rendered as a collapsible block separate from the answer (F-001)
257
+ - **ConversationSubagentMessage**: Subagent lifecycle entry with `kind` (`start` / `complete`), `parentToolUseId`, `status`, `summary` (F-012)
246
258
  - **ConversationErrorMessage**: Error messages with `error` details
247
259
 
248
260
  #### Example Usage
@@ -383,20 +395,44 @@ await channel.replyToolCallConsents([
383
395
  - **`ToolCallConsentEventData`**: `{ processId, pendingCalls: ToolCallConsentPendingCall[] }`
384
396
  - **`ToolCallConsentAnswer`**: `{ toolCallId, result, denyReason }`
385
397
 
386
- <a id="cwd-download-result"></a>
398
+ <a id="channel-home-download-result"></a>
387
399
  <br/>
388
400
 
389
- ### CwdDownloadResult
401
+ ### ChannelHomeDownloadResult
390
402
 
391
- Returned by `client.downloadCwdFile()`:
403
+ Returned by `client.downloadChannelHomeFile()`:
392
404
 
393
405
  ```typescript
394
- interface CwdDownloadResult {
406
+ interface ChannelHomeDownloadResult {
395
407
  blob: Blob;
396
408
  filename: string;
397
409
  }
398
410
  ```
399
411
 
412
+ <a id="derived-state"></a>
413
+ <br/>
414
+
415
+ ### Derived State (Task Check List / Subagent List)
416
+
417
+ The Task Check List (F-010) and Subagent List (F-012) are pure folds over the conversation, exposed as **framework-agnostic** reactive slices so you can render them outside React — in Vue, Svelte, or vanilla JS. Each slice replays its current immutable snapshot and only emits when that slice actually changes (unrelated high-frequency message deltas are suppressed).
418
+
419
+ The simplest path is the reactive stores already on `Channel` (`channel.tasks$`, `channel.subagents$`, `channel.channelTitle$`) plus the snapshot getters (`getTasks()`, `getSubagents()`, `getChannelTitle()`). To build the slices from a bare `conversation$` yourself, use `createDerivedStores(conversation$)`:
420
+
421
+ ```typescript
422
+ import { createDerivedStores } from '@asgard-js/core';
423
+
424
+ const stores = createDerivedStores(conversation$);
425
+ // stores: { tasks$, subagents$, getTasks(), getSubagents(), teardown() }
426
+ const sub = stores.tasks$.subscribe(tasks => renderTaskList(tasks));
427
+ // ... later
428
+ sub.unsubscribe();
429
+ stores.teardown();
430
+ ```
431
+
432
+ For one-shot derivation without subscriptions, `deriveTasks(conversation)` and `deriveSubagents(conversation)` return the current lists directly. Lower-level building blocks are also exported: the reducers `reduceTaskEvents` / `reduceSubagents`, the type guards `isTaskTool` / `isAgentTool` / `isSubagentChildTool`, the adapter `conversationToSubagentEvents`, the structural-equality helpers `tasksEqual` / `subagentsEqual`, and the types `Task`, `Subagent`, `DerivedStores`, `TaskToolEvent`, `SubagentEvent`.
433
+
434
+ > In React, prefer the `useTaskList(channel)`, `useSubagents(channel)`, and `useChannelTitle(channel)` hooks from `@asgard-js/react`, which bridge these stores into `useSyncExternalStore` for you.
435
+
400
436
  <a id="development"></a>
401
437
  <br/>
402
438
 
package/dist/index.cjs CHANGED
@@ -1,5 +1,5 @@
1
1
  "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});class q extends Error{status;statusText;body;constructor(t,e,r){super(`HTTP ${t}: ${e}`),this.name="HttpError",this.status=t,this.statusText=e,this.body=r}}function tt(n){return n instanceof q}var N=(n=>(n.RESET_CHANNEL="RESET_CHANNEL",n.NONE="NONE",n.RESPONSE_TOOL_CALL_CONSENT="RESPONSE_TOOL_CALL_CONSENT",n))(N||{}),d=(n=>(n.INIT="asgard.run.init",n.PROCESS="asgard.process",n.PROCESS_START="asgard.process.start",n.PROCESS_COMPLETE="asgard.process.complete",n.MESSAGE="asgard.message",n.MESSAGE_START="asgard.message.start",n.MESSAGE_DELTA="asgard.message.delta",n.MESSAGE_COMPLETE="asgard.message.complete",n.MESSAGE_USER="asgard.message.user",n.MESSAGE_THINKING_START="asgard.message.thinking.start",n.MESSAGE_THINKING_DELTA="asgard.message.thinking.delta",n.MESSAGE_THINKING_COMPLETE="asgard.message.thinking.complete",n.TOOL_CALL="asgard.tool_call",n.TOOL_CALL_START="asgard.tool_call.start",n.TOOL_CALL_COMPLETE="asgard.tool_call.complete",n.TOOL_CALL_CONSENT="asgard.tool_call.consent",n.SUBAGENT_START="asgard.subagent.start",n.SUBAGENT_COMPLETE="asgard.subagent.complete",n.CHANNEL_TITLE_UPDATE="asgard.channel.title.update",n.DONE="asgard.run.done",n.ERROR="asgard.run.error",n))(d||{}),ve=(n=>(n.ALLOW_ONCE="ALLOW_ONCE",n.ALLOW_ALWAYS="ALLOW_ALWAYS",n.DENY_ONCE="DENY_ONCE",n))(ve||{}),ye=(n=>(n.TEXT="TEXT",n.HINT="HINT",n.BUTTON="BUTTON",n.IMAGE="IMAGE",n.VIDEO="VIDEO",n.AUDIO="AUDIO",n.LOCATION="LOCATION",n.CAROUSEL="CAROUSEL",n.CHART="CHART",n.TABLE="TABLE",n.ATTACHMENT="ATTACHMENT",n))(ye||{}),J=function(n,t){return J=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,r){e.__proto__=r}||function(e,r){for(var s in r)Object.prototype.hasOwnProperty.call(r,s)&&(e[s]=r[s])},J(n,t)};function w(n,t){if(typeof t!="function"&&t!==null)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");J(n,t);function e(){this.constructor=n}n.prototype=t===null?Object.create(t):(e.prototype=t.prototype,new e)}function nt(n,t,e,r){function s(o){return o instanceof e?o:new e(function(i){i(o)})}return new(e||(e=Promise))(function(o,i){function a(h){try{c(r.next(h))}catch(g){i(g)}}function u(h){try{c(r.throw(h))}catch(g){i(g)}}function c(h){h.done?o(h.value):s(h.value).then(a,u)}c((r=r.apply(n,t||[])).next())})}function be(n,t){var e={label:0,sent:function(){if(o[0]&1)throw o[1];return o[1]},trys:[],ops:[]},r,s,o,i=Object.create((typeof Iterator=="function"?Iterator:Object).prototype);return i.next=a(0),i.throw=a(1),i.return=a(2),typeof Symbol=="function"&&(i[Symbol.iterator]=function(){return this}),i;function a(c){return function(h){return u([c,h])}}function u(c){if(r)throw new TypeError("Generator is already executing.");for(;i&&(i=0,c[0]&&(e=0)),e;)try{if(r=1,s&&(o=c[0]&2?s.return:c[0]?s.throw||((o=s.return)&&o.call(s),0):s.next)&&!(o=o.call(s,c[1])).done)return o;switch(s=0,o&&(c=[c[0]&2,o.value]),c[0]){case 0:case 1:o=c;break;case 4:return e.label++,{value:c[1],done:!1};case 5:e.label++,s=c[1],c=[0];continue;case 7:c=e.ops.pop(),e.trys.pop();continue;default:if(o=e.trys,!(o=o.length>0&&o[o.length-1])&&(c[0]===6||c[0]===2)){e=0;continue}if(c[0]===3&&(!o||c[1]>o[0]&&c[1]<o[3])){e.label=c[1];break}if(c[0]===6&&e.label<o[1]){e.label=o[1],o=c;break}if(o&&e.label<o[2]){e.label=o[2],e.ops.push(c);break}o[2]&&e.ops.pop(),e.trys.pop();continue}c=t.call(n,e)}catch(h){c=[6,h],s=0}finally{r=o=0}if(c[0]&5)throw c[1];return{value:c[0]?c[1]:void 0,done:!0}}}function k(n){var t=typeof Symbol=="function"&&Symbol.iterator,e=t&&n[t],r=0;if(e)return e.call(n);if(n&&typeof n.length=="number")return{next:function(){return n&&r>=n.length&&(n=void 0),{value:n&&n[r++],done:!n}}};throw new TypeError(t?"Object is not iterable.":"Symbol.iterator is not defined.")}function j(n,t){var e=typeof Symbol=="function"&&n[Symbol.iterator];if(!e)return n;var r=e.call(n),s,o=[],i;try{for(;(t===void 0||t-- >0)&&!(s=r.next()).done;)o.push(s.value)}catch(a){i={error:a}}finally{try{s&&!s.done&&(e=r.return)&&e.call(r)}finally{if(i)throw i.error}}return o}function D(n,t,e){if(e||arguments.length===2)for(var r=0,s=t.length,o;r<s;r++)(o||!(r in t))&&(o||(o=Array.prototype.slice.call(t,0,r)),o[r]=t[r]);return n.concat(o||Array.prototype.slice.call(t))}function L(n){return this instanceof L?(this.v=n,this):new L(n)}function rt(n,t,e){if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var r=e.apply(n,t||[]),s,o=[];return s=Object.create((typeof AsyncIterator=="function"?AsyncIterator:Object).prototype),a("next"),a("throw"),a("return",i),s[Symbol.asyncIterator]=function(){return this},s;function i(l){return function(f){return Promise.resolve(f).then(l,g)}}function a(l,f){r[l]&&(s[l]=function(p){return new Promise(function(A,E){o.push([l,p,A,E])>1||u(l,p)})},f&&(s[l]=f(s[l])))}function u(l,f){try{c(r[l](f))}catch(p){v(o[0][3],p)}}function c(l){l.value instanceof L?Promise.resolve(l.value.v).then(h,g):v(o[0][2],l)}function h(l){u("next",l)}function g(l){u("throw",l)}function v(l,f){l(f),o.shift(),o.length&&u(o[0][0],o[0][1])}}function st(n){if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var t=n[Symbol.asyncIterator],e;return t?t.call(n):(n=typeof k=="function"?k(n):n[Symbol.iterator](),e={},r("next"),r("throw"),r("return"),e[Symbol.asyncIterator]=function(){return this},e);function r(o){e[o]=n[o]&&function(i){return new Promise(function(a,u){i=n[o](i),s(a,u,i.done,i.value)})}}function s(o,i,a,u){Promise.resolve(u).then(function(c){o({value:c,done:a})},i)}}function m(n){return typeof n=="function"}function Se(n){var t=function(r){Error.call(r),r.stack=new Error().stack},e=n(t);return e.prototype=Object.create(Error.prototype),e.prototype.constructor=e,e}var X=Se(function(n){return function(e){n(this),this.message=e?e.length+` errors occurred during unsubscription:
2
2
  `+e.map(function(r,s){return s+1+") "+r.toString()}).join(`
3
3
  `):"",this.name="UnsubscriptionError",this.errors=e}});function F(n,t){if(n){var e=n.indexOf(t);0<=e&&n.splice(e,1)}}var U=(function(){function n(t){this.initialTeardown=t,this.closed=!1,this._parentage=null,this._finalizers=null}return n.prototype.unsubscribe=function(){var t,e,r,s,o;if(!this.closed){this.closed=!0;var i=this._parentage;if(i)if(this._parentage=null,Array.isArray(i))try{for(var a=k(i),u=a.next();!u.done;u=a.next()){var c=u.value;c.remove(this)}}catch(p){t={error:p}}finally{try{u&&!u.done&&(e=a.return)&&e.call(a)}finally{if(t)throw t.error}}else i.remove(this);var h=this.initialTeardown;if(m(h))try{h()}catch(p){o=p instanceof X?p.errors:[p]}var g=this._finalizers;if(g){this._finalizers=null;try{for(var v=k(g),l=v.next();!l.done;l=v.next()){var f=l.value;try{ie(f)}catch(p){o=o??[],p instanceof X?o=D(D([],j(o)),j(p.errors)):o.push(p)}}}catch(p){r={error:p}}finally{try{l&&!l.done&&(s=v.return)&&s.call(v)}finally{if(r)throw r.error}}}if(o)throw new X(o)}},n.prototype.add=function(t){var e;if(t&&t!==this)if(this.closed)ie(t);else{if(t instanceof n){if(t.closed||t._hasParent(this))return;t._addParent(this)}(this._finalizers=(e=this._finalizers)!==null&&e!==void 0?e:[]).push(t)}},n.prototype._hasParent=function(t){var e=this._parentage;return e===t||Array.isArray(e)&&e.includes(t)},n.prototype._addParent=function(t){var e=this._parentage;this._parentage=Array.isArray(e)?(e.push(t),e):e?[e,t]:t},n.prototype._removeParent=function(t){var e=this._parentage;e===t?this._parentage=null:Array.isArray(e)&&F(e,t)},n.prototype.remove=function(t){var e=this._finalizers;e&&F(e,t),t instanceof n&&t._removeParent(this)},n.EMPTY=(function(){var t=new n;return t.closed=!0,t})(),n})(),Ee=U.EMPTY;function Ie(n){return n instanceof U||n&&"closed"in n&&m(n.remove)&&m(n.add)&&m(n.unsubscribe)}function ie(n){m(n)?n():n.unsubscribe()}var ot={Promise:void 0},it={setTimeout:function(n,t){for(var e=[],r=2;r<arguments.length;r++)e[r-2]=arguments[r];return setTimeout.apply(void 0,D([n,t],j(e)))},clearTimeout:function(n){return clearTimeout(n)},delegate:void 0};function we(n){it.setTimeout(function(){throw n})}function Q(){}function K(n){n()}var ne=(function(n){w(t,n);function t(e){var r=n.call(this)||this;return r.isStopped=!1,e?(r.destination=e,Ie(e)&&e.add(r)):r.destination=ut,r}return t.create=function(e,r,s){return new Z(e,r,s)},t.prototype.next=function(e){this.isStopped||this._next(e)},t.prototype.error=function(e){this.isStopped||(this.isStopped=!0,this._error(e))},t.prototype.complete=function(){this.isStopped||(this.isStopped=!0,this._complete())},t.prototype.unsubscribe=function(){this.closed||(this.isStopped=!0,n.prototype.unsubscribe.call(this),this.destination=null)},t.prototype._next=function(e){this.destination.next(e)},t.prototype._error=function(e){try{this.destination.error(e)}finally{this.unsubscribe()}},t.prototype._complete=function(){try{this.destination.complete()}finally{this.unsubscribe()}},t})(U),at=(function(){function n(t){this.partialObserver=t}return n.prototype.next=function(t){var e=this.partialObserver;if(e.next)try{e.next(t)}catch(r){G(r)}},n.prototype.error=function(t){var e=this.partialObserver;if(e.error)try{e.error(t)}catch(r){G(r)}else G(t)},n.prototype.complete=function(){var t=this.partialObserver;if(t.complete)try{t.complete()}catch(e){G(e)}},n})(),Z=(function(n){w(t,n);function t(e,r,s){var o=n.call(this)||this,i;return m(e)||!e?i={next:e??void 0,error:r??void 0,complete:s??void 0}:i=e,o.destination=new at(i),o}return t})(ne);function G(n){we(n)}function ct(n){throw n}var ut={closed:!0,next:Q,error:ct,complete:Q},re=(function(){return typeof Symbol=="function"&&Symbol.observable||"@@observable"})();function V(n){return n}function lt(n){return n.length===0?V:n.length===1?n[0]:function(e){return n.reduce(function(r,s){return s(r)},e)}}var S=(function(){function n(t){t&&(this._subscribe=t)}return n.prototype.lift=function(t){var e=new n;return e.source=this,e.operator=t,e},n.prototype.subscribe=function(t,e,r){var s=this,o=ht(t)?t:new Z(t,e,r);return K(function(){var i=s,a=i.operator,u=i.source;o.add(a?a.call(o,u):u?s._subscribe(o):s._trySubscribe(o))}),o},n.prototype._trySubscribe=function(t){try{return this._subscribe(t)}catch(e){t.error(e)}},n.prototype.forEach=function(t,e){var r=this;return e=ae(e),new e(function(s,o){var i=new Z({next:function(a){try{t(a)}catch(u){o(u),i.unsubscribe()}},error:o,complete:s});r.subscribe(i)})},n.prototype._subscribe=function(t){var e;return(e=this.source)===null||e===void 0?void 0:e.subscribe(t)},n.prototype[re]=function(){return this},n.prototype.pipe=function(){for(var t=[],e=0;e<arguments.length;e++)t[e]=arguments[e];return lt(t)(this)},n.prototype.toPromise=function(t){var e=this;return t=ae(t),new t(function(r,s){var o;e.subscribe(function(i){return o=i},function(i){return s(i)},function(){return r(o)})})},n.create=function(t){return new n(t)},n})();function ae(n){var t;return(t=n??ot.Promise)!==null&&t!==void 0?t:Promise}function dt(n){return n&&m(n.next)&&m(n.error)&&m(n.complete)}function ht(n){return n&&n instanceof ne||dt(n)&&Ie(n)}function ft(n){return m(n?.lift)}function M(n){return function(t){if(ft(t))return t.lift(function(e){try{return n(e,this)}catch(r){this.error(r)}});throw new TypeError("Unable to lift unknown Observable type")}}function O(n,t,e,r,s){return new pt(n,t,e,r,s)}var pt=(function(n){w(t,n);function t(e,r,s,o,i,a){var u=n.call(this,e)||this;return u.onFinalize=i,u.shouldUnsubscribe=a,u._next=r?function(c){try{r(c)}catch(h){e.error(h)}}:n.prototype._next,u._error=o?function(c){try{o(c)}catch(h){e.error(h)}finally{this.unsubscribe()}}:n.prototype._error,u._complete=s?function(){try{s()}catch(c){e.error(c)}finally{this.unsubscribe()}}:n.prototype._complete,u}return t.prototype.unsubscribe=function(){var e;if(!this.shouldUnsubscribe||this.shouldUnsubscribe()){var r=this.closed;n.prototype.unsubscribe.call(this),!r&&((e=this.onFinalize)===null||e===void 0||e.call(this))}},t})(ne),gt=Se(function(n){return function(){n(this),this.name="ObjectUnsubscribedError",this.message="object unsubscribed"}}),se=(function(n){w(t,n);function t(){var e=n.call(this)||this;return e.closed=!1,e.currentObservers=null,e.observers=[],e.isStopped=!1,e.hasError=!1,e.thrownError=null,e}return t.prototype.lift=function(e){var r=new ce(this,this);return r.operator=e,r},t.prototype._throwIfClosed=function(){if(this.closed)throw new gt},t.prototype.next=function(e){var r=this;K(function(){var s,o;if(r._throwIfClosed(),!r.isStopped){r.currentObservers||(r.currentObservers=Array.from(r.observers));try{for(var i=k(r.currentObservers),a=i.next();!a.done;a=i.next()){var u=a.value;u.next(e)}}catch(c){s={error:c}}finally{try{a&&!a.done&&(o=i.return)&&o.call(i)}finally{if(s)throw s.error}}}})},t.prototype.error=function(e){var r=this;K(function(){if(r._throwIfClosed(),!r.isStopped){r.hasError=r.isStopped=!0,r.thrownError=e;for(var s=r.observers;s.length;)s.shift().error(e)}})},t.prototype.complete=function(){var e=this;K(function(){if(e._throwIfClosed(),!e.isStopped){e.isStopped=!0;for(var r=e.observers;r.length;)r.shift().complete()}})},t.prototype.unsubscribe=function(){this.isStopped=this.closed=!0,this.observers=this.currentObservers=null},Object.defineProperty(t.prototype,"observed",{get:function(){var e;return((e=this.observers)===null||e===void 0?void 0:e.length)>0},enumerable:!1,configurable:!0}),t.prototype._trySubscribe=function(e){return this._throwIfClosed(),n.prototype._trySubscribe.call(this,e)},t.prototype._subscribe=function(e){return this._throwIfClosed(),this._checkFinalizedStatuses(e),this._innerSubscribe(e)},t.prototype._innerSubscribe=function(e){var r=this,s=this,o=s.hasError,i=s.isStopped,a=s.observers;return o||i?Ee:(this.currentObservers=null,a.push(e),new U(function(){r.currentObservers=null,F(a,e)}))},t.prototype._checkFinalizedStatuses=function(e){var r=this,s=r.hasError,o=r.thrownError,i=r.isStopped;s?e.error(o):i&&e.complete()},t.prototype.asObservable=function(){var e=new S;return e.source=this,e},t.create=function(e,r){return new ce(e,r)},t})(S),ce=(function(n){w(t,n);function t(e,r){var s=n.call(this)||this;return s.destination=e,s.source=r,s}return t.prototype.next=function(e){var r,s;(s=(r=this.destination)===null||r===void 0?void 0:r.next)===null||s===void 0||s.call(r,e)},t.prototype.error=function(e){var r,s;(s=(r=this.destination)===null||r===void 0?void 0:r.error)===null||s===void 0||s.call(r,e)},t.prototype.complete=function(){var e,r;(r=(e=this.destination)===null||e===void 0?void 0:e.complete)===null||r===void 0||r.call(e)},t.prototype._subscribe=function(e){var r,s;return(s=(r=this.source)===null||r===void 0?void 0:r.subscribe(e))!==null&&s!==void 0?s:Ee},t})(se),R=(function(n){w(t,n);function t(e){var r=n.call(this)||this;return r._value=e,r}return Object.defineProperty(t.prototype,"value",{get:function(){return this.getValue()},enumerable:!1,configurable:!0}),t.prototype._subscribe=function(e){var r=n.prototype._subscribe.call(this,e);return!r.closed&&e.next(this._value),r},t.prototype.getValue=function(){var e=this,r=e.hasError,s=e.thrownError,o=e._value;if(r)throw s;return this._throwIfClosed(),o},t.prototype.next=function(e){n.prototype.next.call(this,this._value=e)},t})(se),mt={now:function(){return Date.now()}},vt=(function(n){w(t,n);function t(e,r){return n.call(this)||this}return t.prototype.schedule=function(e,r){return this},t})(U),ue={setInterval:function(n,t){for(var e=[],r=2;r<arguments.length;r++)e[r-2]=arguments[r];return setInterval.apply(void 0,D([n,t],j(e)))},clearInterval:function(n){return clearInterval(n)},delegate:void 0},yt=(function(n){w(t,n);function t(e,r){var s=n.call(this,e,r)||this;return s.scheduler=e,s.work=r,s.pending=!1,s}return t.prototype.schedule=function(e,r){var s;if(r===void 0&&(r=0),this.closed)return this;this.state=e;var o=this.id,i=this.scheduler;return o!=null&&(this.id=this.recycleAsyncId(i,o,r)),this.pending=!0,this.delay=r,this.id=(s=this.id)!==null&&s!==void 0?s:this.requestAsyncId(i,this.id,r),this},t.prototype.requestAsyncId=function(e,r,s){return s===void 0&&(s=0),ue.setInterval(e.flush.bind(e,this),s)},t.prototype.recycleAsyncId=function(e,r,s){if(s===void 0&&(s=0),s!=null&&this.delay===s&&this.pending===!1)return r;r!=null&&ue.clearInterval(r)},t.prototype.execute=function(e,r){if(this.closed)return new Error("executing a cancelled action");this.pending=!1;var s=this._execute(e,r);if(s)return s;this.pending===!1&&this.id!=null&&(this.id=this.recycleAsyncId(this.scheduler,this.id,null))},t.prototype._execute=function(e,r){var s=!1,o;try{this.work(e)}catch(i){s=!0,o=i||new Error("Scheduled action threw falsy error")}if(s)return this.unsubscribe(),o},t.prototype.unsubscribe=function(){if(!this.closed){var e=this,r=e.id,s=e.scheduler,o=s.actions;this.work=this.state=this.scheduler=null,this.pending=!1,F(o,this),r!=null&&(this.id=this.recycleAsyncId(s,r,null)),this.delay=null,n.prototype.unsubscribe.call(this)}},t})(vt),le=(function(){function n(t,e){e===void 0&&(e=n.now),this.schedulerActionCtor=t,this.now=e}return n.prototype.schedule=function(t,e,r){return e===void 0&&(e=0),new this.schedulerActionCtor(this,t).schedule(r,e)},n.now=mt.now,n})(),bt=(function(n){w(t,n);function t(e,r){r===void 0&&(r=le.now);var s=n.call(this,e,r)||this;return s.actions=[],s._active=!1,s}return t.prototype.flush=function(e){var r=this.actions;if(this._active){r.push(e);return}var s;this._active=!0;do if(s=e.execute(e.state,e.delay))break;while(e=r.shift());if(this._active=!1,s){for(;e=r.shift();)e.unsubscribe();throw s}},t})(le),Te=new bt(yt),St=Te,Et=new S(function(n){return n.complete()});function Ce(n){return n&&m(n.schedule)}function Oe(n){return n[n.length-1]}function It(n){return m(Oe(n))?n.pop():void 0}function Ae(n){return Ce(Oe(n))?n.pop():void 0}var _e=(function(n){return n&&typeof n.length=="number"&&typeof n!="function"});function Me(n){return m(n?.then)}function xe(n){return m(n[re])}function Le(n){return Symbol.asyncIterator&&m(n?.[Symbol.asyncIterator])}function ke(n){return new TypeError("You provided "+(n!==null&&typeof n=="object"?"an invalid object":"'"+n+"'")+" where a stream was expected. You can provide an Observable, Promise, ReadableStream, Array, AsyncIterable, or Iterable.")}function wt(){return typeof Symbol!="function"||!Symbol.iterator?"@@iterator":Symbol.iterator}var Pe=wt();function Ue(n){return m(n?.[Pe])}function Ne(n){return rt(this,arguments,function(){var e,r,s,o;return be(this,function(i){switch(i.label){case 0:e=n.getReader(),i.label=1;case 1:i.trys.push([1,,9,10]),i.label=2;case 2:return[4,L(e.read())];case 3:return r=i.sent(),s=r.value,o=r.done,o?[4,L(void 0)]:[3,5];case 4:return[2,i.sent()];case 5:return[4,L(s)];case 6:return[4,i.sent()];case 7:return i.sent(),[3,2];case 8:return[3,10];case 9:return e.releaseLock(),[7];case 10:return[2]}})})}function Re(n){return m(n?.getReader)}function x(n){if(n instanceof S)return n;if(n!=null){if(xe(n))return Tt(n);if(_e(n))return Ct(n);if(Me(n))return Ot(n);if(Le(n))return $e(n);if(Ue(n))return At(n);if(Re(n))return _t(n)}throw ke(n)}function Tt(n){return new S(function(t){var e=n[re]();if(m(e.subscribe))return e.subscribe(t);throw new TypeError("Provided object does not correctly implement Symbol.observable")})}function Ct(n){return new S(function(t){for(var e=0;e<n.length&&!t.closed;e++)t.next(n[e]);t.complete()})}function Ot(n){return new S(function(t){n.then(function(e){t.closed||(t.next(e),t.complete())},function(e){return t.error(e)}).then(null,we)})}function At(n){return new S(function(t){var e,r;try{for(var s=k(n),o=s.next();!o.done;o=s.next()){var i=o.value;if(t.next(i),t.closed)return}}catch(a){e={error:a}}finally{try{o&&!o.done&&(r=s.return)&&r.call(s)}finally{if(e)throw e.error}}t.complete()})}function $e(n){return new S(function(t){Mt(n,t).catch(function(e){return t.error(e)})})}function _t(n){return $e(Ne(n))}function Mt(n,t){var e,r,s,o;return nt(this,void 0,void 0,function(){var i,a;return be(this,function(u){switch(u.label){case 0:u.trys.push([0,5,6,11]),e=st(n),u.label=1;case 1:return[4,e.next()];case 2:if(r=u.sent(),!!r.done)return[3,4];if(i=r.value,t.next(i),t.closed)return[2];u.label=3;case 3:return[3,1];case 4:return[3,11];case 5:return a=u.sent(),s={error:a},[3,11];case 6:return u.trys.push([6,,9,10]),r&&!r.done&&(o=e.return)?[4,o.call(e)]:[3,8];case 7:u.sent(),u.label=8;case 8:return[3,10];case 9:if(s)throw s.error;return[7];case 10:return[7];case 11:return t.complete(),[2]}})})}function C(n,t,e,r,s){r===void 0&&(r=0),s===void 0&&(s=!1);var o=t.schedule(function(){e(),s?n.add(this.schedule(null,r)):this.unsubscribe()},r);if(n.add(o),!s)return o}function je(n,t){return t===void 0&&(t=0),M(function(e,r){e.subscribe(O(r,function(s){return C(r,n,function(){return r.next(s)},t)},function(){return C(r,n,function(){return r.complete()},t)},function(s){return C(r,n,function(){return r.error(s)},t)}))})}function De(n,t){return t===void 0&&(t=0),M(function(e,r){r.add(n.schedule(function(){return e.subscribe(r)},t))})}function xt(n,t){return x(n).pipe(De(t),je(t))}function Lt(n,t){return x(n).pipe(De(t),je(t))}function kt(n,t){return new S(function(e){var r=0;return t.schedule(function(){r===n.length?e.complete():(e.next(n[r++]),e.closed||this.schedule())})})}function Pt(n,t){return new S(function(e){var r;return C(e,t,function(){r=n[Pe](),C(e,t,function(){var s,o,i;try{s=r.next(),o=s.value,i=s.done}catch(a){e.error(a);return}i?e.complete():e.next(o)},0,!0)}),function(){return m(r?.return)&&r.return()}})}function He(n,t){if(!n)throw new Error("Iterable cannot be null");return new S(function(e){C(e,t,function(){var r=n[Symbol.asyncIterator]();C(e,t,function(){r.next().then(function(s){s.done?e.complete():e.next(s.value)})},0,!0)})})}function Ut(n,t){return He(Ne(n),t)}function Nt(n,t){if(n!=null){if(xe(n))return xt(n,t);if(_e(n))return kt(n,t);if(Me(n))return Lt(n,t);if(Le(n))return He(n,t);if(Ue(n))return Pt(n,t);if(Re(n))return Ut(n,t)}throw ke(n)}function oe(n,t){return t?Nt(n,t):x(n)}function Rt(){for(var n=[],t=0;t<arguments.length;t++)n[t]=arguments[t];var e=Ae(n);return oe(n,e)}function $t(n){return n instanceof Date&&!isNaN(n)}function P(n,t){return M(function(e,r){var s=0;e.subscribe(O(r,function(o){r.next(n.call(t,o,s++))}))})}var jt=Array.isArray;function Dt(n,t){return jt(t)?n.apply(void 0,D([],j(t))):n(t)}function Ht(n){return P(function(t){return Dt(n,t)})}var Gt=Array.isArray,Kt=Object.getPrototypeOf,Ft=Object.prototype,Bt=Object.keys;function qt(n){if(n.length===1){var t=n[0];if(Gt(t))return{args:t,keys:null};if(Vt(t)){var e=Bt(t);return{args:e.map(function(r){return t[r]}),keys:e}}}return{args:n,keys:null}}function Vt(n){return n&&typeof n=="object"&&Kt(n)===Ft}function Yt(n,t){return n.reduce(function(e,r,s){return e[r]=t[s],e},{})}function Wt(){for(var n=[],t=0;t<arguments.length;t++)n[t]=arguments[t];var e=Ae(n),r=It(n),s=qt(n),o=s.args,i=s.keys;if(o.length===0)return oe([],e);var a=new S(Xt(o,e,i?function(u){return Yt(i,u)}:V));return r?a.pipe(Ht(r)):a}function Xt(n,t,e){return e===void 0&&(e=V),function(r){de(t,function(){for(var s=n.length,o=new Array(s),i=s,a=s,u=function(h){de(t,function(){var g=oe(n[h],t),v=!1;g.subscribe(O(r,function(l){o[h]=l,v||(v=!0,a--),a||r.next(e(o.slice()))},function(){--i||r.complete()}))},r)},c=0;c<s;c++)u(c)},r)}}function de(n,t,e){n?C(e,n,t):t()}function zt(n,t,e,r,s,o,i,a){var u=[],c=0,h=0,g=!1,v=function(){g&&!u.length&&!c&&t.complete()},l=function(p){return c<r?f(p):u.push(p)},f=function(p){c++;var A=!1;x(e(p,h++)).subscribe(O(t,function(E){t.next(E)},function(){A=!0},void 0,function(){if(A)try{c--;for(var E=function(){var _=u.shift();i||f(_)};u.length&&c<r;)E();v()}catch(_){t.error(_)}}))};return n.subscribe(O(t,l,function(){g=!0,v()})),function(){}}function B(n,t,e){return e===void 0&&(e=1/0),m(t)?B(function(r,s){return P(function(o,i){return t(r,o,s,i)})(x(n(r,s)))},e):(typeof t=="number"&&(e=t),M(function(r,s){return zt(r,s,n,e)}))}function Jt(n,t,e){n===void 0&&(n=0),e===void 0&&(e=St);var r=-1;return t!=null&&(Ce(t)?e=t:r=t),new S(function(s){var o=$t(n)?+n-e.now():n;o<0&&(o=0);var i=0;return e.schedule(function(){s.closed||(s.next(i++),0<=r?this.schedule(void 0,r):s.complete())},o)})}function Qt(n,t){return m(t)?B(n,t,1):B(n,1)}function Zt(n){return n<=0?function(){return Et}:M(function(t,e){var r=0;t.subscribe(O(e,function(s){++r<=n&&(e.next(s),n<=r&&e.complete())}))})}function en(n){return P(function(){return n})}function tn(n,t){return B(function(e,r){return x(n(e,r)).pipe(Zt(1),en(e))})}function nn(n,t){t===void 0&&(t=Te);var e=Jt(n,t);return tn(function(){return e})}function ee(n,t){return t===void 0&&(t=V),n=n??rn,M(function(e,r){var s,o=!0;e.subscribe(O(r,function(i){var a=t(i);(o||!n(s,a))&&(o=!1,s=a,r.next(i))}))})}function rn(n,t){return n===t}function sn(n){return M(function(t,e){x(n).subscribe(O(e,function(){return e.complete()},Q)),!e.closed&&t.subscribe(e)})}async function on(n,t){const e=n.getReader();let r;for(;!(r=await e.read()).done;)t(r.value)}function an(n){let t,e,r,s=!1;return function(i){t===void 0?(t=i,e=0,r=-1):t=un(t,i);const a=t.length;let u=0;for(;e<a;){s&&(t[e]===10&&(u=++e),s=!1);let c=-1;for(;e<a&&c===-1;++e)switch(t[e]){case 58:r===-1&&(r=e-u);break;case 13:s=!0;case 10:c=e;break}if(c===-1)break;n(t.subarray(u,c),r),u=e,r=-1}u===a?t=void 0:u!==0&&(t=t.subarray(u),e-=u)}}function cn(n,t,e){let r=he();const s=new TextDecoder;return function(i,a){if(i.length===0)e?.(r),r=he();else if(a>0){const u=s.decode(i.subarray(0,a)),c=a+(i[a+1]===32?2:1),h=s.decode(i.subarray(c));switch(u){case"data":r.data=r.data?r.data+`
4
- `+h:h;break;case"event":r.event=h;break;case"id":n(r.id=h);break;case"retry":const g=parseInt(h,10);isNaN(g)||t(r.retry=g);break}}}}function un(n,t){const e=new Uint8Array(n.length+t.length);return e.set(n),e.set(t,n.length),e}function he(){return{data:"",event:"",id:"",retry:void 0}}var ln=function(n,t){var e={};for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&t.indexOf(r)<0&&(e[r]=n[r]);if(n!=null&&typeof Object.getOwnPropertySymbols=="function")for(var s=0,r=Object.getOwnPropertySymbols(n);s<r.length;s++)t.indexOf(r[s])<0&&Object.prototype.propertyIsEnumerable.call(n,r[s])&&(e[r[s]]=n[r[s]]);return e};const te="text/event-stream",dn=1e3,fe="last-event-id";function hn(n,t){var{signal:e,headers:r,onopen:s,onmessage:o,onclose:i,onerror:a,openWhenHidden:u,fetch:c}=t,h=ln(t,["signal","headers","onopen","onmessage","onclose","onerror","openWhenHidden","fetch"]);return new Promise((g,v)=>{const l=Object.assign({},r);l.accept||(l.accept=te);let f;function p(){f.abort(),document.hidden||Y()}u||document.addEventListener("visibilitychange",p);let A=dn,E=0;function _(){document.removeEventListener("visibilitychange",p),window.clearTimeout(E),f.abort()}e?.addEventListener("abort",()=>{_(),g()});const Ze=c??window.fetch,et=s??fn;async function Y(){var W;f=new AbortController;try{const H=await Ze(n,Object.assign(Object.assign({},h),{headers:l,signal:f.signal}));await et(H),await on(H.body,an(cn(T=>{T?l[fe]=T:delete l[fe]},T=>{A=T},o))),i?.(),_(),g()}catch(H){if(!f.signal.aborted)try{const T=(W=a?.(H))!==null&&W!==void 0?W:A;window.clearTimeout(E),E=window.setTimeout(Y,T)}catch(T){_(),v(T)}}}Y()})}function fn(n){const t=n.headers.get("content-type");if(!t?.startsWith(te))throw new Error(`Expected content-type to be ${te}, Actual: ${t}`)}function pe(n){const{endpoint:t,apiKey:e,payload:r,debugMode:s,customHeaders:o}=n,i=n.method??"POST";return new S(a=>{const u=new AbortController;let c,h=!1;const g={"Content-Type":"application/json",...o};e&&(g["X-API-KEY"]=e);const v=new URL(t);return s&&v.searchParams.set("is_debug","true"),hn(v.toString(),{method:i,headers:g,body:i==="POST"&&r?JSON.stringify(r):void 0,signal:u.signal,openWhenHidden:!0,onopen:async l=>{if(l.ok)c=l.headers.get("X-Trace-Id")??void 0;else{let f;try{f=await l.json()}catch{try{f=await l.text()}catch{f=null}}a.error(new q(l.status,l.statusText,f)),u.abort()}},onmessage:l=>{l.id&&(h=!0);const f=JSON.parse(l.data);c?f.traceId=c:f.requestId&&(f.traceId=f.requestId,c||(c=f.requestId)),a.next(f)},onclose:()=>{a.complete()},onerror:l=>{if(!h)throw a.error(l),u.abort(),l}}),()=>{u.abort()}})}class pn{listeners={};on(t,e){this.listeners=Object.assign({},this.listeners,{[t]:(this.listeners[t]??[]).concat(e)})}off(t,e){this.listeners[t]&&(this.listeners=Object.assign({},this.listeners,{[t]:(this.listeners[t]??[]).filter(r=>r!==e)}))}remove(t){delete this.listeners[t]}emit(t,...e){this.listeners[t]&&this.listeners[t].forEach(r=>r(...e))}}class gn{apiKey;endpoint;botProviderEndpoint;debugMode;destroy$=new se;closed=!1;detached=!1;detachTimer;inFlight=0;sseEmitter=new pn;transformSsePayload;customHeaders;constructor(t){if(!t.endpoint&&!t.botProviderEndpoint)throw new Error("Either endpoint or botProviderEndpoint must be provided");if(this.apiKey=t.apiKey,this.debugMode=t.debugMode,this.transformSsePayload=t.transformSsePayload,this.botProviderEndpoint=t.botProviderEndpoint,this.customHeaders={...t.customHeaders,...t.userIdentityHint?{"X-ASGARD-USER-IDENTITY-HINT":t.userIdentityHint}:{}},!t.endpoint&&t.botProviderEndpoint){const e=t.botProviderEndpoint.replace(/\/+$/,"");this.endpoint=`${e}/message/sse`}else t.endpoint&&(this.endpoint=t.endpoint,this.debugMode&&console.warn('[AsgardServiceClient] The "endpoint" option is deprecated and will be removed in the next major version. Please use "botProviderEndpoint" instead. The SSE endpoint will be automatically derived as "${botProviderEndpoint}/message/sse".'))}on(t,e){this.sseEmitter.remove(t),this.sseEmitter.on(t,e)}handleEvent(t){switch(t.eventType){case d.INIT:this.sseEmitter.emit(d.INIT,t);break;case d.PROCESS_START:case d.PROCESS_COMPLETE:this.sseEmitter.emit(d.PROCESS,t);break;case d.MESSAGE_START:case d.MESSAGE_DELTA:case d.MESSAGE_COMPLETE:this.sseEmitter.emit(d.MESSAGE,t);break;case d.TOOL_CALL_START:case d.TOOL_CALL_COMPLETE:this.sseEmitter.emit(d.TOOL_CALL,t);break;case d.TOOL_CALL_CONSENT:this.sseEmitter.emit(d.TOOL_CALL_CONSENT,t);break;case d.DONE:this.sseEmitter.emit(d.DONE,t);break;case d.ERROR:this.sseEmitter.emit(d.ERROR,t);break}}fetchSse(t,e){e?.onSseStart?.(),this.inFlight+=1,this.runSse(pe({apiKey:this.apiKey,endpoint:this.endpoint,debugMode:this.debugMode,payload:this.transformSsePayload?.(t)??t,customHeaders:this.customHeaders}),e)}rejoinSse(t,e){e?.onSseStart?.(),this.inFlight+=1;const r=new URL(this.endpoint);r.searchParams.set("custom_channel_id",t),this.runSse(pe({apiKey:this.apiKey,endpoint:r.toString(),debugMode:this.debugMode,method:"GET",customHeaders:this.customHeaders}),e)}deriveChannelMetadataEndpoint(){const t=this.getBaseEndpoint();return t?`${t}/channel/metadata`:null}async channelMetadata(t){const e=this.deriveChannelMetadataEndpoint();if(!e)throw new Error("Unable to derive channel metadata endpoint. Please provide botProviderEndpoint in config.");const r=new URL(e);r.searchParams.set("custom_channel_id",t);const s={...this.customHeaders};this.apiKey&&(s["X-API-KEY"]=this.apiKey);const o=await fetch(r.toString(),{method:"GET",headers:s});if(o.status===404)return null;if(!o.ok)throw new q(o.status,o.statusText,await o.text().catch(()=>{}));const i=await o.json(),a=i.data??i;return{title:a.title??null,runState:a.runState??"IDLE",lastActivityAt:a.lastActivityAt}}runSse(t,e){t.pipe(Qt(r=>Rt(r).pipe(nn(e?.delayTime??50))),sn(this.destroy$)).subscribe({next:r=>{this.detached||(e?.onSseMessage?.(r),this.handleEvent(r))},error:r=>{this.detached||e?.onSseError?.(r),this.onRunSettled()},complete:()=>{this.detached||e?.onSseCompleted?.(),this.onRunSettled()}})}detach(t){if(!(this.detached||this.closed)){if(this.detached=!0,this.inFlight===0){this.close();return}this.detachTimer=setTimeout(()=>this.close(),t.timeoutMs)}}onRunSettled(){this.inFlight=Math.max(0,this.inFlight-1),this.detached&&this.inFlight===0&&this.close()}close(){this.closed||(this.closed=!0,this.detachTimer&&(clearTimeout(this.detachTimer),this.detachTimer=void 0),this.destroy$.next(),this.destroy$.complete())}async uploadFile(t,e){const r=this.deriveBlobEndpoint();if(!r)throw new Error("Unable to derive blob endpoint. Please provide botProviderEndpoint in config.");const s=new FormData;s.append("file",t),s.append("customChannelId",e);const o={...this.customHeaders};this.apiKey&&(o["X-API-KEY"]=this.apiKey);try{const i=await fetch(r,{method:"POST",headers:o,body:s});if(!i.ok)throw new Error(`Upload failed: ${i.status} ${i.statusText}`);const a=await i.json();return this.debugMode&&console.log("[AsgardServiceClient] File upload response:",a),a}catch(i){throw console.error("[AsgardServiceClient] File upload error:",i),i}}async downloadCwdFile(t,e){const r=this.getBaseEndpoint();if(!r)throw new Error("Unable to derive cwd download endpoint. Please provide botProviderEndpoint in config.");const s=`custom_channel_id=${encodeURIComponent(e)}&relative_path=${encodeURIComponent(t)}`,o=`${r}/cwd/download?${s}`,i={...this.customHeaders};this.apiKey&&(i["X-API-KEY"]=this.apiKey);try{const a=await fetch(o,{method:"GET",headers:i});if(!a.ok)throw new Error(`CWD download failed: ${a.status} ${a.statusText}`);const u=await a.blob(),c=t.split("/").pop()||"download";return this.debugMode&&console.log("[AsgardServiceClient] CWD download response:",{filename:c,size:u.size}),{blob:u,filename:c}}catch(a){throw console.error("[AsgardServiceClient] CWD download error:",a),a}}deriveBlobEndpoint(){const t=this.getBaseEndpoint();return t?`${t}/blob`:null}getBaseEndpoint(){let t=this.botProviderEndpoint;return!t&&this.endpoint&&(t=this.endpoint.replace("/message/sse","")),t?t.replace(/\/+$/,""):null}}const b=[];for(let n=0;n<256;++n)b.push((n+256).toString(16).slice(1));function mn(n,t=0){return(b[n[t+0]]+b[n[t+1]]+b[n[t+2]]+b[n[t+3]]+"-"+b[n[t+4]]+b[n[t+5]]+"-"+b[n[t+6]]+b[n[t+7]]+"-"+b[n[t+8]]+b[n[t+9]]+"-"+b[n[t+10]]+b[n[t+11]]+b[n[t+12]]+b[n[t+13]]+b[n[t+14]]+b[n[t+15]]).toLowerCase()}let z;const vn=new Uint8Array(16);function yn(){if(!z){if(typeof crypto>"u"||!crypto.getRandomValues)throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");z=crypto.getRandomValues.bind(crypto)}return z(vn)}const bn=typeof crypto<"u"&&crypto.randomUUID&&crypto.randomUUID.bind(crypto),ge={randomUUID:bn};function Sn(n,t,e){n=n||{};const r=n.random??n.rng?.()??yn();if(r.length<16)throw new Error("Random bytes length must be >= 16");return r[6]=r[6]&15|64,r[8]=r[8]&63|128,mn(r)}function Ge(n,t,e){return ge.randomUUID&&!n?ge.randomUUID():Sn(n)}class y{messages=null;pendingConsent=null;constructor({messages:t,pendingConsent:e=null}){this.messages=t,this.pendingConsent=e??null}pushMessage(t){const e=new Map(this.messages);return e.set(t.messageId,t),new y({messages:e,pendingConsent:this.pendingConsent})}clearPendingConsent(){return this.pendingConsent?new y({messages:this.messages,pendingConsent:null}):this}onMessage(t){switch(t.eventType){case d.MESSAGE_START:return this.onMessageStart(t);case d.MESSAGE_DELTA:return this.onMessageDelta(t);case d.MESSAGE_COMPLETE:return this.onMessageComplete(t);case d.MESSAGE_USER:return this.onMessageUser(t);case d.MESSAGE_THINKING_START:return this.onThinkingStart(t);case d.MESSAGE_THINKING_DELTA:return this.onThinkingDelta(t);case d.MESSAGE_THINKING_COMPLETE:return this.onThinkingComplete(t);case d.TOOL_CALL_START:return this.onToolCallStart(t);case d.TOOL_CALL_COMPLETE:return this.onToolCallComplete(t);case d.TOOL_CALL_CONSENT:return this.onToolCallConsent(t);case d.SUBAGENT_START:return this.onSubagentStart(t);case d.SUBAGENT_COMPLETE:return this.onSubagentComplete(t);case d.ERROR:return this.onMessageError(t);default:return this}}isTerminalBot(t){return t?.type==="bot"&&!t.isTyping}isTerminalThinking(t){return t?.type==="thinking"&&!t.isThinking}onMessageStart(t){const e=t.fact.messageStart.message;if(this.isTerminalBot(this.messages?.get(e.messageId)))return this;const r=new Map(this.messages);return r.set(e.messageId,{type:"bot",eventType:d.MESSAGE_START,isTyping:!0,typingText:"",messageId:e.messageId,message:e,time:new Date,traceId:t.traceId,raw:""}),new y({messages:r,pendingConsent:this.pendingConsent})}onMessageDelta(t){const e=t.fact.messageDelta.message,r=this.messages?.get(e.messageId);if(this.isTerminalBot(r))return this;const s=r?.type==="bot"?r:void 0,o=new Map(this.messages);return o.set(e.messageId,{type:"bot",eventType:d.MESSAGE_DELTA,isTyping:!0,typingText:`${s?.typingText??""}${e.text}`,messageId:e.messageId,message:e,time:new Date,traceId:t.traceId??s?.traceId,raw:s?.raw??""}),new y({messages:o,pendingConsent:this.pendingConsent})}onMessageComplete(t){const e=t.fact.messageComplete.message,r=new Map(this.messages),s=r.get(e.messageId);return r.set(e.messageId,{type:"bot",eventType:d.MESSAGE_COMPLETE,isTyping:!1,typingText:null,messageId:e.messageId,message:e,time:new Date,traceId:t.traceId??(s?.type==="bot"?s.traceId:void 0),raw:JSON.stringify(t)}),new y({messages:r,pendingConsent:this.pendingConsent})}onThinkingStart(t){const e=t.fact.messageThinkingStart.message;if(this.isTerminalThinking(this.messages?.get(e.messageId)))return this;const r=new Map(this.messages),s={type:"thinking",messageId:e.messageId,text:e.text,isThinking:!0,time:new Date,traceId:t.traceId};return r.set(e.messageId,s),new y({messages:r,pendingConsent:this.pendingConsent})}onThinkingDelta(t){const e=t.fact.messageThinkingDelta.message,r=this.messages?.get(e.messageId);if(this.isTerminalThinking(r))return this;const s=r?.type==="thinking"?r:void 0,o=new Map(this.messages),i={type:"thinking",messageId:e.messageId,text:`${s?.text??""}${e.text}`,isThinking:!0,time:s?.time??new Date,traceId:t.traceId??s?.traceId};return o.set(e.messageId,i),new y({messages:o,pendingConsent:this.pendingConsent})}onThinkingComplete(t){const e=t.fact.messageThinkingComplete.message,r=this.messages?.get(e.messageId),s=r?.type==="thinking"?r:void 0,o=new Map(this.messages),i={type:"thinking",messageId:e.messageId,text:e.text,isThinking:!1,time:s?.time??new Date,traceId:t.traceId??s?.traceId};return o.set(e.messageId,i),new y({messages:o,pendingConsent:this.pendingConsent})}onMessageUser(t){const e=t.fact.messageUser;if((this.messages?.get(e.messageId)??(e.customMessageId?this.messages?.get(e.customMessageId):void 0))?.type==="user")return this;const s=new Map(this.messages),o={type:"user",messageId:e.messageId,text:e.text,blobIds:e.blobIds,customMessageId:e.customMessageId,identityHint:e.identityHint,time:new Date,traceId:t.traceId};return s.set(e.messageId,o),new y({messages:s,pendingConsent:this.pendingConsent})}onMessageError(t){const e=Ge(),r=t.fact.runError.error,s=new Map(this.messages);return s.set(e,{type:"error",eventType:d.ERROR,messageId:e,error:r,time:new Date,traceId:t.traceId}),new y({messages:s,pendingConsent:this.pendingConsent})}onToolCallStart(t){const e=t.fact.toolCallStart,r=new Map(this.messages),s=`${e.processId}-${e.callSeq}`,o={type:"tool-call",eventType:d.TOOL_CALL_START,messageId:s,processId:e.processId,callSeq:e.callSeq,toolName:e.toolCall.toolName,reason:e.toolCall.reason,toolsetName:e.toolCall.toolsetName,parameter:e.toolCall.parameter,toolUseId:e.toolUseId,parentToolUseId:e.parentToolUseId,isComplete:!1,time:new Date,traceId:t.traceId};return r.set(s,o),new y({messages:r,pendingConsent:this.pendingConsent})}onToolCallComplete(t){const e=t.fact.toolCallComplete,r=new Map(this.messages),s=`${e.processId}-${e.callSeq}`,o=r.get(s);if(o?.type==="tool-call"){const i={...o,eventType:d.TOOL_CALL_COMPLETE,result:e.toolCallResult,isError:e.isError,sidecar:e.toolUseResultSidecar,isComplete:!0,traceId:t.traceId??o.traceId};r.set(s,i)}return new y({messages:r,pendingConsent:this.pendingConsent})}onToolCallConsent(t){const e=t.fact.toolCallConsent;return new y({messages:this.messages,pendingConsent:e})}onSubagentStart(t){const e=t.fact.subagentStart,r=new Map(this.messages),s=`subagent:${e.parentToolUseId}:start`,o={type:"subagent",messageId:s,kind:"start",parentToolUseId:e.parentToolUseId,agentId:e.agentId,subagentType:e.subagentType,description:e.description,time:new Date,traceId:t.traceId};return r.set(s,o),new y({messages:r,pendingConsent:this.pendingConsent})}onSubagentComplete(t){const e=t.fact.subagentComplete,r=new Map(this.messages),s=`subagent:${e.parentToolUseId}:complete`,o={type:"subagent",messageId:s,kind:"complete",parentToolUseId:e.parentToolUseId,agentId:e.agentId,subagentType:e.subagentType,status:e.status,summary:e.summary,time:new Date,traceId:t.traceId};return r.set(s,o),new y({messages:r,pendingConsent:this.pendingConsent})}}const En=new Set(["TaskCreate","TaskUpdate"]);function Ke(n){return n.toolsetName===""&&En.has(n.toolName)}function me(n){return typeof n=="object"&&n!==null?n:void 0}function I(n){return typeof n=="string"?n:void 0}function Fe(n){const t=[],e=new Map;for(const r of n){const s=r.parameter??{},o=r.sidecar??{};if(r.toolName==="TaskCreate"){const i=me(o.task),a=I(i?.id);if(!a)continue;e.has(a)||t.push(a),e.set(a,{id:a,subject:I(s.subject)||I(i?.subject)||"",activeForm:I(s.activeForm),description:I(s.description),status:e.get(a)?.status??"pending"})}else if(r.toolName==="TaskUpdate"){const i=me(o.statusChange),a=I(s.taskId)||I(o.taskId),u=I(i?.to)||I(s.status);if(!a||!u)continue;const c=e.get(a);c&&e.set(a,{...c,status:u})}}return t.map(r=>e.get(r))}function Be(n){return n.toolsetName===""&&n.toolName==="Agent"}function qe(n){return!!n}function Ve(n){const t=[],e=new Map,r=new Map,s=o=>(e.has(o)||(t.push(o),e.set(o,{status:"running"}),r.set(o,new Map)),e.get(o));for(const o of n)switch(o.kind){case"agentStart":{const i=s(o.toolUseId);o.description&&!i.description&&(i.description=o.description);break}case"subagentStart":{const i=s(o.parentToolUseId);i.agentId=o.agentId??i.agentId,i.subagentType=o.subagentType??i.subagentType,i.description=o.description??i.description;break}case"toolStart":{s(o.parentToolUseId),r.get(o.parentToolUseId).set(o.toolUseId,{toolsetName:o.toolsetName,toolName:o.toolName,parameter:o.parameter??{},reason:o.reason,status:"running"});break}case"toolComplete":{const i=r.get(o.parentToolUseId)?.get(o.toolUseId);i&&(i.status=o.isError?"error":"completed");break}case"subagentComplete":{const i=s(o.parentToolUseId);i.status=o.status,i.summary=o.summary;break}}return t.map(o=>({parentToolUseId:o,...e.get(o),tools:Array.from(r.get(o).values())}))}function In(n){return typeof n=="string"?n:void 0}function Ye(n){const t=[];for(const e of n){if(e.type==="tool-call"&&Be(e)){t.push({kind:"agentStart",toolUseId:e.toolUseId??e.messageId,description:In(e.parameter.description)});continue}if(e.type==="tool-call"&&qe(e.parentToolUseId)){const r=e.toolUseId??e.messageId;t.push({kind:"toolStart",parentToolUseId:e.parentToolUseId,toolUseId:r,toolsetName:e.toolsetName,toolName:e.toolName,parameter:e.parameter,reason:e.reason}),e.isComplete&&t.push({kind:"toolComplete",parentToolUseId:e.parentToolUseId,toolUseId:r,isError:e.isError});continue}if(e.type==="subagent"&&e.kind==="start"){t.push({kind:"subagentStart",parentToolUseId:e.parentToolUseId,agentId:e.agentId,subagentType:e.subagentType,description:e.description});continue}e.type==="subagent"&&e.kind==="complete"&&e.status&&t.push({kind:"subagentComplete",parentToolUseId:e.parentToolUseId,status:e.status,summary:e.summary})}return t}function We(n){const t=Array.from(n.messages?.values()??[]).filter(e=>e.type==="tool-call"&&e.isComplete&&Ke(e));return Fe(t)}function Xe(n){return Ve(Ye(Array.from(n.messages?.values()??[])))}function ze(n,t){return n===t?!0:n.length!==t.length?!1:n.every((e,r)=>{const s=t[r];return e.id===s.id&&e.status===s.status&&e.subject===s.subject&&e.activeForm===s.activeForm&&e.description===s.description})}function wn(n,t){return n.length!==t.length?!1:n.every((e,r)=>{const s=t[r];return e.toolName===s.toolName&&e.toolsetName===s.toolsetName&&e.status===s.status&&e.reason===s.reason})}function Je(n,t){return n===t?!0:n.length!==t.length?!1:n.every((e,r)=>{const s=t[r];return e.parentToolUseId===s.parentToolUseId&&e.status===s.status&&e.subagentType===s.subagentType&&e.description===s.description&&e.summary===s.summary&&wn(e.tools,s.tools)})}function Qe(n){const t=new R([]),e=new R([]),r=new U;return r.add(n.pipe(P(We),ee(ze)).subscribe(t)),r.add(n.pipe(P(Xe),ee(Je)).subscribe(e)),{tasks$:t.asObservable(),subagents$:e.asObservable(),getTasks:()=>t.value,getSubagents:()=>e.value,teardown:()=>r.unsubscribe()}}class ${client;customChannelId;customMessageId;isConnecting$;conversation$;channelTitleSubject;derivedStores;statesObserver;statesSubscription;tasks$;subagents$;channelTitle$;currentUserMessageId;lastSentMessageId;constructor(t){if(!t.client)throw new Error("client must be required");if(!t.customChannelId)throw new Error("customChannelId must be required");this.client=t.client,this.customChannelId=t.customChannelId,this.customMessageId=t.customMessageId,this.isConnecting$=new R(!1),this.conversation$=new R(t.conversation),this.channelTitleSubject=new R(t.channelTitle??null),this.derivedStores=Qe(this.conversation$),this.tasks$=this.derivedStores.tasks$,this.subagents$=this.derivedStores.subagents$,this.channelTitle$=this.channelTitleSubject.pipe(ee()),this.statesObserver=t.statesObserver}getTasks(){return this.derivedStores.getTasks()}getSubagents(){return this.derivedStores.getSubagents()}getChannelTitle(){return this.channelTitleSubject.value}setChannelTitle(t){this.channelTitleSubject.next(t)}static create(t){const e=new $(t);return e.subscribe(),e}static async reset(t,e,r,s){const o=new $(t);try{return o.subscribe(),s?.(o),await o.resetChannel(e,r),o}catch(i){throw o.close(),i}}static async restore(t,e,r){const s=new $(t);try{return s.subscribe(),r?.(s),await s.rejoinChannel(e),s}catch(o){throw s.close(),o}}subscribe(){this.statesSubscription=Wt([this.isConnecting$,this.conversation$,this.derivedStores.tasks$,this.derivedStores.subagents$,this.channelTitle$]).pipe(P(([t,e,r,s,o])=>({isConnecting:t,conversation:e,tasks:r,subagents:s,channelTitle:o}))).subscribe(this.statesObserver)}resolvePayload(t){if(typeof t=="function")try{return t()}catch(e){throw new Error(`Failed to resolve payload function: ${e instanceof Error?e.message:String(e)}`)}return t}buildRunHandlers(t,e,r){return{onSseStart:t?.onSseStart,onSseMessage:s=>{if(t?.onSseMessage?.(s),s.eventType===d.CHANNEL_TITLE_UPDATE&&this.channelTitleSubject.next(s.fact.channelTitleUpdate.title),this.currentUserMessageId&&s.traceId){const o=new Map(this.conversation$.value.messages),i=o.get(this.currentUserMessageId);i&&i.type==="user"&&(o.set(this.currentUserMessageId,{...i,traceId:s.traceId}),this.conversation$.next(new y({messages:o}))),this.currentUserMessageId=void 0}this.conversation$.next(this.conversation$.value.onMessage(s))},onSseError:s=>{t?.onSseError?.(s),this.isConnecting$.next(!1),this.currentUserMessageId=void 0,r(s)},onSseCompleted:()=>{t?.onSseCompleted?.(),this.isConnecting$.next(!1),this.currentUserMessageId=void 0,e()}}}fetchSse(t,e){return new Promise((r,s)=>{this.isConnecting$.next(!0),this.client.fetchSse(t,this.buildRunHandlers(e,r,s))})}rejoinChannel(t){return new Promise((e,r)=>{if(!this.client.rejoinSse){e();return}this.isConnecting$.next(!0),this.client.rejoinSse(this.customChannelId,this.buildRunHandlers(t,e,r))})}resetChannel(t,e){return this.fetchSse({action:N.RESET_CHANNEL,customChannelId:this.customChannelId,customMessageId:this.customMessageId,text:t?.text||"",payload:this.resolvePayload(t?.payload)},e)}sendMessage(t,e){const r=t.text.trim(),s=t.customMessageId??Ge();return this.currentUserMessageId=s,this.lastSentMessageId=s,this.conversation$.next(this.conversation$.value.pushMessage({type:"user",messageId:s,text:r,blobIds:t.blobIds,filePreviewUrls:t.filePreviewUrls,documentNames:t.documentNames,time:new Date})),this.fetchSse({action:N.NONE,customChannelId:this.customChannelId,customMessageId:s,payload:this.resolvePayload(t?.payload),text:r,blobIds:t?.blobIds},e)}replyToolCallConsents(t,e,r){return this.conversation$.next(this.conversation$.value.clearPendingConsent()),this.fetchSse({action:N.RESPONSE_TOOL_CALL_CONSENT,customChannelId:this.customChannelId,customMessageId:this.lastSentMessageId??this.customMessageId,payload:this.resolvePayload(r),text:"",toolCallConsents:t},e)}close(){this.isConnecting$.complete(),this.conversation$.complete(),this.channelTitleSubject.complete(),this.derivedStores.teardown(),this.statesSubscription?.unsubscribe()}}exports.AsgardServiceClient=gn;exports.Channel=$;exports.Conversation=y;exports.EventType=d;exports.FetchSseAction=N;exports.HttpError=q;exports.MessageTemplateType=ye;exports.ToolCallConsentResult=ve;exports.conversationToSubagentEvents=Ye;exports.createDerivedStores=Qe;exports.deriveSubagents=Xe;exports.deriveTasks=We;exports.isAgentTool=Be;exports.isHttpError=tt;exports.isSubagentChildTool=qe;exports.isTaskTool=Ke;exports.reduceSubagents=Ve;exports.reduceTaskEvents=Fe;exports.subagentsEqual=Je;exports.tasksEqual=ze;
4
+ `+h:h;break;case"event":r.event=h;break;case"id":n(r.id=h);break;case"retry":const g=parseInt(h,10);isNaN(g)||t(r.retry=g);break}}}}function un(n,t){const e=new Uint8Array(n.length+t.length);return e.set(n),e.set(t,n.length),e}function he(){return{data:"",event:"",id:"",retry:void 0}}var ln=function(n,t){var e={};for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&t.indexOf(r)<0&&(e[r]=n[r]);if(n!=null&&typeof Object.getOwnPropertySymbols=="function")for(var s=0,r=Object.getOwnPropertySymbols(n);s<r.length;s++)t.indexOf(r[s])<0&&Object.prototype.propertyIsEnumerable.call(n,r[s])&&(e[r[s]]=n[r[s]]);return e};const te="text/event-stream",dn=1e3,fe="last-event-id";function hn(n,t){var{signal:e,headers:r,onopen:s,onmessage:o,onclose:i,onerror:a,openWhenHidden:u,fetch:c}=t,h=ln(t,["signal","headers","onopen","onmessage","onclose","onerror","openWhenHidden","fetch"]);return new Promise((g,v)=>{const l=Object.assign({},r);l.accept||(l.accept=te);let f;function p(){f.abort(),document.hidden||Y()}u||document.addEventListener("visibilitychange",p);let A=dn,E=0;function _(){document.removeEventListener("visibilitychange",p),window.clearTimeout(E),f.abort()}e?.addEventListener("abort",()=>{_(),g()});const Ze=c??window.fetch,et=s??fn;async function Y(){var W;f=new AbortController;try{const H=await Ze(n,Object.assign(Object.assign({},h),{headers:l,signal:f.signal}));await et(H),await on(H.body,an(cn(T=>{T?l[fe]=T:delete l[fe]},T=>{A=T},o))),i?.(),_(),g()}catch(H){if(!f.signal.aborted)try{const T=(W=a?.(H))!==null&&W!==void 0?W:A;window.clearTimeout(E),E=window.setTimeout(Y,T)}catch(T){_(),v(T)}}}Y()})}function fn(n){const t=n.headers.get("content-type");if(!t?.startsWith(te))throw new Error(`Expected content-type to be ${te}, Actual: ${t}`)}function pe(n){const{endpoint:t,apiKey:e,payload:r,debugMode:s,customHeaders:o}=n,i=n.method??"POST";return new S(a=>{const u=new AbortController;let c,h=!1;const g={"Content-Type":"application/json",...o};e&&(g["X-API-KEY"]=e);const v=new URL(t);return s&&v.searchParams.set("is_debug","true"),hn(v.toString(),{method:i,headers:g,body:i==="POST"&&r?JSON.stringify(r):void 0,signal:u.signal,openWhenHidden:!0,onopen:async l=>{if(l.ok)c=l.headers.get("X-Trace-Id")??void 0;else{let f;try{f=await l.json()}catch{try{f=await l.text()}catch{f=null}}a.error(new q(l.status,l.statusText,f)),u.abort()}},onmessage:l=>{l.id&&(h=!0);const f=JSON.parse(l.data);c?f.traceId=c:f.requestId&&(f.traceId=f.requestId,c||(c=f.requestId)),a.next(f)},onclose:()=>{a.complete()},onerror:l=>{if(!h)throw a.error(l),u.abort(),l}}),()=>{u.abort()}})}class pn{listeners={};on(t,e){this.listeners=Object.assign({},this.listeners,{[t]:(this.listeners[t]??[]).concat(e)})}off(t,e){this.listeners[t]&&(this.listeners=Object.assign({},this.listeners,{[t]:(this.listeners[t]??[]).filter(r=>r!==e)}))}remove(t){delete this.listeners[t]}emit(t,...e){this.listeners[t]&&this.listeners[t].forEach(r=>r(...e))}}class gn{apiKey;endpoint;botProviderEndpoint;debugMode;destroy$=new se;closed=!1;detached=!1;detachTimer;inFlight=0;sseEmitter=new pn;transformSsePayload;customHeaders;constructor(t){if(!t.endpoint&&!t.botProviderEndpoint)throw new Error("Either endpoint or botProviderEndpoint must be provided");if(this.apiKey=t.apiKey,this.debugMode=t.debugMode,this.transformSsePayload=t.transformSsePayload,this.botProviderEndpoint=t.botProviderEndpoint,this.customHeaders={...t.customHeaders,...t.userIdentityHint?{"X-ASGARD-USER-IDENTITY-HINT":t.userIdentityHint}:{}},!t.endpoint&&t.botProviderEndpoint){const e=t.botProviderEndpoint.replace(/\/+$/,"");this.endpoint=`${e}/message/sse`}else t.endpoint&&(this.endpoint=t.endpoint,this.debugMode&&console.warn('[AsgardServiceClient] The "endpoint" option is deprecated and will be removed in the next major version. Please use "botProviderEndpoint" instead. The SSE endpoint will be automatically derived as "${botProviderEndpoint}/message/sse".'))}on(t,e){this.sseEmitter.remove(t),this.sseEmitter.on(t,e)}handleEvent(t){switch(t.eventType){case d.INIT:this.sseEmitter.emit(d.INIT,t);break;case d.PROCESS_START:case d.PROCESS_COMPLETE:this.sseEmitter.emit(d.PROCESS,t);break;case d.MESSAGE_START:case d.MESSAGE_DELTA:case d.MESSAGE_COMPLETE:this.sseEmitter.emit(d.MESSAGE,t);break;case d.TOOL_CALL_START:case d.TOOL_CALL_COMPLETE:this.sseEmitter.emit(d.TOOL_CALL,t);break;case d.TOOL_CALL_CONSENT:this.sseEmitter.emit(d.TOOL_CALL_CONSENT,t);break;case d.DONE:this.sseEmitter.emit(d.DONE,t);break;case d.ERROR:this.sseEmitter.emit(d.ERROR,t);break}}fetchSse(t,e){e?.onSseStart?.(),this.inFlight+=1,this.runSse(pe({apiKey:this.apiKey,endpoint:this.endpoint,debugMode:this.debugMode,payload:this.transformSsePayload?.(t)??t,customHeaders:this.customHeaders}),e)}rejoinSse(t,e){e?.onSseStart?.(),this.inFlight+=1;const r=new URL(this.endpoint);r.searchParams.set("custom_channel_id",t),this.runSse(pe({apiKey:this.apiKey,endpoint:r.toString(),debugMode:this.debugMode,method:"GET",customHeaders:this.customHeaders}),e)}deriveChannelMetadataEndpoint(){const t=this.getBaseEndpoint();return t?`${t}/channel/metadata`:null}async channelMetadata(t){const e=this.deriveChannelMetadataEndpoint();if(!e)throw new Error("Unable to derive channel metadata endpoint. Please provide botProviderEndpoint in config.");const r=new URL(e);r.searchParams.set("custom_channel_id",t);const s={...this.customHeaders};this.apiKey&&(s["X-API-KEY"]=this.apiKey);const o=await fetch(r.toString(),{method:"GET",headers:s});if(o.status===404)return null;if(!o.ok)throw new q(o.status,o.statusText,await o.text().catch(()=>{}));const i=await o.json(),a=i.data??i;return{title:a.title??null,runState:a.runState??"IDLE",lastActivityAt:a.lastActivityAt}}runSse(t,e){t.pipe(Qt(r=>Rt(r).pipe(nn(e?.delayTime??50))),sn(this.destroy$)).subscribe({next:r=>{this.detached||(e?.onSseMessage?.(r),this.handleEvent(r))},error:r=>{this.detached||e?.onSseError?.(r),this.onRunSettled()},complete:()=>{this.detached||e?.onSseCompleted?.(),this.onRunSettled()}})}detach(t){if(!(this.detached||this.closed)){if(this.detached=!0,this.inFlight===0){this.close();return}this.detachTimer=setTimeout(()=>this.close(),t.timeoutMs)}}onRunSettled(){this.inFlight=Math.max(0,this.inFlight-1),this.detached&&this.inFlight===0&&this.close()}close(){this.closed||(this.closed=!0,this.detachTimer&&(clearTimeout(this.detachTimer),this.detachTimer=void 0),this.destroy$.next(),this.destroy$.complete())}async uploadFile(t,e){const r=this.deriveBlobEndpoint();if(!r)throw new Error("Unable to derive blob endpoint. Please provide botProviderEndpoint in config.");const s=new FormData;s.append("file",t),s.append("customChannelId",e);const o={...this.customHeaders};this.apiKey&&(o["X-API-KEY"]=this.apiKey);try{const i=await fetch(r,{method:"POST",headers:o,body:s});if(!i.ok)throw new Error(`Upload failed: ${i.status} ${i.statusText}`);const a=await i.json();return this.debugMode&&console.log("[AsgardServiceClient] File upload response:",a),a}catch(i){throw console.error("[AsgardServiceClient] File upload error:",i),i}}async downloadChannelHomeFile(t,e){const r=this.getBaseEndpoint();if(!r)throw new Error("Unable to derive channel-home download endpoint. Please provide botProviderEndpoint in config.");const s=`custom_channel_id=${encodeURIComponent(e)}&relative_path=${encodeURIComponent(t)}`,o=`${r}/channel-home/download?${s}`,i={...this.customHeaders};this.apiKey&&(i["X-API-KEY"]=this.apiKey);try{const a=await fetch(o,{method:"GET",headers:i});if(!a.ok)throw new Error(`Channel Home download failed: ${a.status} ${a.statusText}`);const u=await a.blob(),c=t.split("/").pop()||"download";return this.debugMode&&console.log("[AsgardServiceClient] Channel Home download response:",{filename:c,size:u.size}),{blob:u,filename:c}}catch(a){throw console.error("[AsgardServiceClient] Channel Home download error:",a),a}}deriveBlobEndpoint(){const t=this.getBaseEndpoint();return t?`${t}/blob`:null}getBaseEndpoint(){let t=this.botProviderEndpoint;return!t&&this.endpoint&&(t=this.endpoint.replace("/message/sse","")),t?t.replace(/\/+$/,""):null}}const b=[];for(let n=0;n<256;++n)b.push((n+256).toString(16).slice(1));function mn(n,t=0){return(b[n[t+0]]+b[n[t+1]]+b[n[t+2]]+b[n[t+3]]+"-"+b[n[t+4]]+b[n[t+5]]+"-"+b[n[t+6]]+b[n[t+7]]+"-"+b[n[t+8]]+b[n[t+9]]+"-"+b[n[t+10]]+b[n[t+11]]+b[n[t+12]]+b[n[t+13]]+b[n[t+14]]+b[n[t+15]]).toLowerCase()}let z;const vn=new Uint8Array(16);function yn(){if(!z){if(typeof crypto>"u"||!crypto.getRandomValues)throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");z=crypto.getRandomValues.bind(crypto)}return z(vn)}const bn=typeof crypto<"u"&&crypto.randomUUID&&crypto.randomUUID.bind(crypto),ge={randomUUID:bn};function Sn(n,t,e){n=n||{};const r=n.random??n.rng?.()??yn();if(r.length<16)throw new Error("Random bytes length must be >= 16");return r[6]=r[6]&15|64,r[8]=r[8]&63|128,mn(r)}function Ge(n,t,e){return ge.randomUUID&&!n?ge.randomUUID():Sn(n)}class y{messages=null;pendingConsent=null;constructor({messages:t,pendingConsent:e=null}){this.messages=t,this.pendingConsent=e??null}pushMessage(t){const e=new Map(this.messages);return e.set(t.messageId,t),new y({messages:e,pendingConsent:this.pendingConsent})}clearPendingConsent(){return this.pendingConsent?new y({messages:this.messages,pendingConsent:null}):this}onMessage(t){switch(t.eventType){case d.MESSAGE_START:return this.onMessageStart(t);case d.MESSAGE_DELTA:return this.onMessageDelta(t);case d.MESSAGE_COMPLETE:return this.onMessageComplete(t);case d.MESSAGE_USER:return this.onMessageUser(t);case d.MESSAGE_THINKING_START:return this.onThinkingStart(t);case d.MESSAGE_THINKING_DELTA:return this.onThinkingDelta(t);case d.MESSAGE_THINKING_COMPLETE:return this.onThinkingComplete(t);case d.TOOL_CALL_START:return this.onToolCallStart(t);case d.TOOL_CALL_COMPLETE:return this.onToolCallComplete(t);case d.TOOL_CALL_CONSENT:return this.onToolCallConsent(t);case d.SUBAGENT_START:return this.onSubagentStart(t);case d.SUBAGENT_COMPLETE:return this.onSubagentComplete(t);case d.ERROR:return this.onMessageError(t);default:return this}}isTerminalBot(t){return t?.type==="bot"&&!t.isTyping}isTerminalThinking(t){return t?.type==="thinking"&&!t.isThinking}onMessageStart(t){const e=t.fact.messageStart.message;if(this.isTerminalBot(this.messages?.get(e.messageId)))return this;const r=new Map(this.messages);return r.set(e.messageId,{type:"bot",eventType:d.MESSAGE_START,isTyping:!0,typingText:"",messageId:e.messageId,message:e,time:new Date,traceId:t.traceId,raw:""}),new y({messages:r,pendingConsent:this.pendingConsent})}onMessageDelta(t){const e=t.fact.messageDelta.message,r=this.messages?.get(e.messageId);if(this.isTerminalBot(r))return this;const s=r?.type==="bot"?r:void 0,o=new Map(this.messages);return o.set(e.messageId,{type:"bot",eventType:d.MESSAGE_DELTA,isTyping:!0,typingText:`${s?.typingText??""}${e.text}`,messageId:e.messageId,message:e,time:new Date,traceId:t.traceId??s?.traceId,raw:s?.raw??""}),new y({messages:o,pendingConsent:this.pendingConsent})}onMessageComplete(t){const e=t.fact.messageComplete.message,r=new Map(this.messages),s=r.get(e.messageId);return r.set(e.messageId,{type:"bot",eventType:d.MESSAGE_COMPLETE,isTyping:!1,typingText:null,messageId:e.messageId,message:e,time:new Date,traceId:t.traceId??(s?.type==="bot"?s.traceId:void 0),raw:JSON.stringify(t)}),new y({messages:r,pendingConsent:this.pendingConsent})}onThinkingStart(t){const e=t.fact.messageThinkingStart.message;if(this.isTerminalThinking(this.messages?.get(e.messageId)))return this;const r=new Map(this.messages),s={type:"thinking",messageId:e.messageId,text:e.text,isThinking:!0,time:new Date,traceId:t.traceId};return r.set(e.messageId,s),new y({messages:r,pendingConsent:this.pendingConsent})}onThinkingDelta(t){const e=t.fact.messageThinkingDelta.message,r=this.messages?.get(e.messageId);if(this.isTerminalThinking(r))return this;const s=r?.type==="thinking"?r:void 0,o=new Map(this.messages),i={type:"thinking",messageId:e.messageId,text:`${s?.text??""}${e.text}`,isThinking:!0,time:s?.time??new Date,traceId:t.traceId??s?.traceId};return o.set(e.messageId,i),new y({messages:o,pendingConsent:this.pendingConsent})}onThinkingComplete(t){const e=t.fact.messageThinkingComplete.message,r=this.messages?.get(e.messageId),s=r?.type==="thinking"?r:void 0,o=new Map(this.messages),i={type:"thinking",messageId:e.messageId,text:e.text,isThinking:!1,time:s?.time??new Date,traceId:t.traceId??s?.traceId};return o.set(e.messageId,i),new y({messages:o,pendingConsent:this.pendingConsent})}onMessageUser(t){const e=t.fact.messageUser;if((this.messages?.get(e.messageId)??(e.customMessageId?this.messages?.get(e.customMessageId):void 0))?.type==="user")return this;const s=new Map(this.messages),o={type:"user",messageId:e.messageId,text:e.text,blobIds:e.blobIds,customMessageId:e.customMessageId,identityHint:e.identityHint,time:new Date,traceId:t.traceId};return s.set(e.messageId,o),new y({messages:s,pendingConsent:this.pendingConsent})}onMessageError(t){const e=Ge(),r=t.fact.runError.error,s=new Map(this.messages);return s.set(e,{type:"error",eventType:d.ERROR,messageId:e,error:r,time:new Date,traceId:t.traceId}),new y({messages:s,pendingConsent:this.pendingConsent})}onToolCallStart(t){const e=t.fact.toolCallStart,r=new Map(this.messages),s=`${e.processId}-${e.callSeq}`,o={type:"tool-call",eventType:d.TOOL_CALL_START,messageId:s,processId:e.processId,callSeq:e.callSeq,toolName:e.toolCall.toolName,reason:e.toolCall.reason,toolsetName:e.toolCall.toolsetName,parameter:e.toolCall.parameter,toolUseId:e.toolUseId,parentToolUseId:e.parentToolUseId,isComplete:!1,time:new Date,traceId:t.traceId};return r.set(s,o),new y({messages:r,pendingConsent:this.pendingConsent})}onToolCallComplete(t){const e=t.fact.toolCallComplete,r=new Map(this.messages),s=`${e.processId}-${e.callSeq}`,o=r.get(s);if(o?.type==="tool-call"){const i={...o,eventType:d.TOOL_CALL_COMPLETE,result:e.toolCallResult,isError:e.isError,sidecar:e.toolUseResultSidecar,isComplete:!0,traceId:t.traceId??o.traceId};r.set(s,i)}return new y({messages:r,pendingConsent:this.pendingConsent})}onToolCallConsent(t){const e=t.fact.toolCallConsent;return new y({messages:this.messages,pendingConsent:e})}onSubagentStart(t){const e=t.fact.subagentStart,r=new Map(this.messages),s=`subagent:${e.parentToolUseId}:start`,o={type:"subagent",messageId:s,kind:"start",parentToolUseId:e.parentToolUseId,agentId:e.agentId,subagentType:e.subagentType,description:e.description,time:new Date,traceId:t.traceId};return r.set(s,o),new y({messages:r,pendingConsent:this.pendingConsent})}onSubagentComplete(t){const e=t.fact.subagentComplete,r=new Map(this.messages),s=`subagent:${e.parentToolUseId}:complete`,o={type:"subagent",messageId:s,kind:"complete",parentToolUseId:e.parentToolUseId,agentId:e.agentId,subagentType:e.subagentType,status:e.status,summary:e.summary,time:new Date,traceId:t.traceId};return r.set(s,o),new y({messages:r,pendingConsent:this.pendingConsent})}}const En=new Set(["TaskCreate","TaskUpdate"]);function Ke(n){return n.toolsetName===""&&En.has(n.toolName)}function me(n){return typeof n=="object"&&n!==null?n:void 0}function I(n){return typeof n=="string"?n:void 0}function Fe(n){const t=[],e=new Map;for(const r of n){const s=r.parameter??{},o=r.sidecar??{};if(r.toolName==="TaskCreate"){const i=me(o.task),a=I(i?.id);if(!a)continue;e.has(a)||t.push(a),e.set(a,{id:a,subject:I(s.subject)||I(i?.subject)||"",activeForm:I(s.activeForm),description:I(s.description),status:e.get(a)?.status??"pending"})}else if(r.toolName==="TaskUpdate"){const i=me(o.statusChange),a=I(s.taskId)||I(o.taskId),u=I(i?.to)||I(s.status);if(!a||!u)continue;const c=e.get(a);c&&e.set(a,{...c,status:u})}}return t.map(r=>e.get(r))}function Be(n){return n.toolsetName===""&&n.toolName==="Agent"}function qe(n){return!!n}function Ve(n){const t=[],e=new Map,r=new Map,s=o=>(e.has(o)||(t.push(o),e.set(o,{status:"running"}),r.set(o,new Map)),e.get(o));for(const o of n)switch(o.kind){case"agentStart":{const i=s(o.toolUseId);o.description&&!i.description&&(i.description=o.description);break}case"subagentStart":{const i=s(o.parentToolUseId);i.agentId=o.agentId??i.agentId,i.subagentType=o.subagentType??i.subagentType,i.description=o.description??i.description;break}case"toolStart":{s(o.parentToolUseId),r.get(o.parentToolUseId).set(o.toolUseId,{toolsetName:o.toolsetName,toolName:o.toolName,parameter:o.parameter??{},reason:o.reason,status:"running"});break}case"toolComplete":{const i=r.get(o.parentToolUseId)?.get(o.toolUseId);i&&(i.status=o.isError?"error":"completed");break}case"subagentComplete":{const i=s(o.parentToolUseId);i.status=o.status,i.summary=o.summary;break}}return t.map(o=>({parentToolUseId:o,...e.get(o),tools:Array.from(r.get(o).values())}))}function In(n){return typeof n=="string"?n:void 0}function Ye(n){const t=[];for(const e of n){if(e.type==="tool-call"&&Be(e)){t.push({kind:"agentStart",toolUseId:e.toolUseId??e.messageId,description:In(e.parameter.description)});continue}if(e.type==="tool-call"&&qe(e.parentToolUseId)){const r=e.toolUseId??e.messageId;t.push({kind:"toolStart",parentToolUseId:e.parentToolUseId,toolUseId:r,toolsetName:e.toolsetName,toolName:e.toolName,parameter:e.parameter,reason:e.reason}),e.isComplete&&t.push({kind:"toolComplete",parentToolUseId:e.parentToolUseId,toolUseId:r,isError:e.isError});continue}if(e.type==="subagent"&&e.kind==="start"){t.push({kind:"subagentStart",parentToolUseId:e.parentToolUseId,agentId:e.agentId,subagentType:e.subagentType,description:e.description});continue}e.type==="subagent"&&e.kind==="complete"&&e.status&&t.push({kind:"subagentComplete",parentToolUseId:e.parentToolUseId,status:e.status,summary:e.summary})}return t}function We(n){const t=Array.from(n.messages?.values()??[]).filter(e=>e.type==="tool-call"&&e.isComplete&&Ke(e));return Fe(t)}function Xe(n){return Ve(Ye(Array.from(n.messages?.values()??[])))}function ze(n,t){return n===t?!0:n.length!==t.length?!1:n.every((e,r)=>{const s=t[r];return e.id===s.id&&e.status===s.status&&e.subject===s.subject&&e.activeForm===s.activeForm&&e.description===s.description})}function wn(n,t){return n.length!==t.length?!1:n.every((e,r)=>{const s=t[r];return e.toolName===s.toolName&&e.toolsetName===s.toolsetName&&e.status===s.status&&e.reason===s.reason})}function Je(n,t){return n===t?!0:n.length!==t.length?!1:n.every((e,r)=>{const s=t[r];return e.parentToolUseId===s.parentToolUseId&&e.status===s.status&&e.subagentType===s.subagentType&&e.description===s.description&&e.summary===s.summary&&wn(e.tools,s.tools)})}function Qe(n){const t=new R([]),e=new R([]),r=new U;return r.add(n.pipe(P(We),ee(ze)).subscribe(t)),r.add(n.pipe(P(Xe),ee(Je)).subscribe(e)),{tasks$:t.asObservable(),subagents$:e.asObservable(),getTasks:()=>t.value,getSubagents:()=>e.value,teardown:()=>r.unsubscribe()}}class ${client;customChannelId;customMessageId;isConnecting$;conversation$;channelTitleSubject;derivedStores;statesObserver;statesSubscription;tasks$;subagents$;channelTitle$;currentUserMessageId;lastSentMessageId;constructor(t){if(!t.client)throw new Error("client must be required");if(!t.customChannelId)throw new Error("customChannelId must be required");this.client=t.client,this.customChannelId=t.customChannelId,this.customMessageId=t.customMessageId,this.isConnecting$=new R(!1),this.conversation$=new R(t.conversation),this.channelTitleSubject=new R(t.channelTitle??null),this.derivedStores=Qe(this.conversation$),this.tasks$=this.derivedStores.tasks$,this.subagents$=this.derivedStores.subagents$,this.channelTitle$=this.channelTitleSubject.pipe(ee()),this.statesObserver=t.statesObserver}getTasks(){return this.derivedStores.getTasks()}getSubagents(){return this.derivedStores.getSubagents()}getChannelTitle(){return this.channelTitleSubject.value}setChannelTitle(t){this.channelTitleSubject.next(t)}static create(t){const e=new $(t);return e.subscribe(),e}static async reset(t,e,r,s){const o=new $(t);try{return o.subscribe(),s?.(o),await o.resetChannel(e,r),o}catch(i){throw o.close(),i}}static async restore(t,e,r){const s=new $(t);try{return s.subscribe(),r?.(s),await s.rejoinChannel(e),s}catch(o){throw s.close(),o}}subscribe(){this.statesSubscription=Wt([this.isConnecting$,this.conversation$,this.derivedStores.tasks$,this.derivedStores.subagents$,this.channelTitle$]).pipe(P(([t,e,r,s,o])=>({isConnecting:t,conversation:e,tasks:r,subagents:s,channelTitle:o}))).subscribe(this.statesObserver)}resolvePayload(t){if(typeof t=="function")try{return t()}catch(e){throw new Error(`Failed to resolve payload function: ${e instanceof Error?e.message:String(e)}`)}return t}buildRunHandlers(t,e,r){return{onSseStart:t?.onSseStart,onSseMessage:s=>{if(t?.onSseMessage?.(s),s.eventType===d.CHANNEL_TITLE_UPDATE&&this.channelTitleSubject.next(s.fact.channelTitleUpdate.title),this.currentUserMessageId&&s.traceId){const o=new Map(this.conversation$.value.messages),i=o.get(this.currentUserMessageId);i&&i.type==="user"&&(o.set(this.currentUserMessageId,{...i,traceId:s.traceId}),this.conversation$.next(new y({messages:o}))),this.currentUserMessageId=void 0}this.conversation$.next(this.conversation$.value.onMessage(s))},onSseError:s=>{t?.onSseError?.(s),this.isConnecting$.next(!1),this.currentUserMessageId=void 0,r(s)},onSseCompleted:()=>{t?.onSseCompleted?.(),this.isConnecting$.next(!1),this.currentUserMessageId=void 0,e()}}}fetchSse(t,e){return new Promise((r,s)=>{this.isConnecting$.next(!0),this.client.fetchSse(t,this.buildRunHandlers(e,r,s))})}rejoinChannel(t){return new Promise((e,r)=>{if(!this.client.rejoinSse){e();return}this.isConnecting$.next(!0),this.client.rejoinSse(this.customChannelId,this.buildRunHandlers(t,e,r))})}resetChannel(t,e){return this.fetchSse({action:N.RESET_CHANNEL,customChannelId:this.customChannelId,customMessageId:this.customMessageId,text:t?.text||"",payload:this.resolvePayload(t?.payload)},e)}sendMessage(t,e){const r=t.text.trim(),s=t.customMessageId??Ge();return this.currentUserMessageId=s,this.lastSentMessageId=s,this.conversation$.next(this.conversation$.value.pushMessage({type:"user",messageId:s,text:r,blobIds:t.blobIds,filePreviewUrls:t.filePreviewUrls,documentNames:t.documentNames,time:new Date})),this.fetchSse({action:N.NONE,customChannelId:this.customChannelId,customMessageId:s,payload:this.resolvePayload(t?.payload),text:r,blobIds:t?.blobIds},e)}replyToolCallConsents(t,e,r){return this.conversation$.next(this.conversation$.value.clearPendingConsent()),this.fetchSse({action:N.RESPONSE_TOOL_CALL_CONSENT,customChannelId:this.customChannelId,customMessageId:this.lastSentMessageId??this.customMessageId,payload:this.resolvePayload(r),text:"",toolCallConsents:t},e)}close(){this.isConnecting$.complete(),this.conversation$.complete(),this.channelTitleSubject.complete(),this.derivedStores.teardown(),this.statesSubscription?.unsubscribe()}}exports.AsgardServiceClient=gn;exports.Channel=$;exports.Conversation=y;exports.EventType=d;exports.FetchSseAction=N;exports.HttpError=q;exports.MessageTemplateType=ye;exports.ToolCallConsentResult=ve;exports.conversationToSubagentEvents=Ye;exports.createDerivedStores=Qe;exports.deriveSubagents=Xe;exports.deriveTasks=We;exports.isAgentTool=Be;exports.isHttpError=tt;exports.isSubagentChildTool=qe;exports.isTaskTool=Ke;exports.reduceSubagents=Ve;exports.reduceTaskEvents=Fe;exports.subagentsEqual=Je;exports.tasksEqual=ze;
5
5
  //# sourceMappingURL=index.cjs.map