@asgard-js/core 0.3.26 → 0.3.28
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 +65 -1
- package/dist/index.cjs +3 -3
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -3
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +687 -507
- package/dist/index.mjs.map +1 -1
- package/dist/lib/channel.d.ts +61 -6
- package/dist/lib/channel.d.ts.map +1 -1
- package/dist/lib/client.d.ts +23 -2
- package/dist/lib/client.d.ts.map +1 -1
- package/dist/lib/conversation.d.ts +17 -5
- package/dist/lib/conversation.d.ts.map +1 -1
- package/dist/lib/create-sse-observable.d.ts.map +1 -1
- package/dist/lib/create-sse-observable.spec.d.ts +2 -0
- package/dist/lib/create-sse-observable.spec.d.ts.map +1 -0
- package/dist/lib/stop-generation.spec.d.ts +2 -0
- package/dist/lib/stop-generation.spec.d.ts.map +1 -0
- package/dist/types/channel-busy-error.d.ts +16 -0
- package/dist/types/channel-busy-error.d.ts.map +1 -0
- package/dist/types/channel.d.ts +51 -0
- package/dist/types/channel.d.ts.map +1 -1
- package/dist/types/client.d.ts +10 -1
- package/dist/types/client.d.ts.map +1 -1
- package/dist/types/index.d.ts +1 -0
- package/dist/types/index.d.ts.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -146,6 +146,7 @@ The main client class for interacting with the Asgard AI platform.
|
|
|
146
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
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
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
|
|
149
|
+
- **suspendChannel(customChannelId, options?)**: `Promise<void>` - Ask the backend to stop the channel's background run — `POST /message/suspend?custom_channel_id=…`, with optional `requestId` (stop only that run) and `force` (abandon it rather than let it wind down). Resolves on any 2xx **and** on `404` (channel never created = nothing to stop); rejects with `HttpError` otherwise. Resolving means _accepted_, not _stopped_ — see [Stopping generation](#stopping-generation). Optional on `IAsgardServiceClient` for backward compatibility
|
|
149
150
|
- **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
|
|
150
151
|
- **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
|
|
151
152
|
- **close()**: Close the SSE connection and clean up resources (idempotent)
|
|
@@ -179,7 +180,8 @@ Higher-level abstraction for managing a conversation channel with reactive state
|
|
|
179
180
|
|
|
180
181
|
- **sendMessage(payload, options?)**: `Promise<void>` - Send a message through the channel
|
|
181
182
|
- **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
|
-
- **
|
|
183
|
+
- **stopGeneration(options?)**: `Promise<void>` - Ask the backend to stop the in-flight run. See [Stopping generation](#stopping-generation) — resolving means _accepted_, not _stopped_
|
|
184
|
+
- **getTasks() / getSubagents() / getChannelTitle() / getRunStatus()**: `Task[]` / `Subagent[]` / `string | null` / `RunStatus` - Current immutable snapshots of the derived state (for `getSnapshot()`-style bridging; see [Derived State](#derived-state))
|
|
183
185
|
- **setChannelTitle(title)**: `void` - Seed or override the reactive channel title (F-016)
|
|
184
186
|
- **close()**: `void` - Close the channel and cleanup subscriptions
|
|
185
187
|
|
|
@@ -199,6 +201,7 @@ Higher-level abstraction for managing a conversation channel with reactive state
|
|
|
199
201
|
- **tasks$**: `Observable<Task[]>` - Reactive Task Check List store; replays the current snapshot and emits only when the list changes (F-010 / F-013)
|
|
200
202
|
- **subagents$**: `Observable<Subagent[]>` - Reactive Subagent List store; replays the current snapshot and emits only when the list changes (F-012 / F-013)
|
|
201
203
|
- **channelTitle$**: `Observable<string | null>` - Reactive channel-title store; seeded from metadata, updated by `title.update` (F-016)
|
|
204
|
+
- **runStatus$**: `Observable<RunStatus>` - Which run holds the connection and where it is in the stop lifecycle; see [Stopping generation](#stopping-generation) (F-023)
|
|
202
205
|
|
|
203
206
|
#### Example Usage
|
|
204
207
|
|
|
@@ -226,6 +229,67 @@ const channel = await Channel.reset({
|
|
|
226
229
|
await channel.sendMessage({ text: 'Hello, bot!' });
|
|
227
230
|
```
|
|
228
231
|
|
|
232
|
+
<a id="stopping-generation"></a>
|
|
233
|
+
<br/>
|
|
234
|
+
|
|
235
|
+
### Stopping generation
|
|
236
|
+
|
|
237
|
+
Runs execute **in the background on the server**. Closing the SSE connection only stops _watching_ — the
|
|
238
|
+
agent keeps going, keeps spending tokens and keeps writing the transcript. So stopping is a request to
|
|
239
|
+
the backend, not a local disconnect, and it happens in two steps:
|
|
240
|
+
|
|
241
|
+
1. `stopGeneration()` asks the backend to suspend the run. **Resolving means the request was accepted,
|
|
242
|
+
not that the run has stopped.** The SSE stream stays connected, because the stop is announced there.
|
|
243
|
+
2. The run winds down and the stream emits its terminal event — the _same_ event a normal run ends
|
|
244
|
+
with. Only then does `isConnecting` go false and the input reopen. There is no new event type.
|
|
245
|
+
|
|
246
|
+
`runStatus$` (and the `getRunStatus()` snapshot) exposes the lifecycle:
|
|
247
|
+
|
|
248
|
+
```typescript
|
|
249
|
+
interface RunStatus {
|
|
250
|
+
kind: 'user' | 'reset' | 'restore' | 'replay' | 'nudge' | null; // null = nothing in flight
|
|
251
|
+
stopPhase: 'idle' | 'stopping' | 'force-stoppable';
|
|
252
|
+
requestId?: string; // the backend's id for this run, captured from its first frame
|
|
253
|
+
}
|
|
254
|
+
```
|
|
255
|
+
|
|
256
|
+
**Only a `user` run is stoppable.** `isConnecting` is true for four unrelated things — the user's own
|
|
257
|
+
turn, the `RESET_CHANNEL` welcome, a transcript rejoin, and an invisible nudge — and `kind` is what
|
|
258
|
+
tells them apart. `stopGeneration()` is a no-op for every kind but `user`. A `replay` (rejoining a
|
|
259
|
+
channel whose run already finished) is loading history, not generating, so it should not show a
|
|
260
|
+
run-in-progress indicator either.
|
|
261
|
+
|
|
262
|
+
```typescript
|
|
263
|
+
channel.runStatus$.subscribe(({ kind, stopPhase }) => {
|
|
264
|
+
const canStop = kind === 'user' && stopPhase === 'idle';
|
|
265
|
+
const isStopping = stopPhase !== 'idle';
|
|
266
|
+
// Gate every send entrance on `isStopping`: the old run has not finished, and starting a second
|
|
267
|
+
// one would leave two concurrent runs writing to the same transcript.
|
|
268
|
+
});
|
|
269
|
+
|
|
270
|
+
try {
|
|
271
|
+
await channel.stopGeneration();
|
|
272
|
+
} catch (error) {
|
|
273
|
+
// The request failed (network error, or a non-2xx that is not 404). `stopPhase` has already been
|
|
274
|
+
// rolled back to `idle`, so the stop control is actionable again and the user can retry.
|
|
275
|
+
}
|
|
276
|
+
```
|
|
277
|
+
|
|
278
|
+
**Timeout escape hatch.** If the terminal event has not arrived ~10s after an accepted stop,
|
|
279
|
+
`stopPhase` becomes `force-stoppable`. Calling `stopGeneration({ force: true })` then tells the backend
|
|
280
|
+
to abandon the run instead of letting it wind down. Normal stops should never reach this.
|
|
281
|
+
|
|
282
|
+
**Sending while busy.** `sendMessage()` rejects with `ChannelBusyError` whenever a run is in flight,
|
|
283
|
+
including while stopping, and refuses _before_ the optimistic user bubble is pushed — so a rejected
|
|
284
|
+
send leaves no trace in the thread. Use `isChannelBusyError(error)` to detect it.
|
|
285
|
+
|
|
286
|
+
The conversation itself is unharmed: the transcript is kept, the suspended turn is rolled back, and the
|
|
287
|
+
next message continues the same conversation.
|
|
288
|
+
|
|
289
|
+
> Requires a client implementing `suspendChannel()` (`AsgardServiceClient` does; it POSTs to
|
|
290
|
+
> `${botProviderEndpoint}/message/suspend`). A custom `IAsgardServiceClient` without it falls back to
|
|
291
|
+
> the old local-abort behavior.
|
|
292
|
+
|
|
229
293
|
<a id="conversation"></a>
|
|
230
294
|
<br/>
|
|
231
295
|
|
package/dist/index.cjs
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});class w 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
|
|
2
|
-
`+h:h;break;case"event":r.event=h;break;case"id":n(r.id=h);break;case"retry":const m=parseInt(h,10);isNaN(m)||t(r.retry=m);break}}}}function
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});class w 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 ot(n){return n instanceof w}class se extends Error{runKind;constructor(t){super(`Cannot send a message while a "${t}" run is in flight on this channel.`),this.name="ChannelBusyError",this.runKind=t}}function it(n){return n instanceof se}var U=(n=>(n.RESET_CHANNEL="RESET_CHANNEL",n.NONE="NONE",n.RESPONSE_TOOL_CALL_CONSENT="RESPONSE_TOOL_CALL_CONSENT",n.NUDGE="NUDGE",n))(U||{}),l=(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.SANDBOX_LAUNCH="asgard.sandbox.launch",n.SANDBOX_READY="asgard.sandbox.ready",n.DONE="asgard.run.done",n.ERROR="asgard.run.error",n))(l||{}),Se=(n=>(n.ALLOW_ONCE="ALLOW_ONCE",n.ALLOW_ALWAYS="ALLOW_ALWAYS",n.DENY_ONCE="DENY_ONCE",n))(Se||{}),we=(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))(we||{});async function at(n,t){const e=n.getReader();let r;for(;!(r=await e.read()).done;)t(r.value)}function ct(n){let t,e,r,s=!1;return function(i){t===void 0?(t=i,e=0,r=-1):t=lt(t,i);const a=t.length;let c=0;for(;e<a;){s&&(t[e]===10&&(c=++e),s=!1);let u=-1;for(;e<a&&u===-1;++e)switch(t[e]){case 58:r===-1&&(r=e-c);break;case 13:s=!0;case 10:u=e;break}if(u===-1)break;n(t.subarray(c,u),r),c=e,r=-1}c===a?t=void 0:c!==0&&(t=t.subarray(c),e-=c)}}function ut(n,t,e){let r=ue();const s=new TextDecoder;return function(i,a){if(i.length===0)e?.(r),r=ue();else if(a>0){const c=s.decode(i.subarray(0,a)),u=a+(i[a+1]===32?2:1),h=s.decode(i.subarray(u));switch(c){case"data":r.data=r.data?r.data+`
|
|
2
|
+
`+h:h;break;case"event":r.event=h;break;case"id":n(r.id=h);break;case"retry":const m=parseInt(h,10);isNaN(m)||t(r.retry=m);break}}}}function lt(n,t){const e=new Uint8Array(n.length+t.length);return e.set(n),e.set(t,n.length),e}function ue(){return{data:"",event:"",id:"",retry:void 0}}var dt=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 Z="text/event-stream",ht=1e3,le="last-event-id";function Ee(n,t){var{signal:e,headers:r,onopen:s,onmessage:o,onclose:i,onerror:a,openWhenHidden:c,fetch:u}=t,h=dt(t,["signal","headers","onopen","onmessage","onclose","onerror","openWhenHidden","fetch"]);return new Promise((m,v)=>{const d=Object.assign({},r);d.accept||(d.accept=Z);let p;function f(){p.abort(),document.hidden||X()}c||document.addEventListener("visibilitychange",f);let _=ht,E=0;function L(){document.removeEventListener("visibilitychange",f),window.clearTimeout(E),p.abort()}e?.addEventListener("abort",()=>{L(),m()});const rt=u??window.fetch,st=s??ft;async function X(){var V;p=new AbortController;try{const B=await rt(n,Object.assign(Object.assign({},h),{headers:d,signal:p.signal}));await st(B),await at(B.body,ct(ut(x=>{x?d[le]=x:delete d[le]},x=>{_=x},o))),i?.(),L(),m()}catch(B){if(!p.signal.aborted)try{const x=(V=a?.(B))!==null&&V!==void 0?V:_;window.clearTimeout(E),E=window.setTimeout(X,x)}catch(x){L(),v(x)}}}X()})}function ft(n){const t=n.headers.get("content-type");if(!t?.startsWith(Z))throw new Error(`Expected content-type to be ${Z}, Actual: ${t}`)}var ee=function(n,t){return ee=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])},ee(n,t)};function T(n,t){if(typeof t!="function"&&t!==null)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");ee(n,t);function e(){this.constructor=n}n.prototype=t===null?Object.create(t):(e.prototype=t.prototype,new e)}function pt(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{u(r.next(h))}catch(m){i(m)}}function c(h){try{u(r.throw(h))}catch(m){i(m)}}function u(h){h.done?o(h.value):s(h.value).then(a,c)}u((r=r.apply(n,t||[])).next())})}function Ie(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(u){return function(h){return c([u,h])}}function c(u){if(r)throw new TypeError("Generator is already executing.");for(;i&&(i=0,u[0]&&(e=0)),e;)try{if(r=1,s&&(o=u[0]&2?s.return:u[0]?s.throw||((o=s.return)&&o.call(s),0):s.next)&&!(o=o.call(s,u[1])).done)return o;switch(s=0,o&&(u=[u[0]&2,o.value]),u[0]){case 0:case 1:o=u;break;case 4:return e.label++,{value:u[1],done:!1};case 5:e.label++,s=u[1],u=[0];continue;case 7:u=e.ops.pop(),e.trys.pop();continue;default:if(o=e.trys,!(o=o.length>0&&o[o.length-1])&&(u[0]===6||u[0]===2)){e=0;continue}if(u[0]===3&&(!o||u[1]>o[0]&&u[1]<o[3])){e.label=u[1];break}if(u[0]===6&&e.label<o[1]){e.label=o[1],o=u;break}if(o&&e.label<o[2]){e.label=o[2],e.ops.push(u);break}o[2]&&e.ops.pop(),e.trys.pop();continue}u=t.call(n,e)}catch(h){u=[6,h],s=0}finally{r=o=0}if(u[0]&5)throw u[1];return{value:u[0]?u[1]:void 0,done:!0}}}function N(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 H(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 F(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 R(n){return this instanceof R?(this.v=n,this):new R(n)}function mt(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(d){return function(p){return Promise.resolve(p).then(d,m)}}function a(d,p){r[d]&&(s[d]=function(f){return new Promise(function(_,E){o.push([d,f,_,E])>1||c(d,f)})},p&&(s[d]=p(s[d])))}function c(d,p){try{u(r[d](p))}catch(f){v(o[0][3],f)}}function u(d){d.value instanceof R?Promise.resolve(d.value.v).then(h,m):v(o[0][2],d)}function h(d){c("next",d)}function m(d){c("throw",d)}function v(d,p){d(p),o.shift(),o.length&&c(o[0][0],o[0][1])}}function gt(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 N=="function"?N(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,c){i=n[o](i),s(a,c,i.done,i.value)})}}function s(o,i,a,c){Promise.resolve(c).then(function(u){o({value:u,done:a})},i)}}function g(n){return typeof n=="function"}function Te(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 z=Te(function(n){return function(e){n(this),this.message=e?e.length+` errors occurred during unsubscription:
|
|
3
3
|
`+e.map(function(r,s){return s+1+") "+r.toString()}).join(`
|
|
4
|
-
`):"",this.name="UnsubscriptionError",this.errors=e}});function q(n,t){if(n){var e=n.indexOf(t);0<=e&&n.splice(e,1)}}var $=(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=N(i),c=a.next();!c.done;c=a.next()){var u=c.value;u.remove(this)}}catch(p){t={error:p}}finally{try{c&&!c.done&&(e=a.return)&&e.call(a)}finally{if(t)throw t.error}}else i.remove(this);var h=this.initialTeardown;if(g(h))try{h()}catch(p){o=p instanceof z?p.errors:[p]}var m=this._finalizers;if(m){this._finalizers=null;try{for(var v=N(m),l=v.next();!l.done;l=v.next()){var f=l.value;try{ue(f)}catch(p){o=o??[],p instanceof z?o=F(F([],H(o)),H(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 z(o)}},n.prototype.add=function(t){var e;if(t&&t!==this)if(this.closed)ue(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)&&q(e,t)},n.prototype.remove=function(t){var e=this._finalizers;e&&q(e,t),t instanceof n&&t._removeParent(this)},n.EMPTY=(function(){var t=new n;return t.closed=!0,t})(),n})(),Ie=$.EMPTY;function Te(n){return n instanceof $||n&&"closed"in n&&g(n.remove)&&g(n.add)&&g(n.unsubscribe)}function ue(n){g(n)?n():n.unsubscribe()}var pt={Promise:void 0},mt={setTimeout:function(n,t){for(var e=[],r=2;r<arguments.length;r++)e[r-2]=arguments[r];return setTimeout.apply(void 0,F([n,t],H(e)))},clearTimeout:function(n){return clearTimeout(n)},delegate:void 0};function xe(n){mt.setTimeout(function(){throw n})}function ee(){}function K(n){n()}var re=(function(n){T(t,n);function t(e){var r=n.call(this)||this;return r.isStopped=!1,e?(r.destination=e,Te(e)&&e.add(r)):r.destination=vt,r}return t.create=function(e,r,s){return new te(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})($),gt=(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){B(r)}},n.prototype.error=function(t){var e=this.partialObserver;if(e.error)try{e.error(t)}catch(r){B(r)}else B(t)},n.prototype.complete=function(){var t=this.partialObserver;if(t.complete)try{t.complete()}catch(e){B(e)}},n})(),te=(function(n){T(t,n);function t(e,r,s){var o=n.call(this)||this,i;return g(e)||!e?i={next:e??void 0,error:r??void 0,complete:s??void 0}:i=e,o.destination=new gt(i),o}return t})(re);function B(n){xe(n)}function bt(n){throw n}var vt={closed:!0,next:ee,error:bt,complete:ee},se=(function(){return typeof Symbol=="function"&&Symbol.observable||"@@observable"})();function X(n){return n}function yt(n){return n.length===0?X: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=wt(t)?t:new te(t,e,r);return K(function(){var i=s,a=i.operator,c=i.source;o.add(a?a.call(o,c):c?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=le(e),new e(function(s,o){var i=new te({next:function(a){try{t(a)}catch(c){o(c),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[se]=function(){return this},n.prototype.pipe=function(){for(var t=[],e=0;e<arguments.length;e++)t[e]=arguments[e];return yt(t)(this)},n.prototype.toPromise=function(t){var e=this;return t=le(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 le(n){var t;return(t=n??pt.Promise)!==null&&t!==void 0?t:Promise}function St(n){return n&&g(n.next)&&g(n.error)&&g(n.complete)}function wt(n){return n&&n instanceof re||St(n)&&Te(n)}function Et(n){return g(n?.lift)}function A(n){return function(t){if(Et(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 It(n,t,e,r,s)}var It=(function(n){T(t,n);function t(e,r,s,o,i,a){var c=n.call(this,e)||this;return c.onFinalize=i,c.shouldUnsubscribe=a,c._next=r?function(u){try{r(u)}catch(h){e.error(h)}}:n.prototype._next,c._error=o?function(u){try{o(u)}catch(h){e.error(h)}finally{this.unsubscribe()}}:n.prototype._error,c._complete=s?function(){try{s()}catch(u){e.error(u)}finally{this.unsubscribe()}}:n.prototype._complete,c}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})(re),Tt=Ee(function(n){return function(){n(this),this.name="ObjectUnsubscribedError",this.message="object unsubscribed"}}),oe=(function(n){T(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 de(this,this);return r.operator=e,r},t.prototype._throwIfClosed=function(){if(this.closed)throw new Tt},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=N(r.currentObservers),a=i.next();!a.done;a=i.next()){var c=a.value;c.next(e)}}catch(u){s={error:u}}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?Ie:(this.currentObservers=null,a.push(e),new $(function(){r.currentObservers=null,q(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 de(e,r)},t})(S),de=(function(n){T(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:Ie},t})(oe),P=(function(n){T(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})(oe),xt={now:function(){return Date.now()}},Ct=(function(n){T(t,n);function t(e,r){return n.call(this)||this}return t.prototype.schedule=function(e,r){return this},t})($),he={setInterval:function(n,t){for(var e=[],r=2;r<arguments.length;r++)e[r-2]=arguments[r];return setInterval.apply(void 0,F([n,t],H(e)))},clearInterval:function(n){return clearInterval(n)},delegate:void 0},Ot=(function(n){T(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),he.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&&he.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,q(o,this),r!=null&&(this.id=this.recycleAsyncId(s,r,null)),this.delay=null,n.prototype.unsubscribe.call(this)}},t})(Ct),fe=(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=xt.now,n})(),At=(function(n){T(t,n);function t(e,r){r===void 0&&(r=fe.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})(fe),Ce=new At(Ot),Lt=Ce,_t=new S(function(n){return n.complete()});function Oe(n){return n&&g(n.schedule)}function Ae(n){return n[n.length-1]}function Pt(n){return g(Ae(n))?n.pop():void 0}function Le(n){return Oe(Ae(n))?n.pop():void 0}var _e=(function(n){return n&&typeof n.length=="number"&&typeof n!="function"});function Pe(n){return g(n?.then)}function Me(n){return g(n[se])}function Ue(n){return Symbol.asyncIterator&&g(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 Mt(){return typeof Symbol!="function"||!Symbol.iterator?"@@iterator":Symbol.iterator}var Ne=Mt();function Re(n){return g(n?.[Ne])}function $e(n){return ht(this,arguments,function(){var e,r,s,o;return we(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,k(e.read())];case 3:return r=i.sent(),s=r.value,o=r.done,o?[4,k(void 0)]:[3,5];case 4:return[2,i.sent()];case 5:return[4,k(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 je(n){return g(n?.getReader)}function M(n){if(n instanceof S)return n;if(n!=null){if(Me(n))return Ut(n);if(_e(n))return kt(n);if(Pe(n))return Nt(n);if(Ue(n))return De(n);if(Re(n))return Rt(n);if(je(n))return $t(n)}throw ke(n)}function Ut(n){return new S(function(t){var e=n[se]();if(g(e.subscribe))return e.subscribe(t);throw new TypeError("Provided object does not correctly implement Symbol.observable")})}function kt(n){return new S(function(t){for(var e=0;e<n.length&&!t.closed;e++)t.next(n[e]);t.complete()})}function Nt(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,xe)})}function Rt(n){return new S(function(t){var e,r;try{for(var s=N(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 De(n){return new S(function(t){jt(n,t).catch(function(e){return t.error(e)})})}function $t(n){return De($e(n))}function jt(n,t){var e,r,s,o;return dt(this,void 0,void 0,function(){var i,a;return we(this,function(c){switch(c.label){case 0:c.trys.push([0,5,6,11]),e=ft(n),c.label=1;case 1:return[4,e.next()];case 2:if(r=c.sent(),!!r.done)return[3,4];if(i=r.value,t.next(i),t.closed)return[2];c.label=3;case 3:return[3,1];case 4:return[3,11];case 5:return a=c.sent(),s={error:a},[3,11];case 6:return c.trys.push([6,,9,10]),r&&!r.done&&(o=e.return)?[4,o.call(e)]:[3,8];case 7:c.sent(),c.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 He(n,t){return t===void 0&&(t=0),A(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 Fe(n,t){return t===void 0&&(t=0),A(function(e,r){r.add(n.schedule(function(){return e.subscribe(r)},t))})}function Dt(n,t){return M(n).pipe(Fe(t),He(t))}function Ht(n,t){return M(n).pipe(Fe(t),He(t))}function Ft(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 Gt(n,t){return new S(function(e){var r;return C(e,t,function(){r=n[Ne](),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 g(r?.return)&&r.return()}})}function Ge(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 Bt(n,t){return Ge($e(n),t)}function Kt(n,t){if(n!=null){if(Me(n))return Dt(n,t);if(_e(n))return Ft(n,t);if(Pe(n))return Ht(n,t);if(Ue(n))return Ge(n,t);if(Re(n))return Gt(n,t);if(je(n))return Bt(n,t)}throw ke(n)}function ie(n,t){return t?Kt(n,t):M(n)}function qt(){for(var n=[],t=0;t<arguments.length;t++)n[t]=arguments[t];var e=Le(n);return ie(n,e)}function Yt(n){return n instanceof Date&&!isNaN(n)}function R(n,t){return A(function(e,r){var s=0;e.subscribe(O(r,function(o){r.next(n.call(t,o,s++))}))})}var Xt=Array.isArray;function Vt(n,t){return Xt(t)?n.apply(void 0,F([],H(t))):n(t)}function Wt(n){return R(function(t){return Vt(n,t)})}var zt=Array.isArray,Jt=Object.getPrototypeOf,Qt=Object.prototype,Zt=Object.keys;function en(n){if(n.length===1){var t=n[0];if(zt(t))return{args:t,keys:null};if(tn(t)){var e=Zt(t);return{args:e.map(function(r){return t[r]}),keys:e}}}return{args:n,keys:null}}function tn(n){return n&&typeof n=="object"&&Jt(n)===Qt}function nn(n,t){return n.reduce(function(e,r,s){return e[r]=t[s],e},{})}function rn(){for(var n=[],t=0;t<arguments.length;t++)n[t]=arguments[t];var e=Le(n),r=Pt(n),s=en(n),o=s.args,i=s.keys;if(o.length===0)return ie([],e);var a=new S(sn(o,e,i?function(c){return nn(i,c)}:X));return r?a.pipe(Wt(r)):a}function sn(n,t,e){return e===void 0&&(e=X),function(r){pe(t,function(){for(var s=n.length,o=new Array(s),i=s,a=s,c=function(h){pe(t,function(){var m=ie(n[h],t),v=!1;m.subscribe(O(r,function(l){o[h]=l,v||(v=!0,a--),a||r.next(e(o.slice()))},function(){--i||r.complete()}))},r)},u=0;u<s;u++)c(u)},r)}}function pe(n,t,e){n?C(e,n,t):t()}function on(n,t,e,r,s,o,i,a){var c=[],u=0,h=0,m=!1,v=function(){m&&!c.length&&!u&&t.complete()},l=function(p){return u<r?f(p):c.push(p)},f=function(p){u++;var L=!1;M(e(p,h++)).subscribe(O(t,function(E){t.next(E)},function(){L=!0},void 0,function(){if(L)try{u--;for(var E=function(){var _=c.shift();i||f(_)};c.length&&u<r;)E();v()}catch(_){t.error(_)}}))};return n.subscribe(O(t,l,function(){m=!0,v()})),function(){}}function Y(n,t,e){return e===void 0&&(e=1/0),g(t)?Y(function(r,s){return R(function(o,i){return t(r,o,s,i)})(M(n(r,s)))},e):(typeof t=="number"&&(e=t),A(function(r,s){return on(r,s,n,e)}))}function an(n,t,e){n===void 0&&(n=0),e===void 0&&(e=Lt);var r=-1;return t!=null&&(Oe(t)?e=t:r=t),new S(function(s){var o=Yt(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 cn(n,t){return g(t)?Y(n,t,1):Y(n,1)}function un(n){return n<=0?function(){return _t}:A(function(t,e){var r=0;t.subscribe(O(e,function(s){++r<=n&&(e.next(s),n<=r&&e.complete())}))})}function ln(n){return R(function(){return n})}function dn(n,t){return Y(function(e,r){return M(n(e,r)).pipe(un(1),ln(e))})}function hn(n,t){t===void 0&&(t=Ce);var e=an(n,t);return dn(function(){return e})}function j(n,t){return t===void 0&&(t=X),n=n??fn,A(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 fn(n,t){return n===t}function pn(n){return A(function(t,e){try{t.subscribe(e)}finally{e.add(n)}})}function mn(n){return A(function(t,e){M(n).subscribe(O(e,function(){return e.complete()},ee)),!e.closed&&t.subscribe(e)})}function me(n){const{endpoint:t,apiKey:e,payload:r,debugMode:s,customHeaders:o}=n,i=n.method??"POST";return new S(a=>{const c=new AbortController;let u,h=!1;const m={"Content-Type":"application/json",...o};e&&(m["X-API-KEY"]=e);const v=new URL(t);return s&&v.searchParams.set("is_debug","true"),Se(v.toString(),{method:i,headers:m,body:i==="POST"&&r?JSON.stringify(r):void 0,signal:c.signal,openWhenHidden:!0,onopen:async l=>{if(l.ok)u=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 w(l.status,l.statusText,f)),c.abort()}},onmessage:l=>{l.id&&(h=!0);const f=JSON.parse(l.data);u?f.traceId=u:f.requestId&&(f.traceId=f.requestId,u||(u=f.requestId)),a.next(f)},onclose:()=>{a.complete()},onerror:l=>{if(!h)throw a.error(l),c.abort(),l}}),()=>{c.abort()}})}class gn{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 bn{apiKey;endpoint;botProviderEndpoint;debugMode;destroy$=new oe;closed=!1;detached=!1;detachTimer;inFlight=0;sseEmitter=new gn;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){return e?.onSseStart?.(),this.inFlight+=1,this.runSse(me({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);return r.searchParams.set("custom_channel_id",t),this.runSse(me({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 w(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,launchedSandboxes:(a.launchedSandboxes??[]).map(c=>({sandboxName:c.sandboxName,sandboxBlueprintName:c.sandboxBlueprintName,workingDirectory:c.workingDirectory,editorServerEnabled:c.editorServerEnabled,browserEnabled:c.browserEnabled}))}}runSse(t,e){return t.pipe(cn(r=>qt(r).pipe(hn(e?.delayTime??50))),mn(this.destroy$),pn(()=>this.onRunSettled())).subscribe({next:r=>{this.detached||(e?.onSseMessage?.(r),this.handleEvent(r))},error:r=>{this.detached||e?.onSseError?.(r)},complete:()=>{this.detached||e?.onSseCompleted?.()}})}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 c=await a.blob(),u=t.split("/").pop()||"download";return this.debugMode&&console.log("[AsgardServiceClient] Channel Home download response:",{filename:u,size:c.size}),{blob:c,filename:u}}catch(a){throw console.error("[AsgardServiceClient] Channel Home download error:",a),a}}async generateSandboxBrowserOpenUrl(t){const e=this.getBaseEndpoint();if(!e)throw new Error("Unable to derive sandbox browser open-url endpoint. Please provide botProviderEndpoint in config.");const r=`${e}/sandbox/${encodeURIComponent(t)}/browser/open-url`,s={...this.customHeaders};this.apiKey&&(s["X-API-KEY"]=this.apiKey);const o=await fetch(r,{method:"POST",headers:s});if(!o.ok)throw new w(o.status,o.statusText,await o.text().catch(()=>{}));const i=await o.json(),a=i.data?.openURL??i.openURL;if(!a)throw new Error("Sandbox browser open-url response did not contain an openURL.");return a}deriveSandboxFsEndpoint(t){const e=this.getBaseEndpoint();if(!e)throw new Error("Unable to derive sandbox fs endpoint. Please provide botProviderEndpoint in config.");return`${e}/sandbox/${encodeURIComponent(t)}/fs`}sandboxFsHeaders(){const t={...this.customHeaders};return this.apiKey&&(t["X-API-KEY"]=this.apiKey),t}async sandboxFsList(t,e){const r=new URL(`${this.deriveSandboxFsEndpoint(t)}/list`);r.searchParams.set("path",e);const s=await fetch(r.toString(),{method:"GET",headers:this.sandboxFsHeaders()});if(!s.ok)throw new w(s.status,s.statusText,await s.text().catch(()=>{}));const o=await s.json(),i=o.data??o;return{entries:i.entries??[],truncated:i.truncated??!1}}async sandboxFsRead(t,e,r){const s=new URL(`${this.deriveSandboxFsEndpoint(t)}/file`);s.searchParams.set("path",e),r?.offsetBytes!=null&&s.searchParams.set("offset_bytes",String(r.offsetBytes)),r?.limitBytes!=null&&s.searchParams.set("limit_bytes",String(r.limitBytes));const o=await fetch(s.toString(),{method:"GET",headers:this.sandboxFsHeaders()});if(!o.ok)throw new w(o.status,o.statusText,await o.text().catch(()=>{}));const i=await o.blob(),a=o.headers.get("X-Total-Bytes");return{content:i,totalBytes:a!=null?Number(a):i.size,truncated:o.headers.get("X-Truncated")==="true"}}async sandboxFsWrite(t,e,r,s){const o=new URL(`${this.deriveSandboxFsEndpoint(t)}/file`);o.searchParams.set("path",e),s?.mode!=null&&o.searchParams.set("mode",String(s.mode)),s?.createOnly&&o.searchParams.set("create_only","true");const i=new FormData;i.append("file",r instanceof Blob?r:new Blob([r]));const a=await fetch(o.toString(),{method:"PUT",headers:this.sandboxFsHeaders(),body:i});if(!a.ok)throw new w(a.status,a.statusText,await a.text().catch(()=>{}));const c=await a.json();return{bytesWritten:(c.data??c).bytesWritten??0}}async sandboxFsRequest(t,e,r,s){const o=new URL(`${this.deriveSandboxFsEndpoint(t)}/${e}`);Object.entries(s).forEach(([a,c])=>o.searchParams.set(a,c));const i=await fetch(o.toString(),{method:r,headers:this.sandboxFsHeaders()});if(!i.ok)throw new w(i.status,i.statusText,await i.text().catch(()=>{}));return i.json().catch(()=>null)}async sandboxFsStat(t,e){const r=new URL(`${this.deriveSandboxFsEndpoint(t)}/stat`);r.searchParams.set("path",e);const s=await fetch(r.toString(),{method:"GET",headers:this.sandboxFsHeaders()});if(!s.ok)throw new w(s.status,s.statusText,await s.text().catch(()=>{}));const o=await s.json(),i=o.data??o;return{exists:i.exists??!1,isDir:i.isDir??!1,sizeBytes:i.sizeBytes??0,mtimeUnix:i.mtimeUnix??0,mode:i.mode??0,etag:i.etag}}async sandboxFsMkdir(t,e){await this.sandboxFsRequest(t,"mkdir","POST",{path:e})}async sandboxFsRemove(t,e){await this.sandboxFsRequest(t,"item","DELETE",{path:e})}async sandboxFsRemoveAll(t,e){await this.sandboxFsRequest(t,"all","DELETE",{path:e})}async sandboxFsCopy(t,e,r,s){const o={src:e,dst:r};s?.overwrite&&(o.overwrite="true");const i=await this.sandboxFsRequest(t,"copy","POST",o);return{bytesCopied:(i?.data??i)?.bytesCopied??0}}async sandboxFsMove(t,e,r,s){const o={src:e,dst:r};s?.overwrite&&(o.overwrite="true"),await this.sandboxFsRequest(t,"move","POST",o)}sandboxFsWatch(t,e){const r=new URL(`${this.deriveSandboxFsEndpoint(t)}/watch`);return r.searchParams.set("path",e),new S(s=>{const o=new AbortController;return Se(r.toString(),{headers:this.sandboxFsHeaders(),signal:o.signal,openWhenHidden:!0,onopen:async i=>{if(!i.ok){const a=await i.text().catch(()=>{});s.error(new w(i.status,i.statusText,a)),o.abort()}},onmessage:i=>{i.event==="change"&&s.next(JSON.parse(i.data))},onclose:()=>s.complete(),onerror:i=>{throw s.error(i),o.abort(),i}}),()=>o.abort()})}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 y=[];for(let n=0;n<256;++n)y.push((n+256).toString(16).slice(1));function vn(n,t=0){return(y[n[t+0]]+y[n[t+1]]+y[n[t+2]]+y[n[t+3]]+"-"+y[n[t+4]]+y[n[t+5]]+"-"+y[n[t+6]]+y[n[t+7]]+"-"+y[n[t+8]]+y[n[t+9]]+"-"+y[n[t+10]]+y[n[t+11]]+y[n[t+12]]+y[n[t+13]]+y[n[t+14]]+y[n[t+15]]).toLowerCase()}let J;const yn=new Uint8Array(16);function Sn(){if(!J){if(typeof crypto>"u"||!crypto.getRandomValues)throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");J=crypto.getRandomValues.bind(crypto)}return J(yn)}const wn=typeof crypto<"u"&&crypto.randomUUID&&crypto.randomUUID.bind(crypto),ge={randomUUID:wn};function En(n,t,e){n=n||{};const r=n.random??n.rng?.()??Sn();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,vn(r)}function Be(n,t,e){return ge.randomUUID&&!n?ge.randomUUID():En(n)}class b{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 b({messages:e,pendingConsent:this.pendingConsent})}clearPendingConsent(){return this.pendingConsent?new b({messages:this.messages,pendingConsent:null}):this}cancelInFlightToolCalls(){if(!this.messages)return this;let t=!1;const e=new Map(this.messages);for(const[r,s]of e)s.type==="tool-call"&&!s.isComplete&&(e.set(r,{...s,isComplete:!0,isCancelled:!0}),t=!0);return t?new b({messages:e,pendingConsent:this.pendingConsent}):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(e.parentToolUseId)return this;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 b({messages:r,pendingConsent:this.pendingConsent})}onMessageDelta(t){const e=t.fact.messageDelta.message;if(e.parentToolUseId)return this;const 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 b({messages:o,pendingConsent:this.pendingConsent})}onMessageComplete(t){const e=t.fact.messageComplete.message;if(e.parentToolUseId)return this;const 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 b({messages:r,pendingConsent:this.pendingConsent})}onThinkingStart(t){const e=t.fact.messageThinkingStart.message;if(e.parentToolUseId)return this;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 b({messages:r,pendingConsent:this.pendingConsent})}onThinkingDelta(t){const e=t.fact.messageThinkingDelta.message;if(e.parentToolUseId)return this;const 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 b({messages:o,pendingConsent:this.pendingConsent})}onThinkingComplete(t){const e=t.fact.messageThinkingComplete.message;if(e.parentToolUseId)return this;const 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 b({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 b({messages:s,pendingConsent:this.pendingConsent})}onMessageError(t){const e=Be(),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 b({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 b({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 b({messages:r,pendingConsent:this.pendingConsent})}onToolCallConsent(t){const e=t.fact.toolCallConsent;return new b({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 b({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 b({messages:r,pendingConsent:this.pendingConsent})}}const In=new Set(["TaskCreate","TaskUpdate"]);function Ke(n){return n.toolsetName===""&&In.has(n.toolName)}function be(n){return typeof n=="object"&&n!==null?n:void 0}function I(n){return typeof n=="string"?n:void 0}function qe(n){const t=[],e=new Map;for(const r of n){const s=r.parameter??{},o=r.sidecar??{};if(r.toolName==="TaskCreate"){const i=be(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=be(o.statusChange),a=I(s.taskId)||I(o.taskId),c=I(i?.to)||I(s.status);if(!a||!c)continue;const u=e.get(a);u&&e.set(a,{...u,status:c})}}return t.map(r=>e.get(r))}function Ye(n){return n.toolsetName===""&&n.toolName==="Agent"}function Xe(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 Tn(n){return typeof n=="string"?n:void 0}function We(n){const t=[];for(const e of n){if(e.type==="tool-call"&&Ye(e)){t.push({kind:"agentStart",toolUseId:e.toolUseId??e.messageId,description:Tn(e.parameter.description)});continue}if(e.type==="tool-call"&&Xe(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 ze(n){const t=Array.from(n.messages?.values()??[]).filter(e=>e.type==="tool-call"&&e.isComplete&&Ke(e));return qe(t)}function Je(n){return Ve(We(Array.from(n.messages?.values()??[])))}function Qe(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 xn(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 Ze(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&&xn(e.tools,s.tools)})}function et(n){const t=new P([]),e=new P([]),r=new $;return r.add(n.pipe(R(ze),j(Qe)).subscribe(t)),r.add(n.pipe(R(Je),j(Ze)).subscribe(e)),{tasks$:t.asObservable(),subagents$:e.asObservable(),getTasks:()=>t.value,getSubagents:()=>e.value,teardown:()=>r.unsubscribe()}}function ne(n){const t=new Map;for(const e of n)t.set(e.sandboxName,e);return[...t.values()].sort((e,r)=>(e.sandboxBlueprintName||e.sandboxName).localeCompare(r.sandboxBlueprintName||r.sandboxName))}class D{client;customChannelId;customMessageId;isConnecting$;conversation$;channelTitleSubject;sandboxPhaseSubject;launchedSandboxesSubject;pendingLaunches=[];derivedStores;statesObserver;statesSubscription;tasks$;subagents$;channelTitle$;sandboxPhase$;launchedSandboxes$;currentUserMessageId;lastSentMessageId;currentRun;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 P(!1),this.conversation$=new P(t.conversation),this.channelTitleSubject=new P(t.channelTitle??null),this.sandboxPhaseSubject=new P("idle"),this.launchedSandboxesSubject=new P(ne(t.launchedSandboxes??[])),this.derivedStores=et(this.conversation$),this.tasks$=this.derivedStores.tasks$,this.subagents$=this.derivedStores.subagents$,this.channelTitle$=this.channelTitleSubject.pipe(j()),this.sandboxPhase$=this.sandboxPhaseSubject.pipe(j()),this.launchedSandboxes$=this.launchedSandboxesSubject.pipe(j()),this.statesObserver=t.statesObserver}getTasks(){return this.derivedStores.getTasks()}getSubagents(){return this.derivedStores.getSubagents()}getChannelTitle(){return this.channelTitleSubject.value}getSandboxPhase(){return this.sandboxPhaseSubject.value}getLaunchedSandboxes(){return this.launchedSandboxesSubject.value}getPendingLaunches(){return this.pendingLaunches}applyLaunchedSandboxes(t){const e=ne(t);this.pendingLaunches=this.pendingLaunches.filter(r=>!e.some(s=>s.sandboxName===r)),this.launchedSandboxesSubject.next(e)}dropSandbox(t){const e=this.launchedSandboxesSubject.value,r=e.filter(s=>s.sandboxName!==t);r.length!==e.length&&this.launchedSandboxesSubject.next(r)}noteSandboxLaunch(t){this.pendingLaunches.includes(t)||(this.pendingLaunches=[...this.pendingLaunches,t]),this.refetchMetadata()}async refetchMetadata(){if(!this.client.channelMetadata)return;const t=await this.client.channelMetadata(this.customChannelId);t&&this.applyLaunchedSandboxes(t.launchedSandboxes)}setChannelTitle(t){this.channelTitleSubject.next(t)}static create(t){const e=new D(t);return e.subscribe(),e}static async reset(t,e,r,s){const o=new D(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 D(t);try{return s.subscribe(),r?.(s),await s.rejoinChannel(e),s}catch(o){throw s.close(),o}}subscribe(){this.statesSubscription=rn([this.isConnecting$,this.conversation$,this.derivedStores.tasks$,this.derivedStores.subagents$,this.channelTitle$,this.sandboxPhase$,this.launchedSandboxes$]).pipe(R(([t,e,r,s,o,i,a])=>({isConnecting:t,conversation:e,tasks:r,subagents:s,channelTitle:o,sandboxPhase:i,launchedSandboxes:a}))).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}updateSandboxPhase(t){switch(t){case d.SANDBOX_LAUNCH:this.sandboxPhaseSubject.next("launching");break;case d.SANDBOX_READY:this.sandboxPhaseSubject.next("ready");break;case d.INIT:case d.ERROR:this.sandboxPhaseSubject.next("idle");break}}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.updateSandboxPhase(s.eventType),s.eventType===d.SANDBOX_LAUNCH&&this.noteSandboxLaunch(s.fact.sandboxLaunch.sandboxName),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 b({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,this.currentRun=void 0,r(s)},onSseCompleted:()=>{t?.onSseCompleted?.(),this.isConnecting$.next(!1),this.currentUserMessageId=void 0,this.currentRun=void 0,e()}}}fetchSse(t,e){return new Promise((r,s)=>{this.isConnecting$.next(!0),this.currentRun=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.currentRun=this.client.rejoinSse(this.customChannelId,this.buildRunHandlers(t,e,r))})}resetChannel(t,e){return this.fetchSse({action:U.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??Be();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:U.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:U.RESPONSE_TOOL_CALL_CONSENT,customChannelId:this.customChannelId,customMessageId:this.lastSentMessageId??this.customMessageId,payload:this.resolvePayload(r),text:"",toolCallConsents:t},e)}nudge(t){return this.fetchSse({action:U.NUDGE,customChannelId:this.customChannelId,customMessageId:this.lastSentMessageId??this.customMessageId,text:""},t)}stopGeneration(){this.currentRun&&(this.currentRun.unsubscribe(),this.currentRun=void 0,this.isConnecting$.next(!1),this.currentUserMessageId=void 0,this.conversation$.next(this.conversation$.value.cancelInFlightToolCalls()))}close(){this.currentRun?.unsubscribe(),this.currentRun=void 0,this.isConnecting$.complete(),this.conversation$.complete(),this.channelTitleSubject.complete(),this.sandboxPhaseSubject.complete(),this.launchedSandboxesSubject.complete(),this.derivedStores.teardown(),this.statesSubscription?.unsubscribe()}}function Cn(n){const t=/^sandbox:\/\/([^/]+)\/([^?#]+)(?:\?([^#]*))?/.exec(n.trim());if(!t)return null;const e=decodeURIComponent(t[1]),r=t[2],s=new URLSearchParams(t[3]??"");if(r==="open-browser")return{kind:"open-browser",sandboxName:e};if(r==="open-file"){const o=s.get("absolute_path");return o?{kind:"open-file",sandboxName:e,absolutePath:o}:null}return null}exports.AsgardServiceClient=bn;exports.Channel=D;exports.Conversation=b;exports.EventType=d;exports.FetchSseAction=U;exports.HttpError=w;exports.MessageTemplateType=ye;exports.ToolCallConsentResult=ve;exports.conversationToSubagentEvents=We;exports.createDerivedStores=et;exports.deriveSubagents=Je;exports.deriveTasks=ze;exports.isAgentTool=Ye;exports.isHttpError=rt;exports.isSubagentChildTool=Xe;exports.isTaskTool=Ke;exports.reconcileLaunched=ne;exports.reduceSubagents=Ve;exports.reduceTaskEvents=qe;exports.resolveSandboxUri=Cn;exports.subagentsEqual=Ze;exports.tasksEqual=Qe;
|
|
4
|
+
`):"",this.name="UnsubscriptionError",this.errors=e}});function K(n,t){if(n){var e=n.indexOf(t);0<=e&&n.splice(e,1)}}var $=(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=N(i),c=a.next();!c.done;c=a.next()){var u=c.value;u.remove(this)}}catch(f){t={error:f}}finally{try{c&&!c.done&&(e=a.return)&&e.call(a)}finally{if(t)throw t.error}}else i.remove(this);var h=this.initialTeardown;if(g(h))try{h()}catch(f){o=f instanceof z?f.errors:[f]}var m=this._finalizers;if(m){this._finalizers=null;try{for(var v=N(m),d=v.next();!d.done;d=v.next()){var p=d.value;try{de(p)}catch(f){o=o??[],f instanceof z?o=F(F([],H(o)),H(f.errors)):o.push(f)}}}catch(f){r={error:f}}finally{try{d&&!d.done&&(s=v.return)&&s.call(v)}finally{if(r)throw r.error}}}if(o)throw new z(o)}},n.prototype.add=function(t){var e;if(t&&t!==this)if(this.closed)de(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)&&K(e,t)},n.prototype.remove=function(t){var e=this._finalizers;e&&K(e,t),t instanceof n&&t._removeParent(this)},n.EMPTY=(function(){var t=new n;return t.closed=!0,t})(),n})(),xe=$.EMPTY;function Ce(n){return n instanceof $||n&&"closed"in n&&g(n.remove)&&g(n.add)&&g(n.unsubscribe)}function de(n){g(n)?n():n.unsubscribe()}var bt={Promise:void 0},vt={setTimeout:function(n,t){for(var e=[],r=2;r<arguments.length;r++)e[r-2]=arguments[r];return setTimeout.apply(void 0,F([n,t],H(e)))},clearTimeout:function(n){return clearTimeout(n)},delegate:void 0};function Oe(n){vt.setTimeout(function(){throw n})}function te(){}function q(n){n()}var oe=(function(n){T(t,n);function t(e){var r=n.call(this)||this;return r.isStopped=!1,e?(r.destination=e,Ce(e)&&e.add(r)):r.destination=wt,r}return t.create=function(e,r,s){return new ne(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})($),yt=(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})(),ne=(function(n){T(t,n);function t(e,r,s){var o=n.call(this)||this,i;return g(e)||!e?i={next:e??void 0,error:r??void 0,complete:s??void 0}:i=e,o.destination=new yt(i),o}return t})(oe);function G(n){Oe(n)}function St(n){throw n}var wt={closed:!0,next:te,error:St,complete:te},ie=(function(){return typeof Symbol=="function"&&Symbol.observable||"@@observable"})();function W(n){return n}function Et(n){return n.length===0?W: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=Tt(t)?t:new ne(t,e,r);return q(function(){var i=s,a=i.operator,c=i.source;o.add(a?a.call(o,c):c?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=he(e),new e(function(s,o){var i=new ne({next:function(a){try{t(a)}catch(c){o(c),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[ie]=function(){return this},n.prototype.pipe=function(){for(var t=[],e=0;e<arguments.length;e++)t[e]=arguments[e];return Et(t)(this)},n.prototype.toPromise=function(t){var e=this;return t=he(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 he(n){var t;return(t=n??bt.Promise)!==null&&t!==void 0?t:Promise}function It(n){return n&&g(n.next)&&g(n.error)&&g(n.complete)}function Tt(n){return n&&n instanceof oe||It(n)&&Ce(n)}function xt(n){return g(n?.lift)}function P(n){return function(t){if(xt(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 A(n,t,e,r,s){return new Ct(n,t,e,r,s)}var Ct=(function(n){T(t,n);function t(e,r,s,o,i,a){var c=n.call(this,e)||this;return c.onFinalize=i,c.shouldUnsubscribe=a,c._next=r?function(u){try{r(u)}catch(h){e.error(h)}}:n.prototype._next,c._error=o?function(u){try{o(u)}catch(h){e.error(h)}finally{this.unsubscribe()}}:n.prototype._error,c._complete=s?function(){try{s()}catch(u){e.error(u)}finally{this.unsubscribe()}}:n.prototype._complete,c}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})(oe),Ot=Te(function(n){return function(){n(this),this.name="ObjectUnsubscribedError",this.message="object unsubscribed"}}),ae=(function(n){T(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 fe(this,this);return r.operator=e,r},t.prototype._throwIfClosed=function(){if(this.closed)throw new Ot},t.prototype.next=function(e){var r=this;q(function(){var s,o;if(r._throwIfClosed(),!r.isStopped){r.currentObservers||(r.currentObservers=Array.from(r.observers));try{for(var i=N(r.currentObservers),a=i.next();!a.done;a=i.next()){var c=a.value;c.next(e)}}catch(u){s={error:u}}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;q(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;q(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?xe:(this.currentObservers=null,a.push(e),new $(function(){r.currentObservers=null,K(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 fe(e,r)},t})(S),fe=(function(n){T(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:xe},t})(ae),C=(function(n){T(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})(ae),At={now:function(){return Date.now()}},Pt=(function(n){T(t,n);function t(e,r){return n.call(this)||this}return t.prototype.schedule=function(e,r){return this},t})($),pe={setInterval:function(n,t){for(var e=[],r=2;r<arguments.length;r++)e[r-2]=arguments[r];return setInterval.apply(void 0,F([n,t],H(e)))},clearInterval:function(n){return clearInterval(n)},delegate:void 0},_t=(function(n){T(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),pe.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&&pe.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,K(o,this),r!=null&&(this.id=this.recycleAsyncId(s,r,null)),this.delay=null,n.prototype.unsubscribe.call(this)}},t})(Pt),me=(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=At.now,n})(),Lt=(function(n){T(t,n);function t(e,r){r===void 0&&(r=me.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})(me),Ae=new Lt(_t),Mt=Ae,Ut=new S(function(n){return n.complete()});function Pe(n){return n&&g(n.schedule)}function _e(n){return n[n.length-1]}function kt(n){return g(_e(n))?n.pop():void 0}function Le(n){return Pe(_e(n))?n.pop():void 0}var Me=(function(n){return n&&typeof n.length=="number"&&typeof n!="function"});function Ue(n){return g(n?.then)}function ke(n){return g(n[ie])}function Re(n){return Symbol.asyncIterator&&g(n?.[Symbol.asyncIterator])}function Ne(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 Rt(){return typeof Symbol!="function"||!Symbol.iterator?"@@iterator":Symbol.iterator}var je=Rt();function $e(n){return g(n?.[je])}function De(n){return mt(this,arguments,function(){var e,r,s,o;return Ie(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,R(e.read())];case 3:return r=i.sent(),s=r.value,o=r.done,o?[4,R(void 0)]:[3,5];case 4:return[2,i.sent()];case 5:return[4,R(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 He(n){return g(n?.getReader)}function M(n){if(n instanceof S)return n;if(n!=null){if(ke(n))return Nt(n);if(Me(n))return jt(n);if(Ue(n))return $t(n);if(Re(n))return Fe(n);if($e(n))return Dt(n);if(He(n))return Ht(n)}throw Ne(n)}function Nt(n){return new S(function(t){var e=n[ie]();if(g(e.subscribe))return e.subscribe(t);throw new TypeError("Provided object does not correctly implement Symbol.observable")})}function jt(n){return new S(function(t){for(var e=0;e<n.length&&!t.closed;e++)t.next(n[e]);t.complete()})}function $t(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,Oe)})}function Dt(n){return new S(function(t){var e,r;try{for(var s=N(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 Fe(n){return new S(function(t){Ft(n,t).catch(function(e){return t.error(e)})})}function Ht(n){return Fe(De(n))}function Ft(n,t){var e,r,s,o;return pt(this,void 0,void 0,function(){var i,a;return Ie(this,function(c){switch(c.label){case 0:c.trys.push([0,5,6,11]),e=gt(n),c.label=1;case 1:return[4,e.next()];case 2:if(r=c.sent(),!!r.done)return[3,4];if(i=r.value,t.next(i),t.closed)return[2];c.label=3;case 3:return[3,1];case 4:return[3,11];case 5:return a=c.sent(),s={error:a},[3,11];case 6:return c.trys.push([6,,9,10]),r&&!r.done&&(o=e.return)?[4,o.call(e)]:[3,8];case 7:c.sent(),c.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 O(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 Be(n,t){return t===void 0&&(t=0),P(function(e,r){e.subscribe(A(r,function(s){return O(r,n,function(){return r.next(s)},t)},function(){return O(r,n,function(){return r.complete()},t)},function(s){return O(r,n,function(){return r.error(s)},t)}))})}function Ge(n,t){return t===void 0&&(t=0),P(function(e,r){r.add(n.schedule(function(){return e.subscribe(r)},t))})}function Bt(n,t){return M(n).pipe(Ge(t),Be(t))}function Gt(n,t){return M(n).pipe(Ge(t),Be(t))}function qt(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 Kt(n,t){return new S(function(e){var r;return O(e,t,function(){r=n[je](),O(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 g(r?.return)&&r.return()}})}function qe(n,t){if(!n)throw new Error("Iterable cannot be null");return new S(function(e){O(e,t,function(){var r=n[Symbol.asyncIterator]();O(e,t,function(){r.next().then(function(s){s.done?e.complete():e.next(s.value)})},0,!0)})})}function Yt(n,t){return qe(De(n),t)}function Wt(n,t){if(n!=null){if(ke(n))return Bt(n,t);if(Me(n))return qt(n,t);if(Ue(n))return Gt(n,t);if(Re(n))return qe(n,t);if($e(n))return Kt(n,t);if(He(n))return Yt(n,t)}throw Ne(n)}function ce(n,t){return t?Wt(n,t):M(n)}function Xt(){for(var n=[],t=0;t<arguments.length;t++)n[t]=arguments[t];var e=Le(n);return ce(n,e)}function Vt(n){return n instanceof Date&&!isNaN(n)}function j(n,t){return P(function(e,r){var s=0;e.subscribe(A(r,function(o){r.next(n.call(t,o,s++))}))})}var zt=Array.isArray;function Jt(n,t){return zt(t)?n.apply(void 0,F([],H(t))):n(t)}function Qt(n){return j(function(t){return Jt(n,t)})}var Zt=Array.isArray,en=Object.getPrototypeOf,tn=Object.prototype,nn=Object.keys;function rn(n){if(n.length===1){var t=n[0];if(Zt(t))return{args:t,keys:null};if(sn(t)){var e=nn(t);return{args:e.map(function(r){return t[r]}),keys:e}}}return{args:n,keys:null}}function sn(n){return n&&typeof n=="object"&&en(n)===tn}function on(n,t){return n.reduce(function(e,r,s){return e[r]=t[s],e},{})}function an(){for(var n=[],t=0;t<arguments.length;t++)n[t]=arguments[t];var e=Le(n),r=kt(n),s=rn(n),o=s.args,i=s.keys;if(o.length===0)return ce([],e);var a=new S(cn(o,e,i?function(c){return on(i,c)}:W));return r?a.pipe(Qt(r)):a}function cn(n,t,e){return e===void 0&&(e=W),function(r){ge(t,function(){for(var s=n.length,o=new Array(s),i=s,a=s,c=function(h){ge(t,function(){var m=ce(n[h],t),v=!1;m.subscribe(A(r,function(d){o[h]=d,v||(v=!0,a--),a||r.next(e(o.slice()))},function(){--i||r.complete()}))},r)},u=0;u<s;u++)c(u)},r)}}function ge(n,t,e){n?O(e,n,t):t()}function un(n,t,e,r,s,o,i,a){var c=[],u=0,h=0,m=!1,v=function(){m&&!c.length&&!u&&t.complete()},d=function(f){return u<r?p(f):c.push(f)},p=function(f){u++;var _=!1;M(e(f,h++)).subscribe(A(t,function(E){t.next(E)},function(){_=!0},void 0,function(){if(_)try{u--;for(var E=function(){var L=c.shift();i||p(L)};c.length&&u<r;)E();v()}catch(L){t.error(L)}}))};return n.subscribe(A(t,d,function(){m=!0,v()})),function(){}}function Y(n,t,e){return e===void 0&&(e=1/0),g(t)?Y(function(r,s){return j(function(o,i){return t(r,o,s,i)})(M(n(r,s)))},e):(typeof t=="number"&&(e=t),P(function(r,s){return un(r,s,n,e)}))}function ln(n,t,e){n===void 0&&(n=0),e===void 0&&(e=Mt);var r=-1;return t!=null&&(Pe(t)?e=t:r=t),new S(function(s){var o=Vt(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 dn(n,t){return g(t)?Y(n,t,1):Y(n,1)}function hn(n){return n<=0?function(){return Ut}:P(function(t,e){var r=0;t.subscribe(A(e,function(s){++r<=n&&(e.next(s),n<=r&&e.complete())}))})}function fn(n){return j(function(){return n})}function pn(n,t){return Y(function(e,r){return M(n(e,r)).pipe(hn(1),fn(e))})}function mn(n,t){t===void 0&&(t=Ae);var e=ln(n,t);return pn(function(){return e})}function k(n,t){return t===void 0&&(t=W),n=n??gn,P(function(e,r){var s,o=!0;e.subscribe(A(r,function(i){var a=t(i);(o||!n(s,a))&&(o=!1,s=a,r.next(i))}))})}function gn(n,t){return n===t}function bn(n){return P(function(t,e){try{t.subscribe(e)}finally{e.add(n)}})}function vn(n){return P(function(t,e){M(n).subscribe(A(e,function(){return e.complete()},te)),!e.closed&&t.subscribe(e)})}function be(n){const{endpoint:t,apiKey:e,payload:r,debugMode:s,customHeaders:o}=n,i=n.method??"POST";return new S(a=>{const c=new AbortController;let u,h=!1,m=!1;const v={"Content-Type":"application/json",...o};e&&(v["X-API-KEY"]=e);const d=new URL(t);return s&&d.searchParams.set("is_debug","true"),Ee(d.toString(),{method:i,headers:v,body:i==="POST"&&r?JSON.stringify(r):void 0,signal:c.signal,openWhenHidden:!0,onopen:async p=>{if(p.ok)u=p.headers.get("X-Trace-Id")??void 0;else{let f;try{f=await p.json()}catch{try{f=await p.text()}catch{f=null}}a.error(new w(p.status,p.statusText,f)),c.abort()}},onmessage:p=>{p.id&&(h=!0);const f=JSON.parse(p.data);u?f.traceId=u:f.requestId&&(f.traceId=f.requestId,u||(u=f.requestId)),a.next(f)},onclose:()=>{a.complete()},onerror:p=>{if(m)throw p;if(!h)throw a.error(p),c.abort(),p}}),()=>{m=!0,c.abort()}})}class yn{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 Sn{apiKey;endpoint;botProviderEndpoint;debugMode;destroy$=new ae;closed=!1;detached=!1;detachTimer;inFlight=0;sseEmitter=new yn;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 l.INIT:this.sseEmitter.emit(l.INIT,t);break;case l.PROCESS_START:case l.PROCESS_COMPLETE:this.sseEmitter.emit(l.PROCESS,t);break;case l.MESSAGE_START:case l.MESSAGE_DELTA:case l.MESSAGE_COMPLETE:this.sseEmitter.emit(l.MESSAGE,t);break;case l.TOOL_CALL_START:case l.TOOL_CALL_COMPLETE:this.sseEmitter.emit(l.TOOL_CALL,t);break;case l.TOOL_CALL_CONSENT:this.sseEmitter.emit(l.TOOL_CALL_CONSENT,t);break;case l.DONE:this.sseEmitter.emit(l.DONE,t);break;case l.ERROR:this.sseEmitter.emit(l.ERROR,t);break}}fetchSse(t,e){return e?.onSseStart?.(),this.inFlight+=1,this.runSse(be({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);return r.searchParams.set("custom_channel_id",t),this.runSse(be({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 w(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,launchedSandboxes:(a.launchedSandboxes??[]).map(c=>({sandboxName:c.sandboxName,sandboxBlueprintName:c.sandboxBlueprintName,workingDirectory:c.workingDirectory,editorServerEnabled:c.editorServerEnabled,browserEnabled:c.browserEnabled}))}}deriveSuspendEndpoint(){const t=this.getBaseEndpoint();return t?`${t}/message/suspend`:null}async suspendChannel(t,e){const r=this.deriveSuspendEndpoint();if(!r)throw new Error("Unable to derive channel suspend endpoint. Please provide botProviderEndpoint in config.");const s=new URL(r);s.searchParams.set("custom_channel_id",t),e?.requestId&&s.searchParams.set("request_id",e.requestId),e?.force&&s.searchParams.set("force","true");const o=await fetch(s.toString(),{method:"POST",headers:this.apiHeaders()});if(!(o.ok||o.status===404))throw new w(o.status,o.statusText,await o.text().catch(()=>{}))}runSse(t,e){return t.pipe(dn(r=>Xt(r).pipe(mn(e?.delayTime??50))),vn(this.destroy$),bn(()=>this.onRunSettled())).subscribe({next:r=>{this.detached||(e?.onSseMessage?.(r),this.handleEvent(r))},error:r=>{this.detached||e?.onSseError?.(r)},complete:()=>{this.detached||e?.onSseCompleted?.()}})}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 c=await a.blob(),u=t.split("/").pop()||"download";return this.debugMode&&console.log("[AsgardServiceClient] Channel Home download response:",{filename:u,size:c.size}),{blob:c,filename:u}}catch(a){throw console.error("[AsgardServiceClient] Channel Home download error:",a),a}}async generateSandboxBrowserOpenUrl(t){const e=this.getBaseEndpoint();if(!e)throw new Error("Unable to derive sandbox browser open-url endpoint. Please provide botProviderEndpoint in config.");const r=`${e}/sandbox/${encodeURIComponent(t)}/browser/open-url`,s={...this.customHeaders};this.apiKey&&(s["X-API-KEY"]=this.apiKey);const o=await fetch(r,{method:"POST",headers:s});if(!o.ok)throw new w(o.status,o.statusText,await o.text().catch(()=>{}));const i=await o.json(),a=i.data?.openURL??i.openURL;if(!a)throw new Error("Sandbox browser open-url response did not contain an openURL.");return a}deriveSandboxFsEndpoint(t){const e=this.getBaseEndpoint();if(!e)throw new Error("Unable to derive sandbox fs endpoint. Please provide botProviderEndpoint in config.");return`${e}/sandbox/${encodeURIComponent(t)}/fs`}apiHeaders(){const t={...this.customHeaders};return this.apiKey&&(t["X-API-KEY"]=this.apiKey),t}async sandboxFsList(t,e){const r=new URL(`${this.deriveSandboxFsEndpoint(t)}/list`);r.searchParams.set("path",e);const s=await fetch(r.toString(),{method:"GET",headers:this.apiHeaders()});if(!s.ok)throw new w(s.status,s.statusText,await s.text().catch(()=>{}));const o=await s.json(),i=o.data??o;return{entries:i.entries??[],truncated:i.truncated??!1}}async sandboxFsRead(t,e,r){const s=new URL(`${this.deriveSandboxFsEndpoint(t)}/file`);s.searchParams.set("path",e),r?.offsetBytes!=null&&s.searchParams.set("offset_bytes",String(r.offsetBytes)),r?.limitBytes!=null&&s.searchParams.set("limit_bytes",String(r.limitBytes));const o=await fetch(s.toString(),{method:"GET",headers:this.apiHeaders()});if(!o.ok)throw new w(o.status,o.statusText,await o.text().catch(()=>{}));const i=await o.blob(),a=o.headers.get("X-Total-Bytes");return{content:i,totalBytes:a!=null?Number(a):i.size,truncated:o.headers.get("X-Truncated")==="true"}}async sandboxFsWrite(t,e,r,s){const o=new URL(`${this.deriveSandboxFsEndpoint(t)}/file`);o.searchParams.set("path",e),s?.mode!=null&&o.searchParams.set("mode",String(s.mode)),s?.createOnly&&o.searchParams.set("create_only","true");const i=new FormData;i.append("file",r instanceof Blob?r:new Blob([r]));const a=await fetch(o.toString(),{method:"PUT",headers:this.apiHeaders(),body:i});if(!a.ok)throw new w(a.status,a.statusText,await a.text().catch(()=>{}));const c=await a.json();return{bytesWritten:(c.data??c).bytesWritten??0}}async sandboxFsRequest(t,e,r,s){const o=new URL(`${this.deriveSandboxFsEndpoint(t)}/${e}`);Object.entries(s).forEach(([a,c])=>o.searchParams.set(a,c));const i=await fetch(o.toString(),{method:r,headers:this.apiHeaders()});if(!i.ok)throw new w(i.status,i.statusText,await i.text().catch(()=>{}));return i.json().catch(()=>null)}async sandboxFsStat(t,e){const r=new URL(`${this.deriveSandboxFsEndpoint(t)}/stat`);r.searchParams.set("path",e);const s=await fetch(r.toString(),{method:"GET",headers:this.apiHeaders()});if(!s.ok)throw new w(s.status,s.statusText,await s.text().catch(()=>{}));const o=await s.json(),i=o.data??o;return{exists:i.exists??!1,isDir:i.isDir??!1,sizeBytes:i.sizeBytes??0,mtimeUnix:i.mtimeUnix??0,mode:i.mode??0,etag:i.etag}}async sandboxFsMkdir(t,e){await this.sandboxFsRequest(t,"mkdir","POST",{path:e})}async sandboxFsRemove(t,e){await this.sandboxFsRequest(t,"item","DELETE",{path:e})}async sandboxFsRemoveAll(t,e){await this.sandboxFsRequest(t,"all","DELETE",{path:e})}async sandboxFsCopy(t,e,r,s){const o={src:e,dst:r};s?.overwrite&&(o.overwrite="true");const i=await this.sandboxFsRequest(t,"copy","POST",o);return{bytesCopied:(i?.data??i)?.bytesCopied??0}}async sandboxFsMove(t,e,r,s){const o={src:e,dst:r};s?.overwrite&&(o.overwrite="true"),await this.sandboxFsRequest(t,"move","POST",o)}sandboxFsWatch(t,e){const r=new URL(`${this.deriveSandboxFsEndpoint(t)}/watch`);return r.searchParams.set("path",e),new S(s=>{const o=new AbortController;return Ee(r.toString(),{headers:this.apiHeaders(),signal:o.signal,openWhenHidden:!0,onopen:async i=>{if(!i.ok){const a=await i.text().catch(()=>{});s.error(new w(i.status,i.statusText,a)),o.abort()}},onmessage:i=>{i.event==="change"&&s.next(JSON.parse(i.data))},onclose:()=>s.complete(),onerror:i=>{throw s.error(i),o.abort(),i}}),()=>o.abort()})}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 y=[];for(let n=0;n<256;++n)y.push((n+256).toString(16).slice(1));function wn(n,t=0){return(y[n[t+0]]+y[n[t+1]]+y[n[t+2]]+y[n[t+3]]+"-"+y[n[t+4]]+y[n[t+5]]+"-"+y[n[t+6]]+y[n[t+7]]+"-"+y[n[t+8]]+y[n[t+9]]+"-"+y[n[t+10]]+y[n[t+11]]+y[n[t+12]]+y[n[t+13]]+y[n[t+14]]+y[n[t+15]]).toLowerCase()}let J;const En=new Uint8Array(16);function In(){if(!J){if(typeof crypto>"u"||!crypto.getRandomValues)throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");J=crypto.getRandomValues.bind(crypto)}return J(En)}const Tn=typeof crypto<"u"&&crypto.randomUUID&&crypto.randomUUID.bind(crypto),ve={randomUUID:Tn};function xn(n,t,e){n=n||{};const r=n.random??n.rng?.()??In();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,wn(r)}function Ke(n,t,e){return ve.randomUUID&&!n?ve.randomUUID():xn(n)}class b{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 b({messages:e,pendingConsent:this.pendingConsent})}clearPendingConsent(){return this.pendingConsent?new b({messages:this.messages,pendingConsent:null}):this}settleInFlightMessages(){if(!this.messages)return this;let t=!1;const e=new Map(this.messages);for(const[r,s]of e)s.type==="tool-call"&&!s.isComplete&&(e.set(r,{...s,isComplete:!0,isCancelled:!0}),t=!0),s.type==="thinking"&&s.isThinking&&(e.set(r,{...s,isThinking:!1}),t=!0);return t?new b({messages:e,pendingConsent:this.pendingConsent}):this}cancelInFlightToolCalls(){return this.settleInFlightMessages()}onMessage(t){switch(t.eventType){case l.MESSAGE_START:return this.onMessageStart(t);case l.MESSAGE_DELTA:return this.onMessageDelta(t);case l.MESSAGE_COMPLETE:return this.onMessageComplete(t);case l.MESSAGE_USER:return this.onMessageUser(t);case l.MESSAGE_THINKING_START:return this.onThinkingStart(t);case l.MESSAGE_THINKING_DELTA:return this.onThinkingDelta(t);case l.MESSAGE_THINKING_COMPLETE:return this.onThinkingComplete(t);case l.TOOL_CALL_START:return this.onToolCallStart(t);case l.TOOL_CALL_COMPLETE:return this.onToolCallComplete(t);case l.TOOL_CALL_CONSENT:return this.onToolCallConsent(t);case l.SUBAGENT_START:return this.onSubagentStart(t);case l.SUBAGENT_COMPLETE:return this.onSubagentComplete(t);case l.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(e.parentToolUseId)return this;if(this.isTerminalBot(this.messages?.get(e.messageId)))return this;const r=new Map(this.messages);return r.set(e.messageId,{type:"bot",eventType:l.MESSAGE_START,isTyping:!0,typingText:"",messageId:e.messageId,message:e,time:new Date,traceId:t.traceId,raw:""}),new b({messages:r,pendingConsent:this.pendingConsent})}onMessageDelta(t){const e=t.fact.messageDelta.message;if(e.parentToolUseId)return this;const 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:l.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 b({messages:o,pendingConsent:this.pendingConsent})}onMessageComplete(t){const e=t.fact.messageComplete.message;if(e.parentToolUseId)return this;const r=new Map(this.messages),s=r.get(e.messageId);return r.set(e.messageId,{type:"bot",eventType:l.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 b({messages:r,pendingConsent:this.pendingConsent})}onThinkingStart(t){const e=t.fact.messageThinkingStart.message;if(e.parentToolUseId)return this;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 b({messages:r,pendingConsent:this.pendingConsent})}onThinkingDelta(t){const e=t.fact.messageThinkingDelta.message;if(e.parentToolUseId)return this;const 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 b({messages:o,pendingConsent:this.pendingConsent})}onThinkingComplete(t){const e=t.fact.messageThinkingComplete.message;if(e.parentToolUseId)return this;const 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 b({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 b({messages:s,pendingConsent:this.pendingConsent})}onMessageError(t){const e=Ke(),r=t.fact.runError.error,s=new Map(this.messages);return s.set(e,{type:"error",eventType:l.ERROR,messageId:e,error:r,time:new Date,traceId:t.traceId}),new b({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:l.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 b({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:l.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 b({messages:r,pendingConsent:this.pendingConsent})}onToolCallConsent(t){const e=t.fact.toolCallConsent;return new b({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 b({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 b({messages:r,pendingConsent:this.pendingConsent})}}const Cn=new Set(["TaskCreate","TaskUpdate"]);function Ye(n){return n.toolsetName===""&&Cn.has(n.toolName)}function ye(n){return typeof n=="object"&&n!==null?n:void 0}function I(n){return typeof n=="string"?n:void 0}function We(n){const t=[],e=new Map;for(const r of n){const s=r.parameter??{},o=r.sidecar??{};if(r.toolName==="TaskCreate"){const i=ye(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=ye(o.statusChange),a=I(s.taskId)||I(o.taskId),c=I(i?.to)||I(s.status);if(!a||!c)continue;const u=e.get(a);u&&e.set(a,{...u,status:c})}}return t.map(r=>e.get(r))}function Xe(n){return n.toolsetName===""&&n.toolName==="Agent"}function Ve(n){return!!n}function ze(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 On(n){return typeof n=="string"?n:void 0}function Je(n){const t=[];for(const e of n){if(e.type==="tool-call"&&Xe(e)){t.push({kind:"agentStart",toolUseId:e.toolUseId??e.messageId,description:On(e.parameter.description)});continue}if(e.type==="tool-call"&&Ve(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 Qe(n){const t=Array.from(n.messages?.values()??[]).filter(e=>e.type==="tool-call"&&e.isComplete&&Ye(e));return We(t)}function Ze(n){return ze(Je(Array.from(n.messages?.values()??[])))}function et(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 An(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 tt(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&&An(e.tools,s.tools)})}function nt(n){const t=new C([]),e=new C([]),r=new $;return r.add(n.pipe(j(Qe),k(et)).subscribe(t)),r.add(n.pipe(j(Ze),k(tt)).subscribe(e)),{tasks$:t.asObservable(),subagents$:e.asObservable(),getTasks:()=>t.value,getSubagents:()=>e.value,teardown:()=>r.unsubscribe()}}function re(n){const t=new Map;for(const e of n)t.set(e.sandboxName,e);return[...t.values()].sort((e,r)=>(e.sandboxBlueprintName||e.sandboxName).localeCompare(r.sandboxBlueprintName||r.sandboxName))}const Q={kind:null,stopPhase:"idle"},Pn=1e4;function _n(n,t){return n.kind===t.kind&&n.stopPhase===t.stopPhase&&n.requestId===t.requestId}class D{client;customChannelId;customMessageId;joinRunState;isConnecting$;runStatusSubject;conversation$;channelTitleSubject;sandboxPhaseSubject;launchedSandboxesSubject;pendingLaunches=[];derivedStores;statesObserver;statesSubscription;tasks$;subagents$;channelTitle$;sandboxPhase$;launchedSandboxes$;runStatus$;currentUserMessageId;lastSentMessageId;currentRun;forceStopTimer;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.joinRunState=t.runState??"IDLE",this.isConnecting$=new C(!1),this.runStatusSubject=new C(Q),this.conversation$=new C(t.conversation),this.channelTitleSubject=new C(t.channelTitle??null),this.sandboxPhaseSubject=new C("idle"),this.launchedSandboxesSubject=new C(re(t.launchedSandboxes??[])),this.derivedStores=nt(this.conversation$),this.tasks$=this.derivedStores.tasks$,this.subagents$=this.derivedStores.subagents$,this.channelTitle$=this.channelTitleSubject.pipe(k()),this.sandboxPhase$=this.sandboxPhaseSubject.pipe(k()),this.launchedSandboxes$=this.launchedSandboxesSubject.pipe(k()),this.runStatus$=this.runStatusSubject.pipe(k(_n)),this.statesObserver=t.statesObserver}getTasks(){return this.derivedStores.getTasks()}getSubagents(){return this.derivedStores.getSubagents()}getChannelTitle(){return this.channelTitleSubject.value}getSandboxPhase(){return this.sandboxPhaseSubject.value}getLaunchedSandboxes(){return this.launchedSandboxesSubject.value}getRunStatus(){return this.runStatusSubject.value}getPendingLaunches(){return this.pendingLaunches}applyLaunchedSandboxes(t){const e=re(t);this.pendingLaunches=this.pendingLaunches.filter(r=>!e.some(s=>s.sandboxName===r)),this.launchedSandboxesSubject.next(e)}dropSandbox(t){const e=this.launchedSandboxesSubject.value,r=e.filter(s=>s.sandboxName!==t);r.length!==e.length&&this.launchedSandboxesSubject.next(r)}noteSandboxLaunch(t){this.pendingLaunches.includes(t)||(this.pendingLaunches=[...this.pendingLaunches,t]),this.refetchMetadata()}async refetchMetadata(){if(!this.client.channelMetadata)return;const t=await this.client.channelMetadata(this.customChannelId);t&&this.applyLaunchedSandboxes(t.launchedSandboxes)}setChannelTitle(t){this.channelTitleSubject.next(t)}static create(t){const e=new D(t);return e.subscribe(),e}static async reset(t,e,r,s){const o=new D(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 D(t);try{return s.subscribe(),r?.(s),await s.rejoinChannel(e),s}catch(o){throw s.close(),o}}subscribe(){this.statesSubscription=an([this.isConnecting$,this.conversation$,this.derivedStores.tasks$,this.derivedStores.subagents$,this.channelTitle$,this.sandboxPhase$,this.launchedSandboxes$,this.runStatus$]).pipe(j(([t,e,r,s,o,i,a,c])=>({isConnecting:t,conversation:e,tasks:r,subagents:s,channelTitle:o,sandboxPhase:i,launchedSandboxes:a,runStatus:c}))).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}updateSandboxPhase(t){switch(t){case l.SANDBOX_LAUNCH:this.sandboxPhaseSubject.next("launching");break;case l.SANDBOX_READY:this.sandboxPhaseSubject.next("ready");break;case l.INIT:case l.ERROR:this.sandboxPhaseSubject.next("idle");break}}buildRunHandlers(t,e,r){return{onSseStart:t?.onSseStart,onSseMessage:s=>{if(t?.onSseMessage?.(s),this.captureRequestId(s.requestId),s.eventType===l.CHANNEL_TITLE_UPDATE&&this.channelTitleSubject.next(s.fact.channelTitleUpdate.title),this.updateSandboxPhase(s.eventType),s.eventType===l.SANDBOX_LAUNCH&&this.noteSandboxLaunch(s.fact.sandboxLaunch.sandboxName),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 b({messages:o}))),this.currentUserMessageId=void 0}this.conversation$.next(this.conversation$.value.onMessage(s))},onSseError:s=>{t?.onSseError?.(s),this.settleRun(),r(s)},onSseCompleted:()=>{t?.onSseCompleted?.(),this.settleRun(),e()}}}settleRun(){const t=this.runStatusSubject.value.stopPhase!=="idle";this.clearForceStopTimer(),this.isConnecting$.next(!1),this.runStatusSubject.next(Q),this.currentUserMessageId=void 0,this.currentRun=void 0,t&&this.conversation$.next(this.conversation$.value.settleInFlightMessages())}captureRequestId(t){const e=this.runStatusSubject.value;!t||e.requestId||!e.kind||this.runStatusSubject.next({...e,requestId:t})}clearForceStopTimer(){this.forceStopTimer&&(clearTimeout(this.forceStopTimer),this.forceStopTimer=void 0)}fetchSse(t,e,r){return new Promise((s,o)=>{this.isConnecting$.next(!0),this.runStatusSubject.next({kind:t,stopPhase:"idle"}),this.currentRun=this.client.fetchSse(e,this.buildRunHandlers(r,s,o))})}rejoinChannel(t){return new Promise((e,r)=>{if(!this.client.rejoinSse){e();return}this.isConnecting$.next(!0),this.runStatusSubject.next({kind:this.joinRunState==="RUNNING"?"restore":"replay",stopPhase:"idle"}),this.currentRun=this.client.rejoinSse(this.customChannelId,this.buildRunHandlers(t,e,r))})}resetChannel(t,e){return this.fetchSse("reset",{action:U.RESET_CHANNEL,customChannelId:this.customChannelId,customMessageId:this.customMessageId,text:t?.text||"",payload:this.resolvePayload(t?.payload)},e)}sendMessage(t,e){const r=this.runStatusSubject.value.kind;if(r)return Promise.reject(new se(r));const s=t.text.trim(),o=t.customMessageId??Ke();return this.currentUserMessageId=o,this.lastSentMessageId=o,this.conversation$.next(this.conversation$.value.pushMessage({type:"user",messageId:o,text:s,blobIds:t.blobIds,filePreviewUrls:t.filePreviewUrls,documentNames:t.documentNames,time:new Date})),this.fetchSse("user",{action:U.NONE,customChannelId:this.customChannelId,customMessageId:o,payload:this.resolvePayload(t?.payload),text:s,blobIds:t?.blobIds},e)}replyToolCallConsents(t,e,r){return this.conversation$.next(this.conversation$.value.clearPendingConsent()),this.fetchSse("user",{action:U.RESPONSE_TOOL_CALL_CONSENT,customChannelId:this.customChannelId,customMessageId:this.lastSentMessageId??this.customMessageId,payload:this.resolvePayload(r),text:"",toolCallConsents:t},e)}nudge(t){return this.fetchSse("nudge",{action:U.NUDGE,customChannelId:this.customChannelId,customMessageId:this.lastSentMessageId??this.customMessageId,text:""},t)}async stopGeneration(t){const e=this.runStatusSubject.value;if(!(!this.currentRun||e.kind!=="user")&&!(e.stopPhase!=="idle"&&!t?.force)){if(!this.client.suspendChannel){this.abortConnection();return}this.clearForceStopTimer(),this.runStatusSubject.next({...e,stopPhase:"stopping"});try{await this.client.suspendChannel(this.customChannelId,{requestId:e.requestId,force:t?.force})}catch(r){throw this.clearForceStopTimer(),this.runStatusSubject.next({...this.runStatusSubject.value,stopPhase:"idle"}),r}this.armForceStopTimer()}}armForceStopTimer(){this.clearForceStopTimer(),this.forceStopTimer=setTimeout(()=>{this.forceStopTimer=void 0;const t=this.runStatusSubject.value;t.stopPhase==="stopping"&&this.runStatusSubject.next({...t,stopPhase:"force-stoppable"})},Pn)}abortConnection(){this.currentRun&&(this.currentRun.unsubscribe(),this.clearForceStopTimer(),this.currentRun=void 0,this.isConnecting$.next(!1),this.runStatusSubject.next(Q),this.currentUserMessageId=void 0,this.conversation$.next(this.conversation$.value.settleInFlightMessages()))}close(){this.currentRun?.unsubscribe(),this.currentRun=void 0,this.clearForceStopTimer(),this.isConnecting$.complete(),this.runStatusSubject.complete(),this.conversation$.complete(),this.channelTitleSubject.complete(),this.sandboxPhaseSubject.complete(),this.launchedSandboxesSubject.complete(),this.derivedStores.teardown(),this.statesSubscription?.unsubscribe()}}function Ln(n){const t=/^sandbox:\/\/([^/]+)\/([^?#]+)(?:\?([^#]*))?/.exec(n.trim());if(!t)return null;const e=decodeURIComponent(t[1]),r=t[2],s=new URLSearchParams(t[3]??"");if(r==="open-browser")return{kind:"open-browser",sandboxName:e};if(r==="open-file"){const o=s.get("absolute_path");return o?{kind:"open-file",sandboxName:e,absolutePath:o}:null}return null}exports.AsgardServiceClient=Sn;exports.Channel=D;exports.ChannelBusyError=se;exports.Conversation=b;exports.EventType=l;exports.FetchSseAction=U;exports.HttpError=w;exports.MessageTemplateType=we;exports.ToolCallConsentResult=Se;exports.conversationToSubagentEvents=Je;exports.createDerivedStores=nt;exports.deriveSubagents=Ze;exports.deriveTasks=Qe;exports.isAgentTool=Xe;exports.isChannelBusyError=it;exports.isHttpError=ot;exports.isSubagentChildTool=Ve;exports.isTaskTool=Ye;exports.reconcileLaunched=re;exports.reduceSubagents=ze;exports.reduceTaskEvents=We;exports.resolveSandboxUri=Ln;exports.subagentsEqual=tt;exports.tasksEqual=et;
|
|
5
5
|
//# sourceMappingURL=index.cjs.map
|