@chainlit/react-client 0.2.4 → 0.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.ts CHANGED
@@ -70,6 +70,20 @@ interface ICommand {
70
70
  icon: string;
71
71
  description: string;
72
72
  button?: boolean;
73
+ persistent?: boolean;
74
+ }
75
+
76
+ interface IModeOption {
77
+ id: string;
78
+ name: string;
79
+ description?: string;
80
+ icon?: string;
81
+ default?: boolean;
82
+ }
83
+ interface IMode {
84
+ id: string;
85
+ name: string;
86
+ options: IModeOption[];
73
87
  }
74
88
 
75
89
  interface IFeedback {
@@ -89,6 +103,7 @@ interface IStep {
89
103
  parentId?: string;
90
104
  isError?: boolean;
91
105
  command?: string;
106
+ modes?: Record<string, string>;
92
107
  showInput?: boolean | string;
93
108
  waitForAnswer?: boolean;
94
109
  input?: string;
@@ -105,6 +120,10 @@ interface IStep {
105
120
  indent?: number;
106
121
  }
107
122
 
123
+ interface IAskElementResponse {
124
+ submitted: boolean;
125
+ [key: string]: unknown;
126
+ }
108
127
  interface FileSpec {
109
128
  accept?: string[] | Record<string, string[]>;
110
129
  max_size_mb?: number;
@@ -117,11 +136,12 @@ interface IFileRef {
117
136
  id: string;
118
137
  }
119
138
  interface IAsk {
120
- callback: (payload: IStep | IFileRef[] | IAction) => void;
139
+ callback: (payload: IStep | IFileRef[] | IAction | IAskElementResponse) => void;
121
140
  spec: {
122
- type: 'text' | 'file' | 'action';
141
+ type: 'text' | 'file' | 'action' | 'element';
123
142
  step_id: string;
124
143
  timeout: number;
144
+ element_id?: string;
125
145
  } & FileSpec & ActionSpec;
126
146
  parentId?: string;
127
147
  }
@@ -167,11 +187,13 @@ interface IStarter {
167
187
  label: string;
168
188
  message: string;
169
189
  icon?: string;
190
+ command?: string;
170
191
  }
171
192
  interface ChatProfile {
172
193
  default: boolean;
173
194
  icon?: string;
174
195
  name: string;
196
+ display_name?: string;
175
197
  markdown_description: string;
176
198
  starters?: IStarter[];
177
199
  }
@@ -185,25 +207,34 @@ interface IAuthConfig {
185
207
  headerAuth: boolean;
186
208
  oauthProviders: string[];
187
209
  default_theme?: 'light' | 'dark';
210
+ ui?: IChainlitConfig['ui'];
188
211
  }
189
212
  interface IChainlitConfig {
190
213
  markdown?: string;
191
214
  ui: {
192
215
  name: string;
193
216
  description?: string;
194
- font_family?: string;
195
217
  default_theme?: 'light' | 'dark';
196
218
  layout?: 'default' | 'wide';
219
+ default_sidebar_state?: 'open' | 'closed';
197
220
  cot: 'hidden' | 'tool_call' | 'full';
198
221
  github?: string;
199
222
  custom_css?: string;
200
223
  custom_js?: string;
201
224
  custom_font?: string;
225
+ alert_style?: 'classic' | 'modern';
226
+ login_page_image?: string;
227
+ login_page_image_filter?: string;
228
+ login_page_image_dark_filter?: string;
202
229
  custom_meta_image_url?: string;
230
+ logo_file_url?: string;
231
+ default_avatar_file_url?: string;
203
232
  header_links?: {
204
233
  name: string;
234
+ display_name: string;
205
235
  icon_url: string;
206
236
  url: string;
237
+ target?: '_blank' | '_self' | '_parent' | '_top';
207
238
  }[];
208
239
  };
209
240
  features: {
@@ -216,14 +247,28 @@ interface IChainlitConfig {
216
247
  audio: IAudioConfig;
217
248
  unsafe_allow_html?: boolean;
218
249
  user_message_autoscroll?: boolean;
250
+ assistant_message_autoscroll?: boolean;
219
251
  latex?: boolean;
220
252
  edit_message?: boolean;
221
- mcp?: boolean;
253
+ mcp?: {
254
+ enabled?: boolean;
255
+ sse?: {
256
+ enabled?: boolean;
257
+ };
258
+ streamable_http?: {
259
+ enabled?: boolean;
260
+ };
261
+ stdio?: {
262
+ enabled?: boolean;
263
+ };
264
+ };
222
265
  };
223
266
  debugUrl?: string;
224
267
  userEnv: string[];
268
+ maskUserEnv?: boolean;
225
269
  dataPersistence: boolean;
226
270
  threadResumable: boolean;
271
+ threadSharing?: boolean;
227
272
  chatProfiles: ChatProfile[];
228
273
  starters?: IStarter[];
229
274
  translation: object;
@@ -235,9 +280,10 @@ interface IMcp {
235
280
  name: string;
236
281
  }];
237
282
  status: 'connected' | 'connecting' | 'failed';
238
- clientType: 'sse' | 'stdio';
283
+ clientType: 'sse' | 'stdio' | 'streamable-http';
239
284
  command?: string;
240
285
  url?: string;
286
+ headers?: Record<string, string>;
241
287
  }
242
288
 
243
289
  interface IToken {
@@ -250,9 +296,9 @@ declare const useChatData: () => {
250
296
  actions: IAction[];
251
297
  askUser: IAsk | undefined;
252
298
  callFn: ICallFn | undefined;
253
- chatSettingsDefaultValue: any;
299
+ chatSettingsDefaultValue: Record<string, any>;
254
300
  chatSettingsInputs: any;
255
- chatSettingsValue: any;
301
+ chatSettingsValue: Record<string, any>;
256
302
  connected: boolean | undefined;
257
303
  disabled: boolean;
258
304
  elements: IMessageElement[];
@@ -263,7 +309,7 @@ declare const useChatData: () => {
263
309
 
264
310
  type PartialBy<T, K extends keyof T> = Omit<T, K> & Partial<Pick<T, K>>;
265
311
  declare const useChatInteract: () => {
266
- uploadFile: (file: File, onProgress: (progress: number) => void) => {
312
+ uploadFile: (file: File, onProgress: (progress: number) => void, parentId?: string) => {
267
313
  xhr: XMLHttpRequest;
268
314
  promise: Promise<{
269
315
  id: string;
@@ -300,6 +346,7 @@ declare const sessionState: recoil.RecoilState<ISession | undefined>;
300
346
  declare const actionState: recoil.RecoilState<IAction[]>;
301
347
  declare const messagesState: recoil.RecoilState<IStep[]>;
302
348
  declare const commandsState: recoil.RecoilState<ICommand[]>;
349
+ declare const modesState: recoil.RecoilState<IMode[]>;
303
350
  declare const tokenCountState: recoil.RecoilState<number>;
304
351
  declare const loadingState: recoil.RecoilState<boolean>;
305
352
  declare const askUserState: recoil.RecoilState<IAsk | undefined>;
@@ -309,8 +356,8 @@ declare const audioConnectionState: recoil.RecoilState<"connecting" | "on" | "of
309
356
  declare const isAiSpeakingState: recoil.RecoilState<boolean>;
310
357
  declare const callFnState: recoil.RecoilState<ICallFn | undefined>;
311
358
  declare const chatSettingsInputsState: recoil.RecoilState<any>;
312
- declare const chatSettingsDefaultValueSelector: recoil.RecoilValueReadOnly<any>;
313
- declare const chatSettingsValueState: recoil.RecoilState<any>;
359
+ declare const chatSettingsDefaultValueSelector: recoil.RecoilValueReadOnly<Record<string, any>>;
360
+ declare const chatSettingsValueState: recoil.RecoilState<Record<string, any>>;
314
361
  declare const elementState: recoil.RecoilState<IMessageElement[]>;
315
362
  declare const tasklistState: recoil.RecoilState<ITasklistElement[]>;
316
363
  declare const firstUserInteraction: recoil.RecoilState<string | undefined>;
@@ -321,6 +368,7 @@ declare const threadHistoryState: recoil.RecoilState<ThreadHistory | undefined>;
321
368
  declare const sideViewState: recoil.RecoilState<{
322
369
  title: string;
323
370
  elements: IMessageElement[];
371
+ key?: string | undefined;
324
372
  } | undefined>;
325
373
  declare const currentThreadIdState: recoil.RecoilState<string | undefined>;
326
374
  declare const mcpState: recoil.RecoilState<IMcp[]>;
@@ -329,7 +377,7 @@ declare const useChatSession: () => {
329
377
  connect: lodash.DebouncedFunc<({ transports, userEnv }: {
330
378
  transports?: string[] | undefined;
331
379
  userEnv: Record<string, string>;
332
- }) => void>;
380
+ }) => Promise<void>>;
333
381
  disconnect: () => void;
334
382
  session: ISession | undefined;
335
383
  sessionId: string;
@@ -395,9 +443,10 @@ type Payload = FormData | any;
395
443
  declare class APIBase {
396
444
  httpEndpoint: string;
397
445
  type: 'webapp' | 'copilot' | 'teams' | 'slack' | 'discord';
446
+ additionalQueryParams?: Record<string, string> | undefined;
398
447
  on401?: (() => void) | undefined;
399
448
  onError?: ((error: ClientError) => void) | undefined;
400
- constructor(httpEndpoint: string, type: 'webapp' | 'copilot' | 'teams' | 'slack' | 'discord', on401?: (() => void) | undefined, onError?: ((error: ClientError) => void) | undefined);
449
+ constructor(httpEndpoint: string, type: 'webapp' | 'copilot' | 'teams' | 'slack' | 'discord', additionalQueryParams?: Record<string, string> | undefined, on401?: (() => void) | undefined, onError?: ((error: ClientError) => void) | undefined);
401
450
  buildEndpoint(path: string): string;
402
451
  private getDetailFromErrorResponse;
403
452
  private handleRequestError;
@@ -414,10 +463,11 @@ declare class APIBase {
414
463
  declare class ChainlitAPI extends APIBase {
415
464
  headerAuth(): Promise<any>;
416
465
  jwtAuth(token: string): Promise<any>;
466
+ stickyCookie(sessionId: string): Promise<any>;
417
467
  passwordAuth(data: FormData): Promise<any>;
418
468
  getUser(): Promise<IUser>;
419
469
  logout(): Promise<any>;
420
- setFeedback(feedback: IFeedback): Promise<{
470
+ setFeedback(feedback: IFeedback, sessionId: string): Promise<{
421
471
  success: boolean;
422
472
  feedbackId: string;
423
473
  }>;
@@ -430,7 +480,7 @@ declare class ChainlitAPI extends APIBase {
430
480
  }>;
431
481
  renameThread(threadId: string, name: string): Promise<any>;
432
482
  deleteThread(threadId: string): Promise<any>;
433
- uploadFile(file: File, onProgress: (progress: number) => void, sessionId: string): {
483
+ uploadFile(file: File, onProgress: (progress: number) => void, sessionId: string, parentId?: string): {
434
484
  xhr: XMLHttpRequest;
435
485
  promise: Promise<{
436
486
  id: string;
@@ -440,11 +490,15 @@ declare class ChainlitAPI extends APIBase {
440
490
  updateElement(element: IElement, sessionId: string): Promise<any>;
441
491
  deleteElement(element: IElement, sessionId: string): Promise<any>;
442
492
  connectStdioMCP(sessionId: string, name: string, fullCommand: string): Promise<any>;
443
- connectSseMCP(sessionId: string, name: string, url: string): Promise<any>;
493
+ connectSseMCP(sessionId: string, name: string, url: string, headers?: Record<string, string>): Promise<any>;
494
+ connectStreamableHttpMCP(sessionId: string, name: string, url: string, headers?: Record<string, string>): Promise<any>;
444
495
  disconnectMcp(sessionId: string, name: string): Promise<any>;
445
496
  getElementUrl(id: string, sessionId: string): string;
446
- getLogoEndpoint(theme: string): string;
497
+ getLogoEndpoint(theme: string, configuredLogoUrl?: string): string;
447
498
  getOAuthEndpoint(provider: string): string;
499
+ shareThread(threadId: string, isShared: boolean): Promise<{
500
+ success: boolean;
501
+ }>;
448
502
  }
449
503
 
450
504
  declare const defaultChainlitContext: undefined;
@@ -463,4 +517,4 @@ declare const WavRenderer: {
463
517
  drawBars: (ctx: CanvasRenderingContext2D, data: Float32Array, cssWidth: number, cssHeight: number, color: string, pointCount?: number, barWidth?: number, barSpacing?: number, center?: boolean) => void;
464
518
  };
465
519
 
466
- export { APIBase, ActionSpec, AuthProvider, ChainlitAPI, ChainlitContext, ChatProfile, ClientError, ElementType, FileSpec, IAction, IAsk, IAudioConfig, IAudioElement, IAuthConfig, ICallFn, IChainlitConfig, ICommand, ICustomElement, IDataframeElement, IElement, IElementSize, IFeedback, IFileElement, IFileRef, IImageElement, IMcp, IMessageElement, IPageInfo, IPagination, IPdfElement, IPlotlyElement, ISession, IStarter, IStep, ITasklistElement, ITextElement, IThread, IThreadFilters, IToken, IUser, IUserMetadata, IVideoElement, ThreadHistory, UserInput, WavRenderer, actionState, addMessage, addMessageToParent, askUserState, audioConnectionState, authState, callFnState, chatProfileState, chatSettingsDefaultValueSelector, chatSettingsInputsState, chatSettingsValueState, commandsState, configState, currentThreadIdState, defaultChainlitContext, deleteMessageById, elementState, fetcher, firstUserInteraction, hasMessageById, isAiSpeakingState, isLastMessage, loadingState, mcpState, messagesState, nestMessages, resumeThreadErrorState, sessionIdState, sessionState, sideViewState, tasklistState, threadHistoryState, threadIdToResumeState, tokenCountState, updateMessageById, updateMessageContentById, useApi, useAudio, useAuth, useChatData, useChatInteract, useChatMessages, useChatSession, useConfig, userState, wavRecorderState, wavStreamPlayerState };
520
+ export { APIBase, ActionSpec, AuthProvider, ChainlitAPI, ChainlitContext, ChatProfile, ClientError, ElementType, FileSpec, IAction, IAsk, IAskElementResponse, IAudioConfig, IAudioElement, IAuthConfig, ICallFn, IChainlitConfig, ICommand, ICustomElement, IDataframeElement, IElement, IElementSize, IFeedback, IFileElement, IFileRef, IImageElement, IMcp, IMessageElement, IMode, IModeOption, IPageInfo, IPagination, IPdfElement, IPlotlyElement, ISession, IStarter, IStep, ITasklistElement, ITextElement, IThread, IThreadFilters, IToken, IUser, IUserMetadata, IVideoElement, ThreadHistory, UserInput, WavRenderer, actionState, addMessage, addMessageToParent, askUserState, audioConnectionState, authState, callFnState, chatProfileState, chatSettingsDefaultValueSelector, chatSettingsInputsState, chatSettingsValueState, commandsState, configState, currentThreadIdState, defaultChainlitContext, deleteMessageById, elementState, fetcher, firstUserInteraction, hasMessageById, isAiSpeakingState, isLastMessage, loadingState, mcpState, messagesState, modesState, nestMessages, resumeThreadErrorState, sessionIdState, sessionState, sideViewState, tasklistState, threadHistoryState, threadIdToResumeState, tokenCountState, updateMessageById, updateMessageContentById, useApi, useAudio, useAuth, useChatData, useChatInteract, useChatMessages, useChatSession, useConfig, userState, wavRecorderState, wavStreamPlayerState };
package/dist/index.js CHANGED
@@ -1,2 +1,2 @@
1
- "use strict";function e(e,t){if(t==null||t>e.length)t=e.length;for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}function t(e){if(Array.isArray(e))return e}function n(t){if(Array.isArray(t))return e(t)}function r(e){if(e===void 0){throw new ReferenceError("this hasn't been initialised - super() hasn't been called")}return e}function a(e,t,n,r,a,o,s){try{var i=e[o](s);var u=i.value}catch(e){n(e);return}if(i.done){t(u)}else{Promise.resolve(u).then(r,a)}}function o(e){return function(){var t=this,n=arguments;return new Promise(function(r,o){var s=e.apply(t,n);function i(e){a(s,r,o,i,u,"next",e)}function u(e){a(s,r,o,i,u,"throw",e)}i(undefined)})}}function s(e,t){if(!(e instanceof t)){throw new TypeError("Cannot call a class as a function")}}function i(e,t,n){if(T()){i=Reflect.construct}else{i=function e(e,t,n){var r=[null];r.push.apply(r,t);var a=Function.bind.apply(e,r);var o=new a;if(n)C(o,n.prototype);return o}}return i.apply(null,arguments)}function u(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||false;r.configurable=true;if("value"in r)r.writable=true;Object.defineProperty(e,r.key,r)}}function c(e,t,n){if(t)u(e.prototype,t);if(n)u(e,n);return e}function l(e,t,n){if(t in e){Object.defineProperty(e,t,{value:n,enumerable:true,configurable:true,writable:true})}else{e[t]=n}return e}function f(){f=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n){if(Object.prototype.hasOwnProperty.call(n,r)){e[r]=n[r]}}}return e};return f.apply(this,arguments)}function d(e){d=Object.setPrototypeOf?Object.getPrototypeOf:function e(e){return e.__proto__||Object.getPrototypeOf(e)};return d(e)}function h(e,t){if(typeof t!=="function"&&t!==null){throw new TypeError("Super expression must either be null or a function")}e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:true,configurable:true}});if(t)C(e,t)}function p(e,t){if(t!=null&&typeof Symbol!=="undefined"&&t[Symbol.hasInstance]){return!!t[Symbol.hasInstance](e)}else{return e instanceof t}}function v(e){return Function.toString.call(e).indexOf("[native code]")!==-1}function m(e){if(typeof Symbol!=="undefined"&&e[Symbol.iterator]!=null||e["@@iterator"]!=null)return Array.from(e)}function g(e,t){var n=e==null?null:typeof Symbol!=="undefined"&&e[Symbol.iterator]||e["@@iterator"];if(n==null)return;var r=[];var a=true;var o=false;var s,i;try{for(n=n.call(e);!(a=(s=n.next()).done);a=true){r.push(s.value);if(t&&r.length===t)break}}catch(e){o=true;i=e}finally{try{if(!a&&n["return"]!=null)n["return"]()}finally{if(o)throw i}}return r}function y(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function k(){throw new TypeError("Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function w(e){if(e===null||e===void 0)throw new TypeError("Cannot destructure "+e);return e}function b(e){for(var t=1;t<arguments.length;t++){var n=arguments[t]!=null?arguments[t]:{};var r=Object.keys(n);if(typeof Object.getOwnPropertySymbols==="function"){r=r.concat(Object.getOwnPropertySymbols(n).filter(function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable}))}r.forEach(function(t){l(e,t,n[t])})}return e}function S(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);if(t){r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})}n.push.apply(n,r)}return n}function A(e,t){t=t!=null?t:{};if(Object.getOwnPropertyDescriptors){Object.defineProperties(e,Object.getOwnPropertyDescriptors(t))}else{S(Object(t)).forEach(function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})}return e}function R(e,t){if(t&&(_(t)==="object"||typeof t==="function")){return t}return r(e)}function C(e,t){C=Object.setPrototypeOf||function e(e,t){e.__proto__=t;return e};return C(e,t)}function x(e,n){return t(e)||g(e,n)||E(e,n)||y()}function I(e){return n(e)||m(e)||E(e)||k()}function _(e){"@swc/helpers - typeof";return e&&typeof Symbol!=="undefined"&&e.constructor===Symbol?"symbol":typeof e}function E(t,n){if(!t)return;if(typeof t==="string")return e(t,n);var r=Object.prototype.toString.call(t).slice(8,-1);if(r==="Object"&&t.constructor)r=t.constructor.name;if(r==="Map"||r==="Set")return Array.from(r);if(r==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r))return e(t,n)}function P(e){var t=typeof Map==="function"?new Map:undefined;P=function e(e){if(e===null||!v(e))return e;if(typeof e!=="function"){throw new TypeError("Super expression must either be null or a function")}if(typeof t!=="undefined"){if(t.has(e))return t.get(e);t.set(e,n)}function n(){return i(e,arguments,d(this).constructor)}n.prototype=Object.create(e.prototype,{constructor:{value:n,enumerable:false,writable:true,configurable:true}});return C(n,e)};return P(e)}function T(){if(typeof Reflect==="undefined"||!Reflect.construct)return false;if(Reflect.construct.sham)return false;if(typeof Proxy==="function")return true;try{Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}));return true}catch(e){return false}}function M(e){var t=T();return function n(){var n=d(e),r;if(t){var a=d(this).constructor;r=Reflect.construct(n,arguments,a)}else{r=n.apply(this,arguments)}return R(this,r)}}function D(e,t){var n,r,a,o,s={label:0,sent:function(){if(a[0]&1)throw a[1];return a[1]},trys:[],ops:[]};return(o={next:i(0),"throw":i(1),"return":i(2)},typeof Symbol==="function"&&(o[Symbol.iterator]=function(){return this}),o);function i(e){return function(t){return u([e,t])}}function u(o){if(n)throw new TypeError("Generator is already executing.");while(s)try{if(n=1,r&&(a=o[0]&2?r["return"]:o[0]?r["throw"]||((a=r["return"])&&a.call(r),0):r.next)&&!(a=a.call(r,o[1])).done)return a;if(r=0,a)o=[o[0]&2,a.value];switch(o[0]){case 0:case 1:a=o;break;case 4:s.label++;return{value:o[1],done:false};case 5:s.label++;r=o[1];o=[0];continue;case 7:o=s.ops.pop();s.trys.pop();continue;default:if(!(a=s.trys,a=a.length>0&&a[a.length-1])&&(o[0]===6||o[0]===2)){s=0;continue}if(o[0]===3&&(!a||o[1]>a[0]&&o[1]<a[3])){s.label=o[1];break}if(o[0]===6&&s.label<a[1]){s.label=a[1];a=o;break}if(a&&s.label<a[2]){s.label=a[2];s.ops.push(o);break}if(a[2])s.ops.pop();s.trys.pop();continue}o=t.call(e,s)}catch(e){o=[6,e];r=0}finally{n=a=0}if(o[0]&5)throw o[1];return{value:o[0]?o[1]:void 0,done:true}}}var O=require("recoil");var j=require("lodash");var B=require("uuid");var L=require("react");var F=require("swr");var V=require("socket.io-client");var q=require("sonner");function U(e){return e&&e.__esModule?e:{default:e}}var N=/*#__PURE__*/U(F);var W=/*#__PURE__*/U(V);var z=function(e){var t={},n=new Date;return n.setHours(0,0,0,0),I(e).sort(function(e,t){return new Date(t.createdAt).getTime()-new Date(e.createdAt).getTime()}).forEach(function(e){var r=new Date(e.createdAt);r.setHours(0,0,0,0);var a=Math.floor((n.getTime()-r.getTime())/864e5),o;var s;a===0?o="Today":a===1?o="Yesterday":a<=7?o="Previous 7 days":a<=30?o="Previous 30 days":o=r.toLocaleString("default",{month:"long",year:"numeric"}),(s=t[o])!==null&&s!==void 0?s:t[o]=[],t[o].push(e)}),t};var H=[4186.01,4434.92,4698.63,4978.03,5274.04,5587.65,5919.91,6271.93,6644.88,7040,7458.62,7902.13],G=["C","C#","D","D#","E","F","F#","G","G#","A","A#","B"],J=[],K=[];for(var $=1;$<=8;$++)for(var Y=0;Y<H.length;Y++){var X=H[Y];J.push(X/Math.pow(2,8-$)),K.push(G[Y]+$)}var Q=[32,2e3],Z=J.filter(function(e,t){return J[t]>Q[0]&&J[t]<Q[1]}),ee=K.filter(function(e,t){return J[t]>Q[0]&&J[t]<Q[1]});var et=/*#__PURE__*/function(){function e(t){var n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:null;var r=this;s(this,e);if(this.fftResults=[],n){var a=n.length,o=n.sampleRate,i=new OfflineAudioContext({length:a,sampleRate:o}),u=i.createBufferSource();u.buffer=n;var c=i.createAnalyser();c.fftSize=8192,c.smoothingTimeConstant=.1,u.connect(c);var l=1/60,f=a/o,d=function(e){var t=l*e;t<f&&i.suspend(t).then(function(){var t=new Float32Array(c.frequencyBinCount);c.getFloatFrequencyData(t),r.fftResults.push(t),d(e+1)}),e===1?i.startRendering():i.resume()};u.start(0),d(1),this.audio=t,this.context=i,this.analyser=c,this.sampleRate=o,this.audioBuffer=n}else{var h=new AudioContext,p=h.createMediaElementSource(t),v=h.createAnalyser();v.fftSize=8192,v.smoothingTimeConstant=.1,p.connect(v),v.connect(h.destination),this.audio=t,this.context=h,this.analyser=v,this.sampleRate=this.context.sampleRate,this.audioBuffer=null}}c(e,[{key:"getFrequencies",value:function t(){var t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:"frequency",n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:-100,r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:-30;var a=null;if(this.audioBuffer&&this.fftResults.length){var o=this.audio.currentTime/this.audio.duration,s=Math.min(o*this.fftResults.length|0,this.fftResults.length-1);a=this.fftResults[s]}return e.getFrequencies(this.analyser,this.sampleRate,a,t,n,r)}},{key:"resumeIfSuspended",value:function e(){var e=this;return o(function(){var t;return D(this,function(n){switch(n.label){case 0:t=e.context.state==="suspended";if(!t)return[3,2];return[4,e.context.resume()];case 1:t=n.sent();n.label=2;case 2:return[2,(t,!0)]}})})()}}],[{key:"getFrequencies",value:function e(e,t,n){var r=arguments.length>3&&arguments[3]!==void 0?arguments[3]:"frequency",a=arguments.length>4&&arguments[4]!==void 0?arguments[4]:-100,o=arguments.length>5&&arguments[5]!==void 0?arguments[5]:-30;n||(n=new Float32Array(e.frequencyBinCount),e.getFloatFrequencyData(n));var s=t/2,i=1/n.length*s,u,c,l;if(r==="music"||r==="voice"){var f=r==="voice"?Z:J,d=Array(f.length).fill(a);for(var h=0;h<n.length;h++){var p=h*i,v=n[h];for(var m=f.length-1;m>=0;m--)if(p>f[m]){d[m]=Math.max(d[m],v);break}}u=d,c=r==="voice"?Z:J,l=r==="voice"?ee:K}else u=Array.from(n),c=u.map(function(e,t){return i*t}),l=c.map(function(e){return"".concat(e.toFixed(2)," Hz")});var g=u.map(function(e){return Math.max(0,Math.min((e-a)/(o-a),1))});return{values:new Float32Array(g),frequencies:c,labels:l}}}]);return e}();globalThis.AudioAnalysis=et;var en=/*#__PURE__*/function(){function e(){s(this,e)}c(e,[{key:"_packData",value:function e(e,t){return[new Uint8Array([t,t>>8]),new Uint8Array([t,t>>8,t>>16,t>>24])][e]}},{key:"pack",value:function e(e,t){if(t===null||t===void 0?void 0:t.bitsPerSample)if(t===null||t===void 0?void 0:t.channels){if(!(t===null||t===void 0?void 0:t.data))throw new Error('Missing "data"')}else throw new Error('Missing "channels"');else throw new Error('Missing "bitsPerSample"');var n=t.bitsPerSample,r=t.channels,a=t.data,o=["RIFF",this._packData(1,4+(8+24)+(8+8)),"WAVE","fmt ",this._packData(1,16),this._packData(0,1),this._packData(0,r.length),this._packData(1,e),this._packData(1,e*r.length*n/8),this._packData(0,r.length*n/8),this._packData(0,n),"data",this._packData(1,r[0].length*r.length*n/8),a],s=new Blob(o,{type:"audio/mpeg"}),i=URL.createObjectURL(s);return{blob:s,url:i,channelCount:r.length,sampleRate:e,duration:a.byteLength/(r.length*e*2)}}}],[{key:"floatTo16BitPCM",value:function e(e){var t=new ArrayBuffer(e.length*2),n=new DataView(t),r=0;for(var a=0;a<e.length;a++,r+=2){var o=Math.max(-1,Math.min(1,e[a]));n.setInt16(r,o<0?o*32768:o*32767,!0)}return t}},{key:"mergeBuffers",value:function e(e,t){var n=new Uint8Array(e.byteLength+t.byteLength);return n.set(new Uint8Array(e),0),n.set(new Uint8Array(t),e.byteLength),n.buffer}}]);return e}();globalThis.WavPacker=en;var er="\nclass AudioProcessor extends AudioWorkletProcessor {\n\n constructor() {\n super();\n this.port.onmessage = this.receive.bind(this);\n this.initialize();\n }\n\n initialize() {\n this.foundAudio = false;\n this.recording = false;\n this.chunks = [];\n }\n\n /**\n * Concatenates sampled chunks into channels\n * Format is chunk[Left[], Right[]]\n */\n readChannelData(chunks, channel = -1, maxChannels = 9) {\n let channelLimit;\n if (channel !== -1) {\n if (chunks[0] && chunks[0].length - 1 < channel) {\n throw new Error(\n `Channel ${channel} out of range: max ${chunks[0].length}`\n );\n }\n channelLimit = channel + 1;\n } else {\n channel = 0;\n channelLimit = Math.min(chunks[0] ? chunks[0].length : 1, maxChannels);\n }\n const channels = [];\n for (let n = channel; n < channelLimit; n++) {\n const length = chunks.reduce((sum, chunk) => {\n return sum + chunk[n].length;\n }, 0);\n const buffers = chunks.map((chunk) => chunk[n]);\n const result = new Float32Array(length);\n let offset = 0;\n for (let i = 0; i < buffers.length; i++) {\n result.set(buffers[i], offset);\n offset += buffers[i].length;\n }\n channels[n] = result;\n }\n return channels;\n }\n\n /**\n * Combines parallel audio data into correct format,\n * channels[Left[], Right[]] to float32Array[LRLRLRLR...]\n */\n formatAudioData(channels) {\n if (channels.length === 1) {\n // Simple case is only one channel\n const float32Array = channels[0].slice();\n const meanValues = channels[0].slice();\n return { float32Array, meanValues };\n } else {\n const float32Array = new Float32Array(\n channels[0].length * channels.length\n );\n const meanValues = new Float32Array(channels[0].length);\n for (let i = 0; i < channels[0].length; i++) {\n const offset = i * channels.length;\n let meanValue = 0;\n for (let n = 0; n < channels.length; n++) {\n float32Array[offset + n] = channels[n][i];\n meanValue += channels[n][i];\n }\n meanValues[i] = meanValue / channels.length;\n }\n return { float32Array, meanValues };\n }\n }\n\n /**\n * Converts 32-bit float data to 16-bit integers\n */\n floatTo16BitPCM(float32Array) {\n const buffer = new ArrayBuffer(float32Array.length * 2);\n const view = new DataView(buffer);\n let offset = 0;\n for (let i = 0; i < float32Array.length; i++, offset += 2) {\n let s = Math.max(-1, Math.min(1, float32Array[i]));\n view.setInt16(offset, s < 0 ? s * 0x8000 : s * 0x7fff, true);\n }\n return buffer;\n }\n\n /**\n * Retrieves the most recent amplitude values from the audio stream\n * @param {number} channel\n */\n getValues(channel = -1) {\n const channels = this.readChannelData(this.chunks, channel);\n const { meanValues } = this.formatAudioData(channels);\n return { meanValues, channels };\n }\n\n /**\n * Exports chunks as an audio/wav file\n */\n export() {\n const channels = this.readChannelData(this.chunks);\n const { float32Array, meanValues } = this.formatAudioData(channels);\n const audioData = this.floatTo16BitPCM(float32Array);\n return {\n meanValues: meanValues,\n audio: {\n bitsPerSample: 16,\n channels: channels,\n data: audioData,\n },\n };\n }\n\n receive(e) {\n const { event, id } = e.data;\n let receiptData = {};\n switch (event) {\n case 'start':\n this.recording = true;\n break;\n case 'stop':\n this.recording = false;\n break;\n case 'clear':\n this.initialize();\n break;\n case 'export':\n receiptData = this.export();\n break;\n case 'read':\n receiptData = this.getValues();\n break;\n default:\n break;\n }\n // Always send back receipt\n this.port.postMessage({ event: 'receipt', id, data: receiptData });\n }\n\n sendChunk(chunk) {\n const channels = this.readChannelData([chunk]);\n const { float32Array, meanValues } = this.formatAudioData(channels);\n const rawAudioData = this.floatTo16BitPCM(float32Array);\n const monoAudioData = this.floatTo16BitPCM(meanValues);\n this.port.postMessage({\n event: 'chunk',\n data: {\n mono: monoAudioData,\n raw: rawAudioData,\n },\n });\n }\n\n process(inputList, outputList, parameters) {\n // Copy input to output (e.g. speakers)\n // Note that this creates choppy sounds with Mac products\n const sourceLimit = Math.min(inputList.length, outputList.length);\n for (let inputNum = 0; inputNum < sourceLimit; inputNum++) {\n const input = inputList[inputNum];\n const output = outputList[inputNum];\n const channelCount = Math.min(input.length, output.length);\n for (let channelNum = 0; channelNum < channelCount; channelNum++) {\n input[channelNum].forEach((sample, i) => {\n output[channelNum][i] = sample;\n });\n }\n }\n const inputs = inputList[0];\n // There's latency at the beginning of a stream before recording starts\n // Make sure we actually receive audio data before we start storing chunks\n let sliceIndex = 0;\n if (!this.foundAudio) {\n for (const channel of inputs) {\n sliceIndex = 0; // reset for each channel\n if (this.foundAudio) {\n break;\n }\n if (channel) {\n for (const value of channel) {\n if (value !== 0) {\n // find only one non-zero entry in any channel\n this.foundAudio = true;\n break;\n } else {\n sliceIndex++;\n }\n }\n }\n }\n }\n if (inputs && inputs[0] && this.foundAudio && this.recording) {\n // We need to copy the TypedArray, because the `process`\n // internals will reuse the same buffer to hold each input\n const chunk = inputs.map((input) => input.slice(sliceIndex));\n this.chunks.push(chunk);\n this.sendChunk(chunk);\n }\n return true;\n }\n}\n\nregisterProcessor('audio_processor', AudioProcessor);\n",ea=new Blob([er],{type:"application/javascript"}),eo=URL.createObjectURL(ea),es=eo;var ei=/*#__PURE__*/function(){function e(){var t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},n=t.sampleRate,r=n===void 0?24e3:n,a=t.outputToSpeakers,o=a===void 0?!1:a,i=t.debug,u=i===void 0?!1:i;s(this,e);this.scriptSrc=es,this.sampleRate=r,this.outputToSpeakers=o,this.debug=!!u,this._deviceChangeCallback=null,this._devices=[],this.stream=null,this.processor=null,this.source=null,this.node=null,this.recording=!1,this._lastEventId=0,this.eventReceipts={},this.eventTimeout=5e3,this._chunkProcessor=function(){},this._chunkProcessorSize=void 0,this._chunkProcessorBuffer={raw:new ArrayBuffer(0),mono:new ArrayBuffer(0)}}c(e,[{key:"log",value:function e(){return this.debug&&this.log.apply(this,arguments),!0}},{key:"getSampleRate",value:function e(){return this.sampleRate}},{key:"getStatus",value:function e(){return this.processor?this.recording?"recording":"paused":"ended"}},{key:"_event",value:function e(e){var t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:null;var r=this;return o(function(){var a,o,s;return D(this,function(i){switch(i.label){case 0:if(n=n||r.processor,!n)throw new Error("Can not send events without recording first");a={event:e,id:r._lastEventId++,data:t};n.port.postMessage(a);o=new Date().valueOf();i.label=1;case 1:if(!!r.eventReceipts[a.id])return[3,4];if(new Date().valueOf()-o>r.eventTimeout)throw new Error('Timeout waiting for "'.concat(e,'" event'));return[4,new Promise(function(e){return setTimeout(function(){return e(!0)},1)})];case 2:i.sent();i.label=3;case 3:return[3,1];case 4:s=r.eventReceipts[a.id];return[2,(delete r.eventReceipts[a.id],s)]}})})()}},{key:"listenForDeviceChange",value:function e(e){if(e===null&&this._deviceChangeCallback)navigator.mediaDevices.removeEventListener("devicechange",this._deviceChangeCallback),this._deviceChangeCallback=null;else if(e!==null){var t=this;var n=0,r=[],a=function(e){return e.map(function(e){return e.deviceId}).sort().join(",")},s=function(){var s=o(function(){var o,s;return D(this,function(i){switch(i.label){case 0:o=++n;return[4,t.listDevices()];case 1:s=i.sent();o===n&&a(r)!==a(s)&&(r=s,e(s.slice()));return[2]}})});return function e(){return s.apply(this,arguments)}}();navigator.mediaDevices.addEventListener("devicechange",s),s(),this._deviceChangeCallback=s}return!0}},{key:"requestPermission",value:function e(){return o(function(){var e,t;return D(this,function(n){switch(n.label){case 0:return[4,navigator.permissions.query({name:"microphone"})];case 1:e=n.sent();if(!(e.state==="denied"))return[3,2];window.alert("You must grant microphone access to use this feature.");return[3,6];case 2:if(!(e.state==="prompt"))return[3,6];n.label=3;case 3:n.trys.push([3,5,,6]);return[4,navigator.mediaDevices.getUserMedia({audio:!0})];case 4:n.sent().getTracks().forEach(function(e){return e.stop()});return[3,6];case 5:t=n.sent();window.alert("You must grant microphone access to use this feature.");return[3,6];case 6:return[2,!0]}})})()}},{key:"listDevices",value:function e(){var e=this;return o(function(){var t,n,r,a,o;return D(this,function(s){switch(s.label){case 0:if(!navigator.mediaDevices||!("enumerateDevices"in navigator.mediaDevices))throw new Error("Could not request user devices");return[4,e.requestPermission()];case 1:s.sent();return[4,navigator.mediaDevices.enumerateDevices()];case 2:t=s.sent().filter(function(e){return e.kind==="audioinput"}),n=t.findIndex(function(e){return e.deviceId==="default"}),r=[];if(n!==-1){a=t.splice(n,1)[0],o=t.findIndex(function(e){return e.groupId===a.groupId});o!==-1&&(a=t.splice(o,1)[0]),a.default=!0,r.push(a)}return[2,r.concat(t)]}})})()}},{key:"begin",value:function e(e){var t=this;return o(function(){var n,r,a,o,s,i,u,c;return D(this,function(l){switch(l.label){case 0:if(t.processor)throw new Error("Already connected: please call .end() to start a new session");if(!navigator.mediaDevices||!("getUserMedia"in navigator.mediaDevices))throw new Error("Could not request user media");l.label=1;case 1:l.trys.push([1,3,,4]);n={audio:!0};e&&(n.audio={deviceId:{exact:e}});return[4,navigator.mediaDevices.getUserMedia(n)];case 2:t.stream=l.sent();return[3,4];case 3:r=l.sent();throw new Error("Could not start media stream");case 4:a=new AudioContext({sampleRate:t.sampleRate}),o=a.createMediaStreamSource(t.stream);l.label=5;case 5:l.trys.push([5,7,,8]);return[4,a.audioWorklet.addModule(t.scriptSrc)];case 6:l.sent();return[3,8];case 7:s=l.sent();throw console.error(s),new Error("Could not add audioWorklet module: ".concat(t.scriptSrc));case 8:i=new AudioWorkletNode(a,"audio_processor");i.port.onmessage=function(e){var n=e.data,r=n.event,a=n.id,o=n.data;if(r==="receipt")t.eventReceipts[a]=o;else if(r==="chunk")if(t._chunkProcessorSize){var s=t._chunkProcessorBuffer;t._chunkProcessorBuffer={raw:en.mergeBuffers(s.raw,o.raw),mono:en.mergeBuffers(s.mono,o.mono)},t._chunkProcessorBuffer.mono.byteLength>=t._chunkProcessorSize&&(t._chunkProcessor(t._chunkProcessorBuffer),t._chunkProcessorBuffer={raw:new ArrayBuffer(0),mono:new ArrayBuffer(0)})}else t._chunkProcessor(o)};u=o.connect(i),c=a.createAnalyser();return[2,(c.fftSize=8192,c.smoothingTimeConstant=.1,u.connect(c),t.outputToSpeakers&&(console.warn("Warning: Output to speakers may affect sound quality,\nespecially due to system audio feedback preventative measures.\nuse only for debugging"),c.connect(a.destination)),t.source=o,t.node=u,t.analyser=c,t.processor=i,!0)]}})})()}},{key:"getFrequencies",value:function e(){var e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:"frequency",t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:-100,n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:-30;if(!this.processor)throw new Error("Session ended: please call .begin() first");return et.getFrequencies(this.analyser,this.sampleRate,null,e,t,n)}},{key:"pause",value:function e(){var e=this;return o(function(){return D(this,function(t){switch(t.label){case 0:if(e.processor){if(!e.recording)throw new Error("Already paused: please call .record() first")}else throw new Error("Session ended: please call .begin() first");e._chunkProcessorBuffer.raw.byteLength&&e._chunkProcessor(e._chunkProcessorBuffer),e.log("Pausing ...");return[4,e._event("stop")];case 1:return[2,(t.sent(),e.recording=!1,!0)]}})})()}},{key:"record",value:function e(){var e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:function(){},t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:8192;var n=this;return o(function(){return D(this,function(r){switch(r.label){case 0:if(n.processor){if(n.recording)throw new Error("Already recording: please call .pause() first");if(typeof e!="function")throw new Error("chunkProcessor must be a function")}else throw new Error("Session ended: please call .begin() first");n._chunkProcessor=e,n._chunkProcessorSize=t,n._chunkProcessorBuffer={raw:new ArrayBuffer(0),mono:new ArrayBuffer(0)},n.log("Recording ...");return[4,n._event("start")];case 1:return[2,(r.sent(),n.recording=!0,!0)]}})})()}},{key:"clear",value:function e(){var e=this;return o(function(){return D(this,function(t){switch(t.label){case 0:if(!e.processor)throw new Error("Session ended: please call .begin() first");return[4,e._event("clear")];case 1:return[2,(t.sent(),!0)]}})})()}},{key:"read",value:function e(){var e=this;return o(function(){return D(this,function(t){switch(t.label){case 0:if(!e.processor)throw new Error("Session ended: please call .begin() first");e.log("Reading ...");return[4,e._event("read")];case 1:return[2,t.sent()]}})})()}},{key:"save",value:function e(){var e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:!1;var t=this;return o(function(){var n;return D(this,function(r){switch(r.label){case 0:if(!t.processor)throw new Error("Session ended: please call .begin() first");if(!e&&t.recording)throw new Error("Currently recording: please call .pause() first, or call .save(true) to force");t.log("Exporting ...");return[4,t._event("export")];case 1:n=r.sent();return[2,new en().pack(t.sampleRate,n.audio)]}})})()}},{key:"end",value:function e(){var e=this;return o(function(){var t,n;return D(this,function(r){switch(r.label){case 0:if(!e.processor)throw new Error("Session ended: please call .begin() first");t=e.processor;e.log("Stopping ...");return[4,e._event("stop")];case 1:r.sent(),e.recording=!1,e.stream.getTracks().forEach(function(e){return e.stop()}),e.log("Exporting ...");return[4,e._event("export",{},t)];case 2:n=r.sent();return[2,(e.processor.disconnect(),e.source.disconnect(),e.node.disconnect(),e.analyser.disconnect(),e.stream=null,e.processor=null,e.source=null,e.node=null,new en().pack(e.sampleRate,n.audio))]}})})()}},{key:"quit",value:function e(){var e=this;return o(function(){var t;return D(this,function(n){switch(n.label){case 0:e.listenForDeviceChange(null);t=e.processor;if(!t)return[3,2];return[4,e.end()];case 1:t=n.sent();n.label=2;case 2:return[2,(t,!0)]}})})()}}],[{key:"decode",value:function e(e){var t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:24e3,n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:-1;return o(function(){var r,a,o,s,i,u,c,l,f,d;return D(this,function(h){switch(h.label){case 0:r=new AudioContext({sampleRate:t});if(!p(e,Blob))return[3,2];if(n!==-1)throw new Error('Can not specify "fromSampleRate" when reading from Blob');o=e;return[4,o.arrayBuffer()];case 1:a=h.sent();return[3,5];case 2:if(!p(e,ArrayBuffer))return[3,3];if(n!==-1)throw new Error('Can not specify "fromSampleRate" when reading from ArrayBuffer');a=e,o=new Blob([a],{type:"audio/wav"});return[3,5];case 3:if(p(e,Int16Array)){i=e,s=new Float32Array(e.length);for(u=0;u<e.length;u++)s[u]=e[u]/32768}else if(p(e,Float32Array))s=e;else if(p(e,Array))s=new Float32Array(e);else throw new Error('"audioData" must be one of: Blob, Float32Arrray, Int16Array, ArrayBuffer, Array<number>');if(n===-1)throw new Error('Must specify "fromSampleRate" when reading from Float32Array, In16Array or Array');if(n<3e3)throw new Error('Minimum "fromSampleRate" is 3000 (3kHz)');i||(i=en.floatTo16BitPCM(s));c={bitsPerSample:16,channels:[s],data:i};o=new en().pack(n,c).blob;return[4,o.arrayBuffer()];case 4:a=h.sent();h.label=5;case 5:return[4,r.decodeAudioData(a)];case 6:l=h.sent(),f=l.getChannelData(0),d=URL.createObjectURL(o);return[2,{blob:o,url:d,values:f,audioBuffer:l}]}})})()}}]);return e}();globalThis.WavRecorder=ei;var eu="\nclass StreamProcessor extends AudioWorkletProcessor {\n constructor() {\n super();\n this.hasStarted = false;\n this.hasInterrupted = false;\n this.outputBuffers = [];\n this.bufferLength = 128;\n this.write = { buffer: new Float32Array(this.bufferLength), trackId: null };\n this.writeOffset = 0;\n this.trackSampleOffsets = {};\n this.port.onmessage = (event) => {\n if (event.data) {\n const payload = event.data;\n if (payload.event === 'write') {\n const int16Array = payload.buffer;\n const float32Array = new Float32Array(int16Array.length);\n for (let i = 0; i < int16Array.length; i++) {\n float32Array[i] = int16Array[i] / 0x8000; // Convert Int16 to Float32\n }\n this.writeData(float32Array, payload.trackId);\n } else if (\n payload.event === 'offset' ||\n payload.event === 'interrupt'\n ) {\n const requestId = payload.requestId;\n const trackId = this.write.trackId;\n const offset = this.trackSampleOffsets[trackId] || 0;\n this.port.postMessage({\n event: 'offset',\n requestId,\n trackId,\n offset,\n });\n if (payload.event === 'interrupt') {\n this.hasInterrupted = true;\n }\n } else {\n throw new Error(`Unhandled event \"${payload.event}\"`);\n }\n }\n };\n }\n\n writeData(float32Array, trackId = null) {\n let { buffer } = this.write;\n let offset = this.writeOffset;\n for (let i = 0; i < float32Array.length; i++) {\n buffer[offset++] = float32Array[i];\n if (offset >= buffer.length) {\n this.outputBuffers.push(this.write);\n this.write = { buffer: new Float32Array(this.bufferLength), trackId };\n buffer = this.write.buffer;\n offset = 0;\n }\n }\n this.writeOffset = offset;\n return true;\n }\n\n process(inputs, outputs, parameters) {\n const output = outputs[0];\n const outputChannelData = output[0];\n const outputBuffers = this.outputBuffers;\n if (this.hasInterrupted) {\n this.port.postMessage({ event: 'stop' });\n return false;\n } else if (outputBuffers.length) {\n this.hasStarted = true;\n const { buffer, trackId } = outputBuffers.shift();\n for (let i = 0; i < outputChannelData.length; i++) {\n outputChannelData[i] = buffer[i] || 0;\n }\n if (trackId) {\n this.trackSampleOffsets[trackId] =\n this.trackSampleOffsets[trackId] || 0;\n this.trackSampleOffsets[trackId] += buffer.length;\n }\n return true;\n } else if (this.hasStarted) {\n this.port.postMessage({ event: 'stop' });\n return false;\n } else {\n return true;\n }\n }\n}\n\nregisterProcessor('stream_processor', StreamProcessor);\n",ec=new Blob([eu],{type:"application/javascript"}),el=URL.createObjectURL(ec),ef=el;var ed=/*#__PURE__*/function(){function e(){var t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},n=t.sampleRate,r=n===void 0?24e3:n,a=t.onStop;s(this,e);this.scriptSrc=ef,this.onStop=a,this.sampleRate=r,this.context=null,this.stream=null,this.analyser=null,this.trackSampleOffsets={},this.interruptedTrackIds={}}c(e,[{key:"connect",value:function e(){var e=this;return o(function(){var t,n,r;return D(this,function(a){switch(a.label){case 0:e.context=new AudioContext({sampleRate:e.sampleRate});t=e.context.state==="suspended";if(!t)return[3,2];return[4,e.context.resume()];case 1:t=a.sent();a.label=2;case 2:t;a.label=3;case 3:a.trys.push([3,5,,6]);return[4,e.context.audioWorklet.addModule(e.scriptSrc)];case 4:a.sent();return[3,6];case 5:n=a.sent();throw console.error(n),new Error("Could not add audioWorklet module: ".concat(e.scriptSrc));case 6:r=e.context.createAnalyser();return[2,(r.fftSize=8192,r.smoothingTimeConstant=.1,e.analyser=r,!0)]}})})()}},{key:"getFrequencies",value:function e(){var e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:"frequency",t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:-100,n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:-30;if(!this.analyser)throw new Error("Not connected, please call .connect() first");return et.getFrequencies(this.analyser,this.sampleRate,null,e,t,n)}},{key:"_start",value:function e(){var e=this;var t=new AudioWorkletNode(this.context,"stream_processor");return t.connect(this.context.destination),t.port.onmessage=function(n){var r,a;var o=n.data,s=o.event;if(s==="stop")(r=(a=e).onStop)===null||r===void 0?void 0:r.call(a),t.disconnect(),e.stream=null;else if(s==="offset"){var i=n.data,u=i.requestId,c=i.trackId,l=i.offset,f=l/e.sampleRate;e.trackSampleOffsets[u]={trackId:c,offset:l,currentTime:f}}},this.analyser.disconnect(),t.connect(this.analyser),this.stream=t,!0}},{key:"add16BitPCM",value:function e(e){var t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:"default";if(typeof t!="string")throw new Error("trackId must be a string");if(this.interruptedTrackIds[t])return;this.stream||this._start();var n;if(p(e,Int16Array))n=e;else if(p(e,ArrayBuffer))n=new Int16Array(e);else throw new Error("argument must be Int16Array or ArrayBuffer");return this.stream.port.postMessage({event:"write",buffer:n,trackId:t}),n}},{key:"getTrackSampleOffset",value:function e(){var e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:!1;var t=this;return o(function(){var n,r,a;return D(this,function(o){switch(o.label){case 0:if(!t.stream)return[2,null];n=crypto.randomUUID();t.stream.port.postMessage({event:e?"interrupt":"offset",requestId:n});o.label=1;case 1:if(!!r)return[3,4];r=t.trackSampleOffsets[n];return[4,new Promise(function(e){return setTimeout(function(){return e()},1)})];case 2:o.sent();o.label=3;case 3:return[3,1];case 4:a=r.trackId;return[2,(e&&a&&(t.interruptedTrackIds[a]=!0),r)]}})})()}},{key:"interrupt",value:function e(){var e=this;return o(function(){return D(this,function(t){return[2,e.getTrackSampleOffset(!0)]})})()}}]);return e}();globalThis.WavStreamPlayer=ed;var eh=O.atom({key:"ThreadIdToResume",default:void 0}),ep=O.atom({key:"ResumeThreadErrorState",default:void 0}),ev=O.atom({key:"ChatProfile",default:void 0}),em=O.atom({key:"SessionId",default:B.v4()}),eg=O.selector({key:"SessionIdSelector",get:function(e){var t=e.get;return t(em)},set:function(e,t){var n=e.set;return n(em,p(t,O.DefaultValue)?B.v4():t)}}),ey=O.atom({key:"Session",dangerouslyAllowMutability:!0,default:void 0}),ek=O.atom({key:"Actions",default:[]}),ew=O.atom({key:"Messages",dangerouslyAllowMutability:!0,default:[]}),eb=O.atom({key:"Commands",default:[]}),eS=O.atom({key:"TokenCount",default:0}),eA=O.atom({key:"Loading",default:!1}),eR=O.atom({key:"AskUser",default:void 0}),eC=O.atom({key:"WavRecorder",dangerouslyAllowMutability:!0,default:new ei}),ex=O.atom({key:"WavStreamPlayer",dangerouslyAllowMutability:!0,default:new ed}),eI=O.atom({key:"AudioConnection",default:"off"}),e_=O.atom({key:"isAiSpeaking",default:!1}),eE=O.atom({key:"CallFn",default:void 0}),eP=O.atom({key:"ChatSettings",default:[]}),eT=O.selector({key:"ChatSettingsValue/Default",get:function(e){var t=e.get;return t(eP).reduce(function(e,t){return e[t.id]=t.initial,e},{})}}),eM=O.atom({key:"ChatSettingsValue",default:eT}),eD=O.atom({key:"DisplayElements",default:[]}),eO=O.atom({key:"TasklistElements",default:[]}),ej=O.atom({key:"FirstUserInteraction",default:void 0}),eB=O.atom({key:"User",default:void 0}),eL=O.atom({key:"ChainlitConfig",default:void 0}),eF=O.atom({key:"AuthConfig",default:void 0}),eV=O.atom({key:"ThreadHistory",default:{threads:void 0,currentThreadId:void 0,timeGroupedThreads:void 0,pageInfo:void 0},effects:[function(e){var t=e.setSelf,n=e.onSet;n(function(e,n){var r=e===null||e===void 0?void 0:e.timeGroupedThreads;(e===null||e===void 0?void 0:e.threads)&&!j.isEqual(e.threads,n===null||n===void 0?void 0:n.timeGroupedThreads)&&(r=z(e.threads)),t(A(b({},e),{timeGroupedThreads:r}))})}]}),eq=O.atom({key:"SideView",default:void 0}),eU=O.atom({key:"CurrentThreadId",default:void 0}),eN=function(e){return function(t){var n=t.setSelf,r=t.onSet;var a=localStorage.getItem(e);if(a!=null)try{n(JSON.parse(a))}catch(t){console.error('Error parsing localStorage value for key "'.concat(e,'":'),t)}r(function(t,n,r){r?localStorage.removeItem(e):localStorage.setItem(e,JSON.stringify(t))})}},eW=O.atom({key:"Mcp",default:[],effects:[eN("mcp_storage_key")]});var ez=function(){var e=O.useRecoilValue(eA),t=O.useRecoilValue(eD),n=O.useRecoilValue(eO),r=O.useRecoilValue(ek),a=O.useRecoilValue(ey),o=O.useRecoilValue(eR),s=O.useRecoilValue(eE),i=O.useRecoilValue(eP),u=O.useRecoilValue(eM),c=O.useRecoilValue(eT),l=(a===null||a===void 0?void 0:a.socket.connected)&&!(a===null||a===void 0?void 0:a.error),f=!l||e||(o===null||o===void 0?void 0:o.spec.type)==="file"||(o===null||o===void 0?void 0:o.spec.type)==="action";return{actions:r,askUser:o,callFn:s,chatSettingsDefaultValue:c,chatSettingsInputs:i,chatSettingsValue:u,connected:l,disabled:f,elements:t,error:a===null||a===void 0?void 0:a.error,loading:e,tasklists:n}};var eH=function(e){var t=[];var n=true,r=false,a=undefined;try{for(var o=e[Symbol.iterator](),s;!(n=(s=o.next()).done);n=true){var i=s.value;t=eJ(t,i)}}catch(e){r=true;a=e}finally{try{if(!n&&o.return!=null){o.return()}}finally{if(r){throw a}}}return t},eG=function(e,t){if(e.length-1===t)return!0;for(var n=t+1;n<e.length;n++)if(!e[n].streaming)return!1;return!0},eJ=function(e,t){return eX(e,t.id)?eQ(e,t.id,t):"parentId"in t&&t.parentId?e$(e,t.parentId,t):"indent"in t&&t.indent&&t.indent>0?eK(e,t.indent,t):I(e).concat([t])},eK=function(e,t,n){var r=arguments.length>3&&arguments[3]!==void 0?arguments[3]:0;var a=I(e);if(a.length===0)return I(a).concat([n]);{var o=a.length-1,s=a[o];return s.steps=s.steps||[],r+1===t?(s.steps=I(s.steps).concat([n]),a[o]=b({},s),a):(s.steps=eK(s.steps,t,n,r+1),a[o]=b({},s),a)}},e$=function(e,t,n){var r=I(e);for(var a=0;a<r.length;a++){var o=r[a];j.isEqual(o.id,t)?(o.steps=o.steps?I(o.steps).concat([n]):[n],r[a]=b({},o)):eX(r,t)&&o.steps&&(o.steps=e$(o.steps,t,n),r[a]=b({},o))}return r},eY=function(e,t){var n=true,r=false,a=undefined;try{for(var o=e[Symbol.iterator](),s;!(n=(s=o.next()).done);n=true){var i=s.value;if(j.isEqual(i.id,t))return i;if(i.steps&&i.steps.length>0){var u=eY(i.steps,t);if(u)return u}}}catch(e){r=true;a=e}finally{try{if(!n&&o.return!=null){o.return()}}finally{if(r){throw a}}}},eX=function(e,t){return eY(e,t)!==void 0},eQ=function(e,t,n){var r=I(e);for(var a=0;a<r.length;a++){var o=r[a];j.isEqual(o.id,t)?r[a]=b({steps:o.steps},n):eX(r,t)&&o.steps&&(o.steps=eQ(o.steps,t,n),r[a]=b({},o))}return r},eZ=function(e,t){var n=I(e);for(var r=0;r<n.length;r++){var a=n[r];a.id===t?n=I(n.slice(0,r)).concat(I(n.slice(r+1))):eX(n,t)&&a.steps&&(a.steps=eZ(a.steps,t),n[r]=b({},a))}return n},e0=function(e,t,n,r,a){var o=I(e);for(var s=0;s<o.length;s++){var i=o[s];j.isEqual(i.id,t)?("content"in i&&i.content!==void 0?r?i.content=n:i.content+=n:a?"input"in i&&i.input!==void 0&&(r?i.input=n:i.input+=n):"output"in i&&i.output!==void 0&&(r?i.output=n:i.output+=n),o[s]=b({},i)):i.steps&&(i.steps=e0(i.steps,t,n,r,a),o[s]=b({},i))}return o};var e1=function(){var e=x(O.useRecoilState(eF),2),t=e[0],n=e[1],r=x(O.useRecoilState(eB),2),a=r[0],o=r[1],s=O.useSetRecoilState(eV);return{authConfig:t,setAuthConfig:n,user:a,setUser:o,setThreadHistory:s}};var e2=function(){var e=o(function(e,t){var n;return D(this,function(r){switch(r.label){case 0:return[4,e.get(t)];case 1:return[2,(n=r.sent())===null||n===void 0?void 0:n.json()]}})});return function t(t,n){return e.apply(this,arguments)}}(),e3=function(e){var t=new tt("","webapp");return Object.assign(t,e),t};function e4(e){var t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};var n=f({},w(t));var r=L.useContext(tr),a=e1(),o=a.setUser,s=L.useMemo(function(){return function(e){var t=x(e,1),a=t[0];n.onErrorRetry||(n.onErrorRetry=function(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++){t[n]=arguments[n]}var r;var a=x(t,1),s=a[0];if(s.status===401){o(null);return}return(r=F.SWRConfig.defaultValue).onErrorRetry.apply(r,I(t))});var s=e3(r);return s.on401=s.onError=void 0,e2(s,a)}},[r]),i=L.useMemo(function(){return e?[e]:null},[e]);return N.default(i,s,n)}var e6=function(){var e=e1(),t=e.authConfig,n=e.setAuthConfig,r=e4(t?null:"/auth/config"),a=r.data,o=r.isLoading;return L.useEffect(function(){a&&n(a)},[a,n]),{authConfig:t,isLoading:o}};var e8=function(){var e=L.useContext(tr),t=e1(),n=t.setUser,r=t.setThreadHistory;return{logout:/*#__PURE__*/o(function(){var t;var a=arguments;return D(this,function(o){switch(o.label){case 0:t=a.length>0&&a[0]!==void 0?a[0]:!1;return[4,e.logout()];case 1:o.sent(),n(void 0),r(void 0),t&&window.location.reload();return[2]}})})}};var e5=function(){var e=e1(),t=e.user,n=e.setUser,r=e4("/user"),a=r.data,o=r.error,s=r.isLoading,i=r.mutate;return L.useEffect(function(){a?n(a):s&&n(void 0)},[a,s,n]),L.useEffect(function(){o&&n(null)},[o]),{user:t,setUserFromAPI:i}};var e7=function(){var e=e6(),t=e.authConfig,n=e8(),r=n.logout,a=e5(),o=a.user,s=a.setUserFromAPI,i=!!t&&(!t.requireLogin||o!==void 0);return t&&!t.requireLogin?{data:t,user:null,isReady:i,isAuthenticated:!0,logout:function(){return Promise.resolve()},setUserFromAPI:function(){return Promise.resolve()}}:{data:t,user:o,isReady:i,isAuthenticated:!!o,logout:r,setUserFromAPI:s}};var e9=/*#__PURE__*/function(e){h(n,e);var t=M(n);function n(e,r,a){s(this,n);var o;o=t.call(this,e);o.status=r,o.detail=a;return o}c(n,[{key:"toString",value:function e(){return this.detail?"".concat(this.message,": ").concat(this.detail):this.message}}]);return n}(P(Error)),te=/*#__PURE__*/function(){function e(t,n,r,a){s(this,e);this.httpEndpoint=t;this.type=n;this.on401=r;this.onError=a}c(e,[{key:"buildEndpoint",value:function e(e){return this.httpEndpoint.endsWith("/")?"".concat(this.httpEndpoint.slice(0,-1)).concat(e):"".concat(this.httpEndpoint).concat(e)}},{key:"getDetailFromErrorResponse",value:function e(e){return o(function(){var t,n;return D(this,function(r){switch(r.label){case 0:r.trys.push([0,2,,3]);return[4,e.json()];case 1:return[2,(t=r.sent())===null||t===void 0?void 0:t.detail];case 2:n=r.sent();console.error("Unable to parse error response",n);return[3,3];case 3:return[2]}})})()}},{key:"handleRequestError",value:function e(e){p(e,e9)&&(e.status===401&&this.on401&&this.on401(),this.onError&&this.onError(e)),console.error(e)}},{key:"fetch",value:function e(e,t,n,r){var a=arguments.length>4&&arguments[4]!==void 0?arguments[4]:{};var s=this;return o(function(){var o,i,u,c;return D(this,function(l){switch(l.label){case 0:l.trys.push([0,4,,5]);p(n,FormData)?o=n:(a["Content-Type"]="application/json",o=n?JSON.stringify(n):null);return[4,fetch(s.buildEndpoint(t),{method:e,credentials:"include",headers:a,signal:r,body:o})];case 1:i=l.sent();if(!!i.ok)return[3,3];return[4,s.getDetailFromErrorResponse(i)];case 2:u=l.sent();throw new e9(i.statusText,i.status,u);case 3:return[2,i];case 4:c=l.sent();throw s.handleRequestError(c),c;case 5:return[2]}})})()}},{key:"get",value:function e(e){var t=this;return o(function(){return D(this,function(n){switch(n.label){case 0:return[4,t.fetch("GET",e)];case 1:return[2,n.sent()]}})})()}},{key:"post",value:function e(e,t,n){var r=this;return o(function(){return D(this,function(a){switch(a.label){case 0:return[4,r.fetch("POST",e,t,n)];case 1:return[2,a.sent()]}})})()}},{key:"put",value:function e(e,t){var n=this;return o(function(){return D(this,function(r){switch(r.label){case 0:return[4,n.fetch("PUT",e,t)];case 1:return[2,r.sent()]}})})()}},{key:"patch",value:function e(e,t){var n=this;return o(function(){return D(this,function(r){switch(r.label){case 0:return[4,n.fetch("PATCH",e,t)];case 1:return[2,r.sent()]}})})()}},{key:"delete",value:function e(e,t){var n=this;return o(function(){return D(this,function(r){switch(r.label){case 0:return[4,n.fetch("DELETE",e,t)];case 1:return[2,r.sent()]}})})()}}]);return e}(),tt=/*#__PURE__*/function(e){h(n,e);var t=M(n);function n(){s(this,n);return t.apply(this,arguments)}c(n,[{key:"headerAuth",value:function e(){var e=this;return o(function(){return D(this,function(t){switch(t.label){case 0:return[4,e.post("/auth/header",{})];case 1:return[2,t.sent().json()]}})})()}},{key:"jwtAuth",value:function e(e){var t=this;return o(function(){return D(this,function(n){switch(n.label){case 0:return[4,t.fetch("POST","/auth/jwt",void 0,void 0,{Authorization:"Bearer ".concat(e)})];case 1:return[2,n.sent().json()]}})})()}},{key:"passwordAuth",value:function e(e){var t=this;return o(function(){return D(this,function(n){switch(n.label){case 0:return[4,t.post("/login",e)];case 1:return[2,n.sent().json()]}})})()}},{key:"getUser",value:function e(){var e=this;return o(function(){return D(this,function(t){switch(t.label){case 0:return[4,e.get("/user")];case 1:return[2,t.sent().json()]}})})()}},{key:"logout",value:function e(){var e=this;return o(function(){return D(this,function(t){switch(t.label){case 0:return[4,e.post("/logout",{})];case 1:return[2,t.sent().json()]}})})()}},{key:"setFeedback",value:function e(e){var t=this;return o(function(){return D(this,function(n){switch(n.label){case 0:return[4,t.put("/feedback",{feedback:e})];case 1:return[2,n.sent().json()]}})})()}},{key:"deleteFeedback",value:function e(e){var t=this;return o(function(){return D(this,function(n){switch(n.label){case 0:return[4,t.delete("/feedback",{feedbackId:e})];case 1:return[2,n.sent().json()]}})})()}},{key:"listThreads",value:function e(e,t){var n=this;return o(function(){return D(this,function(r){switch(r.label){case 0:return[4,n.post("/project/threads",{pagination:e,filter:t})];case 1:return[2,r.sent().json()]}})})()}},{key:"renameThread",value:function e(e,t){var n=this;return o(function(){return D(this,function(r){switch(r.label){case 0:return[4,n.put("/project/thread",{threadId:e,name:t})];case 1:return[2,r.sent().json()]}})})()}},{key:"deleteThread",value:function e(e){var t=this;return o(function(){return D(this,function(n){switch(n.label){case 0:return[4,t.delete("/project/thread",{threadId:e})];case 1:return[2,n.sent().json()]}})})()}},{key:"uploadFile",value:function e(e,t,n){var r=this;var a=new XMLHttpRequest;a.withCredentials=!0;var o=new Promise(function(o,s){var i=new FormData;i.append("file",e),a.open("POST",r.buildEndpoint("/project/file?session_id=".concat(n)),!0),a.upload.onprogress=function(e){if(e.lengthComputable){var n=e.loaded/e.total*100;t(n)}},a.onload=function(){if(a.status===200){var e=JSON.parse(a.responseText);o(e);return}var t=a.getResponseHeader("Content-Type");if(t&&t.includes("application/json")){var n=JSON.parse(a.responseText);s(n.detail)}else s("Upload failed")},a.onerror=function(){s("Upload error")},a.send(i)});return{xhr:a,promise:o}}},{key:"callAction",value:function e(e,t){var n=this;return o(function(){return D(this,function(r){switch(r.label){case 0:return[4,n.post("/project/action",{sessionId:t,action:e})];case 1:return[2,r.sent().json()]}})})()}},{key:"updateElement",value:function e(e,t){var n=this;return o(function(){return D(this,function(r){switch(r.label){case 0:return[4,n.put("/project/element",{sessionId:t,element:e})];case 1:return[2,r.sent().json()]}})})()}},{key:"deleteElement",value:function e(e,t){var n=this;return o(function(){return D(this,function(r){switch(r.label){case 0:return[4,n.delete("/project/element",{sessionId:t,element:e})];case 1:return[2,r.sent().json()]}})})()}},{key:"connectStdioMCP",value:function e(e,t,n){var r=this;return o(function(){return D(this,function(a){switch(a.label){case 0:return[4,r.post("/mcp",{sessionId:e,name:t,fullCommand:n,clientType:"stdio"})];case 1:return[2,a.sent().json()]}})})()}},{key:"connectSseMCP",value:function e(e,t,n){var r=this;return o(function(){return D(this,function(a){switch(a.label){case 0:return[4,r.post("/mcp",{sessionId:e,name:t,url:n,clientType:"sse"})];case 1:return[2,a.sent().json()]}})})()}},{key:"disconnectMcp",value:function e(e,t){var n=this;return o(function(){return D(this,function(r){switch(r.label){case 0:return[4,n.delete("/mcp",{sessionId:e,name:t})];case 1:return[2,r.sent().json()]}})})()}},{key:"getElementUrl",value:function e(e,t){var n="?session_id=".concat(t);return this.buildEndpoint("/project/file/".concat(e).concat(n))}},{key:"getLogoEndpoint",value:function e(e){return this.buildEndpoint("/logo?theme=".concat(e))}},{key:"getOAuthEndpoint",value:function e(e){return this.buildEndpoint("/auth/oauth/".concat(e))}}]);return n}(te);var tn=void 0,tr=L.createContext(new tt("http://localhost:8000","webapp"));var ta=function(){var e=L.useContext(tr),t=O.useRecoilValue(ey),n=O.useRecoilValue(eR),r=O.useRecoilValue(eg),a=O.useResetRecoilState(eP),o=O.useResetRecoilState(eg),s=O.useResetRecoilState(eM),i=O.useSetRecoilState(ej),u=O.useSetRecoilState(eA),c=O.useSetRecoilState(ew),l=O.useSetRecoilState(eD),f=O.useSetRecoilState(eO),d=O.useSetRecoilState(ek),h=O.useSetRecoilState(eS),p=O.useSetRecoilState(eh),v=O.useSetRecoilState(eq),m=O.useSetRecoilState(eU),g=L.useCallback(function(){t===null||t===void 0?void 0:t.socket.emit("clear_session"),t===null||t===void 0?void 0:t.socket.disconnect(),p(void 0),o(),i(void 0),c([]),l([]),f([]),d([]),h(0),a(),s(),v(void 0),m(void 0)},[t]),y=L.useCallback(function(e){var n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:[];e.id||(e.id=B.v4()),e.createdAt||(e.createdAt=new Date().toISOString()),c(function(t){return eJ(t,e)}),t===null||t===void 0?void 0:t.socket.emit("client_message",{message:e,fileReferences:n})},[t===null||t===void 0?void 0:t.socket]),k=L.useCallback(function(e){t===null||t===void 0?void 0:t.socket.emit("edit_message",{message:e})},[t===null||t===void 0?void 0:t.socket]),w=L.useCallback(function(e){t===null||t===void 0?void 0:t.socket.emit("window_message",e)},[t===null||t===void 0?void 0:t.socket]),b=L.useCallback(function(){t===null||t===void 0?void 0:t.socket.emit("audio_start")},[t===null||t===void 0?void 0:t.socket]),S=L.useCallback(function(e,n,r,a){t===null||t===void 0?void 0:t.socket.emit("audio_chunk",{isStart:e,mimeType:n,elapsedTime:r,data:a})},[t===null||t===void 0?void 0:t.socket]),A=L.useCallback(function(){t===null||t===void 0?void 0:t.socket.emit("audio_end")},[t===null||t===void 0?void 0:t.socket]),R=L.useCallback(function(e){n&&(n.parentId&&(e.parentId=n.parentId),c(function(t){return eJ(t,e)}),n.callback(e))},[n]),C=L.useCallback(function(e){t===null||t===void 0?void 0:t.socket.emit("chat_settings_change",e)},[t===null||t===void 0?void 0:t.socket]),x=L.useCallback(function(){c(function(e){return e.map(function(e){return e.streaming=!1,e})}),u(!1),t===null||t===void 0?void 0:t.socket.emit("stop")},[t===null||t===void 0?void 0:t.socket]);return{uploadFile:L.useCallback(function(t,n){return e.uploadFile(t,n,r)},[r]),clear:g,replyMessage:R,sendMessage:y,editMessage:k,windowMessage:w,startAudioStream:b,sendAudioChunk:S,endAudioStream:A,stopTask:x,setIdToResume:p,updateChatSettings:C}};var to=function(){var e=O.useRecoilValue(ew),t=O.useRecoilValue(ej);return{threadId:O.useRecoilValue(eU),messages:e,firstInteraction:t}};var ts=function(){var e=L.useContext(tr),t=O.useRecoilValue(eg),n=x(O.useRecoilState(ey),2),r=n[0],a=n[1],s=O.useSetRecoilState(e_),i=O.useSetRecoilState(eI),u=O.useResetRecoilState(eM),c=O.useSetRecoilState(eM),l=O.useSetRecoilState(ej),f=O.useSetRecoilState(eA),d=O.useSetRecoilState(eW),h=O.useRecoilValue(ex),p=O.useRecoilValue(eC),v=O.useSetRecoilState(ew),m=O.useSetRecoilState(eR),g=O.useSetRecoilState(eE),y=O.useSetRecoilState(eb),k=O.useSetRecoilState(eq),w=O.useSetRecoilState(eD),S=O.useSetRecoilState(eO),R=O.useSetRecoilState(ek),C=O.useSetRecoilState(eP),_=O.useSetRecoilState(eS),E=x(O.useRecoilState(ev),2),P=E[0],T=E[1],M=O.useRecoilValue(eh),B=O.useSetRecoilState(ep),F=x(O.useRecoilState(eU),2),V=F[0],U=F[1];L.useEffect(function(){(r===null||r===void 0?void 0:r.socket)&&(r.socket.auth.threadId=V||"")},[V]);var N=L.useCallback(function(n){var r=n.transports,x=n.userEnv;var E=new URL(e.httpEndpoint),O=E.protocol,j=E.host,L=E.pathname,F="".concat(O,"//").concat(j),V=L&&L!=="/"?"".concat(L,"/ws/socket.io"):"/ws/socket.io",N=W.default(F,{path:V,withCredentials:!0,transports:r,auth:{clientType:e.type,sessionId:t,threadId:M||"",userEnv:JSON.stringify(x),chatProfile:P?encodeURIComponent(P):""}});a(function(e){var t,n;return e===null||e===void 0?void 0:(t=e.socket)===null||t===void 0?void 0:t.removeAllListeners(),e===null||e===void 0?void 0:(n=e.socket)===null||n===void 0?void 0:n.close(),{socket:N}}),N.on("connect",function(){N.emit("connection_successful"),a(function(e){return A(b({},e),{error:!1})}),d(function(n){return n.map(function(n){return(n.clientType==="sse"?e.connectSseMCP(t,n.name,n.url):e.connectStdioMCP(t,n.name,n.command)).then(function(){var e=o(function(e){var t,n;return D(this,function(r){t=e.success,n=e.mcp;d(function(e){return e.map(function(e){return e.name===n.name?A(b({},e),{status:t?"connected":"failed",tools:n?n.tools:e.tools}):e})});return[2]})});return function(t){return e.apply(this,arguments)}}()).catch(function(){d(function(e){return e.map(function(e){return e.name===n.name?A(b({},e),{status:"failed"}):e})})}),A(b({},n),{status:"connecting"})})})}),N.on("connect_error",function(e){a(function(e){return A(b({},e),{error:!0})})}),N.on("task_start",function(){f(!0)}),N.on("task_end",function(){f(!1)}),N.on("reload",function(){N.emit("clear_session"),window.location.reload()}),N.on("audio_connection",function(){var e=o(function(e){var t,n,r;return D(this,function(a){switch(a.label){case 0:if(!(e==="on"))return[3,4];t=!0,n=Date.now(),r="pcm16";return[4,p.begin()];case 1:a.sent();return[4,h.connect()];case 2:a.sent();return[4,p.record(function(){var e=o(function(e){var a;return D(this,function(o){a=Date.now()-n;N.emit("audio_chunk",{isStart:t,mimeType:r,elapsedTime:a,data:e.mono}),t=!1;return[2]})});return function(t){return e.apply(this,arguments)}}())];case 3:a.sent(),h.onStop=function(){return s(!1)};return[3,7];case 4:return[4,p.end()];case 5:a.sent();return[4,h.interrupt()];case 6:a.sent();a.label=7;case 7:i(e);return[2]}})});return function(t){return e.apply(this,arguments)}}()),N.on("audio_chunk",function(e){h.add16BitPCM(e.data,e.track),s(!0)}),N.on("audio_interrupt",function(){h.interrupt()}),N.on("resume_thread",function(e){var t,n,r,a;var o=[];var s=true,i=false,u=undefined;try{for(var l=e.steps[Symbol.iterator](),f;!(s=(f=l.next()).done);s=true){var d=f.value;o=eJ(o,d)}}catch(e){i=true;u=e}finally{try{if(!s&&l.return!=null){l.return()}}finally{if(i){throw u}}}((t=e.metadata)===null||t===void 0?void 0:t.chat_profile)&&T((n=e.metadata)===null||n===void 0?void 0:n.chat_profile),((r=e.metadata)===null||r===void 0?void 0:r.chat_settings)&&c((a=e.metadata)===null||a===void 0?void 0:a.chat_settings),v(o);var h=e.elements||[];S(h.filter(function(e){return e.type==="tasklist"})),w(h.filter(function(e){return["avatar","tasklist"].indexOf(e.type)===-1}))}),N.on("resume_thread_error",function(e){B(e)}),N.on("new_message",function(e){v(function(t){return eJ(t,e)})}),N.on("first_interaction",function(e){l(e.interaction),U(e.thread_id)}),N.on("update_message",function(e){v(function(t){return eQ(t,e.id,e)})}),N.on("delete_message",function(e){v(function(t){return eZ(t,e.id)})}),N.on("stream_start",function(e){v(function(t){return eJ(t,e)})}),N.on("stream_token",function(e){var t=e.id,n=e.token,r=e.isSequence,a=e.isInput;v(function(e){return e0(e,t,n,r,a)})}),N.on("ask",function(e,t){var n=e.msg,r=e.spec;m({spec:r,callback:t,parentId:n.parentId}),v(function(e){return eJ(e,n)}),f(!1)}),N.on("ask_timeout",function(){m(void 0),f(!1)}),N.on("clear_ask",function(){m(void 0)}),N.on("call_fn",function(e,t){var n=e.name,r=e.args;g({name:n,args:r,callback:t})}),N.on("clear_call_fn",function(){g(void 0)}),N.on("call_fn_timeout",function(){g(void 0)}),N.on("chat_settings",function(e){C(e),u()}),N.on("set_commands",function(e){y(e)}),N.on("set_sidebar_title",function(e){k(function(t){return{title:e,elements:(t===null||t===void 0?void 0:t.elements)||[]}})}),N.on("set_sidebar_elements",function(n){n.length?(n.forEach(function(n){!n.url&&n.chainlitKey&&(n.url=e.getElementUrl(n.chainlitKey,t))}),k(function(e){return{title:(e===null||e===void 0?void 0:e.title)||"",elements:n}})):k(void 0)}),N.on("element",function(n){!n.url&&n.chainlitKey&&(n.url=e.getElementUrl(n.chainlitKey,t)),n.type==="tasklist"?S(function(e){var t=e.findIndex(function(e){return e.id===n.id});return t===-1?I(e).concat([n]):I(e.slice(0,t)).concat([n],I(e.slice(t+1)))}):w(function(e){var t=e.findIndex(function(e){return e.id===n.id});return t===-1?I(e).concat([n]):I(e.slice(0,t)).concat([n],I(e.slice(t+1)))})}),N.on("remove_element",function(e){w(function(t){return t.filter(function(t){return t.id!==e.id})}),S(function(t){return t.filter(function(t){return t.id!==e.id})})}),N.on("action",function(e){R(function(t){return I(t).concat([e])})}),N.on("remove_action",function(e){R(function(t){var n=t.findIndex(function(t){return t.id===e.id});return n===-1?t:I(t.slice(0,n)).concat(I(t.slice(n+1)))})}),N.on("token_usage",function(e){_(function(t){return t+e})}),N.on("window_message",function(e){window.parent&&window.parent.postMessage(e,"*")}),N.on("toast",function(e){if(!e.message){console.warn("No message received for toast.");return}switch(e.type){case"info":q.toast.info(e.message);break;case"error":q.toast.error(e.message);break;case"success":q.toast.success(e.message);break;case"warning":q.toast.warning(e.message);break;default:q.toast(e.message);break}})},[a,t,M,P]),z=L.useCallback(j.debounce(N,200),[N]),H=L.useCallback(function(){(r===null||r===void 0?void 0:r.socket)&&(r.socket.removeAllListeners(),r.socket.close())},[r]);return{connect:z,disconnect:H,session:r,sessionId:t,chatProfile:P,idToResume:M,setChatProfile:T}};var ti=function(){var e=x(O.useRecoilState(eI),2),t=e[0],n=e[1],r=O.useRecoilValue(eC),a=O.useRecoilValue(ex),s=O.useRecoilValue(e_),i=ta(),u=i.startAudioStream,c=i.endAudioStream,l=L.useCallback(/*#__PURE__*/o(function(){return D(this,function(e){switch(e.label){case 0:n("connecting");return[4,u()];case 1:e.sent();return[2]}})}),[u]),f=L.useCallback(/*#__PURE__*/o(function(){return D(this,function(e){switch(e.label){case 0:n("off");return[4,r.end()];case 1:e.sent();return[4,a.interrupt()];case 2:e.sent();return[4,c()];case 3:e.sent();return[2]}})}),[c,r,a]);return{startConversation:l,endConversation:f,audioConnection:t,isAiSpeaking:s,wavRecorder:r,wavStreamPlayer:a}};var tu=function(){var e=x(O.useRecoilState(eL),2),t=e[0],n=e[1],r=e7(),a=r.isAuthenticated,o=navigator.language||"en-US",s=e4(!t&&a?"/project/settings?language=".concat(o):null),i=s.data,u=s.error,c=s.isLoading;return L.useEffect(function(){i&&n(i)},[i,n]),{config:t,error:u,isLoading:c,language:o}};var tc=new WeakMap,tl=function(e,t){var n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!1,r=arguments.length>3&&arguments[3]!==void 0?arguments[3]:!1;var a,o,s;if(r&&(o=t.toString(),s=n.toString(),a=tc.has(e)?tc.get(e):{},tc.set(e,a),a[o]=a[o]||{},a[o][s]))return a[o][s];var i=e.length,u=new Array(t);if(t<=i){u.fill(0);var c=new Array(t).fill(0);for(var l=0;l<i;l++){var f=Math.floor(l*(t/i));n?u[f]=Math.max(u[f],Math.abs(e[l])):u[f]+=Math.abs(e[l]),c[f]++}if(!n)for(var d=0;d<u.length;d++)u[d]=u[d]/c[d]}else for(var h=0;h<t;h++){var p=h*(i-1)/(t-1),v=Math.floor(p),m=Math.ceil(p),g=p-v;m>=i?u[h]=e[i-1]:u[h]=e[v]*(1-g)+e[m]*g}return r&&(a[o][s]=u),u},tf={drawBars:function(e,t,n,r,a){var o=arguments.length>5&&arguments[5]!==void 0?arguments[5]:0,s=arguments.length>6&&arguments[6]!==void 0?arguments[6]:0,i=arguments.length>7&&arguments[7]!==void 0?arguments[7]:0,u=arguments.length>8&&arguments[8]!==void 0?arguments[8]:!1;o=Math.floor(Math.min(o,(n-i)/(Math.max(s,1)+i))),o||(o=Math.floor((n-i)/(Math.max(s,1)+i))),s||(s=(n-i)/o-i);var c=tl(t,o,!0);for(var l=0;l<o;l++){var f=Math.abs(c[l]),d=Math.max(1,f*r),h=i+l*(s+i),p=u?(r-d)/2:r-d,v=Math.min(s/2,d/2);e.fillStyle=a,e.beginPath(),e.moveTo(h+v,p),e.lineTo(h+s-v,p),e.arcTo(h+s,p,h+s,p+v,v),e.lineTo(h+s,p+d-v),e.arcTo(h+s,p+d,h+s-v,p+d,v),e.lineTo(h+v,p+d),e.arcTo(h,p+d,h,p+d-v,v),e.lineTo(h,p+v),e.arcTo(h,p,h+v,p,v),e.closePath(),e.fill()}}};Object.defineProperty(exports,"Socket",{enumerable:true,get:function e(){return V.Socket}});exports.APIBase=te;exports.ChainlitAPI=tt;exports.ChainlitContext=tr;exports.ClientError=e9;exports.WavRenderer=tf;exports.actionState=ek;exports.addMessage=eJ;exports.addMessageToParent=e$;exports.askUserState=eR;exports.audioConnectionState=eI;exports.authState=eF;exports.callFnState=eE;exports.chatProfileState=ev;exports.chatSettingsDefaultValueSelector=eT;exports.chatSettingsInputsState=eP;exports.chatSettingsValueState=eM;exports.commandsState=eb;exports.configState=eL;exports.currentThreadIdState=eU;exports.defaultChainlitContext=tn;exports.deleteMessageById=eZ;exports.elementState=eD;exports.fetcher=e2;exports.firstUserInteraction=ej;exports.hasMessageById=eX;exports.isAiSpeakingState=e_;exports.isLastMessage=eG;exports.loadingState=eA;exports.mcpState=eW;exports.messagesState=ew;exports.nestMessages=eH;exports.resumeThreadErrorState=ep;exports.sessionIdState=eg;exports.sessionState=ey;exports.sideViewState=eq;exports.tasklistState=eO;exports.threadHistoryState=eV;exports.threadIdToResumeState=eh;exports.tokenCountState=eS;exports.updateMessageById=eQ;exports.updateMessageContentById=e0;exports.useApi=e4;exports.useAudio=ti;exports.useAuth=e7;exports.useChatData=ez;exports.useChatInteract=ta;exports.useChatMessages=to;exports.useChatSession=ts;exports.useConfig=tu;exports.userState=eB;exports.wavRecorderState=eC;exports.wavStreamPlayerState=ex;//# sourceMappingURL=out.js.map
1
+ "use strict";function e(e,t){if(t==null||t>e.length)t=e.length;for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}function t(e){if(Array.isArray(e))return e}function n(t){if(Array.isArray(t))return e(t)}function r(e){if(e===void 0){throw new ReferenceError("this hasn't been initialised - super() hasn't been called")}return e}function a(e,t,n,r,a,o,s){try{var i=e[o](s);var u=i.value}catch(e){n(e);return}if(i.done){t(u)}else{Promise.resolve(u).then(r,a)}}function o(e){return function(){var t=this,n=arguments;return new Promise(function(r,o){var s=e.apply(t,n);function i(e){a(s,r,o,i,u,"next",e)}function u(e){a(s,r,o,i,u,"throw",e)}i(undefined)})}}function s(e,t){if(!(e instanceof t)){throw new TypeError("Cannot call a class as a function")}}function i(e,t,n){if(T()){i=Reflect.construct}else{i=function e(e,t,n){var r=[null];r.push.apply(r,t);var a=Function.bind.apply(e,r);var o=new a;if(n)C(o,n.prototype);return o}}return i.apply(null,arguments)}function u(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||false;r.configurable=true;if("value"in r)r.writable=true;Object.defineProperty(e,r.key,r)}}function c(e,t,n){if(t)u(e.prototype,t);if(n)u(e,n);return e}function l(e,t,n){if(t in e){Object.defineProperty(e,t,{value:n,enumerable:true,configurable:true,writable:true})}else{e[t]=n}return e}function f(){f=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n){if(Object.prototype.hasOwnProperty.call(n,r)){e[r]=n[r]}}}return e};return f.apply(this,arguments)}function d(e){d=Object.setPrototypeOf?Object.getPrototypeOf:function e(e){return e.__proto__||Object.getPrototypeOf(e)};return d(e)}function h(e,t){if(typeof t!=="function"&&t!==null){throw new TypeError("Super expression must either be null or a function")}e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:true,configurable:true}});if(t)C(e,t)}function p(e,t){if(t!=null&&typeof Symbol!=="undefined"&&t[Symbol.hasInstance]){return!!t[Symbol.hasInstance](e)}else{return e instanceof t}}function v(e){return Function.toString.call(e).indexOf("[native code]")!==-1}function m(e){if(typeof Symbol!=="undefined"&&e[Symbol.iterator]!=null||e["@@iterator"]!=null)return Array.from(e)}function y(e,t){var n=e==null?null:typeof Symbol!=="undefined"&&e[Symbol.iterator]||e["@@iterator"];if(n==null)return;var r=[];var a=true;var o=false;var s,i;try{for(n=n.call(e);!(a=(s=n.next()).done);a=true){r.push(s.value);if(t&&r.length===t)break}}catch(e){o=true;i=e}finally{try{if(!a&&n["return"]!=null)n["return"]()}finally{if(o)throw i}}return r}function g(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function k(){throw new TypeError("Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function w(e){if(e===null||e===void 0)throw new TypeError("Cannot destructure "+e);return e}function b(e){for(var t=1;t<arguments.length;t++){var n=arguments[t]!=null?arguments[t]:{};var r=Object.keys(n);if(typeof Object.getOwnPropertySymbols==="function"){r=r.concat(Object.getOwnPropertySymbols(n).filter(function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable}))}r.forEach(function(t){l(e,t,n[t])})}return e}function S(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);if(t){r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})}n.push.apply(n,r)}return n}function A(e,t){t=t!=null?t:{};if(Object.getOwnPropertyDescriptors){Object.defineProperties(e,Object.getOwnPropertyDescriptors(t))}else{S(Object(t)).forEach(function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})}return e}function R(e,t){if(t&&(_(t)==="object"||typeof t==="function")){return t}return r(e)}function C(e,t){C=Object.setPrototypeOf||function e(e,t){e.__proto__=t;return e};return C(e,t)}function x(e,n){return t(e)||y(e,n)||E(e,n)||g()}function I(e){return n(e)||m(e)||E(e)||k()}function _(e){"@swc/helpers - typeof";return e&&typeof Symbol!=="undefined"&&e.constructor===Symbol?"symbol":typeof e}function E(t,n){if(!t)return;if(typeof t==="string")return e(t,n);var r=Object.prototype.toString.call(t).slice(8,-1);if(r==="Object"&&t.constructor)r=t.constructor.name;if(r==="Map"||r==="Set")return Array.from(r);if(r==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r))return e(t,n)}function P(e){var t=typeof Map==="function"?new Map:undefined;P=function e(e){if(e===null||!v(e))return e;if(typeof e!=="function"){throw new TypeError("Super expression must either be null or a function")}if(typeof t!=="undefined"){if(t.has(e))return t.get(e);t.set(e,n)}function n(){return i(e,arguments,d(this).constructor)}n.prototype=Object.create(e.prototype,{constructor:{value:n,enumerable:false,writable:true,configurable:true}});return C(n,e)};return P(e)}function T(){if(typeof Reflect==="undefined"||!Reflect.construct)return false;if(Reflect.construct.sham)return false;if(typeof Proxy==="function")return true;try{Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}));return true}catch(e){return false}}function M(e){var t=T();return function n(){var n=d(e),r;if(t){var a=d(this).constructor;r=Reflect.construct(n,arguments,a)}else{r=n.apply(this,arguments)}return R(this,r)}}function D(e,t){var n,r,a,o,s={label:0,sent:function(){if(a[0]&1)throw a[1];return a[1]},trys:[],ops:[]};return(o={next:i(0),"throw":i(1),"return":i(2)},typeof Symbol==="function"&&(o[Symbol.iterator]=function(){return this}),o);function i(e){return function(t){return u([e,t])}}function u(o){if(n)throw new TypeError("Generator is already executing.");while(s)try{if(n=1,r&&(a=o[0]&2?r["return"]:o[0]?r["throw"]||((a=r["return"])&&a.call(r),0):r.next)&&!(a=a.call(r,o[1])).done)return a;if(r=0,a)o=[o[0]&2,a.value];switch(o[0]){case 0:case 1:a=o;break;case 4:s.label++;return{value:o[1],done:false};case 5:s.label++;r=o[1];o=[0];continue;case 7:o=s.ops.pop();s.trys.pop();continue;default:if(!(a=s.trys,a=a.length>0&&a[a.length-1])&&(o[0]===6||o[0]===2)){s=0;continue}if(o[0]===3&&(!a||o[1]>a[0]&&o[1]<a[3])){s.label=o[1];break}if(o[0]===6&&s.label<a[1]){s.label=a[1];a=o;break}if(a&&s.label<a[2]){s.label=a[2];s.ops.push(o);break}if(a[2])s.ops.pop();s.trys.pop();continue}o=t.call(e,s)}catch(e){o=[6,e];r=0}finally{n=a=0}if(o[0]&5)throw o[1];return{value:o[0]?o[1]:void 0,done:true}}}var O=require("recoil");var j=require("lodash");var B=require("uuid");var L=require("react");var F=require("swr");var V=require("socket.io-client");var U=require("sonner");function q(e){return e&&e.__esModule?e:{default:e}}var N=/*#__PURE__*/q(F);var W=/*#__PURE__*/q(V);var z=function(e){var t={},n=new Date;return n.setHours(0,0,0,0),I(e).sort(function(e,t){return new Date(t.createdAt).getTime()-new Date(e.createdAt).getTime()}).forEach(function(e){var r=new Date(e.createdAt);r.setHours(0,0,0,0);var a=Math.floor((n.getTime()-r.getTime())/864e5),o;var s;a===0?o="Today":a===1?o="Yesterday":a<=7?o="Previous 7 days":a<=30?o="Previous 30 days":o=r.toLocaleString("default",{month:"long",year:"numeric"}),(s=t[o])!==null&&s!==void 0?s:t[o]=[],t[o].push(e)}),t};var H=[4186.01,4434.92,4698.63,4978.03,5274.04,5587.65,5919.91,6271.93,6644.88,7040,7458.62,7902.13],G=["C","C#","D","D#","E","F","F#","G","G#","A","A#","B"],J=[],K=[];for(var $=1;$<=8;$++)for(var Q=0;Q<H.length;Q++){var Y=H[Q];J.push(Y/Math.pow(2,8-$)),K.push(G[Q]+$)}var X=[32,2e3],Z=J.filter(function(e,t){return J[t]>X[0]&&J[t]<X[1]}),ee=K.filter(function(e,t){return J[t]>X[0]&&J[t]<X[1]});var et=/*#__PURE__*/function(){function e(t){var n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:null;var r=this;s(this,e);if(this.fftResults=[],n){var a=n.length,o=n.sampleRate,i=new OfflineAudioContext({length:a,sampleRate:o}),u=i.createBufferSource();u.buffer=n;var c=i.createAnalyser();c.fftSize=8192,c.smoothingTimeConstant=.1,u.connect(c);var l=1/60,f=a/o,d=function(e){var t=l*e;t<f&&i.suspend(t).then(function(){var t=new Float32Array(c.frequencyBinCount);c.getFloatFrequencyData(t),r.fftResults.push(t),d(e+1)}),e===1?i.startRendering():i.resume()};u.start(0),d(1),this.audio=t,this.context=i,this.analyser=c,this.sampleRate=o,this.audioBuffer=n}else{var h=new AudioContext,p=h.createMediaElementSource(t),v=h.createAnalyser();v.fftSize=8192,v.smoothingTimeConstant=.1,p.connect(v),v.connect(h.destination),this.audio=t,this.context=h,this.analyser=v,this.sampleRate=this.context.sampleRate,this.audioBuffer=null}}c(e,[{key:"getFrequencies",value:function t(){var t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:"frequency",n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:-100,r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:-30;var a=null;if(this.audioBuffer&&this.fftResults.length){var o=this.audio.currentTime/this.audio.duration,s=Math.min(o*this.fftResults.length|0,this.fftResults.length-1);a=this.fftResults[s]}return e.getFrequencies(this.analyser,this.sampleRate,a,t,n,r)}},{key:"resumeIfSuspended",value:function e(){var e=this;return o(function(){var t;return D(this,function(n){switch(n.label){case 0:t=e.context.state==="suspended";if(!t)return[3,2];return[4,e.context.resume()];case 1:t=n.sent();n.label=2;case 2:return[2,(t,!0)]}})})()}}],[{key:"getFrequencies",value:function e(e,t,n){var r=arguments.length>3&&arguments[3]!==void 0?arguments[3]:"frequency",a=arguments.length>4&&arguments[4]!==void 0?arguments[4]:-100,o=arguments.length>5&&arguments[5]!==void 0?arguments[5]:-30;n||(n=new Float32Array(e.frequencyBinCount),e.getFloatFrequencyData(n));var s=t/2,i=1/n.length*s,u,c,l;if(r==="music"||r==="voice"){var f=r==="voice"?Z:J,d=Array(f.length).fill(a);for(var h=0;h<n.length;h++){var p=h*i,v=n[h];for(var m=f.length-1;m>=0;m--)if(p>f[m]){d[m]=Math.max(d[m],v);break}}u=d,c=r==="voice"?Z:J,l=r==="voice"?ee:K}else u=Array.from(n),c=u.map(function(e,t){return i*t}),l=c.map(function(e){return"".concat(e.toFixed(2)," Hz")});var y=u.map(function(e){return Math.max(0,Math.min((e-a)/(o-a),1))});return{values:new Float32Array(y),frequencies:c,labels:l}}}]);return e}();globalThis.AudioAnalysis=et;var en=/*#__PURE__*/function(){function e(){s(this,e)}c(e,[{key:"_packData",value:function e(e,t){return[new Uint8Array([t,t>>8]),new Uint8Array([t,t>>8,t>>16,t>>24])][e]}},{key:"pack",value:function e(e,t){if(t===null||t===void 0?void 0:t.bitsPerSample)if(t===null||t===void 0?void 0:t.channels){if(!(t===null||t===void 0?void 0:t.data))throw new Error('Missing "data"')}else throw new Error('Missing "channels"');else throw new Error('Missing "bitsPerSample"');var n=t.bitsPerSample,r=t.channels,a=t.data,o=["RIFF",this._packData(1,4+(8+24)+(8+8)),"WAVE","fmt ",this._packData(1,16),this._packData(0,1),this._packData(0,r.length),this._packData(1,e),this._packData(1,e*r.length*n/8),this._packData(0,r.length*n/8),this._packData(0,n),"data",this._packData(1,r[0].length*r.length*n/8),a],s=new Blob(o,{type:"audio/mpeg"}),i=URL.createObjectURL(s);return{blob:s,url:i,channelCount:r.length,sampleRate:e,duration:a.byteLength/(r.length*e*2)}}}],[{key:"floatTo16BitPCM",value:function e(e){var t=new ArrayBuffer(e.length*2),n=new DataView(t),r=0;for(var a=0;a<e.length;a++,r+=2){var o=Math.max(-1,Math.min(1,e[a]));n.setInt16(r,o<0?o*32768:o*32767,!0)}return t}},{key:"mergeBuffers",value:function e(e,t){var n=new Uint8Array(e.byteLength+t.byteLength);return n.set(new Uint8Array(e),0),n.set(new Uint8Array(t),e.byteLength),n.buffer}}]);return e}();globalThis.WavPacker=en;var er="\nclass AudioProcessor extends AudioWorkletProcessor {\n\n constructor() {\n super();\n this.port.onmessage = this.receive.bind(this);\n this.initialize();\n }\n\n initialize() {\n this.foundAudio = false;\n this.recording = false;\n this.chunks = [];\n }\n\n /**\n * Concatenates sampled chunks into channels\n * Format is chunk[Left[], Right[]]\n */\n readChannelData(chunks, channel = -1, maxChannels = 9) {\n let channelLimit;\n if (channel !== -1) {\n if (chunks[0] && chunks[0].length - 1 < channel) {\n throw new Error(\n `Channel ${channel} out of range: max ${chunks[0].length}`\n );\n }\n channelLimit = channel + 1;\n } else {\n channel = 0;\n channelLimit = Math.min(chunks[0] ? chunks[0].length : 1, maxChannels);\n }\n const channels = [];\n for (let n = channel; n < channelLimit; n++) {\n const length = chunks.reduce((sum, chunk) => {\n return sum + chunk[n].length;\n }, 0);\n const buffers = chunks.map((chunk) => chunk[n]);\n const result = new Float32Array(length);\n let offset = 0;\n for (let i = 0; i < buffers.length; i++) {\n result.set(buffers[i], offset);\n offset += buffers[i].length;\n }\n channels[n] = result;\n }\n return channels;\n }\n\n /**\n * Combines parallel audio data into correct format,\n * channels[Left[], Right[]] to float32Array[LRLRLRLR...]\n */\n formatAudioData(channels) {\n if (channels.length === 1) {\n // Simple case is only one channel\n const float32Array = channels[0].slice();\n const meanValues = channels[0].slice();\n return { float32Array, meanValues };\n } else {\n const float32Array = new Float32Array(\n channels[0].length * channels.length\n );\n const meanValues = new Float32Array(channels[0].length);\n for (let i = 0; i < channels[0].length; i++) {\n const offset = i * channels.length;\n let meanValue = 0;\n for (let n = 0; n < channels.length; n++) {\n float32Array[offset + n] = channels[n][i];\n meanValue += channels[n][i];\n }\n meanValues[i] = meanValue / channels.length;\n }\n return { float32Array, meanValues };\n }\n }\n\n /**\n * Converts 32-bit float data to 16-bit integers\n */\n floatTo16BitPCM(float32Array) {\n const buffer = new ArrayBuffer(float32Array.length * 2);\n const view = new DataView(buffer);\n let offset = 0;\n for (let i = 0; i < float32Array.length; i++, offset += 2) {\n let s = Math.max(-1, Math.min(1, float32Array[i]));\n view.setInt16(offset, s < 0 ? s * 0x8000 : s * 0x7fff, true);\n }\n return buffer;\n }\n\n /**\n * Retrieves the most recent amplitude values from the audio stream\n * @param {number} channel\n */\n getValues(channel = -1) {\n const channels = this.readChannelData(this.chunks, channel);\n const { meanValues } = this.formatAudioData(channels);\n return { meanValues, channels };\n }\n\n /**\n * Exports chunks as an audio/wav file\n */\n export() {\n const channels = this.readChannelData(this.chunks);\n const { float32Array, meanValues } = this.formatAudioData(channels);\n const audioData = this.floatTo16BitPCM(float32Array);\n return {\n meanValues: meanValues,\n audio: {\n bitsPerSample: 16,\n channels: channels,\n data: audioData,\n },\n };\n }\n\n receive(e) {\n const { event, id } = e.data;\n let receiptData = {};\n switch (event) {\n case 'start':\n this.recording = true;\n break;\n case 'stop':\n this.recording = false;\n break;\n case 'clear':\n this.initialize();\n break;\n case 'export':\n receiptData = this.export();\n break;\n case 'read':\n receiptData = this.getValues();\n break;\n default:\n break;\n }\n // Always send back receipt\n this.port.postMessage({ event: 'receipt', id, data: receiptData });\n }\n\n sendChunk(chunk) {\n const channels = this.readChannelData([chunk]);\n const { float32Array, meanValues } = this.formatAudioData(channels);\n const rawAudioData = this.floatTo16BitPCM(float32Array);\n const monoAudioData = this.floatTo16BitPCM(meanValues);\n this.port.postMessage({\n event: 'chunk',\n data: {\n mono: monoAudioData,\n raw: rawAudioData,\n },\n });\n }\n\n process(inputList, outputList, parameters) {\n // Copy input to output (e.g. speakers)\n // Note that this creates choppy sounds with Mac products\n const sourceLimit = Math.min(inputList.length, outputList.length);\n for (let inputNum = 0; inputNum < sourceLimit; inputNum++) {\n const input = inputList[inputNum];\n const output = outputList[inputNum];\n const channelCount = Math.min(input.length, output.length);\n for (let channelNum = 0; channelNum < channelCount; channelNum++) {\n input[channelNum].forEach((sample, i) => {\n output[channelNum][i] = sample;\n });\n }\n }\n const inputs = inputList[0];\n // There's latency at the beginning of a stream before recording starts\n // Make sure we actually receive audio data before we start storing chunks\n let sliceIndex = 0;\n if (!this.foundAudio) {\n for (const channel of inputs) {\n sliceIndex = 0; // reset for each channel\n if (this.foundAudio) {\n break;\n }\n if (channel) {\n for (const value of channel) {\n if (value !== 0) {\n // find only one non-zero entry in any channel\n this.foundAudio = true;\n break;\n } else {\n sliceIndex++;\n }\n }\n }\n }\n }\n if (inputs && inputs[0] && this.foundAudio && this.recording) {\n // We need to copy the TypedArray, because the `process`\n // internals will reuse the same buffer to hold each input\n const chunk = inputs.map((input) => input.slice(sliceIndex));\n this.chunks.push(chunk);\n this.sendChunk(chunk);\n }\n return true;\n }\n}\n\nregisterProcessor('audio_processor', AudioProcessor);\n",ea=new Blob([er],{type:"application/javascript"}),eo=URL.createObjectURL(ea),es=eo;var ei=/*#__PURE__*/function(){function e(){var t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},n=t.sampleRate,r=n===void 0?24e3:n,a=t.outputToSpeakers,o=a===void 0?!1:a,i=t.debug,u=i===void 0?!1:i;s(this,e);this.scriptSrc=es,this.sampleRate=r,this.outputToSpeakers=o,this.debug=!!u,this._deviceChangeCallback=null,this._devices=[],this.stream=null,this.processor=null,this.source=null,this.node=null,this.recording=!1,this._lastEventId=0,this.eventReceipts={},this.eventTimeout=5e3,this._chunkProcessor=function(){},this._chunkProcessorSize=void 0,this._chunkProcessorBuffer={raw:new ArrayBuffer(0),mono:new ArrayBuffer(0)}}c(e,[{key:"log",value:function e(){return this.debug&&this.log.apply(this,arguments),!0}},{key:"getSampleRate",value:function e(){return this.sampleRate}},{key:"getStatus",value:function e(){return this.processor?this.recording?"recording":"paused":"ended"}},{key:"_event",value:function e(e){var t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:null;var r=this;return o(function(){var a,o,s;return D(this,function(i){switch(i.label){case 0:if(n=n||r.processor,!n)throw new Error("Can not send events without recording first");a={event:e,id:r._lastEventId++,data:t};n.port.postMessage(a);o=new Date().valueOf();i.label=1;case 1:if(!!r.eventReceipts[a.id])return[3,4];if(new Date().valueOf()-o>r.eventTimeout)throw new Error('Timeout waiting for "'.concat(e,'" event'));return[4,new Promise(function(e){return setTimeout(function(){return e(!0)},1)})];case 2:i.sent();i.label=3;case 3:return[3,1];case 4:s=r.eventReceipts[a.id];return[2,(delete r.eventReceipts[a.id],s)]}})})()}},{key:"listenForDeviceChange",value:function e(e){if(e===null&&this._deviceChangeCallback)navigator.mediaDevices.removeEventListener("devicechange",this._deviceChangeCallback),this._deviceChangeCallback=null;else if(e!==null){var t=this;var n=0,r=[],a=function(e){return e.map(function(e){return e.deviceId}).sort().join(",")},s=function(){var s=o(function(){var o,s;return D(this,function(i){switch(i.label){case 0:o=++n;return[4,t.listDevices()];case 1:s=i.sent();o===n&&a(r)!==a(s)&&(r=s,e(s.slice()));return[2]}})});return function e(){return s.apply(this,arguments)}}();navigator.mediaDevices.addEventListener("devicechange",s),s(),this._deviceChangeCallback=s}return!0}},{key:"requestPermission",value:function e(){return o(function(){var e,t;return D(this,function(n){switch(n.label){case 0:return[4,navigator.permissions.query({name:"microphone"})];case 1:e=n.sent();if(!(e.state==="denied"))return[3,2];window.alert("You must grant microphone access to use this feature.");return[3,6];case 2:if(!(e.state==="prompt"))return[3,6];n.label=3;case 3:n.trys.push([3,5,,6]);return[4,navigator.mediaDevices.getUserMedia({audio:!0})];case 4:n.sent().getTracks().forEach(function(e){return e.stop()});return[3,6];case 5:t=n.sent();window.alert("You must grant microphone access to use this feature.");return[3,6];case 6:return[2,!0]}})})()}},{key:"listDevices",value:function e(){var e=this;return o(function(){var t,n,r,a,o;return D(this,function(s){switch(s.label){case 0:if(!navigator.mediaDevices||!("enumerateDevices"in navigator.mediaDevices))throw new Error("Could not request user devices");return[4,e.requestPermission()];case 1:s.sent();return[4,navigator.mediaDevices.enumerateDevices()];case 2:t=s.sent().filter(function(e){return e.kind==="audioinput"}),n=t.findIndex(function(e){return e.deviceId==="default"}),r=[];if(n!==-1){a=t.splice(n,1)[0],o=t.findIndex(function(e){return e.groupId===a.groupId});o!==-1&&(a=t.splice(o,1)[0]),a.default=!0,r.push(a)}return[2,r.concat(t)]}})})()}},{key:"begin",value:function e(e){var t=this;return o(function(){var n,r,a,o,s,i,u,c;return D(this,function(l){switch(l.label){case 0:if(t.processor)throw new Error("Already connected: please call .end() to start a new session");if(!navigator.mediaDevices||!("getUserMedia"in navigator.mediaDevices))throw new Error("Could not request user media");l.label=1;case 1:l.trys.push([1,3,,4]);n={audio:!0};e&&(n.audio={deviceId:{exact:e}});return[4,navigator.mediaDevices.getUserMedia(n)];case 2:t.stream=l.sent();return[3,4];case 3:r=l.sent();throw new Error("Could not start media stream");case 4:a=new AudioContext({sampleRate:t.sampleRate}),o=a.createMediaStreamSource(t.stream);l.label=5;case 5:l.trys.push([5,7,,8]);return[4,a.audioWorklet.addModule(t.scriptSrc)];case 6:l.sent();return[3,8];case 7:s=l.sent();throw console.error(s),new Error("Could not add audioWorklet module: ".concat(t.scriptSrc));case 8:i=new AudioWorkletNode(a,"audio_processor");i.port.onmessage=function(e){var n=e.data,r=n.event,a=n.id,o=n.data;if(r==="receipt")t.eventReceipts[a]=o;else if(r==="chunk")if(t._chunkProcessorSize){var s=t._chunkProcessorBuffer;t._chunkProcessorBuffer={raw:en.mergeBuffers(s.raw,o.raw),mono:en.mergeBuffers(s.mono,o.mono)},t._chunkProcessorBuffer.mono.byteLength>=t._chunkProcessorSize&&(t._chunkProcessor(t._chunkProcessorBuffer),t._chunkProcessorBuffer={raw:new ArrayBuffer(0),mono:new ArrayBuffer(0)})}else t._chunkProcessor(o)};u=o.connect(i),c=a.createAnalyser();return[2,(c.fftSize=8192,c.smoothingTimeConstant=.1,u.connect(c),t.outputToSpeakers&&(console.warn("Warning: Output to speakers may affect sound quality,\nespecially due to system audio feedback preventative measures.\nuse only for debugging"),c.connect(a.destination)),t.source=o,t.node=u,t.analyser=c,t.processor=i,!0)]}})})()}},{key:"getFrequencies",value:function e(){var e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:"frequency",t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:-100,n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:-30;if(!this.processor)throw new Error("Session ended: please call .begin() first");return et.getFrequencies(this.analyser,this.sampleRate,null,e,t,n)}},{key:"pause",value:function e(){var e=this;return o(function(){return D(this,function(t){switch(t.label){case 0:if(e.processor){if(!e.recording)throw new Error("Already paused: please call .record() first")}else throw new Error("Session ended: please call .begin() first");e._chunkProcessorBuffer.raw.byteLength&&e._chunkProcessor(e._chunkProcessorBuffer),e.log("Pausing ...");return[4,e._event("stop")];case 1:return[2,(t.sent(),e.recording=!1,!0)]}})})()}},{key:"record",value:function e(){var e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:function(){},t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:8192;var n=this;return o(function(){return D(this,function(r){switch(r.label){case 0:if(n.processor){if(n.recording)throw new Error("Already recording: please call .pause() first");if(typeof e!="function")throw new Error("chunkProcessor must be a function")}else throw new Error("Session ended: please call .begin() first");n._chunkProcessor=e,n._chunkProcessorSize=t,n._chunkProcessorBuffer={raw:new ArrayBuffer(0),mono:new ArrayBuffer(0)},n.log("Recording ...");return[4,n._event("start")];case 1:return[2,(r.sent(),n.recording=!0,!0)]}})})()}},{key:"clear",value:function e(){var e=this;return o(function(){return D(this,function(t){switch(t.label){case 0:if(!e.processor)throw new Error("Session ended: please call .begin() first");return[4,e._event("clear")];case 1:return[2,(t.sent(),!0)]}})})()}},{key:"read",value:function e(){var e=this;return o(function(){return D(this,function(t){switch(t.label){case 0:if(!e.processor)throw new Error("Session ended: please call .begin() first");e.log("Reading ...");return[4,e._event("read")];case 1:return[2,t.sent()]}})})()}},{key:"save",value:function e(){var e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:!1;var t=this;return o(function(){var n;return D(this,function(r){switch(r.label){case 0:if(!t.processor)throw new Error("Session ended: please call .begin() first");if(!e&&t.recording)throw new Error("Currently recording: please call .pause() first, or call .save(true) to force");t.log("Exporting ...");return[4,t._event("export")];case 1:n=r.sent();return[2,new en().pack(t.sampleRate,n.audio)]}})})()}},{key:"end",value:function e(){var e=this;return o(function(){var t,n;return D(this,function(r){switch(r.label){case 0:if(!e.processor)throw new Error("Session ended: please call .begin() first");t=e.processor;e.log("Stopping ...");return[4,e._event("stop")];case 1:r.sent(),e.recording=!1,e.stream.getTracks().forEach(function(e){return e.stop()}),e.log("Exporting ...");return[4,e._event("export",{},t)];case 2:n=r.sent();return[2,(e.processor.disconnect(),e.source.disconnect(),e.node.disconnect(),e.analyser.disconnect(),e.stream=null,e.processor=null,e.source=null,e.node=null,new en().pack(e.sampleRate,n.audio))]}})})()}},{key:"quit",value:function e(){var e=this;return o(function(){var t;return D(this,function(n){switch(n.label){case 0:e.listenForDeviceChange(null);t=e.processor;if(!t)return[3,2];return[4,e.end()];case 1:t=n.sent();n.label=2;case 2:return[2,(t,!0)]}})})()}}],[{key:"decode",value:function e(e){var t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:24e3,n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:-1;return o(function(){var r,a,o,s,i,u,c,l,f,d;return D(this,function(h){switch(h.label){case 0:r=new AudioContext({sampleRate:t});if(!p(e,Blob))return[3,2];if(n!==-1)throw new Error('Can not specify "fromSampleRate" when reading from Blob');o=e;return[4,o.arrayBuffer()];case 1:a=h.sent();return[3,5];case 2:if(!p(e,ArrayBuffer))return[3,3];if(n!==-1)throw new Error('Can not specify "fromSampleRate" when reading from ArrayBuffer');a=e,o=new Blob([a],{type:"audio/wav"});return[3,5];case 3:if(p(e,Int16Array)){i=e,s=new Float32Array(e.length);for(u=0;u<e.length;u++)s[u]=e[u]/32768}else if(p(e,Float32Array))s=e;else if(p(e,Array))s=new Float32Array(e);else throw new Error('"audioData" must be one of: Blob, Float32Arrray, Int16Array, ArrayBuffer, Array<number>');if(n===-1)throw new Error('Must specify "fromSampleRate" when reading from Float32Array, In16Array or Array');if(n<3e3)throw new Error('Minimum "fromSampleRate" is 3000 (3kHz)');i||(i=en.floatTo16BitPCM(s));c={bitsPerSample:16,channels:[s],data:i};o=new en().pack(n,c).blob;return[4,o.arrayBuffer()];case 4:a=h.sent();h.label=5;case 5:return[4,r.decodeAudioData(a)];case 6:l=h.sent(),f=l.getChannelData(0),d=URL.createObjectURL(o);return[2,{blob:o,url:d,values:f,audioBuffer:l}]}})})()}}]);return e}();globalThis.WavRecorder=ei;var eu="\nclass StreamProcessor extends AudioWorkletProcessor {\n constructor() {\n super();\n this.hasStarted = false;\n this.hasInterrupted = false;\n this.outputBuffers = [];\n this.bufferLength = 128;\n this.write = { buffer: new Float32Array(this.bufferLength), trackId: null };\n this.writeOffset = 0;\n this.trackSampleOffsets = {};\n this.port.onmessage = (event) => {\n if (event.data) {\n const payload = event.data;\n if (payload.event === 'write') {\n const int16Array = payload.buffer;\n const float32Array = new Float32Array(int16Array.length);\n for (let i = 0; i < int16Array.length; i++) {\n float32Array[i] = int16Array[i] / 0x8000; // Convert Int16 to Float32\n }\n this.writeData(float32Array, payload.trackId);\n } else if (\n payload.event === 'offset' ||\n payload.event === 'interrupt'\n ) {\n const requestId = payload.requestId;\n const trackId = this.write.trackId;\n const offset = this.trackSampleOffsets[trackId] || 0;\n this.port.postMessage({\n event: 'offset',\n requestId,\n trackId,\n offset,\n });\n if (payload.event === 'interrupt') {\n this.hasInterrupted = true;\n }\n } else {\n throw new Error(`Unhandled event \"${payload.event}\"`);\n }\n }\n };\n }\n\n writeData(float32Array, trackId = null) {\n let { buffer } = this.write;\n let offset = this.writeOffset;\n for (let i = 0; i < float32Array.length; i++) {\n buffer[offset++] = float32Array[i];\n if (offset >= buffer.length) {\n this.outputBuffers.push(this.write);\n this.write = { buffer: new Float32Array(this.bufferLength), trackId };\n buffer = this.write.buffer;\n offset = 0;\n }\n }\n this.writeOffset = offset;\n return true;\n }\n\n process(inputs, outputs, parameters) {\n const output = outputs[0];\n const outputChannelData = output[0];\n const outputBuffers = this.outputBuffers;\n if (this.hasInterrupted) {\n this.port.postMessage({ event: 'stop' });\n return false;\n } else if (outputBuffers.length) {\n this.hasStarted = true;\n const { buffer, trackId } = outputBuffers.shift();\n for (let i = 0; i < outputChannelData.length; i++) {\n outputChannelData[i] = buffer[i] || 0;\n }\n if (trackId) {\n this.trackSampleOffsets[trackId] =\n this.trackSampleOffsets[trackId] || 0;\n this.trackSampleOffsets[trackId] += buffer.length;\n }\n return true;\n } else if (this.hasStarted) {\n this.port.postMessage({ event: 'stop' });\n return false;\n } else {\n return true;\n }\n }\n}\n\nregisterProcessor('stream_processor', StreamProcessor);\n",ec=new Blob([eu],{type:"application/javascript"}),el=URL.createObjectURL(ec),ef=el;var ed=/*#__PURE__*/function(){function e(){var t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},n=t.sampleRate,r=n===void 0?24e3:n,a=t.onStop;s(this,e);this.scriptSrc=ef,this.onStop=a,this.sampleRate=r,this.context=null,this.stream=null,this.analyser=null,this.trackSampleOffsets={},this.interruptedTrackIds={}}c(e,[{key:"connect",value:function e(){var e=this;return o(function(){var t,n,r;return D(this,function(a){switch(a.label){case 0:e.context=new AudioContext({sampleRate:e.sampleRate});t=e.context.state==="suspended";if(!t)return[3,2];return[4,e.context.resume()];case 1:t=a.sent();a.label=2;case 2:t;a.label=3;case 3:a.trys.push([3,5,,6]);return[4,e.context.audioWorklet.addModule(e.scriptSrc)];case 4:a.sent();return[3,6];case 5:n=a.sent();throw console.error(n),new Error("Could not add audioWorklet module: ".concat(e.scriptSrc));case 6:r=e.context.createAnalyser();return[2,(r.fftSize=8192,r.smoothingTimeConstant=.1,e.analyser=r,!0)]}})})()}},{key:"getFrequencies",value:function e(){var e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:"frequency",t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:-100,n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:-30;if(!this.analyser)throw new Error("Not connected, please call .connect() first");return et.getFrequencies(this.analyser,this.sampleRate,null,e,t,n)}},{key:"_start",value:function e(){var e=this;var t=new AudioWorkletNode(this.context,"stream_processor");return t.connect(this.context.destination),t.port.onmessage=function(n){var r,a;var o=n.data,s=o.event;if(s==="stop")(r=(a=e).onStop)===null||r===void 0?void 0:r.call(a),t.disconnect(),e.stream=null;else if(s==="offset"){var i=n.data,u=i.requestId,c=i.trackId,l=i.offset,f=l/e.sampleRate;e.trackSampleOffsets[u]={trackId:c,offset:l,currentTime:f}}},this.analyser.disconnect(),t.connect(this.analyser),this.stream=t,!0}},{key:"add16BitPCM",value:function e(e){var t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:"default";if(typeof t!="string")throw new Error("trackId must be a string");if(this.interruptedTrackIds[t])return;this.stream||this._start();var n;if(p(e,Int16Array))n=e;else if(p(e,ArrayBuffer))n=new Int16Array(e);else throw new Error("argument must be Int16Array or ArrayBuffer");return this.stream.port.postMessage({event:"write",buffer:n,trackId:t}),n}},{key:"getTrackSampleOffset",value:function e(){var e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:!1;var t=this;return o(function(){var n,r,a;return D(this,function(o){switch(o.label){case 0:if(!t.stream)return[2,null];n=crypto.randomUUID();t.stream.port.postMessage({event:e?"interrupt":"offset",requestId:n});o.label=1;case 1:if(!!r)return[3,4];r=t.trackSampleOffsets[n];return[4,new Promise(function(e){return setTimeout(function(){return e()},1)})];case 2:o.sent();o.label=3;case 3:return[3,1];case 4:a=r.trackId;return[2,(e&&a&&(t.interruptedTrackIds[a]=!0),r)]}})})()}},{key:"interrupt",value:function e(){var e=this;return o(function(){return D(this,function(t){return[2,e.getTrackSampleOffset(!0)]})})()}}]);return e}();globalThis.WavStreamPlayer=ed;var eh=O.atom({key:"ThreadIdToResume",default:void 0}),ep=O.atom({key:"ResumeThreadErrorState",default:void 0}),ev=O.atom({key:"ChatProfile",default:void 0}),em=O.atom({key:"SessionId",default:B.v4()}),ey=O.selector({key:"SessionIdSelector",get:function(e){var t=e.get;return t(em)},set:function(e,t){var n=e.set;return n(em,p(t,O.DefaultValue)?B.v4():t)}}),eg=O.atom({key:"Session",dangerouslyAllowMutability:!0,default:void 0}),ek=O.atom({key:"Actions",default:[]}),ew=O.atom({key:"Messages",dangerouslyAllowMutability:!0,default:[]}),eb=O.atom({key:"Commands",default:[]}),eS=O.atom({key:"Modes",default:[]}),eA=O.atom({key:"TokenCount",default:0}),eR=O.atom({key:"Loading",default:!1}),eC=O.atom({key:"AskUser",default:void 0}),ex=O.atom({key:"WavRecorder",dangerouslyAllowMutability:!0,default:new ei}),eI=O.atom({key:"WavStreamPlayer",dangerouslyAllowMutability:!0,default:new ed}),e_=O.atom({key:"AudioConnection",default:"off"}),eE=O.atom({key:"isAiSpeaking",default:!1}),eP=O.atom({key:"CallFn",default:void 0}),eT=O.atom({key:"ChatSettings",default:[]}),eM=O.selector({key:"ChatSettingsValue/Default",get:function(e){var t=e.get;var n=t(eT),r=function(e,t){return Array.isArray(e)&&e.forEach(function(e){e&&(Array.isArray(e===null||e===void 0?void 0:e.inputs)&&e.inputs.length>0?r(e.inputs,t):(e===null||e===void 0?void 0:e.id)!==void 0&&(t[e.id]=e.initial))}),t};return r(n,{})}}),eD=O.atom({key:"ChatSettingsValue",default:eM}),eO=O.atom({key:"DisplayElements",default:[]}),ej=O.atom({key:"TasklistElements",default:[]}),eB=O.atom({key:"FirstUserInteraction",default:void 0}),eL=O.atom({key:"User",default:void 0}),eF=O.atom({key:"ChainlitConfig",default:void 0}),eV=O.atom({key:"AuthConfig",default:void 0}),eU=O.atom({key:"ThreadHistory",default:{threads:void 0,currentThreadId:void 0,timeGroupedThreads:void 0,pageInfo:void 0},effects:[function(e){var t=e.setSelf,n=e.onSet;n(function(e,n){var r=e===null||e===void 0?void 0:e.timeGroupedThreads;(e===null||e===void 0?void 0:e.threads)&&!j.isEqual(e.threads,n===null||n===void 0?void 0:n.timeGroupedThreads)&&(r=z(e.threads)),t(A(b({},e),{timeGroupedThreads:r}))})}]}),eq=O.atom({key:"SideView",default:void 0}),eN=O.atom({key:"CurrentThreadId",default:void 0}),eW=function(e){return function(t){var n=t.setSelf,r=t.onSet;var a=localStorage.getItem(e);if(a!=null)try{n(JSON.parse(a))}catch(t){console.error('Error parsing localStorage value for key "'.concat(e,'":'),t)}r(function(t,n,r){r?localStorage.removeItem(e):localStorage.setItem(e,JSON.stringify(t))})}},ez=O.atom({key:"Mcp",default:[],effects:[eW("mcp_storage_key")]});var eH=function(){var e=O.useRecoilValue(eR),t=O.useRecoilValue(eO),n=O.useRecoilValue(ej),r=O.useRecoilValue(ek),a=O.useRecoilValue(eg),o=O.useRecoilValue(eC),s=O.useRecoilValue(eP),i=O.useRecoilValue(eT),u=O.useRecoilValue(eD),c=O.useRecoilValue(eM),l=(a===null||a===void 0?void 0:a.socket.connected)&&!(a===null||a===void 0?void 0:a.error),f=!l||e||(o===null||o===void 0?void 0:o.spec.type)==="file"||(o===null||o===void 0?void 0:o.spec.type)==="action"||(o===null||o===void 0?void 0:o.spec.type)==="element";return{actions:r,askUser:o,callFn:s,chatSettingsDefaultValue:c,chatSettingsInputs:i,chatSettingsValue:u,connected:l,disabled:f,elements:t,error:a===null||a===void 0?void 0:a.error,loading:e,tasklists:n}};var eG=function(e){var t=[];var n=true,r=false,a=undefined;try{for(var o=e[Symbol.iterator](),s;!(n=(s=o.next()).done);n=true){var i=s.value;t=eK(t,i)}}catch(e){r=true;a=e}finally{try{if(!n&&o.return!=null){o.return()}}finally{if(r){throw a}}}return t},eJ=function(e,t){if(e.length-1===t)return!0;for(var n=t+1;n<e.length;n++)if(!e[n].streaming)return!1;return!0},eK=function(e,t){return eX(e,t.id)?eZ(e,t.id,t):"parentId"in t&&t.parentId?eQ(e,t.parentId,t):"indent"in t&&t.indent&&t.indent>0?e$(e,t.indent,t):I(e).concat([t])},e$=function(e,t,n){var r=arguments.length>3&&arguments[3]!==void 0?arguments[3]:0;if(e.length===0)return[n];var a=e.length-1,o=e[a],s=o.steps||[];if(r+1===t){var i=A(b({},o),{steps:I(s).concat([n])}),u=I(e);return u[a]=i,u}else{var c=e$(s,t,n,r+1);if(c===s)return e;var l=I(e);return l[a]=A(b({},o),{steps:c}),l}},eQ=function(e,t,n){var r=!1,a=e.map(function(a){if(j.isEqual(a.id,t))return r=!0,A(b({},a),{steps:a.steps?I(a.steps).concat([n]):[n]});if(eX(e,t)&&a.steps){var o=eQ(a.steps,t,n);if(o!==a.steps)return r=!0,A(b({},a),{steps:o})}return a});return r?a:e},eY=function(e,t){var n=true,r=false,a=undefined;try{for(var o=e[Symbol.iterator](),s;!(n=(s=o.next()).done);n=true){var i=s.value;if(j.isEqual(i.id,t))return i;if(i.steps&&i.steps.length>0){var u=eY(i.steps,t);if(u)return u}}}catch(e){r=true;a=e}finally{try{if(!n&&o.return!=null){o.return()}}finally{if(r){throw a}}}},eX=function(e,t){return eY(e,t)!==void 0},eZ=function(e,t,n){var r=!1,a=e.map(function(e){if(j.isEqual(e.id,t))return r=!0,b({},e,n);if(e.steps){var a=eZ(e.steps,t,n);if(a!==e.steps)return r=!0,A(b({},e),{steps:a})}return e});return r?a:e},e0=function(e,t){var n=!1,r=e.reduce(function(e,r){if(r.id===t)return n=!0,e;if(r.steps){var a=e0(r.steps,t);if(a!==r.steps)return n=!0,e.push(A(b({},r),{steps:a})),e}return e.push(r),e},[]);return n?r:e},e1=function(e,t,n,r,a){var o=!1,s=e.map(function(e){if(j.isEqual(e.id,t)){o=!0;var s=b({},e);return"content"in s&&s.content!==void 0?r?s.content=n:s.content+=n:a?"input"in s&&s.input!==void 0&&(r?s.input=n:s.input+=n):"output"in s&&s.output!==void 0&&(r?s.output=n:s.output+=n),s}else if(e.steps){var i=e1(e.steps,t,n,r,a);if(i!==e.steps)return o=!0,A(b({},e),{steps:i})}return e});return o?s:e};var e2=function(){var e=x(O.useRecoilState(eV),2),t=e[0],n=e[1],r=x(O.useRecoilState(eL),2),a=r[0],o=r[1],s=O.useSetRecoilState(eU);return{authConfig:t,setAuthConfig:n,user:a,setUser:o,setThreadHistory:s}};var e3=function(){var e=o(function(e,t){var n;return D(this,function(r){switch(r.label){case 0:return[4,e.get(t)];case 1:return[2,(n=r.sent())===null||n===void 0?void 0:n.json()]}})});return function t(t,n){return e.apply(this,arguments)}}(),e4=function(e){var t=new tn("","webapp");return Object.assign(t,e),t};function e6(e){var t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};var n=f({},w(t));var r=L.useContext(ta),a=e2(),o=a.setUser,s=L.useMemo(function(){return function(e){var t=x(e,1),a=t[0];n.onErrorRetry||(n.onErrorRetry=function(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++){t[n]=arguments[n]}var r;var a=x(t,1),s=a[0];if(s.status===401){o(null);return}return(r=F.SWRConfig.defaultValue).onErrorRetry.apply(r,I(t))});var s=e4(r);return s.on401=s.onError=void 0,e3(s,a)}},[r]),i=L.useMemo(function(){return e?[e]:null},[e]);return N.default(i,s,n)}var e8=function(){var e=e2(),t=e.authConfig,n=e.setAuthConfig,r=e6(t?null:"/auth/config"),a=r.data,o=r.isLoading;return L.useEffect(function(){a&&n(a)},[a,n]),{authConfig:t,isLoading:o}};var e5=function(){var e=L.useContext(ta),t=e2(),n=t.setUser,r=t.setThreadHistory;return{logout:/*#__PURE__*/o(function(){var t;var a=arguments;return D(this,function(o){switch(o.label){case 0:t=a.length>0&&a[0]!==void 0?a[0]:!1;return[4,e.logout()];case 1:o.sent(),n(void 0),r(void 0),t&&window.location.reload();return[2]}})})}};var e7=function(){var e=e2(),t=e.user,n=e.setUser,r=e6("/user"),a=r.data,o=r.error,s=r.mutate;return L.useEffect(function(){a&&n(a)},[a,n]),L.useEffect(function(){o&&n(null)},[o]),{user:t,setUserFromAPI:s}};var e9=function(){var e=e8(),t=e.authConfig,n=e5(),r=n.logout,a=e7(),o=a.user,s=a.setUserFromAPI,i=!!t&&(!t.requireLogin||o!==void 0);return t&&!t.requireLogin?{data:t,user:null,isReady:i,isAuthenticated:!0,logout:function(){return Promise.resolve()},setUserFromAPI:function(){return Promise.resolve()}}:{data:t,user:o,isReady:i,isAuthenticated:!!o,logout:r,setUserFromAPI:s}};var te=/*#__PURE__*/function(e){h(n,e);var t=M(n);function n(e,r,a){s(this,n);var o;o=t.call(this,e);o.status=r,o.detail=a;return o}c(n,[{key:"toString",value:function e(){return this.detail?"".concat(this.message,": ").concat(this.detail):this.message}}]);return n}(P(Error)),tt=/*#__PURE__*/function(){function e(t,n,r,a,o){s(this,e);this.httpEndpoint=t;this.type=n;this.additionalQueryParams=r;this.on401=a;this.onError=o}c(e,[{key:"buildEndpoint",value:function e(e){var t="".concat(this.httpEndpoint).concat(e);this.httpEndpoint.endsWith("/")&&(t="".concat(this.httpEndpoint.slice(0,-1)).concat(e));var n=new URL(t);if(this.additionalQueryParams){var r=new URLSearchParams(this.additionalQueryParams),a=n.search?"&":"?";n.search=n.search+"".concat(a).concat(r.toString())}return n.toString()}},{key:"getDetailFromErrorResponse",value:function e(e){return o(function(){var t,n;return D(this,function(r){switch(r.label){case 0:r.trys.push([0,2,,3]);return[4,e.json()];case 1:return[2,(t=r.sent())===null||t===void 0?void 0:t.detail];case 2:n=r.sent();console.error("Unable to parse error response",n);return[3,3];case 3:return[2]}})})()}},{key:"handleRequestError",value:function e(e){p(e,te)&&(e.status===401&&this.on401&&this.on401(),this.onError&&this.onError(e)),console.error(e)}},{key:"fetch",value:function e(e,t,n,r){var a=arguments.length>4&&arguments[4]!==void 0?arguments[4]:{};var s=this;return o(function(){var o,i,u,c;return D(this,function(l){switch(l.label){case 0:l.trys.push([0,4,,5]);p(n,FormData)?o=n:(a["Content-Type"]="application/json",o=n?JSON.stringify(n):null);return[4,fetch(s.buildEndpoint(t),{method:e,credentials:"include",headers:a,signal:r,body:o})];case 1:i=l.sent();if(!!i.ok)return[3,3];return[4,s.getDetailFromErrorResponse(i)];case 2:u=l.sent();throw new te(i.statusText,i.status,u);case 3:return[2,i];case 4:c=l.sent();throw s.handleRequestError(c),c;case 5:return[2]}})})()}},{key:"get",value:function e(e){var t=this;return o(function(){return D(this,function(n){switch(n.label){case 0:return[4,t.fetch("GET",e)];case 1:return[2,n.sent()]}})})()}},{key:"post",value:function e(e,t,n){var r=this;return o(function(){return D(this,function(a){switch(a.label){case 0:return[4,r.fetch("POST",e,t,n)];case 1:return[2,a.sent()]}})})()}},{key:"put",value:function e(e,t){var n=this;return o(function(){return D(this,function(r){switch(r.label){case 0:return[4,n.fetch("PUT",e,t)];case 1:return[2,r.sent()]}})})()}},{key:"patch",value:function e(e,t){var n=this;return o(function(){return D(this,function(r){switch(r.label){case 0:return[4,n.fetch("PATCH",e,t)];case 1:return[2,r.sent()]}})})()}},{key:"delete",value:function e(e,t){var n=this;return o(function(){return D(this,function(r){switch(r.label){case 0:return[4,n.fetch("DELETE",e,t)];case 1:return[2,r.sent()]}})})()}}]);return e}(),tn=/*#__PURE__*/function(e){h(n,e);var t=M(n);function n(){s(this,n);return t.apply(this,arguments)}c(n,[{key:"headerAuth",value:function e(){var e=this;return o(function(){return D(this,function(t){switch(t.label){case 0:return[4,e.post("/auth/header",{})];case 1:return[2,t.sent().json()]}})})()}},{key:"jwtAuth",value:function e(e){var t=this;return o(function(){return D(this,function(n){switch(n.label){case 0:return[4,t.fetch("POST","/auth/jwt",void 0,void 0,{Authorization:"Bearer ".concat(e)})];case 1:return[2,n.sent().json()]}})})()}},{key:"stickyCookie",value:function e(e){var t=this;return o(function(){return D(this,function(n){switch(n.label){case 0:return[4,t.fetch("POST","/set-session-cookie",{session_id:e})];case 1:return[2,n.sent().json()]}})})()}},{key:"passwordAuth",value:function e(e){var t=this;return o(function(){return D(this,function(n){switch(n.label){case 0:return[4,t.post("/login",e)];case 1:return[2,n.sent().json()]}})})()}},{key:"getUser",value:function e(){var e=this;return o(function(){return D(this,function(t){switch(t.label){case 0:return[4,e.get("/user")];case 1:return[2,t.sent().json()]}})})()}},{key:"logout",value:function e(){var e=this;return o(function(){return D(this,function(t){switch(t.label){case 0:return[4,e.post("/logout",{})];case 1:return[2,t.sent().json()]}})})()}},{key:"setFeedback",value:function e(e,t){var n=this;return o(function(){return D(this,function(r){switch(r.label){case 0:return[4,n.put("/feedback",{feedback:e,sessionId:t})];case 1:return[2,r.sent().json()]}})})()}},{key:"deleteFeedback",value:function e(e){var t=this;return o(function(){return D(this,function(n){switch(n.label){case 0:return[4,t.delete("/feedback",{feedbackId:e})];case 1:return[2,n.sent().json()]}})})()}},{key:"listThreads",value:function e(e,t){var n=this;return o(function(){return D(this,function(r){switch(r.label){case 0:return[4,n.post("/project/threads",{pagination:e,filter:t})];case 1:return[2,r.sent().json()]}})})()}},{key:"renameThread",value:function e(e,t){var n=this;return o(function(){return D(this,function(r){switch(r.label){case 0:return[4,n.put("/project/thread",{threadId:e,name:t})];case 1:return[2,r.sent().json()]}})})()}},{key:"deleteThread",value:function e(e){var t=this;return o(function(){return D(this,function(n){switch(n.label){case 0:return[4,t.delete("/project/thread",{threadId:e})];case 1:return[2,n.sent().json()]}})})()}},{key:"uploadFile",value:function e(e,t,n,r){var a=this;var o=new XMLHttpRequest;o.withCredentials=!0;var s=new Promise(function(s,i){var u=new FormData;u.append("file",e);var c=r?"&ask_parent_id=".concat(r):"";o.open("POST",a.buildEndpoint("/project/file?session_id=".concat(n).concat(c)),!0),o.upload.onprogress=function(e){if(e.lengthComputable){var n=e.loaded/e.total*100;t(n)}},o.onload=function(){if(o.status===200){var e=JSON.parse(o.responseText);s(e);return}var t=o.getResponseHeader("Content-Type");if(t&&t.includes("application/json")){var n=JSON.parse(o.responseText);i(n.detail)}else i("Upload failed")},o.onerror=function(){i("Upload error")},o.send(u)});return{xhr:o,promise:s}}},{key:"callAction",value:function e(e,t){var n=this;return o(function(){return D(this,function(r){switch(r.label){case 0:return[4,n.post("/project/action",{sessionId:t,action:e})];case 1:return[2,r.sent().json()]}})})()}},{key:"updateElement",value:function e(e,t){var n=this;return o(function(){return D(this,function(r){switch(r.label){case 0:return[4,n.put("/project/element",{sessionId:t,element:e})];case 1:return[2,r.sent().json()]}})})()}},{key:"deleteElement",value:function e(e,t){var n=this;return o(function(){return D(this,function(r){switch(r.label){case 0:return[4,n.delete("/project/element",{sessionId:t,element:e})];case 1:return[2,r.sent().json()]}})})()}},{key:"connectStdioMCP",value:function e(e,t,n){var r=this;return o(function(){return D(this,function(a){switch(a.label){case 0:return[4,r.post("/mcp",{sessionId:e,name:t,fullCommand:n,clientType:"stdio"})];case 1:return[2,a.sent().json()]}})})()}},{key:"connectSseMCP",value:function e(e,t,n,r){var a=this;return o(function(){return D(this,function(o){switch(o.label){case 0:return[4,a.post("/mcp",A(b({sessionId:e,name:t,url:n},r?{headers:r}:{}),{clientType:"sse"}))];case 1:return[2,o.sent().json()]}})})()}},{key:"connectStreamableHttpMCP",value:function e(e,t,n,r){var a=this;return o(function(){return D(this,function(o){switch(o.label){case 0:return[4,a.post("/mcp",A(b({sessionId:e,name:t,url:n},r?{headers:r}:{}),{clientType:"streamable-http"}))];case 1:return[2,o.sent().json()]}})})()}},{key:"disconnectMcp",value:function e(e,t){var n=this;return o(function(){return D(this,function(r){switch(r.label){case 0:return[4,n.delete("/mcp",{sessionId:e,name:t})];case 1:return[2,r.sent().json()]}})})()}},{key:"getElementUrl",value:function e(e,t){var n="?session_id=".concat(t);return this.buildEndpoint("/project/file/".concat(e).concat(n))}},{key:"getLogoEndpoint",value:function e(e,t){return t||this.buildEndpoint("/logo?theme=".concat(e))}},{key:"getOAuthEndpoint",value:function e(e){return this.buildEndpoint("/auth/oauth/".concat(e))}},{key:"shareThread",value:function e(e,t){var n=this;return o(function(){return D(this,function(r){switch(r.label){case 0:return[4,n.put("/project/thread/share",{threadId:e,isShared:t})];case 1:return[2,r.sent().json()]}})})()}}]);return n}(tt);var tr=void 0,ta=L.createContext(new tn("http://localhost:8000","webapp"));var to=function(){var e=L.useContext(ta),t=O.useRecoilValue(eg),n=O.useRecoilValue(eC),r=O.useRecoilValue(ey),a=O.useResetRecoilState(eT),o=O.useResetRecoilState(ey),s=O.useResetRecoilState(eD),i=O.useSetRecoilState(eB),u=O.useSetRecoilState(eR),c=O.useSetRecoilState(ew),l=O.useSetRecoilState(eO),f=O.useSetRecoilState(ej),d=O.useSetRecoilState(ek),h=O.useSetRecoilState(eA),p=O.useSetRecoilState(eh),v=O.useSetRecoilState(eq),m=O.useSetRecoilState(eN),y=L.useCallback(function(){t===null||t===void 0?void 0:t.socket.emit("clear_session"),t===null||t===void 0?void 0:t.socket.disconnect(),p(void 0),o(),i(void 0),c([]),l([]),f([]),d([]),h(0),a(),s(),v(void 0),m(void 0)},[t]),g=L.useCallback(function(e){var n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:[];e.id||(e.id=B.v4()),e.createdAt||(e.createdAt=new Date().toISOString()),c(function(t){return eK(t,e)}),t===null||t===void 0?void 0:t.socket.emit("client_message",{message:e,fileReferences:n})},[t===null||t===void 0?void 0:t.socket]),k=L.useCallback(function(e){t===null||t===void 0?void 0:t.socket.emit("edit_message",{message:e})},[t===null||t===void 0?void 0:t.socket]),w=L.useCallback(function(e){t===null||t===void 0?void 0:t.socket.emit("window_message",e)},[t===null||t===void 0?void 0:t.socket]),b=L.useCallback(function(){t===null||t===void 0?void 0:t.socket.emit("audio_start")},[t===null||t===void 0?void 0:t.socket]),S=L.useCallback(function(e,n,r,a){t===null||t===void 0?void 0:t.socket.emit("audio_chunk",{isStart:e,mimeType:n,elapsedTime:r,data:a})},[t===null||t===void 0?void 0:t.socket]),A=L.useCallback(function(){t===null||t===void 0?void 0:t.socket.emit("audio_end")},[t===null||t===void 0?void 0:t.socket]),R=L.useCallback(function(e){n&&(n.parentId&&(e.parentId=n.parentId),c(function(t){return eK(t,e)}),n.callback(e))},[n]),C=L.useCallback(function(e){t===null||t===void 0?void 0:t.socket.emit("chat_settings_change",e)},[t===null||t===void 0?void 0:t.socket]),x=L.useCallback(function(){c(function(e){return e.map(function(e){return e.streaming=!1,e})}),u(!1),t===null||t===void 0?void 0:t.socket.emit("stop")},[t===null||t===void 0?void 0:t.socket]);return{uploadFile:L.useCallback(function(t,n,a){return e.uploadFile(t,n,r,a)},[r]),clear:y,replyMessage:R,sendMessage:g,editMessage:k,windowMessage:w,startAudioStream:b,sendAudioChunk:S,endAudioStream:A,stopTask:x,setIdToResume:p,updateChatSettings:C}};var ts=function(){var e=O.useRecoilValue(ew),t=O.useRecoilValue(eB);return{threadId:O.useRecoilValue(eN),messages:e,firstInteraction:t}};var ti=function(){var e=L.useContext(ta),t=O.useRecoilValue(ey),n=x(O.useRecoilState(eg),2),r=n[0],a=n[1],s=O.useSetRecoilState(eE),i=O.useSetRecoilState(e_),u=O.useResetRecoilState(eD),c=O.useSetRecoilState(eD),l=O.useSetRecoilState(eB),f=O.useSetRecoilState(eR),d=O.useSetRecoilState(ez),h=O.useRecoilValue(eI),p=O.useRecoilValue(ex),v=O.useSetRecoilState(ew),m=O.useSetRecoilState(eC),y=O.useSetRecoilState(eP),g=O.useSetRecoilState(eb),k=O.useSetRecoilState(eS),w=O.useSetRecoilState(eq),S=O.useSetRecoilState(eO),R=O.useSetRecoilState(ej),C=O.useSetRecoilState(ek),_=O.useSetRecoilState(eT),E=O.useSetRecoilState(eA),P=x(O.useRecoilState(ev),2),T=P[0],M=P[1],B=O.useRecoilValue(eh),F=O.useSetRecoilState(ep),V=x(O.useRecoilState(eN),2),q=V[0],N=V[1];L.useEffect(function(){(r===null||r===void 0?void 0:r.socket)&&(r.socket.auth.threadId=q||"")},[q]);var z=L.useCallback(function(){var n=o(function(n){var r,x,P,O,j,L,V,q,z,H;return D(this,function(G){switch(G.label){case 0:r=n.transports,x=n.userEnv;P=new URL(e.httpEndpoint),O=P.protocol,j=P.host,L=P.pathname,V="".concat(O,"//").concat(j),q=L&&L!=="/"?"".concat(L,"/ws/socket.io"):"/ws/socket.io";G.label=1;case 1:G.trys.push([1,3,,4]);return[4,e.stickyCookie(t)];case 2:G.sent();return[3,4];case 3:z=G.sent();console.error("Failed to set sticky session cookie: ".concat(z));return[3,4];case 4:H=W.default(V,{path:q,withCredentials:!0,transports:r,auth:{clientType:e.type,sessionId:t,threadId:B||"",userEnv:JSON.stringify(x),chatProfile:T?encodeURIComponent(T):""}});a(function(e){var t,n;return e===null||e===void 0?void 0:(t=e.socket)===null||t===void 0?void 0:t.removeAllListeners(),e===null||e===void 0?void 0:(n=e.socket)===null||n===void 0?void 0:n.close(),{socket:H}}),H.on("connect",function(){H.emit("connection_successful"),a(function(e){return A(b({},e),{error:!1})}),d(function(n){return n.map(function(n){var r;return n.clientType==="sse"?r=e.connectSseMCP(t,n.name,n.url):n.clientType==="streamable-http"?r=e.connectStreamableHttpMCP(t,n.name,n.url,n.headers||{}):r=e.connectStdioMCP(t,n.name,n.command),r.then(function(){var e=o(function(e){var t,n;return D(this,function(r){t=e.success,n=e.mcp;d(function(e){return e.map(function(e){return e.name===n.name?A(b({},e),{status:t?"connected":"failed",tools:n?n.tools:e.tools}):e})});return[2]})});return function(t){return e.apply(this,arguments)}}()).catch(function(){d(function(e){return e.map(function(e){return e.name===n.name?A(b({},e),{status:"failed"}):e})})}),A(b({},n),{status:"connecting"})})})}),H.on("connect_error",function(e){a(function(e){return A(b({},e),{error:!0})})}),H.on("task_start",function(){f(!0)}),H.on("task_end",function(){f(!1)}),H.on("reload",function(){H.emit("clear_session"),window.location.reload()}),H.on("audio_connection",function(){var e=o(function(e){var t,n,r;return D(this,function(a){switch(a.label){case 0:if(!(e==="on"))return[3,4];t=!0,n=Date.now(),r="pcm16";return[4,p.begin()];case 1:a.sent();return[4,h.connect()];case 2:a.sent();return[4,p.record(function(){var e=o(function(e){var a;return D(this,function(o){a=Date.now()-n;H.emit("audio_chunk",{isStart:t,mimeType:r,elapsedTime:a,data:e.mono}),t=!1;return[2]})});return function(t){return e.apply(this,arguments)}}())];case 3:a.sent(),h.onStop=function(){return s(!1)};return[3,7];case 4:return[4,p.end()];case 5:a.sent();return[4,h.interrupt()];case 6:a.sent();a.label=7;case 7:i(e);return[2]}})});return function(t){return e.apply(this,arguments)}}()),H.on("audio_chunk",function(e){h.add16BitPCM(e.data,e.track),s(!0)}),H.on("audio_interrupt",function(){h.interrupt()}),H.on("resume_thread",function(e){var t,n,r,a,o;var s=!!(e===null||e===void 0?void 0:(t=e.metadata)===null||t===void 0?void 0:t.viewer_read_only);!s&&B&&e.id!==B&&(window.location.href="/thread/".concat(e.id)),!s&&B&&N(e.id);var i=[];var u=true,l=false,f=undefined;try{for(var d=e.steps[Symbol.iterator](),h;!(u=(h=d.next()).done);u=true){var p=h.value;i=eK(i,p)}}catch(e){l=true;f=e}finally{try{if(!u&&d.return!=null){d.return()}}finally{if(l){throw f}}}((n=e.metadata)===null||n===void 0?void 0:n.chat_profile)&&M((r=e.metadata)===null||r===void 0?void 0:r.chat_profile),((a=e.metadata)===null||a===void 0?void 0:a.chat_settings)&&c((o=e.metadata)===null||o===void 0?void 0:o.chat_settings),v(i);var m=e.elements||[];R(m.filter(function(e){return e.type==="tasklist"})),S(m.filter(function(e){return["avatar","tasklist"].indexOf(e.type)===-1}))}),H.on("resume_thread_error",function(e){F(e)}),H.on("new_message",function(e){v(function(t){return eK(t,e)})}),H.on("first_interaction",function(e){l(e.interaction),N(e.thread_id)}),H.on("update_message",function(e){v(function(t){return eZ(t,e.id,e)})}),H.on("delete_message",function(e){v(function(t){return e0(t,e.id)})}),H.on("stream_start",function(e){v(function(t){return eK(t,e)})}),H.on("stream_token",function(e){var t=e.id,n=e.token,r=e.isSequence,a=e.isInput;v(function(e){return e1(e,t,n,r,a)})}),H.on("ask",function(e,t){var n=e.msg,r=e.spec;m({spec:r,callback:t,parentId:n.parentId}),v(function(e){return eK(e,n)}),f(!1)}),H.on("ask_timeout",function(){m(void 0),f(!1)}),H.on("clear_ask",function(){m(void 0)}),H.on("call_fn",function(e,t){var n=e.name,r=e.args;y({name:n,args:r,callback:t})}),H.on("clear_call_fn",function(){y(void 0)}),H.on("call_fn_timeout",function(){y(void 0)}),H.on("chat_settings",function(e){_(e),u()}),H.on("set_commands",function(e){g(e)}),H.on("set_modes",function(e){k(e)}),H.on("set_sidebar_title",function(e){w(function(t){return(t===null||t===void 0?void 0:t.title)===e?t:{title:e,elements:(t===null||t===void 0?void 0:t.elements)||[]}})}),H.on("set_sidebar_elements",function(n){var r=n.elements,a=n.key;r.length?(r.forEach(function(n){!n.url&&n.chainlitKey&&(n.url=e.getElementUrl(n.chainlitKey,t))}),w(function(e){return(e===null||e===void 0?void 0:e.key)===a?e:{title:(e===null||e===void 0?void 0:e.title)||"",elements:r,key:a}})):w(void 0)}),H.on("element",function(n){!n.url&&n.chainlitKey&&(n.url=e.getElementUrl(n.chainlitKey,t)),n.type==="tasklist"?R(function(e){var t=e.findIndex(function(e){return e.id===n.id});return t===-1?I(e).concat([n]):I(e.slice(0,t)).concat([n],I(e.slice(t+1)))}):S(function(e){var t=e.findIndex(function(e){return e.id===n.id});return t===-1?I(e).concat([n]):I(e.slice(0,t)).concat([n],I(e.slice(t+1)))})}),H.on("remove_element",function(e){S(function(t){return t.filter(function(t){return t.id!==e.id})}),R(function(t){return t.filter(function(t){return t.id!==e.id})})}),H.on("action",function(e){C(function(t){return I(t).concat([e])})}),H.on("remove_action",function(e){C(function(t){var n=t.findIndex(function(t){return t.id===e.id});return n===-1?t:I(t.slice(0,n)).concat(I(t.slice(n+1)))})}),H.on("token_usage",function(e){E(function(t){return t+e})}),H.on("window_message",function(e){window.parent&&window.parent.postMessage(e,"*")}),H.on("toast",function(e){if(!e.message){console.warn("No message received for toast.");return}switch(e.type){case"info":U.toast.info(e.message);break;case"error":U.toast.error(e.message);break;case"success":U.toast.success(e.message);break;case"warning":U.toast.warning(e.message);break;default:U.toast(e.message);break}});return[2]}})});return function(e){return n.apply(this,arguments)}}(),[a,t,B,T]),H=L.useCallback(j.debounce(z,200),[z]),G=L.useCallback(function(){(r===null||r===void 0?void 0:r.socket)&&(r.socket.removeAllListeners(),r.socket.close())},[r]);return{connect:H,disconnect:G,session:r,sessionId:t,chatProfile:T,idToResume:B,setChatProfile:M}};var tu=function(){var e=x(O.useRecoilState(e_),2),t=e[0],n=e[1],r=O.useRecoilValue(ex),a=O.useRecoilValue(eI),s=O.useRecoilValue(eE),i=to(),u=i.startAudioStream,c=i.endAudioStream,l=L.useCallback(/*#__PURE__*/o(function(){return D(this,function(e){switch(e.label){case 0:n("connecting");return[4,u()];case 1:e.sent();return[2]}})}),[u]),f=L.useCallback(/*#__PURE__*/o(function(){return D(this,function(e){switch(e.label){case 0:n("off");return[4,r.end()];case 1:e.sent();return[4,a.interrupt()];case 2:e.sent();return[4,c()];case 3:e.sent();return[2]}})}),[c,r,a]);return{startConversation:l,endConversation:f,audioConnection:t,isAiSpeaking:s,wavRecorder:r,wavStreamPlayer:a}};var tc=function(){var e=x(O.useRecoilState(eF),2),t=e[0],n=e[1],r=e9(),a=r.isAuthenticated,o=O.useRecoilValue(ev),s=navigator.language||"en-US",i=L.useRef(o),u=a?"/project/settings?language=".concat(s).concat(o?"&chat_profile=".concat(encodeURIComponent(o)):""):null,c=a&&!t,l=e6(c?u:null),f=l.data,d=l.error,h=l.isLoading;return L.useEffect(function(){f&&n(f)},[f,n]),L.useEffect(function(){i.current!==o&&(n(void 0),i.current=o)},[o,n]),{config:t,error:d,isLoading:h,language:s}};var tl=new WeakMap,tf=function(e,t){var n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!1,r=arguments.length>3&&arguments[3]!==void 0?arguments[3]:!1;var a,o,s;if(r&&(o=t.toString(),s=n.toString(),a=tl.has(e)?tl.get(e):{},tl.set(e,a),a[o]=a[o]||{},a[o][s]))return a[o][s];var i=e.length,u=new Array(t);if(t<=i){u.fill(0);var c=new Array(t).fill(0);for(var l=0;l<i;l++){var f=Math.floor(l*(t/i));n?u[f]=Math.max(u[f],Math.abs(e[l])):u[f]+=Math.abs(e[l]),c[f]++}if(!n)for(var d=0;d<u.length;d++)u[d]=u[d]/c[d]}else for(var h=0;h<t;h++){var p=h*(i-1)/(t-1),v=Math.floor(p),m=Math.ceil(p),y=p-v;m>=i?u[h]=e[i-1]:u[h]=e[v]*(1-y)+e[m]*y}return r&&(a[o][s]=u),u},td={drawBars:function(e,t,n,r,a){var o=arguments.length>5&&arguments[5]!==void 0?arguments[5]:0,s=arguments.length>6&&arguments[6]!==void 0?arguments[6]:0,i=arguments.length>7&&arguments[7]!==void 0?arguments[7]:0,u=arguments.length>8&&arguments[8]!==void 0?arguments[8]:!1;o=Math.floor(Math.min(o,(n-i)/(Math.max(s,1)+i))),o||(o=Math.floor((n-i)/(Math.max(s,1)+i))),s||(s=(n-i)/o-i);var c=tf(t,o,!0);for(var l=0;l<o;l++){var f=Math.abs(c[l]),d=Math.max(1,f*r),h=i+l*(s+i),p=u?(r-d)/2:r-d,v=Math.min(s/2,d/2);e.fillStyle=a,e.beginPath(),e.moveTo(h+v,p),e.lineTo(h+s-v,p),e.arcTo(h+s,p,h+s,p+v,v),e.lineTo(h+s,p+d-v),e.arcTo(h+s,p+d,h+s-v,p+d,v),e.lineTo(h+v,p+d),e.arcTo(h,p+d,h,p+d-v,v),e.lineTo(h,p+v),e.arcTo(h,p,h+v,p,v),e.closePath(),e.fill()}}};Object.defineProperty(exports,"Socket",{enumerable:true,get:function e(){return V.Socket}});exports.APIBase=tt;exports.ChainlitAPI=tn;exports.ChainlitContext=ta;exports.ClientError=te;exports.WavRenderer=td;exports.actionState=ek;exports.addMessage=eK;exports.addMessageToParent=eQ;exports.askUserState=eC;exports.audioConnectionState=e_;exports.authState=eV;exports.callFnState=eP;exports.chatProfileState=ev;exports.chatSettingsDefaultValueSelector=eM;exports.chatSettingsInputsState=eT;exports.chatSettingsValueState=eD;exports.commandsState=eb;exports.configState=eF;exports.currentThreadIdState=eN;exports.defaultChainlitContext=tr;exports.deleteMessageById=e0;exports.elementState=eO;exports.fetcher=e3;exports.firstUserInteraction=eB;exports.hasMessageById=eX;exports.isAiSpeakingState=eE;exports.isLastMessage=eJ;exports.loadingState=eR;exports.mcpState=ez;exports.messagesState=ew;exports.modesState=eS;exports.nestMessages=eG;exports.resumeThreadErrorState=ep;exports.sessionIdState=ey;exports.sessionState=eg;exports.sideViewState=eq;exports.tasklistState=ej;exports.threadHistoryState=eU;exports.threadIdToResumeState=eh;exports.tokenCountState=eA;exports.updateMessageById=eZ;exports.updateMessageContentById=e1;exports.useApi=e6;exports.useAudio=tu;exports.useAuth=e9;exports.useChatData=eH;exports.useChatInteract=to;exports.useChatMessages=ts;exports.useChatSession=ti;exports.useConfig=tc;exports.userState=eL;exports.wavRecorderState=ex;exports.wavStreamPlayerState=eI;//# sourceMappingURL=out.js.map
2
2
  //# sourceMappingURL=index.js.map