zen-code 4.8.6 → 4.9.0

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.
Files changed (75) hide show
  1. package/dist/app.js +111 -106
  2. package/dist/{chunk-vyejbw66.js → chunk-13nyfrmm.js} +1 -1
  3. package/dist/chunk-1edvf7b5.js +1 -0
  4. package/dist/chunk-1rmnbdef.js +1 -0
  5. package/dist/{chunk-fbg1z6br.js → chunk-1ttywx0y.js} +1 -1
  6. package/dist/{chunk-aeambwc5.js → chunk-1y82m5kn.js} +4 -4
  7. package/dist/{chunk-8ypsygqy.js → chunk-30sq2w0d.js} +5 -5
  8. package/dist/chunk-32ase1cw.js +2 -0
  9. package/dist/{chunk-scddrzwd.js → chunk-3490ntd8.js} +1 -1
  10. package/dist/{chunk-mhfjwkg9.js → chunk-3pcybja5.js} +1 -1
  11. package/dist/{chunk-q87zdrxp.js → chunk-4nsg4vcd.js} +1 -1
  12. package/dist/{chunk-4fwb6qr1.js → chunk-5rr85f28.js} +1 -1
  13. package/dist/{chunk-5kmnxyd8.js → chunk-5x8nxw0t.js} +1 -1
  14. package/dist/chunk-6rfc36jg.js +1 -0
  15. package/dist/{chunk-fnrbq03p.js → chunk-76h8pe7x.js} +2 -2
  16. package/dist/{chunk-0kqqh5rr.js → chunk-7kdvr78m.js} +2 -2
  17. package/dist/{chunk-hqyfg97v.js → chunk-8g2zdcy0.js} +1 -1
  18. package/dist/chunk-8z38ybz7.js +1 -0
  19. package/dist/{chunk-jsagr88c.js → chunk-98f6hg43.js} +1 -1
  20. package/dist/chunk-9dahn9h7.js +3 -0
  21. package/dist/chunk-9k5d9vf1.js +1 -0
  22. package/dist/{chunk-bzgj8aae.js → chunk-b52b0t16.js} +1 -1
  23. package/dist/chunk-b8dxq9rq.js +1 -0
  24. package/dist/{chunk-tvqxepjm.js → chunk-cggjws6a.js} +1 -1
  25. package/dist/{chunk-czbkc7pc.js → chunk-cjqarwdn.js} +1 -1
  26. package/dist/{chunk-mqbn36h4.js → chunk-cs73xbzz.js} +1 -1
  27. package/dist/{chunk-xemvstcq.js → chunk-cyexd09c.js} +2 -2
  28. package/dist/{chunk-pww7x4hb.js → chunk-ep2es95e.js} +1 -1
  29. package/dist/chunk-f8ewggk1.js +1 -0
  30. package/dist/{chunk-1rnd4taj.js → chunk-g377vrpj.js} +3 -3
  31. package/dist/{chunk-141pasd6.js → chunk-g7pm00z7.js} +2 -2
  32. package/dist/chunk-gcm4jp0d.js +26 -0
  33. package/dist/{chunk-pw18cs39.js → chunk-heasksrr.js} +2 -2
  34. package/dist/chunk-hfve7nf5.js +2 -0
  35. package/dist/{chunk-6hpehtte.js → chunk-j7a40ww9.js} +2 -2
  36. package/dist/chunk-j9aysaeb.js +1 -0
  37. package/dist/{chunk-ph818by4.js → chunk-jbf8ve63.js} +1 -1
  38. package/dist/{chunk-mfjc63aw.js → chunk-jfhc5c0d.js} +1 -1
  39. package/dist/{chunk-jwzkek1t.js → chunk-jxsfzfac.js} +1 -1
  40. package/dist/{chunk-fzn8xq6f.js → chunk-kba8akjs.js} +1 -1
  41. package/dist/{chunk-favbv2tp.js → chunk-m76ya904.js} +1 -1
  42. package/dist/{chunk-c6nzmyns.js → chunk-mjzeawnq.js} +2 -2
  43. package/dist/{chunk-ed6aprzz.js → chunk-mmq834zt.js} +1 -1
  44. package/dist/chunk-ns6tjjkq.js +1 -0
  45. package/dist/{chunk-emv4z7ck.js → chunk-nwy6n6b6.js} +87 -87
  46. package/dist/chunk-qd305hg1.js +1 -0
  47. package/dist/chunk-qez6ejd4.js +1 -0
  48. package/dist/{chunk-p8fbtgk3.js → chunk-r2h3x9zv.js} +1 -1
  49. package/dist/{chunk-8vkm1ts6.js → chunk-rncpxz1b.js} +1 -1
  50. package/dist/chunk-rz3b356n.js +1 -0
  51. package/dist/{chunk-py5g6yc2.js → chunk-trjpzw1n.js} +1 -1
  52. package/dist/{chunk-g1bcpymb.js → chunk-va71tsw3.js} +2 -2
  53. package/dist/{chunk-pyw1vxnf.js → chunk-wn43r152.js} +1 -1
  54. package/dist/{chunk-0f022x9v.js → chunk-xhnvpygg.js} +1 -1
  55. package/dist/{chunk-jn4j9rm3.js → chunk-xkz5z0zn.js} +1 -1
  56. package/dist/chunk-zwxjkwqd.js +26 -0
  57. package/dist/{chunk-cqrb18vt.js → chunk-zz32kgt2.js} +1 -1
  58. package/dist/cli.js +1 -1
  59. package/dist/nonInteractive.js +3 -3
  60. package/dist/zen-keyboard.js +1 -1
  61. package/package.json +3 -3
  62. package/dist/chunk-0a26n1zy.js +0 -26
  63. package/dist/chunk-2e7zh8he.js +0 -1
  64. package/dist/chunk-2y73pxem.js +0 -1
  65. package/dist/chunk-6yeg1jc7.js +0 -1
  66. package/dist/chunk-903s8sk9.js +0 -1
  67. package/dist/chunk-ema4rc9d.js +0 -2
  68. package/dist/chunk-f4tc5awt.js +0 -1
  69. package/dist/chunk-f7d0m4h3.js +0 -1
  70. package/dist/chunk-gar31nyn.js +0 -1
  71. package/dist/chunk-mdkwbajq.js +0 -2
  72. package/dist/chunk-p1bn8p65.js +0 -1
  73. package/dist/chunk-s6gzrjxk.js +0 -25
  74. package/dist/chunk-spvbvpx5.js +0 -1
  75. package/dist/chunk-t15ptqbm.js +0 -1
@@ -1,26 +0,0 @@
1
- import{Sa as a}from"./chunk-vyejbw66.js";import{pb as s}from"./chunk-p8fbtgk3.js";import{Annotation as S}from"@langchain/langgraph";var _=(...G)=>{return{build:(U={})=>{return S.Root(Object.assign({},...G.map((L)=>L.spec),U))}}},q=(G)=>S({reducer:(U,L)=>L,default:G});import{tool as G1}from"@langchain/core/tools";import{z as P}from"zod";var U1=P.object({thought:P.string().describe("Your current thinking step"),nextThoughtNeeded:P.boolean().describe("Whether another thought step is needed"),thoughtNumber:P.number().min(1).describe("Current thought number"),totalThoughts:P.number().min(1).describe("Estimated total thoughts needed"),isRevision:P.boolean().optional().describe("Whether this revises previous thinking"),revisesThought:P.number().min(1).optional().describe("Which thought is being reconsidered"),branchFromThought:P.number().min(1).optional().describe("Branching point thought number"),branchId:P.string().optional().describe("Branch identifier"),needsMoreThoughts:P.boolean().optional().describe("If more thoughts are needed")}),w=[],I={},g1=G1(async(G)=>{try{if(G.thoughtNumber>G.totalThoughts)G.totalThoughts=G.thoughtNumber;if(w.push(G),G.branchFromThought&&G.branchId){if(!I[G.branchId])I[G.branchId]=[];I[G.branchId].push(G)}return JSON.stringify({thoughtNumber:G.thoughtNumber,totalThoughts:G.totalThoughts,nextThoughtNeeded:G.nextThoughtNeeded,branches:Object.keys(I),thoughtHistoryLength:w.length},null,2)}catch(U){return JSON.stringify({error:U instanceof Error?U.message:String(U),status:"failed"},null,2)}},{name:"sequential-thinking",description:`A detailed tool for dynamic and reflective problem-solving through thoughts.
2
- This tool helps analyze problems through a flexible thinking process that can adapt and evolve.
3
- Each thought can build on, question, or revise previous insights as understanding deepens.
4
-
5
- When to use this tool:
6
- - Breaking down complex problems into steps
7
- - Planning and design with room for revision
8
- - Analysis that might need course correction
9
- - Problems where the full scope might not be clear initially
10
- - Problems that require a multi-step solution
11
- - Tasks that need to maintain context over multiple steps
12
- - Situations where irrelevant information needs to be filtered out
13
-
14
- Key features:
15
- - You can adjust total_thoughts up or down as you progress
16
- - You can question or revise previous thoughts
17
- - You can add more thoughts even after reaching what seemed like the end
18
- - You can express uncertainty and explore alternative approaches
19
- - Not every thought needs to build linearly - you can branch or backtrack
20
- - Generates a solution hypothesis
21
- - Verifies the hypothesis based on the Chain of Thought steps
22
- - Repeats the process until satisfied
23
- - Provides a correct answer`,schema:U1});import{tool as f}from"@langchain/core/tools";import{z as $}from"zod";var L1=$.object({url:$.string().url().describe("the url to crawl"),raw:$.boolean().optional().default(!1).describe("return raw html")}),W1=$.object({query:$.string().describe("the query to search"),engines:$.array($.enum(["basic","npm","juejin","anthropic","github"])).default(["basic"]).describe("the engines to use"),returnType:$.enum(["json","markdown"]).default("json").describe("the content type to return"),withMetadata:$.boolean().default(!0).describe("whether to include metadata in the search results")}),t1=f(async({url:G})=>{if(!G)return{status:"error",error:"URL is required"};let U=await fetch(`${process.env.SEARCH_SERVER_URL||"http://localhost:8123"}/website-to-md/extract`,{method:"POST",body:JSON.stringify({url:G})});if(!U.ok)throw Error(`HTTP error! status: ${U.status}`);return await U.text()},{name:"read_web_page",description:"A powerful web content extraction tool that retrieves and processes raw content from specified URLs, ideal for data collection, content analysis, and research tasks.",schema:$.object(L1.shape)}),s1=f(async({query:G,engines:U})=>{let L=await fetch(`${process.env.SEARCH_SERVER_URL||"http://localhost:8123"}/website-to-md/search`,{method:"POST",body:JSON.stringify({query:G,engines:U,returnType:"json",withMetadata:!0})});if(!L.ok)throw Error(`HTTP error! status: ${L.status}`);return await L.text()},{name:"web_search",description:"A powerful web search tool that provides comprehensive, real-time results using search engine. Returns relevant web content with customizable parameters for result count, content type, and domain filtering. Ideal for gathering current information, news, and detailed web content analysis.",schema:$.object(W1.shape)});import{AIMessage as Y0,ToolMessage as Z0}from"@langchain/core/messages";import{AIMessage as L0,HumanMessage as W0,SystemMessage as X0,ToolMessage as B0}from"@langchain/core/messages";var V0=(G)=>{return G?.configurable?.thread_id};import{Command as $0,getCurrentTaskInput as H0}from"@langchain/langgraph";import{z as O0}from"zod";import{ToolMessage as F0}from"@langchain/core/messages";import{tool as z0}from"@langchain/core/tools";import{Annotation as N,MessagesAnnotation as B1,START as _0,StateGraph as D0}from"@langchain/langgraph";var A=N.Root({...B1.spec,activeAgent:N});import{z as M0}from"zod";import{ToolMessage as u0}from"@langchain/core/messages";import{tool as r0}from"@langchain/core/tools";import{Command as p0,getCurrentTaskInput as i0}from"@langchain/langgraph";import{Command as m0}from"@langchain/langgraph";import{ChatOpenAI as GG}from"@langchain/openai";import{SystemMessage as WG,HumanMessage as XG,AIMessageChunk as BG,ToolMessage as JG}from"@langchain/core/messages";import{z as b}from"zod";import{withLangGraph as K1}from"@langchain/langgraph/zod";import{MessagesZodMeta as Y1}from"@langchain/langgraph";var T=b.object({messages:K1(b.custom(),Y1).default([])});import{AIMessage as I1,AIMessageChunk as h1,isAIMessage as _1}from"@langchain/core/messages";import{ChatGenerationChunk as n}from"@langchain/core/outputs";import{wrapOpenAIClientError as D1}from"@langchain/openai";import{convertToOpenAITool as QG,isLangChainTool as jG}from"@langchain/core/utils/function_calling";import{isInteropZodSchema as $G}from"@langchain/core/utils/types";import{toJsonSchema as PG}from"@langchain/core/utils/json_schema";function M(G){if(!G)return;else if(G==="any"||G==="required")return"required";else if(G==="auto")return"auto";else if(G==="none")return"none";else if(typeof G==="string")return{type:"function",function:{name:G}};else return G}import{BaseChatOpenAI as S1}from"@langchain/openai";import{AIMessage as d,AIMessageChunk as Z1,ChatMessage as x1,ChatMessageChunk as V1,FunctionMessageChunk as Q1,HumanMessageChunk as j1,SystemMessageChunk as u,ToolMessage as p,ToolMessageChunk as q1,parseBase64DataUrl as k,parseMimeType as r,isDataContentBlock as $1,iife as H1,convertToProviderContentBlock as P1}from"@langchain/core/messages";import{convertLangChainToolCallToOpenAI as O1,makeInvalidToolCall as E1,parseToolCall as F1}from"@langchain/core/output_parsers/openai_tools";import{isZodSchemaV3 as FG,isZodSchemaV4 as yG}from"@langchain/core/utils/types";import{toJSONSchema as RG,parse as IG}from"zod/v4/core";import{zodResponseFormat as _G}from"openai/helpers/zod";function C(G,U){if(U&&typeof U==="object"&&"images"in U&&Array.isArray(U.images)){let L=U.images.filter((W)=>typeof W?.image_url?.url==="string").map((W)=>({type:"image",url:W.image_url.url}));return[{type:"text",text:G},...L]}return G}import{messageToOpenAIRole as i}from"@langchain/openai";var y1={providerName:"ChatOpenAI",fromStandardTextBlock(G){return{type:"text",text:G.text}},fromStandardImageBlock(G){if(G.source_type==="url")return{type:"image_url",image_url:{url:G.url,...G.metadata?.detail?{detail:G.metadata.detail}:{}}};if(G.source_type==="base64")return{type:"image_url",image_url:{url:`data:${G.mime_type??""};base64,${G.data}`,...G.metadata?.detail?{detail:G.metadata.detail}:{}}};throw Error(`Image content blocks with source_type ${G.source_type} are not supported for ChatOpenAI`)},fromStandardAudioBlock(G){if(G.source_type==="url"){let U=k({dataUrl:G.url});if(!U)throw Error(`URL audio blocks with source_type ${G.source_type} must be formatted as a data URL for ChatOpenAI`);let L=U.mime_type||G.mime_type||"",W;try{W=r(L)}catch{throw Error(`Audio blocks with source_type ${G.source_type} must have mime type of audio/wav or audio/mp3`)}if(W.type!=="audio"||W.subtype!=="wav"&&W.subtype!=="mp3")throw Error(`Audio blocks with source_type ${G.source_type} must have mime type of audio/wav or audio/mp3`);return{type:"input_audio",input_audio:{format:W.subtype,data:U.data}}}if(G.source_type==="base64"){let U;try{U=r(G.mime_type??"")}catch{throw Error(`Audio blocks with source_type ${G.source_type} must have mime type of audio/wav or audio/mp3`)}if(U.type!=="audio"||U.subtype!=="wav"&&U.subtype!=="mp3")throw Error(`Audio blocks with source_type ${G.source_type} must have mime type of audio/wav or audio/mp3`);return{type:"input_audio",input_audio:{format:U.subtype,data:G.data}}}throw Error(`Audio content blocks with source_type ${G.source_type} are not supported for ChatOpenAI`)},fromStandardFileBlock(G){if(G.source_type==="url"){if(!k({dataUrl:G.url}))throw Error(`URL file blocks with source_type ${G.source_type} must be formatted as a data URL for ChatOpenAI`);return{type:"file",file:{file_data:G.url,...G.metadata?.filename||G.metadata?.name?{filename:G.metadata?.filename||G.metadata?.name}:{}}}}if(G.source_type==="base64")return{type:"file",file:{file_data:`data:${G.mime_type??""};base64,${G.data}`,...G.metadata?.filename||G.metadata?.name||G.metadata?.title?{filename:G.metadata?.filename||G.metadata?.name||G.metadata?.title}:{}}};if(G.source_type==="id")return{type:"file",file:{file_id:G.id}};throw Error(`File content blocks with source_type ${G.source_type} are not supported for ChatOpenAI`)}},c=({message:G,rawResponse:U,includeRawResponse:L})=>{let W=G.tool_calls;switch(G.role){case"assistant":{let X=[],B=[];for(let K of W??[])try{X.push(F1(K,{returnId:!0}))}catch(Q){B.push(E1(K,Q.message))}let J={function_call:G.function_call,tool_calls:W};if(L!==void 0)J.__raw_response=U;let v={model_provider:"openai",model_name:U.model,...U.system_fingerprint?{usage:{...U.usage},system_fingerprint:U.system_fingerprint}:{}};if(G.audio)J.audio=G.audio;let Z=C(G.content||"",U.choices?.[0]?.message);return new d({content:Z,tool_calls:X,invalid_tool_calls:B,additional_kwargs:J,response_metadata:v,id:U.id})}default:return new x1(G.content||"",G.role??"unknown")}},g=({delta:G,rawResponse:U,includeRawResponse:L,defaultRole:W})=>{let X=G.role??W,B=G.content??"",J;if(G.function_call)J={function_call:G.function_call};else if(G.tool_calls)J={tool_calls:G.tool_calls};else J={};if(L)J.__raw_response=U;if(G.audio)J.audio={...G.audio,index:U.choices[0].index};let v={model_provider:"openai",usage:{...U.usage}};if(X==="user")return new j1({content:B,response_metadata:v});else if(X==="assistant"){let Z=[];if(Array.isArray(G.tool_calls))for(let K of G.tool_calls)Z.push({name:K.function?.name,args:K.function?.arguments,id:K.id,index:K.index,type:"tool_call_chunk"});return new Z1({content:B,tool_call_chunks:Z,additional_kwargs:J,id:U.id,response_metadata:v})}else if(X==="system")return new u({content:B,response_metadata:v});else if(X==="developer")return new u({content:B,response_metadata:v,additional_kwargs:{__openai_role__:"developer"}});else if(X==="function")return new Q1({content:B,additional_kwargs:J,name:G.name,response_metadata:v});else if(X==="tool")return new q1({content:B,additional_kwargs:J,tool_call_id:G.tool_call_id,response_metadata:v});else return new V1({content:B,role:X,response_metadata:v})},z1=(G)=>{if(G.type==="image"){if(G.url)return{type:"image_url",image_url:{url:G.url}};else if(G.data)return{type:"image_url",image_url:{url:`data:${G.mimeType};base64,${G.data}`}}}if(G.type==="audio"){if(G.data){let U=H1(()=>{let[,L]=G.mimeType.split("/");if(L==="wav"||L==="mp3")return L;return"wav"});return{type:"input_audio",input_audio:{data:G.data.toString(),format:U}}}}if(G.type==="file"){if(G.data)return{type:"file",file:{file_data:G.data.toString()}};if(G.fileId)return{type:"file",file:{file_id:G.fileId}}}return};function m(G){if(!G)return!1;if(/^o\d/.test(G??""))return!0;if(G.startsWith("gpt-5")&&!G.startsWith("gpt-5-chat"))return!0;return!1}var R1=({message:G,model:U})=>{let L=i(G);if(L==="system"&&m(U))L="developer";if(L==="developer")return{role:"developer",content:G.contentBlocks.filter((X)=>X.type==="text")};else if(L==="system")return{role:"system",content:G.contentBlocks.filter((X)=>X.type==="text")};else if(L==="assistant")return{role:"assistant",content:G.contentBlocks.filter((X)=>X.type==="text")};else if(L==="tool"&&p.isInstance(G))return{role:"tool",tool_call_id:G.tool_call_id,content:G.contentBlocks.filter((X)=>X.type==="text")};else if(L==="function")return{role:"function",name:G.name??"",content:G.contentBlocks.filter((X)=>X.type==="text").join("")};function*W(X){for(let B of X){if(B.type==="text")yield{type:"text",text:B.text};let J=z1(B);if(J)yield J}}return{role:"user",content:Array.from(W(G.contentBlocks))}},D=({messages:G,model:U})=>{return G.flatMap((L)=>{if("output_version"in L.response_metadata&&L.response_metadata?.output_version==="v1")return R1({message:L});let W=i(L);if(W==="system"&&m(U))W="developer";let X=typeof L.content==="string"?L.content:L.content.map((J)=>{if($1(J))return P1(J,y1);return J}),B={role:W,content:X};if(L.name!=null)B.name=L.name;if(L.additional_kwargs.function_call!=null)B.function_call=L.additional_kwargs.function_call,B.content="";if(L.additional_kwargs?.reasoning_content&&U?.includes("deepseek"))B.reasoning_content=L.additional_kwargs.reasoning_content;if(d.isInstance(L)&&!!L.tool_calls?.length)B.tool_calls=L.tool_calls.map(O1),B.content="";else{if(L.additional_kwargs.tool_calls!=null)B.tool_calls=L.additional_kwargs.tool_calls;if(p.isInstance(L)&&L.tool_call_id!=null)B.tool_call_id=L.tool_call_id}if(L.additional_kwargs.audio&&typeof L.additional_kwargs.audio==="object"&&"id"in L.additional_kwargs.audio){let J={role:"assistant",audio:{id:L.additional_kwargs.audio.id}};return[B,J]}return B})};class R extends S1{invocationParams(G,U){let L;if(G?.strict!==void 0)L=G.strict;else if(this.supportsStrictToolCalling!==void 0)L=this.supportsStrictToolCalling;let W={};if(G?.stream_options!==void 0)W={stream_options:G.stream_options};else if(this.streamUsage&&(this.streaming||U?.streaming))W={stream_options:{include_usage:!0}};let X={model:this.model,temperature:this.temperature,top_p:this.topP,frequency_penalty:this.frequencyPenalty,presence_penalty:this.presencePenalty,logprobs:this.logprobs,top_logprobs:this.topLogprobs,n:this.n,logit_bias:this.logitBias,stop:G?.stop??this.stopSequences,user:this.user,stream:this.streaming,functions:G?.functions,function_call:G?.function_call,tools:G?.tools?.length?G.tools.map((J)=>this._convertChatOpenAIToolToCompletionsTool(J,{strict:L})):void 0,tool_choice:M(G?.tool_choice),response_format:this._getResponseFormat(G?.response_format),seed:G?.seed,...W,parallel_tool_calls:G?.parallel_tool_calls,...this.audio||G?.audio?{audio:this.audio||G?.audio}:{},...this.modalities||G?.modalities?{modalities:this.modalities||G?.modalities}:{},...this.modelKwargs,prompt_cache_key:G?.promptCacheKey??this.promptCacheKey,verbosity:G?.verbosity??this.verbosity};if(G?.prediction!==void 0)X.prediction=G.prediction;if(this.service_tier!==void 0)X.service_tier=this.service_tier;if(G?.service_tier!==void 0)X.service_tier=G.service_tier;let B=this._getReasoningParams(G);if(B!==void 0&&B.effort!==void 0)X.reasoning_effort=B.effort;if(this.reasoning)X.max_completion_tokens=this.maxTokens===-1?void 0:this.maxTokens;else X.max_tokens=this.maxTokens===-1?void 0:this.maxTokens;return X}async _generate(G,U,L){let W={},X=this.invocationParams(U),B=D({messages:G,model:this.model});if(X.stream){let J=this._streamResponseChunks(G,U,L),v={};for await(let Y of J){Y.message.response_metadata={...Y.generationInfo,...Y.message.response_metadata};let V=Y.generationInfo?.completion??0;if(v[V]===void 0)v[V]=Y;else v[V]=v[V].concat(Y)}let Z=Object.entries(v).sort(([Y],[V])=>parseInt(Y,10)-parseInt(V,10)).map(([Y,V])=>V),{functions:K,function_call:Q}=this.invocationParams(U),x=await this._getEstimatedTokenCountFromPrompt(G,K,Q),H=await this._getNumTokensFromGenerations(Z);return W.input_tokens=x,W.output_tokens=H,W.total_tokens=x+H,{generations:Z,llmOutput:{estimatedTokenUsage:{promptTokens:W.input_tokens,completionTokens:W.output_tokens,totalTokens:W.total_tokens}}}}else{let J=await this.completionWithRetry({...X,stream:!1,messages:B},{signal:U?.signal,...U?.options}),{completion_tokens:v,prompt_tokens:Z,total_tokens:K,prompt_tokens_details:Q,completion_tokens_details:x}=J?.usage??{};if(v)W.output_tokens=(W.output_tokens??0)+v;if(Z)W.input_tokens=(W.input_tokens??0)+Z;if(K)W.total_tokens=(W.total_tokens??0)+K;if(Q?.audio_tokens!==null||Q?.cached_tokens!==null)W.input_token_details={...Q?.audio_tokens!==null&&{audio:Q?.audio_tokens},...Q?.cached_tokens!==null&&{cache_read:Q?.cached_tokens}};if(x?.audio_tokens!==null||x?.reasoning_tokens!==null)W.output_token_details={...x?.audio_tokens!==null&&{audio:x?.audio_tokens},...x?.reasoning_tokens!==null&&{reasoning:x?.reasoning_tokens}};let H=[];for(let Y of J?.choices??[]){let V=Y.message?.content??"",F=Y.message?.reasoning_content??Y.message?.reasoning??"",j={text:V,message:this._convertCompletionsMessageToBaseMessage(Y.message??{role:"assistant"},J)};if(j.message.additional_kwargs={...j.message.additional_kwargs,reasoning_content:F},j.generationInfo={...Y.finish_reason?{finish_reason:Y.finish_reason}:{},...Y.logprobs?{logprobs:Y.logprobs}:{}},_1(j.message))j.message.usage_metadata=W;j.message=new I1(Object.fromEntries(Object.entries(j.message).filter(([y])=>!y.startsWith("lc_")))),H.push(j)}return{generations:H,llmOutput:{tokenUsage:{promptTokens:W.input_tokens,completionTokens:W.output_tokens,totalTokens:W.total_tokens}}}}}async*_streamResponseChunks(G,U,L){let W=D({messages:G,model:this.model}),X={...this.invocationParams(U,{streaming:!0}),messages:W,stream:!0},B,J=await this.completionWithRetry(X,U),v;for await(let Z of J){let K=Z?.choices?.[0];if(Z.usage)v=Z.usage;if(!K)continue;let{delta:Q}=K;if(!Q)continue;let x=this._convertCompletionsDeltaToBaseMessageChunk(Q,Z,B),H=Q.reasoning_content??Q.reasoning??"";if(H)x.additional_kwargs={...x.additional_kwargs,reasoning_content:H};B=Q.role??B;let Y={prompt:U.promptIndex??0,completion:K.index??0};if(typeof x.content!=="string"){console.log("[WARNING]: Received non-string content from OpenAI. This is currently not supported.");continue}let V={...Y};if(K.finish_reason!=null)V.finish_reason=K.finish_reason,V.system_fingerprint=Z.system_fingerprint,V.model_name=Z.model,V.service_tier=Z.service_tier;if(this.logprobs)V.logprobs=K.logprobs;let F=new n({message:x,text:x.content,generationInfo:V});yield F,await L?.handleLLMNewToken(F.text??"",Y,void 0,void 0,void 0,{chunk:F})}if(v){let Z={...v.prompt_tokens_details?.audio_tokens!==null&&{audio:v.prompt_tokens_details?.audio_tokens},...v.prompt_tokens_details?.cached_tokens!==null&&{cache_read:v.prompt_tokens_details?.cached_tokens}},K={...v.completion_tokens_details?.audio_tokens!==null&&{audio:v.completion_tokens_details?.audio_tokens},...v.completion_tokens_details?.reasoning_tokens!==null&&{reasoning:v.completion_tokens_details?.reasoning_tokens}};yield new n({message:new h1({content:"",response_metadata:{usage:{...v}},usage_metadata:{input_tokens:v.prompt_tokens,output_tokens:v.completion_tokens,total_tokens:v.total_tokens,...Object.keys(Z).length>0&&{input_token_details:Z},...Object.keys(K).length>0&&{output_token_details:K}}}),text:""})}if(U.signal?.aborted)throw Error("AbortError")}async completionWithRetry(G,U){let L=this._getClientOptions(U),W=G.response_format&&G.response_format.type==="json_schema";return this.caller.call(async()=>{try{if(W&&!G.stream)return await this.client.chat.completions.parse(G,L);else return await this.client.chat.completions.create(G,L)}catch(X){throw D1(X)}})}_convertCompletionsDeltaToBaseMessageChunk(G,U,L){return g({delta:G,rawResponse:U,includeRawResponse:this.__includeRawResponse,defaultRole:L})}_convertCompletionsMessageToBaseMessage(G,U){return c({message:G,rawResponse:U,includeRawResponse:this.__includeRawResponse})}}import{createMiddleware as iG}from"langchain";import{z as O}from"zod";import{MessagesAnnotation as w1}from"@langchain/langgraph";import{SubAgentAnnotation as f1,SubAgentStateSchema as N1}from"@langgraph-js/standard-agent";var vU=T.extend(N1.shape).extend({provider_id:O.string().default("openai"),provider_type:O.string().default("openai"),model_id:O.string().default("qwen-plus"),agent_name:O.string().default("Code Agent"),switch_command:O.string().optional(),enable_thinking:O.boolean().default(!0),user_id:O.string().optional(),thread_id:O.string().optional(),cwd:O.string().default(process.cwd())}),l=_(f1,w1).build({provider_id:q(()=>"openai"),provider_type:q(()=>"openai"),model_id:q(()=>"qwen-plus"),agent_name:q(()=>"Code Agent"),switch_command:q(()=>null),enable_thinking:q(()=>!0),user_id:q(()=>""),thread_id:q(()=>""),cwd:q(()=>process.cwd())});import{ChatAnthropic as A1}from"@langchain/anthropic";import{ChatGoogleGenerativeAI as b1}from"@langchain/google-genai";var t=async(G,U={})=>{let{modelProvider:L,enableThinking:W=!0}=U,X="v1",B;if(L==="anthropic")B=new A1({model:G,streamUsage:!0,streaming:!0,maxRetries:1,maxTokens:64000,thinking:W?{budget_tokens:1024,type:"enabled"}:void 0,apiKey:U.apiKey,anthropicApiUrl:U.baseURL,metadata:U.metadata,outputVersion:"v1"});else if(L==="gemini"||L==="google")console.log(process.env.GOOGLE_BASE_URL),B=new b1({model:G,apiKey:U.apiKey,baseUrl:U.baseURL||process.env.GOOGLE_BASE_URL,maxRetries:1,streaming:!0,streamUsage:!0,thinkingConfig:{},metadata:U.metadata,outputVersion:"v1"});else B=new R({model:G,configuration:{baseURL:U.baseURL,apiKey:U.apiKey},streamUsage:!0,maxRetries:1,modelKwargs:W?{thinking:{type:"enabled"}}:void 0,metadata:U.metadata,outputVersion:"v1"});return B};import{createAgent as M1,tool as C1}from"langchain";import{anthropicPromptCachingMiddleware as u1}from"@langgraph-js/standard-agent";import{MCPMiddleware as T1}from"@langgraph-js/standard-agent";class h extends T1{constructor(G){super({configProvider:async()=>h.loadConfigFromStore(),cache:G})}static async loadConfigFromStore(){try{let G=new s;await G.initialize();let U=await G.getConfig();if(!U.mcp_config||Object.keys(U.mcp_config).length===0)return null;return{servers:U.mcp_config}}catch(G){return console.error("Failed to load MCP config from store:",G),null}}}import{humanInTheLoopMiddleware as k1}from"@langgraph-js/standard-agent";var r1={ask_user_questions:{allowedDecisions:["respond","approve","reject","edit"]}};async function SU(G,U,L,W,X){let B=!!X?.parent_id,J=await U.getAgent(G);if(!J)throw Error(`Agent not found: ${G}`);let v=await U.validateAgent(G);if(!v.valid)throw Error(`Agent validation failed: ${JSON.stringify(v.errors)}`);let Z=await t(L.model_id,{modelProvider:L.provider_id,streamUsage:!0,enableThinking:L.enable_thinking,metadata:{parent_id:X?.parent_id}}),K=[],Q=U.tools;for(let[j,y]of Object.entries(J.tools)){let E=Q.getImplementation(j);if(!E){console.warn(`Tool ${j} not found in registry`);continue}if(!E.name||!y)continue;let o=C1(async(e)=>{let z=await E.execute(e);if(z&&typeof z==="object"&&"content"in z)return z.content;return z},{name:E.name,description:E.description,schema:E.paramsSchema});K.push(o)}let x=[];for(let[j,y]of Object.entries(J.middleware)){if(j==="subagents"&&B)continue;let E=U.middlewares.getImplementation(j);if(!y)break;x.push(await E.execute(y.customParams||{}))}let H=new h;x.push(H);let Y={...r1};if(process.env.YOLO_MODE!=="true")Object.assign(Y,{terminal:{allowedDecisions:["approve","reject","edit"]}});if(x.push(k1({interruptOn:Y})),process.env.MODEL_PROVIDER==="anthropic")x.push(u1());let V=await U.getPrompt(J.systemPromptId);if(!V)throw Error(`Prompt not found: ${J.systemPromptId}`);let F=V.content+`
24
-
25
- ${await a(L)}`;return M1({name:B?`subagent_${X.parent_id}`:J.name,model:Z,systemPrompt:F,tools:K,stateSchema:l,middleware:x})}async function wU(G){return(await G.listAgents()).map((L)=>L.id)}
26
- export{V0 as La,vU as Ma,l as Na,t as Oa,SU as Pa,wU as Qa};
@@ -1 +0,0 @@
1
- import{qb as a}from"./chunk-fbg1z6br.js";import"./chunk-fzn8xq6f.js";export{a as FileSystemSkillStore};
@@ -1 +0,0 @@
1
- import{rb as a}from"./chunk-tvqxepjm.js";import"./chunk-fzn8xq6f.js";export{a as FileSystemPluginStore};
@@ -1 +0,0 @@
1
- import{za as a}from"./chunk-0kqqh5rr.js";import"./chunk-0f022x9v.js";import"./chunk-fzn8xq6f.js";export{a as MemoriesMiddleware};
@@ -1 +0,0 @@
1
- import{wa as a,xa as b,ya as c}from"./chunk-fnrbq03p.js";import"./chunk-0a26n1zy.js";import"./chunk-vyejbw66.js";import"./chunk-4fwb6qr1.js";import"./chunk-xemvstcq.js";import"./chunk-p8fbtgk3.js";import"./chunk-fbg1z6br.js";import"./chunk-tvqxepjm.js";import"./chunk-fzn8xq6f.js";export{c as getAgentListFromPackage,a as createSubAgentsMiddleware,b as SubAgentsMiddleware};
@@ -1,2 +0,0 @@
1
- import{R as U,T as Y,U as B,V as W}from"./chunk-g1bcpymb.js";import{ea as q,fa as T,ga as O,oa as j}from"./chunk-emv4z7ck.js";import{nb as k}from"./chunk-xemvstcq.js";import{sb as b}from"./chunk-fzn8xq6f.js";var J=b(q(),1);function K({manager:z,enabled:N=!0}){return Y({queryKey:W.config.detail(),queryFn:async()=>{return await z.initialize(),await z.getConfig()},enabled:N,staleTime:300000,gcTime:600000})}function P({manager:z}){let N=U();return B({mutationFn:async(R)=>{return await z.updateConfig(R),await z.getConfig()},onSuccess:(R)=>{N.setQueryData(W.config.detail(),R),N.invalidateQueries({queryKey:W.providers.all}),N.invalidateQueries({queryKey:W.models.all})}})}var X=b(j(),1),H=null,Z=null;async function S(){if(!H){if(!Z)Z=k().then((z)=>{return H=z,Z=null,z});return Z}return Promise.resolve(H)}var I=J.createContext(void 0),E=({manager:z,get_allowed_models:N,children:R})=>{let{data:G,isLoading:V,error:x}=K({manager:z}),$=P({manager:z}),{data:F=[],isLoading:h,error:p}=Y({queryKey:W.models.available(),queryFn:N,staleTime:1800000,retry:1}),A=J.useMemo(()=>{return{provider_id:G?.provider_id||"default",model_id:G?.model_id||F[0]?.id||"default",mcp_config:G?.mcp_config,enable_thinking:G?.enable_thinking??!0,switch_command:G?.switch_command||""}},[G?.provider_id,G?.model_id,G?.mcp_config,G?.enable_thinking,G?.switch_command,F]),Q=J.useMemo(()=>{return G?.compact_mode??!1},[G?.compact_mode]),w=async()=>{await $.mutateAsync({compact_mode:!Q})},v=J.useMemo(()=>{return G?.show_detailed_info??!1},[G?.show_detailed_info]),L=async()=>{await $.mutateAsync({show_detailed_info:!v})},D=async(_)=>{await $.mutateAsync(_)};if(V||h)return X.jsxDEV(T,{padding:2,children:X.jsxDEV(O,{children:"Loading configuration..."},void 0,!1,void 0,this)},void 0,!1,void 0,this);return X.jsxDEV(I.Provider,{value:{config:G||null,updateConfig:D,extraParams:A,AVAILABLE_MODELS:F,manager:z,compactMode:Q,toggleCompactMode:w,showDetailedInfo:v,toggleDetailedInfo:L},children:R},void 0,!1,void 0,this)},s=()=>{let z=J.useContext(I);if(z===void 0)throw Error("useSettings must be used within a SettingsProvider");return z},r=({get_allowed_models:z,children:N})=>{let[R,G]=J.useState(null);if(J.useEffect(()=>{S().then(G)},[]),!R)return X.jsxDEV(T,{padding:2,children:X.jsxDEV(O,{children:"Initializing configuration manager..."},void 0,!1,void 0,this)},void 0,!1,void 0,this);return X.jsxDEV(E,{manager:R,get_allowed_models:z,children:N},void 0,!1,void 0,this)};
2
- export{s as N,r as O};
@@ -1 +0,0 @@
1
- import{R as C,T as S,U as y,V as w}from"./chunk-g1bcpymb.js";import{ea as l,fa as Z,ga as J,ja as j,na as d,oa as m,qa as D,sa as u}from"./chunk-emv4z7ck.js";import{sb as q,wb as p}from"./chunk-fzn8xq6f.js";var L=q(l(),1);function f({filter:H,enabled:Q=!0}){return S({queryKey:w.tasks.list(H),queryFn:async()=>{let{getTasksStore:X}=await import("./chunk-mfjc63aw.js"),Y=X(process.cwd());if(await Y.initialize(),H)return await Y.getTasksByStatus(H);return await Y.getAllTasks()},enabled:Q,staleTime:30000})}function I(){let H=C();return y({mutationFn:async(Q)=>{let{getTasksStore:X}=await import("./chunk-mfjc63aw.js"),Y=X(process.cwd());return await Y.initialize(),await Y.deleteTask(Q)},onSuccess:(Q,X)=>{H.invalidateQueries({queryKey:w.tasks.all}),H.removeQueries({queryKey:w.tasks.detail(X)})}})}var z=q(m(),1),F={pickup:{emoji:"\uD83D\uDCE5",color:"cyan",label:"待领取"},running:{emoji:"\uD83D\uDD04",color:"yellow",label:"运行中"},complete:{emoji:"✅",color:"green",label:"已完成"},error:{emoji:"❌",color:"red",label:"失败"},review:{emoji:"\uD83D\uDC40",color:"blue",label:"待审核"},feedback:{emoji:"\uD83D\uDCAC",color:"magenta",label:"待反馈"}},i={simple:{emoji:"\uD83D\uDFE2",label:"简单"},medium:{emoji:"\uD83D\uDFE1",label:"中等"},complex:{emoji:"\uD83D\uDD34",label:"复杂"}},E=({task:H,onClose:Q,onExecuteTask:X,onDelete:Y})=>{d((K,M)=>{if(M.escape)Q();else if(M.return&&X){if(H.status==="pickup"||H.status==="error"||H.status==="feedback")X(H)}else if((M.backspace||M.delete)&&Y)Y(H)});let R=H.status?F[H.status]:F.pickup,A=H.status==="pickup"||H.status==="error"||H.status==="feedback",G=H.complexity?i[H.complexity]:null;return z.jsxDEV(Z,{flexDirection:"column",paddingX:1,children:[z.jsxDEV(Z,{borderStyle:"single",paddingX:1,marginBottom:1,children:[z.jsxDEV(J,{bold:!0,color:"cyan",children:[R.emoji," 任务预览"]},void 0,!0,void 0,this),z.jsxDEV(Z,{flexGrow:1},void 0,!1,void 0,this),A&&X&&z.jsxDEV(J,{color:"green",children:"Enter 执行"},void 0,!1,void 0,this),Y&&z.jsxDEV(z.Fragment,{children:[A&&X&&z.jsxDEV(J,{dimColor:!0,children:" | "},void 0,!1,void 0,this),z.jsxDEV(J,{color:"red",children:"Delete 删除"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),z.jsxDEV(J,{dimColor:!0,children:" | "},void 0,!1,void 0,this),z.jsxDEV(J,{dimColor:!0,children:"Esc 退出"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),z.jsxDEV(Z,{marginBottom:1,children:z.jsxDEV(J,{bold:!0,color:"white",children:H.title},void 0,!1,void 0,this)},void 0,!1,void 0,this),z.jsxDEV(Z,{marginBottom:1,children:[z.jsxDEV(J,{color:R.color,children:[R.emoji," ",R.label]},void 0,!0,void 0,this),G&&z.jsxDEV(z.Fragment,{children:[z.jsxDEV(J,{children:" • "},void 0,!1,void 0,this),z.jsxDEV(J,{children:[G.emoji," ",G.label]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),H.estimatedTime&&z.jsxDEV(z.Fragment,{children:[z.jsxDEV(J,{children:" • "},void 0,!1,void 0,this),z.jsxDEV(J,{children:["⏱️ ",H.estimatedTime]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),z.jsxDEV(Z,{marginBottom:1,flexDirection:"column",children:[z.jsxDEV(J,{color:"gray",bold:!0,children:"描述:"},void 0,!1,void 0,this),z.jsxDEV(J,{children:H.description},void 0,!1,void 0,this)]},void 0,!0,void 0,this),z.jsxDEV(Z,{marginBottom:1,children:[z.jsxDEV(J,{color:"gray",children:"ID: "},void 0,!1,void 0,this),z.jsxDEV(J,{dimColor:!0,children:H.id},void 0,!1,void 0,this)]},void 0,!0,void 0,this),H.agentType&&z.jsxDEV(Z,{marginBottom:1,children:[z.jsxDEV(J,{color:"gray",children:"建议 Agent: "},void 0,!1,void 0,this),z.jsxDEV(J,{color:"yellow",children:H.agentType},void 0,!1,void 0,this)]},void 0,!0,void 0,this),H.assignedTo&&z.jsxDEV(Z,{marginBottom:1,children:[z.jsxDEV(J,{color:"gray",children:"分配给: "},void 0,!1,void 0,this),z.jsxDEV(J,{color:"blue",children:H.assignedTo},void 0,!1,void 0,this)]},void 0,!0,void 0,this),H.threadId&&z.jsxDEV(Z,{marginBottom:1,children:[z.jsxDEV(J,{color:"gray",children:"Thread ID: "},void 0,!1,void 0,this),z.jsxDEV(J,{dimColor:!0,children:H.threadId},void 0,!1,void 0,this)]},void 0,!0,void 0,this),H.dependencies&&H.dependencies.length>0&&z.jsxDEV(Z,{marginBottom:1,flexDirection:"column",children:[z.jsxDEV(J,{color:"gray",bold:!0,children:"依赖任务:"},void 0,!1,void 0,this),z.jsxDEV(J,{dimColor:!0,children:H.dependencies.join(", ")},void 0,!1,void 0,this)]},void 0,!0,void 0,this),H.acceptanceCriteria&&H.acceptanceCriteria.length>0&&z.jsxDEV(Z,{marginBottom:1,flexDirection:"column",children:[z.jsxDEV(J,{color:"gray",bold:!0,children:"验收标准:"},void 0,!1,void 0,this),H.acceptanceCriteria.map((K,M)=>z.jsxDEV(J,{dimColor:!0,children:[M+1,". ",K]},`ac-${M}-${H.id}`,!0,void 0,this))]},void 0,!0,void 0,this),H.children&&H.children.length>0&&z.jsxDEV(Z,{flexDirection:"column",children:[z.jsxDEV(J,{color:"gray",bold:!0,children:["子任务 (",H.children.length,"):"]},void 0,!0,void 0,this),H.children.map((K,M)=>{let U=K.status?F[K.status]:F.pickup;return z.jsxDEV(Z,{children:z.jsxDEV(J,{color:U.color,children:[U.emoji," ",M+1,". ",K.title]},void 0,!0,void 0,this)},K.id,!1,void 0,this)})]},void 0,!0,void 0,this),H.status==="error"&&H.error&&z.jsxDEV(Z,{marginTop:1,flexDirection:"column",borderStyle:"single",paddingX:1,children:[z.jsxDEV(J,{color:"red",bold:!0,children:"错误:"},void 0,!1,void 0,this),z.jsxDEV(J,{color:"red",children:H.error.message},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)},V=E;var $=q(m(),1),P={pickup:{emoji:"\uD83D\uDCE5",color:"cyan",label:"待领取"},running:{emoji:"\uD83D\uDD04",color:"yellow",label:"运行中"},complete:{emoji:"✅",color:"green",label:"已完成"},error:{emoji:"❌",color:"red",label:"失败"},review:{emoji:"\uD83D\uDC40",color:"blue",label:"待审核"},feedback:{emoji:"\uD83D\uDCAC",color:"magenta",label:"待反馈"}},r={simple:{emoji:"\uD83D\uDFE2",label:"简单"},medium:{emoji:"\uD83D\uDFE1",label:"中等"},complex:{emoji:"\uD83D\uDD34",label:"复杂"}},n=({onClose:H,onExecuteTask:Q})=>{let{data:X=[]}=f(),Y=I(),[R,A]=L.useState(null),G=L.useRef(A),K=L.useRef(Q);L.default.useEffect(()=>{G.current=A},[A]),L.default.useEffect(()=>{K.current=Q},[Q]);let M=L.useCallback(()=>{A(null)},[]),U=L.useCallback(async(W)=>{await Y.mutateAsync(W.id),A((N)=>N?.id===W.id?null:N)},[Y]),v=L.useCallback((W,N,B)=>{let O=W.status?P[W.status]:P.pickup,_=W.complexity?r[W.complexity]:null;return $.jsxDEV(D,{isSelected:B,children:$.jsxDEV(Z,{children:[$.jsxDEV(J,{color:"cyan",dimColor:O===P.complete,children:[O.emoji," ",N+1,". ",W.title]},void 0,!0,void 0,this),$.jsxDEV(j,{},void 0,!1,void 0,this),$.jsxDEV(J,{color:"yellow",dimColor:!0,children:O.label},void 0,!1,void 0,this),_&&$.jsxDEV(J,{dimColor:!0,children:[_.emoji," ",_.label]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)},`task-${W.id}`,!1,void 0,this)},[]),g=L.useCallback((W)=>{let N=W.filter((b)=>b.status==="running").length,B=W.filter((b)=>b.status==="complete").length,O=W.filter((b)=>b.status==="error").length,_=W.filter((b)=>b.status==="pickup"||b.status==="error"||b.status==="feedback").length;return $.jsxDEV(J,{color:"gray",children:["运行: ",N," | 完成: ",B," | 失败: ",O,_>0&&$.jsxDEV(J,{color:"green",children:[" | 可执行: ",_]},void 0,!0,void 0,this),$.jsxDEV(J,{dimColor:!0,children:" | Backspace 删除"},void 0,!1,void 0,this)]},void 0,!0,void 0,this)},[]),h=L.useCallback((W)=>{G.current(W)},[]),c=L.default.useMemo(()=>({id:"tasks",title:"任务看板",icon:"\uD83D\uDCCB",dataSource:async()=>X,searchable:!0,searchFields:["title","description"],searchPlaceholder:"搜索任务...",filterable:!0,filters:[{id:"all",label:"全部",predicate:()=>!0},{id:"pickup",label:"待领取",predicate:(W)=>W.status==="pickup"},{id:"running",label:"运行中",predicate:(W)=>W.status==="running"},{id:"complete",label:"已完成",predicate:(W)=>W.status==="complete"},{id:"error",label:"失败",predicate:(W)=>W.status==="error"}],defaultFilter:"all",itemHeight:3,visibleCount:10,renderItem:v,onSelect:h,onDelete:U,showCount:!0,statusInfo:g}),[X,v,g,h,U]);return $.jsxDEV($.Fragment,{children:R?$.jsxDEV(V,{task:R,onClose:M,onExecuteTask:Q,onDelete:U},void 0,!1,void 0,this):$.jsxDEV(u,{config:c,onClose:H},void 0,!1,void 0,this)},void 0,!1,void 0,this)},Zz=n;export{Zz as default};
@@ -1 +0,0 @@
1
- import{E as s,F as r}from"./chunk-6hpehtte.js";import{M as o}from"./chunk-8vkm1ts6.js";import{N as T}from"./chunk-ema4rc9d.js";import"./chunk-g1bcpymb.js";import{ea as l,fa as Y,ga as H,ja as u,na as p,oa as f,qa as i,sa as t}from"./chunk-emv4z7ck.js";import"./chunk-4fwb6qr1.js";import"./chunk-xemvstcq.js";import"./chunk-p8fbtgk3.js";import"./chunk-fbg1z6br.js";import"./chunk-tvqxepjm.js";import{sb as S}from"./chunk-fzn8xq6f.js";var qq=S(l(),1);var _=S(l(),1);var $=S(f(),1),a={openai:"\uD83E\uDD16",anthropic:"\uD83E\uDDE0",gemini:"✨",default:"\uD83D\uDD2E"};var Gq=({onClose:O})=>{let{extraParams:F,config:U,updateConfig:B}=T(),[X,A]=_.useState(""),k=_.useRef([]),G=_.useMemo(()=>{if(!U?.providers||U.providers.length===0)return[];return U.providers.map((q)=>{let Z=q.type||"default";return{id:q.id,label:q.id,icon:a[Z]||a.default,config:q}})},[U?.providers]);_.useMemo(()=>{if(G.length>0&&!X){let q=G.find((Z)=>Z.id===F.provider_id);A(q?.id||G[0].id)}},[G,F.provider_id,X]);let h=G.find((q)=>q.id===X),{data:P,isLoading:w,error:b}=s({provider:h?.config||null,enabled:!!X}),c=_.useMemo(()=>{let q=(P||[]).map((Z)=>({id:Z.id,name:Z.name}));return k.current=q,q},[P]),C=_.useCallback(async()=>{return k.current},[]),I=_.useCallback((q,Z,V)=>{let m=q.id===F.provider_id+"-"+q.id;return $.jsxDEV(i,{isSelected:V,isCurrent:m,children:[$.jsxDEV(H,{bold:!0,children:[Z+1,". ",q.id]},void 0,!0,void 0,this),$.jsxDEV(H,{dimColor:!0,children:[" ",q.name!==q.id?`(${q.name})`:""]},void 0,!0,void 0,this)]},`model-${Z}-${q.id}`,!0,void 0,this)},[F.provider_id]),D=_.useCallback((q)=>{return q.id===F.provider_id+"-"+q.id},[F.provider_id]),R=_.useCallback(async(q)=>{await B({provider_id:X,model_id:q.id}),O()},[B,X,O]),j=_.useCallback((q)=>{if(G.length<=1)return;let Z=G.findIndex((m)=>m.id===X),V=q==="left"?(Z-1+G.length)%G.length:(Z+1)%G.length;A(G[V].id)},[X,G]),E=_.useMemo(()=>{let q=h?.label||"加载中...";return{id:`model-${X}`,title:`模型选择 - ${q}`,icon:h?.icon||"\uD83D\uDD2E",dataSource:C,searchable:!0,searchFields:["id","name"],searchPlaceholder:"搜索模型...",itemHeight:1,visibleCount:10,renderItem:I,isSelected:D,onSelect:R,showCount:!0,keyMap:{leftArrow:(Z)=>{j("left")},rightArrow:(Z)=>{j("right")}}}},[X,h,C,I,D,R,j]);if(G.length===0)return $.jsxDEV(Y,{flexDirection:"column",paddingX:2,paddingY:1,children:[$.jsxDEV(H,{color:"yellow",children:"⚠️ 未配置任何 Provider"},void 0,!1,void 0,this),$.jsxDEV(H,{color:"gray",dimColor:!0,children:"请先配置 Provider 后再查看模型列表"},void 0,!1,void 0,this)]},void 0,!0,void 0,this);let g=h?.config.apiKey;return $.jsxDEV(Y,{flexDirection:"column",children:[$.jsxDEV(Y,{gap:1,paddingX:1,paddingY:1,children:G.map((q)=>$.jsxDEV(H,{bold:q.id===X,color:q.id===X?"cyan":"gray",children:[q.icon," ",q.label,q.id===X&&" [当前]",q.id===X&&!g&&" (未配置 API Key)"]},q.id,!0,void 0,this))},void 0,!1,void 0,this),w?$.jsxDEV(Y,{paddingX:2,paddingY:1,children:$.jsxDEV(H,{color:"gray",children:"加载模型列表中..."},void 0,!1,void 0,this)},void 0,!1,void 0,this):b?$.jsxDEV(Y,{paddingX:2,paddingY:1,children:$.jsxDEV(H,{color:"red",children:["加载失败: ",b.message]},void 0,!0,void 0,this)},void 0,!1,void 0,this):!g?$.jsxDEV(Y,{paddingX:2,paddingY:1,children:$.jsxDEV(H,{color:"yellow",children:"请先配置 API Key"},void 0,!1,void 0,this)},void 0,!1,void 0,this):$.jsxDEV(t,{config:E,onClose:O},void 0,!1,void 0,this)]},void 0,!0,void 0,this)},d=Gq;var z=S(l(),1);var Q=S(f(),1),Hq=({onClose:O})=>{let{config:F,updateConfig:U}=T(),[B,X]=z.useState("list"),[A,k]=z.useState(null),[G,h]=z.useState(0),[P,w]=z.useState(null),b=z.useCallback(()=>w(null),[]);o(b,P?3000:null);let c=z.useRef(B),C=z.useRef(G),I=z.useRef([]),D=z.useRef(!0);z.useEffect(()=>{c.current=B},[B]),z.useEffect(()=>{C.current=G},[G]);let R=F?.providers||[];z.useEffect(()=>{I.current=R},[R]);let j=z.useCallback(()=>{D.current=!0,k(null),X("form"),w(null)},[]),E=z.useCallback(()=>{let J=I.current,W=C.current,N=J[W];if(!N)return;D.current=!1,k(N),X("form"),w(null)},[]),g=z.useCallback(()=>{X("list"),k(null),w(null)},[]),q=z.useCallback(async(J)=>{let W=I.current,N=D.current,K=N?[...W,J]:W.map((L)=>L.id===J.id?J:L);if(await U({providers:K}),w(N?`已添加 Provider: ${J.id}`:`已更新 Provider: ${J.id}`),N){let L=K.findIndex((M)=>M.id===J.id);h(L>=0?L:0)}X("list"),k(null),w(null)},[U]),Z=z.useCallback(async()=>{let J=I.current,W=C.current,N=J[W];if(!N)return;if(J.length<=1){w("无法删除最后一个 Provider");return}let K=J.filter((M)=>M.id!==N.id);await U({providers:K});let L=Math.min(W,K.length-1);h(L>=0?L:0),w(`已删除 Provider: ${N.id}`)},[U]),V=z.useRef(j),m=z.useRef(E),v=z.useRef(Z),x=z.useRef(g),n=z.useRef(O);z.useEffect(()=>{V.current=j},[j]),z.useEffect(()=>{m.current=E},[E]),z.useEffect(()=>{v.current=Z},[Z]),z.useEffect(()=>{x.current=g},[g]),z.useEffect(()=>{n.current=O},[O]),p((J,W)=>{let N=c.current,K=I.current,L=C.current;if(N==="form"){if(W.escape)x.current();return}if(W.upArrow)h((M)=>M>0?M-1:K.length-1);else if(W.downArrow)h((M)=>M<K.length-1?M+1:0);else if(J==="n"||J==="N")V.current();else if((J==="e"||J==="E"||W.return)&&K[L])m.current();else if((J==="d"||J==="D")&&K[L])v.current();else if(W.escape)n.current()},{isActive:!0});let zq=z.useMemo(()=>{if(R.length===0)return Q.jsxDEV(Y,{paddingX:2,paddingY:1,children:Q.jsxDEV(H,{color:"yellow",children:"未配置任何 Provider"},void 0,!1,void 0,this)},void 0,!1,void 0,this);return Q.jsxDEV(Y,{flexDirection:"column",paddingX:2,gap:1,children:[R.map((J,W)=>{let N=!!J.apiKey,K=N?"green":"yellow";return Q.jsxDEV(Y,{marginBottom:0,gap:1,children:[Q.jsxDEV(H,{color:W===G?"cyan":"gray",bold:W===G,children:W===G?">":" "},void 0,!1,void 0,this),Q.jsxDEV(H,{bold:W===G,color:W===G?"cyan":void 0,children:J.id},void 0,!1,void 0,this),Q.jsxDEV(u,{},void 0,!1,void 0,this),Q.jsxDEV(H,{color:"gray",dimColor:W!==G,children:[" ",J.type]},void 0,!0,void 0,this),Q.jsxDEV(H,{color:K,dimColor:W!==G,children:[" ","[",N?"已配置":"未配置","]"]},void 0,!0,void 0,this)]},J.id,!0,void 0,this)}),Q.jsxDEV(Y,{marginTop:1,children:Q.jsxDEV(H,{color:"gray",dimColor:!0,children:[Q.jsxDEV(H,{color:"cyan",children:"↑↓"},void 0,!1,void 0,this)," 导航 ",Q.jsxDEV(H,{color:"cyan",children:"n"},void 0,!1,void 0,this)," 新增 ",Q.jsxDEV(H,{color:"cyan",children:"d"},void 0,!1,void 0,this)," ","删除 ",Q.jsxDEV(H,{color:"cyan",children:"Esc"},void 0,!1,void 0,this)," 关闭"]},void 0,!0,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this)},[R,G]);return Q.jsxDEV(Y,{flexDirection:"column",children:[Q.jsxDEV(Y,{paddingX:2,paddingY:1,children:Q.jsxDEV(H,{bold:!0,color:"cyan",children:"Providers"},void 0,!1,void 0,this)},void 0,!1,void 0,this),B==="list"?zq:Q.jsxDEV(r,{provider:A||void 0,onCancel:g,onSave:q},void 0,!1,void 0,this),P&&Q.jsxDEV(Y,{paddingX:2,paddingY:0,children:Q.jsxDEV(H,{color:"green",children:P},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this)},e=Hq;var y=S(f(),1),Jq=({onClose:O,initialTab:F="model"})=>{let[U,B]=qq.useState(F);return p((X,A)=>{if(A.leftArrow&&A.alt)B("model");else if(A.rightArrow&&A.alt)B("provider");else if(A.escape)O()},{isActive:!0}),y.jsxDEV(Y,{flexDirection:"column",width:"100%",borderStyle:"single",borderDimColor:!0,children:[y.jsxDEV(Y,{flexDirection:"column",paddingX:0,paddingY:0,children:[U==="model"&&y.jsxDEV(d,{onClose:O},void 0,!1,void 0,this),U==="provider"&&y.jsxDEV(e,{onClose:O},void 0,!1,void 0,this)]},void 0,!0,void 0,this),y.jsxDEV(Y,{flexDirection:"row",gap:2,paddingX:2,paddingY:1,borderTop:!0,borderBottom:!1,borderLeft:!1,borderRight:!1,borderStyle:"single",borderColor:"gray",children:[y.jsxDEV(H,{bold:U==="model",color:U==="model"?"cyan":"gray",children:"\uD83E\uDD16 Model"},void 0,!1,void 0,this),y.jsxDEV(H,{bold:U==="provider",color:U==="provider"?"cyan":"gray",children:"\uD83D\uDD0C Provider"},void 0,!1,void 0,this),y.jsxDEV(u,{},void 0,!1,void 0,this),y.jsxDEV(H,{dimColor:!0,children:"Alt+ < >"},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)},Iq=Jq;export{Iq as default};
@@ -1 +0,0 @@
1
- import{nb as a,ob as b}from"./chunk-xemvstcq.js";import"./chunk-fzn8xq6f.js";export{a as createFSManager,b as createCustomManager};
@@ -1,2 +0,0 @@
1
- import{u as i}from"./chunk-pw18cs39.js";import{$ as t,W as s,X as j,Y as o,Z as d,_ as r,aa as a}from"./chunk-jwzkek1t.js";import{wb as R}from"./chunk-fzn8xq6f.js";import{AIMessageChunk as O0}from"@langchain/core/messages";import{Command as D0,Send as K0}from"@langchain/langgraph";import{concat as V0}from"@langchain/core/utils/stream";import{load as F0}from"@langchain/core/load";var V=[];for(let $=0;$<256;++$)V.push(($+256).toString(16).slice(1));function p($,x=0){return(V[$[x+0]]+V[$[x+1]]+V[$[x+2]]+V[$[x+3]]+"-"+V[$[x+4]]+V[$[x+5]]+"-"+V[$[x+6]]+V[$[x+7]]+"-"+V[$[x+8]]+V[$[x+9]]+"-"+V[$[x+10]]+V[$[x+11]]+V[$[x+12]]+V[$[x+13]]+V[$[x+14]]+V[$[x+15]]).toLowerCase()}import{randomFillSync as P0}from"node:crypto";var G=new Uint8Array(256),S=G.length;function w(){if(S>G.length-16)P0(G),S=0;return G.slice(S,S+=16)}var m={};function Q0($,x,X){let Y;if($)Y=l($.random??$.rng?.()??w(),$.msecs,$.seq,x,X);else{let Z=Date.now(),J=w();z0(m,Z,J),Y=l(J,m.msecs,m.seq,x,X)}return x??p(Y)}function z0($,x,X){if($.msecs??=-1/0,$.seq??=0,x>$.msecs)$.seq=X[6]<<23|X[7]<<16|X[8]<<8|X[9],$.msecs=x;else if($.seq=$.seq+1|0,$.seq===0)$.msecs++;return $}function l($,x,X,Y,Z=0){if($.length<16)throw Error("Random bytes length must be >= 16");if(!Y)Y=new Uint8Array(16),Z=0;else if(Z<0||Z+16>Y.length)throw RangeError(`UUID byte range ${Z}:${Z+15} is out of buffer bounds`);return x??=Date.now(),X??=$[6]*127<<24|$[7]<<16|$[8]<<8|$[9],Y[Z++]=x/1099511627776&255,Y[Z++]=x/4294967296&255,Y[Z++]=x/16777216&255,Y[Z++]=x/65536&255,Y[Z++]=x/256&255,Y[Z++]=x&255,Y[Z++]=112|X>>>28&15,Y[Z++]=X>>>20&255,Y[Z++]=128|X>>>14&63,Y[Z++]=X>>>6&255,Y[Z++]=X<<2&255|$[10]&3,Y[Z++]=$[11],Y[Z++]=$[12],Y[Z++]=$[13],Y[Z++]=$[14],Y[Z++]=$[15],Y}var B=Q0;import"kysely";var A0=($)=>{let x=$.goto!=null&&!Array.isArray($.goto)?[$.goto]:$.goto;return new D0({goto:x?.map((X)=>{if(typeof X!=="string")return new K0(X.node,X.input);return X}),update:$.update??void 0,resume:$.resume})},n="[...]",B0="[Circular]",M=[],E=[];function L0(){return{depthLimit:Number.MAX_SAFE_INTEGER,edgesLimit:Number.MAX_SAFE_INTEGER}}function N0($,x,X,Y){if(typeof Y>"u")Y=L0();k($,"",0,[],void 0,0,Y);var Z;try{if(E.length===0)Z=JSON.stringify($,x,X);else Z=JSON.stringify($,R0(x),X)}catch(U){return JSON.stringify("[unable to serialize, circular reference is too complex to analyze]")}finally{while(M.length!==0){var J=M.pop();if(J.length===4)Object.defineProperty(J[0],J[1],J[3]);else J[0][J[1]]=J[2]}}return Z}function b($,x,X,Y){var Z=Object.getOwnPropertyDescriptor(Y,X);if(Z.get!==void 0)if(Z.configurable)Object.defineProperty(Y,X,{value:$}),M.push([Y,X,x,Z]);else E.push([x,X,$]);else Y[X]=$,M.push([Y,X,x])}function k($,x,X,Y,Z,J,U){J+=1;var H;if(typeof $==="object"&&$!==null){for(H=0;H<Y.length;H++)if(Y[H]===$){b(B0,$,x,Z);return}if(typeof U.depthLimit<"u"&&J>U.depthLimit){b(n,$,x,Z);return}if(typeof U.edgesLimit<"u"&&X+1>U.edgesLimit){b(n,$,x,Z);return}if(Y.push($),Array.isArray($))for(H=0;H<$.length;H++)k($[H],H,H,Y,$,J,U);else{var W=Object.keys($);for(H=0;H<W.length;H++){var Q=W[H];k($[Q],Q,H,Y,$,J,U)}}Y.pop()}}function R0($){return $=typeof $<"u"?$:function(x,X){return X},function(x,X){if(E.length>0)for(var Y=0;Y<E.length;Y++){var Z=E[Y];if(Z[1]===x&&Z[0]===X){X=Z[2],E.splice(Y,1);break}}return $.call(this,x,X)}}function _0($){return $!==null&&$.lc===1&&$.type==="constructor"&&Array.isArray($.id)}async function y($){if($&&typeof $==="object")if(Array.isArray($))return await Promise.all($.map((X)=>y(X)));else{let x={};for(let[X,Y]of Object.entries($))x[X]=await y(Y);if(x.lc===2&&x.type==="undefined")return;else if(x.lc===2&&x.type==="constructor"&&Array.isArray(x.id))try{let X=x.id[x.id.length-1],Y;switch(X){case"Set":Y=Set;break;case"Map":Y=Map;break;case"RegExp":Y=RegExp;break;case"Error":Y=Error;break;default:return x}if(x.method)return Y[x.method](...x.args||[]);else return new Y(...x.args||[])}catch(X){return x}else if(_0(x))return F0(JSON.stringify(x));return x}return $}function v($,x,X,Y){return{lc:2,type:"constructor",id:[$.name],method:x??null,args:X??[],kwargs:Y??{}}}function E0($){if($===void 0)return{lc:2,type:"undefined"};else if($ instanceof Set||$ instanceof Map)return v($.constructor,void 0,[Array.from($)]);else if($ instanceof RegExp)return v(RegExp,void 0,[$.source,$.flags]);else if($ instanceof Error)return v($.constructor,void 0,[$.message]);else if($?.lg_name==="Send")return{node:$.node,args:$.args};else return $}class e{_dumps($){return new TextEncoder().encode(N0($,(X,Y)=>{return E0(Y)}))}async dumpsTyped($){if($ instanceof Uint8Array)return["bytes",$];else return["json",this._dumps($)]}async _loads($){let x=JSON.parse($);return y(x)}async loadsTyped($,x){if($==="bytes")return typeof x==="string"?new TextEncoder().encode(x):x;else if($==="json")return this._loads(typeof x==="string"?x:new TextDecoder().decode(x));else throw Error(`Unknown serialization type: ${$}`)}}class $0 extends i.default{constructor($,x=!0,X=300){super();this.id=$,this.compressMessages=x,this.ttl=X}serializer=new e;async encodeData($){let[x,X]=await this.serializer.dumpsTyped($);return X}async decodeData($){return await this.serializer.loadsTyped("json",$)}}class x0{queues=new Map;defaultCompressMessages;queueConstructor;constructor($,x={}){this.defaultCompressMessages=x.defaultCompressMessages??!0,this.queueConstructor=$}createQueue($,x=300){return this.queues.set($,new this.queueConstructor($,this.defaultCompressMessages,x)),this.queues.get($)}async getQueue($){let x=this.queues.get($);if(!x)if(await this.queueConstructor?.isQueueExist?.($))return this.createQueue($);else throw Error(`Queue with id '${$}' does not exist`);return x}async cancelQueue($){await this.removeQueue($)}async pushToQueue($,x){await(await this.getQueue($)).push(x)}async getQueueData($){let x=this.queues.get($);if(!x)throw Error(`Queue with id '${$}' does not exist`);return await x.getAll()}async clearQueue($){let x=this.queues.get($);if(x){let X=x.clear();if(X instanceof Promise)await X}}async removeQueue($){let x=this.queues.get($);if(!x)return!1;try{await x.cancel()}catch(X){console.error("Error cancelling queue:",X)}try{let X=x.clear();if(X instanceof Promise)await X}catch(X){console.error("Error clearing queue:",X)}if(typeof x.destroy==="function")try{await x.destroy()}catch(X){console.error("Error destroying queue:",X)}return this.queues.delete($)}getAllQueueIds(){return Array.from(this.queues.keys())}async getAllQueuesData(){let $={};for(let[x,X]of this.queues)$[x]=await X.getAll();return $}clearAllQueues(){for(let $ of this.queues.values())$.clear()}async copyQueue($,x,X){let Z=await(await this.getQueue($)).copyToQueue(x,X);return this.queues.set(x,Z),Z}}var T={};async function n0($,x){T[$]=x}async function X0($,x,X){if(!T[$])throw Error(`Graph "${$}" not found`);let Y=typeof T[$]==="function"?await T[$](x??{configurable:{}}):T[$];if(typeof X?.checkpointer<"u")Y.checkpointer=X?.checkpointer??F.globalCheckPointer;else Y.checkpointer=F.globalCheckPointer;return Y.store=X?.store??void 0,Y}class I{db;adapter;constructor($){this.db=$.db,this.adapter=$}async setup(){await this.adapter.createTables(this.db),await this.adapter.createIndexes(this.db)}async create($){let x=$?.threadId||B(),X=new Date,Y=$?.metadata||{},Z={};if($?.ifExists==="raise"){if(await this.db.selectFrom("threads").select("thread_id").where("thread_id","=",x).executeTakeFirst())throw Error(`Thread with ID ${x} already exists.`)}if($?.ifExists==="do_nothing"&&$?.threadId){let J=await this.db.selectFrom("threads").selectAll().where("thread_id","=",x).executeTakeFirst();if(J)return{thread_id:J.thread_id,created_at:this.adapter.dbToDate(J.created_at).toISOString(),updated_at:this.adapter.dbToDate(J.updated_at).toISOString(),state_updated_at:this.adapter.dbToDate(J.updated_at).toISOString(),metadata:this.adapter.dbToJson(J.metadata),status:J.status,values:J.values?this.adapter.dbToJson(J.values):null,interrupts:this.adapter.dbToJson(J.interrupts)}}return await this.db.insertInto("threads").values({thread_id:x,created_at:this.adapter.dateToDb(X),updated_at:this.adapter.dateToDb(X),metadata:this.adapter.jsonToDb(Y),status:"idle",values:null,interrupts:this.adapter.jsonToDb(Z)}).execute(),{thread_id:x,created_at:X.toISOString(),updated_at:X.toISOString(),state_updated_at:X.toISOString(),metadata:Y,status:"idle",values:null,interrupts:Z}}async search($){let x=this.db.selectFrom("threads"),X;if($?.select)X=new Set($.select);else if($?.withoutDetails)X=new Set(["thread_id","created_at","updated_at","metadata","status"]);else X=new Set(["thread_id","created_at","updated_at","metadata","status","values","interrupts"]);let Y=[];if(X.has("thread_id"))Y.push("thread_id");if(X.has("created_at"))Y.push("created_at");if(X.has("updated_at"))Y.push("updated_at");if(X.has("metadata"))Y.push("metadata");if(X.has("status"))Y.push("status");if(X.has("values"))Y.push("values");if(X.has("interrupts"))Y.push("interrupts");if(Y.length>0)x=x.select(Y);else x=x.selectAll();if($?.ids&&$.ids.length>0)x=x.where("thread_id","in",$.ids);if($?.status)x=x.where("status","=",$.status);if($?.metadata)for(let[J,U]of Object.entries($.metadata))x=x.where(this.adapter.buildJsonQuery(this.db,"metadata",J,U));if($?.values)x=x.where((J)=>{return J("values","=",this.adapter.jsonToDb($.values))});if($?.sortBy){let J=$.sortOrder==="desc"?"desc":"asc";x=x.orderBy($.sortBy,J)}if($?.limit!==void 0){if(x=x.limit($.limit),$?.offset!==void 0)x=x.offset($.offset)}return(await x.execute()).map((J)=>{let U={thread_id:J.thread_id};if(X.has("created_at"))U.created_at=this.adapter.dbToDate(J.created_at).toISOString();if(X.has("updated_at"))U.updated_at=this.adapter.dbToDate(J.updated_at).toISOString();if(X.has("metadata"))U.metadata=this.adapter.dbToJson(J.metadata);if(X.has("status"))U.status=J.status;if(X.has("values"))U.values=J.values?this.adapter.dbToJson(J.values):null;if(X.has("interrupts"))U.interrupts=this.adapter.dbToJson(J.interrupts);return U})}async get($){let x=await this.db.selectFrom("threads").selectAll().where("thread_id","=",$).executeTakeFirst();if(!x)throw Error(`Thread with ID ${$} not found.`);return{thread_id:x.thread_id,created_at:this.adapter.dbToDate(x.created_at).toISOString(),updated_at:this.adapter.dbToDate(x.updated_at).toISOString(),state_updated_at:this.adapter.dbToDate(x.updated_at).toISOString(),metadata:this.adapter.dbToJson(x.metadata),status:x.status,values:x.values?this.adapter.dbToJson(x.values):null,interrupts:this.adapter.dbToJson(x.interrupts)}}async set($,x){if(!await this.db.selectFrom("threads").select("thread_id").where("thread_id","=",$).executeTakeFirst())throw Error(`Thread with ID ${$} not found.`);let Y={updated_at:this.adapter.dateToDb(new Date)};if(x.metadata!==void 0)Y.metadata=this.adapter.jsonToDb(x.metadata);if(x.status!==void 0)Y.status=x.status;if(x.values!==void 0)Y.values=x.values?this.adapter.jsonToDb(x.values):null;if(x.interrupts!==void 0)Y.interrupts=this.adapter.jsonToDb(x.interrupts);await this.db.updateTable("threads").set(Y).where("thread_id","=",$).execute()}async delete($){if((await this.db.deleteFrom("threads").where("thread_id","=",$).executeTakeFirst()).numDeletedRows===0n)throw Error(`Thread with ID ${$} not found.`)}async updateState($,x){let X=await this.get($);if(X.status==="busy")throw Error(`Thread with ID ${$} is busy, can't update state.`);let Y=X.metadata?.graph_id;if(!Y)return await this.set($,{values:x.values??null}),{configurable:{thread_id:$}};let Z={configurable:{thread_id:$,graph_id:Y}},J=await X0(Y,Z),U=await J.updateState(Z,x.values),H=await J.getState(Z);return await this.set($,{values:JSON.parse(f(H.values))}),U}async createRun($,x,X){let Y=B(),Z=new Date,J=X?.metadata??{};return await this.db.insertInto("runs").values({run_id:Y,thread_id:$,assistant_id:x,created_at:this.adapter.dateToDb(Z),updated_at:this.adapter.dateToDb(Z),status:"pending",metadata:this.adapter.jsonToDb(J),multitask_strategy:"reject"}).execute(),{run_id:Y,thread_id:$,assistant_id:x,created_at:Z.toISOString(),updated_at:Z.toISOString(),status:"pending",metadata:J,multitask_strategy:"reject"}}async listRuns($,x){let X=this.db.selectFrom("runs").selectAll().where("thread_id","=",$).orderBy("created_at","desc");if(x?.status)X=X.where("status","=",x.status);if(x?.limit!==void 0){if(X=X.limit(x.limit),x?.offset!==void 0)X=X.offset(x.offset)}return(await X.execute()).map((Z)=>({run_id:Z.run_id,thread_id:Z.thread_id,assistant_id:Z.assistant_id,created_at:this.adapter.dbToDate(Z.created_at).toISOString(),updated_at:this.adapter.dbToDate(Z.updated_at).toISOString(),status:Z.status,metadata:this.adapter.dbToJson(Z.metadata),multitask_strategy:Z.multitask_strategy}))}async updateRun($,x){if(!await this.db.selectFrom("runs").select("run_id").where("run_id","=",$).executeTakeFirst())throw Error(`Run with ID ${$} not found.`);let Y={updated_at:this.adapter.dateToDb(new Date)};if(x.status!==void 0)Y.status=x.status;if(x.metadata!==void 0)Y.metadata=this.adapter.jsonToDb(x.metadata);if(x.multitask_strategy!==void 0)Y.multitask_strategy=x.multitask_strategy;await this.db.updateTable("runs").set(Y).where("run_id","=",$).execute()}async count($){return(await this.search($)).length}async patch($,x){let X=await this.db.selectFrom("threads").selectAll().where("thread_id","=",$).executeTakeFirst();if(!X)throw Error(`Thread with ID ${$} not found.`);let Y={updated_at:this.adapter.dateToDb(new Date)};if(x.metadata!==void 0){let Z=this.adapter.dbToJson(X.metadata)||{};Y.metadata=this.adapter.jsonToDb({...Z,...x.metadata})}if(x.status!==void 0)Y.status=x.status;if(x.values!==void 0)Y.values=x.values?this.adapter.jsonToDb(x.values):null;if(x.interrupts!==void 0)Y.interrupts=this.adapter.jsonToDb(x.interrupts);return await this.db.updateTable("threads").set(Y).where("thread_id","=",$).execute(),await this.get($)}async getState($,x){let X=await this.get($);if(x?.checkpointId){let Z=await this.db.selectFrom("checkpoints").selectAll().where("checkpoint_id","=",x.checkpointId).where("thread_id","=",$).executeTakeFirst();if(!Z)throw Error(`Checkpoint with ID ${x.checkpointId} not found for thread ${$}`);return{values:this.adapter.dbToJson(Z.values),next:this.adapter.dbToJson(Z.next),metadata:this.adapter.dbToJson(Z.metadata),checkpoint:{id:Z.checkpoint_id,thread_id:$,parent_checkpoint_id:null,checkpoint_ns:"",metadata:this.adapter.dbToJson(Z.metadata),created_at:this.adapter.dbToDate(Z.created_at).toISOString()},created_at:this.adapter.dbToDate(Z.created_at).toISOString(),parent_checkpoint:null,tasks:[]}}return{values:X.values||{},next:[],metadata:X.metadata,checkpoint:null,created_at:X.created_at,parent_checkpoint:null,tasks:[]}}async getStateHistory($,x){let Y=await this.db.selectFrom("checkpoints").selectAll().where("thread_id","=",$).orderBy("created_at","asc").execute(),Z=Y.map((J)=>({values:this.adapter.dbToJson(J.values),next:this.adapter.dbToJson(J.next),metadata:this.adapter.dbToJson(J.metadata),checkpoint:{thread_id:$,checkpoint_ns:"",checkpoint_id:J.checkpoint_id,checkpoint_map:null},created_at:this.adapter.dbToDate(J.created_at).toISOString(),parent_checkpoint:null,tasks:[]}));if(x?.before){let J=Y.findIndex((U)=>U.checkpoint_id===x.before);if(J!==-1)Z=Z.slice(J+1)}if(x?.limit)Z=Z.slice(0,x.limit);return Z}async copy($){let x=await this.get($),X=B(),Y=new Date;await this.db.insertInto("threads").values({thread_id:X,created_at:this.adapter.dateToDb(Y),updated_at:this.adapter.dateToDb(Y),metadata:this.adapter.jsonToDb(x.metadata),status:x.status,values:x.values?this.adapter.jsonToDb(x.values):null,interrupts:this.adapter.jsonToDb(x.interrupts)}).execute();let Z=await this.db.selectFrom("checkpoints").selectAll().where("thread_id","=",$).orderBy("created_at","asc").execute();for(let J of Z)await this.db.insertInto("checkpoints").values({checkpoint_id:B(),thread_id:X,values:J.values,next:J.next,config:J.config,created_at:J.created_at,metadata:J.metadata}).execute();return{...x,thread_id:X,created_at:Y.toISOString(),updated_at:Y.toISOString()}}async saveCheckpoint($,x,X,Y,Z){await this.db.insertInto("checkpoints").values({checkpoint_id:B(),thread_id:$,values:this.adapter.jsonToDb(x),next:this.adapter.jsonToDb(X),config:this.adapter.jsonToDb(Y),created_at:this.adapter.dateToDb(new Date),metadata:this.adapter.jsonToDb(Z||{})}).execute()}}function T0($){let[x,X]=$.split("::");return{threadId:x,checkpointNs:X??""}}function C($,x,X){return`${$}::${x}::${X}`}function g($){if($===null||typeof $!=="object")return JSON.stringify($);if(Array.isArray($))return JSON.stringify($.map((Y)=>g(Y)));let x={},X=Object.keys($).sort();for(let Y of X)x[Y]=$[Y];return JSON.stringify(x,(Y,Z)=>{if(Z!==null&&typeof Z==="object"&&!Array.isArray(Z)){let J={},U=Object.keys(Z).sort();for(let H of U)J[H]=Z[H];return J}return Z})}class Y0 extends d{storage={};writes={};constructor($){super($)}async get($){return(await this.getTuple($))?.checkpoint}async _migratePendingSends($,x,X,Y){let Z=$,J=C(x,X,Y),U=await Promise.all(Object.values(this.writes[J]??{}).filter(([H,W])=>W===j).map(async([H,W,Q])=>await this.serde.loadsTyped("json",Q)));Z.channel_values??={},Z.channel_values[j]=U,Z.channel_versions??={},Z.channel_versions[j]=Object.keys(Z.channel_versions).length>0?r(...Object.values(Z.channel_versions)):this.getNextVersion(void 0)}async _loadPendingWrites($,x,X){let Y=C($,x,X),Z=this.writes[Y]??{};if(Object.keys(Z).length===0)return[];return await Promise.all(Object.values(Z).map(async([J,U,H])=>{return[J,U,await this.serde.loadsTyped("json",H)]}))}_cleanupOldWrites($,x,X){let Y=C($,x,X);delete this.writes[Y]}_checkMetadataFilterMatch($,x){for(let[X,Y]of Object.entries(x)){let Z=$?.[X];if(Y===null){if(!(X in($||{}))||Z!==null)return!1}else if(typeof Y==="object"&&!Array.isArray(Y)){if(typeof Z!=="object"||Z===null)return!1;if(g(Y)!==g(Z))return!1}else if(Z!==Y)return!1}return!0}async getTuple($){let x=$.configurable?.thread_id,X=$.configurable?.checkpoint_ns??"",Y=a($);if(x===void 0)return;let Z=this.storage[x]?.[X];if(Z===void 0)return;let{checkpoint:J,metadata:U,checkpoint_id:H,parent_checkpoint_id:W}=Z;if(Y&&H!==Y)return;let Q=await this.serde.loadsTyped("json",J);if(Q.v<4&&W!==void 0)await this._migratePendingSends(Q,x,X,W);let P=await this._loadPendingWrites(x,X,H),O=await this.serde.loadsTyped("json",U),K={config:{configurable:{thread_id:x,checkpoint_ns:X,checkpoint_id:H}},checkpoint:Q,metadata:O,pendingWrites:P};if(W!==void 0)K.parentConfig={configurable:{thread_id:x,checkpoint_ns:X,checkpoint_id:W}};return K}async*list($,x){let{before:X,limit:Y,filter:Z}=x??{},J=$.configurable?.thread_id?[$.configurable.thread_id]:Object.keys(this.storage),U=$.configurable?.checkpoint_ns,H=$.configurable?.checkpoint_id,W=[];for(let P of J){let O=this.storage[P];if(O===void 0)continue;for(let K of Object.keys(O)){if(U!==void 0&&K!==U)continue;let A=O[K];if(A===void 0)continue;let{checkpoint_id:D}=A;if(H&&D!==H)continue;if(X?.configurable?.checkpoint_id&&D>=X.configurable.checkpoint_id)continue;let L=await this.serde.loadsTyped("json",A.metadata);if(Z&&!this._checkMetadataFilterMatch(L,Z))continue;W.push({threadId:P,checkpointNs:K,namespaceData:A})}}W.sort((P,O)=>O.namespaceData.checkpoint_ts-P.namespaceData.checkpoint_ts);let Q=0;for(let{threadId:P,checkpointNs:O,namespaceData:K}of W){if(Y!==void 0&&Q>=Y)return;let{checkpoint:A,metadata:D,checkpoint_id:L,parent_checkpoint_id:_}=K,z=await this.serde.loadsTyped("json",A);if(z.v<4&&_!==void 0)await this._migratePendingSends(z,P,O,_);let q=await this._loadPendingWrites(P,O,L),W0=await this.serde.loadsTyped("json",D),u={config:{configurable:{thread_id:P,checkpoint_ns:O,checkpoint_id:L}},checkpoint:z,metadata:W0,pendingWrites:q};if(_!==void 0)u.parentConfig={configurable:{thread_id:P,checkpoint_ns:O,checkpoint_id:_}};Q++,yield u}}async put($,x,X,Y){let Z=o(x),J=$.configurable?.thread_id,U=$.configurable?.checkpoint_ns??"",H=$.configurable?.checkpoint_id;if(J===void 0)throw Error("thread_id is required");let W=x.id||s(0);if(!this.storage[J])this.storage[J]={};let Q=this.storage[J][U];if(Q!==void 0&&Q.checkpoint_id!==W)this._cleanupOldWrites(J,U,Q.checkpoint_id);let[[,P],[,O]]=await Promise.all([this.serde.dumpsTyped(Z),this.serde.dumpsTyped(X)]);return this.storage[J][U]={checkpoint:P,metadata:O,checkpoint_id:W,parent_checkpoint_id:H,checkpoint_ts:Date.now()},{configurable:{thread_id:J,checkpoint_ns:U,checkpoint_id:W}}}async putWrites($,x,X){let Y=$.configurable?.thread_id,Z=$.configurable?.checkpoint_ns??"",J=$.configurable?.checkpoint_id;if(!Y||!J)throw Error("thread_id and checkpoint_id are required");let U=C(Y,Z,J),H=this.writes[U];if(this.writes[U]===void 0)this.writes[U]={};await Promise.all(x.map(async([W,Q],P)=>{let[,O]=await this.serde.dumpsTyped(Q),K=[X,t[W]||P],A=`${K[0]},${K[1]}`;if(K[1]>=0&&H&&A in H)return;this.writes[U][A]=[X,W,O]}))}async deleteThread($){delete this.storage[$];for(let x of Object.keys(this.writes)){let{threadId:X}=T0(x.split("::").slice(0,2).join("::"));if(X===$)delete this.writes[x]}}}class N{event;data;id;constructor($,x){this.event=$,this.data=x}}class Z0 extends N{constructor(){super("__system_cancel__","user cancel this run")}}class J0 extends N{constructor(){super("__stream_end__","stream end")}}class c extends N{constructor($){super("__stream_error__",{error:$.name,message:$.message})}}class h extends $0{data=[];activeGenerators=new Set;isDestroyed=!1;async push($){if(this.isDestroyed)return;let x=this.compressMessages?await this.encodeData($):$;process.env.LG_TEMP_MESSAGE!=="true"&&this.data.push(x),this.emit("dataChange",x)}onDataChange($){if(this.isDestroyed)return()=>{};return this.on("dataChange",async(x)=>{if(this.isDestroyed)return;$(this.compressMessages?await this.decodeData(x):x)}),()=>this.off("dataChange",$)}async*onDataReceive(){if(this.isDestroyed)return;let $=new AbortController;this.activeGenerators.add($);let x=[],X=null,Y=!1,Z=!1,J=null,U=async(Q)=>{if(Z||$.signal.aborted)return;try{let P=this.compressMessages?await this.decodeData(Q):Q;if(x.push(P),P.event==="__stream_end__"||P.event==="__stream_error__"||P.event==="__stream_cancel__"){if(J)clearTimeout(J),J=null;if(J=setTimeout(()=>{if(Y=!0,X)X(),X=null},300),P.event==="__stream_cancel__")$.abort("stream cancelled")}if(X)X(),X=null}catch(P){if(console.error("Error in handleData:",P),X)X(),X=null}};this.on("dataChange",U);let H=()=>{if(Y=!0,X)X(),X=null};$.signal.addEventListener("abort",H);let W=()=>{if(Z)return;if(Z=!0,J)clearTimeout(J),J=null;try{this.off("dataChange",U)}catch(Q){}try{$.signal.removeEventListener("abort",H)}catch(Q){}if(X)X(),X=null;x.length=0,this.activeGenerators.delete($)};try{if($.signal.aborted||this.isDestroyed)return;while(!Y&&!$.signal.aborted&&!this.isDestroyed)if(x.length>0){for(let Q of x)yield Q;x.length=0}else await new Promise((Q)=>{X=Q})}finally{W()}}async getAll(){if(this.isDestroyed)return[];return this.compressMessages?await Promise.all(this.data.map(($)=>this.decodeData($))):[...this.data]}clear(){this.data.length=0}cancelSignal=new AbortController;async cancel(){for(let $ of this.activeGenerators)try{$.abort("user cancel this run")}catch(x){}if(this.activeGenerators.clear(),!this.cancelSignal.signal.aborted)this.cancelSignal.abort("user cancel this run");if(!this.isDestroyed)await this.push(new Z0)}async copyToQueue($,x){let X=this.data.slice(),Y=new h($,this.compressMessages,x??this.ttl);return Y.data=X,Y}async destroy(){if(this.isDestroyed)return;this.isDestroyed=!0,await this.cancel(),this.clear(),this.removeAllListeners(),this.activeGenerators.clear()}}class U0{threads=[];checkpoints=new Map;async setup(){return}async create($){let x=$?.threadId||B();if($?.ifExists==="raise"&&this.threads.some((Y)=>Y.thread_id===x))throw Error(`Thread with ID ${x} already exists.`);let X={thread_id:x,created_at:new Date().toISOString(),updated_at:new Date().toISOString(),state_updated_at:new Date().toISOString(),metadata:$?.metadata||{},status:"idle",values:null,interrupts:{}};return this.checkpoints.set(x,[]),this.threads.push(X),X}async search($){let x=[...this.threads];if($?.ids&&$.ids.length>0)x=x.filter((J)=>$.ids.includes(J.thread_id));if($?.status)x=x.filter((J)=>J.status===$.status);if($?.metadata){for(let J in $.metadata)if(Object.prototype.hasOwnProperty.call($.metadata,J))x=x.filter((U)=>U.metadata&&U.metadata[J]===$.metadata?.[J])}if($?.values)x=x.filter((J)=>{if(!J.values)return!1;return this.deepEqual(J.values,$.values)});if($?.sortBy)x.sort((J,U)=>{let H,W;switch($.sortBy){case"thread_id":H=J.thread_id,W=U.thread_id;break;case"created_at":H=new Date(J.created_at).getTime(),W=new Date(U.created_at).getTime();break;case"updated_at":H=new Date(J.updated_at).getTime(),W=new Date(U.updated_at).getTime();break;case"status":H=J.status,W=U.status;break;default:return 0}if($.sortOrder==="desc")return W>H?1:W<H?-1:0;else return H>W?1:H<W?-1:0});let X=$?.offset||0,Y=$?.limit||x.length;return x.slice(X,X+Y).map((J)=>{let U={thread_id:J.thread_id},H;if($?.select)H=new Set($.select);else if($?.withoutDetails)H=new Set(["thread_id","created_at","updated_at","metadata","status"]);else H=new Set(["thread_id","created_at","updated_at","metadata","status","values","interrupts"]);if(H.has("thread_id"))U.thread_id=J.thread_id;if(H.has("created_at"))U.created_at=J.created_at;if(H.has("updated_at"))U.updated_at=J.updated_at;if(H.has("metadata"))U.metadata=J.metadata;if(H.has("status"))U.status=J.status;if(H.has("values"))U.values=J.values;if(H.has("interrupts"))U.interrupts=J.interrupts;return U})}deepEqual($,x){if($===x)return!0;if(typeof $!==typeof x)return!1;if(typeof $!=="object"||$===null||x===null)return!1;let X=Object.keys($),Y=Object.keys(x);if(X.length!==Y.length)return!1;for(let Z of X){if(!Y.includes(Z))return!1;if(!this.deepEqual($[Z],x[Z]))return!1}return!0}async get($){let x=this.threads.find((X)=>X.thread_id===$);if(!x)throw Error(`Thread with ID ${$} not found.`);return x}async set($,x){let X=this.threads.findIndex((Y)=>Y.thread_id===$);if(X===-1)throw Error(`Thread with ID ${$} not found.`);this.threads[X]={...this.threads[X],...x}}async delete($){let x=this.threads.length;if(this.threads=this.threads.filter((X)=>X.thread_id!==$),this.checkpoints.delete($),this.threads.length===x)throw Error(`Thread with ID ${$} not found.`)}async updateState($,x){let X=this.threads.findIndex((Z)=>Z.thread_id===$);if(X===-1)throw Error(`Thread with ID ${$} not found.`);let Y=this.threads[X];if(Y.status==="busy")throw Error(`Thread with ID ${$} is busy, can't update state.`);if(this.threads[X]={...Y,values:x.values,updated_at:new Date().toISOString()},Y.metadata?.graph_id){let Z=Y.metadata?.graph_id,J={configurable:{thread_id:$,graph_id:Z}};try{let U=await X0(Z,J),H=await U.updateState(J,x.values),W=await U.getState(J);return await this.set($,{values:JSON.parse(f(W.values))}),H}catch(U){console.warn("Failed to update graph state:",U)}}return{configurable:{thread_id:$}}}runs=[];async createRun($,x,X){let Z={run_id:B(),thread_id:$,assistant_id:x,created_at:new Date().toISOString(),updated_at:new Date().toISOString(),status:"pending",metadata:X?.metadata??{},multitask_strategy:"reject"};return this.runs.push(Z),Z}async listRuns($,x){let X=[...this.runs];if(x?.status)X=X.filter((Y)=>Y.status===x.status);if(x?.limit)X=X.slice(x.offset||0,(x.offset||0)+x.limit);return X}async updateRun($,x){let X=this.runs.findIndex((Y)=>Y.run_id===$);if(X===-1)throw Error(`Run with ID ${$} not found.`);this.runs[X]={...this.runs[X],...x}}async count($){return(await this.search($)).length}async patch($,x){let X=this.threads.findIndex((Z)=>Z.thread_id===$);if(X===-1)throw Error(`Thread with ID ${$} not found.`);let Y={...this.threads[X],...x,updated_at:new Date().toISOString(),metadata:x.metadata?{...this.threads[X].metadata,...x.metadata}:this.threads[X].metadata};return this.threads[X]=Y,Y}async getState($,x){let X=await this.get($);if(x?.checkpointId){let J=(this.checkpoints.get($)||[]).find((U)=>U.checkpoint_id===x.checkpointId);if(!J)throw Error(`Checkpoint with ID ${x.checkpointId} not found for thread ${$}`);return{values:J.values,next:J.next,metadata:J.metadata,checkpoint:{id:J.checkpoint_id,thread_id:$,parent_checkpoint_id:null,checkpoint_ns:"",metadata:J.metadata,created_at:J.created_at},created_at:J.created_at,parent_checkpoint:null,tasks:[]}}return{values:X.values||{},next:[],metadata:X.metadata,checkpoint:null,created_at:X.created_at,parent_checkpoint:null,tasks:[]}}async getStateHistory($,x){let X=this.checkpoints.get($)||[],Y=X.map((Z)=>({values:Z.values,next:Z.next,metadata:Z.metadata,checkpoint:{checkpoint_id:Z.checkpoint_id,thread_id:$,checkpoint_ns:"",checkpoint_map:void 0},created_at:Z.created_at,parent_checkpoint:null,tasks:[]}));if(x?.before){let Z=X.findIndex((J)=>J.checkpoint_id===x.before);if(Z!==-1)Y=Y.slice(Z+1)}if(x?.limit)Y=Y.slice(0,x.limit);return Y}async copy($){let x=await this.get($),X=B(),Y={...x,thread_id:X,created_at:new Date().toISOString(),updated_at:new Date().toISOString()};this.threads.push(Y);let J=(this.checkpoints.get($)||[]).map((U)=>({...U,checkpoint_id:B(),thread_id:X}));return this.checkpoints.set(X,J),Y}async saveCheckpoint($,x,X,Y,Z){let J=this.checkpoints.get($)||[],U={checkpoint_id:B(),thread_id:$,values:x,next:X,config:Y,created_at:new Date().toISOString(),metadata:Z};J.push(U),this.checkpoints.set($,J)}}var S0=async()=>{if(process.env.REDIS_URL&&(process.env.CHECKPOINT_TYPE==="redis"||process.env.CHECKPOINT_TYPE==="shallow/redis")){if(process.env.CHECKPOINT_TYPE==="redis"){console.debug("LG | Using redis as checkpoint");let{RedisSaver:$}=await import("./chunk-favbv2tp.js");return await $.fromUrl(process.env.REDIS_URL,{defaultTTL:60,refreshOnRead:!0})}if(process.env.CHECKPOINT_TYPE==="shallow/redis"){console.debug("LG | Using shallow redis as checkpoint");let{ShallowRedisSaver:$}=await import("./chunk-scddrzwd.js");return await $.fromUrl(process.env.REDIS_URL)}}if(process.env.DATABASE_URL&&H0(process.env.DATABASE_URL)==="postgres"){console.debug("LG | Using postgres as checkpoint");let{createPGCheckpoint:$}=await import("./chunk-q87zdrxp.js");return $()}if(process.env.SQLITE_DATABASE_URI){if(process.env.CHECKPOINT_TYPE==="sqlite"){console.debug("LG | Using sqlite (full) as checkpoint");let{SqliteSaver:X}=await import("./chunk-py5g6yc2.js");return await X.fromConnStringAsync(process.env.SQLITE_DATABASE_URI)}console.debug("LG | Using shallow sqlite as checkpoint (default)");let{SqliteShallowSaver:$}=await import("./chunk-pww7x4hb.js");return await $.fromConnStringAsync(process.env.SQLITE_DATABASE_URI)}return console.log("LG | You are using memory as checkpoint!"),console.log("\x1B[33m%s\x1B[0m","LG | set SQLITE_DATABASE_URI=./.langgraph_api/langgraph.db to your .env file to use \x1B[1mSQLite\x1B[0m for dev!"),console.log("\x1B[33m%s\x1B[0m","LG | set DATABASE_URL=postgresql://user:pass@localhost:5432/db to your .env file to use \x1B[1mPostgreSQL\x1B[0m for prod!"),new Y0},G0=async()=>{let $;if(process.env.REDIS_URL){console.debug("LG | Using redis as stream queue");let{RedisStreamQueue:x}=await import("./chunk-1rnd4taj.js");$=x}else $=h;return new x0($)};function H0($){let x=$.toLowerCase();if(x.startsWith("http://")||x.startsWith("https://"))return"remote";return"postgres"}var w0=async($)=>{if(process.env.DATABASE_URL){if(H0(process.env.DATABASE_URL)==="remote"){console.debug("LG | Using Remote PostgreSQL ThreadsManager");let{RemoteKyselyThreadsManager:X}=await import("./chunk-spvbvpx5.js"),Y=new X(process.env.DATABASE_URL);if(process.env.DATABASE_INIT==="true")await Y.setup();return Y}else if($.checkpointer){console.debug("LG | Using PostgreSQL ThreadsManager");let{PostgresAdapter:X}=await import("./chunk-bzgj8aae.js"),Y=$.checkpointer.pool,Z=new I(new X(Y));if(process.env.DATABASE_INIT==="true")await Z.setup();return Z}}if(process.env.SQLITE_DATABASE_URI&&$.checkpointer){console.debug("LG | Using SQLite ThreadsManager");let{SQLiteAdapter:x}=await import("./chunk-s6gzrjxk.js"),X=$.checkpointer.db,Y=new I(new x(X));return await Y.setup(),Y}return new U0};class F{static globalMessageQueue=null;static globalCheckPointer=null;static globalThreadsManager=null;static isInitialized=null;static async initGlobal(){if(F.isInitialized)return F.isInitialized;return F.isInitialized=(async()=>{let[$,x]=await Promise.all([G0(),S0()]);console.debug("LG | checkpointer created");let X=await w0({checkpointer:x});console.debug("LG | threads manager created"),console.debug("LG | global init done"),F.globalMessageQueue=$,F.globalCheckPointer=x,F.globalThreadsManager=X})(),F.isInitialized}}async function C0($,x,X,Y,Z){let U=Y.config?.configurable?.graph_id;if(!U||typeof U!=="string")throw Error("Invalid or missing graph_id");let H=await Z.getGraph(U,Y.config,{checkpointer:Y.temporary?null:void 0}),W=Array.isArray(Y.streamMode)?Y.streamMode:Y.streamMode?[Y.streamMode]:[],Q=new Set(["values",...W.filter((D)=>D!=="events"&&D!=="messages-tuple")]);if(W.includes("messages-tuple"))Q.add("messages");if(W.includes("messages"))Q.add("values");await X.push(new N("metadata",{run_id:x.run_id,attempt:Z.attempt,graph_id:U}));let P={...Y.config?.metadata,run_attempt:Z.attempt},O=null,K=null,A=null;try{O=new Set,K=new Map,A=await H.stream(Y.command!=null?A0(Y.command):Y.input??null,{interruptAfter:Y.interruptAfter,interruptBefore:Y.interruptBefore,tags:Y.config?.tags,configurable:Y.config?.configurable,recursionLimit:Y.config?.recursionLimit,subgraphs:Y.streamSubgraphs,metadata:P,runId:x.run_id,streamMode:[...Q],signal:X.cancelSignal.signal});for await(let D of A){let L=[];if(D.length===3)L=D.splice(0,1);let _=(z)=>{if(L.length===0)return z;if(L.length===1&&L[0]?.length===0)return z;return`${z}|${L.join("|")}`};if(D[0]==="values"){let z=D[1];if(_("values")==="values")if(await X.push(new N(_("values"),z)),z?.__interrupt__)await $.set(x.thread_id,{status:"interrupted",interrupts:z?JSON.parse(f(z)):""});else await $.set(x.thread_id,{values:z?JSON.parse(f(z)):""})}else if(D[0]==="messages"){let z=D[1][0],q=D[1][1];if(z.id&&!O.has(z.id))await X.push(new N("messages/metadata",{[z.id]:q})),O.add(z.id);if(O0.isInstance(z)&&z.id){if(K.set(z.id,[...K.get(z.id)??[],z]),await X.push(new N("messages/partial",[K.get(z.id).reduce(V0)])),z.content===""&&!z.tool_calls?.length)K.delete(z.id)}else await X.push(new N("messages/partial",[z]))}else if(D[0]==="updates"){let z=D[1];await X.push(new N(_("updates"),z))}}}catch(D){if(!(D instanceof Error&&D.message?.includes("cancel"))){console.error("streamStateWithQueue error:",D);try{await X.push(new c(D))}catch(L){}}throw D}finally{try{await X.push(new J0)}catch(D){}if(O)O.clear(),O=null;if(K)K.clear(),K=null;A=null}}var f=($,x=0)=>{return JSON.stringify($,function(X,Y){let Z=this[X];if(Z!=null&&typeof Z==="object"&&"toDict"in Z&&typeof Z.toDict==="function"){let{type:J,data:U}=Z.toDict();return{...U,type:J}}return Y},x)};async function*i0($,x,X,Y){x=await x;let{run_id:Z,thread_id:J}=x,U=null,H=null,W=null,Q=!1;try{await $.set(J,{status:"busy"}),await $.updateRun(x.run_id,{status:"running"}),H=F.globalMessageQueue.createQueue(Z),U=H.onDataReceive(),W=C0($,x,H,X,Y).catch((P)=>{if(Q)return;if(P.message!=="user cancel this run")console.error("Queue task error:",P);F.globalMessageQueue.pushToQueue(Z,new c(P))});for await(let P of U)yield P;await $.updateRun(x.run_id,{status:"success"})}catch(P){console.error("Stream error:",P),await $.updateRun(x.run_id,{status:"error"}),await $.set(J,{status:"error"})}finally{if(Q=!0,U){try{await U.return(void 0)}catch(O){}U=null}if(H&&!H.cancelSignal.signal.aborted)try{H.cancelSignal.abort("Stream consumer disconnected")}catch(O){}if(W){try{await Promise.race([W,new Promise((O)=>setTimeout(O,1000))])}catch(O){}W=null}if((await $.get(J)).status==="interrupted")await F.globalMessageQueue.copyQueue(Z,J,30000);else await $.set(J,{status:"idle",interrupts:{}});await F.globalMessageQueue.removeQueue(Z),H=null}}
2
- export{$0 as f,T as g,n0 as h,X0 as i,Z0 as j,F as k,f as l,i0 as m};
@@ -1 +0,0 @@
1
- import{s as U}from"./chunk-c6nzmyns.js";import"./chunk-pw18cs39.js";import{T as g,V as D}from"./chunk-g1bcpymb.js";import{ea as f,fa as w,ga as X,oa as L,sa as V}from"./chunk-emv4z7ck.js";import{sb as v}from"./chunk-fzn8xq6f.js";var A=v(f(),1);function E(J){let{historyList:O,refreshHistoryList:Y,setHistoryFilter:Z}=U(),W=J?JSON.stringify(J):null,_=W?["history","list",W]:D.history.list();return g({queryKey:_,queryFn:async()=>{if(J)Z(J);return await Y(),O},staleTime:60000})}var G=v(L(),1),C=({onClose:J})=>{let{currentChatId:O,toHistoryChat:Y,createNewChat:Z,refreshHistoryList:W,historyFilter:_}=U(),b=A.useMemo(()=>({metadata:{path:process.cwd()}}),[]),{data:B=[],refetch:y}=E(b),p=A.useRef(W);A.default.useEffect(()=>{p.current=W},[W]);let j=(z)=>z.toLocaleTimeString(),H=(z)=>{switch(z){case"idle":return{emoji:"\uD83D\uDFE2",color:"green",text:"空闲"};case"busy":return{emoji:"\uD83D\uDFE1",color:"yellow",text:"忙碌"};case"interrupted":return{emoji:"\uD83D\uDFE0",color:"orange",text:"中断"};case"error":return{emoji:"\uD83D\uDD34",color:"red",text:"错误"};default:return{emoji:"⚪",color:"gray",text:z}}},N=A.useCallback(async()=>{return B},[B]),P=A.useCallback((z,$,Q)=>{let S=H(z.status),M=z.thread_id===O,m=j(new Date(z.updated_at)),k=Q?">":" ",x=M?"▶":" ",T=(()=>{if(M)return{color:"green",bold:!0};else if(Q)return{color:"cyanBright",bold:!0};else return{color:S.color,bold:!1}})();return G.jsxDEV(w,{children:[G.jsxDEV(X,{bold:T.bold,color:T.color,children:[k,x," ",$+1,". ",z.thread_id.slice(-8)]},void 0,!0,void 0,this),G.jsxDEV(w,{flexGrow:1},void 0,!1,void 0,this),G.jsxDEV(X,{dimColor:!0,children:m},void 0,!1,void 0,this)]},z.thread_id,!0,void 0,this)},[O]),F=A.useCallback((z)=>{return z.thread_id===O},[O]),R=A.useCallback(async(z)=>{if(z.value==="new_chat")Z({});else Y(z);J()},[Z,Y,J]),q=A.useCallback((z)=>{let $=z.find((Q)=>Q.thread_id===O);return $?G.jsxDEV(X,{color:"gray",dimColor:!0,children:["当前: ",G.jsxDEV(X,{color:"green",children:$.thread_id.substring(0,8)},void 0,!1,void 0,this),G.jsxDEV(X,{children:[" ",_?.metadata?.path]},void 0,!0,void 0,this)]},void 0,!0,void 0,this):null},[O,_]),K=A.useMemo(()=>({}),[]),I=A.useMemo(()=>({id:"history",title:"历史记录",icon:"\uD83D\uDCDC",dataSource:N,searchable:!0,searchFields:["thread_id"],searchPlaceholder:"搜索对话 ID...",filterable:!1,filters:[],defaultFilter:"all",itemHeight:1,visibleCount:10,renderItem:P,isSelected:F,onSelect:R,showCount:!0,statusInfo:q,keyMap:K}),[N,P,F,R,q,K]);return G.jsxDEV(V,{config:I,onClose:J},void 0,!1,void 0,this)},e=C;export{e as default};
@@ -1,25 +0,0 @@
1
- import"./chunk-fzn8xq6f.js";import{sql as x}from"kysely";class G{db;pragmaPromise=null;constructor(w){this.db=w}ensurePragma(){if(!this.pragmaPromise)this.pragmaPromise=this.doEnsurePragma();return this.pragmaPromise}async doEnsurePragma(){await x`PRAGMA busy_timeout = 5000`.execute(this.db),await x`PRAGMA journal_mode = WAL`.execute(this.db),await x`PRAGMA synchronous = NORMAL`.execute(this.db),await x`PRAGMA wal_autocheckpoint = 1000`.execute(this.db)}dateToDb(w){return w.toISOString()}dbToDate(w){return new Date(w)}jsonToDb(w){return JSON.stringify(w)}dbToJson(w){if(typeof w==="string")try{return JSON.parse(w)}catch{return w}return w}buildJsonQuery(w,D,F,z){let E=`$.${JSON.stringify(F)}`;if(z===null)return x`
2
- json_type(${x.ref(D)}, ${x.lit(E)}) = 'null'
3
- `;let B;if(typeof z==="string")B=z;else if(typeof z==="number")B=z;else if(typeof z==="boolean")B=z?1:0;else B=JSON.stringify(z);return x`json_extract(${x.ref(D)}, ${x.lit(E)}) = ${x.lit(B)}`}now(){return new Date().toISOString()}async createTables(w){await this.ensurePragma(),await x`
4
- CREATE TABLE IF NOT EXISTS threads (
5
- thread_id TEXT PRIMARY KEY,
6
- created_at TEXT NOT NULL,
7
- updated_at TEXT NOT NULL,
8
- metadata TEXT NOT NULL DEFAULT '{}',
9
- status TEXT NOT NULL DEFAULT 'idle',
10
- "values" TEXT,
11
- interrupts TEXT NOT NULL DEFAULT '{}'
12
- )
13
- `.execute(w),await x`
14
- CREATE TABLE IF NOT EXISTS runs (
15
- run_id TEXT PRIMARY KEY,
16
- thread_id TEXT NOT NULL,
17
- assistant_id TEXT NOT NULL,
18
- created_at TEXT NOT NULL,
19
- updated_at TEXT NOT NULL,
20
- status TEXT NOT NULL DEFAULT 'pending',
21
- metadata TEXT NOT NULL DEFAULT '{}',
22
- multitask_strategy TEXT NOT NULL DEFAULT 'reject',
23
- FOREIGN KEY (thread_id) REFERENCES threads(thread_id) ON DELETE CASCADE
24
- )
25
- `.execute(w)}async createIndexes(w){await x`CREATE INDEX IF NOT EXISTS idx_threads_status ON threads(status)`.execute(w),await x`CREATE INDEX IF NOT EXISTS idx_threads_created_at ON threads(created_at)`.execute(w),await x`CREATE INDEX IF NOT EXISTS idx_threads_updated_at ON threads(updated_at)`.execute(w),await x`CREATE INDEX IF NOT EXISTS idx_runs_thread_id ON runs(thread_id)`.execute(w),await x`CREATE INDEX IF NOT EXISTS idx_runs_status ON runs(status)`.execute(w)}}export{G as SQLiteAdapter};
@@ -1 +0,0 @@
1
- import"./chunk-fzn8xq6f.js";var Q=((f)=>{return f.NETWORK_ERROR="NETWORK_ERROR",f.CONNECTION_TIMEOUT="CONNECTION_TIMEOUT",f.INTERNAL_ERROR="INTERNAL_ERROR",f.THREAD_NOT_FOUND="THREAD_NOT_FOUND",f.THREAD_BUSY="THREAD_BUSY",f.RUN_NOT_FOUND="RUN_NOT_FOUND",f.GRAPH_NOT_FOUND="GRAPH_NOT_FOUND",f.INVALID_REQUEST="INVALID_REQUEST",f})(Q||{});class J extends Error{constructor(f,w,x){super(w);this.code=f,this.statusCode=x,this.name="RemoteApiError"}}async function N(f,w,x){try{let z=f;if(x?.query){let V=new URLSearchParams;Object.entries(x.query).forEach(([X,Y])=>{V.append(X,String(Y))}),z+=`?${V.toString()}`}let O=await fetch(z,{method:w,headers:{"Content-Type":"application/json"},body:x?.body?JSON.stringify(x.body):void 0}),F=await O.json();if(!O.ok||!F.success)throw new J(F.error?.code||Q.INTERNAL_ERROR,F.error?.message||"Unknown error",O.status);return F}catch(z){if(z instanceof J)throw z;throw new J(Q.NETWORK_ERROR,`Network error: ${z instanceof Error?z.message:"Unknown error"}`)}}async function H(f,w){return N(f,"GET",{query:w})}async function B(f,w,x){return N(f,"POST",{body:w,query:x})}async function W(f,w,x){return N(f,"PUT",{body:w,query:x})}async function _(f,w){return N(f,"DELETE",{query:w})}class ${constructor(f,w){this.serverUrl=f,this.httpClient=w,this.serverUrl=f.replace(/\/$/,""),this.httpClient=w||fetch}async setup(){await B(`${this.serverUrl}/setup`)}async create(f){return(await B(`${this.serverUrl}/threads`,f)).data}async search(f){let w={};if(f?.ids!==void 0&&f.ids.length>0)w.ids=JSON.stringify(f.ids);if(f?.metadata!==void 0)w.metadata=JSON.stringify(f.metadata);if(f?.limit!==void 0)w.limit=f.limit;if(f?.offset!==void 0)w.offset=f.offset;if(f?.status!==void 0)w.status=f.status;if(f?.sortBy!==void 0)w.sortBy=f.sortBy;if(f?.sortOrder!==void 0)w.sortOrder=f.sortOrder;if(f?.values!==void 0)w.values=JSON.stringify(f.values);if(f?.select!==void 0)w.select=JSON.stringify(f.select);if(f?.withoutDetails!==void 0)w.withoutDetails=f.withoutDetails;return(await H(`${this.serverUrl}/threads`,w)).data}async get(f){return(await H(`${this.serverUrl}/threads/${f}`)).data}async set(f,w){await W(`${this.serverUrl}/threads/${f}`,w)}async delete(f){await _(`${this.serverUrl}/threads/${f}`)}async updateState(f,w){return(await B(`${this.serverUrl}/threads/${f}/state`,w)).data}async createRun(f,w,x){return(await B(`${this.serverUrl}/threads/${f}/runs`,x||{},{assistantId:w})).data}async listRuns(f,w){let x={};if(w?.limit!==void 0)x.limit=w.limit;if(w?.offset!==void 0)x.offset=w.offset;if(w?.status!==void 0)x.status=w.status;return(await H(`${this.serverUrl}/threads/${f}/runs`,x)).data}async updateRun(f,w){await W(`${this.serverUrl}/runs/${f}`,w)}async count(f){let w={};if(f?.ids!==void 0&&f.ids.length>0)w.ids=JSON.stringify(f.ids);if(f?.metadata!==void 0)w.metadata=JSON.stringify(f.metadata);if(f?.status!==void 0)w.status=f.status;if(f?.values!==void 0)w.values=JSON.stringify(f.values);return(await H(`${this.serverUrl}/threads/count`,w)).data}async patch(f,w){return(await B(`${this.serverUrl}/threads/${f}`,w)).data}async getState(f,w){let x={};if(w?.subgraphs!==void 0)x.subgraphs=w.subgraphs;if(w?.checkpointId!==void 0)x.checkpointId=w.checkpointId;return(await B(`${this.serverUrl}/threads/${f}/state`,x)).data}async getStateHistory(f,w){let x={};if(w?.limit!==void 0)x.limit=w.limit;if(w?.before!==void 0)x.before=w.before;return(await B(`${this.serverUrl}/threads/${f}/history`,x)).data}async copy(f){return(await B(`${this.serverUrl}/threads/${f}/copy`)).data}}export{$ as RemoteKyselyThreadsManager};
@@ -1 +0,0 @@
1
- import{pb as a}from"./chunk-p8fbtgk3.js";import"./chunk-fzn8xq6f.js";export{a as FileSystemConfigStore};