zen-code 4.9.1 → 4.10.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 (123) hide show
  1. package/dist/app.js +175 -166
  2. package/dist/chunk-075hks9v.js +1 -0
  3. package/dist/chunk-0fj768k4.js +112 -0
  4. package/dist/chunk-19mf2aa7.js +1 -0
  5. package/dist/chunk-1mq2jmfy.js +2 -0
  6. package/dist/chunk-1v863afn.js +278 -0
  7. package/dist/chunk-1vn8d8b8.js +1 -0
  8. package/dist/{chunk-mmq834zt.js → chunk-1w19w1bm.js} +1 -1
  9. package/dist/chunk-3dnayvgx.js +224 -0
  10. package/dist/chunk-4hg13vwj.js +1 -0
  11. package/dist/chunk-4scrkcqv.js +1 -0
  12. package/dist/chunk-54cdhhqm.js +1 -0
  13. package/dist/chunk-5m4yb9av.js +91 -0
  14. package/dist/chunk-5yd4ntp6.js +8 -0
  15. package/dist/{chunk-b52b0t16.js → chunk-6scjjkn3.js} +1 -1
  16. package/dist/chunk-7jatn15w.js +2 -0
  17. package/dist/{chunk-4nsg4vcd.js → chunk-7w9y11hj.js} +1 -1
  18. package/dist/chunk-7yzv6385.js +1 -0
  19. package/dist/{chunk-g377vrpj.js → chunk-875hayaj.js} +3 -3
  20. package/dist/chunk-8bs8r50r.js +1 -0
  21. package/dist/chunk-8waww0j9.js +6 -0
  22. package/dist/chunk-8ysg0rga.js +1 -0
  23. package/dist/chunk-9czhw5k6.js +4 -0
  24. package/dist/chunk-9tgp14v7.js +16 -0
  25. package/dist/chunk-a239dn0b.js +1 -0
  26. package/dist/chunk-arv4h3h1.js +2 -0
  27. package/dist/chunk-b2551zfb.js +2 -0
  28. package/dist/chunk-b9emn03n.js +1 -0
  29. package/dist/chunk-bm7578sn.js +1 -0
  30. package/dist/{chunk-1y82m5kn.js → chunk-bytq4kd1.js} +3 -125
  31. package/dist/chunk-c2wfgbj6.js +1 -0
  32. package/dist/{chunk-gcm4jp0d.js → chunk-cef4vbtb.js} +1 -1
  33. package/dist/chunk-cnzhxgn5.js +4 -0
  34. package/dist/chunk-d2770b2z.js +1 -0
  35. package/dist/chunk-d72063sm.js +2 -0
  36. package/dist/{chunk-9k5d9vf1.js → chunk-d988tv30.js} +1 -1
  37. package/dist/{chunk-va71tsw3.js → chunk-dx9k6sdd.js} +3 -3
  38. package/dist/chunk-e6ggkg36.js +2 -0
  39. package/dist/chunk-fjqtrakn.js +1 -0
  40. package/dist/chunk-gbfpab0j.js +1 -0
  41. package/dist/chunk-gkvx829z.js +1 -0
  42. package/dist/{chunk-9dahn9h7.js → chunk-gwf8b14k.js} +1 -1
  43. package/dist/chunk-gz7fz9fg.js +1 -0
  44. package/dist/chunk-h0q3dvnv.js +5 -0
  45. package/dist/chunk-h0qb9jk1.js +1 -0
  46. package/dist/chunk-h9y136h8.js +1 -0
  47. package/dist/chunk-hrcxdj3c.js +54 -0
  48. package/dist/chunk-hz9yw7cs.js +166 -0
  49. package/dist/chunk-j4y5rjne.js +79 -0
  50. package/dist/chunk-k12y05c3.js +3 -0
  51. package/dist/chunk-k6fxqssr.js +18 -0
  52. package/dist/{chunk-rncpxz1b.js → chunk-kmxdq21k.js} +2 -2
  53. package/dist/chunk-mcb8rewr.js +213 -0
  54. package/dist/{chunk-wn43r152.js → chunk-mm9w91rj.js} +1 -1
  55. package/dist/chunk-mv0xzmq8.js +2 -0
  56. package/dist/chunk-n849zsd3.js +1 -0
  57. package/dist/chunk-nm253hhf.js +81 -0
  58. package/dist/chunk-prg6489q.js +1 -0
  59. package/dist/{chunk-cggjws6a.js → chunk-pxdgy0vr.js} +1 -1
  60. package/dist/chunk-qhzm2qw9.js +2 -0
  61. package/dist/{chunk-98f6hg43.js → chunk-qmxtys9q.js} +1 -1
  62. package/dist/chunk-r0cfe5c1.js +294 -0
  63. package/dist/chunk-rtjytfhh.js +1 -0
  64. package/dist/chunk-s7ttf0pm.js +2 -0
  65. package/dist/chunk-t01t72t2.js +140 -0
  66. package/dist/{chunk-ns6tjjkq.js → chunk-t0f66x64.js} +1 -1
  67. package/dist/chunk-tn356gwf.js +93 -0
  68. package/dist/chunk-vd8kwzra.js +41 -0
  69. package/dist/chunk-vhn13anh.js +233 -0
  70. package/dist/chunk-vnewbtjy.js +1 -0
  71. package/dist/chunk-wbm7rn9w.js +2 -0
  72. package/dist/chunk-wd3gkd45.js +3 -0
  73. package/dist/chunk-whdf0vbb.js +1 -0
  74. package/dist/{chunk-j7a40ww9.js → chunk-ws232ksq.js} +2 -2
  75. package/dist/{chunk-8g2zdcy0.js → chunk-yerf10k7.js} +1 -1
  76. package/dist/{chunk-heasksrr.js → chunk-yzv3n8mw.js} +2 -2
  77. package/dist/chunk-z3e4c424.js +2 -0
  78. package/dist/chunk-znw7fpep.js +6 -0
  79. package/dist/chunk-zq2g4rfd.js +1 -0
  80. package/dist/cli.js +1 -1
  81. package/dist/nonInteractive.js +314 -4
  82. package/dist/zen-keyboard.js +1 -1
  83. package/package.json +37 -37
  84. package/dist/chunk-02vv5584.js +0 -1
  85. package/dist/chunk-13nyfrmm.js +0 -310
  86. package/dist/chunk-1edvf7b5.js +0 -1
  87. package/dist/chunk-1rmnbdef.js +0 -1
  88. package/dist/chunk-1ttywx0y.js +0 -6
  89. package/dist/chunk-30sq2w0d.js +0 -8
  90. package/dist/chunk-32ase1cw.js +0 -2
  91. package/dist/chunk-3490ntd8.js +0 -1
  92. package/dist/chunk-3pcybja5.js +0 -7
  93. package/dist/chunk-5rr85f28.js +0 -1
  94. package/dist/chunk-5x8nxw0t.js +0 -137
  95. package/dist/chunk-6rfc36jg.js +0 -1
  96. package/dist/chunk-76h8pe7x.js +0 -2
  97. package/dist/chunk-7kdvr78m.js +0 -31
  98. package/dist/chunk-8z38ybz7.js +0 -1
  99. package/dist/chunk-b8dxq9rq.js +0 -1
  100. package/dist/chunk-cjqarwdn.js +0 -1
  101. package/dist/chunk-cs73xbzz.js +0 -1
  102. package/dist/chunk-cyexd09c.js +0 -2
  103. package/dist/chunk-ep2es95e.js +0 -81
  104. package/dist/chunk-f8ewggk1.js +0 -1
  105. package/dist/chunk-g7pm00z7.js +0 -253
  106. package/dist/chunk-hfve7nf5.js +0 -2
  107. package/dist/chunk-j9aysaeb.js +0 -1
  108. package/dist/chunk-jbf8ve63.js +0 -3
  109. package/dist/chunk-jfhc5c0d.js +0 -1
  110. package/dist/chunk-jxsfzfac.js +0 -2
  111. package/dist/chunk-kba8akjs.js +0 -2
  112. package/dist/chunk-m76ya904.js +0 -1
  113. package/dist/chunk-mjzeawnq.js +0 -6
  114. package/dist/chunk-nwy6n6b6.js +0 -274
  115. package/dist/chunk-qd305hg1.js +0 -1
  116. package/dist/chunk-qez6ejd4.js +0 -1
  117. package/dist/chunk-r2h3x9zv.js +0 -2
  118. package/dist/chunk-rz3b356n.js +0 -1
  119. package/dist/chunk-trjpzw1n.js +0 -91
  120. package/dist/chunk-xhnvpygg.js +0 -2
  121. package/dist/chunk-xkz5z0zn.js +0 -1
  122. package/dist/chunk-zwxjkwqd.js +0 -26
  123. package/dist/chunk-zz32kgt2.js +0 -1
@@ -1,31 +0,0 @@
1
- import{Ba as Q}from"./chunk-xhnvpygg.js";import{SystemMessage as U}from"@langchain/core/messages";var V=`## Memory System
2
-
3
- 你可以访问一个包含之前任务和经验知识的记忆库。
4
-
5
- {memories_locations}
6
-
7
- **可用的记忆:**
8
-
9
- {memories_list}
10
-
11
- **如何使用记忆:**
12
-
13
- 记忆采用 **渐进式披露** 模式 - 你知道它们存在(上面有元数据),但只在需要时才读取完整内容:
14
-
15
- 1. **识别适用的记忆**: 检查当前任务是否匹配任何记忆的描述或标签
16
- 2. **读取完整记忆内容**: 使用 read_file 工具,路径见上面的列表
17
- 3. **应用知识**: 使用记忆中的信息来指导当前任务
18
-
19
- **何时使用记忆:**
20
- - 遇到与之前任务类似的问题时
21
- - 需要回忆项目特定的约定或模式时
22
- - 需要参考之前的解决方案或决策时
23
- - 需要记住配置或设置细节时
24
-
25
- 记住:记忆是帮助你变得更强大和一致的工具。有疑问时,检查是否有相关的记忆存在!
26
- `;class W{name="MemoriesMiddleware";stateSchema=void 0;contextSchema=void 0;tools=[];memoriesDir;assistantId;projectMemoriesDir;userMemoriesDisplay;systemPromptTemplate;constructor(k={}){if(this.memoriesDir=k.memoriesDir,this.assistantId=k.assistantId,this.projectMemoriesDir=k.projectMemoriesDir||"./.claude/memories",this.memoriesDir&&!this.assistantId)console.warn("user memories directory is provided, but assistant id is not provided");if(this.assistantId)this.userMemoriesDisplay=`~/.claude/${this.assistantId}/memories`;this.systemPromptTemplate=V}formatMemoriesLocations(){let k=[];if(this.userMemoriesDisplay)k.push(`**User Memories**: \`${this.userMemoriesDisplay}\``);if(this.projectMemoriesDir)k.push(`**Project Memories**: \`${this.projectMemoriesDir}\` (overrides user memories)`);return k.join(`
27
- `)}formatMemoriesList(k){if(!k.length){let v=[`${this.userMemoriesDisplay}/`];if(this.projectMemoriesDir)v.push(`${this.projectMemoriesDir}/`);return`(No memories available yet. You can create memories in ${v.join(" or ")})`}let J=["architecture","bug-fix","workflow","configuration","optimization"],F=new Map;for(let v of k){if(!F.has(v.category))F.set(v.category,[]);F.get(v.category).push(v)}let z=[];for(let v of J){let D=F.get(v);if(!D||D.length===0)continue;z.push(`**${v.charAt(0).toUpperCase()+v.slice(1)} Memories:**`);let G={high:0,medium:1,low:2};D.sort((x,H)=>{let K=G[x.priority||"medium"]??1,N=G[H.priority||"medium"]??1;if(K!==N)return K-N;return x.name.localeCompare(H.name)});for(let x of D){let H=x.tags.length>0?` [${x.tags.join(", ")}]`:"";z.push(`- **${x.name}**: ${x.description}${H}`),z.push(` → Read \`${x.path}\` for full content`)}z.push("")}return z.join(`
28
- `)}async wrapModelCall(k,J){let F=Q(this.memoriesDir,this.projectMemoriesDir),z=this.formatMemoriesLocations(),v=this.formatMemoriesList(F),D=this.systemPromptTemplate.replace("{memories_locations}",z).replace("{memories_list}",v),G;if(k.systemPrompt)G=k.systemPrompt+`
29
-
30
- `+D;else G=D;let x=new U(G),H={...k,systemMessage:x};return await J(H)}}
31
- export{W as Aa};
@@ -1 +0,0 @@
1
- import{nb as a}from"./chunk-cggjws6a.js";import"./chunk-kba8akjs.js";export{a as FileSystemPluginStore};
@@ -1 +0,0 @@
1
- import{u as U}from"./chunk-mjzeawnq.js";import"./chunk-heasksrr.js";import{T as g,V as D}from"./chunk-va71tsw3.js";import{ea as C,fa as w,ga as X,pa as L,ta as V}from"./chunk-nwy6n6b6.js";import{ub as v}from"./chunk-kba8akjs.js";var A=v(C(),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),y=({onClose:J})=>{let{currentChatId:O,toHistoryChat:Y,createNewChat:Z,refreshHistoryList:W,historyFilter:_}=U(),b=A.useMemo(()=>({metadata:{path:process.cwd()}}),[]),{data:B=[],refetch:c}=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=z.title||z.thread_id.slice(-8),x=Q?">":" ",f=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:[x,f," ",$+1,". ",k]},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:["title","thread_id"],searchPlaceholder:"搜索对话标题...",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)},zz=y;export{zz as default};
@@ -1 +0,0 @@
1
- import{x as M}from"./chunk-cs73xbzz.js";import"./chunk-rncpxz1b.js";import{T as A,V as _}from"./chunk-va71tsw3.js";import{ea as g,fa as X,ga as Y,pa as C,ta as K}from"./chunk-nwy6n6b6.js";import{Ba as R}from"./chunk-xhnvpygg.js";import{ub as Q}from"./chunk-kba8akjs.js";var F=Q(g(),1);import{listSkills as V}from"@langgraph-js/standard-agent";import{join as w}from"path";function $({type:G,enabled:J=!0}){return A({queryKey:G==="memories"?_.knowledge.memories():_.knowledge.skills(),queryFn:async()=>{let L=w(process.cwd(),".claude",G),N=w(process.env.HOME||"",".deepagents/code",G);try{if(G==="memories")return R(N,L).map((W)=>({...W,type:"memory"}));else return V(N,L).map((W)=>({...W,type:"skill"}))}catch(O){return console.warn(`Failed to load ${G}:`,O),[]}},enabled:J,staleTime:120000})}var H=Q(C(),1),S=(G)=>{return G.length>80?G.slice(0,80)+"...":G},k=({onClose:G})=>{let[J,L]=F.useState("memories"),N=F.useRef(L);F.default.useEffect(()=>{N.current=L},[L]);let{data:O=[]}=$({type:"memories",enabled:J==="memories"}),{data:W=[]}=$({type:"skills",enabled:J==="skills"}),U=F.useCallback(async()=>{return J==="memories"?O:W},[J,O,W]),q=F.useCallback((z,h,Z)=>{let E=S(z.description);return H.jsxDEV(X,{flexDirection:"column",paddingY:1,children:[H.jsxDEV(X,{children:H.jsxDEV(Y,{bold:!0,color:Z?"cyan":"gray",children:[h+1,". ",z.name]},void 0,!0,void 0,this)},void 0,!1,void 0,this),H.jsxDEV(X,{paddingY:1,children:H.jsxDEV(Y,{color:Z?"white":"gray",children:E},void 0,!1,void 0,this)},void 0,!1,void 0,this),H.jsxDEV(X,{children:H.jsxDEV(Y,{color:"cyan",dimColor:!Z,children:[M(z.path),z.category&&H.jsxDEV(Y,{color:"yellow",children:[" ",z.category]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)},void 0,!1,void 0,this)]},z.path,!0,void 0,this)},[]),I=F.useCallback((z)=>{console.log("Selected knowledge item:",z.name)},[]),P=F.useMemo(()=>[{id:"memory",label:"记忆",predicate:(z)=>z.type==="memory"},{id:"skill",label:"技能",predicate:(z)=>z.type==="skill"}],[]),B=F.useMemo(()=>({h:(z)=>{N.current("memories"),z.setActiveFilter("memory")},s:(z)=>{N.current("skills"),z.setActiveFilter("skill")}}),[]),f=F.useMemo(()=>({id:"knowledge",title:"知识库",icon:"\uD83D\uDCDA",dataSource:U,searchable:!0,searchFields:["name","description"],searchPlaceholder:"搜索知识库 (名称/描述/分类)...",filterable:!0,filters:P,defaultFilter:J==="memories"?"memory":"skill",itemHeight:8,visibleCount:3,renderItem:q,showCount:!0,onSelect:I,keyMap:B}),[U,P,q,I,B,J]);return H.jsxDEV(K,{config:f,onClose:G},void 0,!1,void 0,this)},l=k;export{l as default};
@@ -1 +0,0 @@
1
- import{H as A,J as q,M as c}from"./chunk-rncpxz1b.js";import{ea as R,pa as w}from"./chunk-nwy6n6b6.js";import{ub as K}from"./chunk-kba8akjs.js";function ZP(G){return G?.replace(process.cwd(),".")||G||""}var v=K(R(),1);var r=()=>{return process.env.TERM?.includes("256color")||process.env.TERM==="xterm-256color"||process.env.WT_SESSION!==void 0||process.platform==="darwin"||process.env.TERM_PROGRAM==="vscode"||process.env.TERM_PROGRAM==="iTerm.app"},VP=()=>{if(process.env.TERM_PROGRAM==="iTerm.app")return"iTerm2";if(process.env.WT_SESSION!==void 0)return"Windows Terminal";if(process.env.TERM_PROGRAM==="vscode")return"VSCode";if(process.env.TERM?.includes("screen"))return"GNU Screen";if(process.env.TERM?.includes("tmux"))return"tmux";return process.env.TERM||"unknown"},m={success:{hex:"#4fd6be",fallback:"green"},warning:{hex:"#ffdb95",fallback:"yellow"},error:{hex:"#f7768e",fallback:"red"},info:{hex:"#7dcfff",fallback:"cyan"},muted:{hex:"#565f89",fallback:"gray"},highlight:{hex:"#7dcfff",fallback:"cyanBright"},accent:{hex:"#bb9af7",fallback:"magentaBright"},border:{hex:"#414868",fallback:"gray"},primary:{hex:"#7aa2f7",fallback:"cyan"},secondary:{hex:"#bb9af7",fallback:"magenta"},keyword:{hex:"#bb9af7",fallback:"magenta"},function:{hex:"#7aa2f7",fallback:"blue"},string:{hex:"#9ece6a",fallback:"green"},number:{hex:"#ff9e64",fallback:"yellow"},comment:{hex:"#565f89",fallback:"gray"},variable:{hex:"#c0caf5",fallback:"white"},type:{hex:"#0db9d7",fallback:"cyan"},constant:{hex:"#e0af68",fallback:"yellow"},textPrimary:{hex:"#c0caf5",fallback:"white"},textSecondary:{hex:"#9aa5ce",fallback:"whiteBright"},textMuted:{hex:"#565f89",fallback:"gray"},bg:{hex:"#1a1b26",fallback:"black"},bgCard:{hex:"#24283b",fallback:"black"},indigo:{hex:"#6366f1",fallback:"blue"},purple:{hex:"#a855f7",fallback:"magenta"},pink:{hex:"#ec4899",fallback:"redBright"},rose:{hex:"#f43f5e",fallback:"red"},orange:{hex:"#f97316",fallback:"yellowBright"},amber:{hex:"#f59e0b",fallback:"yellow"},emerald:{hex:"#10b981",fallback:"green"},teal:{hex:"#14b8a6",fallback:"cyan"},sky:{hex:"#0ea5e9",fallback:"blue"}},_P=(G)=>{if(!(G in m))G="sky";return r()?m[G].hex:m[G].fallback};import o from"os";function xP(){try{return o.userInfo().username}catch(G){return process.env.USER||process.env.USERNAME||"User"}}var $=K(R(),1);var p=K(w(),1),n=50,a=1800000,t=300000,e=$.createContext(null);var pP=({children:G})=>{let[X,J]=$.useState([]),[Q,D]=$.useState(null),y=$.useCallback(async(Z)=>{let z=Z.tool;if(!z)return;let{status:W,editedArgs:F}=Z;if(W==="approved")z.sendResumeData({type:"approve"});else if(W==="edited"){let H={name:z.message.name,args:F};z.sendResumeData({type:"edit",edited_action:H})}else if(W==="rejected")z.sendResumeData({type:"reject",message:"User rejected to run this tool"});else console.error("[ChatWrapper] Unknown approval status:",W)},[]),V=$.useCallback(()=>{return`approval_${Date.now()}_${Math.random().toString(36).substring(2,9)}`},[]),j=$.useCallback((Z)=>{let z={...Z,id:V(),status:"pending",createdAt:new Date};return J((W)=>{let F=[...W,z];if(F.length>n){let H=F.filter((P)=>P.status!=="pending");if(H.length>0)return F.filter((P)=>P.id!==H[0].id)}if(W.length===0)D(z.id);return F}),z.id},[V]),N=$.useCallback((Z,z)=>{J((W)=>W.map((F)=>F.id===Z?{...F,...z}:F))},[]),S=$.useCallback((Z)=>{J((z)=>{let W=z.filter((F)=>F.id!==Z);if(Q===Z)D(W.length>0?W[0].id:null);return W})},[Q]),_=$.useCallback(()=>{J((Z)=>{let z=Z.filter((W)=>W.status==="pending");if(z.length===0)D(null);else if(Q&&!z.find((W)=>W.id===Q))D(z[0].id);return z})},[Q]),L=$.useCallback(async()=>{let Z=X.filter((z)=>z.status==="approved"||z.status==="edited"||z.status==="rejected");if(Z.length===0)return;for(let z of Z)try{await y(z)}catch(W){console.error(`[ApprovalContext] Execute approval request failed: ${z.id}`,W)}_()},[X,y,_]),h=$.useCallback(async(Z)=>{await y(Z)},[y]),B=$.useMemo(()=>X.some((Z)=>Z.status==="pending"),[X]),x=$.useMemo(()=>X.length>0&&!B,[X.length,B]),f=$.useCallback(()=>{let Z=Date.now();J((z)=>z.filter((W)=>W.createdAt.getTime()>Z-a))},[]);A(()=>{f()},t),q(()=>{J((Z)=>Z.map((z)=>({...z,tool:void 0})))}),$.useEffect(()=>{if(x)L()},[x,L]);let M=$.useMemo(()=>({requests:X,addApprovalRequest:j,updateApprovalRequest:N,removeApprovalRequest:S,clearCompletedApprovals:_,executeRequest:h,executeApproved:L,hasPendingRequests:B,allRequestsProcessed:x}),[X,j,N,S,_,h,L,B,x]);return p.jsxDEV(e.Provider,{value:M,children:G},void 0,!1,void 0,this)};var O=K(R(),1);var d=K(w(),1),PP=1800000,HP=300000,g=O.createContext(null),iP=({children:G})=>{let[X,J]=O.useState(""),Q=O.useRef(Date.now()),D=O.useCallback(()=>{J("")},[]),y=O.useCallback((j)=>{Q.current=Date.now(),J(j)},[]);A(()=>{if(Date.now()-Q.current>PP)D()},HP);let V={bufferedMessage:X,setBufferedMessage:y,clearBuffer:D};return d.jsxDEV(g.Provider,{value:V,children:G},void 0,!1,void 0,this)},rP=()=>{let G=O.useContext(g);if(!G)throw Error("useChatInputBuffer must be used within ChatInputBufferProvider");return G};var T=K(R(),1);var zP=K(w(),1),nP=T.createContext(void 0);var Y=K(R(),1);var l=K(w(),1),JP=100,WP=1800000,YP=300000,u=Y.createContext(null),JH=()=>{let G=Y.useContext(u);if(!G)throw Error("useInteractionContext must be used within InteractionProvider");return G},WH=({children:G,onInteractionSubmit:X})=>{let[J,Q]=Y.useState([]),[D,y]=Y.useState(0),V=Y.useCallback(()=>{return`interaction_${Date.now()}_${Math.random().toString(36).substring(2,9)}`},[]),j=Y.useCallback((H,P)=>{let U=new Date,E={id:V(),category:"panel",state:"idle",metadata:{title:P?.metadata?.title,description:P?.metadata?.description,icon:P?.metadata?.icon,priority:P?.metadata?.priority??"medium",groupKey:P?.metadata?.groupKey,messageIndex:P?.metadata?.messageIndex},tool:P?.tool,config:{layout:{border:!0,padding:1,...P?.config?.layout},interaction:{autoSubmit:!1,allowSkip:!1,showPreview:!0,...P?.config?.interaction},style:P?.config?.style??{}},content:H,createdAt:U,updatedAt:U};return Q((I)=>{let k=[...I,E];if(k.length>JP){let C=k.filter((b)=>b.state==="submitted"||b.state==="edited"||b.state==="cancelled");if(C.length>0){let b=C[0].id;return k.filter((i)=>i.id!==b)}}return k}),y((I)=>I+1),E},[V]),N=Y.useCallback((H,P)=>{Q((U)=>U.map((E)=>E.id===H?{...E,...P,updatedAt:new Date}:E)),y((U)=>U+1)},[]),S=Y.useCallback((H)=>{Q((P)=>P.filter((U)=>U.id!==H)),y((P)=>P+1)},[]),_=Y.useCallback(()=>{Q([]),y((H)=>H+1)},[]),L=Y.useCallback((H)=>{return J.find((P)=>P.id===H)},[J]),h=Y.useCallback(()=>{return[...J]},[J]),B=Y.useCallback((H)=>{return J.filter((P)=>P.state===H)},[J]),x=Y.useCallback((H)=>{return J.filter((P)=>P.content.type===H)},[J]),f=Y.useCallback(async()=>{let H=J.filter((P)=>P.state==="submitted"||P.state==="edited"||P.state==="cancelled");for(let P of H)if(!P.resultSent&&X)await X(P),N(P.id,{resultSent:!0})},[J,X,N]),M=Y.useCallback(()=>{Q((H)=>H.filter((P)=>P.state==="idle"||P.state==="active")),y((H)=>H+1)},[]),Z=Y.useCallback(()=>{let H=Date.now();Q((P)=>P.filter((U)=>U.updatedAt.getTime()>H-WP))},[]);A(()=>{Z()},YP),q(()=>{Q((H)=>H.map((P)=>({...P,tool:void 0})))});let z=Y.useMemo(()=>J.some((H)=>H.state==="idle"||H.state==="active"),[J]),W=Y.useMemo(()=>J.length>0&&J.every((H)=>H.state==="submitted"||H.state==="edited"||H.state==="cancelled"),[J]);c(()=>{M()},W&&z===!1?100:null),Y.useEffect(()=>{if(W&&z===!1)f()},[W,z,f]);let F=Y.useMemo(()=>({addInteraction:j,updateInteraction:N,removeInteraction:S,clearAll:_,getInteraction:L,getInteractions:h,getInteractionsByState:B,getInteractionsByContent:x,submitInteractions:f,clearCompleted:M,interactions:J,updateCount:D,hasPendingInteractions:z,allInteractionsProcessed:W}),[j,N,S,_,L,h,B,x,f,M,J,D,z,W]);return l.jsxDEV(u.Provider,{value:F,children:G},void 0,!1,void 0,this)};export{ZP as x,VP as y,_P as z,xP as A,pP as B,iP as C,rP as D,JH as E,WH as F};
@@ -1,2 +0,0 @@
1
- import{yb as W}from"./chunk-kba8akjs.js";import X from"micromatch";import{z as E}from"zod";var T;((D)=>{D.ALLOW="allow";D.ASK="ask";D.DENY="deny"})(T||={});var _=E.object({tool:E.string(),specifier:E.string().optional(),action:E.nativeEnum(T)}),$=E.object({allow:E.array(E.string()).optional(),ask:E.array(E.string()).optional(),deny:E.array(E.string()).optional(),defaultMode:E.nativeEnum(T).optional()}),v=E.object({name:E.string(),args:E.record(E.string(),E.any())});class Q{rules;defaultMode;patternCache=new Map;constructor(x){this.rules=x.rules,this.defaultMode=x.defaultMode||"ask",this.rules.sort((q,B)=>{let D={deny:0,ask:1,allow:2},H=D[q.action]-D[B.action];if(H!==0)return H;let J=q.specifier==null?1:0,N=B.specifier==null?1:0;return J-N})}checkPermission(x){for(let q of this.rules)if(this.matchRule(q,x))return{allowed:q.action==="allow"||q.action==="ask",requiresApproval:q.action==="ask",matchedRule:q,reason:this.getReason(q)};return{allowed:this.defaultMode==="allow"||this.defaultMode==="ask",requiresApproval:this.defaultMode==="ask",reason:`No matching rule, using default mode: ${this.defaultMode}`}}matchRule(x,q){if(x.tool!==q.name)return!1;if(!x.specifier)return!0;let B=this.argsToString(q.args);if(q.name==="Bash")return this.matchBashCommand(x.specifier,B);if(x.specifier.endsWith(" ")&&!/[*?[\\]/.test(x.specifier))return B.startsWith(x.specifier);return this.matchGlob(x.specifier,B)}matchBashCommand(x,q){if(/[;&|]/.test(q))return!1;let D=/[<>()]/;if(D.test(q)){let H=q.split(D)[0].trim();return this.matchBashPattern(x,H)}return this.matchBashPattern(x,q)}matchBashPattern(x,q){if(x.endsWith(" "))return q.startsWith(x);return this.matchGlob(x,q)}matchGlob(x,q){try{let B=x.replace(/^\.\//,""),D=q.replace(/^\.\//,""),H=`${x}::${q}`,J=this.patternCache.get(H);if(J!==void 0)return J;let N=X.isMatch(D,B,{nocase:!1,dot:!0});return this.cacheResult(H,N),N}catch(B){return q===x}}cacheResult(x,q){if(this.patternCache.size>1000){let B=this.patternCache.keys().next().value;if(B)this.patternCache.delete(B)}this.patternCache.set(x,q)}argsToString(x){if(typeof x==="object"&&x!==null){if("command"in x&&x.command)return String(x.command);if("file_path"in x&&x.file_path)return String(x.file_path);return Object.values(x).flat().join(" ")}return String(x)}getReason(x){let q=x.action.toUpperCase(),B=x.tool,D=x.specifier?`(${x.specifier})`:"";return`${q} rule matched: ${B}${D}`}static parseRule(x,q){let B=x.match(/^(\w+)(?:\((.*)\))?$/);if(!B)throw Error(`Invalid permission rule format: ${x}`);let[,D,H]=B;return{tool:D,specifier:H,action:q}}static fromConfig(x){let q=[];for(let B of x.allow||[])q.push(Q.parseRule(B,"allow"));for(let B of x.ask||[])q.push(Q.parseRule(B,"ask"));for(let B of x.deny||[])q.push(Q.parseRule(B,"deny"));return new Q({rules:q,defaultMode:x.defaultMode||"ask"})}clearCache(){this.patternCache.clear()}getCacheSize(){return this.patternCache.size}}class L{configStore;toolNameMapper={};constructor(x){this.configStore=x}static instance=null;static getInstance(x){if(!L.instance){if(!x)throw Error("PermissionStore not initialized. Provide configStore on first call.");L.instance=new L(x)}return L.instance}static resetInstance(){L.instance=null}async getPermissions(){let x=await this.configStore.getConfig();if(x.permissions)return Q.fromConfig(x.permissions);return}async checkBashPermission(x,q){return(await this.getPermissions())?.checkPermission({name:"Bash",args:{command:x,cwd:q}})}async checkReadPermission(x){return(await this.getPermissions())?.checkPermission({name:"Read",args:{file_path:x}})}async checkWritePermission(x){return(await this.getPermissions())?.checkPermission({name:"Write",args:{file_path:x}})}}class V{configStore;skillStore;pluginStore;remoteStore;permissionStore;_initialized=!1;constructor(x,q,B,D){this.configStore=x,this.skillStore=q,this.pluginStore=B,this.remoteStore=D,this.permissionStore=L.getInstance(x)}async initialize(){if(this._initialized)return;if("initialize"in this.configStore&&typeof this.configStore.initialize==="function")await this.configStore.initialize();if("initialize"in this.skillStore&&typeof this.skillStore.initialize==="function")await this.skillStore.initialize();if("initialize"in this.pluginStore&&typeof this.pluginStore.initialize==="function")await this.pluginStore.initialize();this._initialized=!0}async ensureInitialized(){if(!this._initialized)throw Error("ConfigManager not initialized. Call await manager.initialize() first.")}async getConfig(){return await this.ensureInitialized(),await this.configStore.getConfig()}async updateConfig(x){return await this.ensureInitialized(),await this.configStore.updateConfig(x)}async listSkills(){return await this.ensureInitialized(),await this.skillStore.listSkills()}async getSkill(x){return await this.ensureInitialized(),await this.skillStore.getSkill(x)}async saveSkill(x,q){return await this.ensureInitialized(),await this.skillStore.saveSkill(x,q)}async deleteSkill(x){return await this.ensureInitialized(),await this.skillStore.deleteSkill(x)}async syncSkillsFromRemote(){if(await this.ensureInitialized(),!this.remoteStore)throw Error("Remote store not configured");return await this.skillStore.syncFromRemote(this.remoteStore)}async listPlugins(){return await this.ensureInitialized(),await this.pluginStore.listPlugins()}async getPluginConfig(x){return await this.ensureInitialized(),await this.pluginStore.getPluginConfig(x)}async updatePluginConfig(x,q){return await this.ensureInitialized(),await this.pluginStore.updatePluginConfig(x,q)}async installPlugin(x,q){return await this.ensureInitialized(),await this.pluginStore.installPlugin(x,q)}async uninstallPlugin(x){return await this.ensureInitialized(),await this.pluginStore.uninstallPlugin(x)}async checkBashPermission(x,q){return await this.ensureInitialized(),await this.permissionStore.checkBashPermission(x,q)}async checkReadPermission(x){return await this.ensureInitialized(),await this.permissionStore.checkReadPermission(x)}async checkWritePermission(x){return await this.ensureInitialized(),await this.permissionStore.checkWritePermission(x)}async getPermissionMatcher(){return await this.ensureInitialized(),await this.permissionStore.getPermissions()}getConfigPath(){return this.configStore?.dbPath}}async function y(){let{FileSystemConfigStore:x}=await import("./chunk-1edvf7b5.js"),{FileSystemSkillStore:q}=await import("./chunk-qd305hg1.js"),{FileSystemPluginStore:B}=await import("./chunk-8z38ybz7.js"),D=new x,H=new q,J=new B,N=new V(D,H,J);return await N.initialize(),N}async function z(x){let{configStore:q,skillStore:B,pluginStore:D,remoteStore:H}=x,J=new V(q,B,D,H);return await J.initialize(),J}
2
- export{V as ob,y as pb,z as qb};
@@ -1,81 +0,0 @@
1
- import{$ as C,W as R,X as Q,Y as b,Z as x,_,aa as f}from"./chunk-jxsfzfac.js";import{yb as j}from"./chunk-kba8akjs.js";import{Kysely as q,sql as A}from"kysely";var K={maxRetries:3,baseDelayMs:100,nonRetryablePatterns:["database disk image is malformed","database is malformed","cannot rollback","no transaction is active","database or disk is full"],isRetryableError:(J)=>{let $=J?.message?.toLowerCase()||"";for(let B of K.nonRetryablePatterns)if($.includes(B.toLowerCase()))return!1;return $.includes("sqlite_busy")||$.includes("database is locked")||$==="sqlite_busy"||$==="database is locked"}};async function T(J,$){let B=null;for(let H=0;H<K.maxRetries;H++)try{return await J()}catch(Z){B=Z;let U=Z?.message?.toLowerCase()||"";if(!K.isRetryableError(Z)){if(U.includes("malformed")){let D=Error(`SQLite database is corrupted: ${Z.message}
2
-
3
- Context: ${$||"unknown"}
4
-
5
- Possible causes:
6
- 1. Database file was manually deleted or modified
7
- 2. Disk I/O errors during write operations
8
- 3. Concurrent access without proper locking
9
-
10
- Recovery options:
11
- - Delete the database file to start fresh (data will be lost)
12
- - Use SQLite recovery tools: sqlite3 <db> ".recover" > recover.sql
13
- - Switch to PostgreSQL/Redis for production use`);throw D.name="SQLiteCorruptError",D.cause=Z,D}throw Z}if(H<K.maxRetries-1){let D=K.baseDelayMs*Math.pow(2,H);console.warn(`SQLite lock detected${$?` (${$})`:""}, retrying in ${D}ms (attempt ${H+1}/${K.maxRetries})`),await new Promise((X)=>setTimeout(X,D))}}throw B}function E(J){if(J===null||typeof J!=="object")return JSON.stringify(J);if(Array.isArray(J))return JSON.stringify(J.map((H)=>E(H)));let $={},B=Object.keys(J).sort();for(let H of B)$[H]=J[H];return JSON.stringify($,(H,Z)=>{if(Z!==null&&typeof Z==="object"&&!Array.isArray(Z)){let U={},D=Object.keys(Z).sort();for(let X of D)U[X]=Z[X];return U}return Z})}class N extends x{db;isSetup;constructor(J,$){super($);this.db=new q({dialect:J}),this.isSetup=!1}static async fromConnStringAsync(J){let $;if(globalThis.Bun){console.log("LG | Using BunSqliteDialect "+J);let{BunSqliteDialect:B}=await import("kysely-bun-worker/normal");$=new N(new B({url:J}))}else{console.log("LG | Using NodeWasmDialect");let{default:B}=await import("node-sqlite3-wasm"),{NodeWasmDialect:H}=await import("kysely-wasm");console.log(J);let Z=new H({database:new B.Database(J)});$=new N(Z)}return await $.setup(),$}async setup(){if(this.isSetup)return;await A`PRAGMA busy_timeout = 5000`.execute(this.db),await A`PRAGMA journal_mode = WAL`.execute(this.db),await A`PRAGMA synchronous = NORMAL`.execute(this.db),await A`PRAGMA wal_autocheckpoint = 1000`.execute(this.db),await A`
14
- CREATE TABLE IF NOT EXISTS shallow_checkpoints (
15
- thread_id TEXT NOT NULL,
16
- checkpoint_ns TEXT NOT NULL DEFAULT '',
17
- checkpoint_id TEXT NOT NULL,
18
- parent_checkpoint_id TEXT,
19
- type TEXT,
20
- checkpoint BLOB,
21
- metadata BLOB,
22
- checkpoint_ts INTEGER NOT NULL DEFAULT 0,
23
- PRIMARY KEY (thread_id, checkpoint_ns)
24
- )`.execute(this.db),await A`
25
- CREATE INDEX IF NOT EXISTS idx_shallow_checkpoints_ts
26
- ON shallow_checkpoints(checkpoint_ts DESC)`.execute(this.db),await A`
27
- CREATE TABLE IF NOT EXISTS writes (
28
- thread_id TEXT NOT NULL,
29
- checkpoint_ns TEXT NOT NULL DEFAULT '',
30
- checkpoint_id TEXT NOT NULL,
31
- task_id TEXT NOT NULL,
32
- idx INTEGER NOT NULL,
33
- channel TEXT NOT NULL,
34
- type TEXT,
35
- value BLOB,
36
- PRIMARY KEY (thread_id, checkpoint_ns, checkpoint_id, task_id, idx)
37
- )`.execute(this.db),this.isSetup=!0}async get(J){return(await this.getTuple(J))?.checkpoint}async getTuple(J){await this.setup();let $=J.configurable?.thread_id,B=J.configurable?.checkpoint_ns??"",H=f(J);if($===void 0)return;let Z=this.db.selectFrom("shallow_checkpoints").select(["thread_id","checkpoint_ns","checkpoint_id","parent_checkpoint_id","type","checkpoint","metadata","checkpoint_ts",A`(
38
- SELECT json_group_array(
39
- json_object(
40
- 'task_id', pw.task_id,
41
- 'channel', pw.channel,
42
- 'type', pw.type,
43
- 'value', CAST(pw.value AS TEXT)
44
- )
45
- )
46
- FROM writes as pw
47
- WHERE pw.thread_id = shallow_checkpoints.thread_id
48
- AND pw.checkpoint_ns = shallow_checkpoints.checkpoint_ns
49
- AND pw.checkpoint_id = shallow_checkpoints.checkpoint_id
50
- )`.as("pending_writes"),A`(
51
- SELECT json_group_array(
52
- json_object(
53
- 'type', ps.type,
54
- 'value', CAST(ps.value AS TEXT)
55
- )
56
- )
57
- FROM writes as ps
58
- WHERE ps.thread_id = shallow_checkpoints.thread_id
59
- AND ps.checkpoint_ns = shallow_checkpoints.checkpoint_ns
60
- AND ps.checkpoint_id = shallow_checkpoints.parent_checkpoint_id
61
- AND ps.channel = ${Q}
62
- ORDER BY ps.idx
63
- )`.as("pending_sends")]).where("thread_id","=",$).where("checkpoint_ns","=",B);if(H)Z=Z.where("checkpoint_id","=",H);let U=await Z.executeTakeFirst();if(!U)return;if(H&&U.checkpoint_id!==H)return;let D=await Promise.all(JSON.parse(U.pending_writes||"[]").map(async(z)=>{return[z.task_id,z.channel,await this.serde.loadsTyped(z.type??"json",z.value??"")]})),X=await this.serde.loadsTyped(U.type??"json",new TextDecoder().decode(U.checkpoint));if(X.v<4&&U.parent_checkpoint_id!=null)await this.migratePendingSends(X,U.thread_id,U.parent_checkpoint_id);let W={configurable:{thread_id:U.thread_id,checkpoint_ns:U.checkpoint_ns,checkpoint_id:U.checkpoint_id}};return{checkpoint:X,config:W,metadata:await this.serde.loadsTyped(U.type??"json",new TextDecoder().decode(U.metadata)),parentConfig:U.parent_checkpoint_id?{configurable:{thread_id:U.thread_id,checkpoint_ns:U.checkpoint_ns,checkpoint_id:U.parent_checkpoint_id}}:void 0,pendingWrites:D}}async*list(J,$){await this.setup();let{limit:B,before:H,filter:Z}=$??{},U=J.configurable?.thread_id,D=J.configurable?.checkpoint_ns,X=this.db.selectFrom("shallow_checkpoints").select(["thread_id","checkpoint_ns","checkpoint_id","parent_checkpoint_id","type","checkpoint","metadata","checkpoint_ts",A`(
64
- SELECT json_group_array(
65
- json_object(
66
- 'task_id', pw.task_id,
67
- 'channel', pw.channel,
68
- 'type', pw.type,
69
- 'value', CAST(pw.value AS TEXT)
70
- )
71
- )
72
- FROM writes as pw
73
- WHERE pw.thread_id = shallow_checkpoints.thread_id
74
- AND pw.checkpoint_ns = shallow_checkpoints.checkpoint_ns
75
- AND pw.checkpoint_id = shallow_checkpoints.checkpoint_id
76
- )`.as("pending_writes")]);if(U)X=X.where("thread_id","=",U);if(D!==void 0&&D!==null)X=X.where("checkpoint_ns","=",D);if(H?.configurable?.checkpoint_id!==void 0)X=X.where("checkpoint_id","<",H.configurable.checkpoint_id);X=X.orderBy("checkpoint_ts","desc");let W=await X.execute(),z=0;for(let M of W){let V=await this.serde.loadsTyped(M.type??"json",new TextDecoder().decode(M.metadata));if(Z&&!this._checkMetadataFilterMatch(V,Z))continue;if(B!==void 0&&z>=B)return;let Y=await Promise.all(JSON.parse(M.pending_writes||"[]").map(async(F)=>{return[F.task_id,F.channel,await this.serde.loadsTyped(F.type??"json",F.value??"")]})),G=await this.serde.loadsTyped(M.type??"json",new TextDecoder().decode(M.checkpoint));if(G.v<4&&M.parent_checkpoint_id!=null)await this.migratePendingSends(G,M.thread_id,M.parent_checkpoint_id);z++,yield{config:{configurable:{thread_id:M.thread_id,checkpoint_ns:M.checkpoint_ns,checkpoint_id:M.checkpoint_id}},checkpoint:G,metadata:V,parentConfig:M.parent_checkpoint_id?{configurable:{thread_id:M.thread_id,checkpoint_ns:M.checkpoint_ns,checkpoint_id:M.parent_checkpoint_id}}:void 0,pendingWrites:Y}}}_checkMetadataFilterMatch(J,$){for(let[B,H]of Object.entries($)){let Z=J?.[B];if(H===null){if(!(B in(J||{}))||Z!==null)return!1}else if(typeof H==="object"&&!Array.isArray(H)){if(typeof Z!=="object"||Z===null)return!1;if(E(H)!==E(Z))return!1}else if(Z!==H)return!1}return!0}async put(J,$,B,H){await this.setup();let Z=J.configurable?.thread_id,U=J.configurable?.checkpoint_ns??"",D=J.configurable?.checkpoint_id;if(!Z)throw Error("thread_id is required");let X=$.id||R(0),W=b($),[[z,M],[V,Y]]=await Promise.all([this.serde.dumpsTyped(W),this.serde.dumpsTyped(B)]);if(z!==V)throw Error("Failed to serialize checkpoint and metadata to the same type.");let G=Z,F=U,P=X;return await T(async()=>{await this.db.transaction().execute(async(L)=>{let O=await L.selectFrom("shallow_checkpoints").select(["checkpoint_id"]).where("thread_id","=",G).where("checkpoint_ns","=",F).executeTakeFirst();if(O&&O.checkpoint_id!==P)await L.deleteFrom("writes").where("thread_id","=",G).where("checkpoint_ns","=",F).where("checkpoint_id","=",O.checkpoint_id).execute();await L.insertInto("shallow_checkpoints").values({thread_id:G,checkpoint_ns:F,checkpoint_id:P,parent_checkpoint_id:D??null,type:z,checkpoint:new Uint8Array(Buffer.from(M)),metadata:new Uint8Array(Buffer.from(Y)),checkpoint_ts:Date.now()}).onConflict((v)=>v.columns(["thread_id","checkpoint_ns"]).doUpdateSet({checkpoint_id:P,parent_checkpoint_id:D??null,type:z,checkpoint:new Uint8Array(Buffer.from(M)),metadata:new Uint8Array(Buffer.from(Y)),checkpoint_ts:Date.now()})).execute()})},`put(${Z}/${X})`),{configurable:{thread_id:Z,checkpoint_ns:U,checkpoint_id:X}}}async putWrites(J,$,B){await this.setup();let H=J.configurable?.thread_id,Z=J.configurable?.checkpoint_ns??"",U=J.configurable?.checkpoint_id;if(!H||!U)throw Error("thread_id and checkpoint_id are required");let D=await Promise.all($.map(async(X,W)=>{let[z,M]=await this.serde.dumpsTyped(X[1]);return{thread_id:H,checkpoint_ns:Z,checkpoint_id:U,task_id:B,idx:C[X[0]]??W,channel:X[0],type:z,value:new Uint8Array(Buffer.from(M))}}));if(D.length===0)return;await T(async()=>{await this.db.transaction().execute(async(X)=>{await X.deleteFrom("writes").where("thread_id","=",H).where("checkpoint_ns","=",Z).where("checkpoint_id","=",U).where("task_id","=",B).execute();for(let W of D)await X.insertInto("writes").values(W).execute()})},`putWrites(${H}/${U}/${B})`)}async deleteThread(J){await T(async()=>{await this.db.transaction().execute(async($)=>{await $.deleteFrom("shallow_checkpoints").where("thread_id","=",J).execute(),await $.deleteFrom("writes").where("thread_id","=",J).execute()})},`deleteThread(${J})`)}async migratePendingSends(J,$,B){let H=await this.db.selectFrom("writes as ps").select(["ps.checkpoint_id",A`json_group_array(
77
- json_object(
78
- 'type', ps.type,
79
- 'value', CAST(ps.value AS TEXT)
80
- )
81
- )`.as("pending_sends")]).where("ps.thread_id","=",$).where("ps.checkpoint_id","=",B).where("ps.channel","=",Q).orderBy("ps.idx").executeTakeFirst();if(!H)return;let Z=J;Z.channel_values??={},Z.channel_values[Q]=await Promise.all(JSON.parse(H.pending_sends||"[]").map(({type:U,value:D})=>this.serde.loadsTyped(U,D))),Z.channel_versions[Q]=Object.keys(J.channel_versions).length>0?_(...Object.values(J.channel_versions)):this.getNextVersion(void 0)}}export{N as SqliteShallowSaver};
@@ -1 +0,0 @@
1
- import{R as C,T as S,U as y,V as w}from"./chunk-va71tsw3.js";import{ea as l,fa as Z,ga as J,ja as d,oa as V,pa as m,ra as D,ta as u}from"./chunk-nwy6n6b6.js";import{ub as q,yb as p}from"./chunk-kba8akjs.js";var L=q(l(),1);function f({filter:H,enabled:M=!0}){return S({queryKey:w.tasks.list(H),queryFn:async()=>{let{getTasksStore:X}=await import("./chunk-jfhc5c0d.js"),Y=X(process.cwd());if(await Y.initialize(),H)return await Y.getTasksByStatus(H);return await Y.getAllTasks()},enabled:M,staleTime:30000})}function I(){let H=C();return y({mutationFn:async(M)=>{let{getTasksStore:X}=await import("./chunk-jfhc5c0d.js"),Y=X(process.cwd());return await Y.initialize(),await Y.deleteTask(M)},onSuccess:(M,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:"待反馈"}},E={simple:{emoji:"\uD83D\uDFE2",label:"简单"},medium:{emoji:"\uD83D\uDFE1",label:"中等"},complex:{emoji:"\uD83D\uDD34",label:"复杂"}},i=({task:H,onClose:M,onExecuteTask:X,onDelete:Y})=>{V((K,Q)=>{if(Q.escape)M();else if(Q.return&&X){if(H.status==="pickup"||H.status==="error"||H.status==="feedback")X(H)}else if((Q.backspace||Q.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?E[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,Q)=>z.jsxDEV(J,{dimColor:!0,children:[Q+1,". ",K]},`ac-${Q}-${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,Q)=>{let U=K.status?F[K.status]:F.pickup;return z.jsxDEV(Z,{children:z.jsxDEV(J,{color:U.color,children:[U.emoji," ",Q+1,". ",K.title]},void 0,!0,void 0,this)},`child-task-${Q}-${K.id||Q}`,!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)},j=i;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:M})=>{let{data:X=[]}=f(),Y=I(),[R,A]=L.useState(null),G=L.useRef(A),K=L.useRef(M);L.default.useEffect(()=>{G.current=A},[A]),L.default.useEffect(()=>{K.current=M},[M]);let Q=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(d,{},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(j,{task:R,onClose:Q,onExecuteTask:M,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,253 +0,0 @@
1
- import{Ea as _}from"./chunk-1y82m5kn.js";import{Ma as G,Oa as T,Pa as V,Qa as x,Ra as R}from"./chunk-zwxjkwqd.js";function Z($,f="Human",J="AI"){let q=[];for(let B of $){let U;if(B.type==="human")U=f;else if(B.type==="ai")U=J;else if(B.type==="system")U="System";else if(B.type==="tool")U="Tool";else if(B.type==="generic")U=B.role;else throw Error(`Got unsupported message type: ${B.type}`);let O=B.name?`${B.name}, `:"",Q=typeof B.content==="string"?B.content:JSON.stringify(B.content,null,2);q.push(`${U}: ${O}${Q}`)}return q.join(`
2
- `)}import{REMOVE_ALL_MESSAGES as j,START as I,StateGraph as S}from"@langchain/langgraph";import{AIMessage as v,RemoveMessage as u}from"@langchain/core/messages";import{HumanMessage as b}from"@langchain/core/messages";import{z as K}from"zod";import{promises as W}from"fs";import X from"path";import N from"yaml";var H=($)=>{return $?.replace(process.cwd(),".")||$||""};import{createAgent as P,toolStrategy as p}from"langchain";var E=K.object({summary_of_chat:K.string().describe("对话总结(300-500字):1) 完整复现对话的核心过程(任务背景→关键决策→解决方案→最终结果);2) 明确说明接下来要做什么(后续行动、待完成任务、需要用户确认的事项);3) 突出关键成果和交付物"),name:K.string().describe("记忆名称(kebab-case 格式)"),description:K.string().describe("对于这个记忆的中等长度描述(索引综述,200-500字符,包含背景、关键点、适用场景)"),tags:K.array(K.string()).describe("记忆标签"),category:K.enum(["architecture","bug-fix","workflow","configuration","optimization"]).describe("记忆分类"),created:K.string().describe("创建日期(ISO 格式:YYYY-MM-DD)"),last_updated:K.string().describe("最后更新日期(ISO 格式:YYYY-MM-DD)"),priority:K.enum(["high","medium","low"]).describe("优先级"),context_scope:K.enum(["user","project"]).describe("上下文范围"),content:K.string().describe("记忆内容(详细说明,包含代码示例)")}),k=`你是一个负责分析对话并提取关键信息的智能助手。
3
-
4
- ## 任务
5
-
6
- 1. **对话总结 (summary_of_chat)**:完整复现对话并明确后续行动
7
- 2. **记忆提取**:判断是否有值得保存为长期记忆的信息
8
-
9
- ## 对话总结要求 (summary_of_chat)
10
-
11
- **必须包含以下三个部分**:
12
-
13
- ### 1. 完整复现对话核心过程
14
- - **任务背景**:用户想做什么?遇到什么问题?
15
- - **关键决策**:做出了什么选择?为什么?
16
- - **解决方案**:具体怎么实现的?用了什么技术/方法?
17
- - **最终结果**:完成了什么?输出了什么?
18
-
19
- ### 2. 明确后续行动
20
- - **待完成任务**:还有哪些未完成的工作?
21
- - **需要确认**:哪些事项需要用户决策?
22
- - **下一步建议**:建议接下来做什么?
23
-
24
- ### 3. 突出关键成果
25
- - **交付物**:生成了什么文件/代码/文档?
26
- - **价值点**:解决了什么核心问题?
27
- - **可复用性**:什么内容可以复用?
28
-
29
- **格式要求**:
30
- - 300-500 字
31
- - 使用清晰的结构(可用 → 表示流程)
32
- - 突出关键信息(文件路径、函数名、配置项)
33
-
34
- **示例**:
35
- \`\`\`
36
- 用户需要为 TUI 应用添加模型选择面板。通过创建 ModelPanel 组件实现交互式界面(↑↓选择、Enter切换、q关闭),在 Chat.tsx 中扩展 activeView 状态添加 'model' 类型,定义 switchToModel 回调并传递到命令系统,注册 /model-panel 和 /mp 命令。修复了 CommandHandler 未解构 switchToModel 的 bug。✓ 完成:可用的模型选择面板;⏳ 待定:是否需要添加模型描述信息展示;→ 建议:测试面板在不同终端下的渲染效果
37
- \`\`\`
38
-
39
- ## 记忆评分机制(总分 10 分,≥ 6 分才保存)
40
-
41
- ## 记忆评分机制(总分 10 分,≥ 6 分才保存)
42
-
43
- 1. **重要性** (0-3 分)
44
- - 3 分:关键技术决策、架构设计、重要问题解决方案
45
- - 2 分:有用的编码模式、最佳实践
46
- - 1 分:一般性建议、参考信息
47
- - 0 分:无实际内容
48
-
49
- 2. **独特性** (0-3 分)
50
- - 3 分:项目特定配置、非常规解决方案
51
- - 2 分:非显而易见的技巧、特定场景知识
52
- - 1 分:略有新意的做法
53
- - 0 分:常见知识、通用做法
54
-
55
- 3. **可复用性** (0-2 分)
56
- - 2 分:跨场景可复用的模式/方法
57
- - 1 分:特定场景下可复用
58
- - 0 分:一次性信息、临时性内容
59
-
60
- 4. **持久性** (0-2 分)
61
- - 2 分:长期有效(架构决策、代码模式)
62
- - 1 分:中期有效(配置信息、工作流程)
63
- - 0 分:临时信息(调试过程、一次性请求)
64
-
65
- **评分 < 6 分**:设置 name 为 "no-memory-{timestamp}",content 为 "无重要信息"
66
-
67
- ## 记忆命名规范(强制执行)
68
-
69
- **格式要求**:
70
- - **仅包含小写字母、数字和单个连字符(-)**
71
- - **不能包含空格、下划线、中文或其他特殊字符**
72
- - **不能以连字符开头或结尾**
73
- - **不能有连续的连字符**
74
-
75
- **正确示例**:
76
- - \`memory-system-design\`
77
- - \`langchain-structured-output\`
78
- - \`tui-panel-implementation\`
79
-
80
- **错误示例**:
81
- - \`Memory_System\` ❌(大写、下划线)
82
- - \`zen-code-user-guide\` ❌(中文)
83
- - \`memory--system\` ❌(连续连字符)
84
- - \`-memory-system\` ❌(以连字符开头)
85
- - \`memory system\` ❌(包含空格)
86
-
87
- **命名建议**:
88
- - 从核心主题中提取 2-4 个英文关键词
89
- - 使用具体的技术术语
90
- - 示例:
91
- - "langchain-structured-output-single-object"
92
- - "memory-system-design"
93
- - "middleware-execution-order"
94
- - "tui-panel-system"
95
- - 避免通用名称:不使用 "fix-bug" 或 "optimization"
96
-
97
- ## 内容提取模板
98
-
99
- 提取的内容应包含以下部分(按需选择):
100
-
101
- **背景**:什么问题/场景?
102
- **决策**:做了什么选择?
103
- **原因**:为什么这样选择?
104
- **实现**:关键代码、文件路径、配置
105
- **适用**:什么场景适用?什么场景不适用?
106
- **注意**:有什么陷阱或边界情况?
107
-
108
- ## 代码引用原则(强制执行)
109
-
110
- **默认规则:代码超过 5 行 → 使用文件引用**
111
-
112
- ### 何时使用文件引用
113
- - 完整函数或方法实现
114
- - 完整类或组件定义
115
- - 长配置文件
116
- - 任何 > 5 行的代码块
117
-
118
- ### 文件引用格式
119
- \`文件路径[:行号范围]\`:简短说明
120
-
121
- 示例:
122
- - \`agents/code/graph.ts:120-180\`:中间件链执行顺序
123
- - \`tui/src/chat/Chat.tsx\`:完整的面板切换回调实现
124
- - \`.claude/skills/web-research/SKILL.md\`:技能结构模板
125
-
126
- ### 何时内联代码(仅限以下情况)
127
- 1. **极短片段**(≤ 5 行):用于说明关键概念
128
- 2. **配置示例**:JSON/YAML 配置片段
129
- 3. **错误示例**:展示错误模式(不超过 5 行)
130
-
131
- ### 代码长度限制
132
- - **总代码占比**:content 中代码块总行数 ≤ 30%
133
- - **单个代码块**:不超过 5 行
134
- - **优先级**:文件引用 > 概述 > 短片段
135
-
136
- ### 长代码处理方式
137
-
138
- **错误示范**(代码过长):
139
- \`\`\`typescript
140
- const middleware = [
141
- new SubAgentsMiddleware(),
142
- new AgentsMdMiddleware(),
143
- // ... 省略 20 行
144
- ];
145
- \`\`\`
146
-
147
- **正确示范**(文件引用):
148
- 中间件列表定义参见 \`agents/code/graph.ts:45-60\`,执行顺序为:SubAgents → AgentsMd → Skills → MCP → HumanInTheLoop → Cache
149
-
150
- **关键片段**(如必要):
151
- \`\`\`typescript
152
- // 仅 3 行核心逻辑
153
- middleware.forEach(m => m.wrapModelCall(req, handler))
154
- \`\`\`
155
-
156
-
157
- ## 输出格式要求
158
-
159
- **你必须输出单个 JSON 对象(不是数组)**,包含以下字段:
160
-
161
- - **name** (string): 记忆名称,kebab-case 格式,例如 "memory-system-design"
162
- - **description** (string): 中等长度描述,索引综述(200-500字符),包含:
163
- * 背景和问题/场景
164
- * 关键决策或解决方案
165
- * 适用场景或范围
166
- * 使用清晰的分号或句号分隔各部分
167
- - **content** (string): 详细内容,包含技术实现细节、文件路径、代码示例、关键决策等,按照内容提取模板组织
168
- - **tags** (array of string): 记忆标签,3-5 个,用于检索和分类,例如 ["langchain", "structured-output", "zod"]
169
- - **category** (enum): 记忆分类,可选值:architecture, bug-fix, workflow, configuration, optimization
170
- - **priority** (enum): 优先级,可选值:high, medium, low
171
- - **created** (string): 创建日期,ISO 格式 YYYY-MM-DD,例如 "2025-01-13"
172
- - **last_updated** (string): 最后更新日期,ISO 格式 YYYY-MM-DD,例如 "2025-01-13"
173
- - **context_scope** (enum): 上下文范围,可选值:user, project
174
-
175
- ## 分类标准
176
-
177
- - **architecture**: 架构决策、设计模式、系统结构
178
- - **bug-fix**: Bug 修复和问题解决方案
179
- - **workflow**: 工作流程和最佳实践
180
- - **configuration**: 配置和环境设置
181
- - **optimization**: 性能优化和改进
182
-
183
- ## 优先级标准
184
-
185
- - **high**: 关键架构决策、重要问题解决方案、影响系统正确性的问题
186
- - **medium**: 有用的模式、次要的配置信息、影响开发效率的问题
187
- - **low**: 一般性建议、参考信息、优化建议
188
-
189
- ## 示例输出
190
-
191
- ### 示例 1:有价值的记忆
192
- \`\`\`json
193
- {
194
- "summary_of_chat": "用户反馈记忆系统的 summary_of_chat 字段过于简单,需要增强对话复现和后续行动说明。修改了 agents/code/memories/analyze.ts:1) 更新 MemoryCandidateSchema 中 summary_of_chat 的描述,要求 300-500 字包含完整对话过程、后续行动、关键成果;2) 在 smart_memory_prompt 中添加专门的"对话总结要求"章节,明确三部分内容(完整复现、后续行动、关键成果);3) 提供格式示例和清晰的模板。✓ 完成:增强版记忆提示词;⏳ 待定:是否需要添加示例输出展示新的 summary_of_chat 格式;→ 建议:测试新提示词在实际对话中的表现",
195
- "name": "memory-prompt-summary-enhancement",
196
- "description": "增强记忆系统的 summary_of_chat 字段要求,要求完整复现对话过程并明确后续行动;包括任务背景→关键决策→解决方案→最终结果的完整流程,以及待完成任务、需要确认事项、下一步建议;适用于所有需要高质量对话总结的场景",
197
- "content": "## 背景\\n\\n用户反馈记忆系统生成的 summary_of_chat 过于简单,缺少后续行动说明,无法有效回顾对话和继续工作。\\n\\n## 解决方案\\n\\n修改 \`agents/code/memories/analyze.ts\` 的三处:\\n\\n1. **Schema 增强**(第 18 行):\\n\\\`\\\`\\\`typescript\\nsummary_of_chat: z.string().describe('对话总结(300-500字):1) 完整复现对话的核心过程(任务背景→关键决策→解决方案→最终结果);2) 明确说明接下来要做什么(后续行动、待完成任务、需要用户确认的事项);3) 突出关键成果和交付物')\\n\\\`\\\`\\\`\\n\\n2. **提示词添加专门章节**:在 smart_memory_prompt 中添加"对话总结要求"部分,明确三个组成部分:完整复现、后续行动、关键成果\\n\\n3. **提供格式示例**:使用 → 表示流程,✓ 表示完成,⏳ 表示待定,→ 表示建议\\n\\n## 适用场景\\n\\n- 需要高质量对话总结的 AI 系统\\n- 需要明确后续行动的任务管理场景",
198
- "tags": ["prompt-engineering", "memory-system", "conversation-summary", "langchain"],
199
- "category": "optimization",
200
- "priority": "medium",
201
- "created": "2025-01-17",
202
- "last_updated": "2025-01-17",
203
- "context_scope": "project"
204
- }
205
- \`\`\`
206
-
207
- ### 示例 2:无重要信息
208
- \`\`\`json
209
- {
210
- "summary_of_chat": "用户询问如何查看 TUI 应用中的模型列表。已告知可通过 /model-panel 或 /mp 命令打开模型选择面板,使用 ↑↓ 键选择、Enter 键切换模型、q 键关闭面板。当前无其他问题。✓ 完成:问题已解答;⏳ 待定:无;→ 建议:如需更多帮助可使用 /help 命令",
211
- "name": "no-memory-1736736000000",
212
- "description": "本次对话无重要信息需要保存",
213
- "content": "无重要信息",
214
- "tags": [],
215
- "category": "workflow",
216
- "priority": "low",
217
- "created": "2025-01-13",
218
- "last_updated": "2025-01-13",
219
- "context_scope": "project"
220
- }
221
- \`\`\`
222
-
223
- ## 重要原则
224
-
225
- 1. **宁缺毋滥**:评分 < 6 分时,返回"无重要信息"
226
- 2. **避免重复**:不要记录显而易见或通用的知识
227
- 3. **用户优先**:明确记录用户的指示和偏好
228
- 4. **精确具体**:使用具体的文件名、代码片段、配置项
229
- 5. **独立完整**:记忆应能独立理解,不依赖外部上下文
230
- `;async function F($,f){let J=[new b(f),new b("请分析这段对话,提取值得保存的信息。")],B=await P({model:$,tools:[],systemPrompt:k,responseFormat:p(E)}).invoke({messages:J});return await D(B.structuredResponse)}function w($,f){let J=$.toLowerCase().replace(/[^\u4e00-\u9fa5a-z0-9\s]/gi," ").split(/\s+/).filter((U)=>U.length>1).slice(0,4);if(J.length===0)return`memory-${Date.now()}-${f}`;let B=`${J.join("-")}-${Date.now()}-${f}`;return B.length>64?B.substring(0,61)+"...":B}function C($){return $.toLowerCase().trim().replace(/[^a-z0-9]+/g,"-").replace(/-+/g,"-").replace(/^-|-$/g,"")}async function D($){if($.name.startsWith("no-memory-"))return`${$.summary_of_chat}
231
-
232
- ---
233
-
234
- name: "${$.name}"
235
- description: "${$.description}"
236
-
237
- ⚠️ 无重要信息,未保存记忆`;let f=X.join(process.cwd(),".claude/memories");await W.mkdir(f,{recursive:!0});let q=C($.name||w($.content,0))||w($.content,0),B=X.join(f,q);await W.mkdir(B,{recursive:!0});let U=$.content.indexOf(`
238
- `),O=U>0?$.content.substring(0,Math.min(U,100)):$.content.substring(0,Math.min(100,$.content.length)),Q={name:q,description:$.description.replace(/\n/g," "),tags:$.tags,category:$.category,created:$.created,last_updated:$.last_updated,priority:$.priority,context_scope:$.context_scope},L=`---
239
- ${N.stringify(Q,{indent:2,lineWidth:0})}
240
- ---
241
-
242
- # ${O}
243
-
244
- ${$.content}
245
- `,Y=X.join(B,"MEMORY.md");return await W.writeFile(Y,L,"utf-8"),`${$.summary_of_chat}
246
-
247
- ---
248
-
249
- name: "${$.name}"
250
- description: "${$.description}"
251
-
252
- ✓ 保存记忆: ${H(Y)}`}var c={smart_memory:async($)=>{let f=await V($.model_id,{modelProvider:$.provider_type,streamUsage:!0,enableThinking:$.enable_thinking??!0}),J=await F(f,Z($.messages));return{switch_command:"",messages:[new u({id:j}),new v(J)]}}};async function A($,f,J,q){let B=await x($,f,J,q);J.thread_id=G(q);let U=await B.invoke(J,{recursionLimit:500,configurable:q.configurable,context:q.context});return{switch_command:"",task_store:U.task_store,messages:U.messages}}function z(){return new S(T).addNode("graph",async($,f)=>{let{switch_command:J}=$;if(J==="smart_memory")return c.smart_memory($);let q=_,B=await R(q),U=(J==="default"?"agents/default":J)||"agents/default";if(!B.includes(U))throw Error(`Unknown agent: ${J||"default"}. Available: ${B.join(", ")}`);return await A(U,q,$,f)}).addEdge(I,"graph").compile()}var O$=z();
253
- export{O$ as Ca};
@@ -1,2 +0,0 @@
1
- import{R as U,T as Y,U as B,V as W}from"./chunk-va71tsw3.js";import{ea as q,fa as T,ga as O,pa as j}from"./chunk-nwy6n6b6.js";import{pb as k}from"./chunk-cyexd09c.js";import{ub as b}from"./chunk-kba8akjs.js";var J=b(q(),1);function K({manager:G,enabled:N=!0}){return Y({queryKey:W.config.detail(),queryFn:async()=>{return await G.initialize(),await G.getConfig()},enabled:N,staleTime:300000,gcTime:600000})}function P({manager:G}){let N=U();return B({mutationFn:async(R)=>{return await G.updateConfig(R),await G.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((G)=>{return H=G,Z=null,G});return Z}return Promise.resolve(H)}var I=J.createContext(void 0),E=({manager:G,get_allowed_models:N,children:R})=>{let{data:z,isLoading:V,error:x}=K({manager:G}),$=P({manager:G}),{data:F=[],isLoading:h,error:p}=Y({queryKey:W.models.available(),queryFn:N,staleTime:1800000,retry:1}),A=J.useMemo(()=>{return{provider_id:z?.provider_id||"openai",provider_type:z?.provider_type||"openai",model_id:z?.model_id||F[0]?.id||"default",mcp_config:z?.mcp_config,enable_thinking:z?.enable_thinking??!0,switch_command:z?.switch_command||"",cwd:process.cwd()}},[z?.provider_id,z?.provider_type,z?.model_id,z?.mcp_config,z?.enable_thinking,z?.switch_command,z?.providers,F]),Q=J.useMemo(()=>{return z?.compact_mode??!1},[z?.compact_mode]),w=async()=>{await $.mutateAsync({compact_mode:!Q})},v=J.useMemo(()=>{return z?.show_detailed_info??!1},[z?.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:z||null,updateConfig:D,extraParams:A,AVAILABLE_MODELS:F,manager:G,compactMode:Q,toggleCompactMode:w,showDetailedInfo:v,toggleDetailedInfo:L},children:R},void 0,!1,void 0,this)},s=()=>{let G=J.useContext(I);if(G===void 0)throw Error("useSettings must be used within a SettingsProvider");return G},r=({get_allowed_models:G,children:N})=>{let[R,z]=J.useState(null);if(J.useEffect(()=>{S().then(z)},[]),!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:G,children:N},void 0,!1,void 0,this)};
2
- export{s as N,r as O};
@@ -1 +0,0 @@
1
- import{R,T as v,U as _,V as b}from"./chunk-va71tsw3.js";import{ea as S,fa as J,ga as W,oa as q,pa as h}from"./chunk-nwy6n6b6.js";import{rb as U}from"./chunk-9dahn9h7.js";import{ub as w}from"./chunk-kba8akjs.js";var G=w(S(),1);function M({limit:X=100,enabled:H=!0}={}){return v({queryKey:b.errors.list(),queryFn:async()=>{return U.getRecentErrors(X)},enabled:H,staleTime:5000,refetchInterval:5000})}function O(){let X=R();return _({mutationFn:async(H)=>{return U.deleteError(H)},onSuccess:()=>{X.invalidateQueries({queryKey:b.errors.all})}})}function Q(){let X=R();return _({mutationFn:async()=>{U.clearAll()},onSuccess:()=>{X.invalidateQueries({queryKey:b.errors.all})}})}var z=w(h(),1);import{join as B}from"node:path";var T={error:{emoji:"❌",color:"red",label:"错误"},warning:{emoji:"⚠️",color:"yellow",label:"警告"}},p={Agent:{emoji:"\uD83E\uDD16",label:"Agent"},Tool:{emoji:"\uD83D\uDD27",label:"Tool"},Terminal:{emoji:"\uD83D\uDCBB",label:"Terminal"},System:{emoji:"⚙️",label:"System"},Unknown:{emoji:"❓",label:"Unknown"}};function g(X){let H=new Date(X),Z=new Date,P=Z.getTime()-H.getTime();if(P<60000)return"刚刚";if(P<3600000)return`${Math.floor(P/60000)}分钟前`;if(H.toDateString()===Z.toDateString())return H.toLocaleTimeString("zh-CN",{hour:"2-digit",minute:"2-digit"});return H.toLocaleDateString("zh-CN",{month:"short",day:"numeric"})}function c(X,H=80){if(X.length<=H)return X;return X.slice(0,H-3)+"..."}var d=({onClose:X})=>{let{data:H=[],isLoading:Z}=M({limit:50}),P=O(),N=Q(),L=G.useCallback(async()=>{await N.mutateAsync()},[N]);q((Y,A)=>{if(A.escape)X();if(A.ctrl&&Y==="l")L()},{isActive:!0});let f=B(process.cwd(),".zen-code","errors.json"),F=G.default.useMemo(()=>{let Y=H.filter(($)=>$.level==="error").length,A=H.filter(($)=>$.level==="warning").length;return{errorCount:Y,warningCount:A}},[H]);return z.jsxDEV(J,{flexDirection:"column",paddingX:1,paddingY:1,children:[z.jsxDEV(J,{marginBottom:1,children:[z.jsxDEV(W,{bold:!0,color:"cyan",children:"\uD83D\uDCCB 错误日志"},void 0,!1,void 0,this),z.jsxDEV(J,{marginLeft:2,children:[z.jsxDEV(W,{color:"red",children:["❌ ",F.errorCount]},void 0,!0,void 0,this),z.jsxDEV(W,{children:" "},void 0,!1,void 0,this),z.jsxDEV(W,{color:"yellow",children:["⚠️ ",F.warningCount]},void 0,!0,void 0,this),z.jsxDEV(W,{dimColor:!0,children:["| Total: ",H.length]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),Z&&z.jsxDEV(J,{marginBottom:1,children:z.jsxDEV(W,{dimColor:!0,children:"加载中..."},void 0,!1,void 0,this)},void 0,!1,void 0,this),!Z&&H.length>0&&z.jsxDEV(J,{flexDirection:"column",children:H.slice(0,20).map((Y,A)=>{let $=T[Y.level],K=p[Y.source]||p.Unknown,k=g(Y.timestamp),I=c(Y.message);return z.jsxDEV(J,{flexDirection:"column",marginBottom:1,children:[z.jsxDEV(J,{children:z.jsxDEV(W,{color:$.color,children:[$.emoji," ",I]},void 0,!0,void 0,this)},void 0,!1,void 0,this),z.jsxDEV(J,{marginLeft:2,children:[z.jsxDEV(W,{dimColor:!0,children:[K.emoji," ",K.label," | ",k]},void 0,!0,void 0,this),Y.file&&z.jsxDEV(W,{dimColor:!0,color:"gray",children:[" ","| \uD83D\uDCC4 ",Y.file,Y.line&&`:${Y.line}`]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)]},Y.id,!0,void 0,this)})},void 0,!1,void 0,this),!Z&&H.length===0&&z.jsxDEV(J,{flexDirection:"column",marginBottom:1,children:[z.jsxDEV(J,{marginBottom:1,children:z.jsxDEV(W,{dimColor:!0,children:"暂无错误记录"},void 0,!1,void 0,this)},void 0,!1,void 0,this),z.jsxDEV(J,{marginBottom:1,children:z.jsxDEV(W,{dimColor:!0,children:"错误将自动收集到:"},void 0,!1,void 0,this)},void 0,!1,void 0,this),z.jsxDEV(J,{marginBottom:1,children:z.jsxDEV(W,{color:"yellow",children:f},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this),z.jsxDEV(J,{marginTop:1,children:z.jsxDEV(W,{dimColor:!0,children:"按 ESC 返回 | Ctrl+L 清空所有"},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this)},E=d;export{E as default};
@@ -1,3 +0,0 @@
1
- import{f as v,g as Z}from"./chunk-30sq2w0d.js";import{ea as k,fa as Q,ga as G,oa as M,pa as F,ta as O}from"./chunk-nwy6n6b6.js";import"./chunk-5x8nxw0t.js";import{ub as Y}from"./chunk-kba8akjs.js";var N=Y(k(),1);var y=Y(k(),1);var J=Y(F(),1),h=({pid:z,onClose:A})=>{let[H,R]=y.useState({stdout:"",stderr:""});M((W,X)=>{if(X.escape)A()}),y.useEffect(()=>{let W=()=>{let _=Z.getProcessOutput(z);if(_)R(_)};W();let X=setInterval(W,500);return()=>clearInterval(X)},[z]);let $=I(H.stdout,20),U=I(H.stderr,20);return J.jsxDEV(Q,{flexDirection:"column",padding:1,children:[J.jsxDEV(Q,{justifyContent:"space-between",marginBottom:1,children:[J.jsxDEV(G,{bold:!0,color:"cyan",children:["进程 [",z,"] 输出"]},void 0,!0,void 0,this),J.jsxDEV(G,{dimColor:!0,children:"按 ESC 返回"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),J.jsxDEV(Q,{flexDirection:"column",marginBottom:1,children:[J.jsxDEV(G,{color:"green",bold:!0,children:"STDOUT:"},void 0,!1,void 0,this),J.jsxDEV(Q,{borderStyle:"single",borderColor:"green",paddingX:1,children:J.jsxDEV(G,{children:$||"(空)"},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this),J.jsxDEV(Q,{flexDirection:"column",children:[J.jsxDEV(G,{color:"red",bold:!0,children:"STDERR:"},void 0,!1,void 0,this),J.jsxDEV(Q,{borderStyle:"single",borderColor:"red",paddingX:1,children:J.jsxDEV(G,{children:U||"(空)"},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)};function I(z,A){let H=z.split(`
2
- `);if(H.length<=A)return z;return`...${H.slice(-A).join(`
3
- `)}`}var g=h;var w=Y(F(),1),T=({onClose:z})=>{let[A,H]=N.useState([]),[R,$]=N.useState(null);N.useEffect(()=>{let q=async()=>{let b=await Z.getProcessList();H(b)};q();let K=setInterval(q,1000);return()=>clearInterval(K)},[]);let U=N.useCallback(async()=>{let q=await Z.getProcessList();H(q)},[]),W=N.useCallback((q,K,b)=>{let C=q.status==="running"?"\uD83D\uDFE2":"\uD83D\uDD34",B=f(q.duration);return w.jsxDEV(Q,{flexDirection:"column",children:[w.jsxDEV(Q,{children:[w.jsxDEV(G,{color:"cyan",children:[C," [",q.pid,"]"]},void 0,!0,void 0,this),w.jsxDEV(G,{children:[" ",P(q.command,40)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),w.jsxDEV(Q,{paddingLeft:3,children:[w.jsxDEV(G,{dimColor:!0,children:["⏱ ",B]},void 0,!0,void 0,this),w.jsxDEV(G,{dimColor:!0,children:[" | CPU: ",q.cpu.toFixed(1),"%"]},void 0,!0,void 0,this),w.jsxDEV(G,{dimColor:!0,children:[" | MEM: ",(q.memory/1024/1024).toFixed(1),"MB"]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)},[]),X=N.useCallback((q)=>{Z.killProcess(q.pid)},[]),_=N.useCallback((q)=>{$(q.pid)},[]),L=N.useCallback((q)=>{return w.jsxDEV(G,{dimColor:!0,children:["运行中: ",q.filter((K)=>K.status==="running").length," | 总计: ",q.length," | Enter 查看输出 | Backspace/Delete 关闭进程"]},void 0,!0,void 0,this)},[]),S=N.useMemo(()=>({id:"processes",title:"进程管理器",icon:"⚙️",dataSource:()=>Promise.resolve(A),searchable:!0,searchFields:["command"],renderItem:W,onSelect:_,onDelete:X,itemHeight:2,statusInfo:L,keyMap:{r:()=>{U()}}}),[A,W,_,X,L,U]);return w.jsxDEV(w.Fragment,{children:R!==null?w.jsxDEV(v,{name:"ProcessOutputPanel",fallback:null,children:w.jsxDEV(g,{pid:R,onClose:()=>$(null)},void 0,!1,void 0,this)},void 0,!1,void 0,this):w.jsxDEV(O,{config:S,onClose:z},void 0,!1,void 0,this)},void 0,!1,void 0,this)};function f(z){let A=Math.floor(z/1000),H=Math.floor(A/60),R=Math.floor(H/60);if(R>0)return`${R}h ${H%60}m`;if(H>0)return`${H}m ${A%60}s`;return`${A}s`}function P(z,A){return z.length>A?z.slice(0,A-3)+"...":z}var n=T;export{n as default};
@@ -1 +0,0 @@
1
- import{$a as n,Ua as b,Va as h,Wa as i,Xa as j,Ya as k,Za as l,_a as m,ab as o,bb as p,cb as q,db as r,eb as s,fb as t,gb as u,hb as v,ib as w,jb as x,kb as y,lb as z,mb as A}from"./chunk-5rr85f28.js";import{nb as e}from"./chunk-cggjws6a.js";import{ob as a,pb as f,qb as g}from"./chunk-cyexd09c.js";import{sb as c}from"./chunk-r2h3x9zv.js";import{tb as d}from"./chunk-1ttywx0y.js";import"./chunk-kba8akjs.js";export{i as createServerWithManager,m as createRemoteManager,f as createFSManager,g as createCustomManager,h as createConfigServer,y as TaskStoreSchema,A as TaskStoreManager,t as TaskStatusSchema,w as TaskNodeSchema,v as TaskExecutionSchema,x as TaskExecutionRecordSchema,s as SparkStoreSchema,z as SparkStoreManager,p as SparkStatusSchema,q as SparkSourceSchema,o as SparkPrioritySchema,n as SparkItemTypeSchema,r as SparkItemSchema,k as RemoteSkillStore,l as RemotePluginStore,j as RemoteConfigStore,d as FileSystemSkillStore,e as FileSystemPluginStore,c as FileSystemConfigStore,b as ConfigServer,a as ConfigManager,u as AgentTypeSchema};
@@ -1,2 +0,0 @@
1
- import{ub as v5,vb as F,yb as _}from"./chunk-kba8akjs.js";var i=F((n)=>{Object.defineProperty(n,"__esModule",{value:!0});n.default=void 0;var c5=n.default="ffffffff-ffff-ffff-ffff-ffffffffffff"});var t=F((o)=>{Object.defineProperty(o,"__esModule",{value:!0});o.default=void 0;var p5=o.default="00000000-0000-0000-0000-000000000000"});var Q0=F((s)=>{Object.defineProperty(s,"__esModule",{value:!0});s.default=void 0;var o5=s.default=/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-8][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$/i});var V=F((Z0)=>{Object.defineProperty(Z0,"__esModule",{value:!0});Z0.default=void 0;var W1=Y1(Q0());function Y1(Q){return Q&&Q.__esModule?Q:{default:Q}}function F1(Q){return typeof Q==="string"&&W1.default.test(Q)}var t5=Z0.default=F1});var T=F((X0)=>{Object.defineProperty(X0,"__esModule",{value:!0});X0.default=void 0;var U1=D1(V());function D1(Q){return Q&&Q.__esModule?Q:{default:Q}}function z1(Q){if(!(0,U1.default)(Q))throw TypeError("Invalid UUID");let Z,X=new Uint8Array(16);return X[0]=(Z=parseInt(Q.slice(0,8),16))>>>24,X[1]=Z>>>16&255,X[2]=Z>>>8&255,X[3]=Z&255,X[4]=(Z=parseInt(Q.slice(9,13),16))>>>8,X[5]=Z&255,X[6]=(Z=parseInt(Q.slice(14,18),16))>>>8,X[7]=Z&255,X[8]=(Z=parseInt(Q.slice(19,23),16))>>>8,X[9]=Z&255,X[10]=(Z=parseInt(Q.slice(24,36),16))/1099511627776&255,X[11]=Z/4294967296&255,X[12]=Z>>>24&255,X[13]=Z>>>16&255,X[14]=Z>>>8&255,X[15]=Z&255,X}var e5=X0.default=z1});var R=F((A0)=>{Object.defineProperty(A0,"__esModule",{value:!0});A0.default=void 0;A0.unsafeStringify=P0;var H1=O1(V());function O1(Q){return Q&&Q.__esModule?Q:{default:Q}}var U=[];for(let Q=0;Q<256;++Q)U.push((Q+256).toString(16).slice(1));function P0(Q,Z=0){return(U[Q[Z+0]]+U[Q[Z+1]]+U[Q[Z+2]]+U[Q[Z+3]]+"-"+U[Q[Z+4]]+U[Q[Z+5]]+"-"+U[Q[Z+6]]+U[Q[Z+7]]+"-"+U[Q[Z+8]]+U[Q[Z+9]]+"-"+U[Q[Z+10]]+U[Q[Z+11]]+U[Q[Z+12]]+U[Q[Z+13]]+U[Q[Z+14]]+U[Q[Z+15]]).toLowerCase()}function w1(Q,Z=0){let X=P0(Q,Z);if(!(0,H1.default)(X))throw TypeError("Stringified UUID is invalid");return X}var Z6=A0.default=w1});var q=F((W0)=>{Object.defineProperty(W0,"__esModule",{value:!0});W0.default=V1;var R1=K1(_("node:crypto"));function K1(Q){return Q&&Q.__esModule?Q:{default:Q}}var N=new Uint8Array(256),E=N.length;function V1(){if(E>N.length-16)R1.default.randomFillSync(N),E=0;return N.slice(E,E+=16)}});var g=F((Y0)=>{Object.defineProperty(Y0,"__esModule",{value:!0});Y0.default=void 0;var S1=N1(q()),E1=R();function N1(Q){return Q&&Q.__esModule?Q:{default:Q}}var C,f,I=0,B=0;function _1(Q,Z,X){let G=Z&&X||0,J=Z||Array(16);Q=Q||{};let{node:P,clockseq:W}=Q;if(!Q._v6){if(!P)P=C;if(W==null)W=f}if(P==null||W==null){let O=Q.random||(Q.rng||S1.default)();if(P==null){if(P=[O[0],O[1],O[2],O[3],O[4],O[5]],!C&&!Q._v6)P[0]|=1,C=P}if(W==null){if(W=(O[6]<<8|O[7])&16383,f===void 0&&!Q._v6)f=W}}let A=Q.msecs!==void 0?Q.msecs:Date.now(),Y=Q.nsecs!==void 0?Q.nsecs:B+1,M=A-I+(Y-B)/1e4;if(M<0&&Q.clockseq===void 0)W=W+1&16383;if((M<0||A>I)&&Q.nsecs===void 0)Y=0;if(Y>=1e4)throw Error("uuid.v1(): Can't create more than 10M uuids/sec");I=A,B=Y,f=W,A+=12219292800000;let L=((A&268435455)*1e4+Y)%4294967296;J[G++]=L>>>24&255,J[G++]=L>>>16&255,J[G++]=L>>>8&255,J[G++]=L&255;let S=A/4294967296*1e4&268435455;J[G++]=S>>>8&255,J[G++]=S&255,J[G++]=S>>>24&15|16,J[G++]=S>>>16&255,J[G++]=W>>>8|128,J[G++]=W&255;for(let O=0;O<6;++O)J[G+O]=P[O];return Z||(0,E1.unsafeStringify)(J)}var J6=Y0.default=_1});var u=F((U0)=>{Object.defineProperty(U0,"__esModule",{value:!0});U0.default=$1;var q1=x1(T()),f1=R();function x1(Q){return Q&&Q.__esModule?Q:{default:Q}}function $1(Q){let Z=typeof Q==="string"?(0,q1.default)(Q):Q,X=C1(Z);return typeof Q==="string"?(0,f1.unsafeStringify)(X):X}function C1(Q,Z=!1){return Uint8Array.of((Q[6]&15)<<4|Q[7]>>4&15,(Q[7]&15)<<4|(Q[4]&240)>>4,(Q[4]&15)<<4|(Q[5]&240)>>4,(Q[5]&15)<<4|(Q[0]&240)>>4,(Q[0]&15)<<4|(Q[1]&240)>>4,(Q[1]&15)<<4|(Q[2]&240)>>4,96|Q[2]&15,Q[3],Q[8],Q[9],Q[10],Q[11],Q[12],Q[13],Q[14],Q[15])}});var j=F((D0)=>{Object.defineProperty(D0,"__esModule",{value:!0});D0.URL=D0.DNS=void 0;D0.default=h1;var B1=R(),g1=u1(T());function u1(Q){return Q&&Q.__esModule?Q:{default:Q}}function j1(Q){Q=unescape(encodeURIComponent(Q));let Z=[];for(let X=0;X<Q.length;++X)Z.push(Q.charCodeAt(X));return Z}var v1=D0.DNS="6ba7b810-9dad-11d1-80b4-00c04fd430c8",m1=D0.URL="6ba7b811-9dad-11d1-80b4-00c04fd430c8";function h1(Q,Z,X){function G(J,P,W,A){var Y;if(typeof J==="string")J=j1(J);if(typeof P==="string")P=(0,g1.default)(P);if(((Y=P)===null||Y===void 0?void 0:Y.length)!==16)throw TypeError("Namespace must be array-like (16 iterable integer values, 0-255)");let M=new Uint8Array(16+J.length);if(M.set(P),M.set(J,P.length),M=X(M),M[6]=M[6]&15|Z,M[8]=M[8]&63|128,W){A=A||0;for(let L=0;L<16;++L)W[A+L]=M[L];return W}return(0,B1.unsafeStringify)(M)}try{G.name=Q}catch(J){}return G.DNS=v1,G.URL=m1,G}});var w0=F((H0)=>{Object.defineProperty(H0,"__esModule",{value:!0});H0.default=void 0;var d1=b1(_("node:crypto"));function b1(Q){return Q&&Q.__esModule?Q:{default:Q}}function k1(Q){if(Array.isArray(Q))Q=Buffer.from(Q);else if(typeof Q==="string")Q=Buffer.from(Q,"utf8");return d1.default.createHash("md5").update(Q).digest()}var W6=H0.default=k1});var V0=F((R0)=>{Object.defineProperty(R0,"__esModule",{value:!0});R0.default=void 0;var r1=L0(j()),c1=L0(w0());function L0(Q){return Q&&Q.__esModule?Q:{default:Q}}var n1=(0,r1.default)("v3",48,c1.default),F6=R0.default=n1});var E0=F((T0)=>{Object.defineProperty(T0,"__esModule",{value:!0});T0.default=void 0;var p1=i1(_("node:crypto"));function i1(Q){return Q&&Q.__esModule?Q:{default:Q}}var D6=T0.default={randomUUID:p1.default.randomUUID}});var x0=F((q0)=>{Object.defineProperty(q0,"__esModule",{value:!0});q0.default=void 0;var N0=_0(E0()),o1=_0(q()),a1=R();function _0(Q){return Q&&Q.__esModule?Q:{default:Q}}function t1(Q,Z,X){if(N0.default.randomUUID&&!Z&&!Q)return N0.default.randomUUID();Q=Q||{};let G=Q.random||(Q.rng||o1.default)();if(G[6]=G[6]&15|64,G[8]=G[8]&63|128,Z){X=X||0;for(let J=0;J<16;++J)Z[X+J]=G[J];return Z}return(0,a1.unsafeStringify)(G)}var H6=q0.default=t1});var I0=F(($0)=>{Object.defineProperty($0,"__esModule",{value:!0});$0.default=void 0;var s1=e1(_("node:crypto"));function e1(Q){return Q&&Q.__esModule?Q:{default:Q}}function Q5(Q){if(Array.isArray(Q))Q=Buffer.from(Q);else if(typeof Q==="string")Q=Buffer.from(Q,"utf8");return s1.default.createHash("sha1").update(Q).digest()}var w6=$0.default=Q5});var j0=F((g0)=>{Object.defineProperty(g0,"__esModule",{value:!0});g0.default=void 0;var Z5=B0(j()),G5=B0(I0());function B0(Q){return Q&&Q.__esModule?Q:{default:Q}}var X5=(0,Z5.default)("v5",80,G5.default),R6=g0.default=X5});var h0=F((m0)=>{Object.defineProperty(m0,"__esModule",{value:!0});m0.default=M5;var J5=R(),P5=v0(g()),A5=v0(u());function v0(Q){return Q&&Q.__esModule?Q:{default:Q}}function M5(Q={},Z,X=0){let G=(0,P5.default)({...Q,_v6:!0},new Uint8Array(16));if(G=(0,A5.default)(G),Z){for(let J=0;J<16;J++)Z[X+J]=G[J];return Z}return(0,J5.unsafeStringify)(G)}});var l0=F((y0)=>{Object.defineProperty(y0,"__esModule",{value:!0});y0.default=D5;var Y5=U5(T()),F5=R();function U5(Q){return Q&&Q.__esModule?Q:{default:Q}}function D5(Q){let Z=typeof Q==="string"?(0,Y5.default)(Q):Q,X=z5(Z);return typeof Q==="string"?(0,F5.unsafeStringify)(X):X}function z5(Q){return Uint8Array.of((Q[3]&15)<<4|Q[4]>>4&15,(Q[4]&15)<<4|(Q[5]&240)>>4,(Q[5]&15)<<4|Q[6]&15,Q[7],(Q[1]&15)<<4|(Q[2]&240)>>4,(Q[2]&15)<<4|(Q[3]&240)>>4,16|(Q[0]&240)>>4,(Q[0]&15)<<4|(Q[1]&240)>>4,Q[8],Q[9],Q[10],Q[11],Q[12],Q[13],Q[14],Q[15])}});var c0=F((k0)=>{Object.defineProperty(k0,"__esModule",{value:!0});k0.default=void 0;var O5=L5(q()),w5=R();function L5(Q){return Q&&Q.__esModule?Q:{default:Q}}var d0=null,b0=null,w=0;function R5(Q,Z,X){Q=Q||{};let G=Z&&X||0,J=Z||new Uint8Array(16),P=Q.random||(Q.rng||O5.default)(),W=Q.msecs!==void 0?Q.msecs:Date.now(),A=Q.seq!==void 0?Q.seq:null,Y=b0,M=d0;if(W>w&&Q.msecs===void 0){if(w=W,A!==null)Y=null,M=null}if(A!==null){if(A>2147483647)A=2147483647;Y=A>>>19&4095,M=A&524287}if(Y===null||M===null)Y=P[6]&127,Y=Y<<8|P[7],M=P[8]&63,M=M<<8|P[9],M=M<<5|P[10]>>>3;if(W+1e4>w&&A===null){if(++M>524287){if(M=0,++Y>4095)Y=0,w++}}else w=W;return b0=Y,d0=M,J[G++]=w/1099511627776&255,J[G++]=w/4294967296&255,J[G++]=w/16777216&255,J[G++]=w/65536&255,J[G++]=w/256&255,J[G++]=w&255,J[G++]=Y>>>4&15|112,J[G++]=Y&255,J[G++]=M>>>13&63|128,J[G++]=M>>>5&255,J[G++]=M<<3&255|P[10]&7,J[G++]=P[11],J[G++]=P[12],J[G++]=P[13],J[G++]=P[14],J[G++]=P[15],Z||(0,w5.unsafeStringify)(J)}var S6=k0.default=R5});var i0=F((n0)=>{Object.defineProperty(n0,"__esModule",{value:!0});n0.default=void 0;var K5=V5(V());function V5(Q){return Q&&Q.__esModule?Q:{default:Q}}function T5(Q){if(!(0,K5.default)(Q))throw TypeError("Invalid UUID");return parseInt(Q.slice(14,15),16)}var N6=n0.default=T5});var o0=F((D)=>{Object.defineProperty(D,"__esModule",{value:!0});Object.defineProperty(D,"MAX",{enumerable:!0,get:function(){return S5.default}});Object.defineProperty(D,"NIL",{enumerable:!0,get:function(){return E5.default}});Object.defineProperty(D,"parse",{enumerable:!0,get:function(){return N5.default}});Object.defineProperty(D,"stringify",{enumerable:!0,get:function(){return _5.default}});Object.defineProperty(D,"v1",{enumerable:!0,get:function(){return q5.default}});Object.defineProperty(D,"v1ToV6",{enumerable:!0,get:function(){return f5.default}});Object.defineProperty(D,"v3",{enumerable:!0,get:function(){return x5.default}});Object.defineProperty(D,"v4",{enumerable:!0,get:function(){return $5.default}});Object.defineProperty(D,"v5",{enumerable:!0,get:function(){return C5.default}});Object.defineProperty(D,"v6",{enumerable:!0,get:function(){return I5.default}});Object.defineProperty(D,"v6ToV1",{enumerable:!0,get:function(){return B5.default}});Object.defineProperty(D,"v7",{enumerable:!0,get:function(){return g5.default}});Object.defineProperty(D,"validate",{enumerable:!0,get:function(){return u5.default}});Object.defineProperty(D,"version",{enumerable:!0,get:function(){return j5.default}});var S5=H(i()),E5=H(t()),N5=H(T()),_5=H(R()),q5=H(g()),f5=H(u()),x5=H(V0()),$5=H(x0()),C5=H(j0()),I5=H(h0()),B5=H(l0()),g5=H(c0()),u5=H(V()),j5=H(i0());function H(Q){return Q&&Q.__esModule?Q:{default:Q}}});var z=v5(o0(),1),f6=z.default.v1,x6=z.default.v1ToV6,$6=z.default.v3,C6=z.default.v4,m5=z.default.v5,a0=z.default.v6,I6=z.default.v6ToV1,B6=z.default.v7,g6=z.default.NIL,u6=z.default.MAX,j6=z.default.version,v6=z.default.validate,m6=z.default.stringify,h6=z.default.parse;function t0(Q){return a0({clockseq:Q})}var s0="__pregel_tasks",v="__error__",m="__scheduled__",h="__interrupt__",y="__resume__";var e0="[...]",h5="[Circular]",x=[],K=[];function y5(){return{depthLimit:Number.MAX_SAFE_INTEGER,edgesLimit:Number.MAX_SAFE_INTEGER}}function Q1(Q,Z,X,G){if(typeof G>"u")G=y5();d(Q,"",0,[],void 0,0,G);var J;try{if(K.length===0)J=JSON.stringify(Q,Z,X);else J=JSON.stringify(Q,l5(Z),X)}catch(W){return JSON.stringify("[unable to serialize, circular reference is too complex to analyze]")}finally{while(x.length!==0){var P=x.pop();if(P.length===4)Object.defineProperty(P[0],P[1],P[3]);else P[0][P[1]]=P[2]}}return J}function l(Q,Z,X,G){var J=Object.getOwnPropertyDescriptor(G,X);if(J.get!==void 0)if(J.configurable)Object.defineProperty(G,X,{value:Q}),x.push([G,X,Z,J]);else K.push([Z,X,Q]);else G[X]=Q,x.push([G,X,Z])}function d(Q,Z,X,G,J,P,W){P+=1;var A;if(typeof Q==="object"&&Q!==null){for(A=0;A<G.length;A++)if(G[A]===Q){l(h5,Q,Z,J);return}if(typeof W.depthLimit<"u"&&P>W.depthLimit){l(e0,Q,Z,J);return}if(typeof W.edgesLimit<"u"&&X+1>W.edgesLimit){l(e0,Q,Z,J);return}if(G.push(Q),Array.isArray(Q))for(A=0;A<Q.length;A++)d(Q[A],A,A,G,Q,P,W);else{var Y=Object.keys(Q);for(A=0;A<Y.length;A++){var M=Y[A];d(Q[M],M,A,G,Q,P,W)}}G.pop()}}function l5(Q){return Q=typeof Q<"u"?Q:function(Z,X){return X},function(Z,X){if(K.length>0)for(var G=0;G<K.length;G++){var J=K[G];if(J[1]===Z&&J[0]===X){X=J[2],K.splice(G,1);break}}return Q.call(this,Z,X)}}import{load as d5}from"@langchain/core/load";function b5(Q){return Q!==null&&Q.lc===1&&Q.type==="constructor"&&Array.isArray(Q.id)}async function k(Q){if(Q&&typeof Q==="object")if(Array.isArray(Q))return await Promise.all(Q.map((X)=>k(X)));else{let Z={};for(let[X,G]of Object.entries(Q))Z[X]=await k(G);if(Z.lc===2&&Z.type==="undefined")return;else if(Z.lc===2&&Z.type==="constructor"&&Array.isArray(Z.id))try{let X=Z.id[Z.id.length-1],G;switch(X){case"Set":G=Set;break;case"Map":G=Map;break;case"RegExp":G=RegExp;break;case"Error":G=Error;break;default:return Z}if(Z.method)return G[Z.method](...Z.args||[]);else return new G(...Z.args||[])}catch(X){return Z}else if(b5(Z))return d5(JSON.stringify(Z));return Z}return Q}function b(Q,Z,X,G){return{lc:2,type:"constructor",id:[Q.name],method:Z??null,args:X??[],kwargs:G??{}}}function k5(Q){if(Q===void 0)return{lc:2,type:"undefined"};else if(Q instanceof Set||Q instanceof Map)return b(Q.constructor,void 0,[Array.from(Q)]);else if(Q instanceof RegExp)return b(RegExp,void 0,[Q.source,Q.flags]);else if(Q instanceof Error)return b(Q.constructor,void 0,[Q.message]);else if(Q?.lg_name==="Send")return{node:Q.node,args:Q.args};else return Q}var $=class{_dumps(Q){return new TextEncoder().encode(Q1(Q,(X,G)=>{return k5(G)}))}async dumpsTyped(Q){if(Q instanceof Uint8Array)return["bytes",Q];else return["json",this._dumps(Q)]}async _loads(Q){let Z=JSON.parse(Q);return k(Z)}async loadsTyped(Q,Z){if(Q==="bytes")return typeof Z==="string"?new TextEncoder().encode(Z):Z;else if(Q==="json")return this._loads(typeof Z==="string"?Z:new TextDecoder().decode(Z));else throw Error(`Unknown serialization type: ${Q}`)}};function r(Q){if(typeof Q!=="object"||Q===null)return Q;let Z=Array.isArray(Q)?[]:{};for(let X in Q)if(Object.prototype.hasOwnProperty.call(Q,X))Z[X]=r(Q[X]);return Z}function Z1(Q){return{v:Q.v,id:Q.id,ts:Q.ts,channel_values:{...Q.channel_values},channel_versions:{...Q.channel_versions},versions_seen:r(Q.versions_seen)}}var G1=class{serde=new $;constructor(Q){this.serde=Q||this.serde}async get(Q){let Z=await this.getTuple(Q);return Z?Z.checkpoint:void 0}getNextVersion(Q){if(typeof Q==="string")throw Error("Please override this method to use string versions.");return Q!==void 0&&typeof Q==="number"?Q+1:1}};function X1(Q,Z){if(typeof Q==="number"&&typeof Z==="number")return Math.sign(Q-Z);return String(Q).localeCompare(String(Z))}function J1(...Q){return Q.reduce((Z,X,G)=>{if(G===0)return X;return X1(Z,X)>=0?Z:X})}var P1={[v]:-1,[m]:-2,[h]:-3,[y]:-4};function A1(Q){return Q.configurable?.checkpoint_id||Q.configurable?.thread_ts||""}var c=class{serde=new $;constructor(Q){this.serde=Q||this.serde}};
2
- export{t0 as W,s0 as X,Z1 as Y,G1 as Z,J1 as _,P1 as $,A1 as aa};
@@ -1,2 +0,0 @@
1
- import{createRequire as k}from"node:module";var g=Object.create;var{getPrototypeOf:h,defineProperty:f,getOwnPropertyNames:i}=Object;var j=Object.prototype.hasOwnProperty;var l=(a,b,c)=>{c=a!=null?g(h(a)):{};let d=b||!a||!a.__esModule?f(c,"default",{value:a,enumerable:!0}):c;for(let e of i(a))if(!j.call(d,e))f(d,e,{get:()=>a[e],enumerable:!0});return d};var m=(a,b)=>()=>(b||a((b={exports:{}}).exports,b),b.exports);var n=(a,b)=>{for(var c in b)f(a,c,{get:b[c],enumerable:!0,configurable:!0,set:(d)=>b[c]=()=>d})};var o=(a,b)=>()=>(a&&(b=a(a=0)),b);var q=k(import.meta.url);
2
- export{l as ub,m as vb,n as wb,o as xb,q as yb};
@@ -1 +0,0 @@
1
- import{a as x,b as I}from"./chunk-8g2zdcy0.js";import"./chunk-98f6hg43.js";import{W as C,X as T,Y as b,Z as w,_ as v}from"./chunk-jxsfzfac.js";import{ub as K}from"./chunk-kba8akjs.js";var W=K(I(),1),g=[{index:"checkpoints",prefix:"checkpoint:",schema:{"$.thread_id":{type:"TAG",AS:"thread_id"},"$.checkpoint_ns":{type:"TAG",AS:"checkpoint_ns"},"$.checkpoint_id":{type:"TAG",AS:"checkpoint_id"},"$.parent_checkpoint_id":{type:"TAG",AS:"parent_checkpoint_id"},"$.checkpoint_ts":{type:"NUMERIC",AS:"checkpoint_ts"},"$.has_writes":{type:"TAG",AS:"has_writes"},"$.source":{type:"TAG",AS:"source"},"$.step":{type:"NUMERIC",AS:"step"}}},{index:"checkpoint_blobs",prefix:"checkpoint_blob:",schema:{"$.thread_id":{type:"TAG",AS:"thread_id"},"$.checkpoint_ns":{type:"TAG",AS:"checkpoint_ns"},"$.checkpoint_id":{type:"TAG",AS:"checkpoint_id"},"$.channel":{type:"TAG",AS:"channel"},"$.version":{type:"TAG",AS:"version"},"$.type":{type:"TAG",AS:"type"}}},{index:"checkpoint_writes",prefix:"checkpoint_write:",schema:{"$.thread_id":{type:"TAG",AS:"thread_id"},"$.checkpoint_ns":{type:"TAG",AS:"checkpoint_ns"},"$.checkpoint_id":{type:"TAG",AS:"checkpoint_id"},"$.task_id":{type:"TAG",AS:"task_id"},"$.idx":{type:"NUMERIC",AS:"idx"},"$.channel":{type:"TAG",AS:"channel"},"$.type":{type:"TAG",AS:"type"}}}],f=class z extends w{client;ttlConfig;constructor(G,J){super();this.client=G,this.ttlConfig=J}static async fromUrl(G,J){let Z=W.createClient({url:G});await Z.connect();let Q=new z(Z,J);return await Q.ensureIndexes(),Q}static async fromCluster(G,J){let Z=W.createCluster({rootNodes:G});await Z.connect();let Q=new z(Z,J);return await Q.ensureIndexes(),Q}async get(G){return(await this.getTuple(G))?.checkpoint}async getTuple(G){let J=G.configurable?.thread_id,Z=G.configurable?.checkpoint_ns??"",Q=G.configurable?.checkpoint_id;if(!J)return;let Y,E;if(Q)Y=`checkpoint:${J}:${Z}:${Q}`,E=await this.client.json.get(Y);else{let $=`checkpoint:${J}:${Z}:*`,_=await this.client.keys($);if(_.length===0)return;_.sort(),Y=_[_.length-1],E=await this.client.json.get(Y)}if(!E)return;if(this.ttlConfig?.refreshOnRead&&this.ttlConfig?.defaultTTL)await this.applyTTL(Y);let{checkpoint:F,pendingWrites:X}=await this.loadCheckpointWithWrites(E);return await this.createCheckpointTuple(E,F,X)}async put(G,J,Z,Q){await this.ensureIndexes();let Y=G.configurable?.thread_id,E=G.configurable?.checkpoint_ns??"",F=G.configurable?.checkpoint_id;if(!Y)throw Error("thread_id is required");let X=J.id||C(0),$=`checkpoint:${Y}:${E}:${X}`,_=b(J);if(_.channel_values&&Q!==void 0)if(Object.keys(Q).length===0)_.channel_values={};else{let U={};for(let B of Object.keys(Q))if(B in _.channel_values)U[B]=_.channel_values[B];_.channel_values=U}let H={thread_id:Y,checkpoint_ns:E===""?"__empty__":E,checkpoint_id:X,parent_checkpoint_id:F||null,checkpoint:_,metadata:Z,checkpoint_ts:Date.now(),has_writes:"false"};if(this.addSearchableMetadataFields(H,Z),await this.client.json.set($,"$",H),this.ttlConfig?.defaultTTL)await this.applyTTL($);return{configurable:{thread_id:Y,checkpoint_ns:E,checkpoint_id:X}}}async*list(G,J){if(await this.ensureIndexes(),J?.filter!==void 0){let Q=Object.values(J.filter).some((X)=>X===null),Y=[];if(G?.configurable?.thread_id){let X=G.configurable.thread_id.replace(/[-.@]/g,"\\$&");Y.push(`(@thread_id:{${X}})`)}if(G?.configurable?.checkpoint_ns!==void 0){let X=G.configurable.checkpoint_ns;if(X==="")Y.push("(@checkpoint_ns:{__empty__})");else{let $=X.replace(/[-.@]/g,"\\$&");Y.push(`(@checkpoint_ns:{${$}})`)}}if(!J?.before&&J?.filter){for(let[X,$]of Object.entries(J.filter))if($===void 0);else if($===null);else if(typeof $==="string"){let _=x(X),H=x($);Y.push(`(@${_}:{${H}})`)}else if(typeof $==="number"){let _=x(X);Y.push(`(@${_}:[${$} ${$}])`)}else if(typeof $==="object"&&Object.keys($).length===0);}if(Y.length===0)Y.push("*");let E=Y.join(" "),F=J?.limit??10;try{let X=J?.before&&!G?.configurable?.thread_id?1000:J?.before?F*10:F,$=(await this.client.ft.search("checkpoints",E,{LIMIT:{from:0,size:X},SORTBY:{BY:"checkpoint_ts",DIRECTION:"DESC"}})).documents,_=0;for(let H of $){if(_>=F)break;if(J?.before?.configurable?.checkpoint_id){if(H.value.checkpoint_id>=J.before.configurable.checkpoint_id)continue}let U=H.value,B=!0;if((Q||J?.before)&&J?.filter){for(let[M,O]of Object.entries(J.filter))if(O===null){if(U.metadata?.[M]!==null){B=!1;break}}else if(O!==void 0){let A=U.metadata?.[M];if(typeof O==="object"&&O!==null){if(q(A)!==q(O)){B=!1;break}}else if(A!==O){B=!1;break}}if(!B)continue}let{checkpoint:L,pendingWrites:R}=await this.loadCheckpointWithWrites(U);yield await this.createCheckpointTuple(U,L,R),_++}return}catch(X){if(X.message?.includes("no such index"));else throw X}if(G?.configurable?.thread_id){let X=G.configurable.thread_id,$=G.configurable.checkpoint_ns??"",_=`checkpoint:${X}:${$}:*`,H=await this.client.keys(_);H.sort().reverse();let U=H;if(J?.before?.configurable?.checkpoint_id){let R=`checkpoint:${J.before.configurable.thread_id||X}:${J.before.configurable.checkpoint_ns??$}:${J.before.configurable.checkpoint_id}`,M=H.indexOf(R);if(M>0)U=H.slice(M+1);else if(M===0)U=[]}let B=J?.limit??10,L=U.slice(0,B);for(let R of L){let M=await this.client.json.get(R);if(M){let O=!0;for(let[V,S]of Object.entries(J.filter)){let N=M.metadata?.[V];if(S===null){if(N!==null){O=!1;break}}else if(N!==S){O=!1;break}}if(!O)continue;let{checkpoint:A,pendingWrites:P}=await this.loadCheckpointWithWrites(M);yield await this.createCheckpointTuple(M,A,P)}}}else{let X=G?.configurable?.checkpoint_ns!==void 0?`checkpoint:*:${G.configurable.checkpoint_ns===""?"__empty__":G.configurable.checkpoint_ns}:*`:"checkpoint:*",$=await this.client.keys(X),_=[];for(let B of $){let L=await this.client.json.get(B);if(L)_.push({key:B,doc:L})}_.sort((B,L)=>L.doc.checkpoint_ts-B.doc.checkpoint_ts);let H=0,U=J?.limit??10;for(let{doc:B}of _){if(H>=U)break;if(J?.before?.configurable?.checkpoint_id){if(B.checkpoint_id>=J.before.configurable.checkpoint_id)continue}let L=!0;if(J?.filter){for(let[O,A]of Object.entries(J.filter))if(A===null){if(B.metadata?.[O]!==null){L=!1;break}}else if(A!==void 0){let P=B.metadata?.[O];if(typeof A==="object"&&A!==null){if(q(P)!==q(A)){L=!1;break}}else if(P!==A){L=!1;break}}if(!L)continue}let{checkpoint:R,pendingWrites:M}=await this.loadCheckpointWithWrites(B);yield await this.createCheckpointTuple(B,R,M),H++}}return}let Z={...J,filter:{}};yield*this.list(G,Z)}async putWrites(G,J,Z){await this.ensureIndexes();let Q=G.configurable?.thread_id,Y=G.configurable?.checkpoint_ns??"",E=G.configurable?.checkpoint_id;if(!Q||!E)throw Error("thread_id and checkpoint_id are required");let F=[],X=performance.now()*1000;for(let _=0;_<J.length;_++){let[H,U]=J[_],B=`checkpoint_write:${Q}:${Y}:${E}:${Z}:${_}`;F.push(B);let L={thread_id:Q,checkpoint_ns:Y,checkpoint_id:E,task_id:Z,idx:_,channel:H,type:typeof U==="object"?"json":"string",value:U,timestamp:X,global_idx:X+_};await this.client.json.set(B,"$",L)}if(F.length>0){let _=`write_keys_zset:${Q}:${Y}:${E}`,H={};if(F.forEach((U,B)=>{H[U]=X+B}),await this.client.zAdd(_,Object.entries(H).map(([U,B])=>({score:B,value:U}))),this.ttlConfig?.defaultTTL)await this.applyTTL(...F,_)}let $=`checkpoint:${Q}:${Y}:${E}`;if(await this.client.exists($)){let _=await this.client.json.get($);if(_)_.has_writes="true",await this.client.json.set($,"$",_)}}async deleteThread(G){let J=`checkpoint:${G}:*`,Z=await this.client.keys(J);if(Z.length>0)await this.client.del(Z);let Q=`writes:${G}:*`,Y=await this.client.keys(Q);if(Y.length>0)await this.client.del(Y)}async end(){await this.client.quit()}async loadPendingWrites(G,J,Z){let Q=`checkpoint_write:${G}:${J}:${Z}:*`,Y=await this.client.keys(Q);if(Y.length===0)return;let E=[];for(let X of Y){let $=await this.client.json.get(X);if($)E.push($)}E.sort((X,$)=>(X.global_idx||0)-($.global_idx||0));let F=[];for(let X of E){let $=await this.serde.loadsTyped("json",JSON.stringify(X.value));F.push([X.task_id,X.channel,$])}return F}async loadCheckpointWithWrites(G){let J=await this.serde.loadsTyped("json",JSON.stringify(G.checkpoint));if(J.v<4&&G.parent_checkpoint_id!=null){let Q=G.checkpoint_ns==="__empty__"?"":G.checkpoint_ns;await this.migratePendingSends(J,G.thread_id,Q,G.parent_checkpoint_id)}let Z;if(G.has_writes==="true"){let Q=G.checkpoint_ns==="__empty__"?"":G.checkpoint_ns;Z=await this.loadPendingWrites(G.thread_id,Q,G.checkpoint_id)}return{checkpoint:J,pendingWrites:Z}}async migratePendingSends(G,J,Z,Q){let Y=await this.loadPendingWrites(J,Z,Q);if(!Y||Y.length===0)return;let E=Y.filter(([,X])=>X===T);if(E.length===0)return;let F=[];for(let[,,X]of E)F.push(X);G.channel_values??={},G.channel_values[T]=F,G.channel_versions[T]=Object.keys(G.channel_versions).length>0?v(...Object.values(G.channel_versions)):1}async createCheckpointTuple(G,J,Z){let Q=G.checkpoint_ns==="__empty__"?"":G.checkpoint_ns,Y=await this.serde.loadsTyped("json",JSON.stringify(G.metadata));return{config:{configurable:{thread_id:G.thread_id,checkpoint_ns:Q,checkpoint_id:G.checkpoint_id}},checkpoint:J,metadata:Y,parentConfig:G.parent_checkpoint_id?{configurable:{thread_id:G.thread_id,checkpoint_ns:Q,checkpoint_id:G.parent_checkpoint_id}}:void 0,pendingWrites:Z}}addSearchableMetadataFields(G,J){if(!J)return;if("source"in J)G.source=J.source;if("step"in J)G.step=J.step;if("writes"in J)G.writes=typeof J.writes==="object"?JSON.stringify(J.writes):J.writes;if("score"in J)G.score=J.score}async applyTTL(...G){if(!this.ttlConfig?.defaultTTL)return;let J=Math.floor(this.ttlConfig.defaultTTL*60),Z=await Promise.allSettled(G.map((Q)=>this.client.expire(Q,J)));for(let Q=0;Q<Z.length;Q++)if(Z[Q].status==="rejected")console.warn(`Failed to set TTL for key ${G[Q]}:`,Z[Q].reason)}async ensureIndexes(){for(let G of g)try{await this.client.ft.create(G.index,G.schema,{ON:"JSON",PREFIX:G.prefix})}catch(J){if(!J.message?.includes("Index already exists"))console.error(`Failed to create index ${G.index}:`,J.message)}}};function q(z){if(z===null||typeof z!=="object")return JSON.stringify(z);if(Array.isArray(z))return JSON.stringify(z.map((Z)=>q(Z)));let G={},J=Object.keys(z).sort();for(let Z of J)G[Z]=z[Z];return JSON.stringify(G,(Z,Q)=>{if(Q!==null&&typeof Q==="object"&&!Array.isArray(Q)){let Y={},E=Object.keys(Q).sort();for(let F of E)Y[F]=Q[F];return Y}return Q})}export{f as RedisSaver};