@amaster.ai/copilot-client 1.1.0-beta.70 → 1.1.0-beta.71
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.cjs +3 -3
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +3 -3
- package/dist/index.js.map +1 -1
- package/package.json +2 -2
package/dist/index.cjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
'use strict';var httpClient=require('@amaster.ai/http-client'),eventsourceParser=require('eventsource-parser'),
|
|
2
|
-
`)}async function*
|
|
3
|
-
exports.createCopilotClient=
|
|
1
|
+
'use strict';var httpClient=require('@amaster.ai/http-client'),eventsourceParser=require('eventsource-parser'),_=require('miniprogram-text-decoder');function _interopDefault(e){return e&&e.__esModule?e:{default:e}}var ___default=/*#__PURE__*/_interopDefault(_);var s=globalThis;function I(){return typeof s?.Taro?.request=="function"?s.Taro.request.bind(s.Taro):typeof s?.wx?.request=="function"?s.wx.request.bind(s.wx):typeof s?.tt?.request=="function"?s.tt.request.bind(s.tt):typeof s?.my?.request=="function"?s.my.request.bind(s.my):typeof s?.swan?.request=="function"?s.swan.request.bind(s.swan):typeof s?.qq?.request=="function"?s.qq.request.bind(s.qq):typeof s?.jd?.request=="function"?s.jd.request.bind(s.jd):null}function h(){let t=typeof globalThis<"u"?globalThis.crypto:void 0;return t&&typeof t.randomUUID=="function"?t.randomUUID():t&&typeof t.getRandomValues=="function"?"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,e=>{let c=(t.getRandomValues(new Uint8Array(1))[0]??0)%16;return (e==="x"?c:c&3|8).toString(16)}):"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,e=>{let i=Math.random()*16|0;return (e==="x"?i:i&3|8).toString(16)})}var q=class{constructor(){this.aborted=false;this.listeners=[];this.signal={aborted:false,addEventListener:(e,i)=>{this.listeners.push(i);}};}abort(){this.aborted||(this.aborted=true,this.signal.aborted=true,this.listeners.forEach(e=>e()));}};function j(){return typeof AbortController<"u"?new AbortController:new q}function M(t){let e=/^www\.([\da-z-]+)(?:-[^.]+)?\.[\w-]+\.(?:local|ai|cn)$/.exec(t);if(e?.[1])return e[1];let i=/^([\da-z-]+)(?:-[^.]+)?\.[\w-]+\.(?:local|ai|cn)$/.exec(t);return i?.[1]?i[1]:null}function $(){if(typeof window>"u")return null;try{let t=window.location.href,e=/\/app\/([\da-z-]+)(?:\/|$)/.exec(t);return e?.[1]?e[1]:M(window.location.hostname)}catch{return null}}var R=null,B=null;function v(t){let e=t?M(t):$();return e||(R||(R=h()),R)}async function H(t,e,i={},c){return new Promise(o=>{let n=new Uint8Array(0),C=new ___default.default("utf-8",{fatal:false}),d=false,f=false,g=[],r=null,a=()=>new Promise(u=>{g.length>0?u(g.shift()):d?u(null):r=u;}),l=u=>{u&&(g.push(u),r&&(r(g.shift()),r=null));},m=u=>{if(!(f||d||!u.data))try{let S=new Uint8Array(u.data),T=new Uint8Array(n.length+S.length);T.set(n),T.set(S,n.length),n=T;let x=0;for(;x<n.length;){let A=n.subarray(x),b=C.decode(A,{stream:!1});if(b.length===0)break;if(b.includes("\uFFFD")){let P=b.lastIndexOf("\uFFFD")===0?0:b.indexOf("\uFFFD");if(P<=0)break;let k=b.slice(0,P);k&&l(k);let O=new TextEncoder().encode(k);x+=O.length;break}else l(b),x+=A.length;}n=n.subarray(x);}catch(S){console.error("[mini stream] chunk process error:",S);}},w=u=>{u.header?.["content-type"]?.includes("text/event-stream")===false&&console.warn("Warning: server did not return event-stream");},p=I();if(!p)return;let y;try{y=p({url:t,method:"POST",header:{"Content-Type":"application/json",Accept:"text/event-stream",...i},data:typeof e=="string"?e:JSON.stringify(e),responseType:"arraybuffer",enableChunked:!0,timeout:3e5,success:()=>{if(n.length>0){let u=C.decode(n,{stream:!0});l(u);}d=!0,r?.(null);},fail:()=>{f=!0,d=!0,r?.(null);}}),c&&(c.aborted?y.abort():c.addEventListener("abort",()=>{y.abort();})),y.onChunkReceived?.(m),y.onHeadersReceived?.(w),o({ok:!0,statusText:"OK",read:async()=>f?null:a()});}catch(u){console.error("miniReq error",u);}})}async function L(t,e,i,c){let o=i?.(),n=o?{Authorization:`Bearer ${o}`}:{};if(I())return H(t,e,n,c);let d={"Content-Type":"application/json",...n},f=await fetch(t,{method:"POST",headers:d,credentials:"include",body:JSON.stringify(e),signal:c});if(!f.body)return {ok:f.ok,statusText:f.statusText,read:async()=>null};let g=f.body.getReader(),r=new TextDecoder;return {ok:f.ok,statusText:f.statusText,read:async()=>{let{done:a,value:l}=await g.read();return a?null:r.decode(l,{stream:true})}}}function D(t){return typeof t=="string"?[{kind:"text",text:t}]:t.map(e=>{switch(e.type){case "text":return {kind:"text",text:e.text};case "image":return e.data?{kind:"file",file:{bytes:e.data,mimeType:e.mimeType||"image/png"}}:e.url?{kind:"file",file:{uri:e.url,mimeType:e.mimeType||"image/png"}}:null;case "file":return e.data?{kind:"file",file:{bytes:e.data,...e.mimeType&&{mimeType:e.mimeType},...e.name&&{name:e.name}}}:e.url?{kind:"file",file:{uri:e.url,...e.mimeType&&{mimeType:e.mimeType},...e.name&&{name:e.name}}}:null;default:return null}}).filter(e=>e!==null)}function F(t){return typeof t=="string"?t:t.filter(e=>e.type==="text").map(e=>e.text).join(`
|
|
2
|
+
`)}async function*V(t,e){let i=[],c=eventsourceParser.createParser({onEvent:o=>{try{i.push(JSON.parse(o.data));}catch(n){console.error("[parseSSEStream] Parse error:",n);}}});try{for(;!e?.aborted;){let o=await t.read();if(o===null)break;if(o)for(c.feed(o);i.length>0;){let n=i.shift();n&&(yield n);}}}catch(o){if(e?.aborted)return;console.error("[parseSSEStream] Stream error:",o);}}function G(t=httpClient.createHttpClient(),e,i,c){let o="",n=null,C=undefined;if(C&&(o=C.TARO_APP_API_BASE_URL||C.VITE_API_BASE_URL||""),!o)try{o=process.env.TARO_APP_API_BASE_URL||process.env.VITE_API_BASE_URL||"";}catch{}o=String(o||"").trim();let d=`${e||o}/api/proxy/builtin/platform/copilot`;async function*f(r,a){try{let l=await L(d,r,i,a);if(!l.ok)throw new Error(`Stream request failed: ${l.statusText}`);yield*V(l,a);}catch(l){if(a?.aborted)return;console.error("[sendMessageStream] Error:",l);}}let g=()=>{let r=v();if(typeof s?.wx?.request=="function"){let m=d?d.replace(/^https?:\/\//,"").split("/")[0]:"";r=v(m);}let a=c?.()??B??(B=`anonymous-${h()}`);return `${r}:${a}`};return {async*chat(r,a={}){let{taskId:l}=a;n=j();let m=n?.signal;try{let w=r.find(x=>x.role==="system"),p=r.filter(x=>x.role!=="system"),y=p[p.length-1],u=y?D(y.content):[{kind:"text",text:""}],S=w?F(w.content):void 0,T={jsonrpc:"2.0",id:h(),method:"message/stream",params:{message:{contextId:g(),kind:"message",messageId:h(),role:"user",parts:u,...l&&{taskId:l},...S&&{metadata:{systemPrompt:S}}}}};for await(let x of f(T,m)){if(m?.aborted)break;yield x;}}finally{n=null;}},cancelChat(r){n?.abort(),n=null;let a={jsonrpc:"2.0",id:h(),method:"tasks/cancel",params:{id:r}};return t.request({url:d,method:"POST",data:a})},async getHistory(r=50,a){try{let m=(await t.request({url:d,method:"POST",data:{jsonrpc:"2.0",method:"messages/list",id:h(),params:{filter:{contextId:g()},limit:r,...a?{next:a}:{}}}}))?.data?.result||{},w=m?.messages||[],p=m?.next||"";return {messages:w,next:p,hasMore:!!p}}catch{}},async newConversation(){try{await t.request({url:d,method:"POST",data:{jsonrpc:"2.0",method:"messages/clear",id:h(),params:{contextId:g()}}});}catch{}},async getChatStatus(r){try{let a={jsonrpc:"2.0",id:h(),method:"tasks/get",params:r?{id:r}:{contextId:g()}},m=(await t.request({url:d,method:"POST",data:a}))?.data?.result;return {working:m?.status?.state==="working",taskId:m?.id,error:m?.error?.message||""}}catch(a){return {working:false,error:a?.message||""}}}}}
|
|
3
|
+
exports.createCopilotClient=G;//# sourceMappingURL=index.cjs.map
|
|
4
4
|
//# sourceMappingURL=index.cjs.map
|
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/copilot-client.ts"],"names":["g","getMiniProgramRequest","generateUUID","cryptoObj","c","r","SimpleAbortController","_","cb","createAbortController","getAppIdFromHostname","hostname","wwwMatch","domainMatch","extractAppIdFromUrl","url","pathMatch","cachedAppId","cachedAnonymousUid","getAppId","urlAppId","createWeChatMiniProgramStream","data","authHeader","signal","resolve","chunkBuffer","textDecoder","MiniProgramTextDecoder","ended","errorOccurred","dataQueue","resolveRead","pendingRead","pushChunk","text","chunkListener","res","newChunk","merged","decodeOffset","remaining","decoded","lastGoodIndex","goodPart","encodedGood","err","headersListener","miniReq","requestTask","finalText","error","createStream","getAccessToken","token","buffer","completed","failed","position","opts","ret","chunk","headers","response","reader","decoder","done","value","convertToA2AParts","content","part","extractTextFromContent","parseSSEStream","streamResponse","queue","parser","createParser","event","item","createCopilotClient","http","createHttpClient","baseUrl","getUserUid","envBaseUrl","activeChatAbortController","metaEnv","sendMessageStream","request","getContextId","appId","userUid","messages","chatOptions","taskId","systemMsg","m","nonSystemMsgs","lastUserMsg","parts","systemPrompt","limit","next","result","_next"],"mappings":"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","file":"index.cjs","sourcesContent":["/* eslint-disable no-undef, no-unused-vars */\nimport type {\n CancelTaskRequest,\n CancelTaskResponse,\n Part,\n SendStreamingMessageRequest,\n SendStreamingMessageResponse,\n} from \"@a2a-js/sdk\";\nimport { type ClientResult, createHttpClient, type HttpClient } from \"@amaster.ai/http-client\";\nimport { createParser } from \"eventsource-parser\";\nimport MiniProgramTextDecoder from \"miniprogram-text-decoder\";\n// import MiniProgramTextEncoder from \"miniprogram-text-encoder\";\n\n// ============ Internal: Platform Detection (same as http-client) ============\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nconst g = globalThis as any;\n\nfunction getMiniProgramRequest(): ((_opts: any) => any) | null {\n if (typeof g?.Taro?.request === \"function\") return g.Taro.request.bind(g.Taro);\n if (typeof g?.wx?.request === \"function\") return g.wx.request.bind(g.wx);\n if (typeof g?.tt?.request === \"function\") return g.tt.request.bind(g.tt);\n if (typeof g?.my?.request === \"function\") return g.my.request.bind(g.my);\n if (typeof g?.swan?.request === \"function\") return g.swan.request.bind(g.swan);\n if (typeof g?.qq?.request === \"function\") return g.qq.request.bind(g.qq);\n if (typeof g?.jd?.request === \"function\") return g.jd.request.bind(g.jd);\n return null;\n}\n\n// ============ Internal: UUID Generator ============\n\nfunction generateUUID(): string {\n const cryptoObj = typeof globalThis !== \"undefined\" ? globalThis.crypto : undefined;\n\n if (cryptoObj && typeof cryptoObj.randomUUID === \"function\") {\n return cryptoObj.randomUUID();\n }\n\n if (cryptoObj && typeof cryptoObj.getRandomValues === \"function\") {\n return \"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx\".replace(/[xy]/g, (c) => {\n const randomValues = cryptoObj.getRandomValues(new Uint8Array(1));\n const r = (randomValues[0] ?? 0) % 16;\n const v = c === \"x\" ? r : (r & 0x3) | 0x8;\n return v.toString(16);\n });\n }\n\n return \"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx\".replace(/[xy]/g, (c) => {\n const r = (Math.random() * 16) | 0;\n const v = c === \"x\" ? r : (r & 0x3) | 0x8;\n return v.toString(16);\n });\n}\n\n// ============ AbortController Polyfill (Mini Program Safe) ============\nclass SimpleAbortController {\n aborted = false;\n private listeners: (() => void)[] = [];\n\n signal = {\n aborted: false,\n addEventListener: (_: \"abort\", cb: () => void) => {\n this.listeners.push(cb);\n },\n };\n\n abort() {\n if (this.aborted) return;\n this.aborted = true;\n this.signal.aborted = true;\n this.listeners.forEach((cb) => cb());\n }\n}\n\nfunction createAbortController(): AbortController | SimpleAbortController {\n if (typeof AbortController !== \"undefined\") {\n return new AbortController();\n }\n return new SimpleAbortController();\n}\n\n// ============ Internal: URL Utilities ============\n\nfunction getAppIdFromHostname(hostname: string): string | null {\n // Pattern 1: www.{app_id}.domain.tld or www.{app_id}-{env}.domain.tld\n const wwwMatch = /^www\\.([\\da-z-]+)(?:-[^.]+)?\\.[\\w-]+\\.(?:local|ai|cn)$/.exec(hostname);\n if (wwwMatch?.[1]) return wwwMatch[1];\n\n // Pattern 2: {app_id}-{env}.domain.tld or {app_id}.domain.tld\n const domainMatch = /^([\\da-z-]+)(?:-[^.]+)?\\.[\\w-]+\\.(?:local|ai|cn)$/.exec(hostname);\n if (domainMatch?.[1]) return domainMatch[1];\n\n return null;\n}\n\nfunction extractAppIdFromUrl(): string | null {\n if (typeof window === \"undefined\") return null;\n\n try {\n const url = window.location.href;\n const pathMatch = /\\/app\\/([\\da-z-]+)(?:\\/|$)/.exec(url);\n if (pathMatch?.[1]) return pathMatch[1];\n return getAppIdFromHostname(window.location.hostname);\n } catch {\n return null;\n }\n}\n\n// Cache appId for session consistency\nlet cachedAppId: string | null = null;\n\n// Cache anonymous user ID for session consistency\nlet cachedAnonymousUid: string | null = null;\n\nfunction getAppId(hostname?: string): string {\n const urlAppId = hostname ? getAppIdFromHostname(hostname) : extractAppIdFromUrl();\n if (urlAppId) return urlAppId;\n if (!cachedAppId) cachedAppId = generateUUID();\n return cachedAppId;\n}\n\n// ============ Internal: Streaming ============\n\ninterface StreamResponse {\n ok: boolean;\n statusText: string;\n read(): Promise<string | null>;\n}\n\n// 小程序专用的流式请求\nasync function createWeChatMiniProgramStream(\n url: string,\n data: unknown,\n authHeader: Record<string, string> = {},\n signal?: AbortSignal\n): Promise<StreamResponse> {\n return new Promise<StreamResponse>((resolve) => {\n let chunkBuffer = new Uint8Array(0);\n const textDecoder = new MiniProgramTextDecoder(\"utf-8\", { fatal: false });\n\n let ended = false;\n let errorOccurred = false;\n\n const dataQueue: string[] = [];\n let resolveRead: ((value: string | null) => void) | null = null;\n\n const pendingRead = () =>\n new Promise<string | null>((r) => {\n if (dataQueue.length > 0) {\n r(dataQueue.shift()!);\n } else if (ended) {\n r(null);\n } else {\n resolveRead = r;\n }\n });\n\n const pushChunk = (text: string) => {\n if (!text) return;\n dataQueue.push(text);\n if (resolveRead) {\n resolveRead(dataQueue.shift()!);\n resolveRead = null;\n }\n };\n\n const chunkListener = (res: any) => {\n if (errorOccurred || ended || !res.data) return;\n\n try {\n const newChunk = new Uint8Array(res.data as ArrayBuffer);\n\n // 追加\n const merged = new Uint8Array(chunkBuffer.length + newChunk.length);\n merged.set(chunkBuffer);\n merged.set(newChunk, chunkBuffer.length);\n chunkBuffer = merged;\n\n let decodeOffset = 0;\n\n while (decodeOffset < chunkBuffer.length) {\n // 尝试从当前偏移解码尽可能多的内容,但 stream: false\n const remaining = chunkBuffer.subarray(decodeOffset);\n const decoded = textDecoder.decode(remaining, { stream: false });\n\n if (decoded.length === 0) {\n // 连一个字符都解不出来,说明剩余部分不完整,等待下次 chunk\n break;\n }\n\n // 关键:计算真正被成功解码的字节数(不依赖 replacement character)\n // 方法1:利用 replacement character 出现的位置来推断(较可靠)\n // 方法2:更简单粗暴但在大多数场景够用:假设没有 � 就全消费,有 � 则回退\n if (decoded.includes(\"�\")) {\n // 有替换字符 → 说明后面有不完整序列,不能全消费\n // 保守策略:本次只消费到最后一个完整字符之前\n const lastGoodIndex = decoded.lastIndexOf(\"�\") === 0 ? 0 : decoded.indexOf(\"�\");\n if (lastGoodIndex <= 0) {\n break; // 连开头都不完整\n }\n\n const goodPart = decoded.slice(0, lastGoodIndex);\n if (goodPart) {\n pushChunk(goodPart);\n }\n\n // 估算已消费字节数(不完美,但比原来好很多)\n const encodedGood = new TextEncoder().encode(goodPart);\n decodeOffset += encodedGood.length;\n\n break; // 剩余部分等下次\n } else {\n // 没有 � → 说明本次 remaining 里全是完整字符,可以全部消费\n pushChunk(decoded);\n decodeOffset += remaining.length; // 安全,因为没出现替换字符\n }\n }\n\n // 保留剩余未解码部分\n chunkBuffer = chunkBuffer.subarray(decodeOffset);\n } catch (err) {\n console.error(\"[mini stream] chunk process error:\", err);\n }\n };\n\n const headersListener = (res: any) => {\n if (res.header?.[\"content-type\"]?.includes(\"text/event-stream\") === false) {\n console.warn(\"Warning: server did not return event-stream\");\n }\n };\n\n const miniReq = g.wx.request.bind(g.wx);\n\n let requestTask: any;\n\n try {\n requestTask = miniReq({\n url,\n method: \"POST\",\n header: {\n \"Content-Type\": \"application/json\",\n Accept: \"text/event-stream\",\n ...authHeader,\n },\n data: typeof data === \"string\" ? data : JSON.stringify(data),\n responseType: \"arraybuffer\",\n enableChunked: true,\n timeout: 300000,\n\n success: () => {\n if (chunkBuffer.length > 0) {\n const finalText = textDecoder.decode(chunkBuffer, { stream: true });\n pushChunk(finalText);\n }\n ended = true;\n resolveRead?.(null);\n },\n\n fail: () => {\n errorOccurred = true;\n ended = true;\n resolveRead?.(null);\n },\n });\n\n // 支持 abort\n if (signal) {\n if (signal.aborted) {\n requestTask.abort();\n } else {\n signal.addEventListener(\"abort\", () => {\n requestTask.abort();\n });\n }\n }\n\n // 关键:监听分块到达\n requestTask.onChunkReceived?.(chunkListener);\n // 可选:监听 HTTP headers 到达(可用于检查状态码)\n requestTask.onHeadersReceived?.(headersListener);\n\n resolve({\n ok: true,\n statusText: \"OK\",\n read: async () => {\n if (errorOccurred) return null;\n return pendingRead();\n },\n });\n } catch (error) {\n console.error(\"miniReq error\", error);\n }\n });\n}\n\nasync function createStream(\n url: string,\n data: unknown,\n getAccessToken?: () => string | null,\n signal?: AbortSignal\n): Promise<StreamResponse> {\n // Get token for authentication\n const token = getAccessToken?.();\n const authHeader: Record<string, string> = token ? { Authorization: `Bearer ${token}` } : {};\n\n if (typeof g?.wx?.request === \"function\") {\n return createWeChatMiniProgramStream(url, data, authHeader, signal);\n }\n const miniReq = getMiniProgramRequest();\n if (miniReq) {\n // Mini-program: buffer full response\n return new Promise((resolve) => {\n let buffer = \"\";\n let completed = false;\n let failed = false;\n let position = 0;\n\n const opts = {\n url,\n method: \"POST\",\n header: {\n \"Content-Type\": \"application/json\",\n Accept: \"text/event-stream\",\n ...authHeader,\n },\n data: typeof data === \"string\" ? data : JSON.stringify(data),\n timeout: 60000,\n success: (res: any) => {\n buffer = typeof res.data === \"string\" ? res.data : JSON.stringify(res.data);\n completed = true;\n },\n fail: (err: any) => {\n console.error(\"[createStream] wx.request failed:\", err);\n failed = true;\n completed = true;\n },\n complete: () => {},\n };\n\n try {\n const ret = miniReq(opts);\n\n if (ret && typeof ret.then === \"function\") {\n ret\n .then((res: any) => {\n buffer = typeof res.data === \"string\" ? res.data : JSON.stringify(res.data);\n completed = true;\n })\n .catch(() => {\n failed = true;\n completed = true;\n });\n }\n } catch (err) {\n console.error(\"[createStream] Exception:\", err);\n failed = true;\n completed = true;\n }\n\n resolve({\n ok: true,\n statusText: \"OK\",\n read: async () => {\n while (!completed && position >= buffer.length) {\n await new Promise((r) => setTimeout(r, 50));\n }\n if (failed) return null;\n if (position >= buffer.length) return completed ? null : \"\";\n const chunk = buffer.slice(position);\n position = buffer.length;\n return chunk;\n },\n });\n });\n }\n\n // Browser: use fetch streaming with authentication\n const headers: Record<string, string> = {\n \"Content-Type\": \"application/json\",\n ...authHeader,\n };\n\n const response = await fetch(url, {\n method: \"POST\",\n headers,\n credentials: \"include\",\n body: JSON.stringify(data),\n signal,\n });\n\n if (!response.body) {\n return {\n ok: response.ok,\n statusText: response.statusText,\n read: async () => null,\n };\n }\n\n const reader = response.body.getReader();\n const decoder = new TextDecoder();\n\n return {\n ok: response.ok,\n statusText: response.statusText,\n read: async () => {\n const { done, value } = await reader.read();\n if (done) return null;\n return decoder.decode(value, { stream: true });\n },\n };\n}\n\n// ============ Input Types ============\n\nexport interface TextContent {\n type: \"text\";\n text: string;\n}\n\nexport interface ImageContent {\n type: \"image\";\n data?: string;\n url?: string;\n mimeType?: string;\n}\n\nexport interface FileContent {\n type: \"file\";\n data?: string;\n url?: string;\n mimeType?: string;\n name?: string;\n}\n\nexport type MessageContent = TextContent | ImageContent | FileContent;\n\nexport interface ChatMessage {\n role: \"system\" | \"user\" | \"assistant\";\n content: string | MessageContent[];\n}\n\nexport interface ChatOptions {\n taskId?: string;\n}\n\n// ============ Convert Input to A2A Part ============\n\nfunction convertToA2AParts(content: string | MessageContent[]): Part[] {\n if (typeof content === \"string\") {\n return [{ kind: \"text\", text: content }];\n }\n\n return content\n .map((part): Part | null => {\n switch (part.type) {\n case \"text\":\n return { kind: \"text\", text: part.text };\n case \"image\":\n if (part.data) {\n return {\n kind: \"file\",\n file: {\n bytes: part.data,\n mimeType: part.mimeType || \"image/png\",\n },\n };\n }\n if (part.url) {\n return {\n kind: \"file\",\n file: { uri: part.url, mimeType: part.mimeType || \"image/png\" },\n };\n }\n return null;\n case \"file\":\n if (part.data) {\n return {\n kind: \"file\",\n file: {\n bytes: part.data,\n ...(part.mimeType && { mimeType: part.mimeType }),\n ...(part.name && { name: part.name }),\n },\n };\n }\n if (part.url) {\n return {\n kind: \"file\",\n file: {\n uri: part.url,\n ...(part.mimeType && { mimeType: part.mimeType }),\n ...(part.name && { name: part.name }),\n },\n };\n }\n return null;\n default:\n return null;\n }\n })\n .filter((part): part is Part => part !== null);\n}\n\nfunction extractTextFromContent(content: string | MessageContent[]): string {\n if (typeof content === \"string\") {\n return content;\n }\n return content\n .filter((part): part is TextContent => part.type === \"text\")\n .map((part) => part.text)\n .join(\"\\n\");\n}\n\n// ============ SSE Stream Handling ============\n\nasync function* parseSSEStream(\n streamResponse: StreamResponse,\n signal?: AbortSignal\n): AsyncGenerator<SendStreamingMessageResponse, void, unknown> {\n const queue: SendStreamingMessageResponse[] = [];\n\n const parser = createParser({\n onEvent: (event) => {\n try {\n queue.push(JSON.parse(event.data));\n } catch (err) {\n console.error(\"[parseSSEStream] Parse error:\", err);\n }\n },\n });\n\n try {\n while (true) {\n if (signal?.aborted) {\n break;\n }\n const chunk = await streamResponse.read();\n if (chunk === null) {\n break;\n }\n if (chunk) {\n parser.feed(chunk);\n while (queue.length > 0) {\n const item = queue.shift();\n if (item) {\n yield item;\n }\n }\n }\n }\n } catch (err) {\n if (signal?.aborted) {\n return;\n }\n console.error(\"[parseSSEStream] Stream error:\", err);\n }\n}\n\n// ============ Client ============\n\nexport type CopilotClient = {\n /**\n * Stream messages from Copilot Agent.\n *\n * @example\n * ```typescript\n * import { createCopilotClient, Data } from \"@amaster.ai/copilot-client\";\n *\n * const client = createCopilotClient();\n *\n * for await (const response of client.chat([{ role: \"user\", content: \"Hello\" }])) {\n * // deal response\n * }\n * ```\n */\n chat(\n messages: ChatMessage[],\n options?: ChatOptions\n ): AsyncGenerator<SendStreamingMessageResponse, void, unknown>;\n\n cancelChat(taskId: string): Promise<ClientResult<CancelTaskResponse>>;\n getChatStatus(taskId?: string): Promise<{\n working: boolean;\n taskId?: string;\n error?: string;\n }>;\n getHistory(\n limit?: number,\n next?: string\n ): Promise<\n | {\n messages: SendStreamingMessageResponse[];\n next: string;\n hasMore: boolean;\n }\n | undefined\n >;\n newConversation(): Promise<void>;\n};\n\n/**\n * Create Copilot client\n *\n * Auto-detects runtime environment (Browser/Vite/Taro H5/Taro Mini-program)\n */\nexport function createCopilotClient(\n http: HttpClient = createHttpClient(),\n baseUrl?: string,\n getAccessToken?: () => string | null,\n getUserUid?: () => string | null\n): CopilotClient {\n let envBaseUrl = \"\";\n let activeChatAbortController: AbortController | null = null;\n\n // Vite/H5:必须直接写 import.meta.env,Vite 才能正确处理\n const metaEnv = (import.meta as any)?.env;\n if (metaEnv) {\n envBaseUrl = metaEnv.TARO_APP_API_BASE_URL || metaEnv.VITE_API_BASE_URL || \"\";\n }\n\n // Taro 小程序 build:defineConstants 会把 process.env.xxx 替换为字面量\n // H5 环境:process 不存在会抛 ReferenceError,这里用 try/catch 吞掉\n if (!envBaseUrl) {\n try {\n envBaseUrl = process.env.TARO_APP_API_BASE_URL || process.env.VITE_API_BASE_URL || \"\";\n } catch {\n // process is not defined -> ignore\n }\n }\n\n envBaseUrl = String(envBaseUrl || \"\").trim();\n const url = `${baseUrl || envBaseUrl}/api/proxy/builtin/platform/copilot`;\n\n console.log(\"xxxxxx\");\n\n async function* sendMessageStream(\n request: SendStreamingMessageRequest,\n signal?: AbortSignal\n ): AsyncGenerator<SendStreamingMessageResponse, void, unknown> {\n try {\n const streamResponse = await createStream(url, request, getAccessToken, signal);\n\n if (!streamResponse.ok) {\n throw new Error(`Stream request failed: ${streamResponse.statusText}`);\n }\n\n yield* parseSSEStream(streamResponse, signal);\n } catch (err) {\n if (signal?.aborted) {\n return;\n }\n console.error(\"[sendMessageStream] Error:\", err);\n }\n }\n\n const getContextId = () => {\n let appId = getAppId();\n\n if (typeof g?.wx?.request === \"function\") {\n const hostname = url ? url.replace(/^https?:\\/\\//, \"\").split(\"/\")[0] : \"\";\n appId = getAppId(hostname);\n }\n\n const userUid = getUserUid?.() ?? (cachedAnonymousUid ??= `anonymous-${generateUUID()}`);\n const contextId = `${appId}:${userUid}`;\n return contextId;\n };\n\n return {\n async *chat(messages, chatOptions = {}) {\n const { taskId } = chatOptions;\n\n activeChatAbortController = createAbortController() as any;\n const signal = activeChatAbortController?.signal;\n\n try {\n const systemMsg = messages.find((m) => m.role === \"system\");\n const nonSystemMsgs = messages.filter((m) => m.role !== \"system\");\n const lastUserMsg = nonSystemMsgs[nonSystemMsgs.length - 1];\n\n const parts = lastUserMsg\n ? convertToA2AParts(lastUserMsg.content)\n : [{ kind: \"text\" as const, text: \"\" }];\n\n const systemPrompt = systemMsg ? extractTextFromContent(systemMsg.content) : undefined;\n\n const request: SendStreamingMessageRequest = {\n jsonrpc: \"2.0\",\n id: generateUUID(),\n method: \"message/stream\",\n params: {\n message: {\n contextId: getContextId(),\n kind: \"message\",\n messageId: generateUUID(),\n role: \"user\",\n parts,\n ...(taskId && { taskId }),\n ...(systemPrompt && { metadata: { systemPrompt } }),\n },\n },\n };\n\n for await (const response of sendMessageStream(request, signal)) {\n if (signal?.aborted) {\n break;\n }\n yield response;\n }\n } finally {\n activeChatAbortController = null;\n }\n },\n\n cancelChat(taskId) {\n activeChatAbortController?.abort();\n activeChatAbortController = null;\n\n const request: CancelTaskRequest = {\n jsonrpc: \"2.0\",\n id: generateUUID(),\n method: \"tasks/cancel\",\n params: { id: taskId },\n };\n return http.request<CancelTaskResponse>({\n url,\n method: \"POST\",\n data: request,\n });\n },\n\n async getHistory(limit = 50, next?: string) {\n try {\n const res: any = await http.request({\n url,\n method: \"POST\",\n data: {\n jsonrpc: \"2.0\",\n method: \"messages/list\",\n id: generateUUID(),\n params: { filter: { contextId: getContextId() }, limit, ...(next ? { next } : {}) },\n },\n });\n const result = res?.data?.result || {};\n const messages = result?.messages || [];\n const _next = result?.next || \"\";\n\n return {\n messages,\n next: _next,\n hasMore: !!_next,\n };\n } catch (err) {}\n },\n\n async newConversation() {\n try {\n await http.request({\n url,\n method: \"POST\",\n data: {\n jsonrpc: \"2.0\",\n method: \"messages/clear\",\n id: generateUUID(),\n params: { contextId: getContextId() },\n },\n });\n } catch (err) {}\n },\n\n async getChatStatus(taskId) {\n try {\n const request = {\n jsonrpc: \"2.0\",\n id: generateUUID(),\n method: \"tasks/get\",\n params: taskId\n ? { id: taskId }\n : {\n contextId: getContextId(),\n },\n };\n const result = await http.request<any>({\n url,\n method: \"POST\",\n data: request,\n });\n const data = result?.data?.result;\n return {\n working: data?.status?.state === \"working\",\n taskId: data?.id,\n error: data?.error?.message || \"\",\n };\n } catch (err) {\n return {\n working: false,\n error: (err as any)?.message || \"\",\n };\n }\n },\n };\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/copilot-client.ts"],"names":["g","getMiniProgramRequest","generateUUID","cryptoObj","c","r","SimpleAbortController","_","cb","createAbortController","getAppIdFromHostname","hostname","wwwMatch","domainMatch","extractAppIdFromUrl","url","pathMatch","cachedAppId","cachedAnonymousUid","getAppId","urlAppId","createWeChatMiniProgramStream","data","authHeader","signal","resolve","chunkBuffer","textDecoder","MiniProgramTextDecoder","ended","errorOccurred","dataQueue","resolveRead","pendingRead","pushChunk","text","chunkListener","res","newChunk","merged","decodeOffset","remaining","decoded","lastGoodIndex","goodPart","encodedGood","err","headersListener","miniReq","requestTask","finalText","error","createStream","getAccessToken","token","headers","response","reader","decoder","done","value","convertToA2AParts","content","part","extractTextFromContent","parseSSEStream","streamResponse","queue","parser","createParser","event","chunk","item","createCopilotClient","http","createHttpClient","baseUrl","getUserUid","envBaseUrl","activeChatAbortController","metaEnv","sendMessageStream","request","getContextId","appId","userUid","messages","chatOptions","taskId","systemMsg","m","nonSystemMsgs","lastUserMsg","parts","systemPrompt","limit","next","result","_next"],"mappings":"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","file":"index.cjs","sourcesContent":["/* eslint-disable no-undef, no-unused-vars */\nimport type {\n CancelTaskRequest,\n CancelTaskResponse,\n Part,\n SendStreamingMessageRequest,\n SendStreamingMessageResponse,\n} from \"@a2a-js/sdk\";\nimport { type ClientResult, createHttpClient, type HttpClient } from \"@amaster.ai/http-client\";\nimport { createParser } from \"eventsource-parser\";\nimport MiniProgramTextDecoder from \"miniprogram-text-decoder\";\n// import MiniProgramTextEncoder from \"miniprogram-text-encoder\";\n\n// ============ Internal: Platform Detection (same as http-client) ============\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nconst g = globalThis as any;\n\nfunction getMiniProgramRequest(): ((_opts: any) => any) | null {\n if (typeof g?.Taro?.request === \"function\") return g.Taro.request.bind(g.Taro);\n if (typeof g?.wx?.request === \"function\") return g.wx.request.bind(g.wx);\n if (typeof g?.tt?.request === \"function\") return g.tt.request.bind(g.tt);\n if (typeof g?.my?.request === \"function\") return g.my.request.bind(g.my);\n if (typeof g?.swan?.request === \"function\") return g.swan.request.bind(g.swan);\n if (typeof g?.qq?.request === \"function\") return g.qq.request.bind(g.qq);\n if (typeof g?.jd?.request === \"function\") return g.jd.request.bind(g.jd);\n return null;\n}\n\n// ============ Internal: UUID Generator ============\n\nfunction generateUUID(): string {\n const cryptoObj = typeof globalThis !== \"undefined\" ? globalThis.crypto : undefined;\n\n if (cryptoObj && typeof cryptoObj.randomUUID === \"function\") {\n return cryptoObj.randomUUID();\n }\n\n if (cryptoObj && typeof cryptoObj.getRandomValues === \"function\") {\n return \"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx\".replace(/[xy]/g, (c) => {\n const randomValues = cryptoObj.getRandomValues(new Uint8Array(1));\n const r = (randomValues[0] ?? 0) % 16;\n const v = c === \"x\" ? r : (r & 0x3) | 0x8;\n return v.toString(16);\n });\n }\n\n return \"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx\".replace(/[xy]/g, (c) => {\n const r = (Math.random() * 16) | 0;\n const v = c === \"x\" ? r : (r & 0x3) | 0x8;\n return v.toString(16);\n });\n}\n\n// ============ AbortController Polyfill (Mini Program Safe) ============\nclass SimpleAbortController {\n aborted = false;\n private listeners: (() => void)[] = [];\n\n signal = {\n aborted: false,\n addEventListener: (_: \"abort\", cb: () => void) => {\n this.listeners.push(cb);\n },\n };\n\n abort() {\n if (this.aborted) return;\n this.aborted = true;\n this.signal.aborted = true;\n this.listeners.forEach((cb) => cb());\n }\n}\n\nfunction createAbortController(): AbortController | SimpleAbortController {\n if (typeof AbortController !== \"undefined\") {\n return new AbortController();\n }\n return new SimpleAbortController();\n}\n\n// ============ Internal: URL Utilities ============\n\nfunction getAppIdFromHostname(hostname: string): string | null {\n // Pattern 1: www.{app_id}.domain.tld or www.{app_id}-{env}.domain.tld\n const wwwMatch = /^www\\.([\\da-z-]+)(?:-[^.]+)?\\.[\\w-]+\\.(?:local|ai|cn)$/.exec(hostname);\n if (wwwMatch?.[1]) return wwwMatch[1];\n\n // Pattern 2: {app_id}-{env}.domain.tld or {app_id}.domain.tld\n const domainMatch = /^([\\da-z-]+)(?:-[^.]+)?\\.[\\w-]+\\.(?:local|ai|cn)$/.exec(hostname);\n if (domainMatch?.[1]) return domainMatch[1];\n\n return null;\n}\n\nfunction extractAppIdFromUrl(): string | null {\n if (typeof window === \"undefined\") return null;\n\n try {\n const url = window.location.href;\n const pathMatch = /\\/app\\/([\\da-z-]+)(?:\\/|$)/.exec(url);\n if (pathMatch?.[1]) return pathMatch[1];\n return getAppIdFromHostname(window.location.hostname);\n } catch {\n return null;\n }\n}\n\n// Cache appId for session consistency\nlet cachedAppId: string | null = null;\n\n// Cache anonymous user ID for session consistency\nlet cachedAnonymousUid: string | null = null;\n\nfunction getAppId(hostname?: string): string {\n const urlAppId = hostname ? getAppIdFromHostname(hostname) : extractAppIdFromUrl();\n if (urlAppId) return urlAppId;\n if (!cachedAppId) cachedAppId = generateUUID();\n return cachedAppId;\n}\n\n// ============ Internal: Streaming ============\n\ninterface StreamResponse {\n ok: boolean;\n statusText: string;\n read(): Promise<string | null>;\n}\n\n// 小程序专用的流式请求\nasync function createWeChatMiniProgramStream(\n url: string,\n data: unknown,\n authHeader: Record<string, string> = {},\n signal?: AbortSignal\n): Promise<StreamResponse> {\n return new Promise<StreamResponse>((resolve) => {\n let chunkBuffer = new Uint8Array(0);\n const textDecoder = new MiniProgramTextDecoder(\"utf-8\", { fatal: false });\n\n let ended = false;\n let errorOccurred = false;\n\n const dataQueue: string[] = [];\n let resolveRead: ((value: string | null) => void) | null = null;\n\n const pendingRead = () =>\n new Promise<string | null>((r) => {\n if (dataQueue.length > 0) {\n r(dataQueue.shift()!);\n } else if (ended) {\n r(null);\n } else {\n resolveRead = r;\n }\n });\n\n const pushChunk = (text: string) => {\n if (!text) return;\n dataQueue.push(text);\n if (resolveRead) {\n resolveRead(dataQueue.shift()!);\n resolveRead = null;\n }\n };\n\n const chunkListener = (res: any) => {\n if (errorOccurred || ended || !res.data) return;\n\n try {\n const newChunk = new Uint8Array(res.data as ArrayBuffer);\n\n // 追加\n const merged = new Uint8Array(chunkBuffer.length + newChunk.length);\n merged.set(chunkBuffer);\n merged.set(newChunk, chunkBuffer.length);\n chunkBuffer = merged;\n\n let decodeOffset = 0;\n\n while (decodeOffset < chunkBuffer.length) {\n // 尝试从当前偏移解码尽可能多的内容,但 stream: false\n const remaining = chunkBuffer.subarray(decodeOffset);\n const decoded = textDecoder.decode(remaining, { stream: false });\n\n if (decoded.length === 0) {\n // 连一个字符都解不出来,说明剩余部分不完整,等待下次 chunk\n break;\n }\n\n // 关键:计算真正被成功解码的字节数(不依赖 replacement character)\n // 方法1:利用 replacement character 出现的位置来推断(较可靠)\n // 方法2:更简单粗暴但在大多数场景够用:假设没有 � 就全消费,有 � 则回退\n if (decoded.includes(\"�\")) {\n // 有替换字符 → 说明后面有不完整序列,不能全消费\n // 保守策略:本次只消费到最后一个完整字符之前\n const lastGoodIndex = decoded.lastIndexOf(\"�\") === 0 ? 0 : decoded.indexOf(\"�\");\n if (lastGoodIndex <= 0) {\n break; // 连开头都不完整\n }\n\n const goodPart = decoded.slice(0, lastGoodIndex);\n if (goodPart) {\n pushChunk(goodPart);\n }\n\n // 估算已消费字节数(不完美,但比原来好很多)\n const encodedGood = new TextEncoder().encode(goodPart);\n decodeOffset += encodedGood.length;\n\n break; // 剩余部分等下次\n } else {\n // 没有 � → 说明本次 remaining 里全是完整字符,可以全部消费\n pushChunk(decoded);\n decodeOffset += remaining.length; // 安全,因为没出现替换字符\n }\n }\n\n // 保留剩余未解码部分\n chunkBuffer = chunkBuffer.subarray(decodeOffset);\n } catch (err) {\n console.error(\"[mini stream] chunk process error:\", err);\n }\n };\n\n const headersListener = (res: any) => {\n if (res.header?.[\"content-type\"]?.includes(\"text/event-stream\") === false) {\n console.warn(\"Warning: server did not return event-stream\");\n }\n };\n\n const miniReq = getMiniProgramRequest();\n if (!miniReq) return;\n\n let requestTask: any;\n\n try {\n requestTask = miniReq({\n url,\n method: \"POST\",\n header: {\n \"Content-Type\": \"application/json\",\n Accept: \"text/event-stream\",\n ...authHeader,\n },\n data: typeof data === \"string\" ? data : JSON.stringify(data),\n responseType: \"arraybuffer\",\n enableChunked: true,\n timeout: 300000,\n\n success: () => {\n if (chunkBuffer.length > 0) {\n const finalText = textDecoder.decode(chunkBuffer, { stream: true });\n pushChunk(finalText);\n }\n ended = true;\n resolveRead?.(null);\n },\n\n fail: () => {\n errorOccurred = true;\n ended = true;\n resolveRead?.(null);\n },\n });\n\n // 支持 abort\n if (signal) {\n if (signal.aborted) {\n requestTask.abort();\n } else {\n signal.addEventListener(\"abort\", () => {\n requestTask.abort();\n });\n }\n }\n\n // 关键:监听分块到达\n requestTask.onChunkReceived?.(chunkListener);\n // 可选:监听 HTTP headers 到达(可用于检查状态码)\n requestTask.onHeadersReceived?.(headersListener);\n\n resolve({\n ok: true,\n statusText: \"OK\",\n read: async () => {\n if (errorOccurred) return null;\n return pendingRead();\n },\n });\n } catch (error) {\n console.error(\"miniReq error\", error);\n }\n });\n}\n\nasync function createStream(\n url: string,\n data: unknown,\n getAccessToken?: () => string | null,\n signal?: AbortSignal\n): Promise<StreamResponse> {\n // Get token for authentication\n const token = getAccessToken?.();\n const authHeader: Record<string, string> = token ? { Authorization: `Bearer ${token}` } : {};\n \n\n const miniReq = getMiniProgramRequest();\n if (miniReq) {\n return createWeChatMiniProgramStream(url, data, authHeader, signal);\n }\n\n // Browser: use fetch streaming with authentication\n const headers: Record<string, string> = {\n \"Content-Type\": \"application/json\",\n ...authHeader,\n };\n\n const response = await fetch(url, {\n method: \"POST\",\n headers,\n credentials: \"include\",\n body: JSON.stringify(data),\n signal,\n });\n\n if (!response.body) {\n return {\n ok: response.ok,\n statusText: response.statusText,\n read: async () => null,\n };\n }\n\n const reader = response.body.getReader();\n const decoder = new TextDecoder();\n\n return {\n ok: response.ok,\n statusText: response.statusText,\n read: async () => {\n const { done, value } = await reader.read();\n if (done) return null;\n return decoder.decode(value, { stream: true });\n },\n };\n}\n\n// ============ Input Types ============\n\nexport interface TextContent {\n type: \"text\";\n text: string;\n}\n\nexport interface ImageContent {\n type: \"image\";\n data?: string;\n url?: string;\n mimeType?: string;\n}\n\nexport interface FileContent {\n type: \"file\";\n data?: string;\n url?: string;\n mimeType?: string;\n name?: string;\n}\n\nexport type MessageContent = TextContent | ImageContent | FileContent;\n\nexport interface ChatMessage {\n role: \"system\" | \"user\" | \"assistant\";\n content: string | MessageContent[];\n}\n\nexport interface ChatOptions {\n taskId?: string;\n}\n\n// ============ Convert Input to A2A Part ============\n\nfunction convertToA2AParts(content: string | MessageContent[]): Part[] {\n if (typeof content === \"string\") {\n return [{ kind: \"text\", text: content }];\n }\n\n return content\n .map((part): Part | null => {\n switch (part.type) {\n case \"text\":\n return { kind: \"text\", text: part.text };\n case \"image\":\n if (part.data) {\n return {\n kind: \"file\",\n file: {\n bytes: part.data,\n mimeType: part.mimeType || \"image/png\",\n },\n };\n }\n if (part.url) {\n return {\n kind: \"file\",\n file: { uri: part.url, mimeType: part.mimeType || \"image/png\" },\n };\n }\n return null;\n case \"file\":\n if (part.data) {\n return {\n kind: \"file\",\n file: {\n bytes: part.data,\n ...(part.mimeType && { mimeType: part.mimeType }),\n ...(part.name && { name: part.name }),\n },\n };\n }\n if (part.url) {\n return {\n kind: \"file\",\n file: {\n uri: part.url,\n ...(part.mimeType && { mimeType: part.mimeType }),\n ...(part.name && { name: part.name }),\n },\n };\n }\n return null;\n default:\n return null;\n }\n })\n .filter((part): part is Part => part !== null);\n}\n\nfunction extractTextFromContent(content: string | MessageContent[]): string {\n if (typeof content === \"string\") {\n return content;\n }\n return content\n .filter((part): part is TextContent => part.type === \"text\")\n .map((part) => part.text)\n .join(\"\\n\");\n}\n\n// ============ SSE Stream Handling ============\n\nasync function* parseSSEStream(\n streamResponse: StreamResponse,\n signal?: AbortSignal\n): AsyncGenerator<SendStreamingMessageResponse, void, unknown> {\n const queue: SendStreamingMessageResponse[] = [];\n\n const parser = createParser({\n onEvent: (event) => {\n try {\n queue.push(JSON.parse(event.data));\n } catch (err) {\n console.error(\"[parseSSEStream] Parse error:\", err);\n }\n },\n });\n\n try {\n while (true) {\n if (signal?.aborted) {\n break;\n }\n const chunk = await streamResponse.read();\n if (chunk === null) {\n break;\n }\n if (chunk) {\n parser.feed(chunk);\n while (queue.length > 0) {\n const item = queue.shift();\n if (item) {\n yield item;\n }\n }\n }\n }\n } catch (err) {\n if (signal?.aborted) {\n return;\n }\n console.error(\"[parseSSEStream] Stream error:\", err);\n }\n}\n\n// ============ Client ============\n\nexport type CopilotClient = {\n /**\n * Stream messages from Copilot Agent.\n *\n * @example\n * ```typescript\n * import { createCopilotClient, Data } from \"@amaster.ai/copilot-client\";\n *\n * const client = createCopilotClient();\n *\n * for await (const response of client.chat([{ role: \"user\", content: \"Hello\" }])) {\n * // deal response\n * }\n * ```\n */\n chat(\n messages: ChatMessage[],\n options?: ChatOptions\n ): AsyncGenerator<SendStreamingMessageResponse, void, unknown>;\n\n cancelChat(taskId: string): Promise<ClientResult<CancelTaskResponse>>;\n getChatStatus(taskId?: string): Promise<{\n working: boolean;\n taskId?: string;\n error?: string;\n }>;\n getHistory(\n limit?: number,\n next?: string\n ): Promise<\n | {\n messages: SendStreamingMessageResponse[];\n next: string;\n hasMore: boolean;\n }\n | undefined\n >;\n newConversation(): Promise<void>;\n};\n\n/**\n * Create Copilot client\n *\n * Auto-detects runtime environment (Browser/Vite/Taro H5/Taro Mini-program)\n */\nexport function createCopilotClient(\n http: HttpClient = createHttpClient(),\n baseUrl?: string,\n getAccessToken?: () => string | null,\n getUserUid?: () => string | null\n): CopilotClient {\n let envBaseUrl = \"\";\n let activeChatAbortController: AbortController | null = null;\n\n // Vite/H5:必须直接写 import.meta.env,Vite 才能正确处理\n const metaEnv = (import.meta as any)?.env;\n if (metaEnv) {\n envBaseUrl = metaEnv.TARO_APP_API_BASE_URL || metaEnv.VITE_API_BASE_URL || \"\";\n }\n\n // Taro 小程序 build:defineConstants 会把 process.env.xxx 替换为字面量\n // H5 环境:process 不存在会抛 ReferenceError,这里用 try/catch 吞掉\n if (!envBaseUrl) {\n try {\n envBaseUrl = process.env.TARO_APP_API_BASE_URL || process.env.VITE_API_BASE_URL || \"\";\n } catch {\n // process is not defined -> ignore\n }\n }\n\n envBaseUrl = String(envBaseUrl || \"\").trim();\n const url = `${baseUrl || envBaseUrl}/api/proxy/builtin/platform/copilot`;\n\n async function* sendMessageStream(\n request: SendStreamingMessageRequest,\n signal?: AbortSignal\n ): AsyncGenerator<SendStreamingMessageResponse, void, unknown> {\n try {\n const streamResponse = await createStream(url, request, getAccessToken, signal);\n\n if (!streamResponse.ok) {\n throw new Error(`Stream request failed: ${streamResponse.statusText}`);\n }\n\n yield* parseSSEStream(streamResponse, signal);\n } catch (err) {\n if (signal?.aborted) {\n return;\n }\n console.error(\"[sendMessageStream] Error:\", err);\n }\n }\n\n const getContextId = () => {\n let appId = getAppId();\n\n if (typeof g?.wx?.request === \"function\") {\n const hostname = url ? url.replace(/^https?:\\/\\//, \"\").split(\"/\")[0] : \"\";\n appId = getAppId(hostname);\n }\n\n const userUid = getUserUid?.() ?? (cachedAnonymousUid ??= `anonymous-${generateUUID()}`);\n const contextId = `${appId}:${userUid}`;\n return contextId;\n };\n\n return {\n async *chat(messages, chatOptions = {}) {\n const { taskId } = chatOptions;\n\n activeChatAbortController = createAbortController() as any;\n const signal = activeChatAbortController?.signal;\n\n try {\n const systemMsg = messages.find((m) => m.role === \"system\");\n const nonSystemMsgs = messages.filter((m) => m.role !== \"system\");\n const lastUserMsg = nonSystemMsgs[nonSystemMsgs.length - 1];\n\n const parts = lastUserMsg\n ? convertToA2AParts(lastUserMsg.content)\n : [{ kind: \"text\" as const, text: \"\" }];\n\n const systemPrompt = systemMsg ? extractTextFromContent(systemMsg.content) : undefined;\n\n const request: SendStreamingMessageRequest = {\n jsonrpc: \"2.0\",\n id: generateUUID(),\n method: \"message/stream\",\n params: {\n message: {\n contextId: getContextId(),\n kind: \"message\",\n messageId: generateUUID(),\n role: \"user\",\n parts,\n ...(taskId && { taskId }),\n ...(systemPrompt && { metadata: { systemPrompt } }),\n },\n },\n };\n\n for await (const response of sendMessageStream(request, signal)) {\n if (signal?.aborted) {\n break;\n }\n yield response;\n }\n } finally {\n activeChatAbortController = null;\n }\n },\n\n cancelChat(taskId) {\n activeChatAbortController?.abort();\n activeChatAbortController = null;\n\n const request: CancelTaskRequest = {\n jsonrpc: \"2.0\",\n id: generateUUID(),\n method: \"tasks/cancel\",\n params: { id: taskId },\n };\n return http.request<CancelTaskResponse>({\n url,\n method: \"POST\",\n data: request,\n });\n },\n\n async getHistory(limit = 50, next?: string) {\n try {\n const res: any = await http.request({\n url,\n method: \"POST\",\n data: {\n jsonrpc: \"2.0\",\n method: \"messages/list\",\n id: generateUUID(),\n params: { filter: { contextId: getContextId() }, limit, ...(next ? { next } : {}) },\n },\n });\n const result = res?.data?.result || {};\n const messages = result?.messages || [];\n const _next = result?.next || \"\";\n\n return {\n messages,\n next: _next,\n hasMore: !!_next,\n };\n } catch (err) {}\n },\n\n async newConversation() {\n try {\n await http.request({\n url,\n method: \"POST\",\n data: {\n jsonrpc: \"2.0\",\n method: \"messages/clear\",\n id: generateUUID(),\n params: { contextId: getContextId() },\n },\n });\n } catch (err) {}\n },\n\n async getChatStatus(taskId) {\n try {\n const request = {\n jsonrpc: \"2.0\",\n id: generateUUID(),\n method: \"tasks/get\",\n params: taskId\n ? { id: taskId }\n : {\n contextId: getContextId(),\n },\n };\n const result = await http.request<any>({\n url,\n method: \"POST\",\n data: request,\n });\n const data = result?.data?.result;\n return {\n working: data?.status?.state === \"working\",\n taskId: data?.id,\n error: data?.error?.message || \"\",\n };\n } catch (err) {\n return {\n working: false,\n error: (err as any)?.message || \"\",\n };\n }\n },\n };\n}\n"]}
|
package/dist/index.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {createHttpClient}from'@amaster.ai/http-client';import {createParser}from'eventsource-parser';import
|
|
2
|
-
`)}async function*
|
|
3
|
-
export{
|
|
1
|
+
import {createHttpClient}from'@amaster.ai/http-client';import {createParser}from'eventsource-parser';import _ from'miniprogram-text-decoder';var s=globalThis;function I(){return typeof s?.Taro?.request=="function"?s.Taro.request.bind(s.Taro):typeof s?.wx?.request=="function"?s.wx.request.bind(s.wx):typeof s?.tt?.request=="function"?s.tt.request.bind(s.tt):typeof s?.my?.request=="function"?s.my.request.bind(s.my):typeof s?.swan?.request=="function"?s.swan.request.bind(s.swan):typeof s?.qq?.request=="function"?s.qq.request.bind(s.qq):typeof s?.jd?.request=="function"?s.jd.request.bind(s.jd):null}function h(){let t=typeof globalThis<"u"?globalThis.crypto:void 0;return t&&typeof t.randomUUID=="function"?t.randomUUID():t&&typeof t.getRandomValues=="function"?"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,e=>{let c=(t.getRandomValues(new Uint8Array(1))[0]??0)%16;return (e==="x"?c:c&3|8).toString(16)}):"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,e=>{let i=Math.random()*16|0;return (e==="x"?i:i&3|8).toString(16)})}var q=class{constructor(){this.aborted=false;this.listeners=[];this.signal={aborted:false,addEventListener:(e,i)=>{this.listeners.push(i);}};}abort(){this.aborted||(this.aborted=true,this.signal.aborted=true,this.listeners.forEach(e=>e()));}};function j(){return typeof AbortController<"u"?new AbortController:new q}function M(t){let e=/^www\.([\da-z-]+)(?:-[^.]+)?\.[\w-]+\.(?:local|ai|cn)$/.exec(t);if(e?.[1])return e[1];let i=/^([\da-z-]+)(?:-[^.]+)?\.[\w-]+\.(?:local|ai|cn)$/.exec(t);return i?.[1]?i[1]:null}function $(){if(typeof window>"u")return null;try{let t=window.location.href,e=/\/app\/([\da-z-]+)(?:\/|$)/.exec(t);return e?.[1]?e[1]:M(window.location.hostname)}catch{return null}}var R=null,B=null;function v(t){let e=t?M(t):$();return e||(R||(R=h()),R)}async function H(t,e,i={},c){return new Promise(o=>{let n=new Uint8Array(0),C=new _("utf-8",{fatal:false}),d=false,f=false,g=[],r=null,a=()=>new Promise(u=>{g.length>0?u(g.shift()):d?u(null):r=u;}),l=u=>{u&&(g.push(u),r&&(r(g.shift()),r=null));},m=u=>{if(!(f||d||!u.data))try{let S=new Uint8Array(u.data),T=new Uint8Array(n.length+S.length);T.set(n),T.set(S,n.length),n=T;let x=0;for(;x<n.length;){let A=n.subarray(x),b=C.decode(A,{stream:!1});if(b.length===0)break;if(b.includes("\uFFFD")){let P=b.lastIndexOf("\uFFFD")===0?0:b.indexOf("\uFFFD");if(P<=0)break;let k=b.slice(0,P);k&&l(k);let O=new TextEncoder().encode(k);x+=O.length;break}else l(b),x+=A.length;}n=n.subarray(x);}catch(S){console.error("[mini stream] chunk process error:",S);}},w=u=>{u.header?.["content-type"]?.includes("text/event-stream")===false&&console.warn("Warning: server did not return event-stream");},p=I();if(!p)return;let y;try{y=p({url:t,method:"POST",header:{"Content-Type":"application/json",Accept:"text/event-stream",...i},data:typeof e=="string"?e:JSON.stringify(e),responseType:"arraybuffer",enableChunked:!0,timeout:3e5,success:()=>{if(n.length>0){let u=C.decode(n,{stream:!0});l(u);}d=!0,r?.(null);},fail:()=>{f=!0,d=!0,r?.(null);}}),c&&(c.aborted?y.abort():c.addEventListener("abort",()=>{y.abort();})),y.onChunkReceived?.(m),y.onHeadersReceived?.(w),o({ok:!0,statusText:"OK",read:async()=>f?null:a()});}catch(u){console.error("miniReq error",u);}})}async function L(t,e,i,c){let o=i?.(),n=o?{Authorization:`Bearer ${o}`}:{};if(I())return H(t,e,n,c);let d={"Content-Type":"application/json",...n},f=await fetch(t,{method:"POST",headers:d,credentials:"include",body:JSON.stringify(e),signal:c});if(!f.body)return {ok:f.ok,statusText:f.statusText,read:async()=>null};let g=f.body.getReader(),r=new TextDecoder;return {ok:f.ok,statusText:f.statusText,read:async()=>{let{done:a,value:l}=await g.read();return a?null:r.decode(l,{stream:true})}}}function D(t){return typeof t=="string"?[{kind:"text",text:t}]:t.map(e=>{switch(e.type){case "text":return {kind:"text",text:e.text};case "image":return e.data?{kind:"file",file:{bytes:e.data,mimeType:e.mimeType||"image/png"}}:e.url?{kind:"file",file:{uri:e.url,mimeType:e.mimeType||"image/png"}}:null;case "file":return e.data?{kind:"file",file:{bytes:e.data,...e.mimeType&&{mimeType:e.mimeType},...e.name&&{name:e.name}}}:e.url?{kind:"file",file:{uri:e.url,...e.mimeType&&{mimeType:e.mimeType},...e.name&&{name:e.name}}}:null;default:return null}}).filter(e=>e!==null)}function F(t){return typeof t=="string"?t:t.filter(e=>e.type==="text").map(e=>e.text).join(`
|
|
2
|
+
`)}async function*V(t,e){let i=[],c=createParser({onEvent:o=>{try{i.push(JSON.parse(o.data));}catch(n){console.error("[parseSSEStream] Parse error:",n);}}});try{for(;!e?.aborted;){let o=await t.read();if(o===null)break;if(o)for(c.feed(o);i.length>0;){let n=i.shift();n&&(yield n);}}}catch(o){if(e?.aborted)return;console.error("[parseSSEStream] Stream error:",o);}}function G(t=createHttpClient(),e,i,c){let o="",n=null,C=import.meta?.env;if(C&&(o=C.TARO_APP_API_BASE_URL||C.VITE_API_BASE_URL||""),!o)try{o=process.env.TARO_APP_API_BASE_URL||process.env.VITE_API_BASE_URL||"";}catch{}o=String(o||"").trim();let d=`${e||o}/api/proxy/builtin/platform/copilot`;async function*f(r,a){try{let l=await L(d,r,i,a);if(!l.ok)throw new Error(`Stream request failed: ${l.statusText}`);yield*V(l,a);}catch(l){if(a?.aborted)return;console.error("[sendMessageStream] Error:",l);}}let g=()=>{let r=v();if(typeof s?.wx?.request=="function"){let m=d?d.replace(/^https?:\/\//,"").split("/")[0]:"";r=v(m);}let a=c?.()??B??(B=`anonymous-${h()}`);return `${r}:${a}`};return {async*chat(r,a={}){let{taskId:l}=a;n=j();let m=n?.signal;try{let w=r.find(x=>x.role==="system"),p=r.filter(x=>x.role!=="system"),y=p[p.length-1],u=y?D(y.content):[{kind:"text",text:""}],S=w?F(w.content):void 0,T={jsonrpc:"2.0",id:h(),method:"message/stream",params:{message:{contextId:g(),kind:"message",messageId:h(),role:"user",parts:u,...l&&{taskId:l},...S&&{metadata:{systemPrompt:S}}}}};for await(let x of f(T,m)){if(m?.aborted)break;yield x;}}finally{n=null;}},cancelChat(r){n?.abort(),n=null;let a={jsonrpc:"2.0",id:h(),method:"tasks/cancel",params:{id:r}};return t.request({url:d,method:"POST",data:a})},async getHistory(r=50,a){try{let m=(await t.request({url:d,method:"POST",data:{jsonrpc:"2.0",method:"messages/list",id:h(),params:{filter:{contextId:g()},limit:r,...a?{next:a}:{}}}}))?.data?.result||{},w=m?.messages||[],p=m?.next||"";return {messages:w,next:p,hasMore:!!p}}catch{}},async newConversation(){try{await t.request({url:d,method:"POST",data:{jsonrpc:"2.0",method:"messages/clear",id:h(),params:{contextId:g()}}});}catch{}},async getChatStatus(r){try{let a={jsonrpc:"2.0",id:h(),method:"tasks/get",params:r?{id:r}:{contextId:g()}},m=(await t.request({url:d,method:"POST",data:a}))?.data?.result;return {working:m?.status?.state==="working",taskId:m?.id,error:m?.error?.message||""}}catch(a){return {working:false,error:a?.message||""}}}}}
|
|
3
|
+
export{G as createCopilotClient};//# sourceMappingURL=index.js.map
|
|
4
4
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/copilot-client.ts"],"names":["g","getMiniProgramRequest","generateUUID","cryptoObj","c","r","SimpleAbortController","_","cb","createAbortController","getAppIdFromHostname","hostname","wwwMatch","domainMatch","extractAppIdFromUrl","url","pathMatch","cachedAppId","cachedAnonymousUid","getAppId","urlAppId","createWeChatMiniProgramStream","data","authHeader","signal","resolve","chunkBuffer","textDecoder","MiniProgramTextDecoder","ended","errorOccurred","dataQueue","resolveRead","pendingRead","pushChunk","text","chunkListener","res","newChunk","merged","decodeOffset","remaining","decoded","lastGoodIndex","goodPart","encodedGood","err","headersListener","miniReq","requestTask","finalText","error","createStream","getAccessToken","token","buffer","completed","failed","position","opts","ret","chunk","headers","response","reader","decoder","done","value","convertToA2AParts","content","part","extractTextFromContent","parseSSEStream","streamResponse","queue","parser","createParser","event","item","createCopilotClient","http","createHttpClient","baseUrl","getUserUid","envBaseUrl","activeChatAbortController","metaEnv","sendMessageStream","request","getContextId","appId","userUid","messages","chatOptions","taskId","systemMsg","m","nonSystemMsgs","lastUserMsg","parts","systemPrompt","limit","next","result","_next"],"mappings":"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","file":"index.js","sourcesContent":["/* eslint-disable no-undef, no-unused-vars */\nimport type {\n CancelTaskRequest,\n CancelTaskResponse,\n Part,\n SendStreamingMessageRequest,\n SendStreamingMessageResponse,\n} from \"@a2a-js/sdk\";\nimport { type ClientResult, createHttpClient, type HttpClient } from \"@amaster.ai/http-client\";\nimport { createParser } from \"eventsource-parser\";\nimport MiniProgramTextDecoder from \"miniprogram-text-decoder\";\n// import MiniProgramTextEncoder from \"miniprogram-text-encoder\";\n\n// ============ Internal: Platform Detection (same as http-client) ============\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nconst g = globalThis as any;\n\nfunction getMiniProgramRequest(): ((_opts: any) => any) | null {\n if (typeof g?.Taro?.request === \"function\") return g.Taro.request.bind(g.Taro);\n if (typeof g?.wx?.request === \"function\") return g.wx.request.bind(g.wx);\n if (typeof g?.tt?.request === \"function\") return g.tt.request.bind(g.tt);\n if (typeof g?.my?.request === \"function\") return g.my.request.bind(g.my);\n if (typeof g?.swan?.request === \"function\") return g.swan.request.bind(g.swan);\n if (typeof g?.qq?.request === \"function\") return g.qq.request.bind(g.qq);\n if (typeof g?.jd?.request === \"function\") return g.jd.request.bind(g.jd);\n return null;\n}\n\n// ============ Internal: UUID Generator ============\n\nfunction generateUUID(): string {\n const cryptoObj = typeof globalThis !== \"undefined\" ? globalThis.crypto : undefined;\n\n if (cryptoObj && typeof cryptoObj.randomUUID === \"function\") {\n return cryptoObj.randomUUID();\n }\n\n if (cryptoObj && typeof cryptoObj.getRandomValues === \"function\") {\n return \"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx\".replace(/[xy]/g, (c) => {\n const randomValues = cryptoObj.getRandomValues(new Uint8Array(1));\n const r = (randomValues[0] ?? 0) % 16;\n const v = c === \"x\" ? r : (r & 0x3) | 0x8;\n return v.toString(16);\n });\n }\n\n return \"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx\".replace(/[xy]/g, (c) => {\n const r = (Math.random() * 16) | 0;\n const v = c === \"x\" ? r : (r & 0x3) | 0x8;\n return v.toString(16);\n });\n}\n\n// ============ AbortController Polyfill (Mini Program Safe) ============\nclass SimpleAbortController {\n aborted = false;\n private listeners: (() => void)[] = [];\n\n signal = {\n aborted: false,\n addEventListener: (_: \"abort\", cb: () => void) => {\n this.listeners.push(cb);\n },\n };\n\n abort() {\n if (this.aborted) return;\n this.aborted = true;\n this.signal.aborted = true;\n this.listeners.forEach((cb) => cb());\n }\n}\n\nfunction createAbortController(): AbortController | SimpleAbortController {\n if (typeof AbortController !== \"undefined\") {\n return new AbortController();\n }\n return new SimpleAbortController();\n}\n\n// ============ Internal: URL Utilities ============\n\nfunction getAppIdFromHostname(hostname: string): string | null {\n // Pattern 1: www.{app_id}.domain.tld or www.{app_id}-{env}.domain.tld\n const wwwMatch = /^www\\.([\\da-z-]+)(?:-[^.]+)?\\.[\\w-]+\\.(?:local|ai|cn)$/.exec(hostname);\n if (wwwMatch?.[1]) return wwwMatch[1];\n\n // Pattern 2: {app_id}-{env}.domain.tld or {app_id}.domain.tld\n const domainMatch = /^([\\da-z-]+)(?:-[^.]+)?\\.[\\w-]+\\.(?:local|ai|cn)$/.exec(hostname);\n if (domainMatch?.[1]) return domainMatch[1];\n\n return null;\n}\n\nfunction extractAppIdFromUrl(): string | null {\n if (typeof window === \"undefined\") return null;\n\n try {\n const url = window.location.href;\n const pathMatch = /\\/app\\/([\\da-z-]+)(?:\\/|$)/.exec(url);\n if (pathMatch?.[1]) return pathMatch[1];\n return getAppIdFromHostname(window.location.hostname);\n } catch {\n return null;\n }\n}\n\n// Cache appId for session consistency\nlet cachedAppId: string | null = null;\n\n// Cache anonymous user ID for session consistency\nlet cachedAnonymousUid: string | null = null;\n\nfunction getAppId(hostname?: string): string {\n const urlAppId = hostname ? getAppIdFromHostname(hostname) : extractAppIdFromUrl();\n if (urlAppId) return urlAppId;\n if (!cachedAppId) cachedAppId = generateUUID();\n return cachedAppId;\n}\n\n// ============ Internal: Streaming ============\n\ninterface StreamResponse {\n ok: boolean;\n statusText: string;\n read(): Promise<string | null>;\n}\n\n// 小程序专用的流式请求\nasync function createWeChatMiniProgramStream(\n url: string,\n data: unknown,\n authHeader: Record<string, string> = {},\n signal?: AbortSignal\n): Promise<StreamResponse> {\n return new Promise<StreamResponse>((resolve) => {\n let chunkBuffer = new Uint8Array(0);\n const textDecoder = new MiniProgramTextDecoder(\"utf-8\", { fatal: false });\n\n let ended = false;\n let errorOccurred = false;\n\n const dataQueue: string[] = [];\n let resolveRead: ((value: string | null) => void) | null = null;\n\n const pendingRead = () =>\n new Promise<string | null>((r) => {\n if (dataQueue.length > 0) {\n r(dataQueue.shift()!);\n } else if (ended) {\n r(null);\n } else {\n resolveRead = r;\n }\n });\n\n const pushChunk = (text: string) => {\n if (!text) return;\n dataQueue.push(text);\n if (resolveRead) {\n resolveRead(dataQueue.shift()!);\n resolveRead = null;\n }\n };\n\n const chunkListener = (res: any) => {\n if (errorOccurred || ended || !res.data) return;\n\n try {\n const newChunk = new Uint8Array(res.data as ArrayBuffer);\n\n // 追加\n const merged = new Uint8Array(chunkBuffer.length + newChunk.length);\n merged.set(chunkBuffer);\n merged.set(newChunk, chunkBuffer.length);\n chunkBuffer = merged;\n\n let decodeOffset = 0;\n\n while (decodeOffset < chunkBuffer.length) {\n // 尝试从当前偏移解码尽可能多的内容,但 stream: false\n const remaining = chunkBuffer.subarray(decodeOffset);\n const decoded = textDecoder.decode(remaining, { stream: false });\n\n if (decoded.length === 0) {\n // 连一个字符都解不出来,说明剩余部分不完整,等待下次 chunk\n break;\n }\n\n // 关键:计算真正被成功解码的字节数(不依赖 replacement character)\n // 方法1:利用 replacement character 出现的位置来推断(较可靠)\n // 方法2:更简单粗暴但在大多数场景够用:假设没有 � 就全消费,有 � 则回退\n if (decoded.includes(\"�\")) {\n // 有替换字符 → 说明后面有不完整序列,不能全消费\n // 保守策略:本次只消费到最后一个完整字符之前\n const lastGoodIndex = decoded.lastIndexOf(\"�\") === 0 ? 0 : decoded.indexOf(\"�\");\n if (lastGoodIndex <= 0) {\n break; // 连开头都不完整\n }\n\n const goodPart = decoded.slice(0, lastGoodIndex);\n if (goodPart) {\n pushChunk(goodPart);\n }\n\n // 估算已消费字节数(不完美,但比原来好很多)\n const encodedGood = new TextEncoder().encode(goodPart);\n decodeOffset += encodedGood.length;\n\n break; // 剩余部分等下次\n } else {\n // 没有 � → 说明本次 remaining 里全是完整字符,可以全部消费\n pushChunk(decoded);\n decodeOffset += remaining.length; // 安全,因为没出现替换字符\n }\n }\n\n // 保留剩余未解码部分\n chunkBuffer = chunkBuffer.subarray(decodeOffset);\n } catch (err) {\n console.error(\"[mini stream] chunk process error:\", err);\n }\n };\n\n const headersListener = (res: any) => {\n if (res.header?.[\"content-type\"]?.includes(\"text/event-stream\") === false) {\n console.warn(\"Warning: server did not return event-stream\");\n }\n };\n\n const miniReq = g.wx.request.bind(g.wx);\n\n let requestTask: any;\n\n try {\n requestTask = miniReq({\n url,\n method: \"POST\",\n header: {\n \"Content-Type\": \"application/json\",\n Accept: \"text/event-stream\",\n ...authHeader,\n },\n data: typeof data === \"string\" ? data : JSON.stringify(data),\n responseType: \"arraybuffer\",\n enableChunked: true,\n timeout: 300000,\n\n success: () => {\n if (chunkBuffer.length > 0) {\n const finalText = textDecoder.decode(chunkBuffer, { stream: true });\n pushChunk(finalText);\n }\n ended = true;\n resolveRead?.(null);\n },\n\n fail: () => {\n errorOccurred = true;\n ended = true;\n resolveRead?.(null);\n },\n });\n\n // 支持 abort\n if (signal) {\n if (signal.aborted) {\n requestTask.abort();\n } else {\n signal.addEventListener(\"abort\", () => {\n requestTask.abort();\n });\n }\n }\n\n // 关键:监听分块到达\n requestTask.onChunkReceived?.(chunkListener);\n // 可选:监听 HTTP headers 到达(可用于检查状态码)\n requestTask.onHeadersReceived?.(headersListener);\n\n resolve({\n ok: true,\n statusText: \"OK\",\n read: async () => {\n if (errorOccurred) return null;\n return pendingRead();\n },\n });\n } catch (error) {\n console.error(\"miniReq error\", error);\n }\n });\n}\n\nasync function createStream(\n url: string,\n data: unknown,\n getAccessToken?: () => string | null,\n signal?: AbortSignal\n): Promise<StreamResponse> {\n // Get token for authentication\n const token = getAccessToken?.();\n const authHeader: Record<string, string> = token ? { Authorization: `Bearer ${token}` } : {};\n\n if (typeof g?.wx?.request === \"function\") {\n return createWeChatMiniProgramStream(url, data, authHeader, signal);\n }\n const miniReq = getMiniProgramRequest();\n if (miniReq) {\n // Mini-program: buffer full response\n return new Promise((resolve) => {\n let buffer = \"\";\n let completed = false;\n let failed = false;\n let position = 0;\n\n const opts = {\n url,\n method: \"POST\",\n header: {\n \"Content-Type\": \"application/json\",\n Accept: \"text/event-stream\",\n ...authHeader,\n },\n data: typeof data === \"string\" ? data : JSON.stringify(data),\n timeout: 60000,\n success: (res: any) => {\n buffer = typeof res.data === \"string\" ? res.data : JSON.stringify(res.data);\n completed = true;\n },\n fail: (err: any) => {\n console.error(\"[createStream] wx.request failed:\", err);\n failed = true;\n completed = true;\n },\n complete: () => {},\n };\n\n try {\n const ret = miniReq(opts);\n\n if (ret && typeof ret.then === \"function\") {\n ret\n .then((res: any) => {\n buffer = typeof res.data === \"string\" ? res.data : JSON.stringify(res.data);\n completed = true;\n })\n .catch(() => {\n failed = true;\n completed = true;\n });\n }\n } catch (err) {\n console.error(\"[createStream] Exception:\", err);\n failed = true;\n completed = true;\n }\n\n resolve({\n ok: true,\n statusText: \"OK\",\n read: async () => {\n while (!completed && position >= buffer.length) {\n await new Promise((r) => setTimeout(r, 50));\n }\n if (failed) return null;\n if (position >= buffer.length) return completed ? null : \"\";\n const chunk = buffer.slice(position);\n position = buffer.length;\n return chunk;\n },\n });\n });\n }\n\n // Browser: use fetch streaming with authentication\n const headers: Record<string, string> = {\n \"Content-Type\": \"application/json\",\n ...authHeader,\n };\n\n const response = await fetch(url, {\n method: \"POST\",\n headers,\n credentials: \"include\",\n body: JSON.stringify(data),\n signal,\n });\n\n if (!response.body) {\n return {\n ok: response.ok,\n statusText: response.statusText,\n read: async () => null,\n };\n }\n\n const reader = response.body.getReader();\n const decoder = new TextDecoder();\n\n return {\n ok: response.ok,\n statusText: response.statusText,\n read: async () => {\n const { done, value } = await reader.read();\n if (done) return null;\n return decoder.decode(value, { stream: true });\n },\n };\n}\n\n// ============ Input Types ============\n\nexport interface TextContent {\n type: \"text\";\n text: string;\n}\n\nexport interface ImageContent {\n type: \"image\";\n data?: string;\n url?: string;\n mimeType?: string;\n}\n\nexport interface FileContent {\n type: \"file\";\n data?: string;\n url?: string;\n mimeType?: string;\n name?: string;\n}\n\nexport type MessageContent = TextContent | ImageContent | FileContent;\n\nexport interface ChatMessage {\n role: \"system\" | \"user\" | \"assistant\";\n content: string | MessageContent[];\n}\n\nexport interface ChatOptions {\n taskId?: string;\n}\n\n// ============ Convert Input to A2A Part ============\n\nfunction convertToA2AParts(content: string | MessageContent[]): Part[] {\n if (typeof content === \"string\") {\n return [{ kind: \"text\", text: content }];\n }\n\n return content\n .map((part): Part | null => {\n switch (part.type) {\n case \"text\":\n return { kind: \"text\", text: part.text };\n case \"image\":\n if (part.data) {\n return {\n kind: \"file\",\n file: {\n bytes: part.data,\n mimeType: part.mimeType || \"image/png\",\n },\n };\n }\n if (part.url) {\n return {\n kind: \"file\",\n file: { uri: part.url, mimeType: part.mimeType || \"image/png\" },\n };\n }\n return null;\n case \"file\":\n if (part.data) {\n return {\n kind: \"file\",\n file: {\n bytes: part.data,\n ...(part.mimeType && { mimeType: part.mimeType }),\n ...(part.name && { name: part.name }),\n },\n };\n }\n if (part.url) {\n return {\n kind: \"file\",\n file: {\n uri: part.url,\n ...(part.mimeType && { mimeType: part.mimeType }),\n ...(part.name && { name: part.name }),\n },\n };\n }\n return null;\n default:\n return null;\n }\n })\n .filter((part): part is Part => part !== null);\n}\n\nfunction extractTextFromContent(content: string | MessageContent[]): string {\n if (typeof content === \"string\") {\n return content;\n }\n return content\n .filter((part): part is TextContent => part.type === \"text\")\n .map((part) => part.text)\n .join(\"\\n\");\n}\n\n// ============ SSE Stream Handling ============\n\nasync function* parseSSEStream(\n streamResponse: StreamResponse,\n signal?: AbortSignal\n): AsyncGenerator<SendStreamingMessageResponse, void, unknown> {\n const queue: SendStreamingMessageResponse[] = [];\n\n const parser = createParser({\n onEvent: (event) => {\n try {\n queue.push(JSON.parse(event.data));\n } catch (err) {\n console.error(\"[parseSSEStream] Parse error:\", err);\n }\n },\n });\n\n try {\n while (true) {\n if (signal?.aborted) {\n break;\n }\n const chunk = await streamResponse.read();\n if (chunk === null) {\n break;\n }\n if (chunk) {\n parser.feed(chunk);\n while (queue.length > 0) {\n const item = queue.shift();\n if (item) {\n yield item;\n }\n }\n }\n }\n } catch (err) {\n if (signal?.aborted) {\n return;\n }\n console.error(\"[parseSSEStream] Stream error:\", err);\n }\n}\n\n// ============ Client ============\n\nexport type CopilotClient = {\n /**\n * Stream messages from Copilot Agent.\n *\n * @example\n * ```typescript\n * import { createCopilotClient, Data } from \"@amaster.ai/copilot-client\";\n *\n * const client = createCopilotClient();\n *\n * for await (const response of client.chat([{ role: \"user\", content: \"Hello\" }])) {\n * // deal response\n * }\n * ```\n */\n chat(\n messages: ChatMessage[],\n options?: ChatOptions\n ): AsyncGenerator<SendStreamingMessageResponse, void, unknown>;\n\n cancelChat(taskId: string): Promise<ClientResult<CancelTaskResponse>>;\n getChatStatus(taskId?: string): Promise<{\n working: boolean;\n taskId?: string;\n error?: string;\n }>;\n getHistory(\n limit?: number,\n next?: string\n ): Promise<\n | {\n messages: SendStreamingMessageResponse[];\n next: string;\n hasMore: boolean;\n }\n | undefined\n >;\n newConversation(): Promise<void>;\n};\n\n/**\n * Create Copilot client\n *\n * Auto-detects runtime environment (Browser/Vite/Taro H5/Taro Mini-program)\n */\nexport function createCopilotClient(\n http: HttpClient = createHttpClient(),\n baseUrl?: string,\n getAccessToken?: () => string | null,\n getUserUid?: () => string | null\n): CopilotClient {\n let envBaseUrl = \"\";\n let activeChatAbortController: AbortController | null = null;\n\n // Vite/H5:必须直接写 import.meta.env,Vite 才能正确处理\n const metaEnv = (import.meta as any)?.env;\n if (metaEnv) {\n envBaseUrl = metaEnv.TARO_APP_API_BASE_URL || metaEnv.VITE_API_BASE_URL || \"\";\n }\n\n // Taro 小程序 build:defineConstants 会把 process.env.xxx 替换为字面量\n // H5 环境:process 不存在会抛 ReferenceError,这里用 try/catch 吞掉\n if (!envBaseUrl) {\n try {\n envBaseUrl = process.env.TARO_APP_API_BASE_URL || process.env.VITE_API_BASE_URL || \"\";\n } catch {\n // process is not defined -> ignore\n }\n }\n\n envBaseUrl = String(envBaseUrl || \"\").trim();\n const url = `${baseUrl || envBaseUrl}/api/proxy/builtin/platform/copilot`;\n\n console.log(\"xxxxxx\");\n\n async function* sendMessageStream(\n request: SendStreamingMessageRequest,\n signal?: AbortSignal\n ): AsyncGenerator<SendStreamingMessageResponse, void, unknown> {\n try {\n const streamResponse = await createStream(url, request, getAccessToken, signal);\n\n if (!streamResponse.ok) {\n throw new Error(`Stream request failed: ${streamResponse.statusText}`);\n }\n\n yield* parseSSEStream(streamResponse, signal);\n } catch (err) {\n if (signal?.aborted) {\n return;\n }\n console.error(\"[sendMessageStream] Error:\", err);\n }\n }\n\n const getContextId = () => {\n let appId = getAppId();\n\n if (typeof g?.wx?.request === \"function\") {\n const hostname = url ? url.replace(/^https?:\\/\\//, \"\").split(\"/\")[0] : \"\";\n appId = getAppId(hostname);\n }\n\n const userUid = getUserUid?.() ?? (cachedAnonymousUid ??= `anonymous-${generateUUID()}`);\n const contextId = `${appId}:${userUid}`;\n return contextId;\n };\n\n return {\n async *chat(messages, chatOptions = {}) {\n const { taskId } = chatOptions;\n\n activeChatAbortController = createAbortController() as any;\n const signal = activeChatAbortController?.signal;\n\n try {\n const systemMsg = messages.find((m) => m.role === \"system\");\n const nonSystemMsgs = messages.filter((m) => m.role !== \"system\");\n const lastUserMsg = nonSystemMsgs[nonSystemMsgs.length - 1];\n\n const parts = lastUserMsg\n ? convertToA2AParts(lastUserMsg.content)\n : [{ kind: \"text\" as const, text: \"\" }];\n\n const systemPrompt = systemMsg ? extractTextFromContent(systemMsg.content) : undefined;\n\n const request: SendStreamingMessageRequest = {\n jsonrpc: \"2.0\",\n id: generateUUID(),\n method: \"message/stream\",\n params: {\n message: {\n contextId: getContextId(),\n kind: \"message\",\n messageId: generateUUID(),\n role: \"user\",\n parts,\n ...(taskId && { taskId }),\n ...(systemPrompt && { metadata: { systemPrompt } }),\n },\n },\n };\n\n for await (const response of sendMessageStream(request, signal)) {\n if (signal?.aborted) {\n break;\n }\n yield response;\n }\n } finally {\n activeChatAbortController = null;\n }\n },\n\n cancelChat(taskId) {\n activeChatAbortController?.abort();\n activeChatAbortController = null;\n\n const request: CancelTaskRequest = {\n jsonrpc: \"2.0\",\n id: generateUUID(),\n method: \"tasks/cancel\",\n params: { id: taskId },\n };\n return http.request<CancelTaskResponse>({\n url,\n method: \"POST\",\n data: request,\n });\n },\n\n async getHistory(limit = 50, next?: string) {\n try {\n const res: any = await http.request({\n url,\n method: \"POST\",\n data: {\n jsonrpc: \"2.0\",\n method: \"messages/list\",\n id: generateUUID(),\n params: { filter: { contextId: getContextId() }, limit, ...(next ? { next } : {}) },\n },\n });\n const result = res?.data?.result || {};\n const messages = result?.messages || [];\n const _next = result?.next || \"\";\n\n return {\n messages,\n next: _next,\n hasMore: !!_next,\n };\n } catch (err) {}\n },\n\n async newConversation() {\n try {\n await http.request({\n url,\n method: \"POST\",\n data: {\n jsonrpc: \"2.0\",\n method: \"messages/clear\",\n id: generateUUID(),\n params: { contextId: getContextId() },\n },\n });\n } catch (err) {}\n },\n\n async getChatStatus(taskId) {\n try {\n const request = {\n jsonrpc: \"2.0\",\n id: generateUUID(),\n method: \"tasks/get\",\n params: taskId\n ? { id: taskId }\n : {\n contextId: getContextId(),\n },\n };\n const result = await http.request<any>({\n url,\n method: \"POST\",\n data: request,\n });\n const data = result?.data?.result;\n return {\n working: data?.status?.state === \"working\",\n taskId: data?.id,\n error: data?.error?.message || \"\",\n };\n } catch (err) {\n return {\n working: false,\n error: (err as any)?.message || \"\",\n };\n }\n },\n };\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/copilot-client.ts"],"names":["g","getMiniProgramRequest","generateUUID","cryptoObj","c","r","SimpleAbortController","_","cb","createAbortController","getAppIdFromHostname","hostname","wwwMatch","domainMatch","extractAppIdFromUrl","url","pathMatch","cachedAppId","cachedAnonymousUid","getAppId","urlAppId","createWeChatMiniProgramStream","data","authHeader","signal","resolve","chunkBuffer","textDecoder","MiniProgramTextDecoder","ended","errorOccurred","dataQueue","resolveRead","pendingRead","pushChunk","text","chunkListener","res","newChunk","merged","decodeOffset","remaining","decoded","lastGoodIndex","goodPart","encodedGood","err","headersListener","miniReq","requestTask","finalText","error","createStream","getAccessToken","token","headers","response","reader","decoder","done","value","convertToA2AParts","content","part","extractTextFromContent","parseSSEStream","streamResponse","queue","parser","createParser","event","chunk","item","createCopilotClient","http","createHttpClient","baseUrl","getUserUid","envBaseUrl","activeChatAbortController","metaEnv","sendMessageStream","request","getContextId","appId","userUid","messages","chatOptions","taskId","systemMsg","m","nonSystemMsgs","lastUserMsg","parts","systemPrompt","limit","next","result","_next"],"mappings":"6IAgBA,IAAMA,CAAAA,CAAI,UAAA,CAEV,SAASC,CAAAA,EAAsD,CAC7D,OAAI,OAAOD,CAAAA,EAAG,IAAA,EAAM,OAAA,EAAY,UAAA,CAAmBA,CAAAA,CAAE,IAAA,CAAK,OAAA,CAAQ,IAAA,CAAKA,CAAAA,CAAE,IAAI,EACzE,OAAOA,CAAAA,EAAG,EAAA,EAAI,OAAA,EAAY,UAAA,CAAmBA,CAAAA,CAAE,EAAA,CAAG,OAAA,CAAQ,IAAA,CAAKA,CAAAA,CAAE,EAAE,CAAA,CACnE,OAAOA,CAAAA,EAAG,EAAA,EAAI,OAAA,EAAY,UAAA,CAAmBA,CAAAA,CAAE,EAAA,CAAG,OAAA,CAAQ,IAAA,CAAKA,CAAAA,CAAE,EAAE,CAAA,CACnE,OAAOA,CAAAA,EAAG,EAAA,EAAI,OAAA,EAAY,UAAA,CAAmBA,CAAAA,CAAE,GAAG,OAAA,CAAQ,IAAA,CAAKA,CAAAA,CAAE,EAAE,CAAA,CACnE,OAAOA,CAAAA,EAAG,IAAA,EAAM,OAAA,EAAY,UAAA,CAAmBA,CAAAA,CAAE,IAAA,CAAK,OAAA,CAAQ,IAAA,CAAKA,CAAAA,CAAE,IAAI,CAAA,CACzE,OAAOA,CAAAA,EAAG,EAAA,EAAI,OAAA,EAAY,UAAA,CAAmBA,CAAAA,CAAE,EAAA,CAAG,OAAA,CAAQ,IAAA,CAAKA,CAAAA,CAAE,EAAE,CAAA,CACnE,OAAOA,GAAG,EAAA,EAAI,OAAA,EAAY,UAAA,CAAmBA,CAAAA,CAAE,EAAA,CAAG,OAAA,CAAQ,IAAA,CAAKA,CAAAA,CAAE,EAAE,CAAA,CAChE,IACT,CAIA,SAASE,CAAAA,EAAuB,CAC9B,IAAMC,CAAAA,CAAY,OAAO,UAAA,CAAe,GAAA,CAAc,UAAA,CAAW,MAAA,CAAS,MAAA,CAE1E,OAAIA,CAAAA,EAAa,OAAOA,CAAAA,CAAU,UAAA,EAAe,UAAA,CACxCA,CAAAA,CAAU,YAAW,CAG1BA,CAAAA,EAAa,OAAOA,CAAAA,CAAU,eAAA,EAAoB,UAAA,CAC7C,sCAAA,CAAuC,OAAA,CAAQ,OAAA,CAAUC,CAAAA,EAAM,CAEpE,IAAMC,CAAAA,CAAAA,CADeF,CAAAA,CAAU,gBAAgB,IAAI,UAAA,CAAW,CAAC,CAAC,CAAA,CACxC,CAAC,CAAA,EAAK,CAAA,EAAK,EAAA,CAEnC,OAAA,CADUC,CAAAA,GAAM,GAAA,CAAMC,CAAAA,CAAKA,CAAAA,CAAI,EAAO,CAAA,EAC7B,QAAA,CAAS,EAAE,CACtB,CAAC,CAAA,CAGI,sCAAA,CAAuC,OAAA,CAAQ,OAAA,CAAUD,CAAAA,EAAM,CACpE,IAAMC,CAAAA,CAAK,IAAA,CAAK,MAAA,EAAO,CAAI,EAAA,CAAM,CAAA,CAEjC,OAAA,CADUD,CAAAA,GAAM,GAAA,CAAMC,CAAAA,CAAKA,CAAAA,CAAI,CAAA,CAAO,CAAA,EAC7B,QAAA,CAAS,EAAE,CACtB,CAAC,CACH,CAGA,IAAMC,CAAAA,CAAN,KAA4B,CAA5B,WAAA,EAAA,CACE,IAAA,CAAA,OAAA,CAAU,KAAA,CACV,IAAA,CAAQ,SAAA,CAA4B,EAAC,CAErC,IAAA,CAAA,MAAA,CAAS,CACP,OAAA,CAAS,KAAA,CACT,gBAAA,CAAkB,CAACC,CAAAA,CAAYC,CAAAA,GAAmB,CAChD,IAAA,CAAK,SAAA,CAAU,IAAA,CAAKA,CAAE,EACxB,CACF,EAAA,CAEA,KAAA,EAAQ,CACF,IAAA,CAAK,UACT,IAAA,CAAK,OAAA,CAAU,IAAA,CACf,IAAA,CAAK,MAAA,CAAO,OAAA,CAAU,IAAA,CACtB,IAAA,CAAK,SAAA,CAAU,OAAA,CAASA,CAAAA,EAAOA,CAAAA,EAAI,CAAA,EACrC,CACF,CAAA,CAEA,SAASC,CAAAA,EAAiE,CACxE,OAAI,OAAO,eAAA,CAAoB,GAAA,CACtB,IAAI,eAAA,CAEN,IAAIH,CACb,CAIA,SAASI,CAAAA,CAAqBC,EAAiC,CAE7D,IAAMC,CAAAA,CAAW,wDAAA,CAAyD,IAAA,CAAKD,CAAQ,CAAA,CACvF,GAAIC,CAAAA,GAAW,CAAC,CAAA,CAAG,OAAOA,CAAAA,CAAS,CAAC,EAGpC,IAAMC,CAAAA,CAAc,mDAAA,CAAoD,IAAA,CAAKF,CAAQ,CAAA,CACrF,OAAIE,CAAAA,GAAc,CAAC,CAAA,CAAUA,CAAAA,CAAY,CAAC,CAAA,CAEnC,IACT,CAEA,SAASC,CAAAA,EAAqC,CAC5C,GAAI,OAAO,MAAA,CAAW,GAAA,CAAa,OAAO,IAAA,CAE1C,GAAI,CACF,IAAMC,CAAAA,CAAM,MAAA,CAAO,QAAA,CAAS,IAAA,CACtBC,CAAAA,CAAY,4BAAA,CAA6B,IAAA,CAAKD,CAAG,CAAA,CACvD,OAAIC,CAAAA,GAAY,CAAC,CAAA,CAAUA,CAAAA,CAAU,CAAC,CAAA,CAC/BN,CAAAA,CAAqB,MAAA,CAAO,SAAS,QAAQ,CACtD,CAAA,KAAQ,CACN,OAAO,IACT,CACF,CAGA,IAAIO,CAAAA,CAA6B,IAAA,CAG7BC,CAAAA,CAAoC,IAAA,CAExC,SAASC,CAAAA,CAASR,CAAAA,CAA2B,CAC3C,IAAMS,CAAAA,CAAWT,CAAAA,CAAWD,CAAAA,CAAqBC,CAAQ,CAAA,CAAIG,CAAAA,EAAoB,CACjF,OAAIM,CAAAA,GACCH,CAAAA,GAAaA,CAAAA,CAAcf,CAAAA,IACzBe,CAAAA,CACT,CAWA,eAAeI,CAAAA,CACbN,CAAAA,CACAO,CAAAA,CACAC,CAAAA,CAAqC,EAAC,CACtCC,CAAAA,CACyB,CACzB,OAAO,IAAI,OAAA,CAAyBC,CAAAA,EAAY,CAC9C,IAAIC,CAAAA,CAAc,IAAI,UAAA,CAAW,CAAC,CAAA,CAC5BC,CAAAA,CAAc,IAAIC,CAAAA,CAAuB,OAAA,CAAS,CAAE,KAAA,CAAO,KAAM,CAAC,EAEpEC,CAAAA,CAAQ,KAAA,CACRC,CAAAA,CAAgB,KAAA,CAEdC,CAAAA,CAAsB,EAAC,CACzBC,CAAAA,CAAuD,IAAA,CAErDC,CAAAA,CAAc,IAClB,IAAI,OAAA,CAAwB5B,CAAAA,EAAM,CAC5B0B,CAAAA,CAAU,MAAA,CAAS,CAAA,CACrB1B,CAAAA,CAAE0B,CAAAA,CAAU,KAAA,EAAQ,CAAA,CACXF,CAAAA,CACTxB,CAAAA,CAAE,IAAI,CAAA,CAEN2B,CAAAA,CAAc3B,EAElB,CAAC,EAEG6B,CAAAA,CAAaC,CAAAA,EAAiB,CAC7BA,CAAAA,GACLJ,CAAAA,CAAU,IAAA,CAAKI,CAAI,CAAA,CACfH,CAAAA,GACFA,CAAAA,CAAYD,CAAAA,CAAU,KAAA,EAAQ,CAAA,CAC9BC,CAAAA,CAAc,IAAA,CAAA,EAElB,CAAA,CAEMI,CAAAA,CAAiBC,CAAAA,EAAa,CAClC,GAAI,EAAAP,CAAAA,EAAiBD,CAAAA,EAAS,CAACQ,CAAAA,CAAI,IAAA,CAAA,CAEnC,GAAI,CACF,IAAMC,EAAW,IAAI,UAAA,CAAWD,CAAAA,CAAI,IAAmB,CAAA,CAGjDE,CAAAA,CAAS,IAAI,UAAA,CAAWb,CAAAA,CAAY,MAAA,CAASY,CAAAA,CAAS,MAAM,CAAA,CAClEC,CAAAA,CAAO,GAAA,CAAIb,CAAW,CAAA,CACtBa,CAAAA,CAAO,GAAA,CAAID,CAAAA,CAAUZ,CAAAA,CAAY,MAAM,CAAA,CACvCA,CAAAA,CAAca,CAAAA,CAEd,IAAIC,CAAAA,CAAe,CAAA,CAEnB,KAAOA,CAAAA,CAAed,EAAY,MAAA,EAAQ,CAExC,IAAMe,CAAAA,CAAYf,CAAAA,CAAY,QAAA,CAASc,CAAY,CAAA,CAC7CE,CAAAA,CAAUf,CAAAA,CAAY,MAAA,CAAOc,CAAAA,CAAW,CAAE,MAAA,CAAQ,CAAA,CAAM,CAAC,CAAA,CAE/D,GAAIC,CAAAA,CAAQ,MAAA,GAAW,CAAA,CAErB,MAMF,GAAIA,CAAAA,CAAQ,QAAA,CAAS,QAAG,CAAA,CAAG,CAGzB,IAAMC,CAAAA,CAAgBD,EAAQ,WAAA,CAAY,QAAG,CAAA,GAAM,CAAA,CAAI,CAAA,CAAIA,CAAAA,CAAQ,OAAA,CAAQ,QAAG,CAAA,CAC9E,GAAIC,CAAAA,EAAiB,CAAA,CACnB,MAGF,IAAMC,EAAWF,CAAAA,CAAQ,KAAA,CAAM,CAAA,CAAGC,CAAa,CAAA,CAC3CC,CAAAA,EACFV,CAAAA,CAAUU,CAAQ,CAAA,CAIpB,IAAMC,CAAAA,CAAc,IAAI,WAAA,EAAY,CAAE,OAAOD,CAAQ,CAAA,CACrDJ,CAAAA,EAAgBK,CAAAA,CAAY,MAAA,CAE5B,KACF,CAAA,KAEEX,CAAAA,CAAUQ,CAAO,CAAA,CACjBF,CAAAA,EAAgBC,CAAAA,CAAU,OAE9B,CAGAf,CAAAA,CAAcA,CAAAA,CAAY,QAAA,CAASc,CAAY,EACjD,CAAA,MAASM,CAAAA,CAAK,CACZ,OAAA,CAAQ,KAAA,CAAM,oCAAA,CAAsCA,CAAG,EACzD,CACF,CAAA,CAEMC,CAAAA,CAAmBV,GAAa,CAChCA,CAAAA,CAAI,MAAA,GAAS,cAAc,CAAA,EAAG,QAAA,CAAS,mBAAmB,CAAA,GAAM,KAAA,EAClE,OAAA,CAAQ,IAAA,CAAK,6CAA6C,EAE9D,CAAA,CAEMW,CAAAA,CAAU/C,CAAAA,EAAsB,CACtC,GAAI,CAAC+C,CAAAA,CAAS,OAEd,IAAIC,CAAAA,CAEJ,GAAI,CACFA,CAAAA,CAAcD,CAAAA,CAAQ,CACpB,GAAA,CAAAjC,CAAAA,CACA,OAAQ,MAAA,CACR,MAAA,CAAQ,CACN,cAAA,CAAgB,kBAAA,CAChB,MAAA,CAAQ,mBAAA,CACR,GAAGQ,CACL,CAAA,CACA,IAAA,CAAM,OAAOD,CAAAA,EAAS,QAAA,CAAWA,CAAAA,CAAO,IAAA,CAAK,SAAA,CAAUA,CAAI,CAAA,CAC3D,YAAA,CAAc,aAAA,CACd,aAAA,CAAe,CAAA,CAAA,CACf,OAAA,CAAS,GAAA,CAET,OAAA,CAAS,IAAM,CACb,GAAII,CAAAA,CAAY,OAAS,CAAA,CAAG,CAC1B,IAAMwB,CAAAA,CAAYvB,CAAAA,CAAY,MAAA,CAAOD,CAAAA,CAAa,CAAE,MAAA,CAAQ,CAAA,CAAK,CAAC,CAAA,CAClEQ,CAAAA,CAAUgB,CAAS,EACrB,CACArB,CAAAA,CAAQ,CAAA,CAAA,CACRG,CAAAA,GAAc,IAAI,EACpB,CAAA,CAEA,IAAA,CAAM,IAAM,CACVF,CAAAA,CAAgB,CAAA,CAAA,CAChBD,CAAAA,CAAQ,CAAA,CAAA,CACRG,CAAAA,GAAc,IAAI,EACpB,CACF,CAAC,CAAA,CAGGR,CAAAA,GACEA,CAAAA,CAAO,OAAA,CACTyB,CAAAA,CAAY,KAAA,EAAM,CAElBzB,CAAAA,CAAO,gBAAA,CAAiB,OAAA,CAAS,IAAM,CACrCyB,CAAAA,CAAY,KAAA,GACd,CAAC,CAAA,CAAA,CAKLA,CAAAA,CAAY,eAAA,GAAkBb,CAAa,CAAA,CAE3Ca,CAAAA,CAAY,iBAAA,GAAoBF,CAAe,CAAA,CAE/CtB,CAAAA,CAAQ,CACN,GAAI,CAAA,CAAA,CACJ,UAAA,CAAY,IAAA,CACZ,IAAA,CAAM,SACAK,CAAAA,CAAsB,IAAA,CACnBG,CAAAA,EAEX,CAAC,EACH,CAAA,MAASkB,CAAAA,CAAO,CACd,OAAA,CAAQ,KAAA,CAAM,eAAA,CAAiBA,CAAK,EACtC,CACF,CAAC,CACH,CAEA,eAAeC,CAAAA,CACbrC,CAAAA,CACAO,CAAAA,CACA+B,CAAAA,CACA7B,CAAAA,CACyB,CAEzB,IAAM8B,CAAAA,CAAQD,CAAAA,IAAiB,CACzB9B,CAAAA,CAAqC+B,CAAAA,CAAQ,CAAE,aAAA,CAAe,CAAA,OAAA,EAAUA,CAAK,CAAA,CAAG,CAAA,CAAI,EAAC,CAI3F,GADgBrD,CAAAA,EAAsB,CAEpC,OAAOoB,CAAAA,CAA8BN,CAAAA,CAAKO,CAAAA,CAAMC,CAAAA,CAAYC,CAAM,CAAA,CAIpE,IAAM+B,CAAAA,CAAkC,CACtC,cAAA,CAAgB,kBAAA,CAChB,GAAGhC,CACL,EAEMiC,CAAAA,CAAW,MAAM,KAAA,CAAMzC,CAAAA,CAAK,CAChC,MAAA,CAAQ,MAAA,CACR,OAAA,CAAAwC,CAAAA,CACA,WAAA,CAAa,SAAA,CACb,IAAA,CAAM,IAAA,CAAK,SAAA,CAAUjC,CAAI,CAAA,CACzB,MAAA,CAAAE,CACF,CAAC,CAAA,CAED,GAAI,CAACgC,CAAAA,CAAS,IAAA,CACZ,OAAO,CACL,EAAA,CAAIA,CAAAA,CAAS,EAAA,CACb,WAAYA,CAAAA,CAAS,UAAA,CACrB,IAAA,CAAM,SAAY,IACpB,CAAA,CAGF,IAAMC,CAAAA,CAASD,CAAAA,CAAS,IAAA,CAAK,SAAA,EAAU,CACjCE,CAAAA,CAAU,IAAI,WAAA,CAEpB,OAAO,CACL,EAAA,CAAIF,CAAAA,CAAS,EAAA,CACb,UAAA,CAAYA,CAAAA,CAAS,UAAA,CACrB,IAAA,CAAM,SAAY,CAChB,GAAM,CAAE,IAAA,CAAAG,CAAAA,CAAM,MAAAC,CAAM,CAAA,CAAI,MAAMH,CAAAA,CAAO,IAAA,EAAK,CAC1C,OAAIE,CAAAA,CAAa,IAAA,CACVD,CAAAA,CAAQ,MAAA,CAAOE,CAAAA,CAAO,CAAE,MAAA,CAAQ,IAAK,CAAC,CAC/C,CACF,CACF,CAqCA,SAASC,CAAAA,CAAkBC,CAAAA,CAA4C,CACrE,OAAI,OAAOA,CAAAA,EAAY,QAAA,CACd,CAAC,CAAE,KAAM,MAAA,CAAQ,IAAA,CAAMA,CAAQ,CAAC,CAAA,CAGlCA,CAAAA,CACJ,GAAA,CAAKC,CAAAA,EAAsB,CAC1B,OAAQA,CAAAA,CAAK,IAAA,EACX,KAAK,MAAA,CACH,OAAO,CAAE,IAAA,CAAM,MAAA,CAAQ,IAAA,CAAMA,CAAAA,CAAK,IAAK,CAAA,CACzC,KAAK,OAAA,CACH,OAAIA,CAAAA,CAAK,IAAA,CACA,CACL,IAAA,CAAM,OACN,IAAA,CAAM,CACJ,KAAA,CAAOA,CAAAA,CAAK,IAAA,CACZ,QAAA,CAAUA,CAAAA,CAAK,QAAA,EAAY,WAC7B,CACF,CAAA,CAEEA,CAAAA,CAAK,GAAA,CACA,CACL,IAAA,CAAM,MAAA,CACN,IAAA,CAAM,CAAE,GAAA,CAAKA,CAAAA,CAAK,GAAA,CAAK,QAAA,CAAUA,CAAAA,CAAK,QAAA,EAAY,WAAY,CAChE,CAAA,CAEK,IAAA,CACT,KAAK,MAAA,CACH,OAAIA,CAAAA,CAAK,IAAA,CACA,CACL,IAAA,CAAM,MAAA,CACN,IAAA,CAAM,CACJ,KAAA,CAAOA,CAAAA,CAAK,IAAA,CACZ,GAAIA,CAAAA,CAAK,QAAA,EAAY,CAAE,QAAA,CAAUA,CAAAA,CAAK,QAAS,CAAA,CAC/C,GAAIA,CAAAA,CAAK,IAAA,EAAQ,CAAE,IAAA,CAAMA,CAAAA,CAAK,IAAK,CACrC,CACF,CAAA,CAEEA,CAAAA,CAAK,GAAA,CACA,CACL,IAAA,CAAM,MAAA,CACN,IAAA,CAAM,CACJ,GAAA,CAAKA,CAAAA,CAAK,GAAA,CACV,GAAIA,CAAAA,CAAK,QAAA,EAAY,CAAE,QAAA,CAAUA,CAAAA,CAAK,QAAS,CAAA,CAC/C,GAAIA,CAAAA,CAAK,IAAA,EAAQ,CAAE,IAAA,CAAMA,CAAAA,CAAK,IAAK,CACrC,CACF,CAAA,CAEK,IAAA,CACT,QACE,OAAO,IACX,CACF,CAAC,CAAA,CACA,MAAA,CAAQA,CAAAA,EAAuBA,CAAAA,GAAS,IAAI,CACjD,CAEA,SAASC,CAAAA,CAAuBF,CAAAA,CAA4C,CAC1E,OAAI,OAAOA,CAAAA,EAAY,QAAA,CACdA,CAAAA,CAEFA,CAAAA,CACJ,MAAA,CAAQC,CAAAA,EAA8BA,CAAAA,CAAK,IAAA,GAAS,MAAM,CAAA,CAC1D,GAAA,CAAKA,CAAAA,EAASA,CAAAA,CAAK,IAAI,CAAA,CACvB,IAAA,CAAK;AAAA,CAAI,CACd,CAIA,eAAgBE,CAAAA,CACdC,EACA1C,CAAAA,CAC6D,CAC7D,IAAM2C,CAAAA,CAAwC,EAAC,CAEzCC,CAAAA,CAASC,YAAAA,CAAa,CAC1B,OAAA,CAAUC,CAAAA,EAAU,CAClB,GAAI,CACFH,CAAAA,CAAM,IAAA,CAAK,IAAA,CAAK,MAAMG,CAAAA,CAAM,IAAI,CAAC,EACnC,OAASxB,CAAAA,CAAK,CACZ,OAAA,CAAQ,KAAA,CAAM,gCAAiCA,CAAG,EACpD,CACF,CACF,CAAC,CAAA,CAED,GAAI,CACF,KACM,CAAAtB,CAAAA,EAAQ,OAAA,EADD,CAIX,IAAM+C,CAAAA,CAAQ,MAAML,CAAAA,CAAe,MAAK,CACxC,GAAIK,CAAAA,GAAU,IAAA,CACZ,MAEF,GAAIA,CAAAA,CAEF,IADAH,EAAO,IAAA,CAAKG,CAAK,CAAA,CACVJ,CAAAA,CAAM,OAAS,CAAA,EAAG,CACvB,IAAMK,CAAAA,CAAOL,EAAM,KAAA,EAAM,CACrBK,CAAAA,GACF,MAAMA,CAAAA,EAEV,CAEJ,CACF,CAAA,MAAS1B,EAAK,CACZ,GAAItB,CAAAA,EAAQ,OAAA,CACV,OAEF,OAAA,CAAQ,KAAA,CAAM,gCAAA,CAAkCsB,CAAG,EACrD,CACF,CAiDO,SAAS2B,CAAAA,CACdC,CAAAA,CAAmBC,gBAAAA,EAAiB,CACpCC,EACAvB,CAAAA,CACAwB,CAAAA,CACe,CACf,IAAIC,EAAa,EAAA,CACbC,CAAAA,CAAoD,IAAA,CAGlDC,CAAAA,CAAW,aAAqB,GAAA,CAOtC,GANIA,CAAAA,GACFF,CAAAA,CAAaE,CAAAA,CAAQ,qBAAA,EAAyBA,CAAAA,CAAQ,iBAAA,EAAqB,IAKzE,CAACF,CAAAA,CACH,GAAI,CACFA,EAAa,OAAA,CAAQ,GAAA,CAAI,qBAAA,EAAyB,OAAA,CAAQ,IAAI,iBAAA,EAAqB,GACrF,CAAA,KAAQ,CAER,CAGFA,CAAAA,CAAa,MAAA,CAAOA,CAAAA,EAAc,EAAE,CAAA,CAAE,IAAA,EAAK,CAC3C,IAAM/D,EAAM,CAAA,EAAG6D,CAAAA,EAAWE,CAAU,CAAA,mCAAA,CAAA,CAEpC,eAAgBG,CAAAA,CACdC,CAAAA,CACA1D,CAAAA,CAC6D,CAC7D,GAAI,CACF,IAAM0C,CAAAA,CAAiB,MAAMd,CAAAA,CAAarC,CAAAA,CAAKmE,CAAAA,CAAS7B,CAAAA,CAAgB7B,CAAM,CAAA,CAE9E,GAAI,CAAC0C,EAAe,EAAA,CAClB,MAAM,IAAI,KAAA,CAAM,CAAA,uBAAA,EAA0BA,CAAAA,CAAe,UAAU,CAAA,CAAE,EAGvE,MAAOD,CAAAA,CAAeC,CAAAA,CAAgB1C,CAAM,EAC9C,CAAA,MAASsB,CAAAA,CAAK,CACZ,GAAItB,GAAQ,OAAA,CACV,OAEF,OAAA,CAAQ,KAAA,CAAM,4BAAA,CAA8BsB,CAAG,EACjD,CACF,CAEA,IAAMqC,CAAAA,CAAe,IAAM,CACzB,IAAIC,CAAAA,CAAQjE,CAAAA,EAAS,CAErB,GAAI,OAAOnB,CAAAA,EAAG,EAAA,EAAI,OAAA,EAAY,UAAA,CAAY,CACxC,IAAMW,CAAAA,CAAWI,CAAAA,CAAMA,EAAI,OAAA,CAAQ,cAAA,CAAgB,EAAE,CAAA,CAAE,MAAM,GAAG,CAAA,CAAE,CAAC,CAAA,CAAI,GACvEqE,CAAAA,CAAQjE,CAAAA,CAASR,CAAQ,EAC3B,CAEA,IAAM0E,CAAAA,CAAUR,CAAAA,MAAmB3D,CAAAA,GAAAA,CAAAA,CAAuB,CAAA,UAAA,EAAahB,CAAAA,EAAc,CAAA,CAAA,CAAA,CAErF,OADkB,CAAA,EAAGkF,CAAK,IAAIC,CAAO,CAAA,CAEvC,CAAA,CAEA,OAAO,CACL,MAAO,IAAA,CAAKC,CAAAA,CAAUC,EAAc,EAAC,CAAG,CACtC,GAAM,CAAE,MAAA,CAAAC,CAAO,CAAA,CAAID,CAAAA,CAEnBR,EAA4BtE,CAAAA,EAAsB,CAClD,IAAMe,CAAAA,CAASuD,CAAAA,EAA2B,MAAA,CAE1C,GAAI,CACF,IAAMU,CAAAA,CAAYH,CAAAA,CAAS,IAAA,CAAMI,CAAAA,EAAMA,EAAE,IAAA,GAAS,QAAQ,CAAA,CACpDC,CAAAA,CAAgBL,EAAS,MAAA,CAAQI,CAAAA,EAAMA,CAAAA,CAAE,IAAA,GAAS,QAAQ,CAAA,CAC1DE,CAAAA,CAAcD,CAAAA,CAAcA,EAAc,MAAA,CAAS,CAAC,CAAA,CAEpDE,CAAAA,CAAQD,EACV/B,CAAAA,CAAkB+B,CAAAA,CAAY,OAAO,CAAA,CACrC,CAAC,CAAE,IAAA,CAAM,MAAA,CAAiB,IAAA,CAAM,EAAG,CAAC,CAAA,CAElCE,CAAAA,CAAeL,EAAYzB,CAAAA,CAAuByB,CAAAA,CAAU,OAAO,CAAA,CAAI,KAAA,CAAA,CAEvEP,CAAAA,CAAuC,CAC3C,OAAA,CAAS,MACT,EAAA,CAAIhF,CAAAA,EAAa,CACjB,MAAA,CAAQ,gBAAA,CACR,MAAA,CAAQ,CACN,OAAA,CAAS,CACP,SAAA,CAAWiF,CAAAA,EAAa,CACxB,IAAA,CAAM,UACN,SAAA,CAAWjF,CAAAA,EAAa,CACxB,IAAA,CAAM,OACN,KAAA,CAAA2F,CAAAA,CACA,GAAIL,CAAAA,EAAU,CAAE,MAAA,CAAAA,CAAO,CAAA,CACvB,GAAIM,CAAAA,EAAgB,CAAE,QAAA,CAAU,CAAE,YAAA,CAAAA,CAAa,CAAE,CACnD,CACF,CACF,CAAA,CAEA,UAAA,IAAiBtC,CAAAA,IAAYyB,CAAAA,CAAkBC,CAAAA,CAAS1D,CAAM,CAAA,CAAG,CAC/D,GAAIA,CAAAA,EAAQ,OAAA,CACV,MAEF,MAAMgC,EACR,CACF,CAAA,OAAE,CACAuB,EAA4B,KAC9B,CACF,CAAA,CAEA,UAAA,CAAWS,CAAAA,CAAQ,CACjBT,CAAAA,EAA2B,KAAA,GAC3BA,CAAAA,CAA4B,IAAA,CAE5B,IAAMG,CAAAA,CAA6B,CACjC,OAAA,CAAS,KAAA,CACT,EAAA,CAAIhF,GAAa,CACjB,MAAA,CAAQ,cAAA,CACR,MAAA,CAAQ,CAAE,EAAA,CAAIsF,CAAO,CACvB,EACA,OAAOd,CAAAA,CAAK,OAAA,CAA4B,CACtC,IAAA3D,CAAAA,CACA,MAAA,CAAQ,MAAA,CACR,IAAA,CAAMmE,CACR,CAAC,CACH,CAAA,CAEA,MAAM,UAAA,CAAWa,CAAAA,CAAQ,EAAA,CAAIC,CAAAA,CAAe,CAC1C,GAAI,CAWF,IAAMC,CAAAA,CAAAA,CAVW,MAAMvB,CAAAA,CAAK,OAAA,CAAQ,CAClC,GAAA,CAAA3D,EACA,MAAA,CAAQ,MAAA,CACR,IAAA,CAAM,CACJ,OAAA,CAAS,KAAA,CACT,MAAA,CAAQ,eAAA,CACR,GAAIb,CAAAA,EAAa,CACjB,MAAA,CAAQ,CAAE,OAAQ,CAAE,SAAA,CAAWiF,CAAAA,EAAe,EAAG,KAAA,CAAAY,CAAAA,CAAO,GAAIC,CAAAA,CAAO,CAAE,IAAA,CAAAA,CAAK,CAAA,CAAI,EAAI,CACpF,CACF,CAAC,CAAA,GACmB,IAAA,EAAM,MAAA,EAAU,GAC9BV,CAAAA,CAAWW,CAAAA,EAAQ,QAAA,EAAY,EAAC,CAChCC,CAAAA,CAAQD,CAAAA,EAAQ,IAAA,EAAQ,GAE9B,OAAO,CACL,QAAA,CAAAX,CAAAA,CACA,KAAMY,CAAAA,CACN,OAAA,CAAS,CAAC,CAACA,CACb,CACF,CAAA,KAAc,CAAC,CACjB,CAAA,CAEA,MAAM,eAAA,EAAkB,CACtB,GAAI,CACF,MAAMxB,CAAAA,CAAK,OAAA,CAAQ,CACjB,GAAA,CAAA3D,CAAAA,CACA,MAAA,CAAQ,MAAA,CACR,KAAM,CACJ,OAAA,CAAS,KAAA,CACT,MAAA,CAAQ,gBAAA,CACR,EAAA,CAAIb,CAAAA,EAAa,CACjB,OAAQ,CAAE,SAAA,CAAWiF,CAAAA,EAAe,CACtC,CACF,CAAC,EACH,CAAA,KAAc,CAAC,CACjB,CAAA,CAEA,MAAM,aAAA,CAAcK,CAAAA,CAAQ,CAC1B,GAAI,CACF,IAAMN,CAAAA,CAAU,CACd,OAAA,CAAS,KAAA,CACT,EAAA,CAAIhF,CAAAA,EAAa,CACjB,MAAA,CAAQ,YACR,MAAA,CAAQsF,CAAAA,CACJ,CAAE,EAAA,CAAIA,CAAO,CAAA,CACb,CACE,SAAA,CAAWL,GACb,CACN,CAAA,CAMM7D,CAAAA,CAAAA,CALS,MAAMoD,CAAAA,CAAK,OAAA,CAAa,CACrC,GAAA,CAAA3D,EACA,MAAA,CAAQ,MAAA,CACR,IAAA,CAAMmE,CACR,CAAC,CAAA,GACoB,IAAA,EAAM,MAAA,CAC3B,OAAO,CACL,OAAA,CAAS5D,CAAAA,EAAM,MAAA,EAAQ,QAAU,SAAA,CACjC,MAAA,CAAQA,CAAAA,EAAM,EAAA,CACd,MAAOA,CAAAA,EAAM,KAAA,EAAO,OAAA,EAAW,EACjC,CACF,CAAA,MAASwB,CAAAA,CAAK,CACZ,OAAO,CACL,OAAA,CAAS,KAAA,CACT,KAAA,CAAQA,GAAa,OAAA,EAAW,EAClC,CACF,CACF,CACF,CACF","file":"index.js","sourcesContent":["/* eslint-disable no-undef, no-unused-vars */\nimport type {\n CancelTaskRequest,\n CancelTaskResponse,\n Part,\n SendStreamingMessageRequest,\n SendStreamingMessageResponse,\n} from \"@a2a-js/sdk\";\nimport { type ClientResult, createHttpClient, type HttpClient } from \"@amaster.ai/http-client\";\nimport { createParser } from \"eventsource-parser\";\nimport MiniProgramTextDecoder from \"miniprogram-text-decoder\";\n// import MiniProgramTextEncoder from \"miniprogram-text-encoder\";\n\n// ============ Internal: Platform Detection (same as http-client) ============\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nconst g = globalThis as any;\n\nfunction getMiniProgramRequest(): ((_opts: any) => any) | null {\n if (typeof g?.Taro?.request === \"function\") return g.Taro.request.bind(g.Taro);\n if (typeof g?.wx?.request === \"function\") return g.wx.request.bind(g.wx);\n if (typeof g?.tt?.request === \"function\") return g.tt.request.bind(g.tt);\n if (typeof g?.my?.request === \"function\") return g.my.request.bind(g.my);\n if (typeof g?.swan?.request === \"function\") return g.swan.request.bind(g.swan);\n if (typeof g?.qq?.request === \"function\") return g.qq.request.bind(g.qq);\n if (typeof g?.jd?.request === \"function\") return g.jd.request.bind(g.jd);\n return null;\n}\n\n// ============ Internal: UUID Generator ============\n\nfunction generateUUID(): string {\n const cryptoObj = typeof globalThis !== \"undefined\" ? globalThis.crypto : undefined;\n\n if (cryptoObj && typeof cryptoObj.randomUUID === \"function\") {\n return cryptoObj.randomUUID();\n }\n\n if (cryptoObj && typeof cryptoObj.getRandomValues === \"function\") {\n return \"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx\".replace(/[xy]/g, (c) => {\n const randomValues = cryptoObj.getRandomValues(new Uint8Array(1));\n const r = (randomValues[0] ?? 0) % 16;\n const v = c === \"x\" ? r : (r & 0x3) | 0x8;\n return v.toString(16);\n });\n }\n\n return \"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx\".replace(/[xy]/g, (c) => {\n const r = (Math.random() * 16) | 0;\n const v = c === \"x\" ? r : (r & 0x3) | 0x8;\n return v.toString(16);\n });\n}\n\n// ============ AbortController Polyfill (Mini Program Safe) ============\nclass SimpleAbortController {\n aborted = false;\n private listeners: (() => void)[] = [];\n\n signal = {\n aborted: false,\n addEventListener: (_: \"abort\", cb: () => void) => {\n this.listeners.push(cb);\n },\n };\n\n abort() {\n if (this.aborted) return;\n this.aborted = true;\n this.signal.aborted = true;\n this.listeners.forEach((cb) => cb());\n }\n}\n\nfunction createAbortController(): AbortController | SimpleAbortController {\n if (typeof AbortController !== \"undefined\") {\n return new AbortController();\n }\n return new SimpleAbortController();\n}\n\n// ============ Internal: URL Utilities ============\n\nfunction getAppIdFromHostname(hostname: string): string | null {\n // Pattern 1: www.{app_id}.domain.tld or www.{app_id}-{env}.domain.tld\n const wwwMatch = /^www\\.([\\da-z-]+)(?:-[^.]+)?\\.[\\w-]+\\.(?:local|ai|cn)$/.exec(hostname);\n if (wwwMatch?.[1]) return wwwMatch[1];\n\n // Pattern 2: {app_id}-{env}.domain.tld or {app_id}.domain.tld\n const domainMatch = /^([\\da-z-]+)(?:-[^.]+)?\\.[\\w-]+\\.(?:local|ai|cn)$/.exec(hostname);\n if (domainMatch?.[1]) return domainMatch[1];\n\n return null;\n}\n\nfunction extractAppIdFromUrl(): string | null {\n if (typeof window === \"undefined\") return null;\n\n try {\n const url = window.location.href;\n const pathMatch = /\\/app\\/([\\da-z-]+)(?:\\/|$)/.exec(url);\n if (pathMatch?.[1]) return pathMatch[1];\n return getAppIdFromHostname(window.location.hostname);\n } catch {\n return null;\n }\n}\n\n// Cache appId for session consistency\nlet cachedAppId: string | null = null;\n\n// Cache anonymous user ID for session consistency\nlet cachedAnonymousUid: string | null = null;\n\nfunction getAppId(hostname?: string): string {\n const urlAppId = hostname ? getAppIdFromHostname(hostname) : extractAppIdFromUrl();\n if (urlAppId) return urlAppId;\n if (!cachedAppId) cachedAppId = generateUUID();\n return cachedAppId;\n}\n\n// ============ Internal: Streaming ============\n\ninterface StreamResponse {\n ok: boolean;\n statusText: string;\n read(): Promise<string | null>;\n}\n\n// 小程序专用的流式请求\nasync function createWeChatMiniProgramStream(\n url: string,\n data: unknown,\n authHeader: Record<string, string> = {},\n signal?: AbortSignal\n): Promise<StreamResponse> {\n return new Promise<StreamResponse>((resolve) => {\n let chunkBuffer = new Uint8Array(0);\n const textDecoder = new MiniProgramTextDecoder(\"utf-8\", { fatal: false });\n\n let ended = false;\n let errorOccurred = false;\n\n const dataQueue: string[] = [];\n let resolveRead: ((value: string | null) => void) | null = null;\n\n const pendingRead = () =>\n new Promise<string | null>((r) => {\n if (dataQueue.length > 0) {\n r(dataQueue.shift()!);\n } else if (ended) {\n r(null);\n } else {\n resolveRead = r;\n }\n });\n\n const pushChunk = (text: string) => {\n if (!text) return;\n dataQueue.push(text);\n if (resolveRead) {\n resolveRead(dataQueue.shift()!);\n resolveRead = null;\n }\n };\n\n const chunkListener = (res: any) => {\n if (errorOccurred || ended || !res.data) return;\n\n try {\n const newChunk = new Uint8Array(res.data as ArrayBuffer);\n\n // 追加\n const merged = new Uint8Array(chunkBuffer.length + newChunk.length);\n merged.set(chunkBuffer);\n merged.set(newChunk, chunkBuffer.length);\n chunkBuffer = merged;\n\n let decodeOffset = 0;\n\n while (decodeOffset < chunkBuffer.length) {\n // 尝试从当前偏移解码尽可能多的内容,但 stream: false\n const remaining = chunkBuffer.subarray(decodeOffset);\n const decoded = textDecoder.decode(remaining, { stream: false });\n\n if (decoded.length === 0) {\n // 连一个字符都解不出来,说明剩余部分不完整,等待下次 chunk\n break;\n }\n\n // 关键:计算真正被成功解码的字节数(不依赖 replacement character)\n // 方法1:利用 replacement character 出现的位置来推断(较可靠)\n // 方法2:更简单粗暴但在大多数场景够用:假设没有 � 就全消费,有 � 则回退\n if (decoded.includes(\"�\")) {\n // 有替换字符 → 说明后面有不完整序列,不能全消费\n // 保守策略:本次只消费到最后一个完整字符之前\n const lastGoodIndex = decoded.lastIndexOf(\"�\") === 0 ? 0 : decoded.indexOf(\"�\");\n if (lastGoodIndex <= 0) {\n break; // 连开头都不完整\n }\n\n const goodPart = decoded.slice(0, lastGoodIndex);\n if (goodPart) {\n pushChunk(goodPart);\n }\n\n // 估算已消费字节数(不完美,但比原来好很多)\n const encodedGood = new TextEncoder().encode(goodPart);\n decodeOffset += encodedGood.length;\n\n break; // 剩余部分等下次\n } else {\n // 没有 � → 说明本次 remaining 里全是完整字符,可以全部消费\n pushChunk(decoded);\n decodeOffset += remaining.length; // 安全,因为没出现替换字符\n }\n }\n\n // 保留剩余未解码部分\n chunkBuffer = chunkBuffer.subarray(decodeOffset);\n } catch (err) {\n console.error(\"[mini stream] chunk process error:\", err);\n }\n };\n\n const headersListener = (res: any) => {\n if (res.header?.[\"content-type\"]?.includes(\"text/event-stream\") === false) {\n console.warn(\"Warning: server did not return event-stream\");\n }\n };\n\n const miniReq = getMiniProgramRequest();\n if (!miniReq) return;\n\n let requestTask: any;\n\n try {\n requestTask = miniReq({\n url,\n method: \"POST\",\n header: {\n \"Content-Type\": \"application/json\",\n Accept: \"text/event-stream\",\n ...authHeader,\n },\n data: typeof data === \"string\" ? data : JSON.stringify(data),\n responseType: \"arraybuffer\",\n enableChunked: true,\n timeout: 300000,\n\n success: () => {\n if (chunkBuffer.length > 0) {\n const finalText = textDecoder.decode(chunkBuffer, { stream: true });\n pushChunk(finalText);\n }\n ended = true;\n resolveRead?.(null);\n },\n\n fail: () => {\n errorOccurred = true;\n ended = true;\n resolveRead?.(null);\n },\n });\n\n // 支持 abort\n if (signal) {\n if (signal.aborted) {\n requestTask.abort();\n } else {\n signal.addEventListener(\"abort\", () => {\n requestTask.abort();\n });\n }\n }\n\n // 关键:监听分块到达\n requestTask.onChunkReceived?.(chunkListener);\n // 可选:监听 HTTP headers 到达(可用于检查状态码)\n requestTask.onHeadersReceived?.(headersListener);\n\n resolve({\n ok: true,\n statusText: \"OK\",\n read: async () => {\n if (errorOccurred) return null;\n return pendingRead();\n },\n });\n } catch (error) {\n console.error(\"miniReq error\", error);\n }\n });\n}\n\nasync function createStream(\n url: string,\n data: unknown,\n getAccessToken?: () => string | null,\n signal?: AbortSignal\n): Promise<StreamResponse> {\n // Get token for authentication\n const token = getAccessToken?.();\n const authHeader: Record<string, string> = token ? { Authorization: `Bearer ${token}` } : {};\n \n\n const miniReq = getMiniProgramRequest();\n if (miniReq) {\n return createWeChatMiniProgramStream(url, data, authHeader, signal);\n }\n\n // Browser: use fetch streaming with authentication\n const headers: Record<string, string> = {\n \"Content-Type\": \"application/json\",\n ...authHeader,\n };\n\n const response = await fetch(url, {\n method: \"POST\",\n headers,\n credentials: \"include\",\n body: JSON.stringify(data),\n signal,\n });\n\n if (!response.body) {\n return {\n ok: response.ok,\n statusText: response.statusText,\n read: async () => null,\n };\n }\n\n const reader = response.body.getReader();\n const decoder = new TextDecoder();\n\n return {\n ok: response.ok,\n statusText: response.statusText,\n read: async () => {\n const { done, value } = await reader.read();\n if (done) return null;\n return decoder.decode(value, { stream: true });\n },\n };\n}\n\n// ============ Input Types ============\n\nexport interface TextContent {\n type: \"text\";\n text: string;\n}\n\nexport interface ImageContent {\n type: \"image\";\n data?: string;\n url?: string;\n mimeType?: string;\n}\n\nexport interface FileContent {\n type: \"file\";\n data?: string;\n url?: string;\n mimeType?: string;\n name?: string;\n}\n\nexport type MessageContent = TextContent | ImageContent | FileContent;\n\nexport interface ChatMessage {\n role: \"system\" | \"user\" | \"assistant\";\n content: string | MessageContent[];\n}\n\nexport interface ChatOptions {\n taskId?: string;\n}\n\n// ============ Convert Input to A2A Part ============\n\nfunction convertToA2AParts(content: string | MessageContent[]): Part[] {\n if (typeof content === \"string\") {\n return [{ kind: \"text\", text: content }];\n }\n\n return content\n .map((part): Part | null => {\n switch (part.type) {\n case \"text\":\n return { kind: \"text\", text: part.text };\n case \"image\":\n if (part.data) {\n return {\n kind: \"file\",\n file: {\n bytes: part.data,\n mimeType: part.mimeType || \"image/png\",\n },\n };\n }\n if (part.url) {\n return {\n kind: \"file\",\n file: { uri: part.url, mimeType: part.mimeType || \"image/png\" },\n };\n }\n return null;\n case \"file\":\n if (part.data) {\n return {\n kind: \"file\",\n file: {\n bytes: part.data,\n ...(part.mimeType && { mimeType: part.mimeType }),\n ...(part.name && { name: part.name }),\n },\n };\n }\n if (part.url) {\n return {\n kind: \"file\",\n file: {\n uri: part.url,\n ...(part.mimeType && { mimeType: part.mimeType }),\n ...(part.name && { name: part.name }),\n },\n };\n }\n return null;\n default:\n return null;\n }\n })\n .filter((part): part is Part => part !== null);\n}\n\nfunction extractTextFromContent(content: string | MessageContent[]): string {\n if (typeof content === \"string\") {\n return content;\n }\n return content\n .filter((part): part is TextContent => part.type === \"text\")\n .map((part) => part.text)\n .join(\"\\n\");\n}\n\n// ============ SSE Stream Handling ============\n\nasync function* parseSSEStream(\n streamResponse: StreamResponse,\n signal?: AbortSignal\n): AsyncGenerator<SendStreamingMessageResponse, void, unknown> {\n const queue: SendStreamingMessageResponse[] = [];\n\n const parser = createParser({\n onEvent: (event) => {\n try {\n queue.push(JSON.parse(event.data));\n } catch (err) {\n console.error(\"[parseSSEStream] Parse error:\", err);\n }\n },\n });\n\n try {\n while (true) {\n if (signal?.aborted) {\n break;\n }\n const chunk = await streamResponse.read();\n if (chunk === null) {\n break;\n }\n if (chunk) {\n parser.feed(chunk);\n while (queue.length > 0) {\n const item = queue.shift();\n if (item) {\n yield item;\n }\n }\n }\n }\n } catch (err) {\n if (signal?.aborted) {\n return;\n }\n console.error(\"[parseSSEStream] Stream error:\", err);\n }\n}\n\n// ============ Client ============\n\nexport type CopilotClient = {\n /**\n * Stream messages from Copilot Agent.\n *\n * @example\n * ```typescript\n * import { createCopilotClient, Data } from \"@amaster.ai/copilot-client\";\n *\n * const client = createCopilotClient();\n *\n * for await (const response of client.chat([{ role: \"user\", content: \"Hello\" }])) {\n * // deal response\n * }\n * ```\n */\n chat(\n messages: ChatMessage[],\n options?: ChatOptions\n ): AsyncGenerator<SendStreamingMessageResponse, void, unknown>;\n\n cancelChat(taskId: string): Promise<ClientResult<CancelTaskResponse>>;\n getChatStatus(taskId?: string): Promise<{\n working: boolean;\n taskId?: string;\n error?: string;\n }>;\n getHistory(\n limit?: number,\n next?: string\n ): Promise<\n | {\n messages: SendStreamingMessageResponse[];\n next: string;\n hasMore: boolean;\n }\n | undefined\n >;\n newConversation(): Promise<void>;\n};\n\n/**\n * Create Copilot client\n *\n * Auto-detects runtime environment (Browser/Vite/Taro H5/Taro Mini-program)\n */\nexport function createCopilotClient(\n http: HttpClient = createHttpClient(),\n baseUrl?: string,\n getAccessToken?: () => string | null,\n getUserUid?: () => string | null\n): CopilotClient {\n let envBaseUrl = \"\";\n let activeChatAbortController: AbortController | null = null;\n\n // Vite/H5:必须直接写 import.meta.env,Vite 才能正确处理\n const metaEnv = (import.meta as any)?.env;\n if (metaEnv) {\n envBaseUrl = metaEnv.TARO_APP_API_BASE_URL || metaEnv.VITE_API_BASE_URL || \"\";\n }\n\n // Taro 小程序 build:defineConstants 会把 process.env.xxx 替换为字面量\n // H5 环境:process 不存在会抛 ReferenceError,这里用 try/catch 吞掉\n if (!envBaseUrl) {\n try {\n envBaseUrl = process.env.TARO_APP_API_BASE_URL || process.env.VITE_API_BASE_URL || \"\";\n } catch {\n // process is not defined -> ignore\n }\n }\n\n envBaseUrl = String(envBaseUrl || \"\").trim();\n const url = `${baseUrl || envBaseUrl}/api/proxy/builtin/platform/copilot`;\n\n async function* sendMessageStream(\n request: SendStreamingMessageRequest,\n signal?: AbortSignal\n ): AsyncGenerator<SendStreamingMessageResponse, void, unknown> {\n try {\n const streamResponse = await createStream(url, request, getAccessToken, signal);\n\n if (!streamResponse.ok) {\n throw new Error(`Stream request failed: ${streamResponse.statusText}`);\n }\n\n yield* parseSSEStream(streamResponse, signal);\n } catch (err) {\n if (signal?.aborted) {\n return;\n }\n console.error(\"[sendMessageStream] Error:\", err);\n }\n }\n\n const getContextId = () => {\n let appId = getAppId();\n\n if (typeof g?.wx?.request === \"function\") {\n const hostname = url ? url.replace(/^https?:\\/\\//, \"\").split(\"/\")[0] : \"\";\n appId = getAppId(hostname);\n }\n\n const userUid = getUserUid?.() ?? (cachedAnonymousUid ??= `anonymous-${generateUUID()}`);\n const contextId = `${appId}:${userUid}`;\n return contextId;\n };\n\n return {\n async *chat(messages, chatOptions = {}) {\n const { taskId } = chatOptions;\n\n activeChatAbortController = createAbortController() as any;\n const signal = activeChatAbortController?.signal;\n\n try {\n const systemMsg = messages.find((m) => m.role === \"system\");\n const nonSystemMsgs = messages.filter((m) => m.role !== \"system\");\n const lastUserMsg = nonSystemMsgs[nonSystemMsgs.length - 1];\n\n const parts = lastUserMsg\n ? convertToA2AParts(lastUserMsg.content)\n : [{ kind: \"text\" as const, text: \"\" }];\n\n const systemPrompt = systemMsg ? extractTextFromContent(systemMsg.content) : undefined;\n\n const request: SendStreamingMessageRequest = {\n jsonrpc: \"2.0\",\n id: generateUUID(),\n method: \"message/stream\",\n params: {\n message: {\n contextId: getContextId(),\n kind: \"message\",\n messageId: generateUUID(),\n role: \"user\",\n parts,\n ...(taskId && { taskId }),\n ...(systemPrompt && { metadata: { systemPrompt } }),\n },\n },\n };\n\n for await (const response of sendMessageStream(request, signal)) {\n if (signal?.aborted) {\n break;\n }\n yield response;\n }\n } finally {\n activeChatAbortController = null;\n }\n },\n\n cancelChat(taskId) {\n activeChatAbortController?.abort();\n activeChatAbortController = null;\n\n const request: CancelTaskRequest = {\n jsonrpc: \"2.0\",\n id: generateUUID(),\n method: \"tasks/cancel\",\n params: { id: taskId },\n };\n return http.request<CancelTaskResponse>({\n url,\n method: \"POST\",\n data: request,\n });\n },\n\n async getHistory(limit = 50, next?: string) {\n try {\n const res: any = await http.request({\n url,\n method: \"POST\",\n data: {\n jsonrpc: \"2.0\",\n method: \"messages/list\",\n id: generateUUID(),\n params: { filter: { contextId: getContextId() }, limit, ...(next ? { next } : {}) },\n },\n });\n const result = res?.data?.result || {};\n const messages = result?.messages || [];\n const _next = result?.next || \"\";\n\n return {\n messages,\n next: _next,\n hasMore: !!_next,\n };\n } catch (err) {}\n },\n\n async newConversation() {\n try {\n await http.request({\n url,\n method: \"POST\",\n data: {\n jsonrpc: \"2.0\",\n method: \"messages/clear\",\n id: generateUUID(),\n params: { contextId: getContextId() },\n },\n });\n } catch (err) {}\n },\n\n async getChatStatus(taskId) {\n try {\n const request = {\n jsonrpc: \"2.0\",\n id: generateUUID(),\n method: \"tasks/get\",\n params: taskId\n ? { id: taskId }\n : {\n contextId: getContextId(),\n },\n };\n const result = await http.request<any>({\n url,\n method: \"POST\",\n data: request,\n });\n const data = result?.data?.result;\n return {\n working: data?.status?.state === \"working\",\n taskId: data?.id,\n error: data?.error?.message || \"\",\n };\n } catch (err) {\n return {\n working: false,\n error: (err as any)?.message || \"\",\n };\n }\n },\n };\n}\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@amaster.ai/copilot-client",
|
|
3
|
-
"version": "1.1.0-beta.
|
|
3
|
+
"version": "1.1.0-beta.71",
|
|
4
4
|
"description": "AI copilot chat client with streaming support",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.cjs",
|
|
@@ -34,7 +34,7 @@
|
|
|
34
34
|
"eventsource-parser": "^3.0.6",
|
|
35
35
|
"miniprogram-text-decoder": "^2.0.0",
|
|
36
36
|
"miniprogram-text-encoder": "^2.0.0",
|
|
37
|
-
"@amaster.ai/http-client": "1.1.0-beta.
|
|
37
|
+
"@amaster.ai/http-client": "1.1.0-beta.71"
|
|
38
38
|
},
|
|
39
39
|
"peerDependencies": {
|
|
40
40
|
"@a2a-js/sdk": "^0.3.7"
|