super-agent-sdk 1.0.25 → 1.0.27
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 +25 -6
- package/dist/index.cjs +4 -4
- package/dist/index.d.ts +5 -1
- package/dist/index.mjs +275 -253
- package/dist/widget.cjs +166 -174
- package/dist/widget.d.ts +66 -34
- package/dist/widget.mjs +9555 -9506
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -146,7 +146,7 @@ export interface SuperAgentSDK {
|
|
|
146
146
|
): Promise<ListConversationsResult>;
|
|
147
147
|
renameConversation(sessionId: string, title: string): Promise<void>;
|
|
148
148
|
deleteConversation(sessionId: string): Promise<void>;
|
|
149
|
-
getMessages(sessionId: string): Promise<UIMessage[]>;
|
|
149
|
+
getMessages(sessionId: string, options?: { isToolCallVisible?: (toolCode?: string, toolName?: string) => boolean }): Promise<UIMessage[]>;
|
|
150
150
|
getToken(): Promise<string>;
|
|
151
151
|
setToken(token: string): void;
|
|
152
152
|
feedback(
|
|
@@ -312,6 +312,15 @@ const messages: UIMessage[] = await sdk.getMessages(sessionId);
|
|
|
312
312
|
`UIMessage[]`:每组的轮级 `artifacts`(与 SSE `done` 同构)挂到该组最后一条 assistant 消息的
|
|
313
313
|
`artifacts`;`roundId` 为 null(存量旧数据)时 SDK 随机生成,业务方无需处理。
|
|
314
314
|
|
|
315
|
+
可选第二参注入工具过滤(与 widget 的 `toolCallDisplay.hidden/visibleTools` 同一谓词,纯 API 模式自行控制):
|
|
316
|
+
|
|
317
|
+
```ts
|
|
318
|
+
const messages = await sdk.getMessages(sessionId, {
|
|
319
|
+
// 返回 false 的工具调用/结果不出现在历史里;工具 id(toolCode)优先、展示名兜底
|
|
320
|
+
isToolCallVisible: (toolCode, toolName) => toolCode !== "query_order",
|
|
321
|
+
});
|
|
322
|
+
```
|
|
323
|
+
|
|
315
324
|
### 5.6 renameConversation() / deleteConversation()
|
|
316
325
|
|
|
317
326
|
```ts
|
|
@@ -478,18 +487,28 @@ export interface MountOptions {
|
|
|
478
487
|
logo?: string; // floating 首页居中 Logo(URL),默认 SDK 内置 Logo
|
|
479
488
|
triggerLogo?: string; // floating 触发按钮 Logo(URL),默认 SDK 内置 Logo
|
|
480
489
|
showTimestamp?: boolean; // 显示消息时间戳,默认 false 不显示
|
|
490
|
+
/**
|
|
491
|
+
* 工具调用展示控制(单一配置面):显示开关 + 白名单。
|
|
492
|
+
* 未配置 = 全显示(现状)。工具条恒收起、点击展开(无流式自动展开)。
|
|
493
|
+
*/
|
|
494
|
+
toolCallDisplay?: {
|
|
495
|
+
/** 隐藏工具调用与返回(tool_call + tool_result 双向过滤);默认 false 全显示 */
|
|
496
|
+
hidden?: boolean;
|
|
497
|
+
/** 白名单:其中的工具照常显示,其余全藏。条目为工具 id(code,admin 工具管理-编码列),
|
|
498
|
+
* 兼容展示名匹配(忽略大小写)。仅在 hidden: true 时生效;缺省/空 = 全藏 */
|
|
499
|
+
visibleTools?: string[];
|
|
500
|
+
};
|
|
481
501
|
/** 附件上传器(完全自定义,优先于 nosUpload)。不配置则输入区无附件按钮。 */
|
|
482
502
|
attachmentUploader?: (file: File) => Promise<ChatAttachment>;
|
|
483
503
|
/** 内置 NOS 直传(推荐):配置即用,📎 按钮 + chip 进度 + 断点续传全内置 */
|
|
484
504
|
nosUpload?: { baseURL: string; headers?: Record<string, string>; trunkSize?: number };
|
|
485
505
|
/**
|
|
486
|
-
*
|
|
487
|
-
*
|
|
488
|
-
* 对象出现(含 {}
|
|
506
|
+
* 思维链 ThoughtChain 式节点:步骤默认收起、点击展开,
|
|
507
|
+
* 收起条显示「已深度思考 · 用时 Ns」(仅 live 轮有耗时,历史回显无数据)。
|
|
508
|
+
* 对象出现(含 {})即开启;子项仅覆盖(如 { showDuration: false })。
|
|
489
509
|
*/
|
|
490
510
|
collapse?: {
|
|
491
|
-
thinking?: {
|
|
492
|
-
toolCall?: { expandWhileStreaming?: boolean };
|
|
511
|
+
thinking?: { showDuration?: boolean };
|
|
493
512
|
};
|
|
494
513
|
}
|
|
495
514
|
|
package/dist/index.cjs
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const
|
|
2
|
-
`).map(
|
|
3
|
-
${
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const y=require("./nosUploader-BD9gHyMF.cjs");function I(r){if(Array.isArray(r))return r.map(e=>I(e));if(r&&typeof r=="object"&&r.constructor===Object){const e={};for(const[i,n]of Object.entries(r)){const d=i.replace(/_([a-z])/g,(t,s)=>s.toUpperCase());e[d]=I(n)}return e}return r}const C="/api/agent/runtime/v1";class S{constructor(e){this.refreshing=null,this.tokenPromise=null;const i=e.baseUrl??C;this.baseUrl=i.replace(/\/$/,""),this.tokenGateway=e.tokenGateway.replace(/\/$/,""),this.appId=e.appId??"",this.token=e.token??"",this.botCode=e.botCode,this.tenantId=e.tenantId,this.isAbsoluteUrl=/^https?:\/\//.test(this.baseUrl),this.isAbsoluteGateway=/^https?:\/\//.test(this.tokenGateway),this.loginUrl=e.loginUrl,this.onAuthExpired=e.onAuthExpired}getBotCode(){return this.botCode}getAppKey(){return this.appId}setToken(e){this.token=e}getOrigin(){return typeof window<"u"?window.location.origin:""}async fetchToken(){if(this.token)return this.token;if(this.tokenPromise)return this.tokenPromise;this.tokenPromise=(async()=>{const i=`${this.isAbsoluteGateway?this.tokenGateway:`${this.getOrigin()}${this.tokenGateway}`}/superagent/v2/token/generate`,n={"Content-Type":"application/json"};this.tenantId!=null&&(n["X-Tenant-Id"]=String(this.tenantId));const d=await fetch(i,{method:"POST",headers:n,body:JSON.stringify({botCode:this.botCode})});if(!d.ok)throw new Error(`HTTP ${d.status}: ${d.statusText}`);const t=await d.json();if(t.code!=="200")throw new Error(t.message||`API error: ${t.code}`);const s=I(t.data);return this.token=s.token,s.appId&&!this.appId&&(this.appId=s.appId),s.token})();try{return await this.tokenPromise}finally{this.tokenPromise=null}}headers(e){return{"Content-Type":"application/json","X-App-Id":this.appId,"X-Token":this.token,...e}}async handleTokenRefresh(){if(this.refreshing)return await this.refreshing,!0;try{return this.token="",this.refreshing=(async()=>{await this.fetchToken()})(),await this.refreshing,!0}catch{return!1}finally{this.refreshing=null}}async request(e,i,n){if(!this.token&&!await this.handleTokenRefresh())throw new Error("SDK token not available: POST /token failed");let d=this.isAbsoluteUrl?`${this.baseUrl}${i}`:`${this.getOrigin()}${this.baseUrl}${i}`;if(n!=null&&n.params){const o=new URLSearchParams;for(const[c,l]of Object.entries(n.params))l!=null&&o.set(c,String(l));const a=o.toString();a&&(d+=`?${a}`)}const t=await fetch(d,{method:e,headers:this.headers(),body:n!=null&&n.body?JSON.stringify(n.body):void 0});if(t.status===401&&!(n!=null&&n.retry)&&await this.handleTokenRefresh())return this.request(e,i,{...n,retry:!0});if(!t.ok){let o=`HTTP ${t.status}: ${t.statusText}`;try{const a=await t.json();a!=null&&a.message&&(o=a.message)}catch{}throw new Error(o)}const s=await t.json();if(s.code!=="200")throw new Error(s.message||`API error: ${s.code}`);return I(s.data)}get(e,i){return this.request("GET",e,{params:i})}post(e,i){return this.request("POST",e,{body:i})}patch(e,i){return this.request("PATCH",e,{body:i})}del(e){return this.request("DELETE",e)}async streamPost(e,i,n){if(!this.token&&!await this.handleTokenRefresh())throw new Error("SDK token not available: POST /token failed");const d=this.isAbsoluteUrl?`${this.baseUrl}${e}`:`${this.getOrigin()}${this.baseUrl}${e}`,t=await fetch(d,{method:"POST",headers:this.headers(),body:JSON.stringify(i),signal:n});if(t.status===401){const s=await y.peekCookieExpired(t.clone());if(s.isCookieExpired&&typeof(i==null?void 0:i.message)=="string"){y.stashPendingChat({botCode:this.botCode,message:i.message,sessionId:i.sessionId??""});const a=y.resolveLoginUrl(s.loginUrl??this.loginUrl);return this.onAuthExpired?this.onAuthExpired({loginUrl:a,sessionId:s.sessionId,botCode:this.botCode}):a&&window.location.replace(a),t}if(await this.handleTokenRefresh())return fetch(d,{method:"POST",headers:this.headers(),body:JSON.stringify(i),signal:n})}return t}}function m(r){return typeof r=="string"?r:Array.isArray(r)?r.map(e=>{if(typeof e=="string")return e;if(e&&typeof e=="object"){if(typeof e.text=="string")return e.text;if(e.type)return`[${e.type}${e.mime_type?": "+e.mime_type:""}]`}return""}).join(""):r==null?"":String(r)}function k(r){const e=r.split(`
|
|
2
|
+
`).map(o=>o.trim()).filter(o=>o.length>0);let i,n,d;for(const o of e)if(o.startsWith("id:"))i=o.slice(3).trim();else if(o.startsWith("event:"))n=o.slice(6).trim();else if(o.startsWith("data:")){const a=o.slice(5).trim();d=d?`${d}
|
|
3
|
+
${a}`:a}if(d===void 0)return null;let t;try{t=JSON.parse(d)}catch{return null}const s=t.type==="tool_result"&&typeof t.content=="object"&&t.content?t.content:void 0;switch(t.type){case"session.start":return{type:"session.start",content:"",sessionId:t.sessionId??t.session_id??"",roundId:t.roundId??t.round_id,event:n,id:i};case"user":return{type:"user",content:m(t.content),event:n,id:i};case"thinking":return{type:"thinking",content:m(t.content),event:n,id:i};case"ai":return{type:"ai",content:m(t.content),event:n,id:i};case"tool_call":return{type:"tool_call",content:t.name??"",toolName:t.name,toolCode:t.code,toolCallId:t.id,args:typeof t.args=="string"?t.args:JSON.stringify(t.args??{}),event:n,id:i};case"tool_delta":return{type:"tool_delta",content:typeof t.content=="string"?t.content:"",toolCallId:t.tool_call_id??t.toolCallId??"",event:n,id:i};case"tool_result":{const o=s==null?void 0:s.result;let a;return typeof o=="string"?a=o:o!=null&&typeof o=="object"?a=JSON.stringify(o):s&&typeof s=="object"&&Object.keys(s).length>0?a=JSON.stringify(s):a=m(t.output??""),{type:"tool_result",content:a,toolName:t.name,toolCode:t.code,toolCallId:t.id,artifacts:Array.isArray(t.artifacts)?t.artifacts:void 0,renderMode:(s==null?void 0:s.render_mode)??t.render_mode??t.renderMode,html:(s==null?void 0:s.html)??t.html,markdown:(s==null?void 0:s.markdown)??t.markdown,defaultExpanded:t.default_expanded??t.defaultExpanded,event:n,id:i}}case"done":return{type:"done",content:m(t.content),sessionId:t.sessionId??t.session_id??"",messageId:t.messageId??t.message_id,roundId:t.roundId??t.round_id,artifacts:Array.isArray(t.artifacts)?t.artifacts:void 0,event:n,id:i};case"stop":return{type:"stop",content:m(t.content),sessionId:t.sessionId??t.session_id??"",messageId:t.messageId??t.message_id,roundId:t.roundId??t.round_id,event:n,id:i};case"error":return{type:"error",content:t.message??"Unknown error",event:n,id:i};case"interrupt":return{type:"interrupt",content:t.content??"",interrupt:{interruptId:t.interruptId??t.interrupt_id??"",interruptType:t.interruptType??t.interrupt_type??"confirm",content:t.content??"",options:t.options,placeholder:t.placeholder,inputType:t.inputType??t.input_type,maxLength:t.maxLength??t.max_length,required:t.required,fields:t.fields,metadata:t.metadata},event:n,id:i};default:return null}}async function b(r,e,i){if(!r.body){i(new Error("Response body is null"));return}const n=r.body.getReader(),d=new TextDecoder;let t="";try{for(;;){const{value:s,done:o}=await n.read();if(o)break;t+=d.decode(s,{stream:!0});let a;for(;(a=t.indexOf(`
|
|
4
4
|
|
|
5
|
-
`))!==-1;){const c=t.slice(0,
|
|
5
|
+
`))!==-1;){const c=t.slice(0,a);t=t.slice(a+2);const l=k(c);l&&e(l)}}if(t.trim()){const s=k(t);s&&e(s)}}catch(s){(s==null?void 0:s.name)!=="AbortError"&&i(s instanceof Error?s:new Error(String(s)))}finally{try{n.releaseLock()}catch{}}}function A(r,e){var t;const i=new AbortController,n=e.signal?_(e.signal,i.signal):i.signal,d={botCode:r.getBotCode(),message:e.message,sessionId:e.sessionId,stream:e.stream!==!1,...(t=e.attachments)!=null&&t.length?{attachments:e.attachments.map(({url:s,...o})=>o)}:{}};return d.stream?r.streamPost("/chat",d,n).then(async s=>{var o;if(!s.ok){let a=`HTTP ${s.status}`;try{const c=await s.json();c!=null&&c.message&&(a=c.message)}catch{}(o=e.onError)==null||o.call(e,new Error(a));return}return b(s,a=>{var c,l,h,u,g,f,p,w;a.type==="done"&&a.sessionId?((c=e.onMessage)==null||c.call(e,a),(l=e.onDone)==null||l.call(e,{sessionId:a.sessionId,content:a.content,messageId:a.messageId,roundId:a.roundId,artifacts:a.artifacts})):a.type==="done"?((h=e.onMessage)==null||h.call(e,a),(u=e.onDone)==null||u.call(e,{sessionId:"",content:a.content,messageId:a.messageId,roundId:a.roundId,artifacts:a.artifacts})):a.type==="stop"?((g=e.onMessage)==null||g.call(e,a),(f=e.onDone)==null||f.call(e,{sessionId:a.sessionId??"",content:a.content,messageId:a.messageId,roundId:a.roundId})):a.type==="error"?(p=e.onError)==null||p.call(e,new Error(a.content)):(w=e.onMessage)==null||w.call(e,a)},a=>{var c;return(c=e.onError)==null?void 0:c.call(e,a)})}).catch(s=>{var o;(s==null?void 0:s.name)!=="AbortError"&&((o=e.onError)==null||o.call(e,s instanceof Error?s:new Error(String(s))))}):r.post("/chat",d).then(s=>{var o;(o=e.onDone)==null||o.call(e,{sessionId:s.sessionId,content:s.content??"",messageId:s.messageId})}).catch(s=>{var o;(o=e.onError)==null||o.call(e,s instanceof Error?s:new Error(String(s)))}),i}function _(r,e){const i=new AbortController,n=()=>i.abort();return r.addEventListener("abort",n,{once:!0}),e.addEventListener("abort",n,{once:!0}),(r.aborted||e.aborted)&&i.abort(),i.signal}async function $(r){return(await r.post("/chat/sessions",{botCode:r.getBotCode()})).sessionId}function v(r){return{sessionId:r.threadId??r.sessionId,title:r.title,createTime:r.createTime,updateTime:r.updateTime}}async function x(r,e){const i=await r.get("/chat/conversations",{botCode:r.getBotCode(),page:(e==null?void 0:e.page)??1,size:(e==null?void 0:e.size)??20});return{...i,items:i.items.map(v)}}async function E(r,e,i){await r.patch(`/chat/conversations/${e}`,{title:i})}async function P(r,e){await r.del(`/chat/conversations/${e}`)}async function O(r,e,i){const n=await r.get(`/chat/conversations/${e}/messages`);return U(n,i)}function T(){return`r_${Date.now().toString(36)}_${Math.random().toString(36).slice(2,10)}`}function U(r,e){var t;const i=r.length>0&&Array.isArray((t=r[0])==null?void 0:t.data),n=[];if(i)for(const s of r)n.push({roundId:s.roundId??T(),artifacts:Array.isArray(s.artifacts)&&s.artifacts.length?s.artifacts:void 0,items:Array.isArray(s.data)?s.data:[]});else n.push({roundId:T(),items:r});const d=[];for(const s of n){const o=N(s.items,e);for(const a of o)a.roundId=s.roundId;if(s.artifacts){const a=o.findLast(c=>c.role==="assistant");a?a.artifacts=s.artifacts:o.push({id:`msg_${s.roundId}`,role:"assistant",parts:[],timestamp:Date.now(),roundId:s.roundId,artifacts:s.artifacts})}d.push(...o)}return d}function N(r,e){var o,a;const i=[...r].sort((c,l)=>{const h=new Date(c.createTime??0).getTime()||0,u=new Date(l.createTime??0).getTime()||0;return h!==u?h-u:(c.seq??0)-(l.seq??0)}),n=new Map;for(const c of i)c.role==="tool"&&c.toolCallId&&n.set(c.toolCallId,c.content||"");const d=new Set,t=[],s=(c,l,h,u,g)=>{const f=t[t.length-1];(f==null?void 0:f.role)==="assistant"?(f.parts.push(...c),f.id=l,u&&(f.messageId=u,f.feedback=g??null)):t.push({id:l,role:"assistant",parts:[...c],timestamp:h,messageId:u,feedback:g??null})};for(const c of i){if(c.role==="system")continue;const l=String(c.id??c.messageId??`msg_${Date.now()}`),h=new Date(c.createTime??"").getTime()||Date.now();if(c.role==="human"){const u=(c.attachments??[]).map(f=>({type:"attachment",attachment:{nosKey:f.nosKey??f.attachmentId??"",filename:f.filename??"file",size:f.size??void 0,mime:f.mime??void 0,url:f.url??void 0}})),g=(o=c.metadata)==null?void 0:o.raw_message;t.push({id:l,role:"user",parts:[...u,{type:"text",content:m(c.content)}],timestamp:h,messageId:c.messageId,rawContent:typeof g=="string"&&g?g:void 0});continue}if(c.role==="ai"){const u=M(c,n,d,e);u.length>0&&s(u,l,h,c.messageId,c.feedback);continue}if(c.role==="tool"){if(c.toolCallId&&d.has(c.toolCallId))continue;const u=e==null?void 0:e.isToolCallVisible;if(u&&!u(c.toolCode??((a=c.metadata)==null?void 0:a.toolCode),c.toolName))continue;s([L(c)],l,h)}}return t}function M(r,e,i,n){const d=[];r.reasoning&&d.push({type:"thinking",content:r.reasoning}),r.content&&d.push({type:"text",content:m(r.content)});for(const t of r.toolCalls??[])if(t.is_interrupt??t.isInterrupt)i.add(t.id),d.push(D(t,e));else{const s=n==null?void 0:n.isToolCallVisible;if(s&&!s(t.code??t.name,t.name))continue;d.push(q(t))}return d}function D(r,e){const i=e.has(r.id),n=typeof r.args=="object"?r.args:{};return{type:"interrupt",interrupt:{interruptId:r.id??"",interruptType:n.interruptType??"input",content:n.content??"",options:n.options,placeholder:n.placeholder,inputType:n.inputType,maxLength:n.maxLength,required:n.required,fields:n.fields,metadata:n.metadata},resolved:i,response:i?{action:"submit",value:j(e.get(r.id))}:void 0}}function q(r){let e;try{e=typeof r.args=="string"?r.args:JSON.stringify(r.args??{})}catch{e=String(r.args??"{}")}return{type:"tool_call",toolName:r.name??"",toolCallId:r.id??"",args:e}}function L(r){var i,n,d,t,s;const e=Array.isArray(r.artifacts)?r.artifacts:void 0;return{type:"tool_result",toolName:r.toolName??"",toolCallId:r.toolCallId??"",content:m(r.content),artifacts:e,renderMode:r.renderMode??((i=r.metadata)==null?void 0:i.renderMode)??((n=r.metadata)==null?void 0:n.render_mode),html:r.html??((d=r.metadata)==null?void 0:d.html),markdown:r.markdown??((t=r.metadata)==null?void 0:t.markdown),defaultExpanded:r.defaultExpanded??((s=r.metadata)==null?void 0:s.default_expanded)}}function j(r){if(r!=null)try{return JSON.parse(r)}catch{return r}}async function J(r,e,i,n,d,t,s){const o=await r.streamPost(`/chat/interrupt/${e}/respond`,{sessionId:i,action:n.action,value:n.value},s);if(!o.ok){const a=new Error(`HTTP ${o.status}`);throw t==null||t(a),a}d&&await b(o,a=>{a.type==="error"?t==null||t(new Error(a.content)):d(a)},a=>t==null?void 0:t(a))}async function G(r){return r.get(`/chat/bots/${r.getBotCode()}/skills`)}async function R(r,e){await r.post("/chat/stop",{sessionId:e})}function B(r){const e=new S(r);return{botCode:e.getBotCode(),getToken:()=>e.fetchToken(),createSession:()=>$(e),chat:n=>A(e,n),listConversations:n=>x(e,n),renameConversation:(n,d)=>E(e,n,d),deleteConversation:n=>P(e,n),getMessages:(n,d)=>O(e,n,d),respondInterrupt:(n,d,t,s,o,a)=>J(e,n,d,t,s,o,a),setToken:n=>e.setToken(n),feedback:async(n,d,t)=>{const s={type:d};d==="dislike"&&((t==null?void 0:t.reason)!=null&&(s.reason=t.reason),t!=null&&t.remark&&(s.remark=t.remark)),await e.post(`/chat/messages/${n}/feedback`,s)},cancelFeedback:async n=>{await e.del(`/chat/messages/${n}/feedback`)},listSkills:()=>G(e),stopGeneration:n=>R(e,n)}}exports.createNosUploader=y.createNosUploader;exports.createSuperAgent=B;
|
package/dist/index.d.ts
CHANGED
|
@@ -27,6 +27,8 @@ export declare interface ChatEvent {
|
|
|
27
27
|
type: "session.start" | "user" | "thinking" | "ai" | "tool_call" | "tool_delta" | "tool_result" | "done" | "stop" | "error" | "interrupt";
|
|
28
28
|
content: string;
|
|
29
29
|
toolName?: string;
|
|
30
|
+
/** 工具的 LLM 调用标识(SSE 帧 code;toolCallDisplay.visibleTools 白名单按它匹配) */
|
|
31
|
+
toolCode?: string;
|
|
30
32
|
toolCallId?: string;
|
|
31
33
|
args?: string;
|
|
32
34
|
sessionId?: string;
|
|
@@ -233,7 +235,9 @@ export declare interface SuperAgentSDK {
|
|
|
233
235
|
listConversations(params?: ListConversationsParams): Promise<ListConversationsResult>;
|
|
234
236
|
renameConversation(sessionId: string, title: string): Promise<void>;
|
|
235
237
|
deleteConversation(sessionId: string): Promise<void>;
|
|
236
|
-
getMessages(sessionId: string
|
|
238
|
+
getMessages(sessionId: string, options?: {
|
|
239
|
+
isToolCallVisible?: (toolCode?: string, toolName?: string) => boolean;
|
|
240
|
+
}): Promise<UIMessage[]>;
|
|
237
241
|
/** 响应中断事件(返回 SSE 流,后端继续推送后续事件);signal 供调用方中断续流 */
|
|
238
242
|
respondInterrupt(interruptId: string, sessionId: string, response: InterruptResponse, onMessage?: (event: ChatEvent) => void, onError?: (error: Error) => void, signal?: AbortSignal): Promise<void>;
|
|
239
243
|
setToken(token: string): void;
|