@chainlit/react-client 0.2.2 → 0.2.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -92,7 +92,7 @@ const MessagesComponent = () => {
92
92
  return (
93
93
  <div>
94
94
  {messages.map((message) => (
95
- <p key={message.id}>{message.content}</p>
95
+ <p key={message.id}>{message.output}</p>
96
96
  ))}
97
97
  </div>
98
98
  );
@@ -158,12 +158,12 @@ const InteractionComponent = () => {
158
158
  const { sendMessage, replyMessage } = useChatInteract();
159
159
 
160
160
  const handleSendMessage = () => {
161
- const message = { content: 'Hello, World!', id: 'message-id' };
161
+ const message = { output: 'Hello, World!', id: 'message-id' };
162
162
  sendMessage(message);
163
163
  };
164
164
 
165
165
  const handleReplyMessage = () => {
166
- const message = { content: 'Replying to your message', id: 'reply-id' };
166
+ const message = { output: 'Replying to your message', id: 'reply-id' };
167
167
  replyMessage(message);
168
168
  };
169
169
 
package/dist/index.d.mts CHANGED
@@ -65,6 +65,13 @@ interface ICustomElement extends TMessageElement<'custom'> {
65
65
  props: Record<string, unknown>;
66
66
  }
67
67
 
68
+ interface ICommand {
69
+ id: string;
70
+ icon: string;
71
+ description: string;
72
+ button?: boolean;
73
+ }
74
+
68
75
  interface IFeedback {
69
76
  id?: string;
70
77
  forId?: string;
@@ -81,6 +88,7 @@ interface IStep {
81
88
  threadId?: string;
82
89
  parentId?: string;
83
90
  isError?: boolean;
91
+ command?: string;
84
92
  showInput?: boolean | string;
85
93
  waitForAnswer?: boolean;
86
94
  input?: string;
@@ -90,6 +98,7 @@ interface IStep {
90
98
  end?: number | string;
91
99
  feedback?: IFeedback;
92
100
  language?: string;
101
+ defaultOpen?: boolean;
93
102
  streaming?: boolean;
94
103
  steps?: IStep[];
95
104
  metadata?: Record<string, any>;
@@ -111,6 +120,7 @@ interface IAsk {
111
120
  callback: (payload: IStep | IFileRef[] | IAction) => void;
112
121
  spec: {
113
122
  type: 'text' | 'file' | 'action';
123
+ step_id: string;
114
124
  timeout: number;
115
125
  } & FileSpec & ActionSpec;
116
126
  parentId?: string;
@@ -190,6 +200,11 @@ interface IChainlitConfig {
190
200
  custom_js?: string;
191
201
  custom_font?: string;
192
202
  custom_meta_image_url?: string;
203
+ header_links?: {
204
+ name: string;
205
+ icon_url: string;
206
+ url: string;
207
+ }[];
193
208
  };
194
209
  features: {
195
210
  spontaneous_file_upload?: {
@@ -200,8 +215,10 @@ interface IChainlitConfig {
200
215
  };
201
216
  audio: IAudioConfig;
202
217
  unsafe_allow_html?: boolean;
218
+ user_message_autoscroll?: boolean;
203
219
  latex?: boolean;
204
220
  edit_message?: boolean;
221
+ mcp?: boolean;
205
222
  };
206
223
  debugUrl?: string;
207
224
  userEnv: string[];
@@ -212,6 +229,17 @@ interface IChainlitConfig {
212
229
  translation: object;
213
230
  }
214
231
 
232
+ interface IMcp {
233
+ name: string;
234
+ tools: [{
235
+ name: string;
236
+ }];
237
+ status: 'connected' | 'connecting' | 'failed';
238
+ clientType: 'sse' | 'stdio';
239
+ command?: string;
240
+ url?: string;
241
+ }
242
+
215
243
  interface IToken {
216
244
  id: number | string;
217
245
  token: string;
@@ -265,11 +293,13 @@ interface ISession {
265
293
  error?: boolean;
266
294
  }
267
295
  declare const threadIdToResumeState: recoil.RecoilState<string | undefined>;
296
+ declare const resumeThreadErrorState: recoil.RecoilState<string | undefined>;
268
297
  declare const chatProfileState: recoil.RecoilState<string | undefined>;
269
298
  declare const sessionIdState: recoil.RecoilState<string>;
270
299
  declare const sessionState: recoil.RecoilState<ISession | undefined>;
271
300
  declare const actionState: recoil.RecoilState<IAction[]>;
272
301
  declare const messagesState: recoil.RecoilState<IStep[]>;
302
+ declare const commandsState: recoil.RecoilState<ICommand[]>;
273
303
  declare const tokenCountState: recoil.RecoilState<number>;
274
304
  declare const loadingState: recoil.RecoilState<boolean>;
275
305
  declare const askUserState: recoil.RecoilState<IAsk | undefined>;
@@ -288,8 +318,12 @@ declare const userState: recoil.RecoilState<IUser | null | undefined>;
288
318
  declare const configState: recoil.RecoilState<IChainlitConfig | undefined>;
289
319
  declare const authState: recoil.RecoilState<IAuthConfig | undefined>;
290
320
  declare const threadHistoryState: recoil.RecoilState<ThreadHistory | undefined>;
291
- declare const sideViewState: recoil.RecoilState<IMessageElement | undefined>;
321
+ declare const sideViewState: recoil.RecoilState<{
322
+ title: string;
323
+ elements: IMessageElement[];
324
+ } | undefined>;
292
325
  declare const currentThreadIdState: recoil.RecoilState<string | undefined>;
326
+ declare const mcpState: recoil.RecoilState<IMcp[]>;
293
327
 
294
328
  declare const useChatSession: () => {
295
329
  connect: lodash.DebouncedFunc<({ transports, userEnv }: {
@@ -405,6 +439,9 @@ declare class ChainlitAPI extends APIBase {
405
439
  callAction(action: IAction, sessionId: string): Promise<any>;
406
440
  updateElement(element: IElement, sessionId: string): Promise<any>;
407
441
  deleteElement(element: IElement, sessionId: string): Promise<any>;
442
+ connectStdioMCP(sessionId: string, name: string, fullCommand: string): Promise<any>;
443
+ connectSseMCP(sessionId: string, name: string, url: string): Promise<any>;
444
+ disconnectMcp(sessionId: string, name: string): Promise<any>;
408
445
  getElementUrl(id: string, sessionId: string): string;
409
446
  getLogoEndpoint(theme: string): string;
410
447
  getOAuthEndpoint(provider: string): string;
@@ -426,4 +463,4 @@ declare const WavRenderer: {
426
463
  drawBars: (ctx: CanvasRenderingContext2D, data: Float32Array, cssWidth: number, cssHeight: number, color: string, pointCount?: number, barWidth?: number, barSpacing?: number, center?: boolean) => void;
427
464
  };
428
465
 
429
- export { APIBase, ActionSpec, AuthProvider, ChainlitAPI, ChainlitContext, ChatProfile, ClientError, ElementType, FileSpec, IAction, IAsk, IAudioConfig, IAudioElement, IAuthConfig, ICallFn, IChainlitConfig, ICustomElement, IDataframeElement, IElement, IElementSize, IFeedback, IFileElement, IFileRef, IImageElement, 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, configState, currentThreadIdState, defaultChainlitContext, deleteMessageById, elementState, fetcher, firstUserInteraction, hasMessageById, isAiSpeakingState, isLastMessage, loadingState, messagesState, nestMessages, sessionIdState, sessionState, sideViewState, tasklistState, threadHistoryState, threadIdToResumeState, tokenCountState, updateMessageById, updateMessageContentById, useApi, useAudio, useAuth, useChatData, useChatInteract, useChatMessages, useChatSession, useConfig, userState, wavRecorderState, wavStreamPlayerState };
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 };
package/dist/index.d.ts CHANGED
@@ -65,6 +65,13 @@ interface ICustomElement extends TMessageElement<'custom'> {
65
65
  props: Record<string, unknown>;
66
66
  }
67
67
 
68
+ interface ICommand {
69
+ id: string;
70
+ icon: string;
71
+ description: string;
72
+ button?: boolean;
73
+ }
74
+
68
75
  interface IFeedback {
69
76
  id?: string;
70
77
  forId?: string;
@@ -81,6 +88,7 @@ interface IStep {
81
88
  threadId?: string;
82
89
  parentId?: string;
83
90
  isError?: boolean;
91
+ command?: string;
84
92
  showInput?: boolean | string;
85
93
  waitForAnswer?: boolean;
86
94
  input?: string;
@@ -90,6 +98,7 @@ interface IStep {
90
98
  end?: number | string;
91
99
  feedback?: IFeedback;
92
100
  language?: string;
101
+ defaultOpen?: boolean;
93
102
  streaming?: boolean;
94
103
  steps?: IStep[];
95
104
  metadata?: Record<string, any>;
@@ -111,6 +120,7 @@ interface IAsk {
111
120
  callback: (payload: IStep | IFileRef[] | IAction) => void;
112
121
  spec: {
113
122
  type: 'text' | 'file' | 'action';
123
+ step_id: string;
114
124
  timeout: number;
115
125
  } & FileSpec & ActionSpec;
116
126
  parentId?: string;
@@ -190,6 +200,11 @@ interface IChainlitConfig {
190
200
  custom_js?: string;
191
201
  custom_font?: string;
192
202
  custom_meta_image_url?: string;
203
+ header_links?: {
204
+ name: string;
205
+ icon_url: string;
206
+ url: string;
207
+ }[];
193
208
  };
194
209
  features: {
195
210
  spontaneous_file_upload?: {
@@ -200,8 +215,10 @@ interface IChainlitConfig {
200
215
  };
201
216
  audio: IAudioConfig;
202
217
  unsafe_allow_html?: boolean;
218
+ user_message_autoscroll?: boolean;
203
219
  latex?: boolean;
204
220
  edit_message?: boolean;
221
+ mcp?: boolean;
205
222
  };
206
223
  debugUrl?: string;
207
224
  userEnv: string[];
@@ -212,6 +229,17 @@ interface IChainlitConfig {
212
229
  translation: object;
213
230
  }
214
231
 
232
+ interface IMcp {
233
+ name: string;
234
+ tools: [{
235
+ name: string;
236
+ }];
237
+ status: 'connected' | 'connecting' | 'failed';
238
+ clientType: 'sse' | 'stdio';
239
+ command?: string;
240
+ url?: string;
241
+ }
242
+
215
243
  interface IToken {
216
244
  id: number | string;
217
245
  token: string;
@@ -265,11 +293,13 @@ interface ISession {
265
293
  error?: boolean;
266
294
  }
267
295
  declare const threadIdToResumeState: recoil.RecoilState<string | undefined>;
296
+ declare const resumeThreadErrorState: recoil.RecoilState<string | undefined>;
268
297
  declare const chatProfileState: recoil.RecoilState<string | undefined>;
269
298
  declare const sessionIdState: recoil.RecoilState<string>;
270
299
  declare const sessionState: recoil.RecoilState<ISession | undefined>;
271
300
  declare const actionState: recoil.RecoilState<IAction[]>;
272
301
  declare const messagesState: recoil.RecoilState<IStep[]>;
302
+ declare const commandsState: recoil.RecoilState<ICommand[]>;
273
303
  declare const tokenCountState: recoil.RecoilState<number>;
274
304
  declare const loadingState: recoil.RecoilState<boolean>;
275
305
  declare const askUserState: recoil.RecoilState<IAsk | undefined>;
@@ -288,8 +318,12 @@ declare const userState: recoil.RecoilState<IUser | null | undefined>;
288
318
  declare const configState: recoil.RecoilState<IChainlitConfig | undefined>;
289
319
  declare const authState: recoil.RecoilState<IAuthConfig | undefined>;
290
320
  declare const threadHistoryState: recoil.RecoilState<ThreadHistory | undefined>;
291
- declare const sideViewState: recoil.RecoilState<IMessageElement | undefined>;
321
+ declare const sideViewState: recoil.RecoilState<{
322
+ title: string;
323
+ elements: IMessageElement[];
324
+ } | undefined>;
292
325
  declare const currentThreadIdState: recoil.RecoilState<string | undefined>;
326
+ declare const mcpState: recoil.RecoilState<IMcp[]>;
293
327
 
294
328
  declare const useChatSession: () => {
295
329
  connect: lodash.DebouncedFunc<({ transports, userEnv }: {
@@ -405,6 +439,9 @@ declare class ChainlitAPI extends APIBase {
405
439
  callAction(action: IAction, sessionId: string): Promise<any>;
406
440
  updateElement(element: IElement, sessionId: string): Promise<any>;
407
441
  deleteElement(element: IElement, sessionId: string): Promise<any>;
442
+ connectStdioMCP(sessionId: string, name: string, fullCommand: string): Promise<any>;
443
+ connectSseMCP(sessionId: string, name: string, url: string): Promise<any>;
444
+ disconnectMcp(sessionId: string, name: string): Promise<any>;
408
445
  getElementUrl(id: string, sessionId: string): string;
409
446
  getLogoEndpoint(theme: string): string;
410
447
  getOAuthEndpoint(provider: string): string;
@@ -426,4 +463,4 @@ declare const WavRenderer: {
426
463
  drawBars: (ctx: CanvasRenderingContext2D, data: Float32Array, cssWidth: number, cssHeight: number, color: string, pointCount?: number, barWidth?: number, barSpacing?: number, center?: boolean) => void;
427
464
  };
428
465
 
429
- export { APIBase, ActionSpec, AuthProvider, ChainlitAPI, ChainlitContext, ChatProfile, ClientError, ElementType, FileSpec, IAction, IAsk, IAudioConfig, IAudioElement, IAuthConfig, ICallFn, IChainlitConfig, ICustomElement, IDataframeElement, IElement, IElementSize, IFeedback, IFileElement, IFileRef, IImageElement, 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, configState, currentThreadIdState, defaultChainlitContext, deleteMessageById, elementState, fetcher, firstUserInteraction, hasMessageById, isAiSpeakingState, isLastMessage, loadingState, messagesState, nestMessages, sessionIdState, sessionState, sideViewState, tasklistState, threadHistoryState, threadIdToResumeState, tokenCountState, updateMessageById, updateMessageContentById, useApi, useAudio, useAuth, useChatData, useChatInteract, useChatMessages, useChatSession, useConfig, userState, wavRecorderState, wavStreamPlayerState };
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 };
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,i){try{var s=e[o](i);var u=s.value}catch(e){n(e);return}if(s.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 i=e.apply(t,n);function s(e){a(i,r,o,s,u,"next",e)}function u(e){a(i,r,o,s,u,"throw",e)}s(undefined)})}}function i(e,t){if(!(e instanceof t)){throw new TypeError("Cannot call a class as a function")}}function s(e,t,n){if(D()){s=Reflect.construct}else{s=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 s.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 h(e){h=Object.setPrototypeOf?Object.getPrototypeOf:function e(e){return e.__proto__||Object.getPrototypeOf(e)};return h(e)}function d(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 y(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 i,s;try{for(n=n.call(e);!(a=(i=n.next()).done);a=true){r.push(i.value);if(t&&r.length===t)break}}catch(e){o=true;s=e}finally{try{if(!a&&n["return"]!=null)n["return"]()}finally{if(o)throw s}}return r}function m(){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&&(E(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,n)||m()}function I(e){return n(e)||y(e)||_(e)||k()}function E(e){"@swc/helpers - typeof";return e&&typeof Symbol!=="undefined"&&e.constructor===Symbol?"symbol":typeof e}function _(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 s(e,arguments,h(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 D(){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 T(e){var t=D();return function n(){var n=h(e),r;if(t){var a=h(this).constructor;r=Reflect.construct(n,arguments,a)}else{r=n.apply(this,arguments)}return R(this,r)}}function M(e,t){var n,r,a,o,i={label:0,sent:function(){if(a[0]&1)throw a[1];return a[1]},trys:[],ops:[]};return(o={next:s(0),"throw":s(1),"return":s(2)},typeof Symbol==="function"&&(o[Symbol.iterator]=function(){return this}),o);function s(e){return function(t){return u([e,t])}}function u(o){if(n)throw new TypeError("Generator is already executing.");while(i)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:i.label++;return{value:o[1],done:false};case 5:i.label++;r=o[1];o=[0];continue;case 7:o=i.ops.pop();i.trys.pop();continue;default:if(!(a=i.trys,a=a.length>0&&a[a.length-1])&&(o[0]===6||o[0]===2)){i=0;continue}if(o[0]===3&&(!a||o[1]>a[0]&&o[1]<a[3])){i.label=o[1];break}if(o[0]===6&&i.label<a[1]){i.label=a[1];a=o;break}if(a&&i.label<a[2]){i.label=a[2];i.ops.push(o);break}if(a[2])i.ops.pop();i.trys.pop();continue}o=t.call(e,i)}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");function q(e){return e&&e.__esModule?e:{default:e}}var U=/*#__PURE__*/q(F);var W=/*#__PURE__*/q(V);var N=function(e){var t={},n=new Date,r=new Date;r.setDate(n.getDate()-1);var a=new Date;a.setDate(n.getDate()-7);var o=new Date;return o.setDate(n.getDate()-30),e.forEach(function(e){var i=new Date(e.createdAt),s=i.toDateString()===n.toDateString(),u=i.toDateString()===r.toDateString(),c=i>=a,l=i>=o,f;s?f="Today":u?f="Yesterday":c?f="Previous 7 days":l?f="Previous 30 days":f=i.toLocaleString("default",{month:"long",year:"numeric"}).split(" ").slice(0,1).join(" "),t[f]||(t[f]=[]),t[f].push(e)}),t};var z=[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"],H=[],$=[];for(var J=1;J<=8;J++)for(var Y=0;Y<z.length;Y++){var K=z[Y];H.push(K/Math.pow(2,8-J)),$.push(G[Y]+J)}var X=[32,2e3],Q=H.filter(function(e,t){return H[t]>X[0]&&H[t]<X[1]}),Z=$.filter(function(e,t){return H[t]>X[0]&&H[t]<X[1]});var ee=/*#__PURE__*/function(){function e(t){var n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:null;var r=this;i(this,e);if(this.fftResults=[],n){var a=n.length,o=n.sampleRate,s=new OfflineAudioContext({length:a,sampleRate:o}),u=s.createBufferSource();u.buffer=n;var c=s.createAnalyser();c.fftSize=8192,c.smoothingTimeConstant=.1,u.connect(c);var l=1/60,f=a/o,h=function(e){var t=l*e;t<f&&s.suspend(t).then(function(){var t=new Float32Array(c.frequencyBinCount);c.getFloatFrequencyData(t),r.fftResults.push(t),h(e+1)}),e===1?s.startRendering():s.resume()};u.start(0),h(1),this.audio=t,this.context=s,this.analyser=c,this.sampleRate=o,this.audioBuffer=n}else{var d=new AudioContext,p=d.createMediaElementSource(t),v=d.createAnalyser();v.fftSize=8192,v.smoothingTimeConstant=.1,p.connect(v),v.connect(d.destination),this.audio=t,this.context=d,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,i=Math.min(o*this.fftResults.length|0,this.fftResults.length-1);a=this.fftResults[i]}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 M(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 i=t/2,s=1/n.length*i,u,c,l;if(r==="music"||r==="voice"){var f=r==="voice"?Q:H,h=Array(f.length).fill(a);for(var d=0;d<n.length;d++){var p=d*s,v=n[d];for(var y=f.length-1;y>=0;y--)if(p>f[y]){h[y]=Math.max(h[y],v);break}}u=h,c=r==="voice"?Q:H,l=r==="voice"?Z:$}else u=Array.from(n),c=u.map(function(e,t){return s*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=ee;var et=/*#__PURE__*/function(){function e(){i(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],i=new Blob(o,{type:"audio/mpeg"}),s=URL.createObjectURL(i);return{blob:i,url:s,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=et;var en="\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",er=new Blob([en],{type:"application/javascript"}),ea=URL.createObjectURL(er),eo=ea;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,s=t.debug,u=s===void 0?!1:s;i(this,e);this.scriptSrc=eo,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,i;return M(this,function(s){switch(s.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();s.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:s.sent();s.label=3;case 3:return[3,1];case 4:i=r.eventReceipts[a.id];return[2,(delete r.eventReceipts[a.id],i)]}})})()}},{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(",")},i=function(){var i=o(function(){var o,i;return M(this,function(s){switch(s.label){case 0:o=++n;return[4,t.listDevices()];case 1:i=s.sent();o===n&&a(r)!==a(i)&&(r=i,e(i.slice()));return[2]}})});return function e(){return i.apply(this,arguments)}}();navigator.mediaDevices.addEventListener("devicechange",i),i(),this._deviceChangeCallback=i}return!0}},{key:"requestPermission",value:function e(){return o(function(){var e,t;return M(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 M(this,function(i){switch(i.label){case 0:if(!navigator.mediaDevices||!("enumerateDevices"in navigator.mediaDevices))throw new Error("Could not request user devices");return[4,e.requestPermission()];case 1:i.sent();return[4,navigator.mediaDevices.enumerateDevices()];case 2:t=i.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,i,s,u,c;return M(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:i=l.sent();throw console.error(i),new Error("Could not add audioWorklet module: ".concat(t.scriptSrc));case 8:s=new AudioWorkletNode(a,"audio_processor");s.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 i=t._chunkProcessorBuffer;t._chunkProcessorBuffer={raw:et.mergeBuffers(i.raw,o.raw),mono:et.mergeBuffers(i.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(s),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=s,!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 ee.getFrequencies(this.analyser,this.sampleRate,null,e,t,n)}},{key:"pause",value:function e(){var e=this;return o(function(){return M(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 M(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 M(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 M(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 M(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 et().pack(t.sampleRate,n.audio)]}})})()}},{key:"end",value:function e(){var e=this;return o(function(){var t,n;return M(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 et().pack(e.sampleRate,n.audio))]}})})()}},{key:"quit",value:function e(){var e=this;return o(function(){var t;return M(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,i,s,u,c,l,f,h;return M(this,function(d){switch(d.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=d.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)){s=e,i=new Float32Array(e.length);for(u=0;u<e.length;u++)i[u]=e[u]/32768}else if(p(e,Float32Array))i=e;else if(p(e,Array))i=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)');s||(s=et.floatTo16BitPCM(i));c={bitsPerSample:16,channels:[i],data:s};o=new et().pack(n,c).blob;return[4,o.arrayBuffer()];case 4:a=d.sent();d.label=5;case 5:return[4,r.decodeAudioData(a)];case 6:l=d.sent(),f=l.getChannelData(0),h=URL.createObjectURL(o);return[2,{blob:o,url:h,values:f,audioBuffer:l}]}})})()}}]);return e}();globalThis.WavRecorder=ei;var es="\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",eu=new Blob([es],{type:"application/javascript"}),ec=URL.createObjectURL(eu),el=ec;var ef=/*#__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;i(this,e);this.scriptSrc=el,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 M(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 ee.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,i=o.event;if(i==="stop")(r=(a=e).onStop)===null||r===void 0?void 0:r.call(a),t.disconnect(),e.stream=null;else if(i==="offset"){var s=n.data,u=s.requestId,c=s.trackId,l=s.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 M(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 M(this,function(t){return[2,e.getTrackSampleOffset(!0)]})})()}}]);return e}();globalThis.WavStreamPlayer=ef;var eh=O.atom({key:"ThreadIdToResume",default:void 0}),ed=O.atom({key:"ChatProfile",default:void 0}),ep=O.atom({key:"SessionId",default:B.v4()}),ev=O.selector({key:"SessionIdSelector",get:function(e){var t=e.get;return t(ep)},set:function(e,t){var n=e.set;return n(ep,p(t,O.DefaultValue)?B.v4():t)}}),ey=O.atom({key:"Session",dangerouslyAllowMutability:!0,default:void 0}),eg=O.atom({key:"Actions",default:[]}),em=O.atom({key:"Messages",dangerouslyAllowMutability:!0,default:[]}),ek=O.atom({key:"TokenCount",default:0}),ew=O.atom({key:"Loading",default:!1}),eb=O.atom({key:"AskUser",default:void 0}),eS=O.atom({key:"WavRecorder",dangerouslyAllowMutability:!0,default:new ei}),eA=O.atom({key:"WavStreamPlayer",dangerouslyAllowMutability:!0,default:new ef}),eR=O.atom({key:"AudioConnection",default:"off"}),eC=O.atom({key:"isAiSpeaking",default:!1}),ex=O.atom({key:"CallFn",default:void 0}),eI=O.atom({key:"ChatSettings",default:[]}),eE=O.selector({key:"ChatSettingsValue/Default",get:function(e){var t=e.get;return t(eI).reduce(function(e,t){return e[t.id]=t.initial,e},{})}}),e_=O.atom({key:"ChatSettingsValue",default:eE}),eP=O.atom({key:"DisplayElements",default:[]}),eD=O.atom({key:"TasklistElements",default:[]}),eT=O.atom({key:"FirstUserInteraction",default:void 0}),eM=O.atom({key:"User",default:void 0}),eO=O.atom({key:"ChainlitConfig",default:void 0}),ej=O.atom({key:"AuthConfig",default:void 0}),eB=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=N(e.threads)),t(A(b({},e),{timeGroupedThreads:r}))})}]}),eL=O.atom({key:"SideView",default:void 0}),eF=O.atom({key:"CurrentThreadId",default:void 0});var eV=function(){var e=O.useRecoilValue(ew),t=O.useRecoilValue(eP),n=O.useRecoilValue(eD),r=O.useRecoilValue(eg),a=O.useRecoilValue(ey),o=O.useRecoilValue(eb),i=O.useRecoilValue(ex),s=O.useRecoilValue(eI),u=O.useRecoilValue(e_),c=O.useRecoilValue(eE),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:i,chatSettingsDefaultValue:c,chatSettingsInputs:s,chatSettingsValue:u,connected:l,disabled:f,elements:t,error:a===null||a===void 0?void 0:a.error,loading:e,tasklists:n}};var eq=function(e){var t=[];var n=true,r=false,a=undefined;try{for(var o=e[Symbol.iterator](),i;!(n=(i=o.next()).done);n=true){var s=i.value;t=eW(t,s)}}catch(e){r=true;a=e}finally{try{if(!n&&o.return!=null){o.return()}}finally{if(r){throw a}}}return t},eU=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},eW=function(e,t){return eH(e,t.id)?e$(e,t.id,t):"parentId"in t&&t.parentId?ez(e,t.parentId,t):"indent"in t&&t.indent&&t.indent>0?eN(e,t.indent,t):I(e).concat([t])},eN=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,i=a[o];return i.steps=i.steps||[],r+1===t?(i.steps=I(i.steps).concat([n]),a[o]=b({},i),a):(i.steps=eN(i.steps,t,n,r+1),a[o]=b({},i),a)}},ez=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)):eH(r,t)&&o.steps&&(o.steps=ez(o.steps,t,n),r[a]=b({},o))}return r},eG=function(e,t){var n=true,r=false,a=undefined;try{for(var o=e[Symbol.iterator](),i;!(n=(i=o.next()).done);n=true){var s=i.value;if(j.isEqual(s.id,t))return s;if(s.steps&&s.steps.length>0){var u=eG(s.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}}}},eH=function(e,t){return eG(e,t)!==void 0},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)?r[a]=b({steps:o.steps},n):eH(r,t)&&o.steps&&(o.steps=e$(o.steps,t,n),r[a]=b({},o))}return r},eJ=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))):eH(n,t)&&a.steps&&(a.steps=eJ(a.steps,t),n[r]=b({},a))}return n},eY=function(e,t,n,r,a){var o=I(e);for(var i=0;i<o.length;i++){var s=o[i];j.isEqual(s.id,t)?("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),o[i]=b({},s)):s.steps&&(s.steps=eY(s.steps,t,n,r,a),o[i]=b({},s))}return o};var eK=function(){var e=x(O.useRecoilState(ej),2),t=e[0],n=e[1],r=x(O.useRecoilState(eM),2),a=r[0],o=r[1],i=O.useSetRecoilState(eB);return{authConfig:t,setAuthConfig:n,user:a,setUser:o,setThreadHistory:i}};var eX=function(){var e=o(function(e,t){var n;return M(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)}}(),eQ=function(e){var t=new e8("","webapp");return Object.assign(t,e),t};function eZ(e){var t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};var n=f({},w(t));var r=L.useContext(e7),a=eK(),o=a.setUser,i=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),i=a[0];if(i.status===401){o(null);return}return(r=F.SWRConfig.defaultValue).onErrorRetry.apply(r,I(t))});var i=eQ(r);return i.on401=i.onError=void 0,eX(i,a)}},[r]),s=L.useMemo(function(){return e?[e]:null},[e]);return U.default(s,i,n)}var e0=function(){var e=eK(),t=e.authConfig,n=e.setAuthConfig,r=eZ(t?null:"/auth/config"),a=r.data,o=r.isLoading;return L.useEffect(function(){a&&n(a)},[a,n]),{authConfig:t,isLoading:o}};var e1=function(){var e=L.useContext(e7),t=eK(),n=t.setUser,r=t.setThreadHistory;return{logout:/*#__PURE__*/o(function(){var t;var a=arguments;return M(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 e2=function(){var e=eK(),t=e.user,n=e.setUser,r=eZ("/user"),a=r.data,o=r.error,i=r.isLoading,s=r.mutate;return L.useEffect(function(){a?n(a):i&&n(void 0)},[a,i,n]),L.useEffect(function(){o&&n(null)},[o]),{user:t,setUserFromAPI:s}};var e3=function(){var e=e0(),t=e.authConfig,n=e1(),r=n.logout,a=e2(),o=a.user,i=a.setUserFromAPI,s=!!t&&(!t.requireLogin||o!==void 0);return t&&!t.requireLogin?{data:t,user:null,isReady:s,isAuthenticated:!0,logout:function(){return Promise.resolve()},setUserFromAPI:function(){return Promise.resolve()}}:{data:t,user:o,isReady:s,isAuthenticated:!!o,logout:r,setUserFromAPI:i}};var e4=/*#__PURE__*/function(e){d(n,e);var t=T(n);function n(e,r,a){i(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)),e6=/*#__PURE__*/function(){function e(t,n,r,a){i(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 M(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,e4)&&(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 i=this;return o(function(){var o,s,u,c;return M(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(i.buildEndpoint(t),{method:e,credentials:"include",headers:a,signal:r,body:o})];case 1:s=l.sent();if(!!s.ok)return[3,3];return[4,i.getDetailFromErrorResponse(s)];case 2:u=l.sent();throw new e4(s.statusText,s.status,u);case 3:return[2,s];case 4:c=l.sent();throw i.handleRequestError(c),c;case 5:return[2]}})})()}},{key:"get",value:function e(e){var t=this;return o(function(){return M(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 M(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 M(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 M(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 M(this,function(r){switch(r.label){case 0:return[4,n.fetch("DELETE",e,t)];case 1:return[2,r.sent()]}})})()}}]);return e}(),e8=/*#__PURE__*/function(e){d(n,e);var t=T(n);function n(){i(this,n);return t.apply(this,arguments)}c(n,[{key:"headerAuth",value:function e(){var e=this;return o(function(){return M(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 M(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 M(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 M(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 M(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 M(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 M(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 M(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 M(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 M(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,i){var s=new FormData;s.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)}else i("Upload failed")},a.onerror=function(){i("Upload error")},a.send(s)});return{xhr:a,promise:o}}},{key:"callAction",value:function e(e,t){var n=this;return o(function(){return M(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 M(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 M(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:"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}(e6);var e5=void 0,e7=L.createContext(new e8("http://localhost:8000","webapp"));var e9=function(){var e=L.useContext(e7),t=O.useRecoilValue(ey),n=O.useRecoilValue(eb),r=O.useRecoilValue(ev),a=O.useResetRecoilState(eI),o=O.useResetRecoilState(ev),i=O.useResetRecoilState(e_),s=O.useSetRecoilState(eT),u=O.useSetRecoilState(ew),c=O.useSetRecoilState(em),l=O.useSetRecoilState(eP),f=O.useSetRecoilState(eD),h=O.useSetRecoilState(eg),d=O.useSetRecoilState(ek),p=O.useSetRecoilState(eh),v=O.useSetRecoilState(eL),y=O.useSetRecoilState(eF),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(),s(void 0),c([]),l([]),f([]),h([]),d(0),a(),i(),v(void 0),y(void 0)},[t]),m=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 eW(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 eW(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:m,editMessage:k,windowMessage:w,startAudioStream:b,sendAudioChunk:S,endAudioStream:A,stopTask:x,setIdToResume:p,updateChatSettings:C}};var te=function(){var e=O.useRecoilValue(em),t=O.useRecoilValue(eT);return{threadId:O.useRecoilValue(eF),messages:e,firstInteraction:t}};var tt=function(){var e=L.useContext(e7),t=O.useRecoilValue(ev),n=x(O.useRecoilState(ey),2),r=n[0],a=n[1],i=O.useSetRecoilState(eC),s=O.useSetRecoilState(eR),u=O.useResetRecoilState(e_),c=O.useSetRecoilState(eT),l=O.useSetRecoilState(ew),f=O.useRecoilValue(eA),h=O.useRecoilValue(eS),d=O.useSetRecoilState(em),p=O.useSetRecoilState(eb),v=O.useSetRecoilState(ex),y=O.useSetRecoilState(eP),g=O.useSetRecoilState(eD),m=O.useSetRecoilState(eg),k=O.useSetRecoilState(eI),w=O.useSetRecoilState(ek),S=x(O.useRecoilState(ed),2),R=S[0],C=S[1],E=O.useRecoilValue(eh),_=x(O.useRecoilState(eF),2),P=_[0],D=_[1];L.useEffect(function(){(r===null||r===void 0?void 0:r.socket)&&(r.socket.auth.threadId=P||"")},[P]);var T=L.useCallback(function(n){var r=n.transports,S=n.userEnv;var x=new URL(e.httpEndpoint),_=x.protocol,P=x.host,T=x.pathname,O="".concat(_,"//").concat(P),j=T&&T!=="/"?"".concat(T,"/ws/socket.io"):"/ws/socket.io",B=W.default(O,{path:j,withCredentials:!0,transports:r,auth:{clientType:e.type,sessionId:t,threadId:E||"",userEnv:JSON.stringify(S),chatProfile:R?encodeURIComponent(R):""}});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:B}}),B.on("connect",function(){B.emit("connection_successful"),a(function(e){return A(b({},e),{error:!1})})}),B.on("connect_error",function(e){a(function(e){return A(b({},e),{error:!0})})}),B.on("task_start",function(){l(!0)}),B.on("task_end",function(){l(!1)}),B.on("reload",function(){B.emit("clear_session"),window.location.reload()}),B.on("audio_connection",function(){var e=o(function(e){var t,n,r;return M(this,function(a){switch(a.label){case 0:if(!(e==="on"))return[3,4];t=!0,n=Date.now(),r="pcm16";return[4,h.begin()];case 1:a.sent();return[4,f.connect()];case 2:a.sent();return[4,h.record(function(){var e=o(function(e){var a;return M(this,function(o){a=Date.now()-n;B.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(),f.onStop=function(){return i(!1)};return[3,7];case 4:return[4,h.end()];case 5:a.sent();return[4,f.interrupt()];case 6:a.sent();a.label=7;case 7:s(e);return[2]}})});return function(t){return e.apply(this,arguments)}}()),B.on("audio_chunk",function(e){f.add16BitPCM(e.data,e.track),i(!0)}),B.on("audio_interrupt",function(){f.interrupt()}),B.on("resume_thread",function(e){var t,n;var r=[];var a=true,o=false,i=undefined;try{for(var s=e.steps[Symbol.iterator](),u;!(a=(u=s.next()).done);a=true){var c=u.value;r=eW(r,c)}}catch(e){o=true;i=e}finally{try{if(!a&&s.return!=null){s.return()}}finally{if(o){throw i}}}((t=e.metadata)===null||t===void 0?void 0:t.chat_profile)&&C((n=e.metadata)===null||n===void 0?void 0:n.chat_profile),d(r);var l=e.elements||[];g(l.filter(function(e){return e.type==="tasklist"})),y(l.filter(function(e){return["avatar","tasklist"].indexOf(e.type)===-1}))}),B.on("new_message",function(e){d(function(t){return eW(t,e)})}),B.on("first_interaction",function(e){c(e.interaction),D(e.thread_id)}),B.on("update_message",function(e){d(function(t){return e$(t,e.id,e)})}),B.on("delete_message",function(e){d(function(t){return eJ(t,e.id)})}),B.on("stream_start",function(e){d(function(t){return eW(t,e)})}),B.on("stream_token",function(e){var t=e.id,n=e.token,r=e.isSequence,a=e.isInput;d(function(e){return eY(e,t,n,r,a)})}),B.on("ask",function(e,t){var n=e.msg,r=e.spec;p({spec:r,callback:t,parentId:n.parentId}),d(function(e){return eW(e,n)}),l(!1)}),B.on("ask_timeout",function(){p(void 0),l(!1)}),B.on("clear_ask",function(){p(void 0)}),B.on("call_fn",function(e,t){var n=e.name,r=e.args;v({name:n,args:r,callback:t})}),B.on("clear_call_fn",function(){v(void 0)}),B.on("call_fn_timeout",function(){v(void 0)}),B.on("chat_settings",function(e){k(e),u()}),B.on("element",function(n){!n.url&&n.chainlitKey&&(n.url=e.getElementUrl(n.chainlitKey,t)),n.type==="tasklist"?g(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)))}):y(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)))})}),B.on("remove_element",function(e){y(function(t){return t.filter(function(t){return t.id!==e.id})}),g(function(t){return t.filter(function(t){return t.id!==e.id})})}),B.on("action",function(e){m(function(t){return I(t).concat([e])})}),B.on("remove_action",function(e){m(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)))})}),B.on("token_usage",function(e){w(function(t){return t+e})}),B.on("window_message",function(e){window.parent&&window.parent.postMessage(e,"*")})},[a,t,R]),B=L.useCallback(j.debounce(T,200),[T]),F=L.useCallback(function(){(r===null||r===void 0?void 0:r.socket)&&(r.socket.removeAllListeners(),r.socket.close())},[r]);return{connect:B,disconnect:F,session:r,sessionId:t,chatProfile:R,idToResume:E,setChatProfile:C}};var tn=function(){var e=x(O.useRecoilState(eR),2),t=e[0],n=e[1],r=O.useRecoilValue(eS),a=O.useRecoilValue(eA),i=O.useRecoilValue(eC),s=e9(),u=s.startAudioStream,c=s.endAudioStream,l=L.useCallback(/*#__PURE__*/o(function(){return M(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 M(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:i,wavRecorder:r,wavStreamPlayer:a}};var tr=function(){var e=x(O.useRecoilState(eO),2),t=e[0],n=e[1],r=e3(),a=r.isAuthenticated,o=navigator.language||"en-US",i=eZ(!t&&a?"/project/settings?language=".concat(o):null),s=i.data,u=i.error,c=i.isLoading;return L.useEffect(function(){s&&n(s)},[s,n]),{config:t,error:u,isLoading:c,language:o}};var ta=new WeakMap,to=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,i;if(r&&(o=t.toString(),i=n.toString(),a=ta.has(e)?ta.get(e):{},ta.set(e,a),a[o]=a[o]||{},a[o][i]))return a[o][i];var s=e.length,u=new Array(t);if(t<=s){u.fill(0);var c=new Array(t).fill(0);for(var l=0;l<s;l++){var f=Math.floor(l*(t/s));n?u[f]=Math.max(u[f],Math.abs(e[l])):u[f]+=Math.abs(e[l]),c[f]++}if(!n)for(var h=0;h<u.length;h++)u[h]=u[h]/c[h]}else for(var d=0;d<t;d++){var p=d*(s-1)/(t-1),v=Math.floor(p),y=Math.ceil(p),g=p-v;y>=s?u[d]=e[s-1]:u[d]=e[v]*(1-g)+e[y]*g}return r&&(a[o][i]=u),u},ti={drawBars:function(e,t,n,r,a){var o=arguments.length>5&&arguments[5]!==void 0?arguments[5]:0,i=arguments.length>6&&arguments[6]!==void 0?arguments[6]:0,s=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-s)/(Math.max(i,1)+s))),o||(o=Math.floor((n-s)/(Math.max(i,1)+s))),i||(i=(n-s)/o-s);var c=to(t,o,!0);for(var l=0;l<o;l++){var f=Math.abs(c[l]),h=Math.max(1,f*r),d=s+l*(i+s),p=u?(r-h)/2:r-h,v=Math.min(i/2,h/2);e.fillStyle=a,e.beginPath(),e.moveTo(d+v,p),e.lineTo(d+i-v,p),e.arcTo(d+i,p,d+i,p+v,v),e.lineTo(d+i,p+h-v),e.arcTo(d+i,p+h,d+i-v,p+h,v),e.lineTo(d+v,p+h),e.arcTo(d,p+h,d,p+h-v,v),e.lineTo(d,p+v),e.arcTo(d,p,d+v,p,v),e.closePath(),e.fill()}}};Object.defineProperty(exports,"Socket",{enumerable:true,get:function e(){return V.Socket}});exports.APIBase=e6;exports.ChainlitAPI=e8;exports.ChainlitContext=e7;exports.ClientError=e4;exports.WavRenderer=ti;exports.actionState=eg;exports.addMessage=eW;exports.addMessageToParent=ez;exports.askUserState=eb;exports.audioConnectionState=eR;exports.authState=ej;exports.callFnState=ex;exports.chatProfileState=ed;exports.chatSettingsDefaultValueSelector=eE;exports.chatSettingsInputsState=eI;exports.chatSettingsValueState=e_;exports.configState=eO;exports.currentThreadIdState=eF;exports.defaultChainlitContext=e5;exports.deleteMessageById=eJ;exports.elementState=eP;exports.fetcher=eX;exports.firstUserInteraction=eT;exports.hasMessageById=eH;exports.isAiSpeakingState=eC;exports.isLastMessage=eU;exports.loadingState=ew;exports.messagesState=em;exports.nestMessages=eq;exports.sessionIdState=ev;exports.sessionState=ey;exports.sideViewState=eL;exports.tasklistState=eD;exports.threadHistoryState=eB;exports.threadIdToResumeState=eh;exports.tokenCountState=ek;exports.updateMessageById=e$;exports.updateMessageContentById=eY;exports.useApi=eZ;exports.useAudio=tn;exports.useAuth=e3;exports.useChatData=eV;exports.useChatInteract=e9;exports.useChatMessages=te;exports.useChatSession=tt;exports.useConfig=tr;exports.userState=eM;exports.wavRecorderState=eS;exports.wavStreamPlayerState=eA;//# 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 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
2
2
  //# sourceMappingURL=index.js.map