paprflare-sdk 0.0.21 → 0.0.23

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.mts CHANGED
@@ -1011,9 +1011,17 @@ declare class AnthropicProvider {
1011
1011
  */
1012
1012
  private formatMessages;
1013
1013
  /**
1014
- * Format tools for Anthropic API
1014
+ * Format tools for Anthropic API with Zod schema conversion
1015
1015
  */
1016
1016
  private formatTools;
1017
+ /**
1018
+ * Format tool choice for Anthropic API
1019
+ */
1020
+ private formatToolChoice;
1021
+ /**
1022
+ * Convert Zod schema to JSON Schema for Anthropic
1023
+ */
1024
+ private zodToJsonSchema;
1017
1025
  }
1018
1026
  /**
1019
1027
  * Create Anthropic provider instance
@@ -1041,12 +1049,22 @@ declare class GoogleProvider {
1041
1049
  /**
1042
1050
  * Format messages for Google AI API
1043
1051
  * Filters system messages (handled via systemInstruction above)
1052
+ * Handles tool calls and tool results
1044
1053
  */
1045
1054
  private formatMessages;
1046
1055
  /**
1047
1056
  * Format tools for Google AI API
1057
+ * Converts Zod schemas to Google's JSON schema format
1048
1058
  */
1049
1059
  private formatTools;
1060
+ /**
1061
+ * Convert Zod schema to JSON Schema (basic implementation)
1062
+ */
1063
+ private zodToJsonSchema;
1064
+ /**
1065
+ * Format tool config for Google AI API
1066
+ */
1067
+ private formatToolConfig;
1050
1068
  }
1051
1069
  /**
1052
1070
  * Create Google provider instance
@@ -1081,9 +1099,17 @@ declare class OpenAIProvider {
1081
1099
  */
1082
1100
  private formatMessages;
1083
1101
  /**
1084
- * Format tools for OpenAI API
1102
+ * Format tools for OpenAI API with Zod schema conversion
1085
1103
  */
1086
1104
  private formatTools;
1105
+ /**
1106
+ * Format tool choice for OpenAI API
1107
+ */
1108
+ private formatToolChoice;
1109
+ /**
1110
+ * Convert Zod schema to JSON Schema
1111
+ */
1112
+ private zodToJsonSchema;
1087
1113
  }
1088
1114
  /**
1089
1115
  * Create OpenAI provider instance
@@ -1112,8 +1138,21 @@ declare class SarvamProvider {
1112
1138
  private parseStream;
1113
1139
  /**
1114
1140
  * Format messages for Sarvam AI API
1141
+ * Handles tool calls and tool results
1115
1142
  */
1116
1143
  private formatMessages;
1144
+ /**
1145
+ * Format tools for Sarvam AI API (OpenAI-compatible format)
1146
+ */
1147
+ private formatTools;
1148
+ /**
1149
+ * Format tool choice for Sarvam AI API
1150
+ */
1151
+ private formatToolChoice;
1152
+ /**
1153
+ * Convert Zod schema to JSON Schema
1154
+ */
1155
+ private zodToJsonSchema;
1117
1156
  }
1118
1157
  /**
1119
1158
  * Create Sarvam provider instance
package/dist/index.d.ts CHANGED
@@ -1011,9 +1011,17 @@ declare class AnthropicProvider {
1011
1011
  */
1012
1012
  private formatMessages;
1013
1013
  /**
1014
- * Format tools for Anthropic API
1014
+ * Format tools for Anthropic API with Zod schema conversion
1015
1015
  */
1016
1016
  private formatTools;
1017
+ /**
1018
+ * Format tool choice for Anthropic API
1019
+ */
1020
+ private formatToolChoice;
1021
+ /**
1022
+ * Convert Zod schema to JSON Schema for Anthropic
1023
+ */
1024
+ private zodToJsonSchema;
1017
1025
  }
1018
1026
  /**
1019
1027
  * Create Anthropic provider instance
@@ -1041,12 +1049,22 @@ declare class GoogleProvider {
1041
1049
  /**
1042
1050
  * Format messages for Google AI API
1043
1051
  * Filters system messages (handled via systemInstruction above)
1052
+ * Handles tool calls and tool results
1044
1053
  */
1045
1054
  private formatMessages;
1046
1055
  /**
1047
1056
  * Format tools for Google AI API
1057
+ * Converts Zod schemas to Google's JSON schema format
1048
1058
  */
1049
1059
  private formatTools;
1060
+ /**
1061
+ * Convert Zod schema to JSON Schema (basic implementation)
1062
+ */
1063
+ private zodToJsonSchema;
1064
+ /**
1065
+ * Format tool config for Google AI API
1066
+ */
1067
+ private formatToolConfig;
1050
1068
  }
1051
1069
  /**
1052
1070
  * Create Google provider instance
@@ -1081,9 +1099,17 @@ declare class OpenAIProvider {
1081
1099
  */
1082
1100
  private formatMessages;
1083
1101
  /**
1084
- * Format tools for OpenAI API
1102
+ * Format tools for OpenAI API with Zod schema conversion
1085
1103
  */
1086
1104
  private formatTools;
1105
+ /**
1106
+ * Format tool choice for OpenAI API
1107
+ */
1108
+ private formatToolChoice;
1109
+ /**
1110
+ * Convert Zod schema to JSON Schema
1111
+ */
1112
+ private zodToJsonSchema;
1087
1113
  }
1088
1114
  /**
1089
1115
  * Create OpenAI provider instance
@@ -1112,8 +1138,21 @@ declare class SarvamProvider {
1112
1138
  private parseStream;
1113
1139
  /**
1114
1140
  * Format messages for Sarvam AI API
1141
+ * Handles tool calls and tool results
1115
1142
  */
1116
1143
  private formatMessages;
1144
+ /**
1145
+ * Format tools for Sarvam AI API (OpenAI-compatible format)
1146
+ */
1147
+ private formatTools;
1148
+ /**
1149
+ * Format tool choice for Sarvam AI API
1150
+ */
1151
+ private formatToolChoice;
1152
+ /**
1153
+ * Convert Zod schema to JSON Schema
1154
+ */
1155
+ private zodToJsonSchema;
1117
1156
  }
1118
1157
  /**
1119
1158
  * Create Sarvam provider instance
package/dist/index.js CHANGED
@@ -1,21 +1,21 @@
1
- 'use strict';var de=require('ioredis'),lruCache=require('lru-cache'),nanoid=require('nanoid'),oe=require('fast-json-stable-stringify'),ue=require('eventemitter3'),eventsourceParser=require('eventsource-parser');require('zod');var he=require('p-queue'),asyncMutex=require('async-mutex'),drizzleOrm=require('drizzle-orm'),ae=require('@anthropic-ai/sdk'),generativeAi=require('@google/generative-ai'),re=require('openai');function _interopDefault(e){return e&&e.__esModule?e:{default:e}}var de__default=/*#__PURE__*/_interopDefault(de);var oe__default=/*#__PURE__*/_interopDefault(oe);var ue__default=/*#__PURE__*/_interopDefault(ue);var he__default=/*#__PURE__*/_interopDefault(he);var ae__default=/*#__PURE__*/_interopDefault(ae);var re__default=/*#__PURE__*/_interopDefault(re);function w(o){let e=nanoid.nanoid();return o?`${o}_${e}`:e}function q(o){return oe__default.default(o)}function $(o){return o.map(e=>({...e,id:e.id||w("msg"),timestamp:e.timestamp||Date.now()}))}async function J(o,e){let t,s=e.initialDelay;for(let a=1;a<=e.maxAttempts;a++)try{return await o()}catch(r){if(t=r,a===e.maxAttempts)throw t;e.onRetry&&e.onRetry(a,t),await ie(Math.min(s,e.maxDelay)),s*=e.backoffMultiplier;}throw t}function ie(o){return new Promise(e=>setTimeout(e,o))}function Ce(o,e){let t=[];for(let s=0;s<o.length;s+=e)t.push(o.slice(s,s+e));return t}function we(o,e){let t;return (...s)=>{clearTimeout(t),t=setTimeout(()=>o(...s),e);}}function Te(o,e){let t;return (...s)=>{t||(o(...s),t=true,setTimeout(()=>t=false,e));}}function be(o){try{return JSON.parse(o)}catch{return null}}function S(o){return typeof o=="object"&&o!==null&&o.constructor===Object}function L(o,...e){if(!e.length)return o;let t=e.shift();if(S(o)&&S(t))for(let s in t)S(t[s])?(o[s]||Object.assign(o,{[s]:{}}),L(o[s],t[s])):Object.assign(o,{[s]:t[s]});return L(o,...e)}async function Me(o){let e=[];for await(let t of o)e.push(t);return e}async function xe(o){let e=performance.now(),t=await o(),s=performance.now()-e;return {result:t,duration:s}}var f=class extends ue.EventEmitter{events=[];closed=false;fullText="";startTime=0;lastChunkTime=0;chunkIndex=0;status="idle";activeTools=new Map;currentToolCall=null;constructor(){super();}start(){this.startTime===0&&(this.startTime=Date.now(),this.lastChunkTime=this.startTime,this.updateStatus("starting"),this.emit("start"),setTimeout(()=>this.updateStatus("streaming"),50));}writeText(e){if(this.closed)return;this.startTime===0&&this.start(),this.fullText+=e;let t=Date.now(),s=t-this.lastChunkTime;this.lastChunkTime=t;let a={text:e,index:this.chunkIndex++,timestamp:t,deltaTime:s};this.events.push({type:"text-delta",delta:e}),this.emit("chunk",a),this.emit("write",e);}write(e){this.writeText(e);}startToolCall(e,t){this.currentToolCall={id:t,name:e,argumentsBuffer:""};let s={id:t,name:e,input:{},status:"starting",timestamp:Date.now()};this.activeTools.set(t,s),this.updateStatus("tool_executing"),this.emit("toolUse",s),setTimeout(()=>{let a=this.activeTools.get(t);a&&(a.status="running",this.emit("toolUse",a));},100);}writeToolCallDelta(e){this.currentToolCall&&(this.currentToolCall.argumentsBuffer+=e);}endToolCall(e){if(!this.currentToolCall)return;let t=this.activeTools.get(this.currentToolCall.id);if(t){t.input=e,t.status="completed",this.emit("toolUse",t);let s=Date.now()-t.timestamp;this.emit("toolResult",{toolId:this.currentToolCall.id,content:e,success:true,duration:s,timestamp:Date.now()}),this.activeTools.delete(this.currentToolCall.id);}this.currentToolCall=null,this.activeTools.size===0&&this.updateStatus("streaming");}startTool(e,t,s){this.startToolCall(t,e),s&&this.endToolCall(s);}completeTool(e,t,s=true,a){let r=this.activeTools.get(e);if(!r)return;let n=Date.now()-r.timestamp;r.status=s?"completed":"failed",this.emit("toolUse",r),this.emit("toolResult",{toolId:e,content:t,success:s,error:a,duration:n,timestamp:Date.now()}),this.activeTools.delete(e),this.activeTools.size===0&&this.updateStatus("streaming");}writeUsage(e){this.closed||(this.events.push({type:"usage",usage:{promptTokens:e.promptTokens,completionTokens:e.completionTokens,totalTokens:e.totalTokens}}),this.emit("usage",{prompt:e.promptTokens,completion:e.completionTokens,total:e.totalTokens}));}usage(e){this.writeUsage({promptTokens:e.prompt,completionTokens:e.completion,totalTokens:e.total});}error(e){this.closed||(this.events.push({type:"error",error:e}),this.updateStatus("error"),this.emit("error",e));}async*flush(){let e=[...this.events];this.events=[];for(let t of e)yield t;}done(e){if(this.closed)return;this.updateStatus("completing");let t=e||{id:`msg_${Date.now()}`,role:"assistant",content:this.fullText,timestamp:Date.now()};this.events.push({type:"done",finalMessage:t}),this.closed=true,this.updateStatus("done"),this.emit("done",t);}updateStatus(e){this.status=e,this.emit("statusChange",e);}getStatus(){return this.status}isClosed(){return this.closed}getText(){return this.fullText}getActiveTools(){return Array.from(this.activeTools.values())}getEvents(){return [...this.events]}async*toGenerator(){yield*this.flush();}reset(){this.events=[],this.fullText="",this.closed=false,this.status="idle",this.startTime=0,this.lastChunkTime=0,this.chunkIndex=0,this.activeTools.clear(),this.currentToolCall=null,this.removeAllListeners();}};function ke(){return new f}async function*Ee(o){let e=o.getReader(),t=new TextDecoder,s="",a=eventsourceParser.createParser({onEvent:r=>{s=r.data;},onRetry:r=>{}});try{for(;;){let{done:r,value:n}=await e.read();if(r)break;let l=t.decode(n,{stream:!0});if(a.feed(l),s)try{let i=JSON.parse(s);i.type&&(yield i),s="";}catch{continue}}a.reset({consume:!0});}finally{e.releaseLock();}}function k(o){let e=new TextEncoder;return new ReadableStream({async start(t){try{for await(let s of o){let a=`data: ${JSON.stringify(s)}
1
+ 'use strict';var ue=require('ioredis'),lruCache=require('lru-cache'),nanoid=require('nanoid'),le=require('fast-json-stable-stringify'),pe=require('eventemitter3'),eventsourceParser=require('eventsource-parser');require('zod');var ge=require('p-queue'),asyncMutex=require('async-mutex'),drizzleOrm=require('drizzle-orm'),ne=require('@anthropic-ai/sdk'),generativeAi=require('@google/generative-ai'),oe=require('openai');function _interopDefault(e){return e&&e.__esModule?e:{default:e}}var ue__default=/*#__PURE__*/_interopDefault(ue);var le__default=/*#__PURE__*/_interopDefault(le);var pe__default=/*#__PURE__*/_interopDefault(pe);var ge__default=/*#__PURE__*/_interopDefault(ge);var ne__default=/*#__PURE__*/_interopDefault(ne);var oe__default=/*#__PURE__*/_interopDefault(oe);function T(o){let t=nanoid.nanoid();return o?`${o}_${t}`:t}function $(o){return le__default.default(o)}function j(o){return o.map(t=>({...t,id:t.id||T("msg"),timestamp:t.timestamp||Date.now()}))}async function z(o,t){let e,s=t.initialDelay;for(let a=1;a<=t.maxAttempts;a++)try{return await o()}catch(r){if(e=r,a===t.maxAttempts)throw e;t.onRetry&&t.onRetry(a,e),await ce(Math.min(s,t.maxDelay)),s*=t.backoffMultiplier;}throw e}function ce(o){return new Promise(t=>setTimeout(t,o))}function we(o,t){let e=[];for(let s=0;s<o.length;s+=t)e.push(o.slice(s,s+t));return e}function Te(o,t){let e;return (...s)=>{clearTimeout(e),e=setTimeout(()=>o(...s),t);}}function be(o,t){let e;return (...s)=>{e||(o(...s),e=true,setTimeout(()=>e=false,t));}}function Me(o){try{return JSON.parse(o)}catch{return null}}function A(o){return typeof o=="object"&&o!==null&&o.constructor===Object}function G(o,...t){if(!t.length)return o;let e=t.shift();if(A(o)&&A(e))for(let s in e)A(e[s])?(o[s]||Object.assign(o,{[s]:{}}),G(o[s],e[s])):Object.assign(o,{[s]:e[s]});return G(o,...t)}async function xe(o){let t=[];for await(let e of o)t.push(e);return t}async function Se(o){let t=performance.now(),e=await o(),s=performance.now()-t;return {result:e,duration:s}}var v=class extends pe.EventEmitter{events=[];closed=false;fullText="";startTime=0;lastChunkTime=0;chunkIndex=0;status="idle";activeTools=new Map;currentToolCall=null;constructor(){super();}start(){this.startTime===0&&(this.startTime=Date.now(),this.lastChunkTime=this.startTime,this.updateStatus("starting"),this.emit("start"),setTimeout(()=>this.updateStatus("streaming"),50));}writeText(t){if(this.closed)return;this.startTime===0&&this.start(),this.fullText+=t;let e=Date.now(),s=e-this.lastChunkTime;this.lastChunkTime=e;let a={text:t,index:this.chunkIndex++,timestamp:e,deltaTime:s};this.events.push({type:"text-delta",delta:t}),this.emit("chunk",a),this.emit("write",t);}write(t){this.writeText(t);}startToolCall(t,e){this.currentToolCall={id:e,name:t,argumentsBuffer:""};let s={id:e,name:t,input:{},status:"starting",timestamp:Date.now()};this.activeTools.set(e,s),this.updateStatus("tool_executing"),this.emit("toolUse",s),setTimeout(()=>{let a=this.activeTools.get(e);a&&(a.status="running",this.emit("toolUse",a));},100);}writeToolCallDelta(t){this.currentToolCall&&(this.currentToolCall.argumentsBuffer+=t);}endToolCall(t){if(!this.currentToolCall)return;let e=this.activeTools.get(this.currentToolCall.id);if(e){e.input=t,e.status="completed",this.emit("toolUse",e);let s=Date.now()-e.timestamp;this.emit("toolResult",{toolId:this.currentToolCall.id,content:t,success:true,duration:s,timestamp:Date.now()}),this.activeTools.delete(this.currentToolCall.id);}this.currentToolCall=null,this.activeTools.size===0&&this.updateStatus("streaming");}startTool(t,e,s){this.startToolCall(e,t),s&&this.endToolCall(s);}completeTool(t,e,s=true,a){let r=this.activeTools.get(t);if(!r)return;let n=Date.now()-r.timestamp;r.status=s?"completed":"failed",this.emit("toolUse",r),this.emit("toolResult",{toolId:t,content:e,success:s,error:a,duration:n,timestamp:Date.now()}),this.activeTools.delete(t),this.activeTools.size===0&&this.updateStatus("streaming");}writeUsage(t){this.closed||(this.events.push({type:"usage",usage:{promptTokens:t.promptTokens,completionTokens:t.completionTokens,totalTokens:t.totalTokens}}),this.emit("usage",{prompt:t.promptTokens,completion:t.completionTokens,total:t.totalTokens}));}usage(t){this.writeUsage({promptTokens:t.prompt,completionTokens:t.completion,totalTokens:t.total});}error(t){this.closed||(this.events.push({type:"error",error:t}),this.updateStatus("error"),this.emit("error",t));}async*flush(){let t=[...this.events];this.events=[];for(let e of t)yield e;}done(t){if(this.closed)return;this.updateStatus("completing");let e=t||{id:`msg_${Date.now()}`,role:"assistant",content:this.fullText,timestamp:Date.now()};this.events.push({type:"done",finalMessage:e}),this.closed=true,this.updateStatus("done"),this.emit("done",e);}updateStatus(t){this.status=t,this.emit("statusChange",t);}getStatus(){return this.status}isClosed(){return this.closed}getText(){return this.fullText}getActiveTools(){return Array.from(this.activeTools.values())}getEvents(){return [...this.events]}async*toGenerator(){yield*this.flush();}reset(){this.events=[],this.fullText="",this.closed=false,this.status="idle",this.startTime=0,this.lastChunkTime=0,this.chunkIndex=0,this.activeTools.clear(),this.currentToolCall=null,this.removeAllListeners();}};function Ae(){return new v}async function*Oe(o){let t=o.getReader(),e=new TextDecoder,s="",a=eventsourceParser.createParser({onEvent:r=>{s=r.data;},onRetry:r=>{}});try{for(;;){let{done:r,value:n}=await t.read();if(r)break;let i=e.decode(n,{stream:!0});if(a.feed(i),s)try{let l=JSON.parse(s);l.type&&(yield l),s="";}catch{continue}}a.reset({consume:!0});}finally{t.releaseLock();}}function R(o){let t=new TextEncoder;return new ReadableStream({async start(e){try{for await(let s of o){let a=`data: ${JSON.stringify(s)}
2
2
 
3
- `;t.enqueue(e.encode(a));}t.close();}catch(s){t.error(s);}}})}async function j(o,e){let t=k(o),s={"Content-Type":"text/event-stream","Cache-Control":"no-cache",Connection:"keep-alive"};if(e.node&&e.node.res){let a=e.node.res;Object.entries(s).forEach(([l,i])=>{a.setHeader(l,i);});let r=t.getReader(),n=new TextDecoder;try{for(;;){let{done:l,value:i}=await r.read();if(l)break;let c=n.decode(i,{stream:!0});a.write(c);}}finally{a.end();}}else {if(e instanceof Response||typeof e.body<"u")return;{Object.entries(s).forEach(([n,l])=>{e.setHeader(n,l);});let a=t.getReader(),r=new TextDecoder;try{for(;;){let{done:n,value:l}=await a.read();if(n)break;let i=r.decode(l,{stream:!0});e.write(i);}}finally{e.end();}}}}async function*F(...o){let e=o.map(async s=>{let a=[];for await(let r of s)a.push(r);return a}),t=await Promise.all(e);for(let s of t)for(let a of s)yield a;}async function*De(o,e){for await(let t of o){let s=e(t);s!==null&&(yield s);}}async function*Oe(o,e){for await(let t of o)e(t)&&(yield t);}async function A(o){let e=[];for await(let t of o)e.push(t);return e}async function*Ie(o,e){let t=0;for await(let s of o){if(t>=e)break;yield s,t++;}}async function*Ue(o,e,t){let s=[],a=null,r=async()=>{if(s.length>0){let n=[...s];return s=[],n}return null};try{for await(let l of o)if(s.push(l),a&&(clearTimeout(a),a=null),s.length>=e){let i=await r();i&&(yield i);}else t&&(a=setTimeout(async()=>{let i=await r();},t));let n=await r();n&&(yield n);}finally{a&&clearTimeout(a);}}var p=class extends Error{constructor(t,s,a,r){super(t);this.code=s;this.statusCode=a;this.details=r;this.name="PaprFlareError";}},B=class extends p{constructor(t,s){super(t,"RATE_LIMIT_ERROR",429);this.retryAfter=s;}},K=class extends p{constructor(e,t){super(e,"VALIDATION_ERROR",400,t);}},v=class extends p{constructor(t,s,a){super(t,"PROVIDER_ERROR",a);this.provider=s;}};async function*b(o){let e=`msg_${Date.now()}`,t="",s={id:e,role:"assistant",content:"",timestamp:Date.now(),isComplete:false};yield {type:"message-start",messageId:e};try{for await(let a of o)switch(a.type){case "text-delta":t+=a.delta,s.content=t,yield {type:"text-delta",delta:a.delta};break;case "tool-call-start":s.toolCalls||(s.toolCalls=[]),s.toolCalls.push(a.toolCall),yield {type:"tool-call-start",toolCallId:a.toolCall.id,toolName:a.toolCall.name};break;case "tool-call-end":yield {type:"tool-call-complete",toolCallId:a.toolCall.id,arguments:a.toolCall.arguments};break;case "tool-result":s.toolResults||(s.toolResults=[]),s.toolResults.push(a.result),yield {type:"tool-result",toolCallId:a.result.toolCallId,result:a.result.result,success:!a.result.error};break;case "usage":s.metadata||(s.metadata={}),s.metadata.usage=a.usage,yield {type:"usage",tokens:{prompt:a.usage.promptTokens,completion:a.usage.completionTokens,total:a.usage.totalTokens}};break;case "metadata":s.metadata||(s.metadata={}),s.metadata={...s.metadata,...a.metadata};break;case "artifact-start":s.metadata||(s.metadata={}),s.metadata.artifacts||(s.metadata.artifacts=[]),s.metadata.artifacts.push({...a.artifact,content:""});break;case "artifact-delta":if(s.metadata?.artifacts){let n=s.metadata.artifacts[s.metadata.artifacts.length-1];n&&(n.content+=a.delta);}break;case "artifact-end":if(s.metadata?.artifacts){let n=s.metadata.artifacts[s.metadata.artifacts.length-1];n&&Object.assign(n,a.artifact);}break;case "done":s.isComplete=!0,s.content=t;let r={...s,...a.finalMessage};yield {type:"text-complete",fullText:t},yield {type:"message-complete",message:r};break;case "error":yield {type:"error",error:a.error};break}}catch(a){yield {type:"error",error:a.message||"Stream error"};}}async function z(o,e){let t=b(o),s=null;for await(let a of t)switch(a.type){case "message-start":await e.onStart?.(a.messageId);break;case "text-delta":await e.onText?.(a.delta);break;case "message-complete":s=a.message,await e.onComplete?.(a.message);break;case "error":throw await e.onError?.(a.error),new Error(a.error);case "tool-call-complete":await e.onToolCall?.(a.toolCallId,a.arguments);break;case "tool-result":await e.onToolResult?.({toolId:a.toolCallId,content:a.result,success:a.success,duration:0,timestamp:Date.now()});break;case "usage":await e.onUsage?.(a.tokens);break;case "status-change":await e.onStatusChange?.(a.status);break}if(!s)throw new Error("Stream completed without final message");return s}async function W(o){let e="";for await(let t of o)t.type==="text-delta"&&(e+=t.delta);return e}async function*Le(o){let e=new f,s=null;o.onToolUse&&e.on("toolUse",o.onToolUse),o.onToolResult&&e.on("toolResult",o.onToolResult),o.onStatusChange&&e.on("statusChange",o.onStatusChange);let a=async n=>{for await(let l of n)switch(l.type){case "text-delta":e.write(l.delta);break;case "tool-call-start":e.startTool(l.toolCall.id,l.toolCall.name,l.toolCall.arguments);break;case "tool-call-end":e.getActiveTools().find(c=>c.id===l.toolCall.id)&&e.completeTool(l.toolCall.id,l.toolCall.arguments,true);break;case "tool-result":e.completeTool(l.result.toolCallId,l.result.result,!l.result.error,l.result.error);break;case "usage":e.usage({prompt:l.usage.promptTokens,completion:l.usage.completionTokens,total:l.usage.totalTokens});break;case "error":e.error(l.error);break;case "done":e.done(l.finalMessage);break}},r=(async()=>{try{e.start(),await o.execute({writer:e,merge:a}),e.isClosed()||e.done();}catch(n){let l=o.onError?.(n)||n.message;e.error(l),e.done();}})();try{for await(let n of b(e.toGenerator()))yield n,n.type==="message-complete"&&(s=n.message);await r,o.onFinish&&s&&await o.onFinish({message:s});}catch(n){throw n}}async function H(o){new f;for await(let t of o)switch(t.type){case "text-delta":process.stdout.write(t.delta);break;case "tool-call-start":console.log(`
4
- \u{1F527} Tool: ${t.toolCall.name}`);break;case "tool-result":let s=t.result.error?"\u274C":"\u2705";console.log(`${s} Tool completed`);break;case "usage":console.log(`
3
+ `;e.enqueue(t.encode(a));}e.close();}catch(s){e.error(s);}}})}async function Z(o,t){let e=R(o),s={"Content-Type":"text/event-stream","Cache-Control":"no-cache",Connection:"keep-alive"};if(t.node&&t.node.res){let a=t.node.res;Object.entries(s).forEach(([i,l])=>{a.setHeader(i,l);});let r=e.getReader(),n=new TextDecoder;try{for(;;){let{done:i,value:l}=await r.read();if(i)break;let c=n.decode(l,{stream:!0});a.write(c);}}finally{a.end();}}else {if(t instanceof Response||typeof t.body<"u")return;{Object.entries(s).forEach(([n,i])=>{t.setHeader(n,i);});let a=e.getReader(),r=new TextDecoder;try{for(;;){let{done:n,value:i}=await a.read();if(n)break;let l=r.decode(i,{stream:!0});t.write(l);}}finally{t.end();}}}}async function*F(...o){let t=o.map(async s=>{let a=[];for await(let r of s)a.push(r);return a}),e=await Promise.all(t);for(let s of e)for(let a of s)yield a;}async function*De(o,t){for await(let e of o){let s=t(e);s!==null&&(yield s);}}async function*Ie(o,t){for await(let e of o)t(e)&&(yield e);}async function E(o){let t=[];for await(let e of o)t.push(e);return t}async function*Ne(o,t){let e=0;for await(let s of o){if(e>=t)break;yield s,e++;}}async function*_e(o,t,e){let s=[],a=null,r=async()=>{if(s.length>0){let n=[...s];return s=[],n}return null};try{for await(let i of o)if(s.push(i),a&&(clearTimeout(a),a=null),s.length>=t){let l=await r();l&&(yield l);}else e&&(a=setTimeout(async()=>{let l=await r();},e));let n=await r();n&&(yield n);}finally{a&&clearTimeout(a);}}var y=class extends Error{constructor(e,s,a,r){super(e);this.code=s;this.statusCode=a;this.details=r;this.name="PaprFlareError";}},B=class extends y{constructor(e,s){super(e,"RATE_LIMIT_ERROR",429);this.retryAfter=s;}},K=class extends y{constructor(t,e){super(t,"VALIDATION_ERROR",400,e);}},C=class extends y{constructor(e,s,a){super(e,"PROVIDER_ERROR",a);this.provider=s;}};async function*M(o){let t=`msg_${Date.now()}`,e="",s={id:t,role:"assistant",content:"",timestamp:Date.now(),isComplete:false};yield {type:"message-start",messageId:t};try{for await(let a of o)switch(a.type){case "text-delta":e+=a.delta,s.content=e,yield {type:"text-delta",delta:a.delta};break;case "tool-call-start":s.toolCalls||(s.toolCalls=[]),s.toolCalls.push(a.toolCall),yield {type:"tool-call-start",toolCallId:a.toolCall.id,toolName:a.toolCall.name};break;case "tool-call-end":yield {type:"tool-call-complete",toolCallId:a.toolCall.id,arguments:a.toolCall.arguments};break;case "tool-result":s.toolResults||(s.toolResults=[]),s.toolResults.push(a.result),yield {type:"tool-result",toolCallId:a.result.toolCallId,result:a.result.result,success:!a.result.error};break;case "usage":s.metadata||(s.metadata={}),s.metadata.usage=a.usage,yield {type:"usage",tokens:{prompt:a.usage.promptTokens,completion:a.usage.completionTokens,total:a.usage.totalTokens}};break;case "metadata":s.metadata||(s.metadata={}),s.metadata={...s.metadata,...a.metadata};break;case "artifact-start":s.metadata||(s.metadata={}),s.metadata.artifacts||(s.metadata.artifacts=[]),s.metadata.artifacts.push({...a.artifact,content:""});break;case "artifact-delta":if(s.metadata?.artifacts){let n=s.metadata.artifacts[s.metadata.artifacts.length-1];n&&(n.content+=a.delta);}break;case "artifact-end":if(s.metadata?.artifacts){let n=s.metadata.artifacts[s.metadata.artifacts.length-1];n&&Object.assign(n,a.artifact);}break;case "done":s.isComplete=!0,s.content=e;let r={...s,...a.finalMessage};yield {type:"text-complete",fullText:e},yield {type:"message-complete",message:r};break;case "error":yield {type:"error",error:a.error};break}}catch(a){yield {type:"error",error:a.message||"Stream error"};}}async function V(o,t){let e=M(o),s=null;for await(let a of e)switch(a.type){case "message-start":await t.onStart?.(a.messageId);break;case "text-delta":await t.onText?.(a.delta);break;case "message-complete":s=a.message,await t.onComplete?.(a.message);break;case "error":throw await t.onError?.(a.error),new Error(a.error);case "tool-call-complete":await t.onToolCall?.(a.toolCallId,a.arguments);break;case "tool-result":await t.onToolResult?.({toolId:a.toolCallId,content:a.result,success:a.success,duration:0,timestamp:Date.now()});break;case "usage":await t.onUsage?.(a.tokens);break;case "status-change":await t.onStatusChange?.(a.status);break}if(!s)throw new Error("Stream completed without final message");return s}async function W(o){let t="";for await(let e of o)e.type==="text-delta"&&(t+=e.delta);return t}async function*Le(o){let t=new v,s=null;o.onToolUse&&t.on("toolUse",o.onToolUse),o.onToolResult&&t.on("toolResult",o.onToolResult),o.onStatusChange&&t.on("statusChange",o.onStatusChange);let a=async n=>{for await(let i of n)switch(i.type){case "text-delta":t.write(i.delta);break;case "tool-call-start":t.startTool(i.toolCall.id,i.toolCall.name,i.toolCall.arguments);break;case "tool-call-end":t.getActiveTools().find(c=>c.id===i.toolCall.id)&&t.completeTool(i.toolCall.id,i.toolCall.arguments,true);break;case "tool-result":t.completeTool(i.result.toolCallId,i.result.result,!i.result.error,i.result.error);break;case "usage":t.usage({prompt:i.usage.promptTokens,completion:i.usage.completionTokens,total:i.usage.totalTokens});break;case "error":t.error(i.error);break;case "done":t.done(i.finalMessage);break}},r=(async()=>{try{t.start(),await o.execute({writer:t,merge:a}),t.isClosed()||t.done();}catch(n){let i=o.onError?.(n)||n.message;t.error(i),t.done();}})();try{for await(let n of M(t.toGenerator()))yield n,n.type==="message-complete"&&(s=n.message);await r,o.onFinish&&s&&await o.onFinish({message:s});}catch(n){throw n}}async function H(o){new v;for await(let e of o)switch(e.type){case "text-delta":process.stdout.write(e.delta);break;case "tool-call-start":console.log(`
4
+ \u{1F527} Tool: ${e.toolCall.name}`);break;case "tool-result":let s=e.result.error?"\u274C":"\u2705";console.log(`${s} Tool completed`);break;case "usage":console.log(`
5
5
 
6
- \u{1F4CA} Tokens: ${t.usage.promptTokens} prompt + ${t.usage.completionTokens} completion = ${t.usage.totalTokens} total`);break;case "error":console.error(`
7
- \u274C Error:`,t.error);break;case "done":console.log(`
6
+ \u{1F4CA} Tokens: ${e.usage.promptTokens} prompt + ${e.usage.completionTokens} completion = ${e.usage.totalTokens} total`);break;case "error":console.error(`
7
+ \u274C Error:`,e.error);break;case "done":console.log(`
8
8
 
9
- \u2705 Stream completed`);break}}async function V(o,e){let t=b(o);if(!e)return new Response(new ReadableStream({async start(s){let a=new TextEncoder;try{for await(let r of t){let n=`data: ${JSON.stringify(r)}
9
+ \u2705 Stream completed`);break}}async function Y(o,t){let e=M(o);if(!t)return new Response(new ReadableStream({async start(s){let a=new TextEncoder;try{for await(let r of e){let n=`data: ${JSON.stringify(r)}
10
10
 
11
11
  `;s.enqueue(a.encode(n));}s.enqueue(a.encode(`data: [DONE]
12
12
 
13
- `));}catch(r){s.error(r);}finally{s.close();}}}),{headers:{"Content-Type":"text/event-stream","Cache-Control":"no-cache",Connection:"keep-alive"}});e.setHeader("Content-Type","text/event-stream"),e.setHeader("Cache-Control","no-cache"),e.setHeader("Connection","keep-alive");for await(let s of t){let a=`data: ${JSON.stringify(s)}
13
+ `));}catch(r){s.error(r);}finally{s.close();}}}),{headers:{"Content-Type":"text/event-stream","Cache-Control":"no-cache",Connection:"keep-alive"}});t.setHeader("Content-Type","text/event-stream"),t.setHeader("Cache-Control","no-cache"),t.setHeader("Connection","keep-alive");for await(let s of e){let a=`data: ${JSON.stringify(s)}
14
14
 
15
- `;e.write(a);}e.write(`data: [DONE]
15
+ `;t.write(a);}t.write(`data: [DONE]
16
16
 
17
- `),e.end();}function qe(o){let e=new f,t=false;return {value:(async function*(){o!==void 0&&(yield o);for await(let s of e.toGenerator())s.type==="text-delta"?yield s.delta:s.type==="done"&&(yield s.finalMessage.content);})(),update(s){if(t)throw new Error("Stream already done");e.write(String(s));},done(s){t||(s!==void 0&&e.write(String(s)),e.done(),t=true);},error(s){e.error(s),t=true;}}}var R=class{client;keyPrefix;defaultTTL;constructor(e){this.client=new de__default.default({host:e.host,port:e.port,password:e.password,db:e.db||0,retryStrategy:t=>Math.min(t*50,2e3),maxRetriesPerRequest:3,enableReadyCheck:true,lazyConnect:false}),this.keyPrefix=e.keyPrefix||"paprflare:",this.defaultTTL=e.ttl||3600,this.client.on("error",t=>{console.error("Redis cache error:",t);});}getKey(e){return `${this.keyPrefix}${e}`}async get(e){try{return await this.client.get(this.getKey(e))}catch(t){return console.error("Redis get error:",t),null}}async set(e,t,s){try{let a=s||this.defaultTTL;await this.client.setex(this.getKey(e),a,t);}catch(a){console.error("Redis set error:",a);}}async delete(e){try{await this.client.del(this.getKey(e));}catch(t){console.error("Redis delete error:",t);}}async clear(){try{let e=await this.client.keys(`${this.keyPrefix}*`);e.length>0&&await this.client.del(...e);}catch(e){console.error("Redis clear error:",e);}}async has(e){try{return await this.client.exists(this.getKey(e))===1}catch(t){return console.error("Redis has error:",t),false}}async disconnect(){await this.client.quit();}},E=class{cache;constructor(e){this.cache=new lruCache.LRUCache({max:e?.maxSize||1e3,ttl:e?.maxAge||36e5,updateAgeOnGet:true,updateAgeOnHas:true});}async get(e){return this.cache.get(e)||null}async set(e,t){this.cache.set(e,t);}async delete(e){this.cache.delete(e);}async clear(){this.cache.clear();}async has(e){return this.cache.has(e)}},x=class{cache;enabled;constructor(e){this.enabled=true,e.type==="redis"?this.cache=new R({...e.redis,ttl:e.ttl}):this.cache=new E(e.memory);}generateCacheKey(e,t){let s={messages:e.map(a=>({role:a.role,content:a.content,toolCalls:a.toolCalls})),model:t.model,temperature:t.temperature,maxTokens:t.maxTokens,tools:t.tools?.map(a=>a.name)};return q(s)}async getCachedResponse(e,t){if(!this.enabled||t.cache?.enabled===false)return null;let s=t.cache?.key||this.generateCacheKey(e,t),a=await this.cache.get(s);if(a)try{return JSON.parse(a)}catch(r){return console.error("Cache parse error:",r),await this.cache.delete(s),null}return null}async cacheResponse(e,t,s){if(!this.enabled||t.cache?.enabled===false)return;let a=t.cache?.key||this.generateCacheKey(e,t),r=t.cache?.ttl;await this.cache.set(a,JSON.stringify(s),r);}async invalidate(e,t){let s=this.generateCacheKey(e,t);await this.cache.delete(s);}async clearAll(){await this.cache.clear();}disable(){this.enabled=false;}enable(){this.enabled=true;}};var Q=class{constructor(e,t){this.db=e;this.schema=t;}async connect(){}async disconnect(){}async healthCheck(){try{return await this.db.select(drizzleOrm.sql`1`),!0}catch{return false}}async purge(){await this.db.delete(this.schema.messages),await this.db.delete(this.schema.conversations);}async createConversation(e,t){let[s]=await this.db.insert(this.schema.conversations).values({userId:e,metadata:t||{}}).returning();return s.id}async getConversation(e){let[t]=await this.db.select().from(this.schema.conversations).where(drizzleOrm.eq(this.schema.conversations.id,e));return t||null}async listConversations(e,t=50,s=0){return await this.db.select().from(this.schema.conversations).where(drizzleOrm.eq(this.schema.conversations.userId,e)).orderBy(drizzleOrm.desc(this.schema.conversations.updatedAt)).limit(t).offset(s)}async updateConversation(e,t){await this.db.update(this.schema.conversations).set({...t,updatedAt:new Date}).where(drizzleOrm.eq(this.schema.conversations.id,e));}async deleteConversation(e){await this.db.delete(this.schema.conversations).where(drizzleOrm.eq(this.schema.conversations.id,e));}async deleteAllConversations(e){let t=await this.db.select({id:this.schema.conversations.id}).from(this.schema.conversations).where(drizzleOrm.eq(this.schema.conversations.userId,e));for(let{id:s}of t)await this.db.delete(this.schema.messages).where(drizzleOrm.eq(this.schema.messages.conversationId,s));await this.db.delete(this.schema.conversations).where(drizzleOrm.eq(this.schema.conversations.userId,e));}async countConversations(e){let[{count:t}]=await this.db.select({count:drizzleOrm.sql`count(*)`}).from(this.schema.conversations).where(drizzleOrm.eq(this.schema.conversations.userId,e));return Number(t)}async conversationExists(e){let[t]=await this.db.select({id:this.schema.conversations.id}).from(this.schema.conversations).where(drizzleOrm.eq(this.schema.conversations.id,e));return !!t}async searchConversations(e,t){return await this.db.select().from(this.schema.conversations).where(drizzleOrm.and(drizzleOrm.eq(this.schema.conversations.userId,e),drizzleOrm.like(this.schema.conversations.title,`%${t}%`)))}async saveMessage(e,t){await this.db.insert(this.schema.messages).values({id:t.id,conversationId:e,role:t.role,content:t.content,toolCalls:t.toolCalls||[],toolResults:t.toolResults||[],metadata:t.metadata||{},timestamp:t.timestamp||Date.now()}),await this.db.update(this.schema.conversations).set({updatedAt:new Date}).where(drizzleOrm.eq(this.schema.conversations.id,e));}async saveManyMessages(e,t){t.length!==0&&(await this.db.insert(this.schema.messages).values(t.map(s=>({id:s.id,conversationId:e,role:s.role,content:s.content,toolCalls:s.toolCalls||[],toolResults:s.toolResults||[],metadata:s.metadata||{},timestamp:s.timestamp||Date.now()}))),await this.db.update(this.schema.conversations).set({updatedAt:new Date}).where(drizzleOrm.eq(this.schema.conversations.id,e)));}async getMessage(e){let[t]=await this.db.select().from(this.schema.messages).where(drizzleOrm.eq(this.schema.messages.id,e));return t||null}async getMessages(e,t=100,s=0){return await this.db.select().from(this.schema.messages).where(drizzleOrm.eq(this.schema.messages.conversationId,e)).orderBy(drizzleOrm.asc(this.schema.messages.timestamp)).limit(t).offset(s)}async getMessagesByRole(e,t){return await this.db.select().from(this.schema.messages).where(drizzleOrm.and(drizzleOrm.eq(this.schema.messages.conversationId,e),drizzleOrm.eq(this.schema.messages.role,t))).orderBy(drizzleOrm.asc(this.schema.messages.timestamp))}async updateMessage(e,t){await this.db.update(this.schema.messages).set(t).where(drizzleOrm.eq(this.schema.messages.id,e));}async deleteMessage(e){await this.db.delete(this.schema.messages).where(drizzleOrm.eq(this.schema.messages.id,e));}async deleteAllMessages(e){await this.db.delete(this.schema.messages).where(drizzleOrm.eq(this.schema.messages.conversationId,e));}async countMessages(e){let[{count:t}]=await this.db.select({count:drizzleOrm.sql`count(*)`}).from(this.schema.messages).where(drizzleOrm.eq(this.schema.messages.conversationId,e));return Number(t)}async getLastMessage(e){let[t]=await this.db.select().from(this.schema.messages).where(drizzleOrm.eq(this.schema.messages.conversationId,e)).orderBy(drizzleOrm.desc(this.schema.messages.timestamp)).limit(1);return t||null}async searchMessages(e,t){return await this.db.select().from(this.schema.messages).where(drizzleOrm.and(drizzleOrm.eq(this.schema.messages.conversationId,e),drizzleOrm.like(this.schema.messages.content,`%${t}%`))).orderBy(drizzleOrm.asc(this.schema.messages.timestamp))}async updateConversationMetadata(e,t){await this.db.update(this.schema.conversations).set({metadata:t,updatedAt:new Date}).where(drizzleOrm.eq(this.schema.conversations.id,e));}async getConversationMetadata(e){let[t]=await this.db.select({metadata:this.schema.conversations.metadata}).from(this.schema.conversations).where(drizzleOrm.eq(this.schema.conversations.id,e));return t?.metadata||null}async deleteConversationMetadata(e,t){let s=await this.getConversationMetadata(e);if(s){for(let a of t)delete s[a];await this.updateConversationMetadata(e,s);}}async userExists(e){let[t]=await this.db.select({id:this.schema.conversations.id}).from(this.schema.conversations).where(drizzleOrm.eq(this.schema.conversations.userId,e)).limit(1);return !!t}async deleteUser(e){await this.deleteAllConversations(e);}async exportConversation(e){let t=await this.getConversation(e);if(!t)throw new Error(`Conversation ${e} not found`);let s=await this.getMessages(e);return {conversation:t,messages:s,exportedAt:new Date}}async importConversation(e,t){let s=await this.createConversation(e,t.conversation.metadata);return await this.db.update(this.schema.conversations).set({title:t.conversation.title,createdAt:t.conversation.createdAt}).where(drizzleOrm.eq(this.schema.conversations.id,s)),await this.saveManyMessages(s,t.messages),s}};var P=class{constructor(e){this.adapter=e;}async connect(){await this.adapter.connect();}async disconnect(){await this.adapter.disconnect();}async healthCheck(){return await this.adapter.healthCheck()}async purge(){await this.adapter.purge();}async create(e,t){return await this.adapter.createConversation(e,{systemPrompt:t})}async getConversation(e){return await this.adapter.getConversation(e)}async listConversations(e,t,s){return await this.adapter.listConversations(e,t,s)}async updateConversation(e,t){await this.adapter.updateConversation(e,t);}async deleteConversation(e){await this.adapter.deleteConversation(e);}async deleteAllConversations(e){await this.adapter.deleteAllConversations(e);}async countConversations(e){return await this.adapter.countConversations(e)}async conversationExists(e){return await this.adapter.conversationExists(e)}async searchConversations(e,t){return await this.adapter.searchConversations(e,t)}async addMessage(e,t){await this.adapter.saveMessage(e,t);}async addManyMessages(e,t){await this.adapter.saveManyMessages(e,t);}async getMessage(e){return await this.adapter.getMessage(e)}async getConversationHistory(e,t,s){return await this.adapter.getMessages(e,t,s)}async getMessagesByRole(e,t){return await this.adapter.getMessagesByRole(e,t)}async updateMessage(e,t){await this.adapter.updateMessage(e,t);}async deleteMessage(e){await this.adapter.deleteMessage(e);}async deleteAllMessages(e){await this.adapter.deleteAllMessages(e);}async countMessages(e){return await this.adapter.countMessages(e)}async getLastMessage(e){return await this.adapter.getLastMessage(e)}async searchMessages(e,t){return await this.adapter.searchMessages(e,t)}async updateConversationMetadata(e,t){await this.adapter.updateConversationMetadata(e,t);}async getConversationMetadata(e){return await this.adapter.getConversationMetadata(e)}async deleteConversationMetadata(e,t){await this.adapter.deleteConversationMetadata(e,t);}async userExists(e){return await this.adapter.userExists(e)}async deleteUser(e){await this.adapter.deleteUser(e);}async exportConversation(e){return await this.adapter.exportConversation(e)}async importConversation(e,t){return await this.adapter.importConversation(e,t)}};var X=class{conversations=new Map;messages=new Map;async connect(){}async disconnect(){}async healthCheck(){return true}async purge(){this.conversations.clear(),this.messages.clear();}async createConversation(e,t){let s=`conv_${Date.now()}_${Math.random().toString(36).substr(2,9)}`,a={id:s,userId:e,metadata:t||{},createdAt:new Date,updatedAt:new Date};return this.conversations.set(s,a),this.messages.set(s,[]),s}async getConversation(e){return this.conversations.get(e)||null}async listConversations(e,t=50,s=0){return Array.from(this.conversations.values()).filter(a=>a.userId===e).sort((a,r)=>r.updatedAt.getTime()-a.updatedAt.getTime()).slice(s,s+t)}async updateConversation(e,t){let s=this.conversations.get(e);s&&Object.assign(s,t,{updatedAt:new Date});}async deleteConversation(e){this.conversations.delete(e),this.messages.delete(e);}async deleteAllConversations(e){for(let[t,s]of this.conversations)s.userId===e&&(this.conversations.delete(t),this.messages.delete(t));}async countConversations(e){return Array.from(this.conversations.values()).filter(t=>t.userId===e).length}async conversationExists(e){return this.conversations.has(e)}async searchConversations(e,t){let s=t.toLowerCase();return Array.from(this.conversations.values()).filter(a=>a.userId===e&&a.title?.toLowerCase().includes(s))}async saveMessage(e,t){let s=this.messages.get(e)||[];s.push(t),this.messages.set(e,s);let a=this.conversations.get(e);a&&(a.updatedAt=new Date);}async saveManyMessages(e,t){for(let s of t)await this.saveMessage(e,s);}async getMessage(e){for(let t of this.messages.values()){let s=t.find(a=>a.id===e);if(s)return s}return null}async getMessages(e,t=100,s=0){return (this.messages.get(e)||[]).slice(s,s+t)}async getMessagesByRole(e,t){return (this.messages.get(e)||[]).filter(a=>a.role===t)}async updateMessage(e,t){for(let s of this.messages.values()){let a=s.findIndex(r=>r.id===e);if(a!==-1){s[a]={...s[a],...t};break}}}async deleteMessage(e){for(let[t,s]of this.messages){let a=s.findIndex(r=>r.id===e);if(a!==-1){s.splice(a,1),this.messages.set(t,s);break}}}async deleteAllMessages(e){this.messages.set(e,[]);}async countMessages(e){return (this.messages.get(e)||[]).length}async getLastMessage(e){let t=this.messages.get(e)||[];return t[t.length-1]||null}async searchMessages(e,t){let s=t.toLowerCase();return (this.messages.get(e)||[]).filter(r=>typeof r.content=="string"&&r.content.toLowerCase().includes(s))}async updateConversationMetadata(e,t){let s=this.conversations.get(e);s&&(s.metadata={...s.metadata,...t},s.updatedAt=new Date);}async getConversationMetadata(e){return this.conversations.get(e)?.metadata||null}async deleteConversationMetadata(e,t){let s=this.conversations.get(e);if(s?.metadata){for(let a of t)delete s.metadata[a];s.updatedAt=new Date;}}async userExists(e){return Array.from(this.conversations.values()).some(t=>t.userId===e)}async deleteUser(e){await this.deleteAllConversations(e);}async exportConversation(e){let t=await this.getConversation(e);if(!t)throw new Error(`Conversation ${e} not found`);let s=await this.getMessages(e);return {conversation:t,messages:s,exportedAt:new Date}}async importConversation(e,t){let s=await this.createConversation(e,t.conversation.metadata),a=this.conversations.get(s);return a.title=t.conversation.title,a.createdAt=t.conversation.createdAt,await this.saveManyMessages(s,t.messages),s}};var ee=class{constructor(e){this.prisma=e;}async connect(){await this.prisma.$connect();}async disconnect(){await this.prisma.$disconnect();}async healthCheck(){try{return await this.prisma.$queryRaw`SELECT 1`,!0}catch{return false}}async purge(){await this.prisma.message.deleteMany(),await this.prisma.conversation.deleteMany();}async createConversation(e,t){return (await this.prisma.conversation.create({data:{userId:e,metadata:t||{}}})).id}async getConversation(e){return await this.prisma.conversation.findUnique({where:{id:e}})}async listConversations(e,t=50,s=0){return await this.prisma.conversation.findMany({where:{userId:e},orderBy:{updatedAt:"desc"},take:t,skip:s})}async updateConversation(e,t){await this.prisma.conversation.update({where:{id:e},data:{...t,updatedAt:new Date}});}async deleteConversation(e){await this.prisma.conversation.delete({where:{id:e}});}async deleteAllConversations(e){let t=await this.prisma.conversation.findMany({where:{userId:e},select:{id:true}});await this.prisma.message.deleteMany({where:{conversationId:{in:t.map(s=>s.id)}}}),await this.prisma.conversation.deleteMany({where:{userId:e}});}async countConversations(e){return await this.prisma.conversation.count({where:{userId:e}})}async conversationExists(e){return await this.prisma.conversation.count({where:{id:e}})>0}async searchConversations(e,t){return await this.prisma.conversation.findMany({where:{userId:e,title:{contains:t,mode:"insensitive"}},orderBy:{updatedAt:"desc"}})}toMessage(e){return {id:e.id,role:e.role,content:e.content,toolCalls:e.toolCalls,toolResults:e.toolResults,metadata:e.metadata,timestamp:e.timestamp}}async saveMessage(e,t){await this.prisma.message.create({data:{id:t.id,conversationId:e,role:t.role,content:t.content,toolCalls:t.toolCalls||[],toolResults:t.toolResults||[],metadata:t.metadata||{},timestamp:t.timestamp||Date.now()}}),await this.prisma.conversation.update({where:{id:e},data:{updatedAt:new Date}});}async saveManyMessages(e,t){t.length!==0&&(await this.prisma.message.createMany({data:t.map(s=>({id:s.id,conversationId:e,role:s.role,content:s.content,toolCalls:s.toolCalls||[],toolResults:s.toolResults||[],metadata:s.metadata||{},timestamp:s.timestamp||Date.now()}))}),await this.prisma.conversation.update({where:{id:e},data:{updatedAt:new Date}}));}async getMessage(e){let t=await this.prisma.message.findUnique({where:{id:e}});return t?this.toMessage(t):null}async getMessages(e,t=100,s=0){return (await this.prisma.message.findMany({where:{conversationId:e},orderBy:{timestamp:"asc"},take:t,skip:s})).map(this.toMessage)}async getMessagesByRole(e,t){return (await this.prisma.message.findMany({where:{conversationId:e,role:t},orderBy:{timestamp:"asc"}})).map(this.toMessage)}async updateMessage(e,t){await this.prisma.message.update({where:{id:e},data:t});}async deleteMessage(e){await this.prisma.message.delete({where:{id:e}});}async deleteAllMessages(e){await this.prisma.message.deleteMany({where:{conversationId:e}});}async countMessages(e){return await this.prisma.message.count({where:{conversationId:e}})}async getLastMessage(e){let t=await this.prisma.message.findFirst({where:{conversationId:e},orderBy:{timestamp:"desc"}});return t?this.toMessage(t):null}async searchMessages(e,t){return (await this.prisma.message.findMany({where:{conversationId:e,content:{contains:t,mode:"insensitive"}},orderBy:{timestamp:"asc"}})).map(this.toMessage)}async updateConversationMetadata(e,t){await this.prisma.conversation.update({where:{id:e},data:{metadata:t,updatedAt:new Date}});}async getConversationMetadata(e){return (await this.prisma.conversation.findUnique({where:{id:e},select:{metadata:true}}))?.metadata||null}async deleteConversationMetadata(e,t){let s=await this.getConversationMetadata(e);if(s){for(let a of t)delete s[a];await this.updateConversationMetadata(e,s);}}async userExists(e){return await this.prisma.conversation.count({where:{userId:e}})>0}async deleteUser(e){await this.deleteAllConversations(e);}async exportConversation(e){let t=await this.getConversation(e);if(!t)throw new Error(`Conversation ${e} not found`);let s=await this.getMessages(e);return {conversation:t,messages:s,exportedAt:new Date}}async importConversation(e,t){let s=await this.createConversation(e,t.conversation.metadata);return await this.prisma.conversation.update({where:{id:s},data:{title:t.conversation.title,createdAt:t.conversation.createdAt}}),await this.saveManyMessages(s,t.messages),s}};var T=class extends ue__default.default{constructor(t){super();this.client=t;}threads=new Map;async createThread(t,s,a,r){let n=w("thread"),l=Date.now(),i={id:n,userId:t,messages:[],config:s,metadata:a||{},tags:r?.tags||[],title:r?.title,createdAt:l,updatedAt:l,lastActiveAt:l,status:"active",priority:r?.priority||"normal",messageCount:0,errorCount:0};return this.threads.set(n,i),this.emit("event",{type:"thread-created",threadId:n,thread:i}),n}async forkThread(t,s){let a=this.requireThread(t),r=[...a.messages];if(s){let i=r.findIndex(c=>c.id===s);i!==-1&&(r=r.slice(0,i+1));}let n=await this.createThread(a.userId,a.config,{...a.metadata}),l=this.requireThread(n);return l.messages=r.map(i=>({...i})),l.messageCount=r.length,l.tags=[...a.tags],l.title=a.title?`Fork of ${a.title}`:void 0,this.emit("event",{type:"thread-forked",threadId:n,parentThreadId:t}),n}async mergeThread(t,s){let a=this.requireThread(t),r=this.requireThread(s),n=[...a.messages,...r.messages].sort((l,i)=>(l.timestamp||0)-(i.timestamp||0));a.messages=n,a.messageCount=n.length,a.updatedAt=Date.now(),this.emit("event",{type:"thread-merged",threadId:t,sourceThreadId:s});}getThread(t){return this.threads.get(t)||null}threadExists(t){return this.threads.has(t)}getUserThreads(t,s){let a=Array.from(this.threads.values()).filter(l=>l.userId===t);a=this.sortThreads(a,s?.sort);let r=s?.offset||0,n=s?.limit??a.length;return a.slice(r,r+n)}filterThreads(t,s,a){let r=Array.from(this.threads.values()).filter(i=>i.userId===t);if(s.status){let i=Array.isArray(s.status)?s.status:[s.status];r=r.filter(c=>i.includes(c.status));}if(s.priority&&(r=r.filter(i=>i.priority===s.priority)),s.tags?.length&&(r=r.filter(i=>s.tags.every(c=>i.tags.includes(c)))),s.createdAfter!==void 0&&(r=r.filter(i=>i.createdAt>=s.createdAfter)),s.createdBefore!==void 0&&(r=r.filter(i=>i.createdAt<=s.createdBefore)),s.updatedAfter!==void 0&&(r=r.filter(i=>i.updatedAt>=s.updatedAfter)),s.search){let i=s.search.toLowerCase();r=r.filter(c=>c.title?.toLowerCase().includes(i)||c.messages.some(d=>typeof d.content=="string"&&d.content.toLowerCase().includes(i)));}r=this.sortThreads(r,a?.sort);let n=a?.offset||0,l=a?.limit??r.length;return r.slice(n,n+l)}countThreads(t,s){return this.filterThreads(t,s||{}).length}updateThreadStatus(t,s){let a=this.requireThread(t),r=a.status;a.status=s,a.updatedAt=Date.now(),this.emit("event",{type:"status-changed",threadId:t,status:s,previousStatus:r});}updateThreadPriority(t,s){let a=this.requireThread(t);a.priority=s,a.updatedAt=Date.now(),this.emit("event",{type:"priority-changed",threadId:t,priority:s});}updateThreadMetadata(t,s){let a=this.requireThread(t);a.metadata={...a.metadata,...s},a.updatedAt=Date.now(),this.emit("event",{type:"metadata-updated",threadId:t,metadata:a.metadata});}setThreadTitle(t,s){let a=this.requireThread(t);a.title=s,a.updatedAt=Date.now(),this.emit("event",{type:"title-updated",threadId:t,title:s});}updateThreadConfig(t,s){let a=this.requireThread(t);a.config={...a.config,...s},a.updatedAt=Date.now(),this.emit("event",{type:"config-updated",threadId:t,config:a.config});}addTags(t,s){let a=this.requireThread(t);a.tags=[...new Set([...a.tags,...s])],a.updatedAt=Date.now(),this.emit("event",{type:"tags-updated",threadId:t,tags:a.tags});}removeTags(t,s){let a=this.requireThread(t);a.tags=a.tags.filter(r=>!s.includes(r)),a.updatedAt=Date.now(),this.emit("event",{type:"tags-updated",threadId:t,tags:a.tags});}setTags(t,s){let a=this.requireThread(t);a.tags=[...new Set(s)],a.updatedAt=Date.now(),this.emit("event",{type:"tags-updated",threadId:t,tags:a.tags});}async addMessage(t,s){let a=this.requireThread(t),r=Date.now(),n={...s,id:s.id||w("msg"),timestamp:s.timestamp||r};a.messages.push(n),a.messageCount=a.messages.length,a.updatedAt=r,a.lastActiveAt=r,this.emit("event",{type:"message-added",threadId:t,message:n});}async addManyMessages(t,s){for(let a of s)await this.addMessage(t,a);}getMessage(t,s){return this.requireThread(t).messages.find(r=>r.id===s)||null}getMessages(t,s){let r=[...this.requireThread(t).messages];s?.role&&(r=r.filter(i=>i.role===s.role));let n=s?.offset||0,l=s?.limit??r.length;return r.slice(n,n+l)}getLastMessage(t){let s=this.requireThread(t);return s.messages[s.messages.length-1]||null}updateMessage(t,s,a){let r=this.requireThread(t),n=r.messages.findIndex(l=>l.id===s);if(n===-1)throw new Error(`Message ${s} not found in thread ${t}`);r.messages[n]={...r.messages[n],...a},r.updatedAt=Date.now(),this.emit("event",{type:"message-updated",threadId:t,messageId:s,updates:a});}deleteMessage(t,s){let a=this.requireThread(t),r=a.messages.findIndex(n=>n.id===s);if(r===-1)throw new Error(`Message ${s} not found in thread ${t}`);a.messages.splice(r,1),a.messageCount=a.messages.length,a.updatedAt=Date.now(),this.emit("event",{type:"message-deleted",threadId:t,messageId:s});}searchMessages(t,s){let a=this.requireThread(t),r=s.toLowerCase();return a.messages.filter(n=>typeof n.content=="string"&&n.content.toLowerCase().includes(r))}clearThread(t){let s=this.requireThread(t);s.messages=[],s.messageCount=0,s.updatedAt=Date.now(),this.emit("event",{type:"thread-cleared",threadId:t});}trimThread(t,s){let a=this.requireThread(t);a.messages.length>s&&(a.messages=a.messages.slice(-s),a.messageCount=a.messages.length,a.updatedAt=Date.now());}archiveThread(t){this.updateThreadStatus(t,"archived"),this.emit("event",{type:"thread-archived",threadId:t});}restoreThread(t){this.updateThreadStatus(t,"active"),this.emit("event",{type:"thread-restored",threadId:t});}pauseThread(t){this.updateThreadStatus(t,"paused");}resumeThread(t){this.updateThreadStatus(t,"active");}completeThread(t){this.updateThreadStatus(t,"completed");}markThreadError(t,s){let a=this.requireThread(t);a.errorCount+=1,a.lastError=s.message,this.updateThreadStatus(t,"error"),this.emit("event",{type:"error",threadId:t,error:s});}deleteThread(t){this.threads.delete(t),this.emit("event",{type:"thread-deleted",threadId:t});}deleteAllThreads(t){for(let[s,a]of this.threads)a.userId===t&&(this.threads.delete(s),this.emit("event",{type:"thread-deleted",threadId:s}));}getStats(t){let s=t?Array.from(this.threads.values()).filter(i=>i.userId===t):Array.from(this.threads.values()),a=s.reduce((i,c)=>i+c.messageCount,0),r=s.reduce((i,c)=>i+(c.tokenCount||0),0),n=s.map(i=>i.createdAt),l={total:s.length,active:s.filter(i=>i.status==="active").length,paused:s.filter(i=>i.status==="paused").length,completed:s.filter(i=>i.status==="completed").length,error:s.filter(i=>i.status==="error").length,archived:s.filter(i=>i.status==="archived").length,totalMessages:a,totalTokens:r,averageMessagesPerThread:s.length?a/s.length:0,oldestThread:n.length?Math.min(...n):void 0,newestThread:n.length?Math.max(...n):void 0};return this.emit("event",{type:"pool-stats",stats:l}),l}exportThread(t){let s=this.requireThread(t);return {thread:{...s},messages:s.messages.map(a=>({...a})),exportedAt:Date.now(),version:"1.0"}}importThread(t,s){let a=w("thread"),r=Date.now(),n={...s.thread,id:a,userId:t,messages:s.messages.map(l=>({...l})),createdAt:r,updatedAt:r,lastActiveAt:r};return this.threads.set(a,n),this.emit("event",{type:"thread-created",threadId:a,thread:n}),a}cleanup(t=36e5){let s=Date.now(),a=[];for(let[r,n]of this.threads)n.status!=="active"&&s-n.updatedAt>t&&a.push(r);for(let r of a)this.threads.delete(r);this.emit("event",{type:"cleanup",deletedCount:a.length});}requireThread(t){let s=this.threads.get(t);if(!s)throw new Error(`Thread ${t} not found`);return s}sortThreads(t,s){let a=s?.field||"updatedAt",r=s?.direction==="asc"?1:-1;return [...t].sort((n,l)=>{let i=n[a],c=l[a];return r*(i-c)})}};var te=class{constructor(e){this.client=e;}managers=new Map;getManager(e){return this.managers.has(e)||this.managers.set(e,new T(this.client)),this.managers.get(e)}hasManager(e){return this.managers.has(e)}removeManager(e){let t=this.managers.get(e);t&&(t.removeAllListeners(),this.managers.delete(e));}listUsers(){return Array.from(this.managers.keys())}managerCount(){return this.managers.size}getAllThreads(){let e=[];for(let t of this.managers.values())e.push(...Array.from(t.threads.values()));return e}getAllActiveThreads(){return this.getAllThreads().filter(e=>e.status==="active")}findThreads(e,t){let s=[];for(let[i,c]of this.managers)s.push(...c.filterThreads(i,e,t));let a=t?.sort?.field||"updatedAt",r=t?.sort?.direction==="asc"?1:-1;s.sort((i,c)=>r*(i[a]-c[a]));let n=t?.offset||0,l=t?.limit??s.length;return s.slice(n,n+l)}findThread(e){for(let t of this.managers.values()){let s=t.getThread(e);if(s)return s}return null}findThreadOwner(e){for(let[t,s]of this.managers)if(s.threadExists(e))return t;return null}getGlobalStats(){let e=this.getAllThreads(),t=e.reduce((r,n)=>r+n.messageCount,0),s=e.reduce((r,n)=>r+(n.tokenCount||0),0),a=e.map(r=>r.createdAt);return {userCount:this.managers.size,total:e.length,active:e.filter(r=>r.status==="active").length,paused:e.filter(r=>r.status==="paused").length,completed:e.filter(r=>r.status==="completed").length,error:e.filter(r=>r.status==="error").length,archived:e.filter(r=>r.status==="archived").length,totalMessages:t,totalTokens:s,averageMessagesPerThread:e.length?t/e.length:0,oldestThread:a.length?Math.min(...a):void 0,newestThread:a.length?Math.max(...a):void 0}}getUserStats(){let e={};for(let[t,s]of this.managers)e[t]=s.getStats(t);return e}totalThreadCount(){let e=0;for(let t of this.managers.values())e+=t.threads.size;return e}cleanupAll(e=36e5){for(let t of this.managers.values())t.cleanup(e);for(let[t,s]of this.managers)s.threads.size===0&&(s.removeAllListeners(),this.managers.delete(t));}archiveStale(e=864e5){let t=Date.now(),s=0;for(let a of this.managers.values())for(let r of a.threads.values())(r.status==="completed"||r.status==="error")&&t-r.updatedAt>e&&(a.archiveThread(r.id),s++);return s}deleteUser(e){let t=this.managers.get(e);t&&(t.deleteAllThreads(e),t.removeAllListeners(),this.managers.delete(e));}purge(){for(let[e,t]of this.managers)t.deleteAllThreads(e),t.removeAllListeners();this.managers.clear();}exportThread(e){for(let t of this.managers.values())if(t.threadExists(e))return t.exportThread(e);return null}importThread(e,t){return this.getManager(e).importThread(e,t)}exportUserThreads(e){let t=this.managers.get(e);return t?Array.from(t.threads.keys()).map(s=>t.exportThread(s)):[]}importUserThreads(e,t){return t.map(s=>this.importThread(e,s))}};var se=class o{mode;cloudConfig;providerCallback;cacheManager;databaseManager;threadManager;queue;mutex;defaultRetryConfig;constructor(e){this.mode=e.mode,this.mutex=new asyncMutex.Mutex;let t=e.rateLimit||{};if(this.queue=new he__default.default({concurrency:t.maxConcurrent||100,interval:t.interval||1e3,intervalCap:t.intervalCap||100,timeout:3e4}),this.defaultRetryConfig={maxAttempts:e.retry?.maxAttempts||3,initialDelay:e.retry?.initialDelay||1e3,maxDelay:e.retry?.maxDelay||1e4,backoffMultiplier:e.retry?.backoffMultiplier||2},e.mode==="cloud")this.cloudConfig=e;else if(this.providerCallback=e.provider,e.cache&&(this.cacheManager=new x(e.cache)),e.database&&(this.databaseManager=new P(e.database)),e.threads?.enabled&&!this.providerCallback)throw new p("Provider callback required for thread management","INVALID_CONFIG")}async chat(e){let{messages:t,...s}=e,a=$(t);if(this.validateConfig(s),this.cacheManager&&s.cache?.enabled!==false){let r=await this.cacheManager.getCachedResponse(a,s);if(r)return s.stream?this.createStreamingResponse(this.eventsToGenerator(r)):this.eventsToResponse(r)}return this.queue.add(async()=>this.executeChat(a,s))}async executeChat(e,t){let s={...this.defaultRetryConfig,...t.cache};return J(async()=>this.mode==="cloud"?this.executeCloudChat(e,t):this.executeSelfManagedChat(e,t),{...s,onRetry:(a,r)=>{console.warn(`[PaprFlare] Retry attempt ${a}/${s.maxAttempts}:`,r.message);}})}async executeCloudChat(e,t){let s=await fetch(`${this.cloudConfig.baseURL||"https://api.paprflare.in"}/v1/chat`,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${this.cloudConfig.apiKey}`},body:JSON.stringify({messages:e,...t})});if(!s.ok)throw new p(`Cloud API error: ${s.statusText}`,"CLOUD_API_ERROR",s.status);if(t.stream){let a=this.parseCloudStream(s.body);return this.createStreamingResponse(a)}else return await s.json()}async executeSelfManagedChat(e,t){if(!this.providerCallback)throw new p("Provider callback not configured","INVALID_CONFIG");if(t.output?.schema)return this.executeStructuredOutput(e,t);let s=this.providerCallback(e,t);if(t.stream){let a;if(this.cacheManager&&t.cache?.enabled!==false){let r=[],n=this.cacheStream(s,r);a=this.withFinally(n,()=>this.cacheManager.cacheResponse(e,t,r));}else a=s;return this.createStreamingResponse(a)}else {let a=await A(s);return this.cacheManager&&t.cache?.enabled!==false&&await this.cacheManager.cacheResponse(e,t,a),this.eventsToResponse(a)}}async executeStructuredOutput(e,t){let s=t.output.schema._def?.shape,a=typeof s=="function"?s():s,r=a?Object.entries(a).map(([g,y])=>{let C=y?._def?.typeName??y?.constructor?.name??"unknown";return ` - "${g}": ${C}`}).join(`
18
- `):"(schema shape unavailable)",n={id:w("msg"),role:"system",content:`You are a JSON generator. You MUST respond with ONLY valid JSON that matches this exact schema:
17
+ `),t.end();}function Ge(o){let t=new v,e=false;return {value:(async function*(){o!==void 0&&(yield o);for await(let s of t.toGenerator())s.type==="text-delta"?yield s.delta:s.type==="done"&&(yield s.finalMessage.content);})(),update(s){if(e)throw new Error("Stream already done");t.write(String(s));},done(s){e||(s!==void 0&&t.write(String(s)),t.done(),e=true);},error(s){t.error(s),e=true;}}}var O=class{client;keyPrefix;defaultTTL;constructor(t){this.client=new ue__default.default({host:t.host,port:t.port,password:t.password,db:t.db||0,retryStrategy:e=>Math.min(e*50,2e3),maxRetriesPerRequest:3,enableReadyCheck:true,lazyConnect:false}),this.keyPrefix=t.keyPrefix||"paprflare:",this.defaultTTL=t.ttl||3600,this.client.on("error",e=>{console.error("Redis cache error:",e);});}getKey(t){return `${this.keyPrefix}${t}`}async get(t){try{return await this.client.get(this.getKey(t))}catch(e){return console.error("Redis get error:",e),null}}async set(t,e,s){try{let a=s||this.defaultTTL;await this.client.setex(this.getKey(t),a,e);}catch(a){console.error("Redis set error:",a);}}async delete(t){try{await this.client.del(this.getKey(t));}catch(e){console.error("Redis delete error:",e);}}async clear(){try{let t=await this.client.keys(`${this.keyPrefix}*`);t.length>0&&await this.client.del(...t);}catch(t){console.error("Redis clear error:",t);}}async has(t){try{return await this.client.exists(this.getKey(t))===1}catch(e){return console.error("Redis has error:",e),false}}async disconnect(){await this.client.quit();}},D=class{cache;constructor(t){this.cache=new lruCache.LRUCache({max:t?.maxSize||1e3,ttl:t?.maxAge||36e5,updateAgeOnGet:true,updateAgeOnHas:true});}async get(t){return this.cache.get(t)||null}async set(t,e){this.cache.set(t,e);}async delete(t){this.cache.delete(t);}async clear(){this.cache.clear();}async has(t){return this.cache.has(t)}},S=class{cache;enabled;constructor(t){this.enabled=true,t.type==="redis"?this.cache=new O({...t.redis,ttl:t.ttl}):this.cache=new D(t.memory);}generateCacheKey(t,e){let s={messages:t.map(a=>({role:a.role,content:a.content,toolCalls:a.toolCalls})),model:e.model,temperature:e.temperature,maxTokens:e.maxTokens,tools:e.tools?.map(a=>a.name)};return $(s)}async getCachedResponse(t,e){if(!this.enabled||e.cache?.enabled===false)return null;let s=e.cache?.key||this.generateCacheKey(t,e),a=await this.cache.get(s);if(a)try{return JSON.parse(a)}catch(r){return console.error("Cache parse error:",r),await this.cache.delete(s),null}return null}async cacheResponse(t,e,s){if(!this.enabled||e.cache?.enabled===false)return;let a=e.cache?.key||this.generateCacheKey(t,e),r=e.cache?.ttl;await this.cache.set(a,JSON.stringify(s),r);}async invalidate(t,e){let s=this.generateCacheKey(t,e);await this.cache.delete(s);}async clearAll(){await this.cache.clear();}disable(){this.enabled=false;}enable(){this.enabled=true;}};var ee=class{constructor(t,e){this.db=t;this.schema=e;}async connect(){}async disconnect(){}async healthCheck(){try{return await this.db.select(drizzleOrm.sql`1`),!0}catch{return false}}async purge(){await this.db.delete(this.schema.messages),await this.db.delete(this.schema.conversations);}async createConversation(t,e){let[s]=await this.db.insert(this.schema.conversations).values({userId:t,metadata:e||{}}).returning();return s.id}async getConversation(t){let[e]=await this.db.select().from(this.schema.conversations).where(drizzleOrm.eq(this.schema.conversations.id,t));return e||null}async listConversations(t,e=50,s=0){return await this.db.select().from(this.schema.conversations).where(drizzleOrm.eq(this.schema.conversations.userId,t)).orderBy(drizzleOrm.desc(this.schema.conversations.updatedAt)).limit(e).offset(s)}async updateConversation(t,e){await this.db.update(this.schema.conversations).set({...e,updatedAt:new Date}).where(drizzleOrm.eq(this.schema.conversations.id,t));}async deleteConversation(t){await this.db.delete(this.schema.conversations).where(drizzleOrm.eq(this.schema.conversations.id,t));}async deleteAllConversations(t){let e=await this.db.select({id:this.schema.conversations.id}).from(this.schema.conversations).where(drizzleOrm.eq(this.schema.conversations.userId,t));for(let{id:s}of e)await this.db.delete(this.schema.messages).where(drizzleOrm.eq(this.schema.messages.conversationId,s));await this.db.delete(this.schema.conversations).where(drizzleOrm.eq(this.schema.conversations.userId,t));}async countConversations(t){let[{count:e}]=await this.db.select({count:drizzleOrm.sql`count(*)`}).from(this.schema.conversations).where(drizzleOrm.eq(this.schema.conversations.userId,t));return Number(e)}async conversationExists(t){let[e]=await this.db.select({id:this.schema.conversations.id}).from(this.schema.conversations).where(drizzleOrm.eq(this.schema.conversations.id,t));return !!e}async searchConversations(t,e){return await this.db.select().from(this.schema.conversations).where(drizzleOrm.and(drizzleOrm.eq(this.schema.conversations.userId,t),drizzleOrm.like(this.schema.conversations.title,`%${e}%`)))}async saveMessage(t,e){await this.db.insert(this.schema.messages).values({id:e.id,conversationId:t,role:e.role,content:e.content,toolCalls:e.toolCalls||[],toolResults:e.toolResults||[],metadata:e.metadata||{},timestamp:e.timestamp||Date.now()}),await this.db.update(this.schema.conversations).set({updatedAt:new Date}).where(drizzleOrm.eq(this.schema.conversations.id,t));}async saveManyMessages(t,e){e.length!==0&&(await this.db.insert(this.schema.messages).values(e.map(s=>({id:s.id,conversationId:t,role:s.role,content:s.content,toolCalls:s.toolCalls||[],toolResults:s.toolResults||[],metadata:s.metadata||{},timestamp:s.timestamp||Date.now()}))),await this.db.update(this.schema.conversations).set({updatedAt:new Date}).where(drizzleOrm.eq(this.schema.conversations.id,t)));}async getMessage(t){let[e]=await this.db.select().from(this.schema.messages).where(drizzleOrm.eq(this.schema.messages.id,t));return e||null}async getMessages(t,e=100,s=0){return await this.db.select().from(this.schema.messages).where(drizzleOrm.eq(this.schema.messages.conversationId,t)).orderBy(drizzleOrm.asc(this.schema.messages.timestamp)).limit(e).offset(s)}async getMessagesByRole(t,e){return await this.db.select().from(this.schema.messages).where(drizzleOrm.and(drizzleOrm.eq(this.schema.messages.conversationId,t),drizzleOrm.eq(this.schema.messages.role,e))).orderBy(drizzleOrm.asc(this.schema.messages.timestamp))}async updateMessage(t,e){await this.db.update(this.schema.messages).set(e).where(drizzleOrm.eq(this.schema.messages.id,t));}async deleteMessage(t){await this.db.delete(this.schema.messages).where(drizzleOrm.eq(this.schema.messages.id,t));}async deleteAllMessages(t){await this.db.delete(this.schema.messages).where(drizzleOrm.eq(this.schema.messages.conversationId,t));}async countMessages(t){let[{count:e}]=await this.db.select({count:drizzleOrm.sql`count(*)`}).from(this.schema.messages).where(drizzleOrm.eq(this.schema.messages.conversationId,t));return Number(e)}async getLastMessage(t){let[e]=await this.db.select().from(this.schema.messages).where(drizzleOrm.eq(this.schema.messages.conversationId,t)).orderBy(drizzleOrm.desc(this.schema.messages.timestamp)).limit(1);return e||null}async searchMessages(t,e){return await this.db.select().from(this.schema.messages).where(drizzleOrm.and(drizzleOrm.eq(this.schema.messages.conversationId,t),drizzleOrm.like(this.schema.messages.content,`%${e}%`))).orderBy(drizzleOrm.asc(this.schema.messages.timestamp))}async updateConversationMetadata(t,e){await this.db.update(this.schema.conversations).set({metadata:e,updatedAt:new Date}).where(drizzleOrm.eq(this.schema.conversations.id,t));}async getConversationMetadata(t){let[e]=await this.db.select({metadata:this.schema.conversations.metadata}).from(this.schema.conversations).where(drizzleOrm.eq(this.schema.conversations.id,t));return e?.metadata||null}async deleteConversationMetadata(t,e){let s=await this.getConversationMetadata(t);if(s){for(let a of e)delete s[a];await this.updateConversationMetadata(t,s);}}async userExists(t){let[e]=await this.db.select({id:this.schema.conversations.id}).from(this.schema.conversations).where(drizzleOrm.eq(this.schema.conversations.userId,t)).limit(1);return !!e}async deleteUser(t){await this.deleteAllConversations(t);}async exportConversation(t){let e=await this.getConversation(t);if(!e)throw new Error(`Conversation ${t} not found`);let s=await this.getMessages(t);return {conversation:e,messages:s,exportedAt:new Date}}async importConversation(t,e){let s=await this.createConversation(t,e.conversation.metadata);return await this.db.update(this.schema.conversations).set({title:e.conversation.title,createdAt:e.conversation.createdAt}).where(drizzleOrm.eq(this.schema.conversations.id,s)),await this.saveManyMessages(s,e.messages),s}};var P=class{constructor(t){this.adapter=t;}async connect(){await this.adapter.connect();}async disconnect(){await this.adapter.disconnect();}async healthCheck(){return await this.adapter.healthCheck()}async purge(){await this.adapter.purge();}async create(t,e){return await this.adapter.createConversation(t,{systemPrompt:e})}async getConversation(t){return await this.adapter.getConversation(t)}async listConversations(t,e,s){return await this.adapter.listConversations(t,e,s)}async updateConversation(t,e){await this.adapter.updateConversation(t,e);}async deleteConversation(t){await this.adapter.deleteConversation(t);}async deleteAllConversations(t){await this.adapter.deleteAllConversations(t);}async countConversations(t){return await this.adapter.countConversations(t)}async conversationExists(t){return await this.adapter.conversationExists(t)}async searchConversations(t,e){return await this.adapter.searchConversations(t,e)}async addMessage(t,e){await this.adapter.saveMessage(t,e);}async addManyMessages(t,e){await this.adapter.saveManyMessages(t,e);}async getMessage(t){return await this.adapter.getMessage(t)}async getConversationHistory(t,e,s){return await this.adapter.getMessages(t,e,s)}async getMessagesByRole(t,e){return await this.adapter.getMessagesByRole(t,e)}async updateMessage(t,e){await this.adapter.updateMessage(t,e);}async deleteMessage(t){await this.adapter.deleteMessage(t);}async deleteAllMessages(t){await this.adapter.deleteAllMessages(t);}async countMessages(t){return await this.adapter.countMessages(t)}async getLastMessage(t){return await this.adapter.getLastMessage(t)}async searchMessages(t,e){return await this.adapter.searchMessages(t,e)}async updateConversationMetadata(t,e){await this.adapter.updateConversationMetadata(t,e);}async getConversationMetadata(t){return await this.adapter.getConversationMetadata(t)}async deleteConversationMetadata(t,e){await this.adapter.deleteConversationMetadata(t,e);}async userExists(t){return await this.adapter.userExists(t)}async deleteUser(t){await this.adapter.deleteUser(t);}async exportConversation(t){return await this.adapter.exportConversation(t)}async importConversation(t,e){return await this.adapter.importConversation(t,e)}};var te=class{conversations=new Map;messages=new Map;async connect(){}async disconnect(){}async healthCheck(){return true}async purge(){this.conversations.clear(),this.messages.clear();}async createConversation(t,e){let s=`conv_${Date.now()}_${Math.random().toString(36).substr(2,9)}`,a={id:s,userId:t,metadata:e||{},createdAt:new Date,updatedAt:new Date};return this.conversations.set(s,a),this.messages.set(s,[]),s}async getConversation(t){return this.conversations.get(t)||null}async listConversations(t,e=50,s=0){return Array.from(this.conversations.values()).filter(a=>a.userId===t).sort((a,r)=>r.updatedAt.getTime()-a.updatedAt.getTime()).slice(s,s+e)}async updateConversation(t,e){let s=this.conversations.get(t);s&&Object.assign(s,e,{updatedAt:new Date});}async deleteConversation(t){this.conversations.delete(t),this.messages.delete(t);}async deleteAllConversations(t){for(let[e,s]of this.conversations)s.userId===t&&(this.conversations.delete(e),this.messages.delete(e));}async countConversations(t){return Array.from(this.conversations.values()).filter(e=>e.userId===t).length}async conversationExists(t){return this.conversations.has(t)}async searchConversations(t,e){let s=e.toLowerCase();return Array.from(this.conversations.values()).filter(a=>a.userId===t&&a.title?.toLowerCase().includes(s))}async saveMessage(t,e){let s=this.messages.get(t)||[];s.push(e),this.messages.set(t,s);let a=this.conversations.get(t);a&&(a.updatedAt=new Date);}async saveManyMessages(t,e){for(let s of e)await this.saveMessage(t,s);}async getMessage(t){for(let e of this.messages.values()){let s=e.find(a=>a.id===t);if(s)return s}return null}async getMessages(t,e=100,s=0){return (this.messages.get(t)||[]).slice(s,s+e)}async getMessagesByRole(t,e){return (this.messages.get(t)||[]).filter(a=>a.role===e)}async updateMessage(t,e){for(let s of this.messages.values()){let a=s.findIndex(r=>r.id===t);if(a!==-1){s[a]={...s[a],...e};break}}}async deleteMessage(t){for(let[e,s]of this.messages){let a=s.findIndex(r=>r.id===t);if(a!==-1){s.splice(a,1),this.messages.set(e,s);break}}}async deleteAllMessages(t){this.messages.set(t,[]);}async countMessages(t){return (this.messages.get(t)||[]).length}async getLastMessage(t){let e=this.messages.get(t)||[];return e[e.length-1]||null}async searchMessages(t,e){let s=e.toLowerCase();return (this.messages.get(t)||[]).filter(r=>typeof r.content=="string"&&r.content.toLowerCase().includes(s))}async updateConversationMetadata(t,e){let s=this.conversations.get(t);s&&(s.metadata={...s.metadata,...e},s.updatedAt=new Date);}async getConversationMetadata(t){return this.conversations.get(t)?.metadata||null}async deleteConversationMetadata(t,e){let s=this.conversations.get(t);if(s?.metadata){for(let a of e)delete s.metadata[a];s.updatedAt=new Date;}}async userExists(t){return Array.from(this.conversations.values()).some(e=>e.userId===t)}async deleteUser(t){await this.deleteAllConversations(t);}async exportConversation(t){let e=await this.getConversation(t);if(!e)throw new Error(`Conversation ${t} not found`);let s=await this.getMessages(t);return {conversation:e,messages:s,exportedAt:new Date}}async importConversation(t,e){let s=await this.createConversation(t,e.conversation.metadata),a=this.conversations.get(s);return a.title=e.conversation.title,a.createdAt=e.conversation.createdAt,await this.saveManyMessages(s,e.messages),s}};var se=class{constructor(t){this.prisma=t;}async connect(){await this.prisma.$connect();}async disconnect(){await this.prisma.$disconnect();}async healthCheck(){try{return await this.prisma.$queryRaw`SELECT 1`,!0}catch{return false}}async purge(){await this.prisma.message.deleteMany(),await this.prisma.conversation.deleteMany();}async createConversation(t,e){return (await this.prisma.conversation.create({data:{userId:t,metadata:e||{}}})).id}async getConversation(t){return await this.prisma.conversation.findUnique({where:{id:t}})}async listConversations(t,e=50,s=0){return await this.prisma.conversation.findMany({where:{userId:t},orderBy:{updatedAt:"desc"},take:e,skip:s})}async updateConversation(t,e){await this.prisma.conversation.update({where:{id:t},data:{...e,updatedAt:new Date}});}async deleteConversation(t){await this.prisma.conversation.delete({where:{id:t}});}async deleteAllConversations(t){let e=await this.prisma.conversation.findMany({where:{userId:t},select:{id:true}});await this.prisma.message.deleteMany({where:{conversationId:{in:e.map(s=>s.id)}}}),await this.prisma.conversation.deleteMany({where:{userId:t}});}async countConversations(t){return await this.prisma.conversation.count({where:{userId:t}})}async conversationExists(t){return await this.prisma.conversation.count({where:{id:t}})>0}async searchConversations(t,e){return await this.prisma.conversation.findMany({where:{userId:t,title:{contains:e,mode:"insensitive"}},orderBy:{updatedAt:"desc"}})}toMessage(t){return {id:t.id,role:t.role,content:t.content,toolCalls:t.toolCalls,toolResults:t.toolResults,metadata:t.metadata,timestamp:t.timestamp}}async saveMessage(t,e){await this.prisma.message.create({data:{id:e.id,conversationId:t,role:e.role,content:e.content,toolCalls:e.toolCalls||[],toolResults:e.toolResults||[],metadata:e.metadata||{},timestamp:e.timestamp||Date.now()}}),await this.prisma.conversation.update({where:{id:t},data:{updatedAt:new Date}});}async saveManyMessages(t,e){e.length!==0&&(await this.prisma.message.createMany({data:e.map(s=>({id:s.id,conversationId:t,role:s.role,content:s.content,toolCalls:s.toolCalls||[],toolResults:s.toolResults||[],metadata:s.metadata||{},timestamp:s.timestamp||Date.now()}))}),await this.prisma.conversation.update({where:{id:t},data:{updatedAt:new Date}}));}async getMessage(t){let e=await this.prisma.message.findUnique({where:{id:t}});return e?this.toMessage(e):null}async getMessages(t,e=100,s=0){return (await this.prisma.message.findMany({where:{conversationId:t},orderBy:{timestamp:"asc"},take:e,skip:s})).map(this.toMessage)}async getMessagesByRole(t,e){return (await this.prisma.message.findMany({where:{conversationId:t,role:e},orderBy:{timestamp:"asc"}})).map(this.toMessage)}async updateMessage(t,e){await this.prisma.message.update({where:{id:t},data:e});}async deleteMessage(t){await this.prisma.message.delete({where:{id:t}});}async deleteAllMessages(t){await this.prisma.message.deleteMany({where:{conversationId:t}});}async countMessages(t){return await this.prisma.message.count({where:{conversationId:t}})}async getLastMessage(t){let e=await this.prisma.message.findFirst({where:{conversationId:t},orderBy:{timestamp:"desc"}});return e?this.toMessage(e):null}async searchMessages(t,e){return (await this.prisma.message.findMany({where:{conversationId:t,content:{contains:e,mode:"insensitive"}},orderBy:{timestamp:"asc"}})).map(this.toMessage)}async updateConversationMetadata(t,e){await this.prisma.conversation.update({where:{id:t},data:{metadata:e,updatedAt:new Date}});}async getConversationMetadata(t){return (await this.prisma.conversation.findUnique({where:{id:t},select:{metadata:true}}))?.metadata||null}async deleteConversationMetadata(t,e){let s=await this.getConversationMetadata(t);if(s){for(let a of e)delete s[a];await this.updateConversationMetadata(t,s);}}async userExists(t){return await this.prisma.conversation.count({where:{userId:t}})>0}async deleteUser(t){await this.deleteAllConversations(t);}async exportConversation(t){let e=await this.getConversation(t);if(!e)throw new Error(`Conversation ${t} not found`);let s=await this.getMessages(t);return {conversation:e,messages:s,exportedAt:new Date}}async importConversation(t,e){let s=await this.createConversation(t,e.conversation.metadata);return await this.prisma.conversation.update({where:{id:s},data:{title:e.conversation.title,createdAt:e.conversation.createdAt}}),await this.saveManyMessages(s,e.messages),s}};var b=class extends pe__default.default{constructor(e){super();this.client=e;}threads=new Map;async createThread(e,s,a,r){let n=T("thread"),i=Date.now(),l={id:n,userId:e,messages:[],config:s,metadata:a||{},tags:r?.tags||[],title:r?.title,createdAt:i,updatedAt:i,lastActiveAt:i,status:"active",priority:r?.priority||"normal",messageCount:0,errorCount:0};return this.threads.set(n,l),this.emit("event",{type:"thread-created",threadId:n,thread:l}),n}async forkThread(e,s){let a=this.requireThread(e),r=[...a.messages];if(s){let l=r.findIndex(c=>c.id===s);l!==-1&&(r=r.slice(0,l+1));}let n=await this.createThread(a.userId,a.config,{...a.metadata}),i=this.requireThread(n);return i.messages=r.map(l=>({...l})),i.messageCount=r.length,i.tags=[...a.tags],i.title=a.title?`Fork of ${a.title}`:void 0,this.emit("event",{type:"thread-forked",threadId:n,parentThreadId:e}),n}async mergeThread(e,s){let a=this.requireThread(e),r=this.requireThread(s),n=[...a.messages,...r.messages].sort((i,l)=>(i.timestamp||0)-(l.timestamp||0));a.messages=n,a.messageCount=n.length,a.updatedAt=Date.now(),this.emit("event",{type:"thread-merged",threadId:e,sourceThreadId:s});}getThread(e){return this.threads.get(e)||null}threadExists(e){return this.threads.has(e)}getUserThreads(e,s){let a=Array.from(this.threads.values()).filter(i=>i.userId===e);a=this.sortThreads(a,s?.sort);let r=s?.offset||0,n=s?.limit??a.length;return a.slice(r,r+n)}filterThreads(e,s,a){let r=Array.from(this.threads.values()).filter(l=>l.userId===e);if(s.status){let l=Array.isArray(s.status)?s.status:[s.status];r=r.filter(c=>l.includes(c.status));}if(s.priority&&(r=r.filter(l=>l.priority===s.priority)),s.tags?.length&&(r=r.filter(l=>s.tags.every(c=>l.tags.includes(c)))),s.createdAfter!==void 0&&(r=r.filter(l=>l.createdAt>=s.createdAfter)),s.createdBefore!==void 0&&(r=r.filter(l=>l.createdAt<=s.createdBefore)),s.updatedAfter!==void 0&&(r=r.filter(l=>l.updatedAt>=s.updatedAfter)),s.search){let l=s.search.toLowerCase();r=r.filter(c=>c.title?.toLowerCase().includes(l)||c.messages.some(d=>typeof d.content=="string"&&d.content.toLowerCase().includes(l)));}r=this.sortThreads(r,a?.sort);let n=a?.offset||0,i=a?.limit??r.length;return r.slice(n,n+i)}countThreads(e,s){return this.filterThreads(e,s||{}).length}updateThreadStatus(e,s){let a=this.requireThread(e),r=a.status;a.status=s,a.updatedAt=Date.now(),this.emit("event",{type:"status-changed",threadId:e,status:s,previousStatus:r});}updateThreadPriority(e,s){let a=this.requireThread(e);a.priority=s,a.updatedAt=Date.now(),this.emit("event",{type:"priority-changed",threadId:e,priority:s});}updateThreadMetadata(e,s){let a=this.requireThread(e);a.metadata={...a.metadata,...s},a.updatedAt=Date.now(),this.emit("event",{type:"metadata-updated",threadId:e,metadata:a.metadata});}setThreadTitle(e,s){let a=this.requireThread(e);a.title=s,a.updatedAt=Date.now(),this.emit("event",{type:"title-updated",threadId:e,title:s});}updateThreadConfig(e,s){let a=this.requireThread(e);a.config={...a.config,...s},a.updatedAt=Date.now(),this.emit("event",{type:"config-updated",threadId:e,config:a.config});}addTags(e,s){let a=this.requireThread(e);a.tags=[...new Set([...a.tags,...s])],a.updatedAt=Date.now(),this.emit("event",{type:"tags-updated",threadId:e,tags:a.tags});}removeTags(e,s){let a=this.requireThread(e);a.tags=a.tags.filter(r=>!s.includes(r)),a.updatedAt=Date.now(),this.emit("event",{type:"tags-updated",threadId:e,tags:a.tags});}setTags(e,s){let a=this.requireThread(e);a.tags=[...new Set(s)],a.updatedAt=Date.now(),this.emit("event",{type:"tags-updated",threadId:e,tags:a.tags});}async addMessage(e,s){let a=this.requireThread(e),r=Date.now(),n={...s,id:s.id||T("msg"),timestamp:s.timestamp||r};a.messages.push(n),a.messageCount=a.messages.length,a.updatedAt=r,a.lastActiveAt=r,this.emit("event",{type:"message-added",threadId:e,message:n});}async addManyMessages(e,s){for(let a of s)await this.addMessage(e,a);}getMessage(e,s){return this.requireThread(e).messages.find(r=>r.id===s)||null}getMessages(e,s){let r=[...this.requireThread(e).messages];s?.role&&(r=r.filter(l=>l.role===s.role));let n=s?.offset||0,i=s?.limit??r.length;return r.slice(n,n+i)}getLastMessage(e){let s=this.requireThread(e);return s.messages[s.messages.length-1]||null}updateMessage(e,s,a){let r=this.requireThread(e),n=r.messages.findIndex(i=>i.id===s);if(n===-1)throw new Error(`Message ${s} not found in thread ${e}`);r.messages[n]={...r.messages[n],...a},r.updatedAt=Date.now(),this.emit("event",{type:"message-updated",threadId:e,messageId:s,updates:a});}deleteMessage(e,s){let a=this.requireThread(e),r=a.messages.findIndex(n=>n.id===s);if(r===-1)throw new Error(`Message ${s} not found in thread ${e}`);a.messages.splice(r,1),a.messageCount=a.messages.length,a.updatedAt=Date.now(),this.emit("event",{type:"message-deleted",threadId:e,messageId:s});}searchMessages(e,s){let a=this.requireThread(e),r=s.toLowerCase();return a.messages.filter(n=>typeof n.content=="string"&&n.content.toLowerCase().includes(r))}clearThread(e){let s=this.requireThread(e);s.messages=[],s.messageCount=0,s.updatedAt=Date.now(),this.emit("event",{type:"thread-cleared",threadId:e});}trimThread(e,s){let a=this.requireThread(e);a.messages.length>s&&(a.messages=a.messages.slice(-s),a.messageCount=a.messages.length,a.updatedAt=Date.now());}archiveThread(e){this.updateThreadStatus(e,"archived"),this.emit("event",{type:"thread-archived",threadId:e});}restoreThread(e){this.updateThreadStatus(e,"active"),this.emit("event",{type:"thread-restored",threadId:e});}pauseThread(e){this.updateThreadStatus(e,"paused");}resumeThread(e){this.updateThreadStatus(e,"active");}completeThread(e){this.updateThreadStatus(e,"completed");}markThreadError(e,s){let a=this.requireThread(e);a.errorCount+=1,a.lastError=s.message,this.updateThreadStatus(e,"error"),this.emit("event",{type:"error",threadId:e,error:s});}deleteThread(e){this.threads.delete(e),this.emit("event",{type:"thread-deleted",threadId:e});}deleteAllThreads(e){for(let[s,a]of this.threads)a.userId===e&&(this.threads.delete(s),this.emit("event",{type:"thread-deleted",threadId:s}));}getStats(e){let s=e?Array.from(this.threads.values()).filter(l=>l.userId===e):Array.from(this.threads.values()),a=s.reduce((l,c)=>l+c.messageCount,0),r=s.reduce((l,c)=>l+(c.tokenCount||0),0),n=s.map(l=>l.createdAt),i={total:s.length,active:s.filter(l=>l.status==="active").length,paused:s.filter(l=>l.status==="paused").length,completed:s.filter(l=>l.status==="completed").length,error:s.filter(l=>l.status==="error").length,archived:s.filter(l=>l.status==="archived").length,totalMessages:a,totalTokens:r,averageMessagesPerThread:s.length?a/s.length:0,oldestThread:n.length?Math.min(...n):void 0,newestThread:n.length?Math.max(...n):void 0};return this.emit("event",{type:"pool-stats",stats:i}),i}exportThread(e){let s=this.requireThread(e);return {thread:{...s},messages:s.messages.map(a=>({...a})),exportedAt:Date.now(),version:"1.0"}}importThread(e,s){let a=T("thread"),r=Date.now(),n={...s.thread,id:a,userId:e,messages:s.messages.map(i=>({...i})),createdAt:r,updatedAt:r,lastActiveAt:r};return this.threads.set(a,n),this.emit("event",{type:"thread-created",threadId:a,thread:n}),a}cleanup(e=36e5){let s=Date.now(),a=[];for(let[r,n]of this.threads)n.status!=="active"&&s-n.updatedAt>e&&a.push(r);for(let r of a)this.threads.delete(r);this.emit("event",{type:"cleanup",deletedCount:a.length});}requireThread(e){let s=this.threads.get(e);if(!s)throw new Error(`Thread ${e} not found`);return s}sortThreads(e,s){let a=s?.field||"updatedAt",r=s?.direction==="asc"?1:-1;return [...e].sort((n,i)=>{let l=n[a],c=i[a];return r*(l-c)})}};var ae=class{constructor(t){this.client=t;}managers=new Map;getManager(t){return this.managers.has(t)||this.managers.set(t,new b(this.client)),this.managers.get(t)}hasManager(t){return this.managers.has(t)}removeManager(t){let e=this.managers.get(t);e&&(e.removeAllListeners(),this.managers.delete(t));}listUsers(){return Array.from(this.managers.keys())}managerCount(){return this.managers.size}getAllThreads(){let t=[];for(let e of this.managers.values())t.push(...Array.from(e.threads.values()));return t}getAllActiveThreads(){return this.getAllThreads().filter(t=>t.status==="active")}findThreads(t,e){let s=[];for(let[l,c]of this.managers)s.push(...c.filterThreads(l,t,e));let a=e?.sort?.field||"updatedAt",r=e?.sort?.direction==="asc"?1:-1;s.sort((l,c)=>r*(l[a]-c[a]));let n=e?.offset||0,i=e?.limit??s.length;return s.slice(n,n+i)}findThread(t){for(let e of this.managers.values()){let s=e.getThread(t);if(s)return s}return null}findThreadOwner(t){for(let[e,s]of this.managers)if(s.threadExists(t))return e;return null}getGlobalStats(){let t=this.getAllThreads(),e=t.reduce((r,n)=>r+n.messageCount,0),s=t.reduce((r,n)=>r+(n.tokenCount||0),0),a=t.map(r=>r.createdAt);return {userCount:this.managers.size,total:t.length,active:t.filter(r=>r.status==="active").length,paused:t.filter(r=>r.status==="paused").length,completed:t.filter(r=>r.status==="completed").length,error:t.filter(r=>r.status==="error").length,archived:t.filter(r=>r.status==="archived").length,totalMessages:e,totalTokens:s,averageMessagesPerThread:t.length?e/t.length:0,oldestThread:a.length?Math.min(...a):void 0,newestThread:a.length?Math.max(...a):void 0}}getUserStats(){let t={};for(let[e,s]of this.managers)t[e]=s.getStats(e);return t}totalThreadCount(){let t=0;for(let e of this.managers.values())t+=e.threads.size;return t}cleanupAll(t=36e5){for(let e of this.managers.values())e.cleanup(t);for(let[e,s]of this.managers)s.threads.size===0&&(s.removeAllListeners(),this.managers.delete(e));}archiveStale(t=864e5){let e=Date.now(),s=0;for(let a of this.managers.values())for(let r of a.threads.values())(r.status==="completed"||r.status==="error")&&e-r.updatedAt>t&&(a.archiveThread(r.id),s++);return s}deleteUser(t){let e=this.managers.get(t);e&&(e.deleteAllThreads(t),e.removeAllListeners(),this.managers.delete(t));}purge(){for(let[t,e]of this.managers)e.deleteAllThreads(t),e.removeAllListeners();this.managers.clear();}exportThread(t){for(let e of this.managers.values())if(e.threadExists(t))return e.exportThread(t);return null}importThread(t,e){return this.getManager(t).importThread(t,e)}exportUserThreads(t){let e=this.managers.get(t);return e?Array.from(e.threads.keys()).map(s=>e.exportThread(s)):[]}importUserThreads(t,e){return e.map(s=>this.importThread(t,s))}};var re=class o{mode;cloudConfig;providerCallback;cacheManager;databaseManager;threadManager;queue;mutex;defaultRetryConfig;constructor(t){this.mode=t.mode,this.mutex=new asyncMutex.Mutex;let e=t.rateLimit||{};if(this.queue=new ge__default.default({concurrency:e.maxConcurrent||100,interval:e.interval||1e3,intervalCap:e.intervalCap||100,timeout:3e4}),this.defaultRetryConfig={maxAttempts:t.retry?.maxAttempts||3,initialDelay:t.retry?.initialDelay||1e3,maxDelay:t.retry?.maxDelay||1e4,backoffMultiplier:t.retry?.backoffMultiplier||2},t.mode==="cloud")this.cloudConfig=t;else if(this.providerCallback=t.provider,t.cache&&(this.cacheManager=new S(t.cache)),t.database&&(this.databaseManager=new P(t.database)),t.threads?.enabled&&!this.providerCallback)throw new y("Provider callback required for thread management","INVALID_CONFIG")}async chat(t){let{messages:e,...s}=t,a=j(e);if(this.validateConfig(s),this.cacheManager&&s.cache?.enabled!==false){let r=await this.cacheManager.getCachedResponse(a,s);if(r)return s.stream?this.createStreamingResponse(this.eventsToGenerator(r)):this.eventsToResponse(r)}return this.queue.add(async()=>this.executeChat(a,s))}async executeChat(t,e){let s={...this.defaultRetryConfig,...e.cache};return z(async()=>this.mode==="cloud"?this.executeCloudChat(t,e):this.executeSelfManagedChat(t,e),{...s,onRetry:(a,r)=>{console.warn(`[PaprFlare] Retry attempt ${a}/${s.maxAttempts}:`,r.message);}})}async executeCloudChat(t,e){let s=await fetch(`${this.cloudConfig.baseURL||"https://api.paprflare.in"}/v1/chat`,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${this.cloudConfig.apiKey}`},body:JSON.stringify({messages:t,...e})});if(!s.ok)throw new y(`Cloud API error: ${s.statusText}`,"CLOUD_API_ERROR",s.status);if(e.stream){let a=this.parseCloudStream(s.body);return this.createStreamingResponse(a)}else return await s.json()}async executeSelfManagedChat(t,e){if(!this.providerCallback)throw new y("Provider callback not configured","INVALID_CONFIG");if(e.output?.schema)return this.executeStructuredOutput(t,e);let s=this.providerCallback(t,e);if(e.stream){let a;if(this.cacheManager&&e.cache?.enabled!==false){let r=[],n=this.cacheStream(s,r);a=this.withFinally(n,()=>this.cacheManager.cacheResponse(t,e,r));}else a=s;return this.createStreamingResponse(a)}else {let a=await E(s);return this.cacheManager&&e.cache?.enabled!==false&&await this.cacheManager.cacheResponse(t,e,a),this.eventsToResponse(a)}}async executeStructuredOutput(t,e){let s=e.output.schema._def?.shape,a=typeof s=="function"?s():s,r=a?Object.entries(a).map(([p,g])=>{let f=g?._def?.typeName??g?.constructor?.name??"unknown";return ` - "${p}": ${f}`}).join(`
18
+ `):"(schema shape unavailable)",n={id:T("msg"),role:"system",content:`You are a JSON generator. You MUST respond with ONLY valid JSON that matches this exact schema:
19
19
  ${r}
20
20
 
21
21
  Rules:
@@ -24,19 +24,19 @@ Rules:
24
24
  3. NO markdown code blocks or formatting
25
25
  4. NO comments in the JSON
26
26
  5. Return ONLY the raw JSON object
27
- 6. The JSON must be parseable and valid`,timestamp:Date.now()},l=e[e.length-1],i=[n,...e.slice(0,-1),{...l,content:`${l?.content}
27
+ 6. The JSON must be parseable and valid`,timestamp:Date.now()},i=t[t.length-1],l=[n,...t.slice(0,-1),{...i,content:`${i?.content}
28
28
 
29
- CRITICAL: Your response must be ONLY valid JSON containing ALL of these fields: ${a?Object.keys(a).join(", "):"all required fields"}. Start directly with { and end with }. No other text.`}],c=this.providerCallback(i,{...t,stream:false,temperature:.1}),d=await A(c),m=d.filter(g=>g.type==="text-delta").map(g=>g.type==="text-delta"?g.delta:"").join(""),h=this.extractJSON(m);try{let g=JSON.parse(h),y=typeof a?.parse=="function"?a.parse(g):g,C=d.find(M=>M.type==="done");return {message:C&&C.type==="done"?{...C.finalMessage,content:JSON.stringify(y,null,2)}:{id:w("msg"),role:"assistant",content:JSON.stringify(y,null,2),timestamp:Date.now()},usage:d.find(M=>M.type==="usage"&&"usage"in M)?.usage}}catch(g){throw console.error(`
30
- [Structured Output Error]`),console.error("Raw response:",m),console.error("Extracted JSON attempt:",h.substring(0,500)),console.error("Parse error:",g.message),new p(`Failed to parse structured output. The model returned: "${m.substring(0,100)}..."
29
+ CRITICAL: Your response must be ONLY valid JSON containing ALL of these fields: ${a?Object.keys(a).join(", "):"all required fields"}. Start directly with { and end with }. No other text.`}],c=this.providerCallback(l,{...e,stream:false,temperature:.1}),d=await E(c),h=d.filter(p=>p.type==="text-delta").map(p=>p.type==="text-delta"?p.delta:"").join(""),m=this.extractJSON(h);try{let p=JSON.parse(m),g=typeof a?.parse=="function"?a.parse(p):p,f=d.find(x=>x.type==="done");return {message:f&&f.type==="done"?{...f.finalMessage,content:JSON.stringify(g,null,2)}:{id:T("msg"),role:"assistant",content:JSON.stringify(g,null,2),timestamp:Date.now()},usage:d.find(x=>x.type==="usage"&&"usage"in x)?.usage}}catch(p){throw console.error(`
30
+ [Structured Output Error]`),console.error("Raw response:",h),console.error("Extracted JSON attempt:",m.substring(0,500)),console.error("Parse error:",p.message),new y(`Failed to parse structured output. The model returned: "${h.substring(0,100)}..."
31
31
 
32
32
  Please ensure:
33
33
  1. The model supports JSON output
34
34
  2. Try using a model like GPT-4 or Claude
35
35
  3. For list output, wrap in object: { items: [...] }
36
36
 
37
- Parse error: ${g.message}`,"VALIDATION_ERROR",400,g)}}extractJSON(e){let t=e.replace(/```json\s*/gi,"").replace(/```\s*/g,""),s=t.match(/\{(?:[^{}]|\{(?:[^{}]|\{[^{}]*\})*\})*\}/),a=t.match(/\[(?:[^\[\]]|\[(?:[^\[\]]|\[[^\[\]]*\])*\])*\]/);if(s)return s[0].trim();if(a)return a[0].trim();let r=t.split(`
38
- `),n=[],l=false,i=0;for(let c of r){let d=c.trim();if(d.startsWith("{")||d.startsWith("[")){if(l=true,n=[c],i=(c.match(/\{/g)||[]).length-(c.match(/\}/g)||[]).length,i+=(c.match(/\[/g)||[]).length-(c.match(/\]/g)||[]).length,i===0)return c.trim();continue}if(l&&(n.push(c),i+=(c.match(/\{/g)||[]).length-(c.match(/\}/g)||[]).length,i+=(c.match(/\[/g)||[]).length-(c.match(/\]/g)||[]).length,i===0))return n.join(`
39
- `).trim()}return t.trim()}createStreamingResponse(e){return {stream:e,toReadableStream:()=>k(e),pipeToResponse:async t=>{await j(e,t);},mergeStreams:(...t)=>F(e,...t),toUIStream:()=>b(e),process:t=>z(e,t),toText:()=>W(e),toConsole:()=>H(e),toResponse:t=>V(e,t)}}async*withFinally(e,t){try{yield*e;}finally{await t();}}async*parseCloudStream(e){let t=e.getReader(),s=new TextDecoder;try{for(;;){let{done:a,value:r}=await t.read();if(a)break;let l=s.decode(r,{stream:!0}).split(`
40
- `);for(let i of l)if(i.startsWith("data: ")){let c=i.slice(6);if(c==="[DONE]")break;try{yield JSON.parse(c);}catch(d){console.error("Failed to parse event:",d);}}}}finally{t.releaseLock();}}async*cacheStream(e,t){for await(let s of e)t.push(s),yield s;}async*eventsToGenerator(e){for(let t of e)yield t;}eventsToResponse(e){let t=e.find(a=>a.type==="done"),s=e.find(a=>a.type==="usage");if(!t||t.type!=="done")throw new p("No completion event found in response","INVALID_RESPONSE");return {message:t.finalMessage,usage:s&&s.type==="usage"?s.usage:void 0}}validateConfig(e){if(e.temperature!==void 0&&(e.temperature<0||e.temperature>2))throw new p("Temperature must be between 0 and 2","VALIDATION_ERROR",400);if(e.maxTokens!==void 0&&e.maxTokens<1)throw new p("Max tokens must be greater than 0","VALIDATION_ERROR",400);if(e.output?.schema&&e.stream)throw new p("Structured output requires stream: false","VALIDATION_ERROR",400)}get database(){if(this.mode==="cloud")throw new p("Database is not available in cloud mode","INVALID_MODE");return this.databaseManager}get threads(){if(this.mode==="cloud")throw new p("Threads are not available in cloud mode","INVALID_MODE");if(!this.threadManager){if(!this.providerCallback)throw new p("Provider callback required for thread management","INVALID_CONFIG");let e=new o({mode:"self-managed",provider:this.providerCallback});this.threadManager=new T(e);}return this.threadManager}getQueueStats(){return {size:this.queue.size,pending:this.queue.pending,concurrency:this.queue.concurrency}}async clearCache(){this.cacheManager&&await this.cacheManager.clearAll();}};function It(o){return {schema:o,mode:"json"}}var U=class{client;defaultModel;constructor(e){this.client=new ae__default.default({apiKey:e.apiKey,baseURL:e.baseURL,timeout:e.timeout||3e4,maxRetries:e.maxRetries||3,defaultHeaders:e.headers}),this.defaultModel=e.model||"claude-3-5-sonnet-20241022";}createCallback(){return (e,t)=>this.streamChat(e,t)}async*streamChat(e,t){let s=new f;try{let a=e.find(d=>d.role==="system"),r=e.filter(d=>d.role!=="system"),n=this.client.messages.stream({model:t.model||this.defaultModel,messages:this.formatMessages(r),max_tokens:t.maxTokens||4096,temperature:t.temperature,top_p:t.topP,stop_sequences:t.stop,...a&&{system:a.content},...t.tools&&{tools:this.formatTools(t.tools)}}),l=null,i="";for await(let d of n){if(d.type==="content_block_start"&&d.content_block?.type==="tool_use"&&(l=d.content_block,i="",s.startToolCall(l.name,l.id)),d.type==="content_block_delta"&&(d.delta?.type==="text_delta"&&s.writeText(d.delta.text),d.delta?.type==="input_json_delta"&&(i+=d.delta.partial_json,s.writeToolCallDelta(d.delta.partial_json))),d.type==="content_block_stop"&&l){try{let m=JSON.parse(l.input?JSON.stringify(l.input):i||"{}");s.endToolCall(m);}catch{s.endToolCall({});}l=null,i="";}yield*s.flush();}let c=await n.finalMessage();c.usage&&s.writeUsage({promptTokens:c.usage.input_tokens,completionTokens:c.usage.output_tokens,totalTokens:c.usage.input_tokens+c.usage.output_tokens}),s.done(),yield*s.flush();}catch(a){throw a instanceof ae__default.default.APIError?new v(a.message,"anthropic",a.status):new v(`Anthropic provider error: ${a.message}`,"anthropic")}}formatMessages(e){return e.map(t=>{let s=[];if(t.content&&s.push({type:"text",text:t.content}),t.toolCalls)for(let a of t.toolCalls)s.push({type:"tool_use",id:a.id,name:a.name,input:a.arguments});if(t.toolResults)for(let a of t.toolResults)s.push({type:"tool_result",tool_use_id:a.toolCallId,content:JSON.stringify(a.result),...a.error&&{is_error:true}});return {role:t.role==="assistant"?"assistant":"user",content:s.length===1&&s[0].type==="text"?s[0].text:s}})}formatTools(e){return e?e.map(t=>({name:t.name,description:t.description,input_schema:{type:"object",properties:{},required:[]}})):[]}};function qt(o){return new U(o).createCallback()}var _=class{client;defaultModel;constructor(e){this.client=new generativeAi.GoogleGenerativeAI(e.apiKey),this.defaultModel=e.model||"gemini-1.5-flash";}createCallback(){return (e,t)=>this.streamChat(e,t)}async*streamChat(e,t){let s=new f;try{let a=e.find(h=>h.role==="system"),r=this.client.getGenerativeModel({model:t.model||this.defaultModel,...a&&{systemInstruction:a.content},generationConfig:{temperature:t.temperature,maxOutputTokens:t.maxTokens,topP:t.topP,stopSequences:t.stop}}),n=this.formatMessages(e);if(n.length===0)throw new v("No messages to send","google");let l=n[n.length-1],i=n.slice(0,-1),d=await r.startChat({history:i}).sendMessageStream(l.parts);for await(let h of d.stream){let g=h.text();g&&(s.writeText(g),yield*s.flush());let y=h.functionCalls();if(y)for(let C of y)s.startToolCall(C.name,C.name),s.endToolCall(C.args),yield*s.flush();}let m=await d.response;m.usageMetadata&&s.writeUsage({promptTokens:m.usageMetadata.promptTokenCount??0,completionTokens:m.usageMetadata.candidatesTokenCount??(m.usageMetadata.totalTokenCount??0)-(m.usageMetadata.promptTokenCount??0),totalTokens:m.usageMetadata.totalTokenCount??0}),s.done(),yield*s.flush();}catch(a){throw new v(`Google provider error: ${a.message}`,"google")}}formatMessages(e){return e.filter(t=>t.role!=="system").map(t=>({role:t.role==="assistant"?"model":"user",parts:[{text:t.content}]}))}formatTools(e){return e?e.map(t=>({name:t.name,description:t.description,parameters:{type:"object",properties:{},required:[]}})):[]}};function Kt(o){return new _(o).createCallback()}var N=class{client;defaultModel;constructor(e){this.client=new re__default.default({apiKey:e.apiKey,baseURL:e.baseURL,organization:e.organization,timeout:e.timeout||3e4,maxRetries:e.maxRetries||3,defaultHeaders:e.headers}),this.defaultModel=e.model||"gpt-4-turbo-preview";}createCallback(){return (e,t)=>this.streamChat(e,t)}async getFinalChatCompletion(e){let t=[...e].reverse().find(s=>s.usage!=null);return t?.usage?{usage:t.usage}:null}async*streamChat(e,t){let s=new f;try{let a=await this.client.chat.completions.create({model:t.model||this.defaultModel,messages:this.formatMessages(e),temperature:t.temperature,max_tokens:t.maxTokens,top_p:t.topP,frequency_penalty:t.frequencyPenalty,presence_penalty:t.presencePenalty,stop:t.stop,stream:!0,stream_options:{include_usage:!0},...t.tools&&{tools:this.formatTools(t.tools),tool_choice:t.toolChoice}}),r=null,n="",l=null,i=[];for await(let d of a){i.push(d);let m=d.choices[0]?.delta;if(m){if(m.content&&s.writeText(m.content),m.tool_calls)for(let h of m.tool_calls){let g=h.index;if(h.id){if(l&&n){try{let y=JSON.parse(n);s.endToolCall(y);}catch{}n="";}r=g,l=h,s.startToolCall(h.function?.name||"",h.id);}h.function?.arguments&&(n+=h.function.arguments,s.writeToolCallDelta(h.function.arguments));}if(d.choices[0]?.finish_reason&&l&&n)try{let h=JSON.parse(n);s.endToolCall(h);}catch{}yield*s.flush();}}let c=await this.getFinalChatCompletion(i);c?.usage&&s.writeUsage({promptTokens:c.usage.prompt_tokens,completionTokens:c.usage.completion_tokens,totalTokens:c.usage.total_tokens}),s.done(),yield*s.flush();}catch(a){throw a instanceof re__default.default.APIError?new v(a.message,"openai",a.status):new v(`OpenAI provider error: ${a.message}`,"openai")}}formatMessages(e){return e.map(t=>({role:t.role,content:t.content,...t.toolCalls&&{tool_calls:t.toolCalls.map(s=>({id:s.id,type:"function",function:{name:s.name,arguments:JSON.stringify(s.arguments)}}))},...t.toolResults&&t.role==="tool"&&{tool_call_id:t.toolResults[0]?.toolCallId}}))}formatTools(e){return e?e.map(t=>({type:"function",function:{name:t.name,description:t.description,parameters:{type:"object",properties:{},required:[]}}})):[]}};function Zt(o){return new N(o).createCallback()}var G=class{config;baseURL;constructor(e){this.config=e,this.baseURL=e.baseURL||"https://api.sarvam.ai/v1";}createCallback(){return (e,t)=>this.streamChat(e,t)}async*streamChat(e,t){let s=new f;try{let a=await fetch(`${this.baseURL}/chat/completions`,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${this.config.apiKey}`,...this.config.headers},body:JSON.stringify({model:t.model||this.config.model||"sarvam-m",messages:this.formatMessages(e),temperature:t.temperature,max_tokens:t.maxTokens,stream:!0})});if(!a.ok){let r=await a.json().catch(()=>({}));throw new v(r.error?.message||"Sarvam AI API error","sarvam",a.status)}yield*this.parseStream(a.body,s);}catch(a){throw a instanceof v?a:new v(`Sarvam provider error: ${a}`,"sarvam")}}async*parseStream(e,t){let s=e.getReader(),a=new TextDecoder,r="";try{for(;;){let{done:n,value:l}=await s.read();if(n)break;r+=a.decode(l,{stream:!0});let i=r.split(`
41
- `);r=i.pop()||"";for(let c of i){if(!c.trim()||!c.startsWith("data: "))continue;let d=c.slice(6);if(d==="[DONE]"){t.done(),yield*t.flush();return}try{let m=JSON.parse(d);if(m.choices?.[0]){let h=m.choices[0].delta;if(h?.content&&t.writeText(h.content),m.choices[0].finish_reason){t.done(),yield*t.flush();return}}m.usage&&t.writeUsage({promptTokens:m.usage.prompt_tokens||0,completionTokens:m.usage.completion_tokens||0,totalTokens:m.usage.total_tokens||0}),yield*t.flush();}catch(m){console.error("Failed to parse Sarvam chunk:",m);}}}}finally{s.releaseLock();}}formatMessages(e){return e.map(t=>({role:t.role,content:t.content}))}};function ss(o){return new G(o).createCallback()}exports.AnthropicProvider=U;exports.CacheManager=x;exports.DatabaseManager=P;exports.DrizzleAdapter=Q;exports.GoogleProvider=_;exports.MemoryAdapter=X;exports.MemoryCache=E;exports.OpenAIProvider=N;exports.PaprFlare=se;exports.PaprFlareError=p;exports.PrismaAdapter=ee;exports.ProviderError=v;exports.RateLimitError=B;exports.RedisCache=R;exports.SarvamProvider=G;exports.StreamWriter=f;exports.ThreadManager=T;exports.ThreadPool=te;exports.ValidationError=K;exports.batchStream=Ue;exports.chunk=Ce;exports.collectStream=A;exports.collectText=W;exports.createAnthropicProvider=qt;exports.createCacheKey=q;exports.createGoogleProvider=Kt;exports.createOpenAIProvider=Zt;exports.createSarvamProvider=ss;exports.createStreamWriter=ke;exports.createStreamableValue=qe;exports.createUIMessageStream=Le;exports.debounce=we;exports.deepMerge=L;exports.filterStream=Oe;exports.formatMessages=$;exports.generateId=w;exports.isPlainObject=S;exports.measureTime=xe;exports.mergeStreams=F;exports.parseSSEStream=Ee;exports.pipeToResponse=j;exports.processStream=z;exports.retry=J;exports.safeJsonParse=be;exports.sleep=ie;exports.streamToArray=Me;exports.streamToConsole=H;exports.structuredOutput=It;exports.takeStream=Ie;exports.throttle=Te;exports.toHTTPResponse=V;exports.toReadableStream=k;exports.toUIStream=b;exports.transformStream=De;//# sourceMappingURL=index.js.map
37
+ Parse error: ${p.message}`,"VALIDATION_ERROR",400,p)}}extractJSON(t){let e=t.replace(/```json\s*/gi,"").replace(/```\s*/g,""),s=e.match(/\{(?:[^{}]|\{(?:[^{}]|\{[^{}]*\})*\})*\}/),a=e.match(/\[(?:[^\[\]]|\[(?:[^\[\]]|\[[^\[\]]*\])*\])*\]/);if(s)return s[0].trim();if(a)return a[0].trim();let r=e.split(`
38
+ `),n=[],i=false,l=0;for(let c of r){let d=c.trim();if(d.startsWith("{")||d.startsWith("[")){if(i=true,n=[c],l=(c.match(/\{/g)||[]).length-(c.match(/\}/g)||[]).length,l+=(c.match(/\[/g)||[]).length-(c.match(/\]/g)||[]).length,l===0)return c.trim();continue}if(i&&(n.push(c),l+=(c.match(/\{/g)||[]).length-(c.match(/\}/g)||[]).length,l+=(c.match(/\[/g)||[]).length-(c.match(/\]/g)||[]).length,l===0))return n.join(`
39
+ `).trim()}return e.trim()}createStreamingResponse(t){return {stream:t,toReadableStream:()=>R(t),pipeToResponse:async e=>{await Z(t,e);},mergeStreams:(...e)=>F(t,...e),toUIStream:()=>M(t),process:e=>V(t,e),toText:()=>W(t),toConsole:()=>H(t),toResponse:e=>Y(t,e)}}async*withFinally(t,e){try{yield*t;}finally{await e();}}async*parseCloudStream(t){let e=t.getReader(),s=new TextDecoder;try{for(;;){let{done:a,value:r}=await e.read();if(a)break;let i=s.decode(r,{stream:!0}).split(`
40
+ `);for(let l of i)if(l.startsWith("data: ")){let c=l.slice(6);if(c==="[DONE]")break;try{yield JSON.parse(c);}catch(d){console.error("Failed to parse event:",d);}}}}finally{e.releaseLock();}}async*cacheStream(t,e){for await(let s of t)e.push(s),yield s;}async*eventsToGenerator(t){for(let e of t)yield e;}eventsToResponse(t){let e=t.find(a=>a.type==="done"),s=t.find(a=>a.type==="usage");if(!e||e.type!=="done")throw new y("No completion event found in response","INVALID_RESPONSE");return {message:e.finalMessage,usage:s&&s.type==="usage"?s.usage:void 0}}validateConfig(t){if(t.temperature!==void 0&&(t.temperature<0||t.temperature>2))throw new y("Temperature must be between 0 and 2","VALIDATION_ERROR",400);if(t.maxTokens!==void 0&&t.maxTokens<1)throw new y("Max tokens must be greater than 0","VALIDATION_ERROR",400);if(t.output?.schema&&t.stream)throw new y("Structured output requires stream: false","VALIDATION_ERROR",400)}get database(){if(this.mode==="cloud")throw new y("Database is not available in cloud mode","INVALID_MODE");return this.databaseManager}get threads(){if(this.mode==="cloud")throw new y("Threads are not available in cloud mode","INVALID_MODE");if(!this.threadManager){if(!this.providerCallback)throw new y("Provider callback required for thread management","INVALID_CONFIG");let t=new o({mode:"self-managed",provider:this.providerCallback});this.threadManager=new b(t);}return this.threadManager}getQueueStats(){return {size:this.queue.size,pending:this.queue.pending,concurrency:this.queue.concurrency}}async clearCache(){this.cacheManager&&await this.cacheManager.clearAll();}};function Nt(o){return {schema:o,mode:"json"}}var U=class{client;defaultModel;constructor(t){this.client=new ne__default.default({apiKey:t.apiKey,baseURL:t.baseURL,timeout:t.timeout||3e4,maxRetries:t.maxRetries||3,defaultHeaders:t.headers}),this.defaultModel=t.model||"claude-3-5-sonnet-20241022";}createCallback(){return (t,e)=>this.streamChat(t,e)}async*streamChat(t,e){let s=new v;try{let a=t.find(d=>d.role==="system"),r=t.filter(d=>d.role!=="system"),n=this.client.messages.stream({model:e.model||this.defaultModel,messages:this.formatMessages(r),max_tokens:e.maxTokens||4096,temperature:e.temperature,top_p:e.topP,stop_sequences:e.stop,...a&&{system:a.content},...e.tools&&e.tools.length>0&&{tools:this.formatTools(e.tools)},...e.toolChoice&&e.toolChoice!=="auto"&&{tool_choice:this.formatToolChoice(e.toolChoice)}}),i=null,l="";for await(let d of n){if(d.type==="content_block_start"&&d.content_block?.type==="tool_use"&&(i=d.content_block,l="",s.startToolCall(i.name,i.id)),d.type==="content_block_delta"&&(d.delta?.type==="text_delta"&&s.writeText(d.delta.text),d.delta?.type==="input_json_delta"&&(l+=d.delta.partial_json,s.writeToolCallDelta(d.delta.partial_json))),d.type==="content_block_stop"&&i){try{let h=JSON.parse(i.input?JSON.stringify(i.input):l||"{}");s.endToolCall(h);}catch(h){console.error("Failed to parse tool arguments:",h),s.endToolCall({});}i=null,l="";}yield*s.flush();}let c=await n.finalMessage();c.usage&&s.writeUsage({promptTokens:c.usage.input_tokens,completionTokens:c.usage.output_tokens,totalTokens:c.usage.input_tokens+c.usage.output_tokens}),s.done(),yield*s.flush();}catch(a){throw a instanceof ne__default.default.APIError?new C(a.message,"anthropic",a.status):new C(`Anthropic provider error: ${a.message}`,"anthropic")}}formatMessages(t){return t.map(e=>{let s=[];if(e.content&&s.push({type:"text",text:e.content}),e.toolCalls)for(let a of e.toolCalls)s.push({type:"tool_use",id:a.id,name:a.name,input:a.arguments});if(e.toolResults)for(let a of e.toolResults)s.push({type:"tool_result",tool_use_id:a.toolCallId,content:JSON.stringify(a.result),...a.error&&{is_error:true}});return {role:e.role==="assistant"?"assistant":"user",content:s.length===1&&s[0].type==="text"?s[0].text:s}})}formatTools(t){return t.map(e=>({name:e.name,description:e.description,input_schema:this.zodToJsonSchema(e.parameters)}))}formatToolChoice(t){if(t!=="none")return t==="required"?{type:"any"}:typeof t=="object"&&"name"in t?{type:"tool",name:t.name}:{type:"auto"}}zodToJsonSchema(t){let e=t._def;if(!e)return {type:"object",properties:{},required:[]};switch(e.typeName){case "ZodString":return {type:"string",...e.description&&{description:e.description}};case "ZodNumber":return {type:"number",...e.description&&{description:e.description}};case "ZodBoolean":return {type:"boolean",...e.description&&{description:e.description}};case "ZodArray":return {type:"array",items:this.zodToJsonSchema(e.type),...e.description&&{description:e.description}};case "ZodObject":let s={},a=[],r=e.shape();for(let[n,i]of Object.entries(r))s[n]=this.zodToJsonSchema(i),i.isOptional?.()||a.push(n);return {type:"object",properties:s,...a.length>0&&{required:a},...e.description&&{description:e.description}};case "ZodEnum":return {type:"string",enum:e.values,...e.description&&{description:e.description}};case "ZodOptional":return this.zodToJsonSchema(e.innerType);case "ZodNullable":return {...this.zodToJsonSchema(e.innerType),nullable:true};case "ZodUnion":return e.options&&e.options.length>0?this.zodToJsonSchema(e.options[0]):{type:"string"};case "ZodLiteral":return {type:typeof e.value,enum:[e.value],...e.description&&{description:e.description}};case "ZodDefault":return {...this.zodToJsonSchema(e.innerType),default:e.defaultValue()};default:return console.warn(`Unsupported Zod type: ${e.typeName}, falling back to string`),{type:"string"}}}};function Gt(o){return new U(o).createCallback()}var q=class{client;defaultModel;constructor(t){this.client=new generativeAi.GoogleGenerativeAI(t.apiKey),this.defaultModel=t.model||"gemini-2.5-flash";}createCallback(){return (t,e)=>this.streamChat(t,e)}async*streamChat(t,e){let s=new v;try{let a=t.find(m=>m.role==="system"),r=this.client.getGenerativeModel({model:e.model||this.defaultModel,...a&&{systemInstruction:a.content},generationConfig:{temperature:e.temperature,maxOutputTokens:e.maxTokens,topP:e.topP,stopSequences:e.stop},...e.tools&&e.tools.length>0&&{tools:[{functionDeclarations:this.formatTools(e.tools)}]},...e.toolChoice&&e.toolChoice!=="auto"&&{toolConfig:this.formatToolConfig(e.toolChoice)}}),n=this.formatMessages(t);if(n.length===0)throw new C("No messages to send","google");let i=n[n.length-1],l=n.slice(0,-1),d=await r.startChat({history:l}).sendMessageStream(i.parts);for await(let m of d.stream){let p=m.text();p&&(s.writeText(p),yield*s.flush());let g=m.functionCalls();if(g)for(let f of g){let w=`call_${Date.now()}_${Math.random().toString(36).substr(2,9)}`;s.startToolCall(f.name,w),s.endToolCall(f.args),yield*s.flush();}}let h=await d.response;h.usageMetadata&&s.writeUsage({promptTokens:h.usageMetadata.promptTokenCount??0,completionTokens:h.usageMetadata.candidatesTokenCount??(h.usageMetadata.totalTokenCount??0)-(h.usageMetadata.promptTokenCount??0),totalTokens:h.usageMetadata.totalTokenCount??0}),s.done(),yield*s.flush();}catch(a){throw new C(`Google provider error: ${a.message}`,"google")}}formatMessages(t){return t.filter(e=>e.role!=="system").map(e=>{let s=[];if(e.content&&s.push({text:e.content}),e.toolCalls&&e.toolCalls.length>0)for(let a of e.toolCalls)s.push({functionCall:{name:a.name,args:a.arguments}});if(e.toolResults&&e.toolResults.length>0)for(let a of e.toolResults){let r=t.flatMap(n=>n.toolCalls||[]).find(n=>n.id===a.toolCallId);s.push({functionResponse:{name:r?.name||"unknown",response:{result:a.result,...a.error&&{error:a.error}}}});}return {role:e.role==="assistant"||e.role==="tool"?"model":"user",parts:s.length>0?s:[{text:e.content||""}]}})}formatTools(t){return t.map(e=>{let s={type:"object",properties:{},required:[]};if(e.parameters&&typeof e.parameters=="object")try{let a=e.parameters._def;if(a&&a.typeName==="ZodObject"&&a.shape){let r=a.shape();s.properties=Object.entries(r).reduce((n,[i,l])=>(n[i]=this.zodToJsonSchema(l),l.isOptional?.()||s.required.push(i),n),{});}}catch(a){console.warn(`Failed to convert Zod schema for tool ${e.name}:`,a);}return {name:e.name,description:e.description,parameters:s}})}zodToJsonSchema(t){let e=t._def;if(!e)return {type:"string"};switch(e.typeName){case "ZodString":return {type:"string",...e.description&&{description:e.description}};case "ZodNumber":return {type:"number",...e.description&&{description:e.description}};case "ZodBoolean":return {type:"boolean",...e.description&&{description:e.description}};case "ZodArray":return {type:"array",items:this.zodToJsonSchema(e.type),...e.description&&{description:e.description}};case "ZodObject":let s={},a=[],r=e.shape();for(let[n,i]of Object.entries(r))s[n]=this.zodToJsonSchema(i),i.isOptional?.()||a.push(n);return {type:"object",properties:s,...a.length>0&&{required:a},...e.description&&{description:e.description}};case "ZodEnum":return {type:"string",enum:e.values,...e.description&&{description:e.description}};case "ZodOptional":return this.zodToJsonSchema(e.innerType);case "ZodNullable":return {...this.zodToJsonSchema(e.innerType),nullable:true};default:return {type:"string"}}}formatToolConfig(t){return t==="none"?{functionCallingConfig:{mode:generativeAi.FunctionCallingMode.NONE}}:t==="required"?{functionCallingConfig:{mode:generativeAi.FunctionCallingMode.ANY}}:typeof t=="object"&&"name"in t?{functionCallingConfig:{mode:generativeAi.FunctionCallingMode.ANY,allowedFunctionNames:[t.name]}}:{functionCallingConfig:{mode:generativeAi.FunctionCallingMode.AUTO}}}};function Bt(o){return new q(o).createCallback()}var J=class{client;defaultModel;constructor(t){this.client=new oe__default.default({apiKey:t.apiKey,baseURL:t.baseURL,organization:t.organization,timeout:t.timeout||3e4,maxRetries:t.maxRetries||3,defaultHeaders:t.headers}),this.defaultModel=t.model||"gpt-4-turbo-preview";}createCallback(){return (t,e)=>this.streamChat(t,e)}async getFinalChatCompletion(t){let e=[...t].reverse().find(s=>s.usage!=null);return e?.usage?{usage:e.usage}:null}async*streamChat(t,e){let s=new v;try{let a=await this.client.chat.completions.create({model:e.model||this.defaultModel,messages:this.formatMessages(t),temperature:e.temperature,max_tokens:e.maxTokens,top_p:e.topP,frequency_penalty:e.frequencyPenalty,presence_penalty:e.presencePenalty,stop:e.stop,stream:!0,stream_options:{include_usage:!0},...e.tools&&e.tools.length>0&&{tools:this.formatTools(e.tools),tool_choice:this.formatToolChoice(e.toolChoice)}}),r=new Map,n=[];for await(let l of a){n.push(l);let c=l.choices[0]?.delta;if(c){if(c.content&&s.writeText(c.content),c.tool_calls)for(let d of c.tool_calls){let h=d.index;r.has(h)||r.set(h,{id:"",name:"",arguments:""});let m=r.get(h);d.id&&(m.id=d.id),d.function?.name&&(m.name=d.function.name,s.startToolCall(m.name,m.id)),d.function?.arguments&&(m.arguments+=d.function.arguments,s.writeToolCallDelta(d.function.arguments));}if(l.choices[0]?.finish_reason&&l.choices[0].finish_reason==="tool_calls"){for(let[d,h]of r.entries())try{let m=JSON.parse(h.arguments||"{}");s.endToolCall(m);}catch(m){console.error(`Failed to parse tool call arguments for ${h.name}:`,m),s.endToolCall({});}r.clear();}yield*s.flush();}}let i=await this.getFinalChatCompletion(n);i?.usage&&s.writeUsage({promptTokens:i.usage.prompt_tokens,completionTokens:i.usage.completion_tokens,totalTokens:i.usage.total_tokens}),s.done(),yield*s.flush();}catch(a){throw a instanceof oe__default.default.APIError?new C(a.message,"openai",a.status):new C(`OpenAI provider error: ${a.message}`,"openai")}}formatMessages(t){return t.map(e=>{let s={role:e.role,content:e.content||null};return e.toolCalls&&e.toolCalls.length>0&&(s.tool_calls=e.toolCalls.map(a=>({id:a.id,type:"function",function:{name:a.name,arguments:JSON.stringify(a.arguments)}}))),e.role==="tool"&&e.toolResults&&e.toolResults.length>0&&(s.tool_call_id=e.toolResults[0]?.toolCallId,s.content=JSON.stringify(e.toolResults[0]?.result)),s})}formatTools(t){return t.map(e=>({type:"function",function:{name:e.name,description:e.description,parameters:this.zodToJsonSchema(e.parameters)}}))}formatToolChoice(t){return !t||t==="auto"?"auto":t==="none"?"none":t==="required"?"required":typeof t=="object"&&"name"in t?{type:"function",function:{name:t.name}}:"auto"}zodToJsonSchema(t){let e=t._def;if(!e)return {type:"object",properties:{},required:[]};switch(e.typeName){case "ZodString":return {type:"string",...e.description&&{description:e.description}};case "ZodNumber":return {type:"number",...e.description&&{description:e.description}};case "ZodBoolean":return {type:"boolean",...e.description&&{description:e.description}};case "ZodArray":return {type:"array",items:this.zodToJsonSchema(e.type),...e.description&&{description:e.description}};case "ZodObject":let s={},a=[],r=e.shape();for(let[n,i]of Object.entries(r))s[n]=this.zodToJsonSchema(i),i.isOptional?.()||a.push(n);return {type:"object",properties:s,...a.length>0&&{required:a},...e.description&&{description:e.description}};case "ZodEnum":return {type:"string",enum:e.values,...e.description&&{description:e.description}};case "ZodOptional":return this.zodToJsonSchema(e.innerType);case "ZodNullable":return {...this.zodToJsonSchema(e.innerType),nullable:true};case "ZodUnion":return e.options&&e.options.length>0?this.zodToJsonSchema(e.options[0]):{type:"string"};case "ZodLiteral":return {type:typeof e.value,enum:[e.value],...e.description&&{description:e.description}};case "ZodDefault":return {...this.zodToJsonSchema(e.innerType),default:e.defaultValue()};default:return console.warn(`Unsupported Zod type: ${e.typeName}, falling back to string`),{type:"string"}}}};function Qt(o){return new J(o).createCallback()}var L=class{config;baseURL;constructor(t){this.config=t,this.baseURL=t.baseURL||"https://api.sarvam.ai/v1";}createCallback(){return (t,e)=>this.streamChat(t,e)}async*streamChat(t,e){let s=new v;try{let a={model:e.model||this.config.model||"sarvam-m",messages:this.formatMessages(t),temperature:e.temperature,max_tokens:e.maxTokens,stream:!0};e.tools&&e.tools.length>0&&(a.tools=this.formatTools(e.tools)),e.toolChoice&&e.toolChoice!=="auto"&&(a.tool_choice=this.formatToolChoice(e.toolChoice));let r=await fetch(`${this.baseURL}/chat/completions`,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${this.config.apiKey}`,...this.config.headers},body:JSON.stringify(a)});if(!r.ok){let n=await r.json().catch(()=>({}));throw new C(n.error?.message||"Sarvam AI API error","sarvam",r.status)}yield*this.parseStream(r.body,s);}catch(a){throw a instanceof C?a:new C(`Sarvam provider error: ${a}`,"sarvam")}}async*parseStream(t,e){let s=t.getReader(),a=new TextDecoder,r="",n=new Map;try{for(;;){let{done:i,value:l}=await s.read();if(i)break;r+=a.decode(l,{stream:!0});let c=r.split(`
41
+ `);r=c.pop()||"";for(let d of c){if(!d.trim()||!d.startsWith("data: "))continue;let h=d.slice(6);if(h==="[DONE]"){e.done(),yield*e.flush();return}try{let m=JSON.parse(h);if(m.choices?.[0]){let p=m.choices[0].delta;if(p?.content&&e.writeText(p.content),p?.tool_calls)for(let g of p.tool_calls){let f=g.index??0;n.has(f)||n.set(f,{id:g.id||`call_${Date.now()}_${f}`,name:"",arguments:""});let w=n.get(f);g.id&&(w.id=g.id),g.function?.name&&(w.name=g.function.name,e.startToolCall(w.name,w.id)),g.function?.arguments&&(w.arguments+=g.function.arguments,e.writeToolCallDelta(g.function.arguments));}if(m.choices[0].finish_reason){if(m.choices[0].finish_reason==="tool_calls"){for(let[g,f]of n.entries())try{let w=f.arguments?JSON.parse(f.arguments):{};e.endToolCall(w);}catch(w){console.error(`Failed to parse tool call arguments for ${f.name}:`,w),e.endToolCall({});}n.clear();}e.done(),yield*e.flush();return}}m.usage&&e.writeUsage({promptTokens:m.usage.prompt_tokens||0,completionTokens:m.usage.completion_tokens||0,totalTokens:m.usage.total_tokens||0}),yield*e.flush();}catch(m){console.error("Failed to parse Sarvam chunk:",m);}}}}finally{s.releaseLock();}}formatMessages(t){return t.map(e=>{let s={role:e.role==="tool"?"tool":e.role,content:e.content||null};return e.toolCalls&&e.toolCalls.length>0&&(s.tool_calls=e.toolCalls.map(a=>({id:a.id,type:"function",function:{name:a.name,arguments:JSON.stringify(a.arguments)}}))),e.role==="tool"&&e.toolResults&&e.toolResults.length>0&&(s.tool_call_id=e.toolResults[0]?.toolCallId,s.content=JSON.stringify(e.toolResults[0]?.result)),s})}formatTools(t){return t.map(e=>({type:"function",function:{name:e.name,description:e.description,parameters:this.zodToJsonSchema(e.parameters)}}))}formatToolChoice(t){return t==="none"?"none":t==="required"?"required":typeof t=="object"&&"name"in t?{type:"function",function:{name:t.name}}:"auto"}zodToJsonSchema(t){let e=t._def;if(!e)return {type:"object",properties:{},required:[]};switch(e.typeName){case "ZodString":return {type:"string",...e.description&&{description:e.description}};case "ZodNumber":return {type:"number",...e.description&&{description:e.description}};case "ZodBoolean":return {type:"boolean",...e.description&&{description:e.description}};case "ZodArray":return {type:"array",items:this.zodToJsonSchema(e.type),...e.description&&{description:e.description}};case "ZodObject":let s={},a=[],r=e.shape();for(let[n,i]of Object.entries(r))s[n]=this.zodToJsonSchema(i),i.isOptional?.()||a.push(n);return {type:"object",properties:s,...a.length>0&&{required:a},...e.description&&{description:e.description}};case "ZodEnum":return {type:"string",enum:e.values,...e.description&&{description:e.description}};case "ZodOptional":return this.zodToJsonSchema(e.innerType);case "ZodNullable":return {...this.zodToJsonSchema(e.innerType),nullable:true};case "ZodUnion":return e.options&&e.options.length>0?this.zodToJsonSchema(e.options[0]):{type:"string"};case "ZodLiteral":return {type:typeof e.value,enum:[e.value],...e.description&&{description:e.description}};case "ZodDefault":return {...this.zodToJsonSchema(e.innerType),default:e.defaultValue()};default:return console.warn(`Unsupported Zod type: ${e.typeName}, falling back to string`),{type:"string"}}}};function as(o){return new L(o).createCallback()}exports.AnthropicProvider=U;exports.CacheManager=S;exports.DatabaseManager=P;exports.DrizzleAdapter=ee;exports.GoogleProvider=q;exports.MemoryAdapter=te;exports.MemoryCache=D;exports.OpenAIProvider=J;exports.PaprFlare=re;exports.PaprFlareError=y;exports.PrismaAdapter=se;exports.ProviderError=C;exports.RateLimitError=B;exports.RedisCache=O;exports.SarvamProvider=L;exports.StreamWriter=v;exports.ThreadManager=b;exports.ThreadPool=ae;exports.ValidationError=K;exports.batchStream=_e;exports.chunk=we;exports.collectStream=E;exports.collectText=W;exports.createAnthropicProvider=Gt;exports.createCacheKey=$;exports.createGoogleProvider=Bt;exports.createOpenAIProvider=Qt;exports.createSarvamProvider=as;exports.createStreamWriter=Ae;exports.createStreamableValue=Ge;exports.createUIMessageStream=Le;exports.debounce=Te;exports.deepMerge=G;exports.filterStream=Ie;exports.formatMessages=j;exports.generateId=T;exports.isPlainObject=A;exports.measureTime=Se;exports.mergeStreams=F;exports.parseSSEStream=Oe;exports.pipeToResponse=Z;exports.processStream=V;exports.retry=z;exports.safeJsonParse=Me;exports.sleep=ce;exports.streamToArray=xe;exports.streamToConsole=H;exports.structuredOutput=Nt;exports.takeStream=Ne;exports.throttle=be;exports.toHTTPResponse=Y;exports.toReadableStream=R;exports.toUIStream=M;exports.transformStream=De;//# sourceMappingURL=index.js.map
42
42
  //# sourceMappingURL=index.js.map