agentroam-runtime-darwin-arm64 0.2.0-preview.12 → 0.2.0-preview.13

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 (101) hide show
  1. package/manifest.json +1 -1
  2. package/package.json +1 -1
  3. package/runtime/.next/BUILD_ID +1 -1
  4. package/runtime/.next/app-build-manifest.json +7 -7
  5. package/runtime/.next/app-path-routes-manifest.json +1 -1
  6. package/runtime/.next/build-manifest.json +6 -6
  7. package/runtime/.next/prerender-manifest.json +1 -1
  8. package/runtime/.next/react-loadable-manifest.json +1 -1
  9. package/runtime/.next/required-server-files.json +1 -1
  10. package/runtime/.next/routes-manifest.json +1 -1
  11. package/runtime/.next/server/app/_not-found/page.js +1 -1
  12. package/runtime/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  13. package/runtime/.next/server/app/_not-found.html +1 -1
  14. package/runtime/.next/server/app/_not-found.rsc +1 -1
  15. package/runtime/.next/server/app/api/agent/abort/route.js +1 -1
  16. package/runtime/.next/server/app/api/agent/answer/route.js +1 -1
  17. package/runtime/.next/server/app/api/agent/model/route.js +1 -1
  18. package/runtime/.next/server/app/api/agent/models/route.js +1 -1
  19. package/runtime/.next/server/app/api/agent/run/route.js +1 -1
  20. package/runtime/.next/server/app/api/agent/runtime-health/route.js +1 -1
  21. package/runtime/.next/server/app/api/agent/steer/route.js +1 -1
  22. package/runtime/.next/server/app/api/agent/stream/route.js +2 -2
  23. package/runtime/.next/server/app/api/agent-workspaces/[workspaceId]/sessions/route.js +1 -1
  24. package/runtime/.next/server/app/api/agent-workspaces/route.js +1 -1
  25. package/runtime/.next/server/app/api/auth/verify/route.js +1 -1
  26. package/runtime/.next/server/app/api/mcp/connect/route.js +1 -1
  27. package/runtime/.next/server/app/api/mcp/disconnect/route.js +1 -1
  28. package/runtime/.next/server/app/api/mcp/servers/route.js +1 -1
  29. package/runtime/.next/server/app/api/memory/[key]/route.js +1 -1
  30. package/runtime/.next/server/app/api/memory/route.js +1 -1
  31. package/runtime/.next/server/app/api/plugins/load/route.js +1 -1
  32. package/runtime/.next/server/app/api/projects/[id]/route.js +1 -1
  33. package/runtime/.next/server/app/api/projects/check/route.js +1 -1
  34. package/runtime/.next/server/app/api/projects/directories/route.js +1 -1
  35. package/runtime/.next/server/app/api/projects/roots/route.js +1 -1
  36. package/runtime/.next/server/app/api/projects/route.js +1 -1
  37. package/runtime/.next/server/app/api/remote-tools/register/route.js +1 -1
  38. package/runtime/.next/server/app/api/sessions/[id]/changes/route.js +2 -2
  39. package/runtime/.next/server/app/api/sessions/[id]/fork/route.js +1 -1
  40. package/runtime/.next/server/app/api/sessions/[id]/goals/route.js +1 -1
  41. package/runtime/.next/server/app/api/sessions/[id]/handoff/route.js +1 -1
  42. package/runtime/.next/server/app/api/sessions/[id]/query-index/route.js +1 -0
  43. package/runtime/.next/server/app/api/sessions/[id]/query-index/route.js.nft.json +1 -0
  44. package/runtime/.next/server/app/api/sessions/[id]/route.js +1 -1
  45. package/runtime/.next/server/app/api/sessions/route.js +1 -1
  46. package/runtime/.next/server/app/api/skills/route.js +1 -1
  47. package/runtime/.next/server/app/api/tools/route.js +1 -1
  48. package/runtime/.next/server/app/api/web-auth/login/route.js +1 -1
  49. package/runtime/.next/server/app/api/web-auth/logout/route.js +1 -1
  50. package/runtime/.next/server/app/api/web-auth/revoke-all/route.js +1 -1
  51. package/runtime/.next/server/app/api/web-auth/setup/route.js +1 -1
  52. package/runtime/.next/server/app/api/web-auth/status/route.js +1 -1
  53. package/runtime/.next/server/app/api/web-console/bootstrap/route.js +1 -1
  54. package/runtime/.next/server/app/api/web-console/device-state/route.js +1 -1
  55. package/runtime/.next/server/app/api/web-console/history/route.js +1 -1
  56. package/runtime/.next/server/app/api/web-console/preferences/route.js +1 -1
  57. package/runtime/.next/server/app/web/page.js +3 -4
  58. package/runtime/.next/server/app/web/page_client-reference-manifest.js +1 -1
  59. package/runtime/.next/server/app/web.html +1 -1
  60. package/runtime/.next/server/app/web.rsc +2 -2
  61. package/runtime/.next/server/app-paths-manifest.json +21 -20
  62. package/runtime/.next/server/chunks/1322.js +37 -37
  63. package/runtime/.next/server/chunks/2083.js +7 -7
  64. package/runtime/.next/server/chunks/5303.js +2 -2
  65. package/runtime/.next/server/middleware-build-manifest.js +1 -1
  66. package/runtime/.next/server/middleware-react-loadable-manifest.js +1 -1
  67. package/runtime/.next/server/pages/404.html +1 -1
  68. package/runtime/.next/server/pages/500.html +1 -1
  69. package/runtime/.next/server/server-reference-manifest.json +1 -1
  70. package/runtime/.next/static/chunks/137.261fab9d606d75d3.js +1 -0
  71. package/runtime/.next/static/chunks/app/web/page-8e4da33d77868123.js +1 -0
  72. package/runtime/.next/static/chunks/{main-app-e9c7dfe241898866.js → main-app-3596fd7d2841e9a3.js} +1 -1
  73. package/runtime/.next/static/chunks/{webpack-aa3dd6c115307361.js → webpack-d22db940097662ef.js} +1 -1
  74. package/runtime/node_modules/@agent/core/dist/domain/model/entities.d.ts +2 -0
  75. package/runtime/node_modules/@agent/core/dist/domain/model/entities.d.ts.map +1 -1
  76. package/runtime/node_modules/@agent/core/dist/domain/session/SessionHistory.d.ts.map +1 -1
  77. package/runtime/node_modules/@agent/core/dist/domain/session/SessionQueryIndex.d.ts +16 -0
  78. package/runtime/node_modules/@agent/core/dist/domain/session/SessionQueryIndex.d.ts.map +1 -0
  79. package/runtime/node_modules/@agent/core/dist/domain/session/SessionQueryIndex.test.d.ts +2 -0
  80. package/runtime/node_modules/@agent/core/dist/domain/session/SessionQueryIndex.test.d.ts.map +1 -0
  81. package/runtime/node_modules/@agent/core/dist/domain/session/SessionQueryIndexCache.d.ts +11 -0
  82. package/runtime/node_modules/@agent/core/dist/domain/session/SessionQueryIndexCache.d.ts.map +1 -0
  83. package/runtime/node_modules/@agent/core/dist/domain/session/SessionQueryIndexCache.test.d.ts +2 -0
  84. package/runtime/node_modules/@agent/core/dist/domain/session/SessionQueryIndexCache.test.d.ts.map +1 -0
  85. package/runtime/node_modules/@agent/core/dist/domain/session/entities.d.ts +18 -0
  86. package/runtime/node_modules/@agent/core/dist/domain/session/entities.d.ts.map +1 -1
  87. package/runtime/node_modules/@agent/core/dist/domain/session/index.d.ts +3 -1
  88. package/runtime/node_modules/@agent/core/dist/domain/session/index.d.ts.map +1 -1
  89. package/runtime/node_modules/@agent/core/dist/index.js +202 -7
  90. package/runtime/node_modules/@agent/core/dist/index.js.map +6 -4
  91. package/runtime/webapp/dist/assets/App-CZspcejP.js +275 -0
  92. package/runtime/webapp/dist/assets/{index-CTuREapw.js → index-BAH3pT_c.js} +6 -6
  93. package/runtime/webapp/dist/assets/index-lt5J4xDf.css +1 -0
  94. package/runtime/webapp/dist/index.html +2 -2
  95. package/runtime/ws-server.mjs +13 -2
  96. package/runtime/.next/static/chunks/137.b2c5a562cf28417d.js +0 -1
  97. package/runtime/.next/static/chunks/app/web/page-2a4cea1bebd50375.js +0 -1
  98. package/runtime/webapp/dist/assets/App-Bf3AhvuP.js +0 -270
  99. package/runtime/webapp/dist/assets/index-B1fGLxCu.css +0 -1
  100. /package/runtime/.next/static/{z8n2mClYDr-eB4JXiAbLG → iaxCayE60RyqJY_Zj-OjS}/_buildManifest.js +0 -0
  101. /package/runtime/.next/static/{z8n2mClYDr-eB4JXiAbLG → iaxCayE60RyqJY_Zj-OjS}/_ssgManifest.js +0 -0
@@ -1,5 +1,5 @@
1
- exports.id=1322,exports.ids=[1322],exports.modules={8794:e=>{function t(e){return Promise.resolve().then(()=>{var t=Error("Cannot find module '"+e+"'");throw t.code="MODULE_NOT_FOUND",t})}t.keys=()=>[],t.resolve=t,t.id=8794,e.exports=t},1322:(e,t,r)=>{"use strict";r.d(t,{CT:()=>ef,Cr:()=>U,E0:()=>eg,FP:()=>ee,Fi:()=>$,G1:()=>sc,H8:()=>ea,In:()=>z,JX:()=>es,KS:()=>si,LJ:()=>ei,MO:()=>M,N7:()=>rG,N8:()=>sh,Ny:()=>O,Q$:()=>sa,S3:()=>sf,Sf:()=>N,T3:()=>s_,TL:()=>sk,Tp:()=>sI,Tu:()=>Z,Wf:()=>J,Wo:()=>Q,XP:()=>j,XU:()=>sT,XW:()=>sm,Y4:()=>sr,Y_:()=>ec,ZC:()=>Y,_O:()=>ev,as:()=>rX,bX:()=>b,ds:()=>r6,h1:()=>G,l7:()=>eb,m6:()=>sp,rt:()=>sd,s_:()=>er,tw:()=>et,uA:()=>B,ue:()=>A,wM:()=>R});var s,i,a,n,o,l=r(9411),d=r(7718);r(5673);var c=r(7561);r(1041);var u=r(6005),h=r(3977),p=r(612),m=r(9801),f=r(1747),g=r(8849),y=r(2286),_=r(5890),T=Object.defineProperty,E=e=>e;function v(e,t){this[e]=E.bind(null,t)}function b(e,t){let r=e??[],s=r.findIndex(e=>e.itemId===t.itemId&&e.sectionIndex===t.sectionIndex);return(s<0?[...r,{itemId:t.itemId,sectionIndex:t.sectionIndex,text:t.delta}]:r.map((e,r)=>r===s?{...e,text:e.text+t.delta}:e)).sort((e,t)=>e.sectionIndex-t.sectionIndex)}var w=["request-approval","auto-approval","full-access"],N=[{label:"允许一次",description:"仅允许当前这次工具调用"},{label:"本会话允许",description:"当前会话再次执行相同工具和目标时不再询问"},{label:"拒绝",description:"不执行这次工具调用,让 Agent 继续处理"},{label:"取消本轮",description:"不执行工具,并立即停止当前回复"}],S=new Set(["ask_user","read_file","grep","glob","show_widget","todo_add","todo_update","todo_list","wait_agent","cron_list","lsp_diagnostics","lsp_hover","lsp_definition","lsp_references"]),k=new Set(["write_file","str_replace","apply_patch"]),L=new Set(["cron_create","cron_delete","dispatch_agent"]),x=new Set(["web_fetch","web_search"]),I=[{pattern:/(^|[;&|]\s*)sudo\b/i,reason:"命令会以提升后的系统权限运行"},{pattern:/\brm\s+(?:-[^\s]*[rf][^\s]*\s+|--recursive\b|--force\b)/i,reason:"命令可能递归或强制删除文件"},{pattern:/\bgit\s+(?:push|clean\s+-[^\s]*f|reset\s+--hard|checkout\s+--|branch\s+-D)\b/i,reason:"命令会改变远端或丢弃本地 Git 数据"},{pattern:/\b(?:npm|pnpm|yarn|bun)\s+(?:publish|deploy)\b/i,reason:"命令会发布或部署产物"},{pattern:/\b(?:docker\s+push|kubectl\s+(?:apply|delete|replace|patch)|helm\s+(?:install|upgrade|uninstall))\b/i,reason:"命令会修改远程运行环境"},{pattern:/\b(?:systemctl|launchctl|shutdown|reboot|killall|pkill)\b/i,reason:"命令会改变系统进程或服务状态"},{pattern:/\b(?:chmod|chown)\b/i,reason:"命令会修改文件权限或所有者"},{pattern:/\bcurl\b[^\n]*(?:-X\s*(?:POST|PUT|PATCH|DELETE)\b|--request\s+(?:POST|PUT|PATCH|DELETE)\b|(?:-d|--data(?:-raw|-binary)?)\s)/i,reason:"命令会向网络服务提交或修改数据"},{pattern:/\b(?:release|deploy|publish)\b/i,reason:"命令包含发布或部署操作"}];function O(e){return A(e)?e:"full-access"}function A(e){return"string"==typeof e&&w.includes(e)}function R(e,t){return["allow-once","allow-session","deny","cancel"][t?.[0]??N.findIndex(t=>t.label===e)]??"deny"}function C(e,t=140){let r="string"==typeof e?e.replace(/\s+/g," ").trim():"";return r.length>t?`${r.slice(0,t-1)}...`:r}function D(e,t){let r=(0,l.resolve)(t),s=(0,l.resolve)(r,e),i=(0,l.relative)(r,s);return""===i||".."!==i&&!i.startsWith(`..${l.sep}`)&&!(0,l.isAbsolute)(i)}function U(e,t,r){if(S.has(e))return{kind:"safe",risky:!1,summary:`使用 ${e}`,reason:"只读取信息或更新当前会话状态",resourceKey:e};if(k.has(e)){let s=function(e,t){if("apply_patch"===e){var r;return"string"!=typeof(r=t.patch)?[]:r.split(`
2
- `).filter(e=>e.startsWith("+++ ")).map(e=>e.slice(4).split(" ",1)[0].trim()).filter(e=>e&&"/dev/null"!==e).map(e=>e.startsWith("b/")?e.slice(2):e)}return"string"==typeof t.file_path?[t.file_path]:[]}(e,t),i=s.filter(e=>!D(e,r)),a=(i.length>0?i:s).map(e=>C(e,100)),n=(i.length>0?i:s).slice().sort(),o=i.length>0||0===s.length;return{kind:o?"external-write":"workspace-write",risky:o,summary:`${o?"修改工作区外文件":"修改工作区文件"}${a.length?`:${a.join("、")}`:""}`,reason:o?"目标文件不在当前工作区内":"目标文件位于当前工作区内",resourceKey:`${e}:${n.join("|")||"unknown-path"}`}}if("bash"===e){let e="string"==typeof t.command?t.command.replace(/\s+/g," ").trim():"",s=C(e,240),i=I.find(({pattern:t})=>t.test(e))?.reason??(Array.from(e.matchAll(/(?:^|\s)>{1,2}\s*["']?([^\s;&|><"']+)/g)).map(e=>e[1]).some(e=>!D(e,r))?"命令会通过重定向修改工作区外文件":/(?:^|[;&|]\s*)(?:rm|mv|cp|mkdir|touch|tee|truncate|install)\b|\bsed\b[^\n]*\s-i\b/i.test(e)&&Array.from(e.matchAll(/(?:^|\s)(\/[^\s;&|><"']+)/g)).map(e=>e[1]).some(e=>!D(e,r))?"命令会修改工作区外文件":void 0);return{kind:"shell",risky:!!i,summary:`运行命令:${s||"(空命令)"}`,reason:i??"命令将在当前工作区的终端中运行",resourceKey:`bash:${e||"unknown-command"}`}}if(x.has(e)){let r="web_search"===e?C(t.query,100):C(t.url,120);return{kind:"network",risky:!1,summary:`${"web_search"===e?"搜索网络":"访问网络"}:${r||"未指定目标"}`,reason:"工具将连接互联网读取信息",resourceKey:function(e,t){if("web_search"===e)return`web-search:${C(t.query,80)}`;if("string"!=typeof t.url)return`${e}:network`;try{return`${e}:${new URL(t.url).host}`}catch{return`${e}:${C(t.url,80)}`}}(e,t)}}if(e.startsWith("mcp_"))return{kind:"remote",risky:!0,summary:`调用 MCP 工具:${e.slice(4)}`,reason:"MCP 工具可能修改外部系统,当前无法可靠判定其副作用",resourceKey:e};if("remote_project_action"===e){let e=C(t.action,100)||"unknown-action",r="remote_job_status"===e;return{kind:r?"safe":"remote",risky:!r,summary:r?"查询远程任务状态":`执行远程动作:${e}`,reason:r?"只查询已提交任务的状态":"该动作会调用远程项目服务",resourceKey:`remote_project_action:${e}`}}return L.has(e)?{kind:"risky-local",risky:!0,summary:`执行 ${e}`,reason:"dispatch_agent"===e?"子 Agent 会继续执行新的工具调用":"该操作会改变定时任务状态",resourceKey:`${e}:${C(t.agentName??t.cron??t.id,100)||"default"}`}:{kind:"unknown",risky:!0,summary:`调用未分类工具:${e}`,reason:"当前无法判断该工具是否会产生副作用",resourceKey:`unknown:${e}`}}class j{constructor(e){this.sessionApprovals=new Map,this.approvalQueues=new Map,this.options=e}clearSession(e){this.sessionApprovals.delete(e)}async authorize(e,t,r){if(r.signal?.aborted)return"cancel";let s=O(await this.options.resolveMode(r.sessionId));if("full-access"===s)return"allow";let i=U(e,t,r.workingDirectory);return!("full-access"!==s&&("auto-approval"===s?i.risky||"unknown"===i.kind:["external-write","shell","network","remote","risky-local","unknown"].includes(i.kind)))||this.sessionApprovals.get(r.sessionId)?.has(i.resourceKey)?"allow":this.enqueue(r.sessionId,async()=>{if(r.signal?.aborted)return"cancel";if(this.sessionApprovals.get(r.sessionId)?.has(i.resourceKey))return"allow";let s=await this.options.requestApproval({sessionId:r.sessionId,toolName:e,summary:i.summary,reason:i.reason,resourceKey:i.resourceKey,args:t});if(r.signal?.aborted)return"cancel";if("allow-session"===s){let e=this.sessionApprovals.get(r.sessionId)??new Set;return e.add(i.resourceKey),this.sessionApprovals.set(r.sessionId,e),"allow"}return"allow-once"===s?"allow":s})}async enqueue(e,t){let r=this.approvalQueues.get(e)??Promise.resolve(),s=()=>{},i=new Promise(e=>{s=e}),a=r.then(()=>i);this.approvalQueues.set(e,a),await r;try{return await t()}finally{s(),this.approvalQueues.get(e)===a&&this.approvalQueues.delete(e)}}}class P{constructor(e,t){this.delegate=e,this.gate=t}validate(e,t){return this.delegate.validate(e,t)}async execute(e,t,r){let s=await this.gate.authorize(e,t,r);if("cancel"===s)throw Error("turn_aborted");return"deny"===s?{toolCallId:"",content:`Permission denied by user: ${e}`,isError:!0}:this.delegate.execute(e,t,r)}}var F="history.v1.";function M(e,t,r={}){var s;let i=Number.isFinite(s=r.limit)?Math.max(1,Math.min(100,Math.floor(s))):50,a=e.filter(e=>"user"===e.role||"assistant"===e.role),n=new Map;for(let t of e)"tool"===t.role&&t.toolCallId&&n.set(t.toolCallId,t);let o=function(e,t){if(!e?.startsWith(F))return t;let r=Number(e.slice(F.length));return!Number.isSafeInteger(r)||r<0?t:Math.min(r,t)}(r.before,a.length),l=function(e,t){if(t<=0||e[t]?.role==="user")return t;for(let r=t-1;r>=0;r-=1)if("user"===e[r].role)return r;return 0}(a,Math.max(0,o-i)),d=a.slice(l,o),c=[],u=new Set;for(let e of d)for(let t of(c.push(e),e.toolCalls??[])){u.add(t.id);let e=n.get(t.id);e&&c.push(e)}return{messages:c,events:function(e,t){let r;let s=[];for(let i of e)if("context_usage"===i.type&&(r=i),"tool_result"===i.type&&t.has(i.result.toolCallId)&&s.push(i),"native_subagent_update"===i.type&&t.has(i.activity.parentToolCallId)){let e=s.findIndex(e=>"native_subagent_update"===e.type&&e.activity.parentToolCallId===i.activity.parentToolCallId);e>=0?s[e]=i:s.push(i)}return r&&s.unshift(r),s}(t,u),history:{nextCursor:l>0?`${F}${l}`:null,hasMore:l>0,pageSize:d.length,totalItems:a.length}}}var $="新会话",X="autoTitleFromFirstMessage";function Z(e,t){return e===$?{...t,[X]:!0}:t}var q={active:null,queued:[],history:[]},W="goalState";function B(e){let t=e?.[W];return t&&"object"==typeof t?en({active:eo(t.active)&&"active"===t.active.status?{...t.active}:null,queued:Array.isArray(t.queued)?t.queued.filter(eo).map(e=>({...e,status:"queued"})):[],history:Array.isArray(t.history)?t.history.filter(eo).filter(e=>"active"!==e.status&&"queued"!==e.status):[]}):en(q)}function H(e,t){return{...e??{},[W]:en(t)}}function J(e,t){return K(e,{...t,kind:"goal"})}function z(e,t){return K(e,{...t,kind:"message"})}function K(e,t){let r=t.objective.trim();if(!r)throw Error("goal"===t.kind?"Goal objective is required":"Message is required");if("goal"===t.kind&&r.length>4e3)throw Error("Goal objective must be at most 4000 characters");let s={id:t.id,sessionId:t.sessionId,objective:r,status:"queued",position:e.queued.length,createdAt:t.now,updatedAt:t.now,kind:t.kind,...t.sourceMessageId?{sourceMessageId:t.sourceMessageId}:{},...t.messagePayload?{messagePayload:ed(t.messagePayload)}:{}},i="goal"===t.kind?[...e.queued.filter(e=>"goal"===et(e)),s,...e.queued.filter(e=>"message"===et(e))]:[...e.queued,s],a=en({active:e.active?{...e.active}:null,queued:i,history:[...e.history]});return a.active||!1===t.activate?a:er(a,t.now)}function Y(e,t){return V(e,"goal",t)}function G(e,t){return V(e,"message",t)}function V(e,t,r){let s=e.queued.filter(e=>et(e)===t),i=s.map(e=>e.id);if(r.length!==i.length||new Set(r).size!==i.length||r.some(e=>!i.includes(e)))throw Error(`Queued ${t} order must contain every queued ${t} exactly once`);let a=new Map(s.map(e=>[e.id,e])),n=0;return en({active:e.active?{...e.active}:null,queued:e.queued.map(e=>et(e)===t?{...a.get(r[n++])}:{...e}),history:[...e.history]})}function Q(e,t,r,s,i=Date.now()){let a=r.trim();if(!a)throw Error("Message is required");let n=!1,o=e.queued.map(e=>e.id!==t||"message"!==et(e)?{...e}:(n=!0,{...e,objective:a,messagePayload:ed(s??e.messagePayload),updatedAt:i}));if(!n)throw Error("Queued message not found");return en({active:e.active?{...e.active}:null,queued:o,history:[...e.history]})}function ee(e){return e.queued.filter(e=>"message"===et(e)).map(e=>({...e}))}function et(e){return"message"===e.kind?"message":"goal"}function er(e,t){if(e.active||0===e.queued.length)return en(e);let r=e.queued.findIndex(e=>"goal"===et(e)),s=r>=0?r:0;return en({active:{...e.queued[s],status:"active",updatedAt:t},queued:e.queued.filter((e,t)=>t!==s),history:[...e.history]})}function es(e,t,r,s){if(!e.active)return en(e);let i={...e.active,status:t,position:0,updatedAt:r,...s?{lastReason:s}:{}};return er(en({active:null,queued:[...e.queued],history:"goal"===et(i)?[...e.history,i].slice(-100):[...e.history]}),r)}function ei(e,t,r){if(e.active?.id===t)return es(e,"cancelled",r);let s=e.queued.find(e=>e.id===t);return s?en({active:e.active?{...e.active}:null,queued:e.queued.filter(e=>e.id!==t),history:"goal"===et(s)?[...e.history,{...s,status:"cancelled",position:0,updatedAt:r}].slice(-100):[...e.history]}):en(e)}function ea(e,t){return e.queued.find(e=>e.id===t&&"message"===et(e))?en({active:e.active?{...e.active}:null,queued:e.queued.filter(e=>e.id!==t),history:[...e.history]}):en(e)}function en(e){return{active:e.active?el({...e.active,status:"active",position:0}):null,queued:e.queued.map((e,t)=>el({...e,status:"queued",position:t})),history:e.history.map(e=>el({...e,position:0}))}}function eo(e){return!!e&&"object"==typeof e&&"string"==typeof e.id&&"string"==typeof e.sessionId&&"string"==typeof e.objective&&"string"==typeof e.status&&["queued","active","completed","failed","cancelled"].includes(e.status)&&"number"==typeof e.position&&"number"==typeof e.createdAt&&"number"==typeof e.updatedAt}function el(e){let t=et(e);return{...e,kind:t,..."message"===t?{messagePayload:ed(e.messagePayload)}:{}}}function ed(e){return e?{...e.images?.length?{images:[...e.images]}:{},...e.agentIds?.length?{agentIds:[...e.agentIds]}:{},...e.agentName?{agentName:e.agentName}:{}}:{}}class ec{constructor(e,t,r,s=()=>crypto.randomUUID(),i=Date.now){this.running=new Map,this.mutationTails=new Map,this.store=e,this.runGoal=t,this.abortGoal=r,this.createId=s,this.now=i}async get(e,t=!0){let r=B((await this.requireSession(e)).metadata);return t&&r.active&&this.ensureRunning(e),r}async enqueue(e,t,r){let s=await this.withSessionMutation(e,async()=>{let s=await this.requireSession(e),i=J(B(s.metadata),{id:this.createId(),sessionId:e,objective:t,sourceMessageId:r,now:this.now()});return await this.store.update(e,{metadata:H(s.metadata,i)}),i});return this.ensureRunning(e),s}async reorder(e,t){return this.withSessionMutation(e,async()=>{let r=await this.requireSession(e),s=Y(B(r.metadata),t);return await this.store.update(e,{metadata:H(r.metadata,s)}),s})}async cancel(e,t){let{state:r,wasActive:s}=await this.withSessionMutation(e,async()=>{let r=await this.requireSession(e),s=B(r.metadata),i=s.active?.id===t,a=ei(s,t,this.now());return await this.store.update(e,{metadata:H(r.metadata,a)}),{state:a,wasActive:i}});return s&&await this.abortGoal(e),r.active&&this.ensureRunning(e),r}isRunning(e){return this.running.has(e)}ensureRunning(e){if(this.running.has(e))return;let t=this.drain(e).finally(()=>{this.running.get(e)===t&&this.running.delete(e)});this.running.set(e,t)}async drain(e){for(;;){let t;let r=B((await this.requireSession(e)).metadata).active;if(!r)return;try{t=await this.runGoal(e,r.objective)}catch(e){t={outcome:"failed",reason:e instanceof Error?e.message:String(e)}}await this.withSessionMutation(e,async()=>{let s=await this.requireSession(e),i=B(s.metadata);if(i.active?.id!==r.id)return;let a=es(i,t.outcome,this.now(),t.reason);await this.store.update(e,{metadata:H(s.metadata,a)})})}}async withSessionMutation(e,t){let r=(this.mutationTails.get(e)??Promise.resolve()).catch(()=>{}).then(t),s=r.then(()=>{},()=>{});this.mutationTails.set(e,s);try{return await r}finally{this.mutationTails.get(e)===s&&this.mutationTails.delete(e)}}async requireSession(e){let t=await this.store.get(e);if(!t)throw Error(`Session not found: ${e}`);return t}}var eu={N:16384,r:8,p:1,maxmem:67108864};function eh(e,t){return new Promise((r,s)=>{(0,u.scrypt)(e,t,32,eu,(e,t)=>e?s(e):r(t))})}async function ep(e){let t=(0,u.randomBytes)(16);return{hash:await eh(e,t),salt:t,version:1}}async function em(e,t){return 1===t.version&&32===t.hash.byteLength&&(0,u.timingSafeEqual)(await eh(e,t.salt),t.hash)}class ef extends Error{constructor(e,t,r){super(t),this.code=e,this.status=r}}class eg{constructor(e,t=()=>new Date){this.store=e,this.now=t}needsSetup(){return 0===this.store.countUsers()}async setup(e,t,r){let s;if(!this.needsSetup())throw new ef("SETUP_COMPLETED","初始化已完成",409);let i=ey(e);(function(e,t){if(!/^[a-z0-9._-]{3,64}$/.test(e))throw new ef("INVALID_INPUT","用户名需为 3-64 位字母、数字或 ._-",400);if(t.length<10)throw new ef("INVALID_INPUT","密码至少 10 位",400)})(i,t);let a=this.now().toISOString(),n=await ep(t);try{s=this.store.createFirstUser({id:(0,u.randomUUID)(),usernameNormalized:i,usernameDisplay:e.trim(),passwordHash:n.hash,passwordSalt:n.salt,passwordVersion:n.version,createdAt:a,passwordChangedAt:a})}catch{throw new ef("SETUP_COMPLETED","初始化已完成",409)}return this.createLoginSession(s,r)}async login(e,t,r){let s=ey(e),i=this.now(),a=new Date(i.getTime()-9e5).toISOString();if(this.store.countRecentLoginFailures(s,r.ip,a)>=5)throw new ef("RATE_LIMITED","登录尝试过多,请稍后再试",429);let n=this.store.findUserByNormalizedUsername(s),o=!!n&&await em(t,{hash:n.passwordHash,salt:n.passwordSalt,version:n.passwordVersion});if(!n||!o)throw this.store.recordLoginFailure(s,r.ip,i.toISOString()),new ef("INVALID_CREDENTIALS","用户名或密码错误",401);return this.store.clearLoginFailures(s,r.ip),this.createLoginSession(n,r)}authenticateToken(e){if(!e)throw new ef("UNAUTHENTICATED","请先登录",401);let t=this.now().toISOString(),r=this.store.findSessionByTokenHash(e_(e),t);if(!r)throw new ef("UNAUTHENTICATED","登录已失效",401);let s=this.store.findUserById(r.userId);if(!s)throw new ef("UNAUTHENTICATED","用户不存在",401);return{principal:{userId:s.id,username:s.usernameDisplay,sessionId:r.id,deviceId:r.deviceId},session:r}}refresh(e){let t=this.authenticateToken(e),r=eT(),s=this.now(),i=new Date(s.getTime()+2592e6).toISOString();return this.store.rotateCsrf(t.session.id,e_(r),s.toISOString(),i),{principal:t.principal,csrfToken:r,expiresAt:i}}validateCsrf(e,t){var r,s;if(!t||(r=e_(t),s=e.session.csrfHash,!(r.byteLength===s.byteLength&&(0,u.timingSafeEqual)(r,s))))throw new ef("INVALID_CSRF","CSRF 校验失败",403)}issueWsNonce(e){let t=this.authenticateToken(e),r=eT(),s=new Date(this.now().getTime()+6e4).toISOString();return this.store.issueWsNonce(t.session.id,e_(r),s),{nonce:r,expiresAt:s,principal:t.principal}}consumeWsNonce(e,t){let r=this.authenticateToken(e);if(!this.store.consumeWsNonce(r.session.id,e_(t),this.now().toISOString()))throw new ef("INVALID_NONCE","连接凭证无效",403);return r.principal}logout(e){let t=this.authenticateToken(e);this.store.revokeSession(t.session.id,this.now().toISOString())}revokeAll(e,t=!0){let r=this.authenticateToken(e);return this.store.revokeUserSessions(r.principal.userId,t?r.session.id:null,this.now().toISOString())}createLoginSession(e,t){let r=this.now(),s=eT(),i=eT(),a=t.deviceId||(0,u.randomUUID)(),n=new Date(r.getTime()+2592e6).toISOString(),o={id:(0,u.randomUUID)(),userId:e.id,tokenHash:e_(s),csrfHash:e_(i),wsNonceHash:null,wsNonceExpiresAt:null,deviceId:a,deviceName:t.deviceName||"",userAgent:t.userAgent,createdAt:r.toISOString(),lastSeenAt:r.toISOString(),expiresAt:n,revokedAt:null};return this.store.createSession(o),{user:{id:e.id,username:e.usernameDisplay},sessionId:o.id,authToken:s,csrfToken:i,expiresAt:n,deviceId:a}}}function ey(e){return e.trim().normalize("NFKC").toLowerCase()}function e_(e){return(0,u.createHash)("sha256").update(e).digest()}function eT(){return(0,u.randomBytes)(32).toString("base64url")}var eE=["codex","claude agents","opencode","agent-tui"];function ev(){return eE.map((e,t)=>({id:`default-${t+1}`,command:e}))}function eb(e){if(!Array.isArray(e))throw Error("置顶命令必须是数组");if(e.length>50)throw Error(`置顶命令最多 50 条`);let t=new Set;return e.map(e=>{if(!e||"object"!=typeof e)throw Error("置顶命令格式无效");let r=String(e.id??"").trim(),s=String(e.command??"").trim();if(!r||r.length>128||/[\r\n\0]/.test(r))throw Error("置顶命令 ID 无效");if(t.has(r))throw Error("置顶命令 ID 不能重复");if(!s)throw Error("置顶命令不能为空");if(s.length>1e3)throw Error(`单条命令最多 1000 个字符`);if(/[\r\n\0]/.test(s))throw Error("置顶命令只能包含一行");return t.add(r),{id:r,command:s}})}var ew=`You are summarizing a conversation for handoff to another model that will continue the task.
1
+ exports.id=1322,exports.ids=[1322],exports.modules={8794:e=>{function t(e){return Promise.resolve().then(()=>{var t=Error("Cannot find module '"+e+"'");throw t.code="MODULE_NOT_FOUND",t})}t.keys=()=>[],t.resolve=t,t.id=8794,e.exports=t},1322:(e,t,r)=>{"use strict";r.d(t,{CT:()=>ek,Cr:()=>U,E0:()=>eL,FP:()=>eu,Fi:()=>G,G1:()=>sv,H8:()=>eg,In:()=>ea,JX:()=>em,KS:()=>sf,LJ:()=>ef,MO:()=>H,N7:()=>r8,N8:()=>sw,Ny:()=>O,Q$:()=>sg,S3:()=>sk,Sf:()=>N,T3:()=>sI,TL:()=>sP,Tp:()=>s$,Tu:()=>Q,Wf:()=>ei,Wo:()=>ec,XP:()=>j,XU:()=>sO,XW:()=>sS,Y4:()=>sp,Y_:()=>ev,ZC:()=>eo,_O:()=>eC,as:()=>rV,bX:()=>b,buildSessionQueryIndex:()=>$,ds:()=>sl,h1:()=>el,l7:()=>eR,m6:()=>sN,pG:()=>Y,rt:()=>sE,s_:()=>ep,tw:()=>eh,uA:()=>er,ue:()=>A,uj:()=>M,wM:()=>C});var s,i,a,n,o,l=r(9411),d=r(7718);r(5673);var c=r(7561);r(1041);var u=r(6005),h=r(3977),p=r(612),m=r(9801),f=r(1747),g=r(8849),y=r(2286),_=r(5890),T=Object.defineProperty,E=e=>e;function v(e,t){this[e]=E.bind(null,t)}function b(e,t){let r=e??[],s=r.findIndex(e=>e.itemId===t.itemId&&e.sectionIndex===t.sectionIndex);return(s<0?[...r,{itemId:t.itemId,sectionIndex:t.sectionIndex,text:t.delta}]:r.map((e,r)=>r===s?{...e,text:e.text+t.delta}:e)).sort((e,t)=>e.sectionIndex-t.sectionIndex)}var w=["request-approval","auto-approval","full-access"],N=[{label:"允许一次",description:"仅允许当前这次工具调用"},{label:"本会话允许",description:"当前会话再次执行相同工具和目标时不再询问"},{label:"拒绝",description:"不执行这次工具调用,让 Agent 继续处理"},{label:"取消本轮",description:"不执行工具,并立即停止当前回复"}],S=new Set(["ask_user","read_file","grep","glob","show_widget","todo_add","todo_update","todo_list","wait_agent","cron_list","lsp_diagnostics","lsp_hover","lsp_definition","lsp_references"]),k=new Set(["write_file","str_replace","apply_patch"]),L=new Set(["cron_create","cron_delete","dispatch_agent"]),x=new Set(["web_fetch","web_search"]),I=[{pattern:/(^|[;&|]\s*)sudo\b/i,reason:"命令会以提升后的系统权限运行"},{pattern:/\brm\s+(?:-[^\s]*[rf][^\s]*\s+|--recursive\b|--force\b)/i,reason:"命令可能递归或强制删除文件"},{pattern:/\bgit\s+(?:push|clean\s+-[^\s]*f|reset\s+--hard|checkout\s+--|branch\s+-D)\b/i,reason:"命令会改变远端或丢弃本地 Git 数据"},{pattern:/\b(?:npm|pnpm|yarn|bun)\s+(?:publish|deploy)\b/i,reason:"命令会发布或部署产物"},{pattern:/\b(?:docker\s+push|kubectl\s+(?:apply|delete|replace|patch)|helm\s+(?:install|upgrade|uninstall))\b/i,reason:"命令会修改远程运行环境"},{pattern:/\b(?:systemctl|launchctl|shutdown|reboot|killall|pkill)\b/i,reason:"命令会改变系统进程或服务状态"},{pattern:/\b(?:chmod|chown)\b/i,reason:"命令会修改文件权限或所有者"},{pattern:/\bcurl\b[^\n]*(?:-X\s*(?:POST|PUT|PATCH|DELETE)\b|--request\s+(?:POST|PUT|PATCH|DELETE)\b|(?:-d|--data(?:-raw|-binary)?)\s)/i,reason:"命令会向网络服务提交或修改数据"},{pattern:/\b(?:release|deploy|publish)\b/i,reason:"命令包含发布或部署操作"}];function O(e){return A(e)?e:"full-access"}function A(e){return"string"==typeof e&&w.includes(e)}function C(e,t){return["allow-once","allow-session","deny","cancel"][t?.[0]??N.findIndex(t=>t.label===e)]??"deny"}function R(e,t=140){let r="string"==typeof e?e.replace(/\s+/g," ").trim():"";return r.length>t?`${r.slice(0,t-1)}...`:r}function D(e,t){let r=(0,l.resolve)(t),s=(0,l.resolve)(r,e),i=(0,l.relative)(r,s);return""===i||".."!==i&&!i.startsWith(`..${l.sep}`)&&!(0,l.isAbsolute)(i)}function U(e,t,r){if(S.has(e))return{kind:"safe",risky:!1,summary:`使用 ${e}`,reason:"只读取信息或更新当前会话状态",resourceKey:e};if(k.has(e)){let s=function(e,t){if("apply_patch"===e){var r;return"string"!=typeof(r=t.patch)?[]:r.split(`
2
+ `).filter(e=>e.startsWith("+++ ")).map(e=>e.slice(4).split(" ",1)[0].trim()).filter(e=>e&&"/dev/null"!==e).map(e=>e.startsWith("b/")?e.slice(2):e)}return"string"==typeof t.file_path?[t.file_path]:[]}(e,t),i=s.filter(e=>!D(e,r)),a=(i.length>0?i:s).map(e=>R(e,100)),n=(i.length>0?i:s).slice().sort(),o=i.length>0||0===s.length;return{kind:o?"external-write":"workspace-write",risky:o,summary:`${o?"修改工作区外文件":"修改工作区文件"}${a.length?`:${a.join("、")}`:""}`,reason:o?"目标文件不在当前工作区内":"目标文件位于当前工作区内",resourceKey:`${e}:${n.join("|")||"unknown-path"}`}}if("bash"===e){let e="string"==typeof t.command?t.command.replace(/\s+/g," ").trim():"",s=R(e,240),i=I.find(({pattern:t})=>t.test(e))?.reason??(Array.from(e.matchAll(/(?:^|\s)>{1,2}\s*["']?([^\s;&|><"']+)/g)).map(e=>e[1]).some(e=>!D(e,r))?"命令会通过重定向修改工作区外文件":/(?:^|[;&|]\s*)(?:rm|mv|cp|mkdir|touch|tee|truncate|install)\b|\bsed\b[^\n]*\s-i\b/i.test(e)&&Array.from(e.matchAll(/(?:^|\s)(\/[^\s;&|><"']+)/g)).map(e=>e[1]).some(e=>!D(e,r))?"命令会修改工作区外文件":void 0);return{kind:"shell",risky:!!i,summary:`运行命令:${s||"(空命令)"}`,reason:i??"命令将在当前工作区的终端中运行",resourceKey:`bash:${e||"unknown-command"}`}}if(x.has(e)){let r="web_search"===e?R(t.query,100):R(t.url,120);return{kind:"network",risky:!1,summary:`${"web_search"===e?"搜索网络":"访问网络"}:${r||"未指定目标"}`,reason:"工具将连接互联网读取信息",resourceKey:function(e,t){if("web_search"===e)return`web-search:${R(t.query,80)}`;if("string"!=typeof t.url)return`${e}:network`;try{return`${e}:${new URL(t.url).host}`}catch{return`${e}:${R(t.url,80)}`}}(e,t)}}if(e.startsWith("mcp_"))return{kind:"remote",risky:!0,summary:`调用 MCP 工具:${e.slice(4)}`,reason:"MCP 工具可能修改外部系统,当前无法可靠判定其副作用",resourceKey:e};if("remote_project_action"===e){let e=R(t.action,100)||"unknown-action",r="remote_job_status"===e;return{kind:r?"safe":"remote",risky:!r,summary:r?"查询远程任务状态":`执行远程动作:${e}`,reason:r?"只查询已提交任务的状态":"该动作会调用远程项目服务",resourceKey:`remote_project_action:${e}`}}return L.has(e)?{kind:"risky-local",risky:!0,summary:`执行 ${e}`,reason:"dispatch_agent"===e?"子 Agent 会继续执行新的工具调用":"该操作会改变定时任务状态",resourceKey:`${e}:${R(t.agentName??t.cron??t.id,100)||"default"}`}:{kind:"unknown",risky:!0,summary:`调用未分类工具:${e}`,reason:"当前无法判断该工具是否会产生副作用",resourceKey:`unknown:${e}`}}class j{constructor(e){this.sessionApprovals=new Map,this.approvalQueues=new Map,this.options=e}clearSession(e){this.sessionApprovals.delete(e)}async authorize(e,t,r){if(r.signal?.aborted)return"cancel";let s=O(await this.options.resolveMode(r.sessionId));if("full-access"===s)return"allow";let i=U(e,t,r.workingDirectory);return!("full-access"!==s&&("auto-approval"===s?i.risky||"unknown"===i.kind:["external-write","shell","network","remote","risky-local","unknown"].includes(i.kind)))||this.sessionApprovals.get(r.sessionId)?.has(i.resourceKey)?"allow":this.enqueue(r.sessionId,async()=>{if(r.signal?.aborted)return"cancel";if(this.sessionApprovals.get(r.sessionId)?.has(i.resourceKey))return"allow";let s=await this.options.requestApproval({sessionId:r.sessionId,toolName:e,summary:i.summary,reason:i.reason,resourceKey:i.resourceKey,args:t});if(r.signal?.aborted)return"cancel";if("allow-session"===s){let e=this.sessionApprovals.get(r.sessionId)??new Set;return e.add(i.resourceKey),this.sessionApprovals.set(r.sessionId,e),"allow"}return"allow-once"===s?"allow":s})}async enqueue(e,t){let r=this.approvalQueues.get(e)??Promise.resolve(),s=()=>{},i=new Promise(e=>{s=e}),a=r.then(()=>i);this.approvalQueues.set(e,a),await r;try{return await t()}finally{s(),this.approvalQueues.get(e)===a&&this.approvalQueues.delete(e)}}}class P{constructor(e,t){this.delegate=e,this.gate=t}validate(e,t){return this.delegate.validate(e,t)}async execute(e,t,r){let s=await this.gate.authorize(e,t,r);if("cancel"===s)throw Error("turn_aborted");return"deny"===s?{toolCallId:"",content:`Permission denied by user: ${e}`,isError:!0}:this.delegate.execute(e,t,r)}}var F="history-anchor.v1.";class M extends Error{constructor(){super("Session history changed; refresh the query index"),this.code="STALE_SESSION_ANCHOR",this.name="StaleSessionAnchorError"}}function $(e,t,r=X(t)){let s=function(e){let t=[];for(let r of e)q(r)&&t.push({message:r,visibleIndex:t.length});return t}(t),i=0,a=s.flatMap(({message:e,visibleIndex:t})=>"user"===e.role&&"__interrupt__"!==e.name&&"__compaction_checkpoint__"!==e.name&&(e.content.trim()||e.images?.length||e.presentation?.attachments?.some(e=>"image"===e.type))?(i+=1,[{messageId:Z(t,e),ordinal:i,preview:function(e){let t=e.content.replace(/\s+/g," ").trim();return t?t.length>120?`${t.slice(0,119)}…`:t:"图片消息"}(e),pageToken:`${F}${r}.${t.toString(36)}`}]):[]);return{sessionId:e,revision:r,totalQueries:a.length,entries:a}}function X(e){let t=2166136261,r=e.filter(q);for(let e of(t=W(t,String(r.length)),r)){let r=e.content??"";t=W(t,[e.role,e.name??"",String(r.length),r.slice(0,"user"===e.role?128:96),r.slice("user"===e.role?-32:-96),String(e.images?.length??e.presentation?.attachments?.length??0),(e.toolCalls??[]).map(e=>e.id).join(",")].join("\x1f"))}return`${r.length.toString(36)}-${(t>>>0).toString(36)}`}function Z(e,t){let r=t.content??"",s=[t.role,t.name??"",String(r.length),r.slice(0,128),r.slice(-32),String(t.images?.length??t.presentation?.attachments?.length??0)].join("\x1f");return`history-message.v1.${e.toString(36)}.${(W(2166136261,s)>>>0).toString(36)}`}function q(e){return"user"===e.role||"assistant"===e.role}function W(e,t){let r=e;for(let e=0;e<t.length;e+=1)r^=t.charCodeAt(e),r=Math.imul(r,16777619);return r}var B="history.v1.";function H(e,t,r={}){var s;let i=Number.isFinite(s=r.limit)?Math.max(1,Math.min(100,Math.floor(s))):50,a=e.filter(e=>"user"===e.role||"assistant"===e.role),n=new Map;for(let t of e)"tool"===t.role&&t.toolCallId&&n.set(t.toolCallId,t);let o=X(e),{start:l,end:d,kind:c}=function(e,t,r,s){if(r.anchor){let i=function(e,t){if(!e.startsWith(F))throw new M;let r=e.slice(F.length),s=r.lastIndexOf(".");if(s<=0||r.slice(0,s)!==t)throw new M;let i=Number.parseInt(r.slice(s+1),36);if(!Number.isSafeInteger(i)||i<0)throw new M;return i}(r.anchor,s);if(i>=e.length||e[i]?.role!=="user")throw new M;let a=z(e,Math.max(0,i-Math.floor(t/2)));return{start:a,end:J(e,a,Math.max(t,i-a+1)),kind:"anchored"}}if(r.after){let s=K(r.after,e.length);return{start:s,end:J(e,s,t),kind:"anchored"}}let i=K(r.before,e.length);return{start:z(e,Math.max(0,i-t)),end:i,kind:"latest"}}(a,i,r,o),u=a.slice(l,d),h=[],p=new Set;for(let e=0;e<u.length;e+=1){let t=u[e];for(let r of(h.push({...t,historyId:Z(l+e,t)}),t.toolCalls??[])){p.add(r.id);let e=n.get(r.id);e&&h.push(e)}}return{messages:h,events:function(e,t){let r;let s=[];for(let i of e)if("context_usage"===i.type&&(r=i),"tool_result"===i.type&&t.has(i.result.toolCallId)&&s.push(i),"native_subagent_update"===i.type&&t.has(i.activity.parentToolCallId)){let e=s.findIndex(e=>"native_subagent_update"===e.type&&e.activity.parentToolCallId===i.activity.parentToolCallId);e>=0?s[e]=i:s.push(i)}return r&&s.unshift(r),s}(t,p),history:{nextCursor:l>0?`${B}${l}`:null,hasMore:l>0,pageSize:u.length,totalItems:a.length,olderCursor:l>0?`${B}${l}`:null,newerCursor:d<a.length?`${B}${d}`:null,kind:c,revision:o}}}function J(e,t,r){let s=Math.min(e.length,t+r);for(;s<e.length&&e[s]?.role!=="user";)s+=1;return s}function z(e,t){if(t<=0||e[t]?.role==="user")return t;for(let r=t-1;r>=0;r-=1)if("user"===e[r].role)return r;return 0}function K(e,t){if(!e?.startsWith(B))return t;let r=Number(e.slice(B.length));return!Number.isSafeInteger(r)||r<0?t:Math.min(r,t)}class Y{constructor(e=24){if(this.entries=new Map,this.capacity=e,!Number.isSafeInteger(e)||e<1)throw Error("Session query index cache capacity must be positive")}getOrCreate(e,t){let r=X(t),s=this.entries.get(e);if(s?.revision===r)return this.entries.delete(e),this.entries.set(e,s),s;let i=$(e,t,r);for(this.entries.delete(e),this.entries.set(e,i);this.entries.size>this.capacity;){let e=this.entries.keys().next().value;if(void 0===e)break;this.entries.delete(e)}return i}invalidate(e){this.entries.delete(e)}clear(){this.entries.clear()}}var G="新会话",V="autoTitleFromFirstMessage";function Q(e,t){return e===G?{...t,[V]:!0}:t}var ee={active:null,queued:[],history:[]},et="goalState";function er(e){let t=e?.[et];return t&&"object"==typeof t?ey({active:e_(t.active)&&"active"===t.active.status?{...t.active}:null,queued:Array.isArray(t.queued)?t.queued.filter(e_).map(e=>({...e,status:"queued"})):[],history:Array.isArray(t.history)?t.history.filter(e_).filter(e=>"active"!==e.status&&"queued"!==e.status):[]}):ey(ee)}function es(e,t){return{...e??{},[et]:ey(t)}}function ei(e,t){return en(e,{...t,kind:"goal"})}function ea(e,t){return en(e,{...t,kind:"message"})}function en(e,t){let r=t.objective.trim();if(!r)throw Error("goal"===t.kind?"Goal objective is required":"Message is required");if("goal"===t.kind&&r.length>4e3)throw Error("Goal objective must be at most 4000 characters");let s={id:t.id,sessionId:t.sessionId,objective:r,status:"queued",position:e.queued.length,createdAt:t.now,updatedAt:t.now,kind:t.kind,...t.sourceMessageId?{sourceMessageId:t.sourceMessageId}:{},...t.messagePayload?{messagePayload:eE(t.messagePayload)}:{}},i="goal"===t.kind?[...e.queued.filter(e=>"goal"===eh(e)),s,...e.queued.filter(e=>"message"===eh(e))]:[...e.queued,s],a=ey({active:e.active?{...e.active}:null,queued:i,history:[...e.history]});return a.active||!1===t.activate?a:ep(a,t.now)}function eo(e,t){return ed(e,"goal",t)}function el(e,t){return ed(e,"message",t)}function ed(e,t,r){let s=e.queued.filter(e=>eh(e)===t),i=s.map(e=>e.id);if(r.length!==i.length||new Set(r).size!==i.length||r.some(e=>!i.includes(e)))throw Error(`Queued ${t} order must contain every queued ${t} exactly once`);let a=new Map(s.map(e=>[e.id,e])),n=0;return ey({active:e.active?{...e.active}:null,queued:e.queued.map(e=>eh(e)===t?{...a.get(r[n++])}:{...e}),history:[...e.history]})}function ec(e,t,r,s,i=Date.now()){let a=r.trim();if(!a)throw Error("Message is required");let n=!1,o=e.queued.map(e=>e.id!==t||"message"!==eh(e)?{...e}:(n=!0,{...e,objective:a,messagePayload:eE(s??e.messagePayload),updatedAt:i}));if(!n)throw Error("Queued message not found");return ey({active:e.active?{...e.active}:null,queued:o,history:[...e.history]})}function eu(e){return e.queued.filter(e=>"message"===eh(e)).map(e=>({...e}))}function eh(e){return"message"===e.kind?"message":"goal"}function ep(e,t){if(e.active||0===e.queued.length)return ey(e);let r=e.queued.findIndex(e=>"goal"===eh(e)),s=r>=0?r:0;return ey({active:{...e.queued[s],status:"active",updatedAt:t},queued:e.queued.filter((e,t)=>t!==s),history:[...e.history]})}function em(e,t,r,s){if(!e.active)return ey(e);let i={...e.active,status:t,position:0,updatedAt:r,...s?{lastReason:s}:{}};return ep(ey({active:null,queued:[...e.queued],history:"goal"===eh(i)?[...e.history,i].slice(-100):[...e.history]}),r)}function ef(e,t,r){if(e.active?.id===t)return em(e,"cancelled",r);let s=e.queued.find(e=>e.id===t);return s?ey({active:e.active?{...e.active}:null,queued:e.queued.filter(e=>e.id!==t),history:"goal"===eh(s)?[...e.history,{...s,status:"cancelled",position:0,updatedAt:r}].slice(-100):[...e.history]}):ey(e)}function eg(e,t){return e.queued.find(e=>e.id===t&&"message"===eh(e))?ey({active:e.active?{...e.active}:null,queued:e.queued.filter(e=>e.id!==t),history:[...e.history]}):ey(e)}function ey(e){return{active:e.active?eT({...e.active,status:"active",position:0}):null,queued:e.queued.map((e,t)=>eT({...e,status:"queued",position:t})),history:e.history.map(e=>eT({...e,position:0}))}}function e_(e){return!!e&&"object"==typeof e&&"string"==typeof e.id&&"string"==typeof e.sessionId&&"string"==typeof e.objective&&"string"==typeof e.status&&["queued","active","completed","failed","cancelled"].includes(e.status)&&"number"==typeof e.position&&"number"==typeof e.createdAt&&"number"==typeof e.updatedAt}function eT(e){let t=eh(e);return{...e,kind:t,..."message"===t?{messagePayload:eE(e.messagePayload)}:{}}}function eE(e){return e?{...e.images?.length?{images:[...e.images]}:{},...e.agentIds?.length?{agentIds:[...e.agentIds]}:{},...e.agentName?{agentName:e.agentName}:{}}:{}}class ev{constructor(e,t,r,s=()=>crypto.randomUUID(),i=Date.now){this.running=new Map,this.mutationTails=new Map,this.store=e,this.runGoal=t,this.abortGoal=r,this.createId=s,this.now=i}async get(e,t=!0){let r=er((await this.requireSession(e)).metadata);return t&&r.active&&this.ensureRunning(e),r}async enqueue(e,t,r){let s=await this.withSessionMutation(e,async()=>{let s=await this.requireSession(e),i=ei(er(s.metadata),{id:this.createId(),sessionId:e,objective:t,sourceMessageId:r,now:this.now()});return await this.store.update(e,{metadata:es(s.metadata,i)}),i});return this.ensureRunning(e),s}async reorder(e,t){return this.withSessionMutation(e,async()=>{let r=await this.requireSession(e),s=eo(er(r.metadata),t);return await this.store.update(e,{metadata:es(r.metadata,s)}),s})}async cancel(e,t){let{state:r,wasActive:s}=await this.withSessionMutation(e,async()=>{let r=await this.requireSession(e),s=er(r.metadata),i=s.active?.id===t,a=ef(s,t,this.now());return await this.store.update(e,{metadata:es(r.metadata,a)}),{state:a,wasActive:i}});return s&&await this.abortGoal(e),r.active&&this.ensureRunning(e),r}isRunning(e){return this.running.has(e)}ensureRunning(e){if(this.running.has(e))return;let t=this.drain(e).finally(()=>{this.running.get(e)===t&&this.running.delete(e)});this.running.set(e,t)}async drain(e){for(;;){let t;let r=er((await this.requireSession(e)).metadata).active;if(!r)return;try{t=await this.runGoal(e,r.objective)}catch(e){t={outcome:"failed",reason:e instanceof Error?e.message:String(e)}}await this.withSessionMutation(e,async()=>{let s=await this.requireSession(e),i=er(s.metadata);if(i.active?.id!==r.id)return;let a=em(i,t.outcome,this.now(),t.reason);await this.store.update(e,{metadata:es(s.metadata,a)})})}}async withSessionMutation(e,t){let r=(this.mutationTails.get(e)??Promise.resolve()).catch(()=>{}).then(t),s=r.then(()=>{},()=>{});this.mutationTails.set(e,s);try{return await r}finally{this.mutationTails.get(e)===s&&this.mutationTails.delete(e)}}async requireSession(e){let t=await this.store.get(e);if(!t)throw Error(`Session not found: ${e}`);return t}}var eb={N:16384,r:8,p:1,maxmem:67108864};function ew(e,t){return new Promise((r,s)=>{(0,u.scrypt)(e,t,32,eb,(e,t)=>e?s(e):r(t))})}async function eN(e){let t=(0,u.randomBytes)(16);return{hash:await ew(e,t),salt:t,version:1}}async function eS(e,t){return 1===t.version&&32===t.hash.byteLength&&(0,u.timingSafeEqual)(await ew(e,t.salt),t.hash)}class ek extends Error{constructor(e,t,r){super(t),this.code=e,this.status=r}}class eL{constructor(e,t=()=>new Date){this.store=e,this.now=t}needsSetup(){return 0===this.store.countUsers()}async setup(e,t,r){let s;if(!this.needsSetup())throw new ek("SETUP_COMPLETED","初始化已完成",409);let i=ex(e);(function(e,t){if(!/^[a-z0-9._-]{3,64}$/.test(e))throw new ek("INVALID_INPUT","用户名需为 3-64 位字母、数字或 ._-",400);if(t.length<10)throw new ek("INVALID_INPUT","密码至少 10 位",400)})(i,t);let a=this.now().toISOString(),n=await eN(t);try{s=this.store.createFirstUser({id:(0,u.randomUUID)(),usernameNormalized:i,usernameDisplay:e.trim(),passwordHash:n.hash,passwordSalt:n.salt,passwordVersion:n.version,createdAt:a,passwordChangedAt:a})}catch{throw new ek("SETUP_COMPLETED","初始化已完成",409)}return this.createLoginSession(s,r)}async login(e,t,r){let s=ex(e),i=this.now(),a=new Date(i.getTime()-9e5).toISOString();if(this.store.countRecentLoginFailures(s,r.ip,a)>=5)throw new ek("RATE_LIMITED","登录尝试过多,请稍后再试",429);let n=this.store.findUserByNormalizedUsername(s),o=!!n&&await eS(t,{hash:n.passwordHash,salt:n.passwordSalt,version:n.passwordVersion});if(!n||!o)throw this.store.recordLoginFailure(s,r.ip,i.toISOString()),new ek("INVALID_CREDENTIALS","用户名或密码错误",401);return this.store.clearLoginFailures(s,r.ip),this.createLoginSession(n,r)}authenticateToken(e){if(!e)throw new ek("UNAUTHENTICATED","请先登录",401);let t=this.now().toISOString(),r=this.store.findSessionByTokenHash(eI(e),t);if(!r)throw new ek("UNAUTHENTICATED","登录已失效",401);let s=this.store.findUserById(r.userId);if(!s)throw new ek("UNAUTHENTICATED","用户不存在",401);return{principal:{userId:s.id,username:s.usernameDisplay,sessionId:r.id,deviceId:r.deviceId},session:r}}refresh(e){let t=this.authenticateToken(e),r=eO(),s=this.now(),i=new Date(s.getTime()+2592e6).toISOString();return this.store.rotateCsrf(t.session.id,eI(r),s.toISOString(),i),{principal:t.principal,csrfToken:r,expiresAt:i}}validateCsrf(e,t){var r,s;if(!t||(r=eI(t),s=e.session.csrfHash,!(r.byteLength===s.byteLength&&(0,u.timingSafeEqual)(r,s))))throw new ek("INVALID_CSRF","CSRF 校验失败",403)}issueWsNonce(e){let t=this.authenticateToken(e),r=eO(),s=new Date(this.now().getTime()+6e4).toISOString();return this.store.issueWsNonce(t.session.id,eI(r),s),{nonce:r,expiresAt:s,principal:t.principal}}consumeWsNonce(e,t){let r=this.authenticateToken(e);if(!this.store.consumeWsNonce(r.session.id,eI(t),this.now().toISOString()))throw new ek("INVALID_NONCE","连接凭证无效",403);return r.principal}logout(e){let t=this.authenticateToken(e);this.store.revokeSession(t.session.id,this.now().toISOString())}revokeAll(e,t=!0){let r=this.authenticateToken(e);return this.store.revokeUserSessions(r.principal.userId,t?r.session.id:null,this.now().toISOString())}createLoginSession(e,t){let r=this.now(),s=eO(),i=eO(),a=t.deviceId||(0,u.randomUUID)(),n=new Date(r.getTime()+2592e6).toISOString(),o={id:(0,u.randomUUID)(),userId:e.id,tokenHash:eI(s),csrfHash:eI(i),wsNonceHash:null,wsNonceExpiresAt:null,deviceId:a,deviceName:t.deviceName||"",userAgent:t.userAgent,createdAt:r.toISOString(),lastSeenAt:r.toISOString(),expiresAt:n,revokedAt:null};return this.store.createSession(o),{user:{id:e.id,username:e.usernameDisplay},sessionId:o.id,authToken:s,csrfToken:i,expiresAt:n,deviceId:a}}}function ex(e){return e.trim().normalize("NFKC").toLowerCase()}function eI(e){return(0,u.createHash)("sha256").update(e).digest()}function eO(){return(0,u.randomBytes)(32).toString("base64url")}var eA=["codex","claude agents","opencode","agent-tui"];function eC(){return eA.map((e,t)=>({id:`default-${t+1}`,command:e}))}function eR(e){if(!Array.isArray(e))throw Error("置顶命令必须是数组");if(e.length>50)throw Error(`置顶命令最多 50 条`);let t=new Set;return e.map(e=>{if(!e||"object"!=typeof e)throw Error("置顶命令格式无效");let r=String(e.id??"").trim(),s=String(e.command??"").trim();if(!r||r.length>128||/[\r\n\0]/.test(r))throw Error("置顶命令 ID 无效");if(t.has(r))throw Error("置顶命令 ID 不能重复");if(!s)throw Error("置顶命令不能为空");if(s.length>1e3)throw Error(`单条命令最多 1000 个字符`);if(/[\r\n\0]/.test(s))throw Error("置顶命令只能包含一行");return t.add(r),{id:r,command:s}})}var eD=`You are summarizing a conversation for handoff to another model that will continue the task.
3
3
 
4
4
  Your summary must preserve the exact information needed to continue without reading the original transcript.
5
5
 
@@ -9,43 +9,43 @@ Include:
9
9
  - Concrete files, symbols, commands, errors, data, examples, and references that matter
10
10
  - What remains to be done, with clear next steps
11
11
 
12
- Output ONLY the handoff summary text, no preamble or meta-commentary.`,eN="This is a summary of the conversation so far, written to preserve continuity after context compaction.",eS="Understood. I have reviewed the summary and will continue from where we left off.";class ek{constructor(e){this.modelProvider=e}pruneToolResults(e,t=6){let r=[];for(let t=0;t<e.length;t++)"tool"===e[t].role&&r.push(t);let s=new Set(r.slice(-t));return e.map((e,t)=>"tool"===e.role&&!s.has(t)&&e.content.length>500?{...e,content:e.content.slice(0,500)+`
12
+ Output ONLY the handoff summary text, no preamble or meta-commentary.`,eU="This is a summary of the conversation so far, written to preserve continuity after context compaction.",ej="Understood. I have reviewed the summary and will continue from where we left off.";class eP{constructor(e){this.modelProvider=e}pruneToolResults(e,t=6){let r=[];for(let t=0;t<e.length;t++)"tool"===e[t].role&&r.push(t);let s=new Set(r.slice(-t));return e.map((e,t)=>"tool"===e.role&&!s.has(t)&&e.content.length>500?{...e,content:e.content.slice(0,500)+`
13
13
  …[truncated]`}:e)}async compact(e,t=8){let[r,...s]=e,i=Math.max(0,s.length-t);for(;i>0&&s[i]?.role==="tool";)i--;let a=s.slice(0,i),n=s.slice(i);if(0===a.length)return{messages:e,summary:"",removedMessages:0};let o=a.map(e=>{let t="tool"===e.role?`tool(${e.name??""})`:e.role,r=e.content.slice(0,2e3);return`[${t}]: ${r}`}).join(`
14
14
 
15
- `),l="";for await(let e of this.modelProvider.streamChat([{role:"system",content:ew},{role:"user",content:o}],{maxTokens:2048,reasoningEffort:"off"}))"text_chunk"===e.type&&(l+=e.text);return l=l.trim(),{messages:[...r?[r]:[],{role:"user",content:`${eN}
16
- ${l}`},{role:"assistant",content:eS},...n],summary:l,removedMessages:a.length}}async compactForHandoff(e){let t=e.filter(e=>"system"!==e.role&&"__compaction_checkpoint__"!==e.name&&!this.isSummaryMessage(e));if(0===t.length)return{replacementMessages:[],summary:"",recentMessages:[],removedMessages:0};let r=t.map(e=>{let t="tool"===e.role?`tool(${e.name??""})`:e.role,r=e.content.slice(0,4e3);return`[${t}]: ${r}`}).join(`
15
+ `),l="";for await(let e of this.modelProvider.streamChat([{role:"system",content:eD},{role:"user",content:o}],{maxTokens:2048,reasoningEffort:"off"}))"text_chunk"===e.type&&(l+=e.text);return l=l.trim(),{messages:[...r?[r]:[],{role:"user",content:`${eU}
16
+ ${l}`},{role:"assistant",content:ej},...n],summary:l,removedMessages:a.length}}async compactForHandoff(e){let t=e.filter(e=>"system"!==e.role&&"__compaction_checkpoint__"!==e.name&&!this.isSummaryMessage(e));if(0===t.length)return{replacementMessages:[],summary:"",recentMessages:[],removedMessages:0};let r=t.map(e=>{let t="tool"===e.role?`tool(${e.name??""})`:e.role,r=e.content.slice(0,4e3);return`[${t}]: ${r}`}).join(`
17
17
 
18
- `),s="";for await(let e of this.modelProvider.streamChat([{role:"system",content:ew},{role:"user",content:r}],{maxTokens:4096,reasoningEffort:"off"}))"text_chunk"===e.type&&(s+=e.text);s=s.trim();let i=this.collectRecentUserMessages(t),a=[...i,{role:"user",content:`${eN}
19
- ${s}`}];return{replacementMessages:a,summary:s,recentMessages:i,removedMessages:Math.max(0,t.length-a.length)}}async estimateTokens(e){try{return await this.modelProvider.countTokens(e)}catch{return Math.ceil(e.reduce((e,t)=>e+t.content.length,0)/4)}}collectRecentUserMessages(e){let t=[],r=0;for(let s=e.length-1;s>=0;s--){let i=e[s];if("user"!==i.role||this.isSummaryMessage(i))continue;let a=Math.ceil(i.content.length/4),n=2e4-r;if(n<=0)break;if(a<=n){t.push(i),r+=a;continue}t.push({...i,content:i.content.slice(-(4*n))});break}return t.reverse()}isSummaryMessage(e){return"user"===e.role&&e.content.startsWith(eN)}}var eL=["systemBase","environment","projectContext","skills","memory","embeddedTools","conversationHistory","currentUserMessage","assistantMessages","toolCalls","toolResults","images","compactionSummary","nativeToolDefinitions","messageOverhead"];function ex(e){return Math.ceil(e.length/4)}class eI{constructor(e){this.abortController=null,this.config=e,this.compactor=new ek(e.modelProvider),this.initialToolNames=new Set(e.toolRegistry.getAll().map(e=>e.name))}sanitizeHistory(e){let t=new Set;for(let r of e)"tool"===r.role&&r.toolCallId&&t.add(r.toolCallId);let r=new Set;for(let s of e)if("assistant"===s.role&&s.toolCalls&&s.toolCalls.length>0&&!s.toolCalls.every(e=>t.has(e.id)))for(let e of s.toolCalls)r.add(e.id);return 0===r.size?e:e.filter(e=>"assistant"===e.role&&e.toolCalls&&e.toolCalls.length>0?e.toolCalls.every(e=>!r.has(e.id)):"tool"!==e.role||!e.toolCallId||!r.has(e.toolCallId))}async *run(e,t,r){let s,i;this.abortController=new AbortController;let a=[];if(this.config.sessionStore){let e=await this.config.sessionStore.get(t),r=(e?.messages??[]).filter(e=>"system"!==e.role),s=r.map(e=>e.name).lastIndexOf("__compaction_checkpoint__");if(s>=0)try{let e=JSON.parse(r[s].content);a=[{role:"user",content:`${eN}
20
- ${e.summary}`},{role:"assistant",content:eS},...e.recentMessages,...r.slice(s+1).filter(e=>"__compaction_checkpoint__"!==e.name)]}catch{a=r.filter(e=>"__compaction_checkpoint__"!==e.name)}else a=r.filter(e=>"__compaction_checkpoint__"!==e.name)}a=this.sanitizeHistory(a);let n=await this.config.memoryStore.generateContext(e),o=await this.config.contextAssembler.assemble({rootDir:this.config.workingDirectory,userMessage:e,history:a,tools:JSON.stringify(this.getFilteredToolDefinitions()),memoryContext:n,skillPrompts:await this.config.skillRegistry.getSkillPrompts(e,this.config.enabledSkills),maxTokens:this.config.maxTokens,systemPrompt:this.config.systemPrompt}),l=o.messages.at(-1),d=l?.role==="user"&&l?.content===e,c={role:"user",content:e,...r&&r.length>0?{images:r}:{}};d?(i=r&&r.length>0?{...o.messages.at(-1),images:r}:o.messages.at(-1),s=[{role:"system",content:o.systemPrompt},...o.messages.slice(0,-1),i]):(i=c,s=[{role:"system",content:o.systemPrompt},...o.messages,i]);let u=this.config.compactThreshold??.6,h=this.config.maxTokens,p="",m=0,f=(await this.config.sessionStore?.get(t))?.messages?.length??0;for(;m<this.config.maxIterations;){if(this.abortController.signal.aborted){yield{type:"turn_aborted"},yield{type:"done",finalText:p||"Aborted"};return}if(m++,yield{type:"thinking",message:`Iteration ${m}...`},this.config.sessionStore)try{let e=await this.config.sessionStore.get(t),r=e?.messages?.length??0;if(r>f){let t=e.messages.slice(f);for(let e of(f=r,t))("__steer__"===e.name||"__mailbox__"===e.name)&&s.push(e)}}catch{}if(s=this.compactor.pruneToolResults(s),await this.compactor.estimateTokens(s)>h*u){yield{type:"thinking",message:"Context approaching limit — compacting…"};let e=await this.compactor.compact(s);if(s=e.messages,e.removedMessages>0&&(yield{type:"compacted",summary:e.summary,removedMessages:e.removedMessages},this.config.sessionStore)){let r=e.messages.filter(e=>"system"!==e.role).slice(2);await this.config.sessionStore.addMessage(t,{role:"user",content:JSON.stringify({summary:e.summary,recentMessages:r}),name:"__compaction_checkpoint__"}).catch(()=>{})}}let e=this.getFilteredToolDefinitions();yield{type:"context_usage",usage:function(e){let t=Object.fromEntries(eL.map(e=>[e,0]));t.systemBase=ex(e.systemSections.systemBase),t.environment=ex(e.systemSections.environment),t.projectContext=ex(e.systemSections.projectContext),t.skills=ex(e.systemSections.skills),t.memory=ex(e.systemSections.memory),t.embeddedTools=ex(e.systemSections.embeddedTools);let r=Object.values(e.systemSections).filter(Boolean).length;t.messageOverhead+=ex(`
18
+ `),s="";for await(let e of this.modelProvider.streamChat([{role:"system",content:eD},{role:"user",content:r}],{maxTokens:4096,reasoningEffort:"off"}))"text_chunk"===e.type&&(s+=e.text);s=s.trim();let i=this.collectRecentUserMessages(t),a=[...i,{role:"user",content:`${eU}
19
+ ${s}`}];return{replacementMessages:a,summary:s,recentMessages:i,removedMessages:Math.max(0,t.length-a.length)}}async estimateTokens(e){try{return await this.modelProvider.countTokens(e)}catch{return Math.ceil(e.reduce((e,t)=>e+t.content.length,0)/4)}}collectRecentUserMessages(e){let t=[],r=0;for(let s=e.length-1;s>=0;s--){let i=e[s];if("user"!==i.role||this.isSummaryMessage(i))continue;let a=Math.ceil(i.content.length/4),n=2e4-r;if(n<=0)break;if(a<=n){t.push(i),r+=a;continue}t.push({...i,content:i.content.slice(-(4*n))});break}return t.reverse()}isSummaryMessage(e){return"user"===e.role&&e.content.startsWith(eU)}}var eF=["systemBase","environment","projectContext","skills","memory","embeddedTools","conversationHistory","currentUserMessage","assistantMessages","toolCalls","toolResults","images","compactionSummary","nativeToolDefinitions","messageOverhead"];function eM(e){return Math.ceil(e.length/4)}class e${constructor(e){this.abortController=null,this.config=e,this.compactor=new eP(e.modelProvider),this.initialToolNames=new Set(e.toolRegistry.getAll().map(e=>e.name))}sanitizeHistory(e){let t=new Set;for(let r of e)"tool"===r.role&&r.toolCallId&&t.add(r.toolCallId);let r=new Set;for(let s of e)if("assistant"===s.role&&s.toolCalls&&s.toolCalls.length>0&&!s.toolCalls.every(e=>t.has(e.id)))for(let e of s.toolCalls)r.add(e.id);return 0===r.size?e:e.filter(e=>"assistant"===e.role&&e.toolCalls&&e.toolCalls.length>0?e.toolCalls.every(e=>!r.has(e.id)):"tool"!==e.role||!e.toolCallId||!r.has(e.toolCallId))}async *run(e,t,r){let s,i;this.abortController=new AbortController;let a=[];if(this.config.sessionStore){let e=await this.config.sessionStore.get(t),r=(e?.messages??[]).filter(e=>"system"!==e.role),s=r.map(e=>e.name).lastIndexOf("__compaction_checkpoint__");if(s>=0)try{let e=JSON.parse(r[s].content);a=[{role:"user",content:`${eU}
20
+ ${e.summary}`},{role:"assistant",content:ej},...e.recentMessages,...r.slice(s+1).filter(e=>"__compaction_checkpoint__"!==e.name)]}catch{a=r.filter(e=>"__compaction_checkpoint__"!==e.name)}else a=r.filter(e=>"__compaction_checkpoint__"!==e.name)}a=this.sanitizeHistory(a);let n=await this.config.memoryStore.generateContext(e),o=await this.config.contextAssembler.assemble({rootDir:this.config.workingDirectory,userMessage:e,history:a,tools:JSON.stringify(this.getFilteredToolDefinitions()),memoryContext:n,skillPrompts:await this.config.skillRegistry.getSkillPrompts(e,this.config.enabledSkills),maxTokens:this.config.maxTokens,systemPrompt:this.config.systemPrompt}),l=o.messages.at(-1),d=l?.role==="user"&&l?.content===e,c={role:"user",content:e,...r&&r.length>0?{images:r}:{}};d?(i=r&&r.length>0?{...o.messages.at(-1),images:r}:o.messages.at(-1),s=[{role:"system",content:o.systemPrompt},...o.messages.slice(0,-1),i]):(i=c,s=[{role:"system",content:o.systemPrompt},...o.messages,i]);let u=this.config.compactThreshold??.6,h=this.config.maxTokens,p="",m=0,f=(await this.config.sessionStore?.get(t))?.messages?.length??0;for(;m<this.config.maxIterations;){if(this.abortController.signal.aborted){yield{type:"turn_aborted"},yield{type:"done",finalText:p||"Aborted"};return}if(m++,yield{type:"thinking",message:`Iteration ${m}...`},this.config.sessionStore)try{let e=await this.config.sessionStore.get(t),r=e?.messages?.length??0;if(r>f){let t=e.messages.slice(f);for(let e of(f=r,t))("__steer__"===e.name||"__mailbox__"===e.name)&&s.push(e)}}catch{}if(s=this.compactor.pruneToolResults(s),await this.compactor.estimateTokens(s)>h*u){yield{type:"thinking",message:"Context approaching limit — compacting…"};let e=await this.compactor.compact(s);if(s=e.messages,e.removedMessages>0&&(yield{type:"compacted",summary:e.summary,removedMessages:e.removedMessages},this.config.sessionStore)){let r=e.messages.filter(e=>"system"!==e.role).slice(2);await this.config.sessionStore.addMessage(t,{role:"user",content:JSON.stringify({summary:e.summary,recentMessages:r}),name:"__compaction_checkpoint__"}).catch(()=>{})}}let e=this.getFilteredToolDefinitions();yield{type:"context_usage",usage:function(e){let t=Object.fromEntries(eF.map(e=>[e,0]));t.systemBase=eM(e.systemSections.systemBase),t.environment=eM(e.systemSections.environment),t.projectContext=eM(e.systemSections.projectContext),t.skills=eM(e.systemSections.skills),t.memory=eM(e.systemSections.memory),t.embeddedTools=eM(e.systemSections.embeddedTools);let r=Object.values(e.systemSections).filter(Boolean).length;t.messageOverhead+=eM(`
21
21
 
22
- `.repeat(Math.max(0,r-1)));let s=function(e,t){let r=e.indexOf(t);if(r>=0)return r;for(let r=e.length-1;r>=0;r--){let s=e[r];if("user"===s.role&&s.content===t.content)return r}return -1}(e.messages,e.currentUserMessage),i=function(e){let t=new Set;for(let r=0;r<e.length;r++){let s=e[r];"user"===s.role&&s.content.startsWith(eN)&&(t.add(r),e[r+1]?.role==="assistant"&&e[r+1]?.content===eS&&t.add(r+1))}return t}(e.messages);e.messages.forEach((e,r)=>{if(t.messageOverhead+=4,t.images+=(e.images?.length??0)*1e3,"system"!==e.role){if(i.has(r)){t.compactionSummary+=ex(e.content);return}if("user"===e.role){let i=r===s?"currentUserMessage":"conversationHistory";t[i]+=ex(e.content);return}if("assistant"===e.role){for(let r of(t.assistantMessages+=ex(e.content),e.toolCalls??[]))t.toolCalls+=ex(JSON.stringify(r));return}t.toolResults+=ex(JSON.stringify({toolCallId:e.toolCallId,name:e.name,content:e.content}))}}),e.nativeToolDefinitions.length>0&&(t.nativeToolDefinitions=ex(JSON.stringify(e.nativeToolDefinitions)),t.messageOverhead+=4*e.nativeToolDefinitions.length);let a=eL.map(e=>({category:e,tokens:t[e]})),n=a.reduce((e,t)=>e+t.tokens,0),o=Math.max(1,e.maxTokens);return{requestIndex:e.requestIndex,providerId:e.providerId,modelId:e.modelId,maxTokens:o,totalTokens:n,ratio:Math.min(n/o,1),estimationMode:"heuristic",segments:a}}({requestIndex:m,providerId:this.config.modelProvider.providerId,modelId:this.config.modelProvider.modelId,maxTokens:h,messages:s,currentUserMessage:i,nativeToolDefinitions:e,systemSections:o.systemSections})};let r=[],a=!1,n=this.config.streamMaxRetries??0,l=0,d=0,c=0,g=e=>new Promise(t=>{if(this.abortController?.signal.aborted){t(!1);return}let r=setTimeout(()=>{this.abortController?.signal.removeEventListener("abort",s),t(!0)},e),s=()=>{clearTimeout(r),t(!1)};this.abortController?.signal.addEventListener("abort",s,{once:!0})});for(;;){if(c>0){yield{type:"thinking",message:`Retrying (${c})…`};let e=Math.min(1e3*Math.pow(2,c-1)+500*Math.random(),1e4);if(!await g(e)){yield{type:"turn_aborted"};return}}let t=!1,i=!1,o=!1;try{for await(let n of this.config.modelProvider.streamChat(s,{tools:e.length>0?e:void 0,reasoningEffort:this.config.reasoningEffort})){if(this.abortController?.signal.aborted)break;switch(n.type){case"text_chunk":i=i||n.text.length>0,p+=n.text,yield{type:"text_chunk",text:n.text};break;case"tool_call":i=!0,r.push(n.toolCall),yield{type:"tool_call",toolCall:n.toolCall};break;case"text_done":o=!0;break;case"error":i=!0,t=!0,a=!0,yield{type:"error",message:n.message,code:"strea-err"}}}if(!i&&!this.abortController?.signal.aborted){if(0===d){d++,c++;continue}a=!0,yield{type:"error",message:"Model stream ended without producing a response after retry"}}if(t||a)break;o&&(yield{type:"text_done"});break}catch(r){if(this.abortController?.signal.aborted){yield{type:"turn_aborted"};return}let e=r instanceof Error?r.message:String(r),t=/timeout|rate\s*limit|5\d{2}|econnrefused|econnreset|network|temporary|too many|retry/i.test(e);if(i||!t||l>=n){yield{type:"error",message:e},a=!0;break}l++,c++}}if(0===r.length||a){yield{type:"done",finalText:p};return}let y={role:"assistant",content:p,toolCalls:r};s.push(y);let _=[],T=await Promise.allSettled(r.map(async e=>{let r={workingDirectory:this.config.workingDirectory,sessionId:t,signal:this.abortController.signal},s=await Promise.race([this.config.toolExecutor.execute(e.name,e.arguments,r),new Promise((e,t)=>{if(this.abortController.signal.aborted){t(Error("turn_aborted"));return}this.abortController.signal.addEventListener("abort",()=>t(Error("turn_aborted")),{once:!0})})]);return s.toolCallId=e.id,s})),E=!1;for(let e=0;e<T.length;e++){let t;let i=T[e],a=r[e];if("fulfilled"===i.status)t=i.value;else{let e=i.reason?.message==="turn_aborted"?"turn_aborted":i.reason?.message??"Tool execution failed";if("turn_aborted"===e){E=!0;break}t={toolCallId:a.id,content:`Error: ${e}`,isError:!0}}_.push(t);let n=t.metadata?.showWidget;n&&(yield{type:"show_widget",widgetId:n.widgetId,widgetType:n.widgetType,data:n.data}),yield{type:"tool_result",result:t},s.push({role:"tool",content:t.content,toolCallId:t.toolCallId,name:a.name})}if(E){yield{type:"turn_aborted"},yield{type:"done",finalText:p||"Aborted"};return}if(await this.compactor.estimateTokens(s)>h*u){yield{type:"thinking",message:"Context growing after tool results — compacting…"};let e=await this.compactor.compact(s);if(s=e.messages,e.removedMessages>0&&(yield{type:"compacted",summary:e.summary,removedMessages:e.removedMessages},this.config.sessionStore)){let r=e.messages.filter(e=>"system"!==e.role).slice(2);await this.config.sessionStore.addMessage(t,{role:"user",content:JSON.stringify({summary:e.summary,recentMessages:r}),name:"__compaction_checkpoint__"}).catch(()=>{})}}p=""}yield{type:"done",finalText:p||`Reached max iterations (${this.config.maxIterations})`}}abort(){this.abortController?.abort()}getFilteredToolDefinitions(){let e=this.config.toolRegistry.getDefinitions();if(!this.config.enabledTools)return e;let t=new Set(this.config.enabledTools);return e.filter(e=>t.has(e.name)||!this.initialToolNames.has(e.name))}}class eO{create(e){return new eI(e)}}class eA{register(e){this.tools.set(e.name,e)}unregister(e){this.tools.delete(e)}get(e){return this.tools.get(e)}getAll(){return Array.from(this.tools.values())}getDefinitions(){return this.getAll().map(e=>({name:e.name,description:e.description,parameters:e.parameters}))}async execute(e,t,r){let s=this.tools.get(e);return s?s.execute(t,r):{toolCallId:"",content:`Unknown tool: ${e}`,isError:!0}}validate(e,t){let r=this.tools.get(e);return!!r&&r.schema.safeParse(t).success}constructor(){this.tools=new Map}}var eR={};((e,t)=>{for(var r in t)T(e,r,{get:t[r],enumerable:!0,configurable:!0,set:v.bind(t,r)})})(eR,{void:()=>rr,util:()=>s,unknown:()=>re,union:()=>rn,undefined:()=>t6,tuple:()=>rd,transformer:()=>rT,symbol:()=>t5,string:()=>t0,strictObject:()=>ra,setErrorMap:()=>e$,set:()=>rh,record:()=>rc,quotelessJson:()=>ej,promise:()=>r_,preprocess:()=>rb,pipeline:()=>rw,ostring:()=>rN,optional:()=>rE,onumber:()=>rS,oboolean:()=>rk,objectUtil:()=>i,object:()=>ri,number:()=>t1,nullable:()=>rv,null:()=>t8,never:()=>rt,nativeEnum:()=>ry,nan:()=>t4,map:()=>ru,makeIssue:()=>eZ,literal:()=>rf,lazy:()=>rm,late:()=>tV,isValid:()=>eG,isDirty:()=>eY,isAsync:()=>eV,isAborted:()=>eK,intersection:()=>rl,instanceof:()=>tQ,getParsedType:()=>eD,getErrorMap:()=>eX,function:()=>rp,enum:()=>rg,effect:()=>rT,discriminatedUnion:()=>ro,defaultErrorMap:()=>eF,datetimeRegex:()=>tc,date:()=>t3,custom:()=>tG,coerce:()=>rL,boolean:()=>t9,bigint:()=>t2,array:()=>rs,any:()=>t7,addIssueToContext:()=>eW,ZodVoid:()=>tb,ZodUnknown:()=>tE,ZodUnion:()=>tS,ZodUndefined:()=>ty,ZodType:()=>e4,ZodTuple:()=>tI,ZodTransformer:()=>t$,ZodSymbol:()=>tg,ZodString:()=>tu,ZodSet:()=>tR,ZodSchema:()=>e4,ZodRecord:()=>tO,ZodReadonly:()=>tK,ZodPromise:()=>tM,ZodPipeline:()=>tz,ZodParsedType:()=>eC,ZodOptional:()=>tX,ZodObject:()=>tN,ZodNumber:()=>th,ZodNullable:()=>tZ,ZodNull:()=>t_,ZodNever:()=>tv,ZodNativeEnum:()=>tF,ZodNaN:()=>tB,ZodMap:()=>tA,ZodLiteral:()=>tU,ZodLazy:()=>tD,ZodIssueCode:()=>eU,ZodIntersection:()=>tx,ZodFunction:()=>tC,ZodFirstPartyTypeKind:()=>o,ZodError:()=>eP,ZodEnum:()=>tP,ZodEffects:()=>t$,ZodDiscriminatedUnion:()=>tL,ZodDefault:()=>tq,ZodDate:()=>tf,ZodCatch:()=>tW,ZodBranded:()=>tJ,ZodBoolean:()=>tm,ZodBigInt:()=>tp,ZodArray:()=>tw,ZodAny:()=>tT,Schema:()=>e4,ParseStatus:()=>eB,OK:()=>ez,NEVER:()=>rx,INVALID:()=>eH,EMPTY_PATH:()=>eq,DIRTY:()=>eJ,BRAND:()=>tH}),function(e){e.assertEqual=e=>{},e.assertIs=function(e){},e.assertNever=function(e){throw Error()},e.arrayToEnum=e=>{let t={};for(let r of e)t[r]=r;return t},e.getValidEnumValues=t=>{let r=e.objectKeys(t).filter(e=>"number"!=typeof t[t[e]]),s={};for(let e of r)s[e]=t[e];return e.objectValues(s)},e.objectValues=t=>e.objectKeys(t).map(function(e){return t[e]}),e.objectKeys="function"==typeof Object.keys?e=>Object.keys(e):e=>{let t=[];for(let r in e)Object.prototype.hasOwnProperty.call(e,r)&&t.push(r);return t},e.find=(e,t)=>{for(let r of e)if(t(r))return r},e.isInteger="function"==typeof Number.isInteger?e=>Number.isInteger(e):e=>"number"==typeof e&&Number.isFinite(e)&&Math.floor(e)===e,e.joinValues=function(e,t=" | "){return e.map(e=>"string"==typeof e?`'${e}'`:e).join(t)},e.jsonStringifyReplacer=(e,t)=>"bigint"==typeof t?t.toString():t}(s||(s={})),(i||(i={})).mergeShapes=(e,t)=>({...e,...t});var eC=s.arrayToEnum(["string","nan","number","integer","float","boolean","date","bigint","symbol","function","undefined","null","array","object","unknown","promise","void","never","map","set"]),eD=e=>{switch(typeof e){case"undefined":return eC.undefined;case"string":return eC.string;case"number":return Number.isNaN(e)?eC.nan:eC.number;case"boolean":return eC.boolean;case"function":return eC.function;case"bigint":return eC.bigint;case"symbol":return eC.symbol;case"object":if(Array.isArray(e))return eC.array;if(null===e)return eC.null;if(e.then&&"function"==typeof e.then&&e.catch&&"function"==typeof e.catch)return eC.promise;if("undefined"!=typeof Map&&e instanceof Map)return eC.map;if("undefined"!=typeof Set&&e instanceof Set)return eC.set;if("undefined"!=typeof Date&&e instanceof Date)return eC.date;return eC.object;default:return eC.unknown}},eU=s.arrayToEnum(["invalid_type","invalid_literal","custom","invalid_union","invalid_union_discriminator","invalid_enum_value","unrecognized_keys","invalid_arguments","invalid_return_type","invalid_date","invalid_string","too_small","too_big","invalid_intersection_types","not_multiple_of","not_finite"]),ej=e=>JSON.stringify(e,null,2).replace(/"([^"]+)":/g,"$1:");class eP extends Error{get errors(){return this.issues}constructor(e){super(),this.issues=[],this.addIssue=e=>{this.issues=[...this.issues,e]},this.addIssues=(e=[])=>{this.issues=[...this.issues,...e]};let t=new.target.prototype;Object.setPrototypeOf?Object.setPrototypeOf(this,t):this.__proto__=t,this.name="ZodError",this.issues=e}format(e){let t=e||function(e){return e.message},r={_errors:[]},s=e=>{for(let i of e.issues)if("invalid_union"===i.code)i.unionErrors.map(s);else if("invalid_return_type"===i.code)s(i.returnTypeError);else if("invalid_arguments"===i.code)s(i.argumentsError);else if(0===i.path.length)r._errors.push(t(i));else{let e=r,s=0;for(;s<i.path.length;){let r=i.path[s];s===i.path.length-1?(e[r]=e[r]||{_errors:[]},e[r]._errors.push(t(i))):e[r]=e[r]||{_errors:[]},e=e[r],s++}}};return s(this),r}static assert(e){if(!(e instanceof eP))throw Error(`Not a ZodError: ${e}`)}toString(){return this.message}get message(){return JSON.stringify(this.issues,s.jsonStringifyReplacer,2)}get isEmpty(){return 0===this.issues.length}flatten(e=e=>e.message){let t={},r=[];for(let s of this.issues)if(s.path.length>0){let r=s.path[0];t[r]=t[r]||[],t[r].push(e(s))}else r.push(e(s));return{formErrors:r,fieldErrors:t}}get formErrors(){return this.flatten()}}eP.create=e=>new eP(e);var eF=(e,t)=>{let r;switch(e.code){case eU.invalid_type:r=e.received===eC.undefined?"Required":`Expected ${e.expected}, received ${e.received}`;break;case eU.invalid_literal:r=`Invalid literal value, expected ${JSON.stringify(e.expected,s.jsonStringifyReplacer)}`;break;case eU.unrecognized_keys:r=`Unrecognized key(s) in object: ${s.joinValues(e.keys,", ")}`;break;case eU.invalid_union:r="Invalid input";break;case eU.invalid_union_discriminator:r=`Invalid discriminator value. Expected ${s.joinValues(e.options)}`;break;case eU.invalid_enum_value:r=`Invalid enum value. Expected ${s.joinValues(e.options)}, received '${e.received}'`;break;case eU.invalid_arguments:r="Invalid function arguments";break;case eU.invalid_return_type:r="Invalid function return type";break;case eU.invalid_date:r="Invalid date";break;case eU.invalid_string:"object"==typeof e.validation?"includes"in e.validation?(r=`Invalid input: must include "${e.validation.includes}"`,"number"==typeof e.validation.position&&(r=`${r} at one or more positions greater than or equal to ${e.validation.position}`)):"startsWith"in e.validation?r=`Invalid input: must start with "${e.validation.startsWith}"`:"endsWith"in e.validation?r=`Invalid input: must end with "${e.validation.endsWith}"`:s.assertNever(e.validation):r="regex"!==e.validation?`Invalid ${e.validation}`:"Invalid";break;case eU.too_small:r="array"===e.type?`Array must contain ${e.exact?"exactly":e.inclusive?"at least":"more than"} ${e.minimum} element(s)`:"string"===e.type?`String must contain ${e.exact?"exactly":e.inclusive?"at least":"over"} ${e.minimum} character(s)`:"number"===e.type?`Number must be ${e.exact?"exactly equal to ":e.inclusive?"greater than or equal to ":"greater than "}${e.minimum}`:"bigint"===e.type?`Number must be ${e.exact?"exactly equal to ":e.inclusive?"greater than or equal to ":"greater than "}${e.minimum}`:"date"===e.type?`Date must be ${e.exact?"exactly equal to ":e.inclusive?"greater than or equal to ":"greater than "}${new Date(Number(e.minimum))}`:"Invalid input";break;case eU.too_big:r="array"===e.type?`Array must contain ${e.exact?"exactly":e.inclusive?"at most":"less than"} ${e.maximum} element(s)`:"string"===e.type?`String must contain ${e.exact?"exactly":e.inclusive?"at most":"under"} ${e.maximum} character(s)`:"number"===e.type?`Number must be ${e.exact?"exactly":e.inclusive?"less than or equal to":"less than"} ${e.maximum}`:"bigint"===e.type?`BigInt must be ${e.exact?"exactly":e.inclusive?"less than or equal to":"less than"} ${e.maximum}`:"date"===e.type?`Date must be ${e.exact?"exactly":e.inclusive?"smaller than or equal to":"smaller than"} ${new Date(Number(e.maximum))}`:"Invalid input";break;case eU.custom:r="Invalid input";break;case eU.invalid_intersection_types:r="Intersection results could not be merged";break;case eU.not_multiple_of:r=`Number must be a multiple of ${e.multipleOf}`;break;case eU.not_finite:r="Number must be finite";break;default:r=t.defaultError,s.assertNever(e)}return{message:r}},eM=eF;function e$(e){eM=e}function eX(){return eM}var eZ=e=>{let{data:t,path:r,errorMaps:s,issueData:i}=e,a=[...r,...i.path||[]],n={...i,path:a};if(void 0!==i.message)return{...i,path:a,message:i.message};let o="";for(let e of s.filter(e=>!!e).slice().reverse())o=e(n,{data:t,defaultError:o}).message;return{...i,path:a,message:o}},eq=[];function eW(e,t){let r=eM,s=eZ({issueData:t,data:e.data,path:e.path,errorMaps:[e.common.contextualErrorMap,e.schemaErrorMap,r,r===eF?void 0:eF].filter(e=>!!e)});e.common.issues.push(s)}class eB{constructor(){this.value="valid"}dirty(){"valid"===this.value&&(this.value="dirty")}abort(){"aborted"!==this.value&&(this.value="aborted")}static mergeArray(e,t){let r=[];for(let s of t){if("aborted"===s.status)return eH;"dirty"===s.status&&e.dirty(),r.push(s.value)}return{status:e.value,value:r}}static async mergeObjectAsync(e,t){let r=[];for(let e of t){let t=await e.key,s=await e.value;r.push({key:t,value:s})}return eB.mergeObjectSync(e,r)}static mergeObjectSync(e,t){let r={};for(let s of t){let{key:t,value:i}=s;if("aborted"===t.status||"aborted"===i.status)return eH;"dirty"===t.status&&e.dirty(),"dirty"===i.status&&e.dirty(),"__proto__"!==t.value&&(void 0!==i.value||s.alwaysSet)&&(r[t.value]=i.value)}return{status:e.value,value:r}}}var eH=Object.freeze({status:"aborted"}),eJ=e=>({status:"dirty",value:e}),ez=e=>({status:"valid",value:e}),eK=e=>"aborted"===e.status,eY=e=>"dirty"===e.status,eG=e=>"valid"===e.status,eV=e=>"undefined"!=typeof Promise&&e instanceof Promise;!function(e){e.errToObj=e=>"string"==typeof e?{message:e}:e||{},e.toString=e=>"string"==typeof e?e:e?.message}(a||(a={}));class eQ{constructor(e,t,r,s){this._cachedPath=[],this.parent=e,this.data=t,this._path=r,this._key=s}get path(){return this._cachedPath.length||(Array.isArray(this._key)?this._cachedPath.push(...this._path,...this._key):this._cachedPath.push(...this._path,this._key)),this._cachedPath}}var e0=(e,t)=>{if(eG(t))return{success:!0,data:t.value};if(!e.common.issues.length)throw Error("Validation failed but no issues detected.");return{success:!1,get error(){if(this._error)return this._error;let t=new eP(e.common.issues);return this._error=t,this._error}}};function e1(e){if(!e)return{};let{errorMap:t,invalid_type_error:r,required_error:s,description:i}=e;if(t&&(r||s))throw Error('Can\'t use "invalid_type_error" or "required_error" in conjunction with custom error map.');return t?{errorMap:t,description:i}:{errorMap:(t,i)=>{let{message:a}=e;return"invalid_enum_value"===t.code?{message:a??i.defaultError}:void 0===i.data?{message:a??s??i.defaultError}:"invalid_type"!==t.code?{message:i.defaultError}:{message:a??r??i.defaultError}},description:i}}class e4{get description(){return this._def.description}_getType(e){return eD(e.data)}_getOrReturnCtx(e,t){return t||{common:e.parent.common,data:e.data,parsedType:eD(e.data),schemaErrorMap:this._def.errorMap,path:e.path,parent:e.parent}}_processInputParams(e){return{status:new eB,ctx:{common:e.parent.common,data:e.data,parsedType:eD(e.data),schemaErrorMap:this._def.errorMap,path:e.path,parent:e.parent}}}_parseSync(e){let t=this._parse(e);if(eV(t))throw Error("Synchronous parse encountered promise.");return t}_parseAsync(e){return Promise.resolve(this._parse(e))}parse(e,t){let r=this.safeParse(e,t);if(r.success)return r.data;throw r.error}safeParse(e,t){let r={common:{issues:[],async:t?.async??!1,contextualErrorMap:t?.errorMap},path:t?.path||[],schemaErrorMap:this._def.errorMap,parent:null,data:e,parsedType:eD(e)},s=this._parseSync({data:e,path:r.path,parent:r});return e0(r,s)}"~validate"(e){let t={common:{issues:[],async:!!this["~standard"].async},path:[],schemaErrorMap:this._def.errorMap,parent:null,data:e,parsedType:eD(e)};if(!this["~standard"].async)try{let r=this._parseSync({data:e,path:[],parent:t});return eG(r)?{value:r.value}:{issues:t.common.issues}}catch(e){e?.message?.toLowerCase()?.includes("encountered")&&(this["~standard"].async=!0),t.common={issues:[],async:!0}}return this._parseAsync({data:e,path:[],parent:t}).then(e=>eG(e)?{value:e.value}:{issues:t.common.issues})}async parseAsync(e,t){let r=await this.safeParseAsync(e,t);if(r.success)return r.data;throw r.error}async safeParseAsync(e,t){let r={common:{issues:[],contextualErrorMap:t?.errorMap,async:!0},path:t?.path||[],schemaErrorMap:this._def.errorMap,parent:null,data:e,parsedType:eD(e)},s=this._parse({data:e,path:r.path,parent:r});return e0(r,await (eV(s)?s:Promise.resolve(s)))}refine(e,t){let r=e=>"string"==typeof t||void 0===t?{message:t}:"function"==typeof t?t(e):t;return this._refinement((t,s)=>{let i=e(t),a=()=>s.addIssue({code:eU.custom,...r(t)});return"undefined"!=typeof Promise&&i instanceof Promise?i.then(e=>!!e||(a(),!1)):!!i||(a(),!1)})}refinement(e,t){return this._refinement((r,s)=>!!e(r)||(s.addIssue("function"==typeof t?t(r,s):t),!1))}_refinement(e){return new t$({schema:this,typeName:o.ZodEffects,effect:{type:"refinement",refinement:e}})}superRefine(e){return this._refinement(e)}constructor(e){this.spa=this.safeParseAsync,this._def=e,this.parse=this.parse.bind(this),this.safeParse=this.safeParse.bind(this),this.parseAsync=this.parseAsync.bind(this),this.safeParseAsync=this.safeParseAsync.bind(this),this.spa=this.spa.bind(this),this.refine=this.refine.bind(this),this.refinement=this.refinement.bind(this),this.superRefine=this.superRefine.bind(this),this.optional=this.optional.bind(this),this.nullable=this.nullable.bind(this),this.nullish=this.nullish.bind(this),this.array=this.array.bind(this),this.promise=this.promise.bind(this),this.or=this.or.bind(this),this.and=this.and.bind(this),this.transform=this.transform.bind(this),this.brand=this.brand.bind(this),this.default=this.default.bind(this),this.catch=this.catch.bind(this),this.describe=this.describe.bind(this),this.pipe=this.pipe.bind(this),this.readonly=this.readonly.bind(this),this.isNullable=this.isNullable.bind(this),this.isOptional=this.isOptional.bind(this),this["~standard"]={version:1,vendor:"zod",validate:e=>this["~validate"](e)}}optional(){return tX.create(this,this._def)}nullable(){return tZ.create(this,this._def)}nullish(){return this.nullable().optional()}array(){return tw.create(this)}promise(){return tM.create(this,this._def)}or(e){return tS.create([this,e],this._def)}and(e){return tx.create(this,e,this._def)}transform(e){return new t$({...e1(this._def),schema:this,typeName:o.ZodEffects,effect:{type:"transform",transform:e}})}default(e){return new tq({...e1(this._def),innerType:this,defaultValue:"function"==typeof e?e:()=>e,typeName:o.ZodDefault})}brand(){return new tJ({typeName:o.ZodBranded,type:this,...e1(this._def)})}catch(e){return new tW({...e1(this._def),innerType:this,catchValue:"function"==typeof e?e:()=>e,typeName:o.ZodCatch})}describe(e){return new this.constructor({...this._def,description:e})}pipe(e){return tz.create(this,e)}readonly(){return tK.create(this)}isOptional(){return this.safeParse(void 0).success}isNullable(){return this.safeParse(null).success}}var e2=/^c[^\s-]{8,}$/i,e9=/^[0-9a-z]+$/,e3=/^[0-9A-HJKMNP-TV-Z]{26}$/i,e5=/^[0-9a-fA-F]{8}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{12}$/i,e6=/^[a-z0-9_-]{21}$/i,e8=/^[A-Za-z0-9-_]+\.[A-Za-z0-9-_]+\.[A-Za-z0-9-_]*$/,e7=/^[-+]?P(?!$)(?:(?:[-+]?\d+Y)|(?:[-+]?\d+[.,]\d+Y$))?(?:(?:[-+]?\d+M)|(?:[-+]?\d+[.,]\d+M$))?(?:(?:[-+]?\d+W)|(?:[-+]?\d+[.,]\d+W$))?(?:(?:[-+]?\d+D)|(?:[-+]?\d+[.,]\d+D$))?(?:T(?=[\d+-])(?:(?:[-+]?\d+H)|(?:[-+]?\d+[.,]\d+H$))?(?:(?:[-+]?\d+M)|(?:[-+]?\d+[.,]\d+M$))?(?:[-+]?\d+(?:[.,]\d+)?S)?)??$/,te=/^(?!\.)(?!.*\.\.)([A-Z0-9_'+\-\.]*)[A-Z0-9_+-]@([A-Z0-9][A-Z0-9\-]*\.)+[A-Z]{2,}$/i,tt=/^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])$/,tr=/^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\/(3[0-2]|[12]?[0-9])$/,ts=/^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))$/,ti=/^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))\/(12[0-8]|1[01][0-9]|[1-9]?[0-9])$/,ta=/^([0-9a-zA-Z+/]{4})*(([0-9a-zA-Z+/]{2}==)|([0-9a-zA-Z+/]{3}=))?$/,tn=/^([0-9a-zA-Z-_]{4})*(([0-9a-zA-Z-_]{2}(==)?)|([0-9a-zA-Z-_]{3}(=)?))?$/,to="((\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-((0[13578]|1[02])-(0[1-9]|[12]\\d|3[01])|(0[469]|11)-(0[1-9]|[12]\\d|30)|(02)-(0[1-9]|1\\d|2[0-8])))",tl=RegExp(`^${to}$`);function td(e){let t="[0-5]\\d";e.precision?t=`${t}\\.\\d{${e.precision}}`:null==e.precision&&(t=`${t}(\\.\\d+)?`);let r=e.precision?"+":"?";return`([01]\\d|2[0-3]):[0-5]\\d(:${t})${r}`}function tc(e){let t=`${to}T${td(e)}`,r=[];return r.push(e.local?"Z?":"Z"),e.offset&&r.push("([+-]\\d{2}:?\\d{2})"),t=`${t}(${r.join("|")})`,RegExp(`^${t}$`)}class tu extends e4{_parse(e){var t,r,i,a;let o;if(this._def.coerce&&(e.data=String(e.data)),this._getType(e)!==eC.string){let t=this._getOrReturnCtx(e);return eW(t,{code:eU.invalid_type,expected:eC.string,received:t.parsedType}),eH}let l=new eB;for(let d of this._def.checks)if("min"===d.kind)e.data.length<d.value&&(eW(o=this._getOrReturnCtx(e,o),{code:eU.too_small,minimum:d.value,type:"string",inclusive:!0,exact:!1,message:d.message}),l.dirty());else if("max"===d.kind)e.data.length>d.value&&(eW(o=this._getOrReturnCtx(e,o),{code:eU.too_big,maximum:d.value,type:"string",inclusive:!0,exact:!1,message:d.message}),l.dirty());else if("length"===d.kind){let t=e.data.length>d.value,r=e.data.length<d.value;(t||r)&&(o=this._getOrReturnCtx(e,o),t?eW(o,{code:eU.too_big,maximum:d.value,type:"string",inclusive:!0,exact:!0,message:d.message}):r&&eW(o,{code:eU.too_small,minimum:d.value,type:"string",inclusive:!0,exact:!0,message:d.message}),l.dirty())}else if("email"===d.kind)te.test(e.data)||(eW(o=this._getOrReturnCtx(e,o),{validation:"email",code:eU.invalid_string,message:d.message}),l.dirty());else if("emoji"===d.kind)n||(n=RegExp("^(\\p{Extended_Pictographic}|\\p{Emoji_Component})+$","u")),n.test(e.data)||(eW(o=this._getOrReturnCtx(e,o),{validation:"emoji",code:eU.invalid_string,message:d.message}),l.dirty());else if("uuid"===d.kind)e5.test(e.data)||(eW(o=this._getOrReturnCtx(e,o),{validation:"uuid",code:eU.invalid_string,message:d.message}),l.dirty());else if("nanoid"===d.kind)e6.test(e.data)||(eW(o=this._getOrReturnCtx(e,o),{validation:"nanoid",code:eU.invalid_string,message:d.message}),l.dirty());else if("cuid"===d.kind)e2.test(e.data)||(eW(o=this._getOrReturnCtx(e,o),{validation:"cuid",code:eU.invalid_string,message:d.message}),l.dirty());else if("cuid2"===d.kind)e9.test(e.data)||(eW(o=this._getOrReturnCtx(e,o),{validation:"cuid2",code:eU.invalid_string,message:d.message}),l.dirty());else if("ulid"===d.kind)e3.test(e.data)||(eW(o=this._getOrReturnCtx(e,o),{validation:"ulid",code:eU.invalid_string,message:d.message}),l.dirty());else if("url"===d.kind)try{new URL(e.data)}catch{eW(o=this._getOrReturnCtx(e,o),{validation:"url",code:eU.invalid_string,message:d.message}),l.dirty()}else"regex"===d.kind?(d.regex.lastIndex=0,d.regex.test(e.data)||(eW(o=this._getOrReturnCtx(e,o),{validation:"regex",code:eU.invalid_string,message:d.message}),l.dirty())):"trim"===d.kind?e.data=e.data.trim():"includes"===d.kind?e.data.includes(d.value,d.position)||(eW(o=this._getOrReturnCtx(e,o),{code:eU.invalid_string,validation:{includes:d.value,position:d.position},message:d.message}),l.dirty()):"toLowerCase"===d.kind?e.data=e.data.toLowerCase():"toUpperCase"===d.kind?e.data=e.data.toUpperCase():"startsWith"===d.kind?e.data.startsWith(d.value)||(eW(o=this._getOrReturnCtx(e,o),{code:eU.invalid_string,validation:{startsWith:d.value},message:d.message}),l.dirty()):"endsWith"===d.kind?e.data.endsWith(d.value)||(eW(o=this._getOrReturnCtx(e,o),{code:eU.invalid_string,validation:{endsWith:d.value},message:d.message}),l.dirty()):"datetime"===d.kind?tc(d).test(e.data)||(eW(o=this._getOrReturnCtx(e,o),{code:eU.invalid_string,validation:"datetime",message:d.message}),l.dirty()):"date"===d.kind?tl.test(e.data)||(eW(o=this._getOrReturnCtx(e,o),{code:eU.invalid_string,validation:"date",message:d.message}),l.dirty()):"time"===d.kind?RegExp(`^${td(d)}$`).test(e.data)||(eW(o=this._getOrReturnCtx(e,o),{code:eU.invalid_string,validation:"time",message:d.message}),l.dirty()):"duration"===d.kind?e7.test(e.data)||(eW(o=this._getOrReturnCtx(e,o),{validation:"duration",code:eU.invalid_string,message:d.message}),l.dirty()):"ip"===d.kind?(t=e.data,("v4"===(r=d.version)||!r)&&tt.test(t)||("v6"===r||!r)&&ts.test(t)||(eW(o=this._getOrReturnCtx(e,o),{validation:"ip",code:eU.invalid_string,message:d.message}),l.dirty())):"jwt"===d.kind?!function(e,t){if(!e8.test(e))return!1;try{let[r]=e.split(".");if(!r)return!1;let s=r.replace(/-/g,"+").replace(/_/g,"/").padEnd(r.length+(4-r.length%4)%4,"="),i=JSON.parse(atob(s));if("object"!=typeof i||null===i||"typ"in i&&i?.typ!=="JWT"||!i.alg||t&&i.alg!==t)return!1;return!0}catch{return!1}}(e.data,d.alg)&&(eW(o=this._getOrReturnCtx(e,o),{validation:"jwt",code:eU.invalid_string,message:d.message}),l.dirty()):"cidr"===d.kind?(i=e.data,("v4"===(a=d.version)||!a)&&tr.test(i)||("v6"===a||!a)&&ti.test(i)||(eW(o=this._getOrReturnCtx(e,o),{validation:"cidr",code:eU.invalid_string,message:d.message}),l.dirty())):"base64"===d.kind?ta.test(e.data)||(eW(o=this._getOrReturnCtx(e,o),{validation:"base64",code:eU.invalid_string,message:d.message}),l.dirty()):"base64url"===d.kind?tn.test(e.data)||(eW(o=this._getOrReturnCtx(e,o),{validation:"base64url",code:eU.invalid_string,message:d.message}),l.dirty()):s.assertNever(d);return{status:l.value,value:e.data}}_regex(e,t,r){return this.refinement(t=>e.test(t),{validation:t,code:eU.invalid_string,...a.errToObj(r)})}_addCheck(e){return new tu({...this._def,checks:[...this._def.checks,e]})}email(e){return this._addCheck({kind:"email",...a.errToObj(e)})}url(e){return this._addCheck({kind:"url",...a.errToObj(e)})}emoji(e){return this._addCheck({kind:"emoji",...a.errToObj(e)})}uuid(e){return this._addCheck({kind:"uuid",...a.errToObj(e)})}nanoid(e){return this._addCheck({kind:"nanoid",...a.errToObj(e)})}cuid(e){return this._addCheck({kind:"cuid",...a.errToObj(e)})}cuid2(e){return this._addCheck({kind:"cuid2",...a.errToObj(e)})}ulid(e){return this._addCheck({kind:"ulid",...a.errToObj(e)})}base64(e){return this._addCheck({kind:"base64",...a.errToObj(e)})}base64url(e){return this._addCheck({kind:"base64url",...a.errToObj(e)})}jwt(e){return this._addCheck({kind:"jwt",...a.errToObj(e)})}ip(e){return this._addCheck({kind:"ip",...a.errToObj(e)})}cidr(e){return this._addCheck({kind:"cidr",...a.errToObj(e)})}datetime(e){return"string"==typeof e?this._addCheck({kind:"datetime",precision:null,offset:!1,local:!1,message:e}):this._addCheck({kind:"datetime",precision:void 0===e?.precision?null:e?.precision,offset:e?.offset??!1,local:e?.local??!1,...a.errToObj(e?.message)})}date(e){return this._addCheck({kind:"date",message:e})}time(e){return"string"==typeof e?this._addCheck({kind:"time",precision:null,message:e}):this._addCheck({kind:"time",precision:void 0===e?.precision?null:e?.precision,...a.errToObj(e?.message)})}duration(e){return this._addCheck({kind:"duration",...a.errToObj(e)})}regex(e,t){return this._addCheck({kind:"regex",regex:e,...a.errToObj(t)})}includes(e,t){return this._addCheck({kind:"includes",value:e,position:t?.position,...a.errToObj(t?.message)})}startsWith(e,t){return this._addCheck({kind:"startsWith",value:e,...a.errToObj(t)})}endsWith(e,t){return this._addCheck({kind:"endsWith",value:e,...a.errToObj(t)})}min(e,t){return this._addCheck({kind:"min",value:e,...a.errToObj(t)})}max(e,t){return this._addCheck({kind:"max",value:e,...a.errToObj(t)})}length(e,t){return this._addCheck({kind:"length",value:e,...a.errToObj(t)})}nonempty(e){return this.min(1,a.errToObj(e))}trim(){return new tu({...this._def,checks:[...this._def.checks,{kind:"trim"}]})}toLowerCase(){return new tu({...this._def,checks:[...this._def.checks,{kind:"toLowerCase"}]})}toUpperCase(){return new tu({...this._def,checks:[...this._def.checks,{kind:"toUpperCase"}]})}get isDatetime(){return!!this._def.checks.find(e=>"datetime"===e.kind)}get isDate(){return!!this._def.checks.find(e=>"date"===e.kind)}get isTime(){return!!this._def.checks.find(e=>"time"===e.kind)}get isDuration(){return!!this._def.checks.find(e=>"duration"===e.kind)}get isEmail(){return!!this._def.checks.find(e=>"email"===e.kind)}get isURL(){return!!this._def.checks.find(e=>"url"===e.kind)}get isEmoji(){return!!this._def.checks.find(e=>"emoji"===e.kind)}get isUUID(){return!!this._def.checks.find(e=>"uuid"===e.kind)}get isNANOID(){return!!this._def.checks.find(e=>"nanoid"===e.kind)}get isCUID(){return!!this._def.checks.find(e=>"cuid"===e.kind)}get isCUID2(){return!!this._def.checks.find(e=>"cuid2"===e.kind)}get isULID(){return!!this._def.checks.find(e=>"ulid"===e.kind)}get isIP(){return!!this._def.checks.find(e=>"ip"===e.kind)}get isCIDR(){return!!this._def.checks.find(e=>"cidr"===e.kind)}get isBase64(){return!!this._def.checks.find(e=>"base64"===e.kind)}get isBase64url(){return!!this._def.checks.find(e=>"base64url"===e.kind)}get minLength(){let e=null;for(let t of this._def.checks)"min"===t.kind&&(null===e||t.value>e)&&(e=t.value);return e}get maxLength(){let e=null;for(let t of this._def.checks)"max"===t.kind&&(null===e||t.value<e)&&(e=t.value);return e}}tu.create=e=>new tu({checks:[],typeName:o.ZodString,coerce:e?.coerce??!1,...e1(e)});class th extends e4{constructor(){super(...arguments),this.min=this.gte,this.max=this.lte,this.step=this.multipleOf}_parse(e){let t;if(this._def.coerce&&(e.data=Number(e.data)),this._getType(e)!==eC.number){let t=this._getOrReturnCtx(e);return eW(t,{code:eU.invalid_type,expected:eC.number,received:t.parsedType}),eH}let r=new eB;for(let i of this._def.checks)"int"===i.kind?s.isInteger(e.data)||(eW(t=this._getOrReturnCtx(e,t),{code:eU.invalid_type,expected:"integer",received:"float",message:i.message}),r.dirty()):"min"===i.kind?(i.inclusive?e.data<i.value:e.data<=i.value)&&(eW(t=this._getOrReturnCtx(e,t),{code:eU.too_small,minimum:i.value,type:"number",inclusive:i.inclusive,exact:!1,message:i.message}),r.dirty()):"max"===i.kind?(i.inclusive?e.data>i.value:e.data>=i.value)&&(eW(t=this._getOrReturnCtx(e,t),{code:eU.too_big,maximum:i.value,type:"number",inclusive:i.inclusive,exact:!1,message:i.message}),r.dirty()):"multipleOf"===i.kind?0!==function(e,t){let r=(e.toString().split(".")[1]||"").length,s=(t.toString().split(".")[1]||"").length,i=r>s?r:s;return Number.parseInt(e.toFixed(i).replace(".",""))%Number.parseInt(t.toFixed(i).replace(".",""))/10**i}(e.data,i.value)&&(eW(t=this._getOrReturnCtx(e,t),{code:eU.not_multiple_of,multipleOf:i.value,message:i.message}),r.dirty()):"finite"===i.kind?Number.isFinite(e.data)||(eW(t=this._getOrReturnCtx(e,t),{code:eU.not_finite,message:i.message}),r.dirty()):s.assertNever(i);return{status:r.value,value:e.data}}gte(e,t){return this.setLimit("min",e,!0,a.toString(t))}gt(e,t){return this.setLimit("min",e,!1,a.toString(t))}lte(e,t){return this.setLimit("max",e,!0,a.toString(t))}lt(e,t){return this.setLimit("max",e,!1,a.toString(t))}setLimit(e,t,r,s){return new th({...this._def,checks:[...this._def.checks,{kind:e,value:t,inclusive:r,message:a.toString(s)}]})}_addCheck(e){return new th({...this._def,checks:[...this._def.checks,e]})}int(e){return this._addCheck({kind:"int",message:a.toString(e)})}positive(e){return this._addCheck({kind:"min",value:0,inclusive:!1,message:a.toString(e)})}negative(e){return this._addCheck({kind:"max",value:0,inclusive:!1,message:a.toString(e)})}nonpositive(e){return this._addCheck({kind:"max",value:0,inclusive:!0,message:a.toString(e)})}nonnegative(e){return this._addCheck({kind:"min",value:0,inclusive:!0,message:a.toString(e)})}multipleOf(e,t){return this._addCheck({kind:"multipleOf",value:e,message:a.toString(t)})}finite(e){return this._addCheck({kind:"finite",message:a.toString(e)})}safe(e){return this._addCheck({kind:"min",inclusive:!0,value:Number.MIN_SAFE_INTEGER,message:a.toString(e)})._addCheck({kind:"max",inclusive:!0,value:Number.MAX_SAFE_INTEGER,message:a.toString(e)})}get minValue(){let e=null;for(let t of this._def.checks)"min"===t.kind&&(null===e||t.value>e)&&(e=t.value);return e}get maxValue(){let e=null;for(let t of this._def.checks)"max"===t.kind&&(null===e||t.value<e)&&(e=t.value);return e}get isInt(){return!!this._def.checks.find(e=>"int"===e.kind||"multipleOf"===e.kind&&s.isInteger(e.value))}get isFinite(){let e=null,t=null;for(let r of this._def.checks){if("finite"===r.kind||"int"===r.kind||"multipleOf"===r.kind)return!0;"min"===r.kind?(null===t||r.value>t)&&(t=r.value):"max"===r.kind&&(null===e||r.value<e)&&(e=r.value)}return Number.isFinite(t)&&Number.isFinite(e)}}th.create=e=>new th({checks:[],typeName:o.ZodNumber,coerce:e?.coerce||!1,...e1(e)});class tp extends e4{constructor(){super(...arguments),this.min=this.gte,this.max=this.lte}_parse(e){let t;if(this._def.coerce)try{e.data=BigInt(e.data)}catch{return this._getInvalidInput(e)}if(this._getType(e)!==eC.bigint)return this._getInvalidInput(e);let r=new eB;for(let i of this._def.checks)"min"===i.kind?(i.inclusive?e.data<i.value:e.data<=i.value)&&(eW(t=this._getOrReturnCtx(e,t),{code:eU.too_small,type:"bigint",minimum:i.value,inclusive:i.inclusive,message:i.message}),r.dirty()):"max"===i.kind?(i.inclusive?e.data>i.value:e.data>=i.value)&&(eW(t=this._getOrReturnCtx(e,t),{code:eU.too_big,type:"bigint",maximum:i.value,inclusive:i.inclusive,message:i.message}),r.dirty()):"multipleOf"===i.kind?e.data%i.value!==BigInt(0)&&(eW(t=this._getOrReturnCtx(e,t),{code:eU.not_multiple_of,multipleOf:i.value,message:i.message}),r.dirty()):s.assertNever(i);return{status:r.value,value:e.data}}_getInvalidInput(e){let t=this._getOrReturnCtx(e);return eW(t,{code:eU.invalid_type,expected:eC.bigint,received:t.parsedType}),eH}gte(e,t){return this.setLimit("min",e,!0,a.toString(t))}gt(e,t){return this.setLimit("min",e,!1,a.toString(t))}lte(e,t){return this.setLimit("max",e,!0,a.toString(t))}lt(e,t){return this.setLimit("max",e,!1,a.toString(t))}setLimit(e,t,r,s){return new tp({...this._def,checks:[...this._def.checks,{kind:e,value:t,inclusive:r,message:a.toString(s)}]})}_addCheck(e){return new tp({...this._def,checks:[...this._def.checks,e]})}positive(e){return this._addCheck({kind:"min",value:BigInt(0),inclusive:!1,message:a.toString(e)})}negative(e){return this._addCheck({kind:"max",value:BigInt(0),inclusive:!1,message:a.toString(e)})}nonpositive(e){return this._addCheck({kind:"max",value:BigInt(0),inclusive:!0,message:a.toString(e)})}nonnegative(e){return this._addCheck({kind:"min",value:BigInt(0),inclusive:!0,message:a.toString(e)})}multipleOf(e,t){return this._addCheck({kind:"multipleOf",value:e,message:a.toString(t)})}get minValue(){let e=null;for(let t of this._def.checks)"min"===t.kind&&(null===e||t.value>e)&&(e=t.value);return e}get maxValue(){let e=null;for(let t of this._def.checks)"max"===t.kind&&(null===e||t.value<e)&&(e=t.value);return e}}tp.create=e=>new tp({checks:[],typeName:o.ZodBigInt,coerce:e?.coerce??!1,...e1(e)});class tm extends e4{_parse(e){if(this._def.coerce&&(e.data=!!e.data),this._getType(e)!==eC.boolean){let t=this._getOrReturnCtx(e);return eW(t,{code:eU.invalid_type,expected:eC.boolean,received:t.parsedType}),eH}return ez(e.data)}}tm.create=e=>new tm({typeName:o.ZodBoolean,coerce:e?.coerce||!1,...e1(e)});class tf extends e4{_parse(e){let t;if(this._def.coerce&&(e.data=new Date(e.data)),this._getType(e)!==eC.date){let t=this._getOrReturnCtx(e);return eW(t,{code:eU.invalid_type,expected:eC.date,received:t.parsedType}),eH}if(Number.isNaN(e.data.getTime()))return eW(this._getOrReturnCtx(e),{code:eU.invalid_date}),eH;let r=new eB;for(let i of this._def.checks)"min"===i.kind?e.data.getTime()<i.value&&(eW(t=this._getOrReturnCtx(e,t),{code:eU.too_small,message:i.message,inclusive:!0,exact:!1,minimum:i.value,type:"date"}),r.dirty()):"max"===i.kind?e.data.getTime()>i.value&&(eW(t=this._getOrReturnCtx(e,t),{code:eU.too_big,message:i.message,inclusive:!0,exact:!1,maximum:i.value,type:"date"}),r.dirty()):s.assertNever(i);return{status:r.value,value:new Date(e.data.getTime())}}_addCheck(e){return new tf({...this._def,checks:[...this._def.checks,e]})}min(e,t){return this._addCheck({kind:"min",value:e.getTime(),message:a.toString(t)})}max(e,t){return this._addCheck({kind:"max",value:e.getTime(),message:a.toString(t)})}get minDate(){let e=null;for(let t of this._def.checks)"min"===t.kind&&(null===e||t.value>e)&&(e=t.value);return null!=e?new Date(e):null}get maxDate(){let e=null;for(let t of this._def.checks)"max"===t.kind&&(null===e||t.value<e)&&(e=t.value);return null!=e?new Date(e):null}}tf.create=e=>new tf({checks:[],coerce:e?.coerce||!1,typeName:o.ZodDate,...e1(e)});class tg extends e4{_parse(e){if(this._getType(e)!==eC.symbol){let t=this._getOrReturnCtx(e);return eW(t,{code:eU.invalid_type,expected:eC.symbol,received:t.parsedType}),eH}return ez(e.data)}}tg.create=e=>new tg({typeName:o.ZodSymbol,...e1(e)});class ty extends e4{_parse(e){if(this._getType(e)!==eC.undefined){let t=this._getOrReturnCtx(e);return eW(t,{code:eU.invalid_type,expected:eC.undefined,received:t.parsedType}),eH}return ez(e.data)}}ty.create=e=>new ty({typeName:o.ZodUndefined,...e1(e)});class t_ extends e4{_parse(e){if(this._getType(e)!==eC.null){let t=this._getOrReturnCtx(e);return eW(t,{code:eU.invalid_type,expected:eC.null,received:t.parsedType}),eH}return ez(e.data)}}t_.create=e=>new t_({typeName:o.ZodNull,...e1(e)});class tT extends e4{constructor(){super(...arguments),this._any=!0}_parse(e){return ez(e.data)}}tT.create=e=>new tT({typeName:o.ZodAny,...e1(e)});class tE extends e4{constructor(){super(...arguments),this._unknown=!0}_parse(e){return ez(e.data)}}tE.create=e=>new tE({typeName:o.ZodUnknown,...e1(e)});class tv extends e4{_parse(e){let t=this._getOrReturnCtx(e);return eW(t,{code:eU.invalid_type,expected:eC.never,received:t.parsedType}),eH}}tv.create=e=>new tv({typeName:o.ZodNever,...e1(e)});class tb extends e4{_parse(e){if(this._getType(e)!==eC.undefined){let t=this._getOrReturnCtx(e);return eW(t,{code:eU.invalid_type,expected:eC.void,received:t.parsedType}),eH}return ez(e.data)}}tb.create=e=>new tb({typeName:o.ZodVoid,...e1(e)});class tw extends e4{_parse(e){let{ctx:t,status:r}=this._processInputParams(e),s=this._def;if(t.parsedType!==eC.array)return eW(t,{code:eU.invalid_type,expected:eC.array,received:t.parsedType}),eH;if(null!==s.exactLength){let e=t.data.length>s.exactLength.value,i=t.data.length<s.exactLength.value;(e||i)&&(eW(t,{code:e?eU.too_big:eU.too_small,minimum:i?s.exactLength.value:void 0,maximum:e?s.exactLength.value:void 0,type:"array",inclusive:!0,exact:!0,message:s.exactLength.message}),r.dirty())}if(null!==s.minLength&&t.data.length<s.minLength.value&&(eW(t,{code:eU.too_small,minimum:s.minLength.value,type:"array",inclusive:!0,exact:!1,message:s.minLength.message}),r.dirty()),null!==s.maxLength&&t.data.length>s.maxLength.value&&(eW(t,{code:eU.too_big,maximum:s.maxLength.value,type:"array",inclusive:!0,exact:!1,message:s.maxLength.message}),r.dirty()),t.common.async)return Promise.all([...t.data].map((e,r)=>s.type._parseAsync(new eQ(t,e,t.path,r)))).then(e=>eB.mergeArray(r,e));let i=[...t.data].map((e,r)=>s.type._parseSync(new eQ(t,e,t.path,r)));return eB.mergeArray(r,i)}get element(){return this._def.type}min(e,t){return new tw({...this._def,minLength:{value:e,message:a.toString(t)}})}max(e,t){return new tw({...this._def,maxLength:{value:e,message:a.toString(t)}})}length(e,t){return new tw({...this._def,exactLength:{value:e,message:a.toString(t)}})}nonempty(e){return this.min(1,e)}}tw.create=(e,t)=>new tw({type:e,minLength:null,maxLength:null,exactLength:null,typeName:o.ZodArray,...e1(t)});class tN extends e4{constructor(){super(...arguments),this._cached=null,this.nonstrict=this.passthrough,this.augment=this.extend}_getCached(){if(null!==this._cached)return this._cached;let e=this._def.shape(),t=s.objectKeys(e);return this._cached={shape:e,keys:t},this._cached}_parse(e){if(this._getType(e)!==eC.object){let t=this._getOrReturnCtx(e);return eW(t,{code:eU.invalid_type,expected:eC.object,received:t.parsedType}),eH}let{status:t,ctx:r}=this._processInputParams(e),{shape:s,keys:i}=this._getCached(),a=[];if(!(this._def.catchall instanceof tv&&"strip"===this._def.unknownKeys))for(let e in r.data)i.includes(e)||a.push(e);let n=[];for(let e of i){let t=s[e],i=r.data[e];n.push({key:{status:"valid",value:e},value:t._parse(new eQ(r,i,r.path,e)),alwaysSet:e in r.data})}if(this._def.catchall instanceof tv){let e=this._def.unknownKeys;if("passthrough"===e)for(let e of a)n.push({key:{status:"valid",value:e},value:{status:"valid",value:r.data[e]}});else if("strict"===e)a.length>0&&(eW(r,{code:eU.unrecognized_keys,keys:a}),t.dirty());else if("strip"===e);else throw Error("Internal ZodObject error: invalid unknownKeys value.")}else{let e=this._def.catchall;for(let t of a){let s=r.data[t];n.push({key:{status:"valid",value:t},value:e._parse(new eQ(r,s,r.path,t)),alwaysSet:t in r.data})}}return r.common.async?Promise.resolve().then(async()=>{let e=[];for(let t of n){let r=await t.key,s=await t.value;e.push({key:r,value:s,alwaysSet:t.alwaysSet})}return e}).then(e=>eB.mergeObjectSync(t,e)):eB.mergeObjectSync(t,n)}get shape(){return this._def.shape()}strict(e){return a.errToObj,new tN({...this._def,unknownKeys:"strict",...void 0!==e?{errorMap:(t,r)=>{let s=this._def.errorMap?.(t,r).message??r.defaultError;return"unrecognized_keys"===t.code?{message:a.errToObj(e).message??s}:{message:s}}}:{}})}strip(){return new tN({...this._def,unknownKeys:"strip"})}passthrough(){return new tN({...this._def,unknownKeys:"passthrough"})}extend(e){return new tN({...this._def,shape:()=>({...this._def.shape(),...e})})}merge(e){return new tN({unknownKeys:e._def.unknownKeys,catchall:e._def.catchall,shape:()=>({...this._def.shape(),...e._def.shape()}),typeName:o.ZodObject})}setKey(e,t){return this.augment({[e]:t})}catchall(e){return new tN({...this._def,catchall:e})}pick(e){let t={};for(let r of s.objectKeys(e))e[r]&&this.shape[r]&&(t[r]=this.shape[r]);return new tN({...this._def,shape:()=>t})}omit(e){let t={};for(let r of s.objectKeys(this.shape))e[r]||(t[r]=this.shape[r]);return new tN({...this._def,shape:()=>t})}deepPartial(){return function e(t){if(t instanceof tN){let r={};for(let s in t.shape){let i=t.shape[s];r[s]=tX.create(e(i))}return new tN({...t._def,shape:()=>r})}return t instanceof tw?new tw({...t._def,type:e(t.element)}):t instanceof tX?tX.create(e(t.unwrap())):t instanceof tZ?tZ.create(e(t.unwrap())):t instanceof tI?tI.create(t.items.map(t=>e(t))):t}(this)}partial(e){let t={};for(let r of s.objectKeys(this.shape)){let s=this.shape[r];e&&!e[r]?t[r]=s:t[r]=s.optional()}return new tN({...this._def,shape:()=>t})}required(e){let t={};for(let r of s.objectKeys(this.shape))if(e&&!e[r])t[r]=this.shape[r];else{let e=this.shape[r];for(;e instanceof tX;)e=e._def.innerType;t[r]=e}return new tN({...this._def,shape:()=>t})}keyof(){return tj(s.objectKeys(this.shape))}}tN.create=(e,t)=>new tN({shape:()=>e,unknownKeys:"strip",catchall:tv.create(),typeName:o.ZodObject,...e1(t)}),tN.strictCreate=(e,t)=>new tN({shape:()=>e,unknownKeys:"strict",catchall:tv.create(),typeName:o.ZodObject,...e1(t)}),tN.lazycreate=(e,t)=>new tN({shape:e,unknownKeys:"strip",catchall:tv.create(),typeName:o.ZodObject,...e1(t)});class tS extends e4{_parse(e){let{ctx:t}=this._processInputParams(e),r=this._def.options;if(t.common.async)return Promise.all(r.map(async e=>{let r={...t,common:{...t.common,issues:[]},parent:null};return{result:await e._parseAsync({data:t.data,path:t.path,parent:r}),ctx:r}})).then(function(e){for(let t of e)if("valid"===t.result.status)return t.result;for(let r of e)if("dirty"===r.result.status)return t.common.issues.push(...r.ctx.common.issues),r.result;let r=e.map(e=>new eP(e.ctx.common.issues));return eW(t,{code:eU.invalid_union,unionErrors:r}),eH});{let e;let s=[];for(let i of r){let r={...t,common:{...t.common,issues:[]},parent:null},a=i._parseSync({data:t.data,path:t.path,parent:r});if("valid"===a.status)return a;"dirty"!==a.status||e||(e={result:a,ctx:r}),r.common.issues.length&&s.push(r.common.issues)}if(e)return t.common.issues.push(...e.ctx.common.issues),e.result;let i=s.map(e=>new eP(e));return eW(t,{code:eU.invalid_union,unionErrors:i}),eH}}get options(){return this._def.options}}tS.create=(e,t)=>new tS({options:e,typeName:o.ZodUnion,...e1(t)});var tk=e=>{if(e instanceof tD)return tk(e.schema);if(e instanceof t$)return tk(e.innerType());if(e instanceof tU)return[e.value];if(e instanceof tP)return e.options;if(e instanceof tF)return s.objectValues(e.enum);if(e instanceof tq)return tk(e._def.innerType);if(e instanceof ty)return[void 0];else if(e instanceof t_)return[null];else if(e instanceof tX)return[void 0,...tk(e.unwrap())];else if(e instanceof tZ)return[null,...tk(e.unwrap())];else if(e instanceof tJ)return tk(e.unwrap());else if(e instanceof tK)return tk(e.unwrap());else if(e instanceof tW)return tk(e._def.innerType);else return[]};class tL extends e4{_parse(e){let{ctx:t}=this._processInputParams(e);if(t.parsedType!==eC.object)return eW(t,{code:eU.invalid_type,expected:eC.object,received:t.parsedType}),eH;let r=this.discriminator,s=t.data[r],i=this.optionsMap.get(s);return i?t.common.async?i._parseAsync({data:t.data,path:t.path,parent:t}):i._parseSync({data:t.data,path:t.path,parent:t}):(eW(t,{code:eU.invalid_union_discriminator,options:Array.from(this.optionsMap.keys()),path:[r]}),eH)}get discriminator(){return this._def.discriminator}get options(){return this._def.options}get optionsMap(){return this._def.optionsMap}static create(e,t,r){let s=new Map;for(let r of t){let t=tk(r.shape[e]);if(!t.length)throw Error(`A discriminator value for key \`${e}\` could not be extracted from all schema options`);for(let i of t){if(s.has(i))throw Error(`Discriminator property ${String(e)} has duplicate value ${String(i)}`);s.set(i,r)}}return new tL({typeName:o.ZodDiscriminatedUnion,discriminator:e,options:t,optionsMap:s,...e1(r)})}}class tx extends e4{_parse(e){let{status:t,ctx:r}=this._processInputParams(e),i=(e,i)=>{if(eK(e)||eK(i))return eH;let a=function e(t,r){let i=eD(t),a=eD(r);if(t===r)return{valid:!0,data:t};if(i===eC.object&&a===eC.object){let i=s.objectKeys(r),a=s.objectKeys(t).filter(e=>-1!==i.indexOf(e)),n={...t,...r};for(let s of a){let i=e(t[s],r[s]);if(!i.valid)return{valid:!1};n[s]=i.data}return{valid:!0,data:n}}if(i===eC.array&&a===eC.array){if(t.length!==r.length)return{valid:!1};let s=[];for(let i=0;i<t.length;i++){let a=e(t[i],r[i]);if(!a.valid)return{valid:!1};s.push(a.data)}return{valid:!0,data:s}}return i===eC.date&&a===eC.date&&+t==+r?{valid:!0,data:t}:{valid:!1}}(e.value,i.value);return a.valid?((eY(e)||eY(i))&&t.dirty(),{status:t.value,value:a.data}):(eW(r,{code:eU.invalid_intersection_types}),eH)};return r.common.async?Promise.all([this._def.left._parseAsync({data:r.data,path:r.path,parent:r}),this._def.right._parseAsync({data:r.data,path:r.path,parent:r})]).then(([e,t])=>i(e,t)):i(this._def.left._parseSync({data:r.data,path:r.path,parent:r}),this._def.right._parseSync({data:r.data,path:r.path,parent:r}))}}tx.create=(e,t,r)=>new tx({left:e,right:t,typeName:o.ZodIntersection,...e1(r)});class tI extends e4{_parse(e){let{status:t,ctx:r}=this._processInputParams(e);if(r.parsedType!==eC.array)return eW(r,{code:eU.invalid_type,expected:eC.array,received:r.parsedType}),eH;if(r.data.length<this._def.items.length)return eW(r,{code:eU.too_small,minimum:this._def.items.length,inclusive:!0,exact:!1,type:"array"}),eH;!this._def.rest&&r.data.length>this._def.items.length&&(eW(r,{code:eU.too_big,maximum:this._def.items.length,inclusive:!0,exact:!1,type:"array"}),t.dirty());let s=[...r.data].map((e,t)=>{let s=this._def.items[t]||this._def.rest;return s?s._parse(new eQ(r,e,r.path,t)):null}).filter(e=>!!e);return r.common.async?Promise.all(s).then(e=>eB.mergeArray(t,e)):eB.mergeArray(t,s)}get items(){return this._def.items}rest(e){return new tI({...this._def,rest:e})}}tI.create=(e,t)=>{if(!Array.isArray(e))throw Error("You must pass an array of schemas to z.tuple([ ... ])");return new tI({items:e,typeName:o.ZodTuple,rest:null,...e1(t)})};class tO extends e4{get keySchema(){return this._def.keyType}get valueSchema(){return this._def.valueType}_parse(e){let{status:t,ctx:r}=this._processInputParams(e);if(r.parsedType!==eC.object)return eW(r,{code:eU.invalid_type,expected:eC.object,received:r.parsedType}),eH;let s=[],i=this._def.keyType,a=this._def.valueType;for(let e in r.data)s.push({key:i._parse(new eQ(r,e,r.path,e)),value:a._parse(new eQ(r,r.data[e],r.path,e)),alwaysSet:e in r.data});return r.common.async?eB.mergeObjectAsync(t,s):eB.mergeObjectSync(t,s)}get element(){return this._def.valueType}static create(e,t,r){return new tO(t instanceof e4?{keyType:e,valueType:t,typeName:o.ZodRecord,...e1(r)}:{keyType:tu.create(),valueType:e,typeName:o.ZodRecord,...e1(t)})}}class tA extends e4{get keySchema(){return this._def.keyType}get valueSchema(){return this._def.valueType}_parse(e){let{status:t,ctx:r}=this._processInputParams(e);if(r.parsedType!==eC.map)return eW(r,{code:eU.invalid_type,expected:eC.map,received:r.parsedType}),eH;let s=this._def.keyType,i=this._def.valueType,a=[...r.data.entries()].map(([e,t],a)=>({key:s._parse(new eQ(r,e,r.path,[a,"key"])),value:i._parse(new eQ(r,t,r.path,[a,"value"]))}));if(r.common.async){let e=new Map;return Promise.resolve().then(async()=>{for(let r of a){let s=await r.key,i=await r.value;if("aborted"===s.status||"aborted"===i.status)return eH;("dirty"===s.status||"dirty"===i.status)&&t.dirty(),e.set(s.value,i.value)}return{status:t.value,value:e}})}{let e=new Map;for(let r of a){let s=r.key,i=r.value;if("aborted"===s.status||"aborted"===i.status)return eH;("dirty"===s.status||"dirty"===i.status)&&t.dirty(),e.set(s.value,i.value)}return{status:t.value,value:e}}}}tA.create=(e,t,r)=>new tA({valueType:t,keyType:e,typeName:o.ZodMap,...e1(r)});class tR extends e4{_parse(e){let{status:t,ctx:r}=this._processInputParams(e);if(r.parsedType!==eC.set)return eW(r,{code:eU.invalid_type,expected:eC.set,received:r.parsedType}),eH;let s=this._def;null!==s.minSize&&r.data.size<s.minSize.value&&(eW(r,{code:eU.too_small,minimum:s.minSize.value,type:"set",inclusive:!0,exact:!1,message:s.minSize.message}),t.dirty()),null!==s.maxSize&&r.data.size>s.maxSize.value&&(eW(r,{code:eU.too_big,maximum:s.maxSize.value,type:"set",inclusive:!0,exact:!1,message:s.maxSize.message}),t.dirty());let i=this._def.valueType;function a(e){let r=new Set;for(let s of e){if("aborted"===s.status)return eH;"dirty"===s.status&&t.dirty(),r.add(s.value)}return{status:t.value,value:r}}let n=[...r.data.values()].map((e,t)=>i._parse(new eQ(r,e,r.path,t)));return r.common.async?Promise.all(n).then(e=>a(e)):a(n)}min(e,t){return new tR({...this._def,minSize:{value:e,message:a.toString(t)}})}max(e,t){return new tR({...this._def,maxSize:{value:e,message:a.toString(t)}})}size(e,t){return this.min(e,t).max(e,t)}nonempty(e){return this.min(1,e)}}tR.create=(e,t)=>new tR({valueType:e,minSize:null,maxSize:null,typeName:o.ZodSet,...e1(t)});class tC extends e4{constructor(){super(...arguments),this.validate=this.implement}_parse(e){let{ctx:t}=this._processInputParams(e);if(t.parsedType!==eC.function)return eW(t,{code:eU.invalid_type,expected:eC.function,received:t.parsedType}),eH;function r(e,r){return eZ({data:e,path:t.path,errorMaps:[t.common.contextualErrorMap,t.schemaErrorMap,eM,eF].filter(e=>!!e),issueData:{code:eU.invalid_arguments,argumentsError:r}})}function s(e,r){return eZ({data:e,path:t.path,errorMaps:[t.common.contextualErrorMap,t.schemaErrorMap,eM,eF].filter(e=>!!e),issueData:{code:eU.invalid_return_type,returnTypeError:r}})}let i={errorMap:t.common.contextualErrorMap},a=t.data;if(this._def.returns instanceof tM){let e=this;return ez(async function(...t){let n=new eP([]),o=await e._def.args.parseAsync(t,i).catch(e=>{throw n.addIssue(r(t,e)),n}),l=await Reflect.apply(a,this,o);return await e._def.returns._def.type.parseAsync(l,i).catch(e=>{throw n.addIssue(s(l,e)),n})})}{let e=this;return ez(function(...t){let n=e._def.args.safeParse(t,i);if(!n.success)throw new eP([r(t,n.error)]);let o=Reflect.apply(a,this,n.data),l=e._def.returns.safeParse(o,i);if(!l.success)throw new eP([s(o,l.error)]);return l.data})}}parameters(){return this._def.args}returnType(){return this._def.returns}args(...e){return new tC({...this._def,args:tI.create(e).rest(tE.create())})}returns(e){return new tC({...this._def,returns:e})}implement(e){return this.parse(e)}strictImplement(e){return this.parse(e)}static create(e,t,r){return new tC({args:e||tI.create([]).rest(tE.create()),returns:t||tE.create(),typeName:o.ZodFunction,...e1(r)})}}class tD extends e4{get schema(){return this._def.getter()}_parse(e){let{ctx:t}=this._processInputParams(e);return this._def.getter()._parse({data:t.data,path:t.path,parent:t})}}tD.create=(e,t)=>new tD({getter:e,typeName:o.ZodLazy,...e1(t)});class tU extends e4{_parse(e){if(e.data!==this._def.value){let t=this._getOrReturnCtx(e);return eW(t,{received:t.data,code:eU.invalid_literal,expected:this._def.value}),eH}return{status:"valid",value:e.data}}get value(){return this._def.value}}function tj(e,t){return new tP({values:e,typeName:o.ZodEnum,...e1(t)})}tU.create=(e,t)=>new tU({value:e,typeName:o.ZodLiteral,...e1(t)});class tP extends e4{_parse(e){if("string"!=typeof e.data){let t=this._getOrReturnCtx(e),r=this._def.values;return eW(t,{expected:s.joinValues(r),received:t.parsedType,code:eU.invalid_type}),eH}if(this._cache||(this._cache=new Set(this._def.values)),!this._cache.has(e.data)){let t=this._getOrReturnCtx(e),r=this._def.values;return eW(t,{received:t.data,code:eU.invalid_enum_value,options:r}),eH}return ez(e.data)}get options(){return this._def.values}get enum(){let e={};for(let t of this._def.values)e[t]=t;return e}get Values(){let e={};for(let t of this._def.values)e[t]=t;return e}get Enum(){let e={};for(let t of this._def.values)e[t]=t;return e}extract(e,t=this._def){return tP.create(e,{...this._def,...t})}exclude(e,t=this._def){return tP.create(this.options.filter(t=>!e.includes(t)),{...this._def,...t})}}tP.create=tj;class tF extends e4{_parse(e){let t=s.getValidEnumValues(this._def.values),r=this._getOrReturnCtx(e);if(r.parsedType!==eC.string&&r.parsedType!==eC.number){let e=s.objectValues(t);return eW(r,{expected:s.joinValues(e),received:r.parsedType,code:eU.invalid_type}),eH}if(this._cache||(this._cache=new Set(s.getValidEnumValues(this._def.values))),!this._cache.has(e.data)){let e=s.objectValues(t);return eW(r,{received:r.data,code:eU.invalid_enum_value,options:e}),eH}return ez(e.data)}get enum(){return this._def.values}}tF.create=(e,t)=>new tF({values:e,typeName:o.ZodNativeEnum,...e1(t)});class tM extends e4{unwrap(){return this._def.type}_parse(e){let{ctx:t}=this._processInputParams(e);return t.parsedType!==eC.promise&&!1===t.common.async?(eW(t,{code:eU.invalid_type,expected:eC.promise,received:t.parsedType}),eH):ez((t.parsedType===eC.promise?t.data:Promise.resolve(t.data)).then(e=>this._def.type.parseAsync(e,{path:t.path,errorMap:t.common.contextualErrorMap})))}}tM.create=(e,t)=>new tM({type:e,typeName:o.ZodPromise,...e1(t)});class t$ extends e4{innerType(){return this._def.schema}sourceType(){return this._def.schema._def.typeName===o.ZodEffects?this._def.schema.sourceType():this._def.schema}_parse(e){let{status:t,ctx:r}=this._processInputParams(e),i=this._def.effect||null,a={addIssue:e=>{eW(r,e),e.fatal?t.abort():t.dirty()},get path(){return r.path}};if(a.addIssue=a.addIssue.bind(a),"preprocess"===i.type){let e=i.transform(r.data,a);if(r.common.async)return Promise.resolve(e).then(async e=>{if("aborted"===t.value)return eH;let s=await this._def.schema._parseAsync({data:e,path:r.path,parent:r});return"aborted"===s.status?eH:"dirty"===s.status||"dirty"===t.value?eJ(s.value):s});{if("aborted"===t.value)return eH;let s=this._def.schema._parseSync({data:e,path:r.path,parent:r});return"aborted"===s.status?eH:"dirty"===s.status||"dirty"===t.value?eJ(s.value):s}}if("refinement"===i.type){let e=e=>{let t=i.refinement(e,a);if(r.common.async)return Promise.resolve(t);if(t instanceof Promise)throw Error("Async refinement encountered during synchronous parse operation. Use .parseAsync instead.");return e};if(!1!==r.common.async)return this._def.schema._parseAsync({data:r.data,path:r.path,parent:r}).then(r=>"aborted"===r.status?eH:("dirty"===r.status&&t.dirty(),e(r.value).then(()=>({status:t.value,value:r.value}))));{let s=this._def.schema._parseSync({data:r.data,path:r.path,parent:r});return"aborted"===s.status?eH:("dirty"===s.status&&t.dirty(),e(s.value),{status:t.value,value:s.value})}}if("transform"===i.type){if(!1!==r.common.async)return this._def.schema._parseAsync({data:r.data,path:r.path,parent:r}).then(e=>eG(e)?Promise.resolve(i.transform(e.value,a)).then(e=>({status:t.value,value:e})):eH);{let e=this._def.schema._parseSync({data:r.data,path:r.path,parent:r});if(!eG(e))return eH;let s=i.transform(e.value,a);if(s instanceof Promise)throw Error("Asynchronous transform encountered during synchronous parse operation. Use .parseAsync instead.");return{status:t.value,value:s}}}s.assertNever(i)}}t$.create=(e,t,r)=>new t$({schema:e,typeName:o.ZodEffects,effect:t,...e1(r)}),t$.createWithPreprocess=(e,t,r)=>new t$({schema:t,effect:{type:"preprocess",transform:e},typeName:o.ZodEffects,...e1(r)});class tX extends e4{_parse(e){return this._getType(e)===eC.undefined?ez(void 0):this._def.innerType._parse(e)}unwrap(){return this._def.innerType}}tX.create=(e,t)=>new tX({innerType:e,typeName:o.ZodOptional,...e1(t)});class tZ extends e4{_parse(e){return this._getType(e)===eC.null?ez(null):this._def.innerType._parse(e)}unwrap(){return this._def.innerType}}tZ.create=(e,t)=>new tZ({innerType:e,typeName:o.ZodNullable,...e1(t)});class tq extends e4{_parse(e){let{ctx:t}=this._processInputParams(e),r=t.data;return t.parsedType===eC.undefined&&(r=this._def.defaultValue()),this._def.innerType._parse({data:r,path:t.path,parent:t})}removeDefault(){return this._def.innerType}}tq.create=(e,t)=>new tq({innerType:e,typeName:o.ZodDefault,defaultValue:"function"==typeof t.default?t.default:()=>t.default,...e1(t)});class tW extends e4{_parse(e){let{ctx:t}=this._processInputParams(e),r={...t,common:{...t.common,issues:[]}},s=this._def.innerType._parse({data:r.data,path:r.path,parent:{...r}});return eV(s)?s.then(e=>({status:"valid",value:"valid"===e.status?e.value:this._def.catchValue({get error(){return new eP(r.common.issues)},input:r.data})})):{status:"valid",value:"valid"===s.status?s.value:this._def.catchValue({get error(){return new eP(r.common.issues)},input:r.data})}}removeCatch(){return this._def.innerType}}tW.create=(e,t)=>new tW({innerType:e,typeName:o.ZodCatch,catchValue:"function"==typeof t.catch?t.catch:()=>t.catch,...e1(t)});class tB extends e4{_parse(e){if(this._getType(e)!==eC.nan){let t=this._getOrReturnCtx(e);return eW(t,{code:eU.invalid_type,expected:eC.nan,received:t.parsedType}),eH}return{status:"valid",value:e.data}}}tB.create=e=>new tB({typeName:o.ZodNaN,...e1(e)});var tH=Symbol("zod_brand");class tJ extends e4{_parse(e){let{ctx:t}=this._processInputParams(e),r=t.data;return this._def.type._parse({data:r,path:t.path,parent:t})}unwrap(){return this._def.type}}class tz extends e4{_parse(e){let{status:t,ctx:r}=this._processInputParams(e);if(r.common.async)return(async()=>{let e=await this._def.in._parseAsync({data:r.data,path:r.path,parent:r});return"aborted"===e.status?eH:"dirty"===e.status?(t.dirty(),eJ(e.value)):this._def.out._parseAsync({data:e.value,path:r.path,parent:r})})();{let e=this._def.in._parseSync({data:r.data,path:r.path,parent:r});return"aborted"===e.status?eH:"dirty"===e.status?(t.dirty(),{status:"dirty",value:e.value}):this._def.out._parseSync({data:e.value,path:r.path,parent:r})}}static create(e,t){return new tz({in:e,out:t,typeName:o.ZodPipeline})}}class tK extends e4{_parse(e){let t=this._def.innerType._parse(e),r=e=>(eG(e)&&(e.value=Object.freeze(e.value)),e);return eV(t)?t.then(e=>r(e)):r(t)}unwrap(){return this._def.innerType}}function tY(e,t){let r="function"==typeof e?e(t):"string"==typeof e?{message:e}:e;return"string"==typeof r?{message:r}:r}function tG(e,t={},r){return e?tT.create().superRefine((s,i)=>{let a=e(s);if(a instanceof Promise)return a.then(e=>{if(!e){let e=tY(t,s),a=e.fatal??r??!0;i.addIssue({code:"custom",...e,fatal:a})}});if(!a){let e=tY(t,s),a=e.fatal??r??!0;i.addIssue({code:"custom",...e,fatal:a})}}):tT.create()}tK.create=(e,t)=>new tK({innerType:e,typeName:o.ZodReadonly,...e1(t)});var tV={object:tN.lazycreate};!function(e){e.ZodString="ZodString",e.ZodNumber="ZodNumber",e.ZodNaN="ZodNaN",e.ZodBigInt="ZodBigInt",e.ZodBoolean="ZodBoolean",e.ZodDate="ZodDate",e.ZodSymbol="ZodSymbol",e.ZodUndefined="ZodUndefined",e.ZodNull="ZodNull",e.ZodAny="ZodAny",e.ZodUnknown="ZodUnknown",e.ZodNever="ZodNever",e.ZodVoid="ZodVoid",e.ZodArray="ZodArray",e.ZodObject="ZodObject",e.ZodUnion="ZodUnion",e.ZodDiscriminatedUnion="ZodDiscriminatedUnion",e.ZodIntersection="ZodIntersection",e.ZodTuple="ZodTuple",e.ZodRecord="ZodRecord",e.ZodMap="ZodMap",e.ZodSet="ZodSet",e.ZodFunction="ZodFunction",e.ZodLazy="ZodLazy",e.ZodLiteral="ZodLiteral",e.ZodEnum="ZodEnum",e.ZodEffects="ZodEffects",e.ZodNativeEnum="ZodNativeEnum",e.ZodOptional="ZodOptional",e.ZodNullable="ZodNullable",e.ZodDefault="ZodDefault",e.ZodCatch="ZodCatch",e.ZodPromise="ZodPromise",e.ZodBranded="ZodBranded",e.ZodPipeline="ZodPipeline",e.ZodReadonly="ZodReadonly"}(o||(o={}));var tQ=(e,t={message:`Input not instance of ${e.name}`})=>tG(t=>t instanceof e,t),t0=tu.create,t1=th.create,t4=tB.create,t2=tp.create,t9=tm.create,t3=tf.create,t5=tg.create,t6=ty.create,t8=t_.create,t7=tT.create,re=tE.create,rt=tv.create,rr=tb.create,rs=tw.create,ri=tN.create,ra=tN.strictCreate,rn=tS.create,ro=tL.create,rl=tx.create,rd=tI.create,rc=tO.create,ru=tA.create,rh=tR.create,rp=tC.create,rm=tD.create,rf=tU.create,rg=tP.create,ry=tF.create,r_=tM.create,rT=t$.create,rE=tX.create,rv=tZ.create,rb=t$.createWithPreprocess,rw=tz.create,rN=()=>t0().optional(),rS=()=>t1().optional(),rk=()=>t9().optional(),rL={string:e=>tu.create({...e,coerce:!0}),number:e=>th.create({...e,coerce:!0}),boolean:e=>tm.create({...e,coerce:!0}),bigint:e=>tp.create({...e,coerce:!0}),date:e=>tf.create({...e,coerce:!0})},rx=eH;class rI{async execute(e,t){let r=this.schema.safeParse(e);if(!r.success)return{toolCallId:"",content:`Invalid parameters: ${r.error.message}`,isError:!0};try{let e=(0,l.resolve)(t.workingDirectory,r.data.file_path),s=await (0,h.readFile)(e,"utf-8");if(r.data.offset||r.data.limit){let e=s.split(`
22
+ `.repeat(Math.max(0,r-1)));let s=function(e,t){let r=e.indexOf(t);if(r>=0)return r;for(let r=e.length-1;r>=0;r--){let s=e[r];if("user"===s.role&&s.content===t.content)return r}return -1}(e.messages,e.currentUserMessage),i=function(e){let t=new Set;for(let r=0;r<e.length;r++){let s=e[r];"user"===s.role&&s.content.startsWith(eU)&&(t.add(r),e[r+1]?.role==="assistant"&&e[r+1]?.content===ej&&t.add(r+1))}return t}(e.messages);e.messages.forEach((e,r)=>{if(t.messageOverhead+=4,t.images+=(e.images?.length??0)*1e3,"system"!==e.role){if(i.has(r)){t.compactionSummary+=eM(e.content);return}if("user"===e.role){let i=r===s?"currentUserMessage":"conversationHistory";t[i]+=eM(e.content);return}if("assistant"===e.role){for(let r of(t.assistantMessages+=eM(e.content),e.toolCalls??[]))t.toolCalls+=eM(JSON.stringify(r));return}t.toolResults+=eM(JSON.stringify({toolCallId:e.toolCallId,name:e.name,content:e.content}))}}),e.nativeToolDefinitions.length>0&&(t.nativeToolDefinitions=eM(JSON.stringify(e.nativeToolDefinitions)),t.messageOverhead+=4*e.nativeToolDefinitions.length);let a=eF.map(e=>({category:e,tokens:t[e]})),n=a.reduce((e,t)=>e+t.tokens,0),o=Math.max(1,e.maxTokens);return{requestIndex:e.requestIndex,providerId:e.providerId,modelId:e.modelId,maxTokens:o,totalTokens:n,ratio:Math.min(n/o,1),estimationMode:"heuristic",segments:a}}({requestIndex:m,providerId:this.config.modelProvider.providerId,modelId:this.config.modelProvider.modelId,maxTokens:h,messages:s,currentUserMessage:i,nativeToolDefinitions:e,systemSections:o.systemSections})};let r=[],a=!1,n=this.config.streamMaxRetries??0,l=0,d=0,c=0,g=e=>new Promise(t=>{if(this.abortController?.signal.aborted){t(!1);return}let r=setTimeout(()=>{this.abortController?.signal.removeEventListener("abort",s),t(!0)},e),s=()=>{clearTimeout(r),t(!1)};this.abortController?.signal.addEventListener("abort",s,{once:!0})});for(;;){if(c>0){yield{type:"thinking",message:`Retrying (${c})…`};let e=Math.min(1e3*Math.pow(2,c-1)+500*Math.random(),1e4);if(!await g(e)){yield{type:"turn_aborted"};return}}let t=!1,i=!1,o=!1;try{for await(let n of this.config.modelProvider.streamChat(s,{tools:e.length>0?e:void 0,reasoningEffort:this.config.reasoningEffort})){if(this.abortController?.signal.aborted)break;switch(n.type){case"text_chunk":i=i||n.text.length>0,p+=n.text,yield{type:"text_chunk",text:n.text};break;case"tool_call":i=!0,r.push(n.toolCall),yield{type:"tool_call",toolCall:n.toolCall};break;case"text_done":o=!0;break;case"error":i=!0,t=!0,a=!0,yield{type:"error",message:n.message,code:"strea-err"}}}if(!i&&!this.abortController?.signal.aborted){if(0===d){d++,c++;continue}a=!0,yield{type:"error",message:"Model stream ended without producing a response after retry"}}if(t||a)break;o&&(yield{type:"text_done"});break}catch(r){if(this.abortController?.signal.aborted){yield{type:"turn_aborted"};return}let e=r instanceof Error?r.message:String(r),t=/timeout|rate\s*limit|5\d{2}|econnrefused|econnreset|network|temporary|too many|retry/i.test(e);if(i||!t||l>=n){yield{type:"error",message:e},a=!0;break}l++,c++}}if(0===r.length||a){yield{type:"done",finalText:p};return}let y={role:"assistant",content:p,toolCalls:r};s.push(y);let _=[],T=await Promise.allSettled(r.map(async e=>{let r={workingDirectory:this.config.workingDirectory,sessionId:t,signal:this.abortController.signal},s=await Promise.race([this.config.toolExecutor.execute(e.name,e.arguments,r),new Promise((e,t)=>{if(this.abortController.signal.aborted){t(Error("turn_aborted"));return}this.abortController.signal.addEventListener("abort",()=>t(Error("turn_aborted")),{once:!0})})]);return s.toolCallId=e.id,s})),E=!1;for(let e=0;e<T.length;e++){let t;let i=T[e],a=r[e];if("fulfilled"===i.status)t=i.value;else{let e=i.reason?.message==="turn_aborted"?"turn_aborted":i.reason?.message??"Tool execution failed";if("turn_aborted"===e){E=!0;break}t={toolCallId:a.id,content:`Error: ${e}`,isError:!0}}_.push(t);let n=t.metadata?.showWidget;n&&(yield{type:"show_widget",widgetId:n.widgetId,widgetType:n.widgetType,data:n.data}),yield{type:"tool_result",result:t},s.push({role:"tool",content:t.content,toolCallId:t.toolCallId,name:a.name})}if(E){yield{type:"turn_aborted"},yield{type:"done",finalText:p||"Aborted"};return}if(await this.compactor.estimateTokens(s)>h*u){yield{type:"thinking",message:"Context growing after tool results — compacting…"};let e=await this.compactor.compact(s);if(s=e.messages,e.removedMessages>0&&(yield{type:"compacted",summary:e.summary,removedMessages:e.removedMessages},this.config.sessionStore)){let r=e.messages.filter(e=>"system"!==e.role).slice(2);await this.config.sessionStore.addMessage(t,{role:"user",content:JSON.stringify({summary:e.summary,recentMessages:r}),name:"__compaction_checkpoint__"}).catch(()=>{})}}p=""}yield{type:"done",finalText:p||`Reached max iterations (${this.config.maxIterations})`}}abort(){this.abortController?.abort()}getFilteredToolDefinitions(){let e=this.config.toolRegistry.getDefinitions();if(!this.config.enabledTools)return e;let t=new Set(this.config.enabledTools);return e.filter(e=>t.has(e.name)||!this.initialToolNames.has(e.name))}}class eX{create(e){return new e$(e)}}class eZ{register(e){this.tools.set(e.name,e)}unregister(e){this.tools.delete(e)}get(e){return this.tools.get(e)}getAll(){return Array.from(this.tools.values())}getDefinitions(){return this.getAll().map(e=>({name:e.name,description:e.description,parameters:e.parameters}))}async execute(e,t,r){let s=this.tools.get(e);return s?s.execute(t,r):{toolCallId:"",content:`Unknown tool: ${e}`,isError:!0}}validate(e,t){let r=this.tools.get(e);return!!r&&r.schema.safeParse(t).success}constructor(){this.tools=new Map}}var eq={};((e,t)=>{for(var r in t)T(e,r,{get:t[r],enumerable:!0,configurable:!0,set:v.bind(t,r)})})(eq,{void:()=>rp,util:()=>s,unknown:()=>ru,union:()=>ry,undefined:()=>rl,tuple:()=>rE,transformer:()=>rO,symbol:()=>ro,string:()=>rt,strictObject:()=>rg,setErrorMap:()=>eG,set:()=>rw,record:()=>rv,quotelessJson:()=>eJ,promise:()=>rI,preprocess:()=>rR,pipeline:()=>rD,ostring:()=>rU,optional:()=>rA,onumber:()=>rj,oboolean:()=>rP,objectUtil:()=>i,object:()=>rf,number:()=>rr,nullable:()=>rC,null:()=>rd,never:()=>rh,nativeEnum:()=>rx,nan:()=>rs,map:()=>rb,makeIssue:()=>eQ,literal:()=>rk,lazy:()=>rS,late:()=>t7,isValid:()=>e8,isDirty:()=>e5,isAsync:()=>e7,isAborted:()=>e6,intersection:()=>rT,instanceof:()=>re,getParsedType:()=>eB,getErrorMap:()=>eV,function:()=>rN,enum:()=>rL,effect:()=>rO,discriminatedUnion:()=>r_,defaultErrorMap:()=>eK,datetimeRegex:()=>tv,date:()=>rn,custom:()=>t8,coerce:()=>rF,boolean:()=>ra,bigint:()=>ri,array:()=>rm,any:()=>rc,addIssueToContext:()=>e1,ZodVoid:()=>tR,ZodUnknown:()=>tA,ZodUnion:()=>tj,ZodUndefined:()=>tx,ZodType:()=>ts,ZodTuple:()=>t$,ZodTransformer:()=>tG,ZodSymbol:()=>tL,ZodString:()=>tb,ZodSet:()=>tq,ZodSchema:()=>ts,ZodRecord:()=>tX,ZodReadonly:()=>t6,ZodPromise:()=>tY,ZodPipeline:()=>t3,ZodParsedType:()=>eW,ZodOptional:()=>tV,ZodObject:()=>tU,ZodNumber:()=>tw,ZodNullable:()=>tQ,ZodNull:()=>tI,ZodNever:()=>tC,ZodNativeEnum:()=>tK,ZodNaN:()=>t4,ZodMap:()=>tZ,ZodLiteral:()=>tH,ZodLazy:()=>tB,ZodIssueCode:()=>eH,ZodIntersection:()=>tM,ZodFunction:()=>tW,ZodFirstPartyTypeKind:()=>o,ZodError:()=>ez,ZodEnum:()=>tz,ZodEffects:()=>tG,ZodDiscriminatedUnion:()=>tF,ZodDefault:()=>t0,ZodDate:()=>tk,ZodCatch:()=>t1,ZodBranded:()=>t9,ZodBoolean:()=>tS,ZodBigInt:()=>tN,ZodArray:()=>tD,ZodAny:()=>tO,Schema:()=>ts,ParseStatus:()=>e4,OK:()=>e3,NEVER:()=>rM,INVALID:()=>e2,EMPTY_PATH:()=>e0,DIRTY:()=>e9,BRAND:()=>t2}),function(e){e.assertEqual=e=>{},e.assertIs=function(e){},e.assertNever=function(e){throw Error()},e.arrayToEnum=e=>{let t={};for(let r of e)t[r]=r;return t},e.getValidEnumValues=t=>{let r=e.objectKeys(t).filter(e=>"number"!=typeof t[t[e]]),s={};for(let e of r)s[e]=t[e];return e.objectValues(s)},e.objectValues=t=>e.objectKeys(t).map(function(e){return t[e]}),e.objectKeys="function"==typeof Object.keys?e=>Object.keys(e):e=>{let t=[];for(let r in e)Object.prototype.hasOwnProperty.call(e,r)&&t.push(r);return t},e.find=(e,t)=>{for(let r of e)if(t(r))return r},e.isInteger="function"==typeof Number.isInteger?e=>Number.isInteger(e):e=>"number"==typeof e&&Number.isFinite(e)&&Math.floor(e)===e,e.joinValues=function(e,t=" | "){return e.map(e=>"string"==typeof e?`'${e}'`:e).join(t)},e.jsonStringifyReplacer=(e,t)=>"bigint"==typeof t?t.toString():t}(s||(s={})),(i||(i={})).mergeShapes=(e,t)=>({...e,...t});var eW=s.arrayToEnum(["string","nan","number","integer","float","boolean","date","bigint","symbol","function","undefined","null","array","object","unknown","promise","void","never","map","set"]),eB=e=>{switch(typeof e){case"undefined":return eW.undefined;case"string":return eW.string;case"number":return Number.isNaN(e)?eW.nan:eW.number;case"boolean":return eW.boolean;case"function":return eW.function;case"bigint":return eW.bigint;case"symbol":return eW.symbol;case"object":if(Array.isArray(e))return eW.array;if(null===e)return eW.null;if(e.then&&"function"==typeof e.then&&e.catch&&"function"==typeof e.catch)return eW.promise;if("undefined"!=typeof Map&&e instanceof Map)return eW.map;if("undefined"!=typeof Set&&e instanceof Set)return eW.set;if("undefined"!=typeof Date&&e instanceof Date)return eW.date;return eW.object;default:return eW.unknown}},eH=s.arrayToEnum(["invalid_type","invalid_literal","custom","invalid_union","invalid_union_discriminator","invalid_enum_value","unrecognized_keys","invalid_arguments","invalid_return_type","invalid_date","invalid_string","too_small","too_big","invalid_intersection_types","not_multiple_of","not_finite"]),eJ=e=>JSON.stringify(e,null,2).replace(/"([^"]+)":/g,"$1:");class ez extends Error{get errors(){return this.issues}constructor(e){super(),this.issues=[],this.addIssue=e=>{this.issues=[...this.issues,e]},this.addIssues=(e=[])=>{this.issues=[...this.issues,...e]};let t=new.target.prototype;Object.setPrototypeOf?Object.setPrototypeOf(this,t):this.__proto__=t,this.name="ZodError",this.issues=e}format(e){let t=e||function(e){return e.message},r={_errors:[]},s=e=>{for(let i of e.issues)if("invalid_union"===i.code)i.unionErrors.map(s);else if("invalid_return_type"===i.code)s(i.returnTypeError);else if("invalid_arguments"===i.code)s(i.argumentsError);else if(0===i.path.length)r._errors.push(t(i));else{let e=r,s=0;for(;s<i.path.length;){let r=i.path[s];s===i.path.length-1?(e[r]=e[r]||{_errors:[]},e[r]._errors.push(t(i))):e[r]=e[r]||{_errors:[]},e=e[r],s++}}};return s(this),r}static assert(e){if(!(e instanceof ez))throw Error(`Not a ZodError: ${e}`)}toString(){return this.message}get message(){return JSON.stringify(this.issues,s.jsonStringifyReplacer,2)}get isEmpty(){return 0===this.issues.length}flatten(e=e=>e.message){let t={},r=[];for(let s of this.issues)if(s.path.length>0){let r=s.path[0];t[r]=t[r]||[],t[r].push(e(s))}else r.push(e(s));return{formErrors:r,fieldErrors:t}}get formErrors(){return this.flatten()}}ez.create=e=>new ez(e);var eK=(e,t)=>{let r;switch(e.code){case eH.invalid_type:r=e.received===eW.undefined?"Required":`Expected ${e.expected}, received ${e.received}`;break;case eH.invalid_literal:r=`Invalid literal value, expected ${JSON.stringify(e.expected,s.jsonStringifyReplacer)}`;break;case eH.unrecognized_keys:r=`Unrecognized key(s) in object: ${s.joinValues(e.keys,", ")}`;break;case eH.invalid_union:r="Invalid input";break;case eH.invalid_union_discriminator:r=`Invalid discriminator value. Expected ${s.joinValues(e.options)}`;break;case eH.invalid_enum_value:r=`Invalid enum value. Expected ${s.joinValues(e.options)}, received '${e.received}'`;break;case eH.invalid_arguments:r="Invalid function arguments";break;case eH.invalid_return_type:r="Invalid function return type";break;case eH.invalid_date:r="Invalid date";break;case eH.invalid_string:"object"==typeof e.validation?"includes"in e.validation?(r=`Invalid input: must include "${e.validation.includes}"`,"number"==typeof e.validation.position&&(r=`${r} at one or more positions greater than or equal to ${e.validation.position}`)):"startsWith"in e.validation?r=`Invalid input: must start with "${e.validation.startsWith}"`:"endsWith"in e.validation?r=`Invalid input: must end with "${e.validation.endsWith}"`:s.assertNever(e.validation):r="regex"!==e.validation?`Invalid ${e.validation}`:"Invalid";break;case eH.too_small:r="array"===e.type?`Array must contain ${e.exact?"exactly":e.inclusive?"at least":"more than"} ${e.minimum} element(s)`:"string"===e.type?`String must contain ${e.exact?"exactly":e.inclusive?"at least":"over"} ${e.minimum} character(s)`:"number"===e.type?`Number must be ${e.exact?"exactly equal to ":e.inclusive?"greater than or equal to ":"greater than "}${e.minimum}`:"bigint"===e.type?`Number must be ${e.exact?"exactly equal to ":e.inclusive?"greater than or equal to ":"greater than "}${e.minimum}`:"date"===e.type?`Date must be ${e.exact?"exactly equal to ":e.inclusive?"greater than or equal to ":"greater than "}${new Date(Number(e.minimum))}`:"Invalid input";break;case eH.too_big:r="array"===e.type?`Array must contain ${e.exact?"exactly":e.inclusive?"at most":"less than"} ${e.maximum} element(s)`:"string"===e.type?`String must contain ${e.exact?"exactly":e.inclusive?"at most":"under"} ${e.maximum} character(s)`:"number"===e.type?`Number must be ${e.exact?"exactly":e.inclusive?"less than or equal to":"less than"} ${e.maximum}`:"bigint"===e.type?`BigInt must be ${e.exact?"exactly":e.inclusive?"less than or equal to":"less than"} ${e.maximum}`:"date"===e.type?`Date must be ${e.exact?"exactly":e.inclusive?"smaller than or equal to":"smaller than"} ${new Date(Number(e.maximum))}`:"Invalid input";break;case eH.custom:r="Invalid input";break;case eH.invalid_intersection_types:r="Intersection results could not be merged";break;case eH.not_multiple_of:r=`Number must be a multiple of ${e.multipleOf}`;break;case eH.not_finite:r="Number must be finite";break;default:r=t.defaultError,s.assertNever(e)}return{message:r}},eY=eK;function eG(e){eY=e}function eV(){return eY}var eQ=e=>{let{data:t,path:r,errorMaps:s,issueData:i}=e,a=[...r,...i.path||[]],n={...i,path:a};if(void 0!==i.message)return{...i,path:a,message:i.message};let o="";for(let e of s.filter(e=>!!e).slice().reverse())o=e(n,{data:t,defaultError:o}).message;return{...i,path:a,message:o}},e0=[];function e1(e,t){let r=eY,s=eQ({issueData:t,data:e.data,path:e.path,errorMaps:[e.common.contextualErrorMap,e.schemaErrorMap,r,r===eK?void 0:eK].filter(e=>!!e)});e.common.issues.push(s)}class e4{constructor(){this.value="valid"}dirty(){"valid"===this.value&&(this.value="dirty")}abort(){"aborted"!==this.value&&(this.value="aborted")}static mergeArray(e,t){let r=[];for(let s of t){if("aborted"===s.status)return e2;"dirty"===s.status&&e.dirty(),r.push(s.value)}return{status:e.value,value:r}}static async mergeObjectAsync(e,t){let r=[];for(let e of t){let t=await e.key,s=await e.value;r.push({key:t,value:s})}return e4.mergeObjectSync(e,r)}static mergeObjectSync(e,t){let r={};for(let s of t){let{key:t,value:i}=s;if("aborted"===t.status||"aborted"===i.status)return e2;"dirty"===t.status&&e.dirty(),"dirty"===i.status&&e.dirty(),"__proto__"!==t.value&&(void 0!==i.value||s.alwaysSet)&&(r[t.value]=i.value)}return{status:e.value,value:r}}}var e2=Object.freeze({status:"aborted"}),e9=e=>({status:"dirty",value:e}),e3=e=>({status:"valid",value:e}),e6=e=>"aborted"===e.status,e5=e=>"dirty"===e.status,e8=e=>"valid"===e.status,e7=e=>"undefined"!=typeof Promise&&e instanceof Promise;!function(e){e.errToObj=e=>"string"==typeof e?{message:e}:e||{},e.toString=e=>"string"==typeof e?e:e?.message}(a||(a={}));class te{constructor(e,t,r,s){this._cachedPath=[],this.parent=e,this.data=t,this._path=r,this._key=s}get path(){return this._cachedPath.length||(Array.isArray(this._key)?this._cachedPath.push(...this._path,...this._key):this._cachedPath.push(...this._path,this._key)),this._cachedPath}}var tt=(e,t)=>{if(e8(t))return{success:!0,data:t.value};if(!e.common.issues.length)throw Error("Validation failed but no issues detected.");return{success:!1,get error(){if(this._error)return this._error;let t=new ez(e.common.issues);return this._error=t,this._error}}};function tr(e){if(!e)return{};let{errorMap:t,invalid_type_error:r,required_error:s,description:i}=e;if(t&&(r||s))throw Error('Can\'t use "invalid_type_error" or "required_error" in conjunction with custom error map.');return t?{errorMap:t,description:i}:{errorMap:(t,i)=>{let{message:a}=e;return"invalid_enum_value"===t.code?{message:a??i.defaultError}:void 0===i.data?{message:a??s??i.defaultError}:"invalid_type"!==t.code?{message:i.defaultError}:{message:a??r??i.defaultError}},description:i}}class ts{get description(){return this._def.description}_getType(e){return eB(e.data)}_getOrReturnCtx(e,t){return t||{common:e.parent.common,data:e.data,parsedType:eB(e.data),schemaErrorMap:this._def.errorMap,path:e.path,parent:e.parent}}_processInputParams(e){return{status:new e4,ctx:{common:e.parent.common,data:e.data,parsedType:eB(e.data),schemaErrorMap:this._def.errorMap,path:e.path,parent:e.parent}}}_parseSync(e){let t=this._parse(e);if(e7(t))throw Error("Synchronous parse encountered promise.");return t}_parseAsync(e){return Promise.resolve(this._parse(e))}parse(e,t){let r=this.safeParse(e,t);if(r.success)return r.data;throw r.error}safeParse(e,t){let r={common:{issues:[],async:t?.async??!1,contextualErrorMap:t?.errorMap},path:t?.path||[],schemaErrorMap:this._def.errorMap,parent:null,data:e,parsedType:eB(e)},s=this._parseSync({data:e,path:r.path,parent:r});return tt(r,s)}"~validate"(e){let t={common:{issues:[],async:!!this["~standard"].async},path:[],schemaErrorMap:this._def.errorMap,parent:null,data:e,parsedType:eB(e)};if(!this["~standard"].async)try{let r=this._parseSync({data:e,path:[],parent:t});return e8(r)?{value:r.value}:{issues:t.common.issues}}catch(e){e?.message?.toLowerCase()?.includes("encountered")&&(this["~standard"].async=!0),t.common={issues:[],async:!0}}return this._parseAsync({data:e,path:[],parent:t}).then(e=>e8(e)?{value:e.value}:{issues:t.common.issues})}async parseAsync(e,t){let r=await this.safeParseAsync(e,t);if(r.success)return r.data;throw r.error}async safeParseAsync(e,t){let r={common:{issues:[],contextualErrorMap:t?.errorMap,async:!0},path:t?.path||[],schemaErrorMap:this._def.errorMap,parent:null,data:e,parsedType:eB(e)},s=this._parse({data:e,path:r.path,parent:r});return tt(r,await (e7(s)?s:Promise.resolve(s)))}refine(e,t){let r=e=>"string"==typeof t||void 0===t?{message:t}:"function"==typeof t?t(e):t;return this._refinement((t,s)=>{let i=e(t),a=()=>s.addIssue({code:eH.custom,...r(t)});return"undefined"!=typeof Promise&&i instanceof Promise?i.then(e=>!!e||(a(),!1)):!!i||(a(),!1)})}refinement(e,t){return this._refinement((r,s)=>!!e(r)||(s.addIssue("function"==typeof t?t(r,s):t),!1))}_refinement(e){return new tG({schema:this,typeName:o.ZodEffects,effect:{type:"refinement",refinement:e}})}superRefine(e){return this._refinement(e)}constructor(e){this.spa=this.safeParseAsync,this._def=e,this.parse=this.parse.bind(this),this.safeParse=this.safeParse.bind(this),this.parseAsync=this.parseAsync.bind(this),this.safeParseAsync=this.safeParseAsync.bind(this),this.spa=this.spa.bind(this),this.refine=this.refine.bind(this),this.refinement=this.refinement.bind(this),this.superRefine=this.superRefine.bind(this),this.optional=this.optional.bind(this),this.nullable=this.nullable.bind(this),this.nullish=this.nullish.bind(this),this.array=this.array.bind(this),this.promise=this.promise.bind(this),this.or=this.or.bind(this),this.and=this.and.bind(this),this.transform=this.transform.bind(this),this.brand=this.brand.bind(this),this.default=this.default.bind(this),this.catch=this.catch.bind(this),this.describe=this.describe.bind(this),this.pipe=this.pipe.bind(this),this.readonly=this.readonly.bind(this),this.isNullable=this.isNullable.bind(this),this.isOptional=this.isOptional.bind(this),this["~standard"]={version:1,vendor:"zod",validate:e=>this["~validate"](e)}}optional(){return tV.create(this,this._def)}nullable(){return tQ.create(this,this._def)}nullish(){return this.nullable().optional()}array(){return tD.create(this)}promise(){return tY.create(this,this._def)}or(e){return tj.create([this,e],this._def)}and(e){return tM.create(this,e,this._def)}transform(e){return new tG({...tr(this._def),schema:this,typeName:o.ZodEffects,effect:{type:"transform",transform:e}})}default(e){return new t0({...tr(this._def),innerType:this,defaultValue:"function"==typeof e?e:()=>e,typeName:o.ZodDefault})}brand(){return new t9({typeName:o.ZodBranded,type:this,...tr(this._def)})}catch(e){return new t1({...tr(this._def),innerType:this,catchValue:"function"==typeof e?e:()=>e,typeName:o.ZodCatch})}describe(e){return new this.constructor({...this._def,description:e})}pipe(e){return t3.create(this,e)}readonly(){return t6.create(this)}isOptional(){return this.safeParse(void 0).success}isNullable(){return this.safeParse(null).success}}var ti=/^c[^\s-]{8,}$/i,ta=/^[0-9a-z]+$/,tn=/^[0-9A-HJKMNP-TV-Z]{26}$/i,to=/^[0-9a-fA-F]{8}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{12}$/i,tl=/^[a-z0-9_-]{21}$/i,td=/^[A-Za-z0-9-_]+\.[A-Za-z0-9-_]+\.[A-Za-z0-9-_]*$/,tc=/^[-+]?P(?!$)(?:(?:[-+]?\d+Y)|(?:[-+]?\d+[.,]\d+Y$))?(?:(?:[-+]?\d+M)|(?:[-+]?\d+[.,]\d+M$))?(?:(?:[-+]?\d+W)|(?:[-+]?\d+[.,]\d+W$))?(?:(?:[-+]?\d+D)|(?:[-+]?\d+[.,]\d+D$))?(?:T(?=[\d+-])(?:(?:[-+]?\d+H)|(?:[-+]?\d+[.,]\d+H$))?(?:(?:[-+]?\d+M)|(?:[-+]?\d+[.,]\d+M$))?(?:[-+]?\d+(?:[.,]\d+)?S)?)??$/,tu=/^(?!\.)(?!.*\.\.)([A-Z0-9_'+\-\.]*)[A-Z0-9_+-]@([A-Z0-9][A-Z0-9\-]*\.)+[A-Z]{2,}$/i,th=/^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])$/,tp=/^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\/(3[0-2]|[12]?[0-9])$/,tm=/^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))$/,tf=/^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))\/(12[0-8]|1[01][0-9]|[1-9]?[0-9])$/,tg=/^([0-9a-zA-Z+/]{4})*(([0-9a-zA-Z+/]{2}==)|([0-9a-zA-Z+/]{3}=))?$/,ty=/^([0-9a-zA-Z-_]{4})*(([0-9a-zA-Z-_]{2}(==)?)|([0-9a-zA-Z-_]{3}(=)?))?$/,t_="((\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-((0[13578]|1[02])-(0[1-9]|[12]\\d|3[01])|(0[469]|11)-(0[1-9]|[12]\\d|30)|(02)-(0[1-9]|1\\d|2[0-8])))",tT=RegExp(`^${t_}$`);function tE(e){let t="[0-5]\\d";e.precision?t=`${t}\\.\\d{${e.precision}}`:null==e.precision&&(t=`${t}(\\.\\d+)?`);let r=e.precision?"+":"?";return`([01]\\d|2[0-3]):[0-5]\\d(:${t})${r}`}function tv(e){let t=`${t_}T${tE(e)}`,r=[];return r.push(e.local?"Z?":"Z"),e.offset&&r.push("([+-]\\d{2}:?\\d{2})"),t=`${t}(${r.join("|")})`,RegExp(`^${t}$`)}class tb extends ts{_parse(e){var t,r,i,a;let o;if(this._def.coerce&&(e.data=String(e.data)),this._getType(e)!==eW.string){let t=this._getOrReturnCtx(e);return e1(t,{code:eH.invalid_type,expected:eW.string,received:t.parsedType}),e2}let l=new e4;for(let d of this._def.checks)if("min"===d.kind)e.data.length<d.value&&(e1(o=this._getOrReturnCtx(e,o),{code:eH.too_small,minimum:d.value,type:"string",inclusive:!0,exact:!1,message:d.message}),l.dirty());else if("max"===d.kind)e.data.length>d.value&&(e1(o=this._getOrReturnCtx(e,o),{code:eH.too_big,maximum:d.value,type:"string",inclusive:!0,exact:!1,message:d.message}),l.dirty());else if("length"===d.kind){let t=e.data.length>d.value,r=e.data.length<d.value;(t||r)&&(o=this._getOrReturnCtx(e,o),t?e1(o,{code:eH.too_big,maximum:d.value,type:"string",inclusive:!0,exact:!0,message:d.message}):r&&e1(o,{code:eH.too_small,minimum:d.value,type:"string",inclusive:!0,exact:!0,message:d.message}),l.dirty())}else if("email"===d.kind)tu.test(e.data)||(e1(o=this._getOrReturnCtx(e,o),{validation:"email",code:eH.invalid_string,message:d.message}),l.dirty());else if("emoji"===d.kind)n||(n=RegExp("^(\\p{Extended_Pictographic}|\\p{Emoji_Component})+$","u")),n.test(e.data)||(e1(o=this._getOrReturnCtx(e,o),{validation:"emoji",code:eH.invalid_string,message:d.message}),l.dirty());else if("uuid"===d.kind)to.test(e.data)||(e1(o=this._getOrReturnCtx(e,o),{validation:"uuid",code:eH.invalid_string,message:d.message}),l.dirty());else if("nanoid"===d.kind)tl.test(e.data)||(e1(o=this._getOrReturnCtx(e,o),{validation:"nanoid",code:eH.invalid_string,message:d.message}),l.dirty());else if("cuid"===d.kind)ti.test(e.data)||(e1(o=this._getOrReturnCtx(e,o),{validation:"cuid",code:eH.invalid_string,message:d.message}),l.dirty());else if("cuid2"===d.kind)ta.test(e.data)||(e1(o=this._getOrReturnCtx(e,o),{validation:"cuid2",code:eH.invalid_string,message:d.message}),l.dirty());else if("ulid"===d.kind)tn.test(e.data)||(e1(o=this._getOrReturnCtx(e,o),{validation:"ulid",code:eH.invalid_string,message:d.message}),l.dirty());else if("url"===d.kind)try{new URL(e.data)}catch{e1(o=this._getOrReturnCtx(e,o),{validation:"url",code:eH.invalid_string,message:d.message}),l.dirty()}else"regex"===d.kind?(d.regex.lastIndex=0,d.regex.test(e.data)||(e1(o=this._getOrReturnCtx(e,o),{validation:"regex",code:eH.invalid_string,message:d.message}),l.dirty())):"trim"===d.kind?e.data=e.data.trim():"includes"===d.kind?e.data.includes(d.value,d.position)||(e1(o=this._getOrReturnCtx(e,o),{code:eH.invalid_string,validation:{includes:d.value,position:d.position},message:d.message}),l.dirty()):"toLowerCase"===d.kind?e.data=e.data.toLowerCase():"toUpperCase"===d.kind?e.data=e.data.toUpperCase():"startsWith"===d.kind?e.data.startsWith(d.value)||(e1(o=this._getOrReturnCtx(e,o),{code:eH.invalid_string,validation:{startsWith:d.value},message:d.message}),l.dirty()):"endsWith"===d.kind?e.data.endsWith(d.value)||(e1(o=this._getOrReturnCtx(e,o),{code:eH.invalid_string,validation:{endsWith:d.value},message:d.message}),l.dirty()):"datetime"===d.kind?tv(d).test(e.data)||(e1(o=this._getOrReturnCtx(e,o),{code:eH.invalid_string,validation:"datetime",message:d.message}),l.dirty()):"date"===d.kind?tT.test(e.data)||(e1(o=this._getOrReturnCtx(e,o),{code:eH.invalid_string,validation:"date",message:d.message}),l.dirty()):"time"===d.kind?RegExp(`^${tE(d)}$`).test(e.data)||(e1(o=this._getOrReturnCtx(e,o),{code:eH.invalid_string,validation:"time",message:d.message}),l.dirty()):"duration"===d.kind?tc.test(e.data)||(e1(o=this._getOrReturnCtx(e,o),{validation:"duration",code:eH.invalid_string,message:d.message}),l.dirty()):"ip"===d.kind?(t=e.data,("v4"===(r=d.version)||!r)&&th.test(t)||("v6"===r||!r)&&tm.test(t)||(e1(o=this._getOrReturnCtx(e,o),{validation:"ip",code:eH.invalid_string,message:d.message}),l.dirty())):"jwt"===d.kind?!function(e,t){if(!td.test(e))return!1;try{let[r]=e.split(".");if(!r)return!1;let s=r.replace(/-/g,"+").replace(/_/g,"/").padEnd(r.length+(4-r.length%4)%4,"="),i=JSON.parse(atob(s));if("object"!=typeof i||null===i||"typ"in i&&i?.typ!=="JWT"||!i.alg||t&&i.alg!==t)return!1;return!0}catch{return!1}}(e.data,d.alg)&&(e1(o=this._getOrReturnCtx(e,o),{validation:"jwt",code:eH.invalid_string,message:d.message}),l.dirty()):"cidr"===d.kind?(i=e.data,("v4"===(a=d.version)||!a)&&tp.test(i)||("v6"===a||!a)&&tf.test(i)||(e1(o=this._getOrReturnCtx(e,o),{validation:"cidr",code:eH.invalid_string,message:d.message}),l.dirty())):"base64"===d.kind?tg.test(e.data)||(e1(o=this._getOrReturnCtx(e,o),{validation:"base64",code:eH.invalid_string,message:d.message}),l.dirty()):"base64url"===d.kind?ty.test(e.data)||(e1(o=this._getOrReturnCtx(e,o),{validation:"base64url",code:eH.invalid_string,message:d.message}),l.dirty()):s.assertNever(d);return{status:l.value,value:e.data}}_regex(e,t,r){return this.refinement(t=>e.test(t),{validation:t,code:eH.invalid_string,...a.errToObj(r)})}_addCheck(e){return new tb({...this._def,checks:[...this._def.checks,e]})}email(e){return this._addCheck({kind:"email",...a.errToObj(e)})}url(e){return this._addCheck({kind:"url",...a.errToObj(e)})}emoji(e){return this._addCheck({kind:"emoji",...a.errToObj(e)})}uuid(e){return this._addCheck({kind:"uuid",...a.errToObj(e)})}nanoid(e){return this._addCheck({kind:"nanoid",...a.errToObj(e)})}cuid(e){return this._addCheck({kind:"cuid",...a.errToObj(e)})}cuid2(e){return this._addCheck({kind:"cuid2",...a.errToObj(e)})}ulid(e){return this._addCheck({kind:"ulid",...a.errToObj(e)})}base64(e){return this._addCheck({kind:"base64",...a.errToObj(e)})}base64url(e){return this._addCheck({kind:"base64url",...a.errToObj(e)})}jwt(e){return this._addCheck({kind:"jwt",...a.errToObj(e)})}ip(e){return this._addCheck({kind:"ip",...a.errToObj(e)})}cidr(e){return this._addCheck({kind:"cidr",...a.errToObj(e)})}datetime(e){return"string"==typeof e?this._addCheck({kind:"datetime",precision:null,offset:!1,local:!1,message:e}):this._addCheck({kind:"datetime",precision:void 0===e?.precision?null:e?.precision,offset:e?.offset??!1,local:e?.local??!1,...a.errToObj(e?.message)})}date(e){return this._addCheck({kind:"date",message:e})}time(e){return"string"==typeof e?this._addCheck({kind:"time",precision:null,message:e}):this._addCheck({kind:"time",precision:void 0===e?.precision?null:e?.precision,...a.errToObj(e?.message)})}duration(e){return this._addCheck({kind:"duration",...a.errToObj(e)})}regex(e,t){return this._addCheck({kind:"regex",regex:e,...a.errToObj(t)})}includes(e,t){return this._addCheck({kind:"includes",value:e,position:t?.position,...a.errToObj(t?.message)})}startsWith(e,t){return this._addCheck({kind:"startsWith",value:e,...a.errToObj(t)})}endsWith(e,t){return this._addCheck({kind:"endsWith",value:e,...a.errToObj(t)})}min(e,t){return this._addCheck({kind:"min",value:e,...a.errToObj(t)})}max(e,t){return this._addCheck({kind:"max",value:e,...a.errToObj(t)})}length(e,t){return this._addCheck({kind:"length",value:e,...a.errToObj(t)})}nonempty(e){return this.min(1,a.errToObj(e))}trim(){return new tb({...this._def,checks:[...this._def.checks,{kind:"trim"}]})}toLowerCase(){return new tb({...this._def,checks:[...this._def.checks,{kind:"toLowerCase"}]})}toUpperCase(){return new tb({...this._def,checks:[...this._def.checks,{kind:"toUpperCase"}]})}get isDatetime(){return!!this._def.checks.find(e=>"datetime"===e.kind)}get isDate(){return!!this._def.checks.find(e=>"date"===e.kind)}get isTime(){return!!this._def.checks.find(e=>"time"===e.kind)}get isDuration(){return!!this._def.checks.find(e=>"duration"===e.kind)}get isEmail(){return!!this._def.checks.find(e=>"email"===e.kind)}get isURL(){return!!this._def.checks.find(e=>"url"===e.kind)}get isEmoji(){return!!this._def.checks.find(e=>"emoji"===e.kind)}get isUUID(){return!!this._def.checks.find(e=>"uuid"===e.kind)}get isNANOID(){return!!this._def.checks.find(e=>"nanoid"===e.kind)}get isCUID(){return!!this._def.checks.find(e=>"cuid"===e.kind)}get isCUID2(){return!!this._def.checks.find(e=>"cuid2"===e.kind)}get isULID(){return!!this._def.checks.find(e=>"ulid"===e.kind)}get isIP(){return!!this._def.checks.find(e=>"ip"===e.kind)}get isCIDR(){return!!this._def.checks.find(e=>"cidr"===e.kind)}get isBase64(){return!!this._def.checks.find(e=>"base64"===e.kind)}get isBase64url(){return!!this._def.checks.find(e=>"base64url"===e.kind)}get minLength(){let e=null;for(let t of this._def.checks)"min"===t.kind&&(null===e||t.value>e)&&(e=t.value);return e}get maxLength(){let e=null;for(let t of this._def.checks)"max"===t.kind&&(null===e||t.value<e)&&(e=t.value);return e}}tb.create=e=>new tb({checks:[],typeName:o.ZodString,coerce:e?.coerce??!1,...tr(e)});class tw extends ts{constructor(){super(...arguments),this.min=this.gte,this.max=this.lte,this.step=this.multipleOf}_parse(e){let t;if(this._def.coerce&&(e.data=Number(e.data)),this._getType(e)!==eW.number){let t=this._getOrReturnCtx(e);return e1(t,{code:eH.invalid_type,expected:eW.number,received:t.parsedType}),e2}let r=new e4;for(let i of this._def.checks)"int"===i.kind?s.isInteger(e.data)||(e1(t=this._getOrReturnCtx(e,t),{code:eH.invalid_type,expected:"integer",received:"float",message:i.message}),r.dirty()):"min"===i.kind?(i.inclusive?e.data<i.value:e.data<=i.value)&&(e1(t=this._getOrReturnCtx(e,t),{code:eH.too_small,minimum:i.value,type:"number",inclusive:i.inclusive,exact:!1,message:i.message}),r.dirty()):"max"===i.kind?(i.inclusive?e.data>i.value:e.data>=i.value)&&(e1(t=this._getOrReturnCtx(e,t),{code:eH.too_big,maximum:i.value,type:"number",inclusive:i.inclusive,exact:!1,message:i.message}),r.dirty()):"multipleOf"===i.kind?0!==function(e,t){let r=(e.toString().split(".")[1]||"").length,s=(t.toString().split(".")[1]||"").length,i=r>s?r:s;return Number.parseInt(e.toFixed(i).replace(".",""))%Number.parseInt(t.toFixed(i).replace(".",""))/10**i}(e.data,i.value)&&(e1(t=this._getOrReturnCtx(e,t),{code:eH.not_multiple_of,multipleOf:i.value,message:i.message}),r.dirty()):"finite"===i.kind?Number.isFinite(e.data)||(e1(t=this._getOrReturnCtx(e,t),{code:eH.not_finite,message:i.message}),r.dirty()):s.assertNever(i);return{status:r.value,value:e.data}}gte(e,t){return this.setLimit("min",e,!0,a.toString(t))}gt(e,t){return this.setLimit("min",e,!1,a.toString(t))}lte(e,t){return this.setLimit("max",e,!0,a.toString(t))}lt(e,t){return this.setLimit("max",e,!1,a.toString(t))}setLimit(e,t,r,s){return new tw({...this._def,checks:[...this._def.checks,{kind:e,value:t,inclusive:r,message:a.toString(s)}]})}_addCheck(e){return new tw({...this._def,checks:[...this._def.checks,e]})}int(e){return this._addCheck({kind:"int",message:a.toString(e)})}positive(e){return this._addCheck({kind:"min",value:0,inclusive:!1,message:a.toString(e)})}negative(e){return this._addCheck({kind:"max",value:0,inclusive:!1,message:a.toString(e)})}nonpositive(e){return this._addCheck({kind:"max",value:0,inclusive:!0,message:a.toString(e)})}nonnegative(e){return this._addCheck({kind:"min",value:0,inclusive:!0,message:a.toString(e)})}multipleOf(e,t){return this._addCheck({kind:"multipleOf",value:e,message:a.toString(t)})}finite(e){return this._addCheck({kind:"finite",message:a.toString(e)})}safe(e){return this._addCheck({kind:"min",inclusive:!0,value:Number.MIN_SAFE_INTEGER,message:a.toString(e)})._addCheck({kind:"max",inclusive:!0,value:Number.MAX_SAFE_INTEGER,message:a.toString(e)})}get minValue(){let e=null;for(let t of this._def.checks)"min"===t.kind&&(null===e||t.value>e)&&(e=t.value);return e}get maxValue(){let e=null;for(let t of this._def.checks)"max"===t.kind&&(null===e||t.value<e)&&(e=t.value);return e}get isInt(){return!!this._def.checks.find(e=>"int"===e.kind||"multipleOf"===e.kind&&s.isInteger(e.value))}get isFinite(){let e=null,t=null;for(let r of this._def.checks){if("finite"===r.kind||"int"===r.kind||"multipleOf"===r.kind)return!0;"min"===r.kind?(null===t||r.value>t)&&(t=r.value):"max"===r.kind&&(null===e||r.value<e)&&(e=r.value)}return Number.isFinite(t)&&Number.isFinite(e)}}tw.create=e=>new tw({checks:[],typeName:o.ZodNumber,coerce:e?.coerce||!1,...tr(e)});class tN extends ts{constructor(){super(...arguments),this.min=this.gte,this.max=this.lte}_parse(e){let t;if(this._def.coerce)try{e.data=BigInt(e.data)}catch{return this._getInvalidInput(e)}if(this._getType(e)!==eW.bigint)return this._getInvalidInput(e);let r=new e4;for(let i of this._def.checks)"min"===i.kind?(i.inclusive?e.data<i.value:e.data<=i.value)&&(e1(t=this._getOrReturnCtx(e,t),{code:eH.too_small,type:"bigint",minimum:i.value,inclusive:i.inclusive,message:i.message}),r.dirty()):"max"===i.kind?(i.inclusive?e.data>i.value:e.data>=i.value)&&(e1(t=this._getOrReturnCtx(e,t),{code:eH.too_big,type:"bigint",maximum:i.value,inclusive:i.inclusive,message:i.message}),r.dirty()):"multipleOf"===i.kind?e.data%i.value!==BigInt(0)&&(e1(t=this._getOrReturnCtx(e,t),{code:eH.not_multiple_of,multipleOf:i.value,message:i.message}),r.dirty()):s.assertNever(i);return{status:r.value,value:e.data}}_getInvalidInput(e){let t=this._getOrReturnCtx(e);return e1(t,{code:eH.invalid_type,expected:eW.bigint,received:t.parsedType}),e2}gte(e,t){return this.setLimit("min",e,!0,a.toString(t))}gt(e,t){return this.setLimit("min",e,!1,a.toString(t))}lte(e,t){return this.setLimit("max",e,!0,a.toString(t))}lt(e,t){return this.setLimit("max",e,!1,a.toString(t))}setLimit(e,t,r,s){return new tN({...this._def,checks:[...this._def.checks,{kind:e,value:t,inclusive:r,message:a.toString(s)}]})}_addCheck(e){return new tN({...this._def,checks:[...this._def.checks,e]})}positive(e){return this._addCheck({kind:"min",value:BigInt(0),inclusive:!1,message:a.toString(e)})}negative(e){return this._addCheck({kind:"max",value:BigInt(0),inclusive:!1,message:a.toString(e)})}nonpositive(e){return this._addCheck({kind:"max",value:BigInt(0),inclusive:!0,message:a.toString(e)})}nonnegative(e){return this._addCheck({kind:"min",value:BigInt(0),inclusive:!0,message:a.toString(e)})}multipleOf(e,t){return this._addCheck({kind:"multipleOf",value:e,message:a.toString(t)})}get minValue(){let e=null;for(let t of this._def.checks)"min"===t.kind&&(null===e||t.value>e)&&(e=t.value);return e}get maxValue(){let e=null;for(let t of this._def.checks)"max"===t.kind&&(null===e||t.value<e)&&(e=t.value);return e}}tN.create=e=>new tN({checks:[],typeName:o.ZodBigInt,coerce:e?.coerce??!1,...tr(e)});class tS extends ts{_parse(e){if(this._def.coerce&&(e.data=!!e.data),this._getType(e)!==eW.boolean){let t=this._getOrReturnCtx(e);return e1(t,{code:eH.invalid_type,expected:eW.boolean,received:t.parsedType}),e2}return e3(e.data)}}tS.create=e=>new tS({typeName:o.ZodBoolean,coerce:e?.coerce||!1,...tr(e)});class tk extends ts{_parse(e){let t;if(this._def.coerce&&(e.data=new Date(e.data)),this._getType(e)!==eW.date){let t=this._getOrReturnCtx(e);return e1(t,{code:eH.invalid_type,expected:eW.date,received:t.parsedType}),e2}if(Number.isNaN(e.data.getTime()))return e1(this._getOrReturnCtx(e),{code:eH.invalid_date}),e2;let r=new e4;for(let i of this._def.checks)"min"===i.kind?e.data.getTime()<i.value&&(e1(t=this._getOrReturnCtx(e,t),{code:eH.too_small,message:i.message,inclusive:!0,exact:!1,minimum:i.value,type:"date"}),r.dirty()):"max"===i.kind?e.data.getTime()>i.value&&(e1(t=this._getOrReturnCtx(e,t),{code:eH.too_big,message:i.message,inclusive:!0,exact:!1,maximum:i.value,type:"date"}),r.dirty()):s.assertNever(i);return{status:r.value,value:new Date(e.data.getTime())}}_addCheck(e){return new tk({...this._def,checks:[...this._def.checks,e]})}min(e,t){return this._addCheck({kind:"min",value:e.getTime(),message:a.toString(t)})}max(e,t){return this._addCheck({kind:"max",value:e.getTime(),message:a.toString(t)})}get minDate(){let e=null;for(let t of this._def.checks)"min"===t.kind&&(null===e||t.value>e)&&(e=t.value);return null!=e?new Date(e):null}get maxDate(){let e=null;for(let t of this._def.checks)"max"===t.kind&&(null===e||t.value<e)&&(e=t.value);return null!=e?new Date(e):null}}tk.create=e=>new tk({checks:[],coerce:e?.coerce||!1,typeName:o.ZodDate,...tr(e)});class tL extends ts{_parse(e){if(this._getType(e)!==eW.symbol){let t=this._getOrReturnCtx(e);return e1(t,{code:eH.invalid_type,expected:eW.symbol,received:t.parsedType}),e2}return e3(e.data)}}tL.create=e=>new tL({typeName:o.ZodSymbol,...tr(e)});class tx extends ts{_parse(e){if(this._getType(e)!==eW.undefined){let t=this._getOrReturnCtx(e);return e1(t,{code:eH.invalid_type,expected:eW.undefined,received:t.parsedType}),e2}return e3(e.data)}}tx.create=e=>new tx({typeName:o.ZodUndefined,...tr(e)});class tI extends ts{_parse(e){if(this._getType(e)!==eW.null){let t=this._getOrReturnCtx(e);return e1(t,{code:eH.invalid_type,expected:eW.null,received:t.parsedType}),e2}return e3(e.data)}}tI.create=e=>new tI({typeName:o.ZodNull,...tr(e)});class tO extends ts{constructor(){super(...arguments),this._any=!0}_parse(e){return e3(e.data)}}tO.create=e=>new tO({typeName:o.ZodAny,...tr(e)});class tA extends ts{constructor(){super(...arguments),this._unknown=!0}_parse(e){return e3(e.data)}}tA.create=e=>new tA({typeName:o.ZodUnknown,...tr(e)});class tC extends ts{_parse(e){let t=this._getOrReturnCtx(e);return e1(t,{code:eH.invalid_type,expected:eW.never,received:t.parsedType}),e2}}tC.create=e=>new tC({typeName:o.ZodNever,...tr(e)});class tR extends ts{_parse(e){if(this._getType(e)!==eW.undefined){let t=this._getOrReturnCtx(e);return e1(t,{code:eH.invalid_type,expected:eW.void,received:t.parsedType}),e2}return e3(e.data)}}tR.create=e=>new tR({typeName:o.ZodVoid,...tr(e)});class tD extends ts{_parse(e){let{ctx:t,status:r}=this._processInputParams(e),s=this._def;if(t.parsedType!==eW.array)return e1(t,{code:eH.invalid_type,expected:eW.array,received:t.parsedType}),e2;if(null!==s.exactLength){let e=t.data.length>s.exactLength.value,i=t.data.length<s.exactLength.value;(e||i)&&(e1(t,{code:e?eH.too_big:eH.too_small,minimum:i?s.exactLength.value:void 0,maximum:e?s.exactLength.value:void 0,type:"array",inclusive:!0,exact:!0,message:s.exactLength.message}),r.dirty())}if(null!==s.minLength&&t.data.length<s.minLength.value&&(e1(t,{code:eH.too_small,minimum:s.minLength.value,type:"array",inclusive:!0,exact:!1,message:s.minLength.message}),r.dirty()),null!==s.maxLength&&t.data.length>s.maxLength.value&&(e1(t,{code:eH.too_big,maximum:s.maxLength.value,type:"array",inclusive:!0,exact:!1,message:s.maxLength.message}),r.dirty()),t.common.async)return Promise.all([...t.data].map((e,r)=>s.type._parseAsync(new te(t,e,t.path,r)))).then(e=>e4.mergeArray(r,e));let i=[...t.data].map((e,r)=>s.type._parseSync(new te(t,e,t.path,r)));return e4.mergeArray(r,i)}get element(){return this._def.type}min(e,t){return new tD({...this._def,minLength:{value:e,message:a.toString(t)}})}max(e,t){return new tD({...this._def,maxLength:{value:e,message:a.toString(t)}})}length(e,t){return new tD({...this._def,exactLength:{value:e,message:a.toString(t)}})}nonempty(e){return this.min(1,e)}}tD.create=(e,t)=>new tD({type:e,minLength:null,maxLength:null,exactLength:null,typeName:o.ZodArray,...tr(t)});class tU extends ts{constructor(){super(...arguments),this._cached=null,this.nonstrict=this.passthrough,this.augment=this.extend}_getCached(){if(null!==this._cached)return this._cached;let e=this._def.shape(),t=s.objectKeys(e);return this._cached={shape:e,keys:t},this._cached}_parse(e){if(this._getType(e)!==eW.object){let t=this._getOrReturnCtx(e);return e1(t,{code:eH.invalid_type,expected:eW.object,received:t.parsedType}),e2}let{status:t,ctx:r}=this._processInputParams(e),{shape:s,keys:i}=this._getCached(),a=[];if(!(this._def.catchall instanceof tC&&"strip"===this._def.unknownKeys))for(let e in r.data)i.includes(e)||a.push(e);let n=[];for(let e of i){let t=s[e],i=r.data[e];n.push({key:{status:"valid",value:e},value:t._parse(new te(r,i,r.path,e)),alwaysSet:e in r.data})}if(this._def.catchall instanceof tC){let e=this._def.unknownKeys;if("passthrough"===e)for(let e of a)n.push({key:{status:"valid",value:e},value:{status:"valid",value:r.data[e]}});else if("strict"===e)a.length>0&&(e1(r,{code:eH.unrecognized_keys,keys:a}),t.dirty());else if("strip"===e);else throw Error("Internal ZodObject error: invalid unknownKeys value.")}else{let e=this._def.catchall;for(let t of a){let s=r.data[t];n.push({key:{status:"valid",value:t},value:e._parse(new te(r,s,r.path,t)),alwaysSet:t in r.data})}}return r.common.async?Promise.resolve().then(async()=>{let e=[];for(let t of n){let r=await t.key,s=await t.value;e.push({key:r,value:s,alwaysSet:t.alwaysSet})}return e}).then(e=>e4.mergeObjectSync(t,e)):e4.mergeObjectSync(t,n)}get shape(){return this._def.shape()}strict(e){return a.errToObj,new tU({...this._def,unknownKeys:"strict",...void 0!==e?{errorMap:(t,r)=>{let s=this._def.errorMap?.(t,r).message??r.defaultError;return"unrecognized_keys"===t.code?{message:a.errToObj(e).message??s}:{message:s}}}:{}})}strip(){return new tU({...this._def,unknownKeys:"strip"})}passthrough(){return new tU({...this._def,unknownKeys:"passthrough"})}extend(e){return new tU({...this._def,shape:()=>({...this._def.shape(),...e})})}merge(e){return new tU({unknownKeys:e._def.unknownKeys,catchall:e._def.catchall,shape:()=>({...this._def.shape(),...e._def.shape()}),typeName:o.ZodObject})}setKey(e,t){return this.augment({[e]:t})}catchall(e){return new tU({...this._def,catchall:e})}pick(e){let t={};for(let r of s.objectKeys(e))e[r]&&this.shape[r]&&(t[r]=this.shape[r]);return new tU({...this._def,shape:()=>t})}omit(e){let t={};for(let r of s.objectKeys(this.shape))e[r]||(t[r]=this.shape[r]);return new tU({...this._def,shape:()=>t})}deepPartial(){return function e(t){if(t instanceof tU){let r={};for(let s in t.shape){let i=t.shape[s];r[s]=tV.create(e(i))}return new tU({...t._def,shape:()=>r})}return t instanceof tD?new tD({...t._def,type:e(t.element)}):t instanceof tV?tV.create(e(t.unwrap())):t instanceof tQ?tQ.create(e(t.unwrap())):t instanceof t$?t$.create(t.items.map(t=>e(t))):t}(this)}partial(e){let t={};for(let r of s.objectKeys(this.shape)){let s=this.shape[r];e&&!e[r]?t[r]=s:t[r]=s.optional()}return new tU({...this._def,shape:()=>t})}required(e){let t={};for(let r of s.objectKeys(this.shape))if(e&&!e[r])t[r]=this.shape[r];else{let e=this.shape[r];for(;e instanceof tV;)e=e._def.innerType;t[r]=e}return new tU({...this._def,shape:()=>t})}keyof(){return tJ(s.objectKeys(this.shape))}}tU.create=(e,t)=>new tU({shape:()=>e,unknownKeys:"strip",catchall:tC.create(),typeName:o.ZodObject,...tr(t)}),tU.strictCreate=(e,t)=>new tU({shape:()=>e,unknownKeys:"strict",catchall:tC.create(),typeName:o.ZodObject,...tr(t)}),tU.lazycreate=(e,t)=>new tU({shape:e,unknownKeys:"strip",catchall:tC.create(),typeName:o.ZodObject,...tr(t)});class tj extends ts{_parse(e){let{ctx:t}=this._processInputParams(e),r=this._def.options;if(t.common.async)return Promise.all(r.map(async e=>{let r={...t,common:{...t.common,issues:[]},parent:null};return{result:await e._parseAsync({data:t.data,path:t.path,parent:r}),ctx:r}})).then(function(e){for(let t of e)if("valid"===t.result.status)return t.result;for(let r of e)if("dirty"===r.result.status)return t.common.issues.push(...r.ctx.common.issues),r.result;let r=e.map(e=>new ez(e.ctx.common.issues));return e1(t,{code:eH.invalid_union,unionErrors:r}),e2});{let e;let s=[];for(let i of r){let r={...t,common:{...t.common,issues:[]},parent:null},a=i._parseSync({data:t.data,path:t.path,parent:r});if("valid"===a.status)return a;"dirty"!==a.status||e||(e={result:a,ctx:r}),r.common.issues.length&&s.push(r.common.issues)}if(e)return t.common.issues.push(...e.ctx.common.issues),e.result;let i=s.map(e=>new ez(e));return e1(t,{code:eH.invalid_union,unionErrors:i}),e2}}get options(){return this._def.options}}tj.create=(e,t)=>new tj({options:e,typeName:o.ZodUnion,...tr(t)});var tP=e=>{if(e instanceof tB)return tP(e.schema);if(e instanceof tG)return tP(e.innerType());if(e instanceof tH)return[e.value];if(e instanceof tz)return e.options;if(e instanceof tK)return s.objectValues(e.enum);if(e instanceof t0)return tP(e._def.innerType);if(e instanceof tx)return[void 0];else if(e instanceof tI)return[null];else if(e instanceof tV)return[void 0,...tP(e.unwrap())];else if(e instanceof tQ)return[null,...tP(e.unwrap())];else if(e instanceof t9)return tP(e.unwrap());else if(e instanceof t6)return tP(e.unwrap());else if(e instanceof t1)return tP(e._def.innerType);else return[]};class tF extends ts{_parse(e){let{ctx:t}=this._processInputParams(e);if(t.parsedType!==eW.object)return e1(t,{code:eH.invalid_type,expected:eW.object,received:t.parsedType}),e2;let r=this.discriminator,s=t.data[r],i=this.optionsMap.get(s);return i?t.common.async?i._parseAsync({data:t.data,path:t.path,parent:t}):i._parseSync({data:t.data,path:t.path,parent:t}):(e1(t,{code:eH.invalid_union_discriminator,options:Array.from(this.optionsMap.keys()),path:[r]}),e2)}get discriminator(){return this._def.discriminator}get options(){return this._def.options}get optionsMap(){return this._def.optionsMap}static create(e,t,r){let s=new Map;for(let r of t){let t=tP(r.shape[e]);if(!t.length)throw Error(`A discriminator value for key \`${e}\` could not be extracted from all schema options`);for(let i of t){if(s.has(i))throw Error(`Discriminator property ${String(e)} has duplicate value ${String(i)}`);s.set(i,r)}}return new tF({typeName:o.ZodDiscriminatedUnion,discriminator:e,options:t,optionsMap:s,...tr(r)})}}class tM extends ts{_parse(e){let{status:t,ctx:r}=this._processInputParams(e),i=(e,i)=>{if(e6(e)||e6(i))return e2;let a=function e(t,r){let i=eB(t),a=eB(r);if(t===r)return{valid:!0,data:t};if(i===eW.object&&a===eW.object){let i=s.objectKeys(r),a=s.objectKeys(t).filter(e=>-1!==i.indexOf(e)),n={...t,...r};for(let s of a){let i=e(t[s],r[s]);if(!i.valid)return{valid:!1};n[s]=i.data}return{valid:!0,data:n}}if(i===eW.array&&a===eW.array){if(t.length!==r.length)return{valid:!1};let s=[];for(let i=0;i<t.length;i++){let a=e(t[i],r[i]);if(!a.valid)return{valid:!1};s.push(a.data)}return{valid:!0,data:s}}return i===eW.date&&a===eW.date&&+t==+r?{valid:!0,data:t}:{valid:!1}}(e.value,i.value);return a.valid?((e5(e)||e5(i))&&t.dirty(),{status:t.value,value:a.data}):(e1(r,{code:eH.invalid_intersection_types}),e2)};return r.common.async?Promise.all([this._def.left._parseAsync({data:r.data,path:r.path,parent:r}),this._def.right._parseAsync({data:r.data,path:r.path,parent:r})]).then(([e,t])=>i(e,t)):i(this._def.left._parseSync({data:r.data,path:r.path,parent:r}),this._def.right._parseSync({data:r.data,path:r.path,parent:r}))}}tM.create=(e,t,r)=>new tM({left:e,right:t,typeName:o.ZodIntersection,...tr(r)});class t$ extends ts{_parse(e){let{status:t,ctx:r}=this._processInputParams(e);if(r.parsedType!==eW.array)return e1(r,{code:eH.invalid_type,expected:eW.array,received:r.parsedType}),e2;if(r.data.length<this._def.items.length)return e1(r,{code:eH.too_small,minimum:this._def.items.length,inclusive:!0,exact:!1,type:"array"}),e2;!this._def.rest&&r.data.length>this._def.items.length&&(e1(r,{code:eH.too_big,maximum:this._def.items.length,inclusive:!0,exact:!1,type:"array"}),t.dirty());let s=[...r.data].map((e,t)=>{let s=this._def.items[t]||this._def.rest;return s?s._parse(new te(r,e,r.path,t)):null}).filter(e=>!!e);return r.common.async?Promise.all(s).then(e=>e4.mergeArray(t,e)):e4.mergeArray(t,s)}get items(){return this._def.items}rest(e){return new t$({...this._def,rest:e})}}t$.create=(e,t)=>{if(!Array.isArray(e))throw Error("You must pass an array of schemas to z.tuple([ ... ])");return new t$({items:e,typeName:o.ZodTuple,rest:null,...tr(t)})};class tX extends ts{get keySchema(){return this._def.keyType}get valueSchema(){return this._def.valueType}_parse(e){let{status:t,ctx:r}=this._processInputParams(e);if(r.parsedType!==eW.object)return e1(r,{code:eH.invalid_type,expected:eW.object,received:r.parsedType}),e2;let s=[],i=this._def.keyType,a=this._def.valueType;for(let e in r.data)s.push({key:i._parse(new te(r,e,r.path,e)),value:a._parse(new te(r,r.data[e],r.path,e)),alwaysSet:e in r.data});return r.common.async?e4.mergeObjectAsync(t,s):e4.mergeObjectSync(t,s)}get element(){return this._def.valueType}static create(e,t,r){return new tX(t instanceof ts?{keyType:e,valueType:t,typeName:o.ZodRecord,...tr(r)}:{keyType:tb.create(),valueType:e,typeName:o.ZodRecord,...tr(t)})}}class tZ extends ts{get keySchema(){return this._def.keyType}get valueSchema(){return this._def.valueType}_parse(e){let{status:t,ctx:r}=this._processInputParams(e);if(r.parsedType!==eW.map)return e1(r,{code:eH.invalid_type,expected:eW.map,received:r.parsedType}),e2;let s=this._def.keyType,i=this._def.valueType,a=[...r.data.entries()].map(([e,t],a)=>({key:s._parse(new te(r,e,r.path,[a,"key"])),value:i._parse(new te(r,t,r.path,[a,"value"]))}));if(r.common.async){let e=new Map;return Promise.resolve().then(async()=>{for(let r of a){let s=await r.key,i=await r.value;if("aborted"===s.status||"aborted"===i.status)return e2;("dirty"===s.status||"dirty"===i.status)&&t.dirty(),e.set(s.value,i.value)}return{status:t.value,value:e}})}{let e=new Map;for(let r of a){let s=r.key,i=r.value;if("aborted"===s.status||"aborted"===i.status)return e2;("dirty"===s.status||"dirty"===i.status)&&t.dirty(),e.set(s.value,i.value)}return{status:t.value,value:e}}}}tZ.create=(e,t,r)=>new tZ({valueType:t,keyType:e,typeName:o.ZodMap,...tr(r)});class tq extends ts{_parse(e){let{status:t,ctx:r}=this._processInputParams(e);if(r.parsedType!==eW.set)return e1(r,{code:eH.invalid_type,expected:eW.set,received:r.parsedType}),e2;let s=this._def;null!==s.minSize&&r.data.size<s.minSize.value&&(e1(r,{code:eH.too_small,minimum:s.minSize.value,type:"set",inclusive:!0,exact:!1,message:s.minSize.message}),t.dirty()),null!==s.maxSize&&r.data.size>s.maxSize.value&&(e1(r,{code:eH.too_big,maximum:s.maxSize.value,type:"set",inclusive:!0,exact:!1,message:s.maxSize.message}),t.dirty());let i=this._def.valueType;function a(e){let r=new Set;for(let s of e){if("aborted"===s.status)return e2;"dirty"===s.status&&t.dirty(),r.add(s.value)}return{status:t.value,value:r}}let n=[...r.data.values()].map((e,t)=>i._parse(new te(r,e,r.path,t)));return r.common.async?Promise.all(n).then(e=>a(e)):a(n)}min(e,t){return new tq({...this._def,minSize:{value:e,message:a.toString(t)}})}max(e,t){return new tq({...this._def,maxSize:{value:e,message:a.toString(t)}})}size(e,t){return this.min(e,t).max(e,t)}nonempty(e){return this.min(1,e)}}tq.create=(e,t)=>new tq({valueType:e,minSize:null,maxSize:null,typeName:o.ZodSet,...tr(t)});class tW extends ts{constructor(){super(...arguments),this.validate=this.implement}_parse(e){let{ctx:t}=this._processInputParams(e);if(t.parsedType!==eW.function)return e1(t,{code:eH.invalid_type,expected:eW.function,received:t.parsedType}),e2;function r(e,r){return eQ({data:e,path:t.path,errorMaps:[t.common.contextualErrorMap,t.schemaErrorMap,eY,eK].filter(e=>!!e),issueData:{code:eH.invalid_arguments,argumentsError:r}})}function s(e,r){return eQ({data:e,path:t.path,errorMaps:[t.common.contextualErrorMap,t.schemaErrorMap,eY,eK].filter(e=>!!e),issueData:{code:eH.invalid_return_type,returnTypeError:r}})}let i={errorMap:t.common.contextualErrorMap},a=t.data;if(this._def.returns instanceof tY){let e=this;return e3(async function(...t){let n=new ez([]),o=await e._def.args.parseAsync(t,i).catch(e=>{throw n.addIssue(r(t,e)),n}),l=await Reflect.apply(a,this,o);return await e._def.returns._def.type.parseAsync(l,i).catch(e=>{throw n.addIssue(s(l,e)),n})})}{let e=this;return e3(function(...t){let n=e._def.args.safeParse(t,i);if(!n.success)throw new ez([r(t,n.error)]);let o=Reflect.apply(a,this,n.data),l=e._def.returns.safeParse(o,i);if(!l.success)throw new ez([s(o,l.error)]);return l.data})}}parameters(){return this._def.args}returnType(){return this._def.returns}args(...e){return new tW({...this._def,args:t$.create(e).rest(tA.create())})}returns(e){return new tW({...this._def,returns:e})}implement(e){return this.parse(e)}strictImplement(e){return this.parse(e)}static create(e,t,r){return new tW({args:e||t$.create([]).rest(tA.create()),returns:t||tA.create(),typeName:o.ZodFunction,...tr(r)})}}class tB extends ts{get schema(){return this._def.getter()}_parse(e){let{ctx:t}=this._processInputParams(e);return this._def.getter()._parse({data:t.data,path:t.path,parent:t})}}tB.create=(e,t)=>new tB({getter:e,typeName:o.ZodLazy,...tr(t)});class tH extends ts{_parse(e){if(e.data!==this._def.value){let t=this._getOrReturnCtx(e);return e1(t,{received:t.data,code:eH.invalid_literal,expected:this._def.value}),e2}return{status:"valid",value:e.data}}get value(){return this._def.value}}function tJ(e,t){return new tz({values:e,typeName:o.ZodEnum,...tr(t)})}tH.create=(e,t)=>new tH({value:e,typeName:o.ZodLiteral,...tr(t)});class tz extends ts{_parse(e){if("string"!=typeof e.data){let t=this._getOrReturnCtx(e),r=this._def.values;return e1(t,{expected:s.joinValues(r),received:t.parsedType,code:eH.invalid_type}),e2}if(this._cache||(this._cache=new Set(this._def.values)),!this._cache.has(e.data)){let t=this._getOrReturnCtx(e),r=this._def.values;return e1(t,{received:t.data,code:eH.invalid_enum_value,options:r}),e2}return e3(e.data)}get options(){return this._def.values}get enum(){let e={};for(let t of this._def.values)e[t]=t;return e}get Values(){let e={};for(let t of this._def.values)e[t]=t;return e}get Enum(){let e={};for(let t of this._def.values)e[t]=t;return e}extract(e,t=this._def){return tz.create(e,{...this._def,...t})}exclude(e,t=this._def){return tz.create(this.options.filter(t=>!e.includes(t)),{...this._def,...t})}}tz.create=tJ;class tK extends ts{_parse(e){let t=s.getValidEnumValues(this._def.values),r=this._getOrReturnCtx(e);if(r.parsedType!==eW.string&&r.parsedType!==eW.number){let e=s.objectValues(t);return e1(r,{expected:s.joinValues(e),received:r.parsedType,code:eH.invalid_type}),e2}if(this._cache||(this._cache=new Set(s.getValidEnumValues(this._def.values))),!this._cache.has(e.data)){let e=s.objectValues(t);return e1(r,{received:r.data,code:eH.invalid_enum_value,options:e}),e2}return e3(e.data)}get enum(){return this._def.values}}tK.create=(e,t)=>new tK({values:e,typeName:o.ZodNativeEnum,...tr(t)});class tY extends ts{unwrap(){return this._def.type}_parse(e){let{ctx:t}=this._processInputParams(e);return t.parsedType!==eW.promise&&!1===t.common.async?(e1(t,{code:eH.invalid_type,expected:eW.promise,received:t.parsedType}),e2):e3((t.parsedType===eW.promise?t.data:Promise.resolve(t.data)).then(e=>this._def.type.parseAsync(e,{path:t.path,errorMap:t.common.contextualErrorMap})))}}tY.create=(e,t)=>new tY({type:e,typeName:o.ZodPromise,...tr(t)});class tG extends ts{innerType(){return this._def.schema}sourceType(){return this._def.schema._def.typeName===o.ZodEffects?this._def.schema.sourceType():this._def.schema}_parse(e){let{status:t,ctx:r}=this._processInputParams(e),i=this._def.effect||null,a={addIssue:e=>{e1(r,e),e.fatal?t.abort():t.dirty()},get path(){return r.path}};if(a.addIssue=a.addIssue.bind(a),"preprocess"===i.type){let e=i.transform(r.data,a);if(r.common.async)return Promise.resolve(e).then(async e=>{if("aborted"===t.value)return e2;let s=await this._def.schema._parseAsync({data:e,path:r.path,parent:r});return"aborted"===s.status?e2:"dirty"===s.status||"dirty"===t.value?e9(s.value):s});{if("aborted"===t.value)return e2;let s=this._def.schema._parseSync({data:e,path:r.path,parent:r});return"aborted"===s.status?e2:"dirty"===s.status||"dirty"===t.value?e9(s.value):s}}if("refinement"===i.type){let e=e=>{let t=i.refinement(e,a);if(r.common.async)return Promise.resolve(t);if(t instanceof Promise)throw Error("Async refinement encountered during synchronous parse operation. Use .parseAsync instead.");return e};if(!1!==r.common.async)return this._def.schema._parseAsync({data:r.data,path:r.path,parent:r}).then(r=>"aborted"===r.status?e2:("dirty"===r.status&&t.dirty(),e(r.value).then(()=>({status:t.value,value:r.value}))));{let s=this._def.schema._parseSync({data:r.data,path:r.path,parent:r});return"aborted"===s.status?e2:("dirty"===s.status&&t.dirty(),e(s.value),{status:t.value,value:s.value})}}if("transform"===i.type){if(!1!==r.common.async)return this._def.schema._parseAsync({data:r.data,path:r.path,parent:r}).then(e=>e8(e)?Promise.resolve(i.transform(e.value,a)).then(e=>({status:t.value,value:e})):e2);{let e=this._def.schema._parseSync({data:r.data,path:r.path,parent:r});if(!e8(e))return e2;let s=i.transform(e.value,a);if(s instanceof Promise)throw Error("Asynchronous transform encountered during synchronous parse operation. Use .parseAsync instead.");return{status:t.value,value:s}}}s.assertNever(i)}}tG.create=(e,t,r)=>new tG({schema:e,typeName:o.ZodEffects,effect:t,...tr(r)}),tG.createWithPreprocess=(e,t,r)=>new tG({schema:t,effect:{type:"preprocess",transform:e},typeName:o.ZodEffects,...tr(r)});class tV extends ts{_parse(e){return this._getType(e)===eW.undefined?e3(void 0):this._def.innerType._parse(e)}unwrap(){return this._def.innerType}}tV.create=(e,t)=>new tV({innerType:e,typeName:o.ZodOptional,...tr(t)});class tQ extends ts{_parse(e){return this._getType(e)===eW.null?e3(null):this._def.innerType._parse(e)}unwrap(){return this._def.innerType}}tQ.create=(e,t)=>new tQ({innerType:e,typeName:o.ZodNullable,...tr(t)});class t0 extends ts{_parse(e){let{ctx:t}=this._processInputParams(e),r=t.data;return t.parsedType===eW.undefined&&(r=this._def.defaultValue()),this._def.innerType._parse({data:r,path:t.path,parent:t})}removeDefault(){return this._def.innerType}}t0.create=(e,t)=>new t0({innerType:e,typeName:o.ZodDefault,defaultValue:"function"==typeof t.default?t.default:()=>t.default,...tr(t)});class t1 extends ts{_parse(e){let{ctx:t}=this._processInputParams(e),r={...t,common:{...t.common,issues:[]}},s=this._def.innerType._parse({data:r.data,path:r.path,parent:{...r}});return e7(s)?s.then(e=>({status:"valid",value:"valid"===e.status?e.value:this._def.catchValue({get error(){return new ez(r.common.issues)},input:r.data})})):{status:"valid",value:"valid"===s.status?s.value:this._def.catchValue({get error(){return new ez(r.common.issues)},input:r.data})}}removeCatch(){return this._def.innerType}}t1.create=(e,t)=>new t1({innerType:e,typeName:o.ZodCatch,catchValue:"function"==typeof t.catch?t.catch:()=>t.catch,...tr(t)});class t4 extends ts{_parse(e){if(this._getType(e)!==eW.nan){let t=this._getOrReturnCtx(e);return e1(t,{code:eH.invalid_type,expected:eW.nan,received:t.parsedType}),e2}return{status:"valid",value:e.data}}}t4.create=e=>new t4({typeName:o.ZodNaN,...tr(e)});var t2=Symbol("zod_brand");class t9 extends ts{_parse(e){let{ctx:t}=this._processInputParams(e),r=t.data;return this._def.type._parse({data:r,path:t.path,parent:t})}unwrap(){return this._def.type}}class t3 extends ts{_parse(e){let{status:t,ctx:r}=this._processInputParams(e);if(r.common.async)return(async()=>{let e=await this._def.in._parseAsync({data:r.data,path:r.path,parent:r});return"aborted"===e.status?e2:"dirty"===e.status?(t.dirty(),e9(e.value)):this._def.out._parseAsync({data:e.value,path:r.path,parent:r})})();{let e=this._def.in._parseSync({data:r.data,path:r.path,parent:r});return"aborted"===e.status?e2:"dirty"===e.status?(t.dirty(),{status:"dirty",value:e.value}):this._def.out._parseSync({data:e.value,path:r.path,parent:r})}}static create(e,t){return new t3({in:e,out:t,typeName:o.ZodPipeline})}}class t6 extends ts{_parse(e){let t=this._def.innerType._parse(e),r=e=>(e8(e)&&(e.value=Object.freeze(e.value)),e);return e7(t)?t.then(e=>r(e)):r(t)}unwrap(){return this._def.innerType}}function t5(e,t){let r="function"==typeof e?e(t):"string"==typeof e?{message:e}:e;return"string"==typeof r?{message:r}:r}function t8(e,t={},r){return e?tO.create().superRefine((s,i)=>{let a=e(s);if(a instanceof Promise)return a.then(e=>{if(!e){let e=t5(t,s),a=e.fatal??r??!0;i.addIssue({code:"custom",...e,fatal:a})}});if(!a){let e=t5(t,s),a=e.fatal??r??!0;i.addIssue({code:"custom",...e,fatal:a})}}):tO.create()}t6.create=(e,t)=>new t6({innerType:e,typeName:o.ZodReadonly,...tr(t)});var t7={object:tU.lazycreate};!function(e){e.ZodString="ZodString",e.ZodNumber="ZodNumber",e.ZodNaN="ZodNaN",e.ZodBigInt="ZodBigInt",e.ZodBoolean="ZodBoolean",e.ZodDate="ZodDate",e.ZodSymbol="ZodSymbol",e.ZodUndefined="ZodUndefined",e.ZodNull="ZodNull",e.ZodAny="ZodAny",e.ZodUnknown="ZodUnknown",e.ZodNever="ZodNever",e.ZodVoid="ZodVoid",e.ZodArray="ZodArray",e.ZodObject="ZodObject",e.ZodUnion="ZodUnion",e.ZodDiscriminatedUnion="ZodDiscriminatedUnion",e.ZodIntersection="ZodIntersection",e.ZodTuple="ZodTuple",e.ZodRecord="ZodRecord",e.ZodMap="ZodMap",e.ZodSet="ZodSet",e.ZodFunction="ZodFunction",e.ZodLazy="ZodLazy",e.ZodLiteral="ZodLiteral",e.ZodEnum="ZodEnum",e.ZodEffects="ZodEffects",e.ZodNativeEnum="ZodNativeEnum",e.ZodOptional="ZodOptional",e.ZodNullable="ZodNullable",e.ZodDefault="ZodDefault",e.ZodCatch="ZodCatch",e.ZodPromise="ZodPromise",e.ZodBranded="ZodBranded",e.ZodPipeline="ZodPipeline",e.ZodReadonly="ZodReadonly"}(o||(o={}));var re=(e,t={message:`Input not instance of ${e.name}`})=>t8(t=>t instanceof e,t),rt=tb.create,rr=tw.create,rs=t4.create,ri=tN.create,ra=tS.create,rn=tk.create,ro=tL.create,rl=tx.create,rd=tI.create,rc=tO.create,ru=tA.create,rh=tC.create,rp=tR.create,rm=tD.create,rf=tU.create,rg=tU.strictCreate,ry=tj.create,r_=tF.create,rT=tM.create,rE=t$.create,rv=tX.create,rb=tZ.create,rw=tq.create,rN=tW.create,rS=tB.create,rk=tH.create,rL=tz.create,rx=tK.create,rI=tY.create,rO=tG.create,rA=tV.create,rC=tQ.create,rR=tG.createWithPreprocess,rD=t3.create,rU=()=>rt().optional(),rj=()=>rr().optional(),rP=()=>ra().optional(),rF={string:e=>tb.create({...e,coerce:!0}),number:e=>tw.create({...e,coerce:!0}),boolean:e=>tS.create({...e,coerce:!0}),bigint:e=>tN.create({...e,coerce:!0}),date:e=>tk.create({...e,coerce:!0})},rM=e2;class r${async execute(e,t){let r=this.schema.safeParse(e);if(!r.success)return{toolCallId:"",content:`Invalid parameters: ${r.error.message}`,isError:!0};try{let e=(0,l.resolve)(t.workingDirectory,r.data.file_path),s=await (0,h.readFile)(e,"utf-8");if(r.data.offset||r.data.limit){let e=s.split(`
23
23
  `),t=(r.data.offset??1)-1,i=r.data.limit?t+r.data.limit:void 0;s=e.slice(t,i).join(`
24
- `)}return{toolCallId:"",content:s}}catch(e){return{toolCallId:"",content:e instanceof Error?e.message:"Failed to read file",isError:!0}}}schemaToParams(){return{type:"object",properties:{file_path:{type:"string",description:"The absolute path to the file to read"},offset:{type:"number",description:"Line number to start reading from"},limit:{type:"number",description:"Maximum number of lines to read"}},required:["file_path"]}}constructor(){this.name="read_file",this.description="Read the contents of a file at the given path",this.schema=eR.object({file_path:eR.string().describe("The absolute path to the file to read"),offset:eR.number().optional().describe("Line number to start reading from"),limit:eR.number().optional().describe("Maximum number of lines to read")}),this.parameters=this.schemaToParams()}}class rO{async execute(e,t){let r=this.schema.safeParse(e);if(!r.success)return{toolCallId:"",content:`Invalid parameters: ${r.error.message}`,isError:!0};try{let e=(0,l.resolve)(t.workingDirectory,r.data.file_path);return await (0,h.writeFile)(e,r.data.content,"utf-8"),{toolCallId:"",content:`File written: ${e}`}}catch(e){return{toolCallId:"",content:e instanceof Error?e.message:"Failed to write file",isError:!0}}}constructor(){this.name="write_file",this.description="Write content to a file at the given path",this.schema=eR.object({file_path:eR.string().describe("The absolute path to the file to write"),content:eR.string().describe("The content to write to the file")}),this.parameters={type:"object",properties:{file_path:{type:"string",description:"The absolute path to the file to write"},content:{type:"string",description:"The content to write to the file"}},required:["file_path","content"]}}}class rA{async execute(e,t){let r=this.schema.safeParse(e);if(!r.success)return{toolCallId:"",content:`Invalid parameters: ${r.error.message}`,isError:!0};let{file_path:s,old_string:i,new_string:a}=r.data;try{let e=(0,l.resolve)(t.workingDirectory,s),r=await (0,h.readFile)(e,"utf-8"),n=r.split(i).length-1;if(0===n)return{toolCallId:"",content:`Error: old_string not found in ${s}. Make sure the string matches exactly (including whitespace and indentation).`,isError:!0};if(n>1)return{toolCallId:"",content:`Error: old_string matches ${n} locations in ${s}. Add more surrounding context to make it unique.`,isError:!0};let o=r.replace(i,a);await (0,h.writeFile)(e,o,"utf-8");let d=i.split(`
24
+ `)}return{toolCallId:"",content:s}}catch(e){return{toolCallId:"",content:e instanceof Error?e.message:"Failed to read file",isError:!0}}}schemaToParams(){return{type:"object",properties:{file_path:{type:"string",description:"The absolute path to the file to read"},offset:{type:"number",description:"Line number to start reading from"},limit:{type:"number",description:"Maximum number of lines to read"}},required:["file_path"]}}constructor(){this.name="read_file",this.description="Read the contents of a file at the given path",this.schema=eq.object({file_path:eq.string().describe("The absolute path to the file to read"),offset:eq.number().optional().describe("Line number to start reading from"),limit:eq.number().optional().describe("Maximum number of lines to read")}),this.parameters=this.schemaToParams()}}class rX{async execute(e,t){let r=this.schema.safeParse(e);if(!r.success)return{toolCallId:"",content:`Invalid parameters: ${r.error.message}`,isError:!0};try{let e=(0,l.resolve)(t.workingDirectory,r.data.file_path);return await (0,h.writeFile)(e,r.data.content,"utf-8"),{toolCallId:"",content:`File written: ${e}`}}catch(e){return{toolCallId:"",content:e instanceof Error?e.message:"Failed to write file",isError:!0}}}constructor(){this.name="write_file",this.description="Write content to a file at the given path",this.schema=eq.object({file_path:eq.string().describe("The absolute path to the file to write"),content:eq.string().describe("The content to write to the file")}),this.parameters={type:"object",properties:{file_path:{type:"string",description:"The absolute path to the file to write"},content:{type:"string",description:"The content to write to the file"}},required:["file_path","content"]}}}class rZ{async execute(e,t){let r=this.schema.safeParse(e);if(!r.success)return{toolCallId:"",content:`Invalid parameters: ${r.error.message}`,isError:!0};let{file_path:s,old_string:i,new_string:a}=r.data;try{let e=(0,l.resolve)(t.workingDirectory,s),r=await (0,h.readFile)(e,"utf-8"),n=r.split(i).length-1;if(0===n)return{toolCallId:"",content:`Error: old_string not found in ${s}. Make sure the string matches exactly (including whitespace and indentation).`,isError:!0};if(n>1)return{toolCallId:"",content:`Error: old_string matches ${n} locations in ${s}. Add more surrounding context to make it unique.`,isError:!0};let o=r.replace(i,a);await (0,h.writeFile)(e,o,"utf-8");let d=i.split(`
25
25
  `).length,c=a.split(`
26
26
  `).length;return{toolCallId:"",content:`Replaced in ${s} (${d} line${1!==d?"s":""} → ${c} line${1!==c?"s":""})`}}catch(e){return{toolCallId:"",content:e instanceof Error?e.message:"Failed to edit file",isError:!0}}}constructor(){this.name="str_replace",this.description=`Replace an exact string in a file with new content.
27
27
  Use this instead of write_file when making targeted edits to existing files.
28
28
  The old_string must match the file content EXACTLY (including whitespace and indentation).
29
29
  Include 2-3 lines of context before and after to uniquely identify the target location.
30
- If old_string appears multiple times, use more context to make it unique.`,this.schema=eR.object({file_path:eR.string().describe("Absolute path to the file to edit"),old_string:eR.string().describe("The exact string to find and replace. Must be unique in the file."),new_string:eR.string().describe("The replacement string")}),this.parameters={type:"object",properties:{file_path:{type:"string",description:"Absolute path to the file to edit"},old_string:{type:"string",description:"The exact string to find and replace. Must be unique in the file."},new_string:{type:"string",description:"The replacement string"}},required:["file_path","old_string","new_string"]}}}class rR{async execute(e,t){let r=this.schema.safeParse(e);return r.success?new Promise(e=>{(0,d.exec)(r.data.command,{cwd:t.workingDirectory,timeout:r.data.timeout,encoding:"utf-8",maxBuffer:10485760},(t,r,s)=>{t?e({toolCallId:"",content:s||t.message,isError:!0}):e({toolCallId:"",content:r||"(no output)"})})}):{toolCallId:"",content:`Invalid parameters: ${r.error.message}`,isError:!0}}constructor(){this.name="bash",this.description="Execute a bash command in the working directory",this.schema=eR.object({command:eR.string().describe("The bash command to execute"),timeout:eR.number().optional().default(12e4).describe("Timeout in milliseconds")}),this.parameters={type:"object",properties:{command:{type:"string",description:"The bash command to execute"},timeout:{type:"number",description:"Timeout in milliseconds (default 120000)"}},required:["command"]}}}class rC{async execute(e,t){let r=this.schema.safeParse(e);if(!r.success)return{toolCallId:"",content:`Invalid parameters: ${r.error.message}`,isError:!0};try{let e=await fetch(r.data.url,{headers:{"User-Agent":"customer-agent/0.1",Accept:"text/html, application/xhtml+xml"},signal:AbortSignal.timeout(3e4)});if(!e.ok)return{toolCallId:"",content:`HTTP ${e.status}: ${e.statusText}`,isError:!0};let t=await e.text(),s=this.stripHtml(t).slice(0,5e4);return{toolCallId:"",content:`Content from ${r.data.url}:
30
+ If old_string appears multiple times, use more context to make it unique.`,this.schema=eq.object({file_path:eq.string().describe("Absolute path to the file to edit"),old_string:eq.string().describe("The exact string to find and replace. Must be unique in the file."),new_string:eq.string().describe("The replacement string")}),this.parameters={type:"object",properties:{file_path:{type:"string",description:"Absolute path to the file to edit"},old_string:{type:"string",description:"The exact string to find and replace. Must be unique in the file."},new_string:{type:"string",description:"The replacement string"}},required:["file_path","old_string","new_string"]}}}class rq{async execute(e,t){let r=this.schema.safeParse(e);return r.success?new Promise(e=>{(0,d.exec)(r.data.command,{cwd:t.workingDirectory,timeout:r.data.timeout,encoding:"utf-8",maxBuffer:10485760},(t,r,s)=>{t?e({toolCallId:"",content:s||t.message,isError:!0}):e({toolCallId:"",content:r||"(no output)"})})}):{toolCallId:"",content:`Invalid parameters: ${r.error.message}`,isError:!0}}constructor(){this.name="bash",this.description="Execute a bash command in the working directory",this.schema=eq.object({command:eq.string().describe("The bash command to execute"),timeout:eq.number().optional().default(12e4).describe("Timeout in milliseconds")}),this.parameters={type:"object",properties:{command:{type:"string",description:"The bash command to execute"},timeout:{type:"number",description:"Timeout in milliseconds (default 120000)"}},required:["command"]}}}class rW{async execute(e,t){let r=this.schema.safeParse(e);if(!r.success)return{toolCallId:"",content:`Invalid parameters: ${r.error.message}`,isError:!0};try{let e=await fetch(r.data.url,{headers:{"User-Agent":"customer-agent/0.1",Accept:"text/html, application/xhtml+xml"},signal:AbortSignal.timeout(3e4)});if(!e.ok)return{toolCallId:"",content:`HTTP ${e.status}: ${e.statusText}`,isError:!0};let t=await e.text(),s=this.stripHtml(t).slice(0,5e4);return{toolCallId:"",content:`Content from ${r.data.url}:
31
31
 
32
32
  ${s}`}}catch(e){return{toolCallId:"",content:e instanceof Error?e.message:"Failed to fetch URL",isError:!0}}}stripHtml(e){return e.replace(/<script[^>]*>[\s\S]*?<\/script>/gi,"").replace(/<style[^>]*>[\s\S]*?<\/style>/gi,"").replace(/<[^>]+>/g," ").replace(/&nbsp;/g," ").replace(/&amp;/g,"&").replace(/&lt;/g,"<").replace(/&gt;/g,">").replace(/&quot;/g,'"').replace(/\s{2,}/g,`
33
33
  `).replace(/\n{3,}/g,`
34
34
 
35
- `).trim()}constructor(){this.name="web_fetch",this.description="Fetch content from a URL and process into markdown",this.schema=eR.object({url:eR.string().url().describe("The URL to fetch content from"),prompt:eR.string().describe("What information to extract from the page")}),this.parameters={type:"object",properties:{url:{type:"string",description:"The URL to fetch content from"},prompt:{type:"string",description:"What information to extract from the page"}},required:["url","prompt"]}}}function rD(e){return e.replace(/<[^>]+>/g,"")}function rU(e){return e.replace(/&lt;/g,"<").replace(/&gt;/g,">").replace(/&quot;/g,'"').replace(/&#39;|&apos;/g,"'").replace(/&nbsp;/g," ").replace(/&amp;/g,"&")}class rj{async execute(e,t){let r=this.schema.safeParse(e);if(!r.success)return{toolCallId:"",content:`Invalid parameters: ${r.error.message}`,isError:!0};let s=[],i=!1;for(let e of[this.searchDuckDuckGo,this.searchBing])try{let t=await e.call(this,r.data.query);if(i=!0,t.length>0)return{toolCallId:"",content:t.map((e,t)=>`${t+1}. ${e.title}
35
+ `).trim()}constructor(){this.name="web_fetch",this.description="Fetch content from a URL and process into markdown",this.schema=eq.object({url:eq.string().url().describe("The URL to fetch content from"),prompt:eq.string().describe("What information to extract from the page")}),this.parameters={type:"object",properties:{url:{type:"string",description:"The URL to fetch content from"},prompt:{type:"string",description:"What information to extract from the page"}},required:["url","prompt"]}}}function rB(e){return e.replace(/<[^>]+>/g,"")}function rH(e){return e.replace(/&lt;/g,"<").replace(/&gt;/g,">").replace(/&quot;/g,'"').replace(/&#39;|&apos;/g,"'").replace(/&nbsp;/g," ").replace(/&amp;/g,"&")}class rJ{async execute(e,t){let r=this.schema.safeParse(e);if(!r.success)return{toolCallId:"",content:`Invalid parameters: ${r.error.message}`,isError:!0};let s=[],i=!1;for(let e of[this.searchDuckDuckGo,this.searchBing])try{let t=await e.call(this,r.data.query);if(i=!0,t.length>0)return{toolCallId:"",content:t.map((e,t)=>`${t+1}. ${e.title}
36
36
  ${e.snippet}
37
37
  ${e.url}`).join(`
38
38
 
39
- `)}}catch(e){s.push(function(e){if(!(e instanceof Error))return"Search failed";let t=e.cause,r=t instanceof Error?t.message:"string"==typeof t?t:"";return r?`${e.message}: ${r}`:e.message}(e))}return!i&&s.length>0?{toolCallId:"",content:`Search failed: ${s.join(" | ")}`,isError:!0}:{toolCallId:"",content:"No results found."}}async searchDuckDuckGo(e){let t=await fetch(`https://html.duckduckgo.com/html/?q=${encodeURIComponent(e)}`,{headers:{"User-Agent":"customer-agent/0.1"},signal:AbortSignal.timeout(15e3)});if(!t.ok)throw Error(`DuckDuckGo HTTP ${t.status}`);return this.parseDuckDuckGoResults(await t.text())}async searchBing(e){let t=await fetch(`https://www.bing.com/search?q=${encodeURIComponent(e)}`,{headers:{"User-Agent":"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0 Safari/537.36",Accept:"text/html"},signal:AbortSignal.timeout(15e3)});if(!t.ok)throw Error(`Bing HTTP ${t.status}`);return this.parseBingResults(await t.text())}parseDuckDuckGoResults(e){let t,r;let s=[],i=/<a[^>]*class="result__a"[^>]*href="([^"]*)"[^>]*>([\s\S]*?)<\/a>/gi,a=/<a[^>]*class="result__snippet"[^>]*>([\s\S]*?)<\/a>/gi;for(;null!==(t=i.exec(e));){let e=t[1],r=rU(rD(t[2])).trim();e&&r&&s.push({title:r,url:e,snippet:""})}let n=0;for(;null!==(r=a.exec(e))&&n<s.length;)s[n].snippet=rU(rD(r[1])).trim(),n++;return s.slice(0,10)}parseBingResults(e){let t;let r=[],s=/<li class="b_algo"[\s\S]*?<\/li>/gi;for(;null!==(t=s.exec(e))&&r.length<10;){let e=t[0],s=/<h2[^>]*>\s*<a[^>]*href="([^"]+)"[^>]*>([\s\S]*?)<\/a>/.exec(e);if(!s)continue;let i=rU(rD(s[2])).trim(),a=/<p[^>]*>([\s\S]*?)<\/p>/.exec(e),n=a?rU(rD(a[1])).trim():"",o=function(e){let t=rU(e),r=/[?&]u=([^&]+)/.exec(t)?.[1];if(r&&r.length>2)try{let e=r.slice(2).replace(/-/g,"+").replace(/_/g,"/"),t=atob(e);if(/^https?:\/\//.test(t))return t}catch{}return t}(s[1]);o&&i&&r.push({title:i,snippet:n,url:o})}return r}constructor(){this.name="web_search",this.description="Search the web for information using DuckDuckGo HTML, falling back to Bing",this.schema=eR.object({query:eR.string().min(2).describe("The search query")}),this.parameters={type:"object",properties:{query:{type:"string",description:"The search query"}},required:["query"]}}}class rP{async execute(e,t){let r;let s=this.schema.safeParse(e);if(!s.success)return{toolCallId:"",content:`Invalid parameters: ${s.error.message}`,isError:!0};let{pattern:i,path:a=".",recursive:n=!0,case_sensitive:o=!1,include:d,max_results:c=50}=s.data,u=(0,l.resolve)(t.workingDirectory,a);try{r=new RegExp(i,o?"g":"gi")}catch{return{toolCallId:"",content:`Invalid regex pattern: ${i}`,isError:!0}}let p=d?d.split(",").map(e=>e.trim().replace(/^\*?\.?/,".")):null,m=[],f=async e=>{if(!(m.length>=c))try{let s=(await (0,h.readFile)(e,"utf-8")).split(`
39
+ `)}}catch(e){s.push(function(e){if(!(e instanceof Error))return"Search failed";let t=e.cause,r=t instanceof Error?t.message:"string"==typeof t?t:"";return r?`${e.message}: ${r}`:e.message}(e))}return!i&&s.length>0?{toolCallId:"",content:`Search failed: ${s.join(" | ")}`,isError:!0}:{toolCallId:"",content:"No results found."}}async searchDuckDuckGo(e){let t=await fetch(`https://html.duckduckgo.com/html/?q=${encodeURIComponent(e)}`,{headers:{"User-Agent":"customer-agent/0.1"},signal:AbortSignal.timeout(15e3)});if(!t.ok)throw Error(`DuckDuckGo HTTP ${t.status}`);return this.parseDuckDuckGoResults(await t.text())}async searchBing(e){let t=await fetch(`https://www.bing.com/search?q=${encodeURIComponent(e)}`,{headers:{"User-Agent":"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0 Safari/537.36",Accept:"text/html"},signal:AbortSignal.timeout(15e3)});if(!t.ok)throw Error(`Bing HTTP ${t.status}`);return this.parseBingResults(await t.text())}parseDuckDuckGoResults(e){let t,r;let s=[],i=/<a[^>]*class="result__a"[^>]*href="([^"]*)"[^>]*>([\s\S]*?)<\/a>/gi,a=/<a[^>]*class="result__snippet"[^>]*>([\s\S]*?)<\/a>/gi;for(;null!==(t=i.exec(e));){let e=t[1],r=rH(rB(t[2])).trim();e&&r&&s.push({title:r,url:e,snippet:""})}let n=0;for(;null!==(r=a.exec(e))&&n<s.length;)s[n].snippet=rH(rB(r[1])).trim(),n++;return s.slice(0,10)}parseBingResults(e){let t;let r=[],s=/<li class="b_algo"[\s\S]*?<\/li>/gi;for(;null!==(t=s.exec(e))&&r.length<10;){let e=t[0],s=/<h2[^>]*>\s*<a[^>]*href="([^"]+)"[^>]*>([\s\S]*?)<\/a>/.exec(e);if(!s)continue;let i=rH(rB(s[2])).trim(),a=/<p[^>]*>([\s\S]*?)<\/p>/.exec(e),n=a?rH(rB(a[1])).trim():"",o=function(e){let t=rH(e),r=/[?&]u=([^&]+)/.exec(t)?.[1];if(r&&r.length>2)try{let e=r.slice(2).replace(/-/g,"+").replace(/_/g,"/"),t=atob(e);if(/^https?:\/\//.test(t))return t}catch{}return t}(s[1]);o&&i&&r.push({title:i,snippet:n,url:o})}return r}constructor(){this.name="web_search",this.description="Search the web for information using DuckDuckGo HTML, falling back to Bing",this.schema=eq.object({query:eq.string().min(2).describe("The search query")}),this.parameters={type:"object",properties:{query:{type:"string",description:"The search query"}},required:["query"]}}}class rz{async execute(e,t){let r;let s=this.schema.safeParse(e);if(!s.success)return{toolCallId:"",content:`Invalid parameters: ${s.error.message}`,isError:!0};let{pattern:i,path:a=".",recursive:n=!0,case_sensitive:o=!1,include:d,max_results:c=50}=s.data,u=(0,l.resolve)(t.workingDirectory,a);try{r=new RegExp(i,o?"g":"gi")}catch{return{toolCallId:"",content:`Invalid regex pattern: ${i}`,isError:!0}}let p=d?d.split(",").map(e=>e.trim().replace(/^\*?\.?/,".")):null,m=[],f=async e=>{if(!(m.length>=c))try{let s=(await (0,h.readFile)(e,"utf-8")).split(`
40
40
  `),i=(0,l.relative)(t.workingDirectory,e);for(let e=0;e<s.length&&!(m.length>=c);e++)r.lastIndex=0,r.test(s[e])&&m.push(`${i}:${e+1}: ${s[e].trim()}`)}catch{}},g=async e=>{let t;if(!(m.length>=c)){try{t=await (0,h.readdir)(e)}catch{return}for(let r of t){if(m.length>=c)break;if(r.startsWith(".")||"node_modules"===r||"dist"===r)continue;let t=(0,l.join)(e,r),s=await (0,h.stat)(t).catch(()=>null);s&&(s.isDirectory()?n&&await g(t):(!p||p.some(e=>r.endsWith(e)))&&await f(t))}}};try{if((await (0,h.stat)(u)).isFile()?await f(u):await g(u),0===m.length)return{toolCallId:"",content:`No matches found for "${i}"`};let e=`Found ${m.length}${m.length>=c?"+":""} match(es) for "${i}":
41
41
 
42
42
  `;return{toolCallId:"",content:e+m.join(`
43
- `)}}catch(e){return{toolCallId:"",content:e instanceof Error?e.message:"Search failed",isError:!0}}}schemaToParams(){return{type:"object",properties:{pattern:{type:"string",description:"The search pattern (string or regex)"},path:{type:"string",description:"File or directory to search in (defaults to working directory)"},recursive:{type:"boolean",description:"Search recursively in directories (default: true)"},case_sensitive:{type:"boolean",description:"Case-sensitive search (default: false)"},include:{type:"string",description:"File extension filter, e.g. '.ts' or '.ts,.js'"},max_results:{type:"number",description:"Maximum number of matching lines to return (default: 50)"}},required:["pattern"]}}constructor(){this.name="grep",this.description="Search for a keyword or regex pattern in files. Returns matching lines with file path and line number.",this.schema=eR.object({pattern:eR.string().describe("The search pattern (string or regex)"),path:eR.string().optional().describe("File or directory to search in (defaults to working directory)"),recursive:eR.boolean().optional().describe("Search recursively in directories (default: true)"),case_sensitive:eR.boolean().optional().describe("Case-sensitive search (default: false)"),include:eR.string().optional().describe("Glob-style file extension filter, e.g. '.ts' or '.ts,.js'"),max_results:eR.number().optional().describe("Maximum number of matching lines to return (default: 50)")}),this.parameters=this.schemaToParams()}}function rF(e){return e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&").replace(/\\\*/g,"[^/]*")}var rM=new Set(["node_modules",".git","dist",".next","build","__pycache__",".cache"]);class r${schemaToParams(){let e=this.schema.shape,t={};for(let[r,s]of Object.entries(e)){let e=s._def,i=e.description??"",a=e.innerType??s,n=a._def?.typeName??e.typeName??"",o="string";"ZodNumber"===n?o="number":"ZodBoolean"===n&&(o="boolean"),t[r]={type:o,description:i}}return{type:"object",properties:t,required:["pattern"]}}async execute(e,t){let r;let s=this.schema.safeParse(e);if(!s.success)return{toolCallId:"",content:`Invalid parameters: ${s.error.message}`,isError:!0};let{pattern:i,path:a=".",max_results:n=200,include_hidden:o=!1}=s.data,d=(0,l.resolve)(t.workingDirectory,a);try{r=function(e){let t="",r=0;for(;r<e.length;){let s=e[r];if("*"===s)"*"===e[r+1]?(t+=".*","/"===e[r+=2]&&r++):(t+="[^/]*",r++);else if("?"===s)t+="[^/]",r++;else if("{"===s){let s=e.indexOf("}",r);if(-1===s)t+="\\{",r++;else{let i=e.slice(r+1,s).split(",").map(rF);t+=`(?:${i.join("|")})`,r=s+1}}else"[]*+.^$|()\\".includes(s)&&"["!==s?t+="\\"+s:t+=s,r++}return RegExp(`^${t}$`)}(i)}catch{return{toolCallId:"",content:`Invalid glob pattern: ${i}`,isError:!0}}let c=[],u=Date.now()+3e4,p=!1,m=async e=>{let s;if(!(c.length>=n)&&!p){if(t.signal?.aborted){p=!0;return}try{s=await (0,h.readdir)(e)}catch{return}for(let t of s){let s;if(c.length>=n||p)break;if(!o&&t.startsWith(".")||rM.has(t))continue;if(Date.now()>u){p=!0;break}let i=(0,l.join)(e,t);try{s=await (0,h.stat)(i)}catch{continue}let a=(0,l.relative)(d,i);s.isDirectory()?await m(i):r.test(a)&&c.push(a)}}};if(await m(d),0===c.length){let e=p?` (timed out after 30s — try narrowing the 'path' to a smaller directory)`:"";return{toolCallId:"",content:`No files found matching pattern '${i}' in ${a}${e}`}}let f=c.sort(),g=f.length>=n?`
43
+ `)}}catch(e){return{toolCallId:"",content:e instanceof Error?e.message:"Search failed",isError:!0}}}schemaToParams(){return{type:"object",properties:{pattern:{type:"string",description:"The search pattern (string or regex)"},path:{type:"string",description:"File or directory to search in (defaults to working directory)"},recursive:{type:"boolean",description:"Search recursively in directories (default: true)"},case_sensitive:{type:"boolean",description:"Case-sensitive search (default: false)"},include:{type:"string",description:"File extension filter, e.g. '.ts' or '.ts,.js'"},max_results:{type:"number",description:"Maximum number of matching lines to return (default: 50)"}},required:["pattern"]}}constructor(){this.name="grep",this.description="Search for a keyword or regex pattern in files. Returns matching lines with file path and line number.",this.schema=eq.object({pattern:eq.string().describe("The search pattern (string or regex)"),path:eq.string().optional().describe("File or directory to search in (defaults to working directory)"),recursive:eq.boolean().optional().describe("Search recursively in directories (default: true)"),case_sensitive:eq.boolean().optional().describe("Case-sensitive search (default: false)"),include:eq.string().optional().describe("Glob-style file extension filter, e.g. '.ts' or '.ts,.js'"),max_results:eq.number().optional().describe("Maximum number of matching lines to return (default: 50)")}),this.parameters=this.schemaToParams()}}function rK(e){return e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&").replace(/\\\*/g,"[^/]*")}var rY=new Set(["node_modules",".git","dist",".next","build","__pycache__",".cache"]);class rG{schemaToParams(){let e=this.schema.shape,t={};for(let[r,s]of Object.entries(e)){let e=s._def,i=e.description??"",a=e.innerType??s,n=a._def?.typeName??e.typeName??"",o="string";"ZodNumber"===n?o="number":"ZodBoolean"===n&&(o="boolean"),t[r]={type:o,description:i}}return{type:"object",properties:t,required:["pattern"]}}async execute(e,t){let r;let s=this.schema.safeParse(e);if(!s.success)return{toolCallId:"",content:`Invalid parameters: ${s.error.message}`,isError:!0};let{pattern:i,path:a=".",max_results:n=200,include_hidden:o=!1}=s.data,d=(0,l.resolve)(t.workingDirectory,a);try{r=function(e){let t="",r=0;for(;r<e.length;){let s=e[r];if("*"===s)"*"===e[r+1]?(t+=".*","/"===e[r+=2]&&r++):(t+="[^/]*",r++);else if("?"===s)t+="[^/]",r++;else if("{"===s){let s=e.indexOf("}",r);if(-1===s)t+="\\{",r++;else{let i=e.slice(r+1,s).split(",").map(rK);t+=`(?:${i.join("|")})`,r=s+1}}else"[]*+.^$|()\\".includes(s)&&"["!==s?t+="\\"+s:t+=s,r++}return RegExp(`^${t}$`)}(i)}catch{return{toolCallId:"",content:`Invalid glob pattern: ${i}`,isError:!0}}let c=[],u=Date.now()+3e4,p=!1,m=async e=>{let s;if(!(c.length>=n)&&!p){if(t.signal?.aborted){p=!0;return}try{s=await (0,h.readdir)(e)}catch{return}for(let t of s){let s;if(c.length>=n||p)break;if(!o&&t.startsWith(".")||rY.has(t))continue;if(Date.now()>u){p=!0;break}let i=(0,l.join)(e,t);try{s=await (0,h.stat)(i)}catch{continue}let a=(0,l.relative)(d,i);s.isDirectory()?await m(i):r.test(a)&&c.push(a)}}};if(await m(d),0===c.length){let e=p?` (timed out after 30s — try narrowing the 'path' to a smaller directory)`:"";return{toolCallId:"",content:`No files found matching pattern '${i}' in ${a}${e}`}}let f=c.sort(),g=f.length>=n?`
44
44
  (results truncated at ${n})`:"",y=p?`
45
45
  (walk timed out after 30s — results may be incomplete; try narrowing 'path')`:"";return{toolCallId:"",content:f.join(`
46
- `)+g+y}}constructor(){this.name="glob",this.description="List files matching a glob pattern (e.g. **/*.ts, src/**/*.{ts,tsx}, *.md). Returns matching paths relative to the search root. node_modules, .git, dist, and .next are excluded by default.",this.schema=eR.object({pattern:eR.string().describe("Glob pattern, e.g. '**/*.ts', 'src/**/*.{ts,tsx}', '*.md'"),path:eR.string().optional().describe("Directory to search in (default: working directory)"),max_results:eR.number().int().positive().optional().describe("Maximum number of results to return (default: 200)"),include_hidden:eR.boolean().optional().describe("Include hidden files/dirs starting with '.' (default: false)")}),this.parameters=this.schemaToParams()}}class rX{constructor(e){this.name="ask_user",this.description="Ask the user a question and wait for their response. Use this when you need clarification, user preferences, or a decision before proceeding. Provide clear options when possible so the user can quickly select. Use fields when collecting structured values such as model IDs, API keys, or base URLs. The tool blocks until the user answers.",this.schema=eR.object({question:eR.string().min(1).describe("The question to ask the user"),options:eR.array(eR.object({label:eR.string().describe("Short display label for this option"),description:eR.string().describe("Explanation of what this option means or implies")})).optional().describe("2-4 selectable options. If omitted, the user types a free-text answer."),fields:eR.array(eR.object({name:eR.string().min(1).describe("Stable field name returned with the answer"),label:eR.string().min(1).describe("Display label for the input"),description:eR.string().optional().describe("Help text shown below the input"),type:eR.enum(["text","secret"]).optional().describe("Input type (default: text)")})).optional().describe("Editable form fields for collecting structured values such as model ID, API key, or base URL."),multiSelect:eR.boolean().optional().describe("Allow selecting multiple options (default: false)")}),this.parameters={type:"object",properties:{question:{type:"string",description:"The question to ask the user"},options:{type:"array",description:"2-4 selectable options",items:{type:"object",properties:{label:{type:"string",description:"Short display label"},description:{type:"string",description:"What this option means"}},required:["label","description"]}},fields:{type:"array",description:"Editable form fields for structured values",items:{type:"object",properties:{name:{type:"string",description:"Stable field name"},label:{type:"string",description:"Display label"},description:{type:"string",description:"Help text"},type:{type:"string",enum:["text","secret"],description:"Input type"}},required:["name","label"]}},multiSelect:{type:"boolean",description:"Allow selecting multiple options (default: false)"}},required:["question"]},this.askFn=e}async execute(e,t){let r=this.schema.safeParse(e);if(!r.success)return{toolCallId:"",content:`Invalid parameters: ${r.error.message}`,isError:!0};try{let e=await this.askFn({question:r.data.question,options:r.data.options,fields:r.data.fields,multiSelect:r.data.multiSelect,toolCallId:""});return{toolCallId:"",content:`User answered: ${e.answer}`}}catch(e){return{toolCallId:"",content:e instanceof Error?e.message:"Failed to get user response",isError:!0}}}}function rZ(e,t,r,s){for(let s=r;s<=e.length-t.length;s++){let r=!0;for(let i=0;i<t.length;i++)if(e[s+i]!==t[i]){r=!1;break}if(r)return s}if(s&&r<=e.length)for(let s=Math.max(r,e.length-t.length);s<=e.length;s++){let r=!0;for(let i=0;i<t.length;i++)if((s+i<e.length?e[s+i]:"")!==t[i]){r=!1;break}if(r)return s}return null}class rq{async execute(e,t){let r=this.schema.safeParse(e);if(!r.success)return{toolCallId:"",content:`Invalid parameters: ${r.error.message}`,isError:!0};let{patch:s}=r.data;try{let e=function(e){let t=[],r=null,s=null;for(let i of e.split(`
46
+ `)+g+y}}constructor(){this.name="glob",this.description="List files matching a glob pattern (e.g. **/*.ts, src/**/*.{ts,tsx}, *.md). Returns matching paths relative to the search root. node_modules, .git, dist, and .next are excluded by default.",this.schema=eq.object({pattern:eq.string().describe("Glob pattern, e.g. '**/*.ts', 'src/**/*.{ts,tsx}', '*.md'"),path:eq.string().optional().describe("Directory to search in (default: working directory)"),max_results:eq.number().int().positive().optional().describe("Maximum number of results to return (default: 200)"),include_hidden:eq.boolean().optional().describe("Include hidden files/dirs starting with '.' (default: false)")}),this.parameters=this.schemaToParams()}}class rV{constructor(e){this.name="ask_user",this.description="Ask the user a question and wait for their response. Use this when you need clarification, user preferences, or a decision before proceeding. Provide clear options when possible so the user can quickly select. Use fields when collecting structured values such as model IDs, API keys, or base URLs. The tool blocks until the user answers.",this.schema=eq.object({question:eq.string().min(1).describe("The question to ask the user"),options:eq.array(eq.object({label:eq.string().describe("Short display label for this option"),description:eq.string().describe("Explanation of what this option means or implies")})).optional().describe("2-4 selectable options. If omitted, the user types a free-text answer."),fields:eq.array(eq.object({name:eq.string().min(1).describe("Stable field name returned with the answer"),label:eq.string().min(1).describe("Display label for the input"),description:eq.string().optional().describe("Help text shown below the input"),type:eq.enum(["text","secret"]).optional().describe("Input type (default: text)")})).optional().describe("Editable form fields for collecting structured values such as model ID, API key, or base URL."),multiSelect:eq.boolean().optional().describe("Allow selecting multiple options (default: false)")}),this.parameters={type:"object",properties:{question:{type:"string",description:"The question to ask the user"},options:{type:"array",description:"2-4 selectable options",items:{type:"object",properties:{label:{type:"string",description:"Short display label"},description:{type:"string",description:"What this option means"}},required:["label","description"]}},fields:{type:"array",description:"Editable form fields for structured values",items:{type:"object",properties:{name:{type:"string",description:"Stable field name"},label:{type:"string",description:"Display label"},description:{type:"string",description:"Help text"},type:{type:"string",enum:["text","secret"],description:"Input type"}},required:["name","label"]}},multiSelect:{type:"boolean",description:"Allow selecting multiple options (default: false)"}},required:["question"]},this.askFn=e}async execute(e,t){let r=this.schema.safeParse(e);if(!r.success)return{toolCallId:"",content:`Invalid parameters: ${r.error.message}`,isError:!0};try{let e=await this.askFn({question:r.data.question,options:r.data.options,fields:r.data.fields,multiSelect:r.data.multiSelect,toolCallId:""});return{toolCallId:"",content:`User answered: ${e.answer}`}}catch(e){return{toolCallId:"",content:e instanceof Error?e.message:"Failed to get user response",isError:!0}}}}function rQ(e,t,r,s){for(let s=r;s<=e.length-t.length;s++){let r=!0;for(let i=0;i<t.length;i++)if(e[s+i]!==t[i]){r=!1;break}if(r)return s}if(s&&r<=e.length)for(let s=Math.max(r,e.length-t.length);s<=e.length;s++){let r=!0;for(let i=0;i<t.length;i++)if((s+i<e.length?e[s+i]:"")!==t[i]){r=!1;break}if(r)return s}return null}class r0{async execute(e,t){let r=this.schema.safeParse(e);if(!r.success)return{toolCallId:"",content:`Invalid parameters: ${r.error.message}`,isError:!0};let{patch:s}=r.data;try{let e=function(e){let t=[],r=null,s=null;for(let i of e.split(`
47
47
  `))if(i.startsWith("--- "))r&&r.hunks.length>0&&t.push(r),r={oldPath:i.slice(4).replace(/^\t/,""),newPath:"",hunks:[]};else if(i.startsWith("+++ ")&&r)r.newPath=i.slice(4).replace(/^\t/,"");else if(i.startsWith("@@ ")&&r){let e=i.match(/^@@ -(\d+)(?:,(\d+))? \+(\d+)(?:,(\d+))? @@/);e&&(s={oldStart:parseInt(e[1],10),oldLines:[],newStart:parseInt(e[3],10),newLines:[]},r.hunks.push(s))}else if(s){if(i.startsWith("+"))s.newLines.push(i.slice(1));else if(i.startsWith("-"))s.oldLines.push(i.slice(1));else if(i.startsWith(" ")){let e=i.slice(1);s.oldLines.push(e),s.newLines.push(e)}}return r&&r.hunks.length>0&&t.push(r),t}(s);if(0===e.length)return{toolCallId:"",content:"No valid hunks found in patch",isError:!0};let r=[],i=[];for(let s of e){let e;let a=(0,l.resolve)(t.workingDirectory,s.newPath);try{(e=(await (0,h.readFile)(a,"utf-8")).split(`
48
- `)).length>0&&""===e[e.length-1]&&e.pop()}catch(t){if(s.hunks.every(e=>0===e.oldLines.length))e=[];else{i.push(`File not found: ${a}`);continue}}let n=function(e,t,r){let s=[];for(let i of t){let t=i.oldLines,a=i.newLines,n=Math.max(0,i.oldStart-1),o=null;if(t.length>0&&(o=rZ(e,t,n,!1)),null===o&&t.length>0&&""===t[t.length-1]){let r=t.slice(0,-1),s=a;a.length>0&&""===a[a.length-1]&&(s=a.slice(0,-1)),null!==(o=rZ(e,r,n,!0))&&(t=r,a=s)}if(null===o&&(o=rZ(e,t,0,!0)),null!==o)s.push({startIdx:o,oldLen:t.length,newLines:a}),t.length;else if(0===i.oldLines.length){let t=e.length>0&&""===e[e.length-1]?e.length-1:e.length;s.push({startIdx:t,oldLen:0,newLines:i.newLines})}else throw Error(`Failed to find expected lines in ${r}:
48
+ `)).length>0&&""===e[e.length-1]&&e.pop()}catch(t){if(s.hunks.every(e=>0===e.oldLines.length))e=[];else{i.push(`File not found: ${a}`);continue}}let n=function(e,t,r){let s=[];for(let i of t){let t=i.oldLines,a=i.newLines,n=Math.max(0,i.oldStart-1),o=null;if(t.length>0&&(o=rQ(e,t,n,!1)),null===o&&t.length>0&&""===t[t.length-1]){let r=t.slice(0,-1),s=a;a.length>0&&""===a[a.length-1]&&(s=a.slice(0,-1)),null!==(o=rQ(e,r,n,!0))&&(t=r,a=s)}if(null===o&&(o=rQ(e,t,0,!0)),null!==o)s.push({startIdx:o,oldLen:t.length,newLines:a}),t.length;else if(0===i.oldLines.length){let t=e.length>0&&""===e[e.length-1]?e.length-1:e.length;s.push({startIdx:t,oldLen:0,newLines:i.newLines})}else throw Error(`Failed to find expected lines in ${r}:
49
49
  ${i.oldLines.join(`
50
50
  `)}`)}return s.sort((e,t)=>e.startIdx-t.startIdx),s}(e,s.hunks,a),o=(function(e,t){for(let r=t.length-1;r>=0;r--){let{startIdx:s,oldLen:i,newLines:a}=t[r];e.splice(s,i);for(let t=0;t<a.length;t++)e.splice(s+t,0,a[t])}return e})([...e],n).join(`
51
51
  `);o.endsWith(`
@@ -73,14 +73,14 @@ Format:
73
73
  context line
74
74
  -old line
75
75
  +new line
76
- context line`,this.schema=eR.object({patch:eR.string().describe("The unified diff / patch to apply")}),this.parameters={type:"object",properties:{patch:{type:"string",description:"The unified diff / patch to apply"}},required:["patch"]}}}class rW{schemaToParams(){let e=this.schema.shape,t={};for(let[r,s]of Object.entries(e)){let e=s._def,i=e.description??"",a=e.innerType??s,n=a._def?.typeName??e.typeName??"",o="string";"ZodNumber"===n?o="number":"ZodBoolean"===n?o="boolean":"ZodRecord"===n&&(o="object"),t[r]={type:o,description:i}}return{type:"object",properties:t,required:["widget_type","data"]}}async execute(e,t){let r=this.schema.safeParse(e);if(!r.success)return{toolCallId:"",content:`Invalid parameters: ${r.error.message}`,isError:!0};let s=r.data.update_id??`w-${(0,u.randomUUID)().slice(0,8)}`,i=r.data.widget_type,a=r.data.data,n=JSON.stringify({widgetId:s,widgetType:i,data:a});return{toolCallId:"",content:`Widget displayed: ${n}`,metadata:{showWidget:{widgetId:s,widgetType:i,data:a}}}}constructor(){this.name="show_widget",this.description="Display a custom UI card in the chat. Use widget_type to specify the card type and data to pass structured content. Use update_id to update an existing card instead of creating a new one.",this.schema=eR.object({widget_type:eR.string().describe("Card type identifier, e.g. 'storyboard_workbench'"),data:eR.record(eR.unknown()).describe("Structured data for the card to render"),update_id:eR.string().optional().describe("ID of existing widget to update (omit to create new)")}),this.parameters=this.schemaToParams()}}var rB=eR.object({action:eR.string().min(1),payload:eR.record(eR.unknown())});function rH(e){return e instanceof Error?e.message:String(e||"Remote action failed")}function rJ(e){let t=Object.keys(e.inputSchema).length>0?`
76
+ context line`,this.schema=eq.object({patch:eq.string().describe("The unified diff / patch to apply")}),this.parameters={type:"object",properties:{patch:{type:"string",description:"The unified diff / patch to apply"}},required:["patch"]}}}class r1{schemaToParams(){let e=this.schema.shape,t={};for(let[r,s]of Object.entries(e)){let e=s._def,i=e.description??"",a=e.innerType??s,n=a._def?.typeName??e.typeName??"",o="string";"ZodNumber"===n?o="number":"ZodBoolean"===n?o="boolean":"ZodRecord"===n&&(o="object"),t[r]={type:o,description:i}}return{type:"object",properties:t,required:["widget_type","data"]}}async execute(e,t){let r=this.schema.safeParse(e);if(!r.success)return{toolCallId:"",content:`Invalid parameters: ${r.error.message}`,isError:!0};let s=r.data.update_id??`w-${(0,u.randomUUID)().slice(0,8)}`,i=r.data.widget_type,a=r.data.data,n=JSON.stringify({widgetId:s,widgetType:i,data:a});return{toolCallId:"",content:`Widget displayed: ${n}`,metadata:{showWidget:{widgetId:s,widgetType:i,data:a}}}}constructor(){this.name="show_widget",this.description="Display a custom UI card in the chat. Use widget_type to specify the card type and data to pass structured content. Use update_id to update an existing card instead of creating a new one.",this.schema=eq.object({widget_type:eq.string().describe("Card type identifier, e.g. 'storyboard_workbench'"),data:eq.record(eq.unknown()).describe("Structured data for the card to render"),update_id:eq.string().optional().describe("ID of existing widget to update (omit to create new)")}),this.parameters=this.schemaToParams()}}var r4=eq.object({action:eq.string().min(1),payload:eq.record(eq.unknown())});function r2(e){return e instanceof Error?e.message:String(e||"Remote action failed")}function r9(e){let t=Object.keys(e.inputSchema).length>0?`
77
77
  payload schema: ${JSON.stringify(e.inputSchema)}`:"",r=e.examples.length>0?`
78
- examples: ${JSON.stringify(e.examples)}`:"";return`- ${e.scheme}: ${e.purpose}${t}${r}`}class rz{constructor(e={}){this.name="remote_project_action",this.schema=rB,this.parameters={type:"object",properties:{action:{type:"string",description:"Registered remote action name, or remote_job_status to check a job."},payload:{type:"object",description:"Small JSON payload for the registered remote action."}},required:["action","payload"]},this.store=e.store,this.projectId=e.projectId??process.env.AGENT_PROJECT_ID??"default",this.fetchImpl=e.fetchImpl??fetch,this.actionToken=e.actionToken??process.env.AGENT_ACTION_TOKEN}get description(){let e=(this.store?.listEnabledTools(this.projectId)??[]).map(rJ);return`Execute registered remote project actions by scheme. Never pass URLs; this tool resolves URLs from the registry. Use remote_job_status with {jobId} to poll results. Registered actions:
78
+ examples: ${JSON.stringify(e.examples)}`:"";return`- ${e.scheme}: ${e.purpose}${t}${r}`}class r3{constructor(e={}){this.name="remote_project_action",this.schema=r4,this.parameters={type:"object",properties:{action:{type:"string",description:"Registered remote action name, or remote_job_status to check a job."},payload:{type:"object",description:"Small JSON payload for the registered remote action."}},required:["action","payload"]},this.store=e.store,this.projectId=e.projectId??process.env.AGENT_PROJECT_ID??"default",this.fetchImpl=e.fetchImpl??fetch,this.actionToken=e.actionToken??process.env.AGENT_ACTION_TOKEN}get description(){let e=(this.store?.listEnabledTools(this.projectId)??[]).map(r9);return`Execute registered remote project actions by scheme. Never pass URLs; this tool resolves URLs from the registry. Use remote_job_status with {jobId} to poll results. Registered actions:
79
79
  ${e.length?e.join(`
80
- `):"No remote actions are registered."}`}async execute(e,t){let r=this.schema.safeParse(e);if(!r.success)return{toolCallId:"",content:`Invalid parameters: ${r.error.message}`,isError:!0};if(!this.store)return{toolCallId:"",content:"Remote tool registry is not configured",isError:!0};if("remote_job_status"===r.data.action)return this.getJobStatus(r.data.payload);let s=this.projectId,i=this.store.getTool(s,r.data.action);if(!i)return{toolCallId:"",content:`Unknown remote action: ${r.data.action}`,isError:!0};try{let e=this.store.createJob(s,i.scheme,r.data.payload);return this.runJob(e.id,i.url,i.scheme,i.headers,r.data.payload),{toolCallId:"",content:JSON.stringify({status:"queued",jobId:e.id,message:"远程任务已提交"})}}catch(e){return{toolCallId:"",content:rH(e),isError:!0}}}getJobStatus(e){let t="string"==typeof e.jobId?e.jobId:"";if(!t)return{toolCallId:"",content:"remote_job_status requires payload.jobId",isError:!0};let r=this.store?.getJob(t);return r&&r.projectId===this.projectId?"succeeded"===r.status?{toolCallId:"",content:JSON.stringify({status:r.status,result:r.responsePayload})}:"failed"===r.status?{toolCallId:"",content:JSON.stringify({status:r.status,error:r.error})}:{toolCallId:"",content:JSON.stringify({status:r.status})}:{toolCallId:"",content:`Unknown remote job: ${t}`,isError:!0}}async runJob(e,t,r,s,i){try{this.store?.markJobRunning(e);let a=await this.fetchImpl(t,{method:"POST",headers:{...Object.fromEntries(Object.entries(s).filter(([e])=>"authorization"!==e.toLowerCase())),"content-type":"application/json",...this.actionToken?{authorization:`Bearer ${this.actionToken}`}:{}},body:JSON.stringify({action:r,payload:i})}),n=await a.text();if(!a.ok){this.markJobFailedSafely(e,`Remote action failed: ${a.status} ${n}`);return}this.store?.markJobSucceeded(e,function(e){try{let t=JSON.parse(e);return t&&"object"==typeof t&&!Array.isArray(t)?t:{value:t}}catch{return{text:e}}}(n))}catch(t){this.markJobFailedSafely(e,rH(t))}}markJobFailedSafely(e,t){try{this.store?.markJobFailed(e,t)}catch{}}}var rK="SKILL.md",rY=[{dir:".claude",source:"claude"},{dir:".cursor",source:"cursor"},{dir:".github",source:"github"},{dir:".codex",source:"codex"},{dir:".copilot",source:"copilot"}];class rG{async loadFromDirectory(e,t="custom"){let r=[];try{for(let s of(await (0,h.readdir)(e,{withFileTypes:!0}))){let i=(0,l.join)(e,s.name);try{if(!(await (0,h.stat)(i)).isDirectory())continue}catch{continue}let a=(0,l.join)(e,s.name,rK);try{await (0,h.stat)(a);let e=await this.loadMeta(a,t);r.push(e)}catch{}}}catch{}return r}loadFromDirectorySync(e,t="custom"){let r=[];try{for(let s of(0,c.readdirSync)(e,{withFileTypes:!0})){let i=(0,l.join)(e,s.name);try{if(!(0,c.statSync)(i).isDirectory())continue}catch{continue}let a=(0,l.join)(e,s.name,rK);try{(0,c.statSync)(a);let e=(0,c.readFileSync)(a,"utf-8"),s=this.parseFrontmatterOnly(e,a,t);r.push(s)}catch{}}}catch{}return r}loadAllSync(e){let t=(0,p.homedir)(),r=[{dir:(0,l.join)(e,".agent","skills"),source:"project"},{dir:(0,l.join)(t,".agent","skills"),source:"global"},{dir:(0,l.join)(t,".agents","skills"),source:"global"},...rY.map(({dir:t,source:r})=>({dir:(0,l.join)(e,t,"skills"),source:r})),...rY.map(({dir:e,source:r})=>({dir:(0,l.join)(t,e,"skills"),source:r}))],s=new Set,i=[];for(let{dir:e,source:t}of r)for(let r of this.loadFromDirectorySync(e,t))s.has(r.name)||(s.add(r.name),i.push(r));return i}async loadAll(e){let t=(0,p.homedir)(),r=[{dir:(0,l.join)(e,".agent","skills"),source:"project"},{dir:(0,l.join)(t,".agent","skills"),source:"global"},{dir:(0,l.join)(t,".agents","skills"),source:"global"},...rY.map(({dir:t,source:r})=>({dir:(0,l.join)(e,t,"skills"),source:r})),...rY.map(({dir:e,source:r})=>({dir:(0,l.join)(t,e,"skills"),source:r}))],s=new Set,i=[];for(let{dir:e,source:t}of r)for(let r of(await this.loadFromDirectory(e,t)))s.has(r.name)||(s.add(r.name),i.push(r));return i}async loadFromFile(e){let t=await (0,h.readFile)(e,"utf-8");return this.parseSkillMd(t,e)}loadFromFileSync(e){let t=(0,c.readFileSync)(e,"utf-8");return this.parseSkillMd(t,e)}async installSkill(e,t){let r,s;let i=await (0,h.stat)(e);i.isDirectory()?(r=(0,l.join)(e,rK),s=e,await (0,h.stat)(r)):(r=e,s=(0,l.dirname)(e));let a=await this.loadMeta(r,"project"),n=(0,l.join)(t,a.name);return await (0,h.mkdir)(n,{recursive:!0}),i.isDirectory()?await (0,h.cp)(s,n,{recursive:!0}):await (0,h.copyFile)(r,(0,l.join)(n,rK)),{...a,filePath:(0,l.join)(n,rK),source:"global"}}async loadMeta(e,t){let r=await (0,h.readFile)(e,"utf-8");return this.parseFrontmatterOnly(r,e,t)}parseFrontmatterOnly(e,t,r){let s=e.split(`
80
+ `):"No remote actions are registered."}`}async execute(e,t){let r=this.schema.safeParse(e);if(!r.success)return{toolCallId:"",content:`Invalid parameters: ${r.error.message}`,isError:!0};if(!this.store)return{toolCallId:"",content:"Remote tool registry is not configured",isError:!0};if("remote_job_status"===r.data.action)return this.getJobStatus(r.data.payload);let s=this.projectId,i=this.store.getTool(s,r.data.action);if(!i)return{toolCallId:"",content:`Unknown remote action: ${r.data.action}`,isError:!0};try{let e=this.store.createJob(s,i.scheme,r.data.payload);return this.runJob(e.id,i.url,i.scheme,i.headers,r.data.payload),{toolCallId:"",content:JSON.stringify({status:"queued",jobId:e.id,message:"远程任务已提交"})}}catch(e){return{toolCallId:"",content:r2(e),isError:!0}}}getJobStatus(e){let t="string"==typeof e.jobId?e.jobId:"";if(!t)return{toolCallId:"",content:"remote_job_status requires payload.jobId",isError:!0};let r=this.store?.getJob(t);return r&&r.projectId===this.projectId?"succeeded"===r.status?{toolCallId:"",content:JSON.stringify({status:r.status,result:r.responsePayload})}:"failed"===r.status?{toolCallId:"",content:JSON.stringify({status:r.status,error:r.error})}:{toolCallId:"",content:JSON.stringify({status:r.status})}:{toolCallId:"",content:`Unknown remote job: ${t}`,isError:!0}}async runJob(e,t,r,s,i){try{this.store?.markJobRunning(e);let a=await this.fetchImpl(t,{method:"POST",headers:{...Object.fromEntries(Object.entries(s).filter(([e])=>"authorization"!==e.toLowerCase())),"content-type":"application/json",...this.actionToken?{authorization:`Bearer ${this.actionToken}`}:{}},body:JSON.stringify({action:r,payload:i})}),n=await a.text();if(!a.ok){this.markJobFailedSafely(e,`Remote action failed: ${a.status} ${n}`);return}this.store?.markJobSucceeded(e,function(e){try{let t=JSON.parse(e);return t&&"object"==typeof t&&!Array.isArray(t)?t:{value:t}}catch{return{text:e}}}(n))}catch(t){this.markJobFailedSafely(e,r2(t))}}markJobFailedSafely(e,t){try{this.store?.markJobFailed(e,t)}catch{}}}var r6="SKILL.md",r5=[{dir:".claude",source:"claude"},{dir:".cursor",source:"cursor"},{dir:".github",source:"github"},{dir:".codex",source:"codex"},{dir:".copilot",source:"copilot"}];class r8{async loadFromDirectory(e,t="custom"){let r=[];try{for(let s of(await (0,h.readdir)(e,{withFileTypes:!0}))){let i=(0,l.join)(e,s.name);try{if(!(await (0,h.stat)(i)).isDirectory())continue}catch{continue}let a=(0,l.join)(e,s.name,r6);try{await (0,h.stat)(a);let e=await this.loadMeta(a,t);r.push(e)}catch{}}}catch{}return r}loadFromDirectorySync(e,t="custom"){let r=[];try{for(let s of(0,c.readdirSync)(e,{withFileTypes:!0})){let i=(0,l.join)(e,s.name);try{if(!(0,c.statSync)(i).isDirectory())continue}catch{continue}let a=(0,l.join)(e,s.name,r6);try{(0,c.statSync)(a);let e=(0,c.readFileSync)(a,"utf-8"),s=this.parseFrontmatterOnly(e,a,t);r.push(s)}catch{}}}catch{}return r}loadAllSync(e){let t=(0,p.homedir)(),r=[{dir:(0,l.join)(e,".agent","skills"),source:"project"},{dir:(0,l.join)(t,".agent","skills"),source:"global"},{dir:(0,l.join)(t,".agents","skills"),source:"global"},...r5.map(({dir:t,source:r})=>({dir:(0,l.join)(e,t,"skills"),source:r})),...r5.map(({dir:e,source:r})=>({dir:(0,l.join)(t,e,"skills"),source:r}))],s=new Set,i=[];for(let{dir:e,source:t}of r)for(let r of this.loadFromDirectorySync(e,t))s.has(r.name)||(s.add(r.name),i.push(r));return i}async loadAll(e){let t=(0,p.homedir)(),r=[{dir:(0,l.join)(e,".agent","skills"),source:"project"},{dir:(0,l.join)(t,".agent","skills"),source:"global"},{dir:(0,l.join)(t,".agents","skills"),source:"global"},...r5.map(({dir:t,source:r})=>({dir:(0,l.join)(e,t,"skills"),source:r})),...r5.map(({dir:e,source:r})=>({dir:(0,l.join)(t,e,"skills"),source:r}))],s=new Set,i=[];for(let{dir:e,source:t}of r)for(let r of(await this.loadFromDirectory(e,t)))s.has(r.name)||(s.add(r.name),i.push(r));return i}async loadFromFile(e){let t=await (0,h.readFile)(e,"utf-8");return this.parseSkillMd(t,e)}loadFromFileSync(e){let t=(0,c.readFileSync)(e,"utf-8");return this.parseSkillMd(t,e)}async installSkill(e,t){let r,s;let i=await (0,h.stat)(e);i.isDirectory()?(r=(0,l.join)(e,r6),s=e,await (0,h.stat)(r)):(r=e,s=(0,l.dirname)(e));let a=await this.loadMeta(r,"project"),n=(0,l.join)(t,a.name);return await (0,h.mkdir)(n,{recursive:!0}),i.isDirectory()?await (0,h.cp)(s,n,{recursive:!0}):await (0,h.copyFile)(r,(0,l.join)(n,r6)),{...a,filePath:(0,l.join)(n,r6),source:"global"}}async loadMeta(e,t){let r=await (0,h.readFile)(e,"utf-8");return this.parseFrontmatterOnly(r,e,t)}parseFrontmatterOnly(e,t,r){let s=e.split(`
81
81
  `),i=(0,l.basename)(t,(0,l.extname)(t)),a=(0,l.basename)((0,l.dirname)(t)),n="SKILL"===i?a:i,o="",d=[],c=[];if(s[0]?.trim()!=="---")return{name:n,description:o,triggers:[n.toLowerCase()],filePath:t,source:r};for(let e=1;e<s.length&&"---"!==s[e].trim();e++){let t=s[e].indexOf(":");if(-1===t)continue;let r=s[e].slice(0,t).trim().replace(/^#+\s*/,"").toLowerCase(),i=s[e].slice(t+1).trim(),a=i;if(">"===i||"|"===i){let t=[];for(;e+1<s.length&&"---"!==s[e+1].trim();){let r=s[e+1];if(r.length>0&&!/^\s/.test(r)&&r.includes(":"))break;e++,t.push(s[e].trim())}a=t.filter(Boolean).join(" ")}switch(r){case"name":n=a;break;case"description":o=a;break;case"triggers":d.push(...a.split(",").map(e=>e.trim()).filter(Boolean));break;case"tools":c.push(...a.split(",").map(e=>e.trim()).filter(Boolean))}}return{name:n,description:o,triggers:d.length>0?d:[n.toLowerCase()],...c.length>0?{tools:c}:{},filePath:t,source:r}}parseSkillMd(e,t){let r=e.split(`
82
82
  `),s=(0,l.basename)(t,(0,l.extname)(t)),i="",a=[],n="",o=[],d=[],c=0;if(r[0]?.trim()==="---")for(let e=1;e<r.length;e++){if("---"===r[e].trim()){c=e+1;break}d.push(r[e])}for(let e of d){let t=e.indexOf(":");if(-1===t)continue;let r=e.slice(0,t).trim().toLowerCase(),n=e.slice(t+1).trim();switch(r){case"name":s=n;break;case"description":i=n;break;case"triggers":a.push(...n.split(",").map(e=>e.trim()).filter(Boolean));break;case"tools":o.push(...n.split(",").map(e=>e.trim()).filter(Boolean))}}n=r.slice(c).join(`
83
- `).trim();let u=this.inferSource(t);return{name:s,description:i,triggers:a.length>0?a:[s.toLowerCase()],prompt:n,tools:o,filePath:t,source:u}}inferSource(e){let t=(0,p.homedir)(),r=e.replace(/\\/g,"/");if(r.includes("/.agent/skills/"))return r.startsWith(t.replace(/\\/g,"/"))?"global":"project";for(let{dir:e,source:t}of rY)if(r.includes(`/${e}/skills/`))return t;return"custom"}}class rV{constructor(e){this.skills=new Map,this.promptCache=new Map,this.semanticCache=new Map,this.modelProvider=null,this.semanticMatchingEnabled=!0,this.loader=e}setModelProvider(e){this.modelProvider=e,this.semanticCache.clear()}setSemanticMatchingEnabled(e){this.semanticMatchingEnabled=e,this.semanticCache.clear()}register(e){this.skills.set(e.name,e),"prompt"in e&&this.promptCache.set(e.name,e.prompt)}unregister(e){this.skills.delete(e),this.promptCache.delete(e)}get(e){return this.skills.get(e)}getAll(){return Array.from(this.skills.values())}findMatching(e){return this.findMatchingFrom(e,this.skills.values())}findMatchingFrom(e,t){let r=e.toLowerCase(),s=[];for(let e of t)for(let t of e.triggers)if(r.includes(t.toLowerCase())){s.push(e);break}return s}async findMatchingSemantic(e,t){if(!this.modelProvider||0===t.length)return[];let r=t.map(e=>e.name).sort().join("\0"),s=`${e.trim().slice(0,200)}\x01${r}`,i=this.semanticCache.get(s);if(i)return i;let a=t.map((e,t)=>`${t+1}. ${e.name}: ${e.description||"(no description)"}`).join(`
83
+ `).trim();let u=this.inferSource(t);return{name:s,description:i,triggers:a.length>0?a:[s.toLowerCase()],prompt:n,tools:o,filePath:t,source:u}}inferSource(e){let t=(0,p.homedir)(),r=e.replace(/\\/g,"/");if(r.includes("/.agent/skills/"))return r.startsWith(t.replace(/\\/g,"/"))?"global":"project";for(let{dir:e,source:t}of r5)if(r.includes(`/${e}/skills/`))return t;return"custom"}}class r7{constructor(e){this.skills=new Map,this.promptCache=new Map,this.semanticCache=new Map,this.modelProvider=null,this.semanticMatchingEnabled=!0,this.loader=e}setModelProvider(e){this.modelProvider=e,this.semanticCache.clear()}setSemanticMatchingEnabled(e){this.semanticMatchingEnabled=e,this.semanticCache.clear()}register(e){this.skills.set(e.name,e),"prompt"in e&&this.promptCache.set(e.name,e.prompt)}unregister(e){this.skills.delete(e),this.promptCache.delete(e)}get(e){return this.skills.get(e)}getAll(){return Array.from(this.skills.values())}findMatching(e){return this.findMatchingFrom(e,this.skills.values())}findMatchingFrom(e,t){let r=e.toLowerCase(),s=[];for(let e of t)for(let t of e.triggers)if(r.includes(t.toLowerCase())){s.push(e);break}return s}async findMatchingSemantic(e,t){if(!this.modelProvider||0===t.length)return[];let r=t.map(e=>e.name).sort().join("\0"),s=`${e.trim().slice(0,200)}\x01${r}`,i=this.semanticCache.get(s);if(i)return i;let a=t.map((e,t)=>`${t+1}. ${e.name}: ${e.description||"(no description)"}`).join(`
84
84
  `),n=`You are a skill matching assistant. Given the user's input and a list of available skills with their descriptions, determine which skills are semantically relevant to the user's request.
85
85
 
86
86
  Available skills:
@@ -92,7 +92,7 @@ Return ONLY the names of relevant skills, one per line. If none are relevant, re
92
92
  `).map(e=>e.replace(/^\d+\.\s*/,"").replace(/^[\s\-•*]+/,"").trim()).filter(Boolean),a=[],o=new Map(t.map(e=>[e.name,e]));for(let e of i){let t=o.get(e);t&&!a.find(e=>e.name===t.name)&&a.push(t)}return this.semanticCache.set(s,a),a}catch{return[]}}async getSkillPrompts(e,t){let r=t&&t.length>0?new Set(t):null,s=Array.from(this.skills.values()).filter(e=>!r||r.has(e.name)),i=this.findMatchingFrom(e,s),a=e.match(/^\/([\w-]+)/);if(a){let e=s.find(e=>e.name===a[1]);e&&!i.find(t=>t.name===e.name)&&i.unshift(e)}if(0===i.length&&this.semanticMatchingEnabled&&s.length>0){let t=await this.findMatchingSemantic(e,s);t.length>0&&(i=t)}if(0===i.length)return"";let n=[];for(let e of i){let t=this.promptCache.get(e.name);void 0===t&&this.loader&&(t=(await this.loader.loadFromFile(e.filePath)).prompt,this.promptCache.set(e.name,t)),t&&n.push(`## Skill: ${e.name}
93
93
  ${t}`)}return n.join(`
94
94
 
95
- `)}}var rQ=["AGENTS.md","CLAUDE.md","README.md","CONTRIBUTING.md",".cursorrules",".github/copilot-instructions.md"],r0=rQ.map(e=>(0,l.join)(".customer-agent",e)),r1=new Set(["AGENTS.md","CLAUDE.md"]),r4=new Set(["node_modules",".git","dist","build","out","coverage",".cache",".next",".next-dev",".output",".turbo"]);class r2{constructor(e=(0,p.homedir)()){this.homeDirectory=e}async loadProjectContext(e){let t=[],r=new Set;for(let s of[...rQ,...r0]){let i=(0,l.join)(e,s);if(!r.has(i))try{await (0,h.stat)(i);let e=await this.loadFile(i);t.push(e),r.add(i)}catch{}}try{let s=await (0,h.realpath)(e);for(let i of(await this.findClaudeMdFiles(e)))if(!r.has(i))try{let a=await this.loadRecursiveFile(e,s,i);t.push(a),r.add(i)}catch{}}catch{}return t}async loadFile(e){let t=await (0,h.readFile)(e,"utf-8"),r=(0,l.basename)(e),s="other";return r1.has(r)?s="claude_md":"README.md"===r||"CONTRIBUTING.md"===r?s="readme":r.endsWith(".md")?s="config":(r.endsWith(".ts")||r.endsWith(".js")||r.endsWith(".py"))&&(s="code"),{path:e,content:t,type:s}}async loadRecursiveFile(e,t,r){let s=(0,l.relative)(e,r);if(!s||(0,l.isAbsolute)(s)||".."===s||s.startsWith(`..${l.sep}`))throw Error("Recursive context candidate is outside the configured root");let i=(0,l.resolve)(t,s),a=await (0,h.open)(r,c.constants.O_RDONLY|c.constants.O_NOFOLLOW);try{let e=await a.stat();if(!e.isFile())throw Error("Recursive context candidate is not a regular file");let t=await (0,h.realpath)(r);if(t!==i)throw Error("Recursive context candidate traverses a symbolic link");let s=await (0,h.stat)(t);if(s.dev!==e.dev||s.ino!==e.ino)throw Error("Recursive context candidate changed while opening");let n=await a.readFile({encoding:"utf-8"});return{path:r,content:n,type:"claude_md"}}finally{await a.close()}}async findClaudeMdFiles(e){let t=[];try{let[r,s]=await Promise.all([(0,h.realpath)(e),(0,h.realpath)(this.homeDirectory)]);if(r===s)return t}catch{}let r=async e=>{try{let s=await (0,h.readdir)(e,{withFileTypes:!0});for(let i of(s.sort((e,t)=>e.name.localeCompare(t.name)),s)){if(r4.has(i.name)||".claude"===(0,l.basename)(e)&&"worktrees"===i.name)continue;let s=(0,l.join)(e,i.name);i.isDirectory()?await r(s):i.isFile()&&r1.has(i.name)&&t.push(s)}}catch{}};return await r(e),t.sort((e,t)=>e.localeCompare(t))}}var r9=`You are an expert AI assistant with access to tools. You operate in a ReAct loop: reason → act (tool calls) → observe results → reason again.
95
+ `)}}var se=["AGENTS.md","CLAUDE.md","README.md","CONTRIBUTING.md",".cursorrules",".github/copilot-instructions.md"],st=se.map(e=>(0,l.join)(".customer-agent",e)),sr=new Set(["AGENTS.md","CLAUDE.md"]),ss=new Set(["node_modules",".git","dist","build","out","coverage",".cache",".next",".next-dev",".output",".turbo"]);class si{constructor(e=(0,p.homedir)()){this.homeDirectory=e}async loadProjectContext(e){let t=[],r=new Set;for(let s of[...se,...st]){let i=(0,l.join)(e,s);if(!r.has(i))try{await (0,h.stat)(i);let e=await this.loadFile(i);t.push(e),r.add(i)}catch{}}try{let s=await (0,h.realpath)(e);for(let i of(await this.findClaudeMdFiles(e)))if(!r.has(i))try{let a=await this.loadRecursiveFile(e,s,i);t.push(a),r.add(i)}catch{}}catch{}return t}async loadFile(e){let t=await (0,h.readFile)(e,"utf-8"),r=(0,l.basename)(e),s="other";return sr.has(r)?s="claude_md":"README.md"===r||"CONTRIBUTING.md"===r?s="readme":r.endsWith(".md")?s="config":(r.endsWith(".ts")||r.endsWith(".js")||r.endsWith(".py"))&&(s="code"),{path:e,content:t,type:s}}async loadRecursiveFile(e,t,r){let s=(0,l.relative)(e,r);if(!s||(0,l.isAbsolute)(s)||".."===s||s.startsWith(`..${l.sep}`))throw Error("Recursive context candidate is outside the configured root");let i=(0,l.resolve)(t,s),a=await (0,h.open)(r,c.constants.O_RDONLY|c.constants.O_NOFOLLOW);try{let e=await a.stat();if(!e.isFile())throw Error("Recursive context candidate is not a regular file");let t=await (0,h.realpath)(r);if(t!==i)throw Error("Recursive context candidate traverses a symbolic link");let s=await (0,h.stat)(t);if(s.dev!==e.dev||s.ino!==e.ino)throw Error("Recursive context candidate changed while opening");let n=await a.readFile({encoding:"utf-8"});return{path:r,content:n,type:"claude_md"}}finally{await a.close()}}async findClaudeMdFiles(e){let t=[];try{let[r,s]=await Promise.all([(0,h.realpath)(e),(0,h.realpath)(this.homeDirectory)]);if(r===s)return t}catch{}let r=async e=>{try{let s=await (0,h.readdir)(e,{withFileTypes:!0});for(let i of(s.sort((e,t)=>e.name.localeCompare(t.name)),s)){if(ss.has(i.name)||".claude"===(0,l.basename)(e)&&"worktrees"===i.name)continue;let s=(0,l.join)(e,i.name);i.isDirectory()?await r(s):i.isFile()&&sr.has(i.name)&&t.push(s)}}catch{}};return await r(e),t.sort((e,t)=>e.localeCompare(t))}}var sa=`You are an expert AI assistant with access to tools. You operate in a ReAct loop: reason → act (tool calls) → observe results → reason again.
96
96
 
97
97
  ## Core Principles
98
98
 
@@ -134,7 +134,7 @@ ${t}`)}return n.join(`
134
134
 
135
135
  - Respond in the same language the user uses.
136
136
  - After completing a task, summarize what changed concisely — don't repeat file contents.
137
- - If a task requires many steps, state your plan first, then execute.`;class r3{constructor(e){this.contextLoader=e}async assemble(e){let t=e.maxTokens??1e5,r=e.systemPrompt??r9,s=await this.contextLoader.loadProjectContext(e.rootDir),i=this.buildEnvSection(e.rootDir),a=e.tools&&"[]"!==e.tools?`## Available Tools
137
+ - If a task requires many steps, state your plan first, then execute.`;class sn{constructor(e){this.contextLoader=e}async assemble(e){let t=e.maxTokens??1e5,r=e.systemPrompt??sa,s=await this.contextLoader.loadProjectContext(e.rootDir),i=this.buildEnvSection(e.rootDir),a=e.tools&&"[]"!==e.tools?`## Available Tools
138
138
  ${e.tools}`:"",n="";e.skillPrompts&&(n=`## Available Skills
139
139
  ${e.skillPrompts}
140
140
 
@@ -154,32 +154,32 @@ ${e.content.slice(0,n)}
154
154
  ... (truncated)`;return o}fitSectionsToBudget(e,t){let r={systemBase:"",environment:"",projectContext:"",skills:"",embeddedTools:"",memory:""},s=4*t,i=!1;for(let t of["systemBase","environment","projectContext","skills","embeddedTools","memory"]){let a=e[t];if(!a||s<=0)continue;let n=i?2:0;if(s<=n||(s-=n,r[t]=this.truncateText(a,s),s-=r[t].length,i=r[t].length>0||i,r[t].length<a.length))break}return r}joinSections(e){return[e.systemBase,e.environment,e.projectContext,e.skills,e.embeddedTools,e.memory].filter(Boolean).join(`
155
155
 
156
156
  `)}truncateText(e,t){if(t<=0)return"";if(e.length<=t)return e;let r=`
157
- ... (truncated)`;return t<=r.length?e.slice(0,t):e.slice(0,t-r.length)+r}}var r5="MEMORY.md";class r6{constructor(e){this.memoryDir=(0,l.join)(e,"memory")}async ensureDir(){try{await (0,h.mkdir)(this.memoryDir,{recursive:!0})}catch{}}async get(e){let t=(0,l.join)(this.memoryDir,`${e}.md`);try{let r=await (0,h.readFile)(t,"utf-8");return this.parseMemoryFile(e,r)}catch{return null}}async set(e){await this.ensureDir();let t=(0,l.join)(this.memoryDir,`${e.name}.md`),r=this.formatMemoryFile(e);await (0,h.writeFile)(t,r,"utf-8"),await this.updateIndex(e)}async delete(e){let t=(0,l.join)(this.memoryDir,`${e}.md`);try{await (0,h.unlink)(t)}catch{}await this.removeFromIndex(e)}async list(){await this.ensureDir();let e=[];try{for(let t of(await (0,h.readdir)(this.memoryDir))){if(t===r5||!t.endsWith(".md"))continue;let r=(0,l.basename)(t,".md"),s=await this.get(r);s&&e.push(s)}}catch{}return e}async search(e){let t=await this.list(),r=e.toLowerCase(),s=[];for(let e of t){let t=e.content.toLowerCase(),i=e.description.toLowerCase(),a=e.name.toLowerCase(),n=r.split(/\s+/).filter(e=>e.length>1),o=0;for(let e of n)a.includes(e)&&(o+=10),i.includes(e)&&(o+=5),t.includes(e)&&(o+=3);if(o>0){let i=t.indexOf(n[0]??r),a=Math.max(0,i-40),l=Math.min(e.content.length,i+r.length+40),d=(a>0?"...":"")+e.content.slice(a,l)+(l<e.content.length?"...":"");s.push({entry:e,score:o,snippet:d})}}return s.sort((e,t)=>t.score-e.score)}async generateContext(e,t=2e3){let r=await this.search(e);if(0===r.length)return"";let s=r.filter(e=>e.score>=5).slice(0,5);if(0===s.length)return"";let i=[],a=0,n=4*t;for(let e of s){let t=`[${e.entry.type}] ${e.entry.name}: ${e.entry.description}
157
+ ... (truncated)`;return t<=r.length?e.slice(0,t):e.slice(0,t-r.length)+r}}var so="MEMORY.md";class sl{constructor(e){this.memoryDir=(0,l.join)(e,"memory")}async ensureDir(){try{await (0,h.mkdir)(this.memoryDir,{recursive:!0})}catch{}}async get(e){let t=(0,l.join)(this.memoryDir,`${e}.md`);try{let r=await (0,h.readFile)(t,"utf-8");return this.parseMemoryFile(e,r)}catch{return null}}async set(e){await this.ensureDir();let t=(0,l.join)(this.memoryDir,`${e.name}.md`),r=this.formatMemoryFile(e);await (0,h.writeFile)(t,r,"utf-8"),await this.updateIndex(e)}async delete(e){let t=(0,l.join)(this.memoryDir,`${e}.md`);try{await (0,h.unlink)(t)}catch{}await this.removeFromIndex(e)}async list(){await this.ensureDir();let e=[];try{for(let t of(await (0,h.readdir)(this.memoryDir))){if(t===so||!t.endsWith(".md"))continue;let r=(0,l.basename)(t,".md"),s=await this.get(r);s&&e.push(s)}}catch{}return e}async search(e){let t=await this.list(),r=e.toLowerCase(),s=[];for(let e of t){let t=e.content.toLowerCase(),i=e.description.toLowerCase(),a=e.name.toLowerCase(),n=r.split(/\s+/).filter(e=>e.length>1),o=0;for(let e of n)a.includes(e)&&(o+=10),i.includes(e)&&(o+=5),t.includes(e)&&(o+=3);if(o>0){let i=t.indexOf(n[0]??r),a=Math.max(0,i-40),l=Math.min(e.content.length,i+r.length+40),d=(a>0?"...":"")+e.content.slice(a,l)+(l<e.content.length?"...":"");s.push({entry:e,score:o,snippet:d})}}return s.sort((e,t)=>t.score-e.score)}async generateContext(e,t=2e3){let r=await this.search(e);if(0===r.length)return"";let s=r.filter(e=>e.score>=5).slice(0,5);if(0===s.length)return"";let i=[],a=0,n=4*t;for(let e of s){let t=`[${e.entry.type}] ${e.entry.name}: ${e.entry.description}
158
158
  ${e.entry.content}`;if(a+t.length>n)break;i.push(t),a+=t.length}return i.join(`
159
159
 
160
- `)}async getIndex(){let e=(0,l.join)(this.memoryDir,r5);try{return await (0,h.readFile)(e,"utf-8")}catch{return""}}parseMemoryFile(e,t){let r=t.split(`
160
+ `)}async getIndex(){let e=(0,l.join)(this.memoryDir,so);try{return await (0,h.readFile)(e,"utf-8")}catch{return""}}parseMemoryFile(e,t){let r=t.split(`
161
161
  `),s="",i="user",a=t;if(r[0]?.trim()==="---"){let e=1,t=[];for(;e<r.length&&"---"!==r[e].trim();e++)t.push(r[e]);for(let e of t){let t=e.indexOf(":");if(-1===t)continue;let r=e.slice(0,t).trim().toLowerCase(),a=e.slice(t+1).trim();switch(r){case"description":s=a;break;case"type":["user","feedback","project","reference"].includes(a)&&(i=a)}}a=r.slice(e+1).join(`
162
162
  `).trim()}return{name:e,description:s,type:i,content:a,created:new Date().toISOString(),updated:new Date().toISOString()}}formatMemoryFile(e){return["---",`name: ${e.name}`,`description: ${e.description}`,`type: ${e.type}`,"---","",e.content].join(`
163
- `)}async updateIndex(e){await this.ensureDir();let t=(0,l.join)(this.memoryDir,r5),r="";try{r=await (0,h.readFile)(t,"utf-8")}catch{}let s=`- [${e.name}](${e.name}.md) — ${e.description}`;if(r.includes(`${e.name}.md`)){let i=r.split(`
163
+ `)}async updateIndex(e){await this.ensureDir();let t=(0,l.join)(this.memoryDir,so),r="";try{r=await (0,h.readFile)(t,"utf-8")}catch{}let s=`- [${e.name}](${e.name}.md) — ${e.description}`;if(r.includes(`${e.name}.md`)){let i=r.split(`
164
164
  `).map(t=>t.includes(`${e.name}.md`)?s:t);await (0,h.writeFile)(t,i.join(`
165
165
  `),"utf-8")}else await (0,h.writeFile)(t,(r+s+`
166
- `).trimStart(),"utf-8")}async removeFromIndex(e){let t=(0,l.join)(this.memoryDir,r5);try{let r=(await (0,h.readFile)(t,"utf-8")).split(`
166
+ `).trimStart(),"utf-8")}async removeFromIndex(e){let t=(0,l.join)(this.memoryDir,so);try{let r=(await (0,h.readFile)(t,"utf-8")).split(`
167
167
  `).filter(t=>!t.includes(`${e}.md`));await (0,h.writeFile)(t,r.join(`
168
- `),"utf-8")}catch{}}}class r8{constructor(e){this.providerId="anthropic",this.apiKey=e.apiKey,this.baseUrl=e.baseUrl??"https://api.anthropic.com",this.modelId=e.modelId,this.defaultMaxTokens=e.maxTokens??16384,this.defaultTemperature=e.temperature??.7}async *streamChat(e,t){let r=e.filter(e=>"system"===e.role),s=e.filter(e=>"system"!==e.role),i=r.map(e=>e.content).join(`
168
+ `),"utf-8")}catch{}}}class sd{constructor(e){this.providerId="anthropic",this.apiKey=e.apiKey,this.baseUrl=e.baseUrl??"https://api.anthropic.com",this.modelId=e.modelId,this.defaultMaxTokens=e.maxTokens??16384,this.defaultTemperature=e.temperature??.7}async *streamChat(e,t){let r=e.filter(e=>"system"===e.role),s=e.filter(e=>"system"!==e.role),i=r.map(e=>e.content).join(`
169
169
 
170
170
  `),a={model:this.modelId,max_tokens:t?.maxTokens??this.defaultMaxTokens,temperature:t?.temperature??this.defaultTemperature,messages:s.map(e=>this.adaptMessage(e)),stream:!0};if(t?.reasoningEffort&&"off"!==t.reasoningEffort){let e={low:4096,medium:16384,high:32768}[t.reasoningEffort];a.thinking={type:"enabled",budget_tokens:e},a.temperature=1,a.max_tokens=Math.max(a.max_tokens,e+8192)}i&&(a.system=i),t?.tools&&t.tools.length>0&&(a.tools=t.tools.map(e=>({name:e.name,description:e.description,input_schema:e.parameters})));let n=await fetch(`${this.baseUrl}/v1/messages`,{method:"POST",headers:{"Content-Type":"application/json","x-api-key":this.apiKey,"anthropic-version":"2023-06-01"},body:JSON.stringify(a),signal:AbortSignal.timeout(12e4)});if(!n.ok){let e=await n.text().catch(()=>"unknown error");yield{type:"error",message:`Anthropic API error ${n.status}: ${e}`};return}if(!n.body){yield{type:"error",message:"No response body"};return}let o=n.body.getReader(),l=new TextDecoder,d="",c=null,u=()=>{let e;return Promise.race([o.read().finally(()=>clearTimeout(e)),new Promise((t,r)=>{e=setTimeout(()=>r(Error("Stream chunk timeout: no data received for 60s")),6e4)})])};try{for(;;){let{done:e,value:t}=await u();if(e)break;let r=(d+=l.decode(t,{stream:!0})).split(`
171
171
  `);for(let e of(d=r.pop()??"",r)){if(!e.startsWith("data: "))continue;let t=e.slice(6).trim();if("[DONE]"!==t&&t)try{let e=JSON.parse(t);if("content_block_start"===e.type&&e.content_block?.type==="tool_use")c={id:e.content_block.id,name:e.content_block.name,arguments:""};else if("content_block_delta"===e.type)e.delta?.type==="text_delta"?yield{type:"text_chunk",text:e.delta.text}:e.delta?.type==="input_json_delta"&&c&&(c.arguments+=e.delta.partial_json);else if("content_block_stop"===e.type&&c){try{let e=JSON.parse(c.arguments);yield{type:"tool_call",toolCall:{id:c.id,name:c.name,arguments:e}}}catch{yield{type:"error",message:"Failed to parse tool arguments"}}c=null}else if("error"===e.type){yield{type:"error",message:e.error?.message??"Stream error"};return}}catch{}}}yield{type:"text_done"}}catch(e){e instanceof Error&&"AbortError"!==e.name&&(yield{type:"error",message:e.message})}finally{o.releaseLock()}}async countTokens(e){let t=e.filter(e=>"system"===e.role),r=e.filter(e=>"system"!==e.role),s=await fetch(`${this.baseUrl}/v1/messages/count_tokens`,{method:"POST",headers:{"Content-Type":"application/json","x-api-key":this.apiKey,"anthropic-version":"2023-06-01"},body:JSON.stringify({model:this.modelId,messages:r.map(e=>this.adaptMessage(e)),...t.length>0?{system:t.map(e=>e.content).join(`
172
172
 
173
- `)}:{}}),signal:AbortSignal.timeout(3e4)});return s.ok?(await s.json()).input_tokens??this.estimateTokens(e):this.estimateTokens(e)}supportsModel(e){return e.startsWith("claude-")}adaptMessage(e){let t={role:"tool"===e.role?"user":e.role,content:e.content};if(e.images&&e.images.length>0&&!e.toolCalls&&!e.toolCallId){let r=e.images.flatMap(e=>{let t=e.match(/^data:([^;]+);base64,(.+)$/);return t?[{type:"image",source:{type:"base64",media_type:t[1],data:t[2]}}]:[]});return t.content=[...r,{type:"text",text:e.content||""}],t}return e.toolCalls&&e.toolCalls.length>0&&(t.content=e.toolCalls.map(e=>({type:"tool_use",id:e.id,name:e.name,input:e.arguments})),t.role="assistant"),e.toolCallId&&(t.content=[{type:"tool_result",tool_use_id:e.toolCallId,content:e.content}]),t}estimateTokens(e){return e.reduce((e,t)=>e+Math.ceil(t.content.length/4),0)}}class r7{constructor(e){this.providerId="openai",this.apiKey=e.apiKey,this.baseUrl=e.baseUrl??"https://api.openai.com",this.modelId=e.modelId,this.defaultMaxTokens=e.maxTokens??16384,this.defaultTemperature=e.temperature??.7}async *streamChat(e,t){let r=e.map(e=>this.adaptMessage(e)),s={model:this.modelId,messages:r,max_tokens:t?.maxTokens??this.defaultMaxTokens,temperature:t?.temperature??this.defaultTemperature,stream:!0};t?.reasoningEffort&&"off"!==t.reasoningEffort&&(s.reasoning_effort=t.reasoningEffort),t?.tools&&t.tools.length>0&&(s.tools=t.tools.map(e=>({type:"function",function:{name:e.name,description:e.description,parameters:e.parameters}})));let i=await fetch(`${this.baseUrl}/v1/chat/completions`,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${this.apiKey}`},body:JSON.stringify(s),signal:AbortSignal.timeout(3e5)});if(!i.ok){let e=await i.text().catch(()=>"unknown error");yield{type:"error",message:`OpenAI API error ${i.status}: ${e}`};return}if(!i.body){yield{type:"error",message:"No response body"};return}let a=i.body.getReader(),n=new TextDecoder,o="",l=new Map,d=()=>{let e;return Promise.race([a.read().finally(()=>clearTimeout(e)),new Promise((t,r)=>{e=setTimeout(()=>r(Error("Stream chunk timeout: no data received for 60s")),6e4)})])};try{for(;;){let{done:e,value:t}=await d();if(e)break;let r=(o+=n.decode(t,{stream:!0})).split(`
174
- `);for(let e of(o=r.pop()??"",r)){if(!e.startsWith("data: "))continue;let t=e.slice(6).trim();if("[DONE]"!==t&&t)try{let e=JSON.parse(t),r=e.choices?.[0]?.delta;if(!r)continue;if(r.content&&(yield{type:"text_chunk",text:r.content}),r.tool_calls)for(let e of r.tool_calls){let t=e.index;l.has(t)||l.set(t,{id:e.id??"",name:e.function?.name??"",arguments:""});let r=l.get(t);e.id&&(r.id=e.id),e.function?.name&&(r.name=e.function.name),e.function?.arguments&&(r.arguments+=e.function.arguments)}let s=e.choices?.[0]?.finish_reason;if("length"===s&&l.size>0){let e=[...l.values()].map(e=>e.name).join(", ");yield{type:"error",message:`输出被截断(max_tokens 限制),工具 ${e} 的参数 JSON 不完整。请拆分成更小的步骤,或在设置中提高模型输出 token 上限。`},l.clear()}else if("tool_calls"===s||s&&l.size>0){for(let[,e]of l)try{yield{type:"tool_call",toolCall:{id:e.id,name:e.name,arguments:JSON.parse(e.arguments.trim())}}}catch{yield{type:"error",message:`Failed to parse tool arguments for ${e.name}`}}l.clear()}}catch{}}}for(let[,e]of l)try{yield{type:"tool_call",toolCall:{id:e.id,name:e.name,arguments:JSON.parse(e.arguments.trim())}}}catch{yield{type:"error",message:`Failed to parse tool arguments for ${e.name}`}}yield{type:"text_done"}}catch(e){e instanceof Error&&"AbortError"!==e.name&&(yield{type:"error",message:e.message})}finally{a.releaseLock()}}async countTokens(e){return e.reduce((e,t)=>e+Math.ceil(this.stringContent(t.content).length/4),0)}supportsModel(e){return e.startsWith("gpt-")||e.startsWith("o1")||e.startsWith("o3")||e.startsWith("o4")}stringContent(e){if("string"==typeof e)return e;if(null==e)return"";try{return JSON.stringify(e)}catch{return String(e)}}adaptMessage(e){let t=this.stringContent(e.content),r=e.toolCalls&&e.toolCalls.length>0?null:t.length>0?t:" ",s={role:e.role,content:r};return e.images&&e.images.length>0&&!e.toolCalls&&!e.toolCallId&&(s.content=[{type:"text",text:t},...e.images.map(e=>({type:"image_url",image_url:{url:e}}))]),e.toolCalls&&e.toolCalls.length>0&&(s.tool_calls=e.toolCalls.map(e=>({id:e.id,type:"function",function:{name:e.name,arguments:JSON.stringify(e.arguments)}})),s.role="assistant"),e.toolCallId&&(s.role="tool",s.tool_call_id=e.toolCallId),"system"===e.role&&"system"===s.role&&(s.role="system"),s}}class se{constructor(e){this.providerId="deepseek",this.apiKey=e.apiKey,this.baseUrl=e.baseUrl??"https://api.deepseek.com",this.modelId=e.modelId,this.defaultMaxTokens=e.maxTokens??16384,this.defaultTemperature=e.temperature??.7}async *streamChat(e,t){let r=e.map(e=>this.adaptMessage(e)),s={model:this.modelId,messages:r,max_tokens:t?.maxTokens??this.defaultMaxTokens,temperature:t?.temperature??this.defaultTemperature,stream:!0};t?.reasoningEffort&&"off"!==t.reasoningEffort&&(s.reasoning_effort=t.reasoningEffort),t?.tools&&t.tools.length>0&&(s.tools=t.tools.map(e=>({type:"function",function:{name:e.name,description:e.description,parameters:e.parameters}})));let i=await fetch(`${this.baseUrl}/v1/chat/completions`,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${this.apiKey}`},body:JSON.stringify(s),signal:AbortSignal.timeout(3e5)});if(!i.ok){let e=await i.text().catch(()=>"unknown error");yield{type:"error",message:`DeepSeek API error ${i.status}: ${e}`};return}if(!i.body){yield{type:"error",message:"No response body"};return}let a=i.body.getReader(),n=new TextDecoder,o="",l=new Map,d=()=>{let e;return Promise.race([a.read().finally(()=>clearTimeout(e)),new Promise((t,r)=>{e=setTimeout(()=>r(Error("Stream chunk timeout: no data received for 60s")),6e4)})])};try{for(;;){let{done:e,value:t}=await d();if(e)break;let r=(o+=n.decode(t,{stream:!0})).split(`
175
- `);for(let e of(o=r.pop()??"",r)){if(!e.startsWith("data: "))continue;let t=e.slice(6).trim();if("[DONE]"!==t&&t)try{let e=JSON.parse(t),r=e.choices?.[0]?.delta;if(!r)continue;if(r.content&&(yield{type:"text_chunk",text:r.content}),r.tool_calls)for(let e of r.tool_calls){let t=e.index;l.has(t)||l.set(t,{id:e.id??"",name:e.function?.name??"",arguments:""});let r=l.get(t);e.id&&(r.id=e.id),e.function?.name&&(r.name=e.function.name),e.function?.arguments&&(r.arguments+=e.function.arguments)}let s=e.choices?.[0]?.finish_reason;if("length"===s&&l.size>0){let e=[...l.values()].map(e=>e.name).join(", ");yield{type:"error",message:`输出被截断(max_tokens 限制),工具 ${e} 的参数 JSON 不完整。请拆分成更小的步骤,或在设置中提高模型输出 token 上限。`},l.clear()}else if("tool_calls"===s||s&&l.size>0){for(let[,e]of l)try{yield{type:"tool_call",toolCall:{id:e.id,name:e.name,arguments:JSON.parse(e.arguments.trim())}}}catch{yield{type:"error",message:`Failed to parse tool arguments for ${e.name}`}}l.clear()}}catch{}}}for(let[,e]of l)try{yield{type:"tool_call",toolCall:{id:e.id,name:e.name,arguments:JSON.parse(e.arguments.trim())}}}catch{yield{type:"error",message:`Failed to parse tool arguments for ${e.name}`}}yield{type:"text_done"}}catch(e){e instanceof Error&&"AbortError"!==e.name&&(yield{type:"error",message:e.message})}finally{a.releaseLock()}}async countTokens(e){return e.reduce((e,t)=>e+Math.ceil(this.stringContent(t.content).length/4),0)}supportsModel(e){return!0}stringContent(e){if("string"==typeof e)return e;if(null==e)return"";try{return JSON.stringify(e)}catch{return String(e)}}adaptMessage(e){let t=this.stringContent(e.content),r={role:e.role,content:e.toolCalls&&e.toolCalls.length>0?null:t||null};return e.toolCalls&&(r.tool_calls=e.toolCalls.map(e=>({id:e.id,type:"function",function:{name:e.name,arguments:JSON.stringify(e.arguments)}}))),e.toolCallId&&(r.role="tool",r.tool_call_id=e.toolCallId),r}}class st{register(e){this.providers.set(e.providerId,e)}get(e){return this.providers.get(e)}createAndRegister(e,t){let r;switch(e){case"anthropic":r=new r8(t);break;case"openai":r=new r7(t);break;case"deepseek":r=new se(t);break;default:throw Error(`Unknown provider type: ${e}`)}return this.register(r),r}listProviders(){return Array.from(this.providers.values())}findForModel(e){for(let t of this.providers.values())if(t.supportsModel(e))return t}constructor(){this.providers=new Map}}class sr{withWorkingDirectory(e){return this.workingDirectory=e,this}withModelProvider(e){return this.modelProvider=e,this.modelRegistry.register(e),this}withModel(e,t){return this.modelProvider=this.modelRegistry.createAndRegister(e,t),this}withMaxIterations(e){return this.maxIterations=e,this}withMaxTokens(e){return this.maxTokens=e,this}withSystemPrompt(e){return this.systemPrompt=e,this}withSkillsDirectory(e){return this.skillsDir=e,this}withSkillFile(e){return this.skillFiles.push(e),this}withPluginsDirectory(e){return this.pluginsDir=e,this}withMemoryStore(e){return this.memoryStore=e,this}withSessionStore(e){return this.sessionStore=e,this}withRemoteToolStore(e,t=process.env.AGENT_PROJECT_ID??"default"){return this.remoteToolStore=e,this.projectId=t,this}withTool(e){return this.customTools=[...this.customTools.filter(t=>t.name!==e.name),e],this.toolRegistry.register(e),this}createToolRegistry(e,t){let r=new eA;for(let e of(r.register(new rI),r.register(new rO),r.register(new rA),r.register(new rR),r.register(new rC),r.register(new rj),r.register(new rP),r.register(new r$),r.register(new rq),r.register(new rW),this.customTools))r.register(e);return e&&r.register(new rz({store:e,projectId:t})),r}systemPromptWithRemoteTools(e,t){let r=e?.listEnabledTools(t)??[];if(0===r.length)return this.systemPrompt;let s=["可用远程项目工具:",...r.map(rJ)].join(`
173
+ `)}:{}}),signal:AbortSignal.timeout(3e4)});return s.ok?(await s.json()).input_tokens??this.estimateTokens(e):this.estimateTokens(e)}supportsModel(e){return e.startsWith("claude-")}adaptMessage(e){let t={role:"tool"===e.role?"user":e.role,content:e.content};if(e.images&&e.images.length>0&&!e.toolCalls&&!e.toolCallId){let r=e.images.flatMap(e=>{let t=e.match(/^data:([^;]+);base64,(.+)$/);return t?[{type:"image",source:{type:"base64",media_type:t[1],data:t[2]}}]:[]});return t.content=[...r,{type:"text",text:e.content||""}],t}return e.toolCalls&&e.toolCalls.length>0&&(t.content=e.toolCalls.map(e=>({type:"tool_use",id:e.id,name:e.name,input:e.arguments})),t.role="assistant"),e.toolCallId&&(t.content=[{type:"tool_result",tool_use_id:e.toolCallId,content:e.content}]),t}estimateTokens(e){return e.reduce((e,t)=>e+Math.ceil(t.content.length/4),0)}}class sc{constructor(e){this.providerId="openai",this.apiKey=e.apiKey,this.baseUrl=e.baseUrl??"https://api.openai.com",this.modelId=e.modelId,this.defaultMaxTokens=e.maxTokens??16384,this.defaultTemperature=e.temperature??.7}async *streamChat(e,t){let r=e.map(e=>this.adaptMessage(e)),s={model:this.modelId,messages:r,max_tokens:t?.maxTokens??this.defaultMaxTokens,temperature:t?.temperature??this.defaultTemperature,stream:!0};t?.reasoningEffort&&"off"!==t.reasoningEffort&&(s.reasoning_effort=t.reasoningEffort),t?.tools&&t.tools.length>0&&(s.tools=t.tools.map(e=>({type:"function",function:{name:e.name,description:e.description,parameters:e.parameters}})));let i=await fetch(`${this.baseUrl}/v1/chat/completions`,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${this.apiKey}`},body:JSON.stringify(s),signal:AbortSignal.timeout(3e5)});if(!i.ok){let e=await i.text().catch(()=>"unknown error");yield{type:"error",message:`OpenAI API error ${i.status}: ${e}`};return}if(!i.body){yield{type:"error",message:"No response body"};return}let a=i.body.getReader(),n=new TextDecoder,o="",l=new Map,d=()=>{let e;return Promise.race([a.read().finally(()=>clearTimeout(e)),new Promise((t,r)=>{e=setTimeout(()=>r(Error("Stream chunk timeout: no data received for 60s")),6e4)})])};try{for(;;){let{done:e,value:t}=await d();if(e)break;let r=(o+=n.decode(t,{stream:!0})).split(`
174
+ `);for(let e of(o=r.pop()??"",r)){if(!e.startsWith("data: "))continue;let t=e.slice(6).trim();if("[DONE]"!==t&&t)try{let e=JSON.parse(t),r=e.choices?.[0]?.delta;if(!r)continue;if(r.content&&(yield{type:"text_chunk",text:r.content}),r.tool_calls)for(let e of r.tool_calls){let t=e.index;l.has(t)||l.set(t,{id:e.id??"",name:e.function?.name??"",arguments:""});let r=l.get(t);e.id&&(r.id=e.id),e.function?.name&&(r.name=e.function.name),e.function?.arguments&&(r.arguments+=e.function.arguments)}let s=e.choices?.[0]?.finish_reason;if("length"===s&&l.size>0){let e=[...l.values()].map(e=>e.name).join(", ");yield{type:"error",message:`输出被截断(max_tokens 限制),工具 ${e} 的参数 JSON 不完整。请拆分成更小的步骤,或在设置中提高模型输出 token 上限。`},l.clear()}else if("tool_calls"===s||s&&l.size>0){for(let[,e]of l)try{yield{type:"tool_call",toolCall:{id:e.id,name:e.name,arguments:JSON.parse(e.arguments.trim())}}}catch{yield{type:"error",message:`Failed to parse tool arguments for ${e.name}`}}l.clear()}}catch{}}}for(let[,e]of l)try{yield{type:"tool_call",toolCall:{id:e.id,name:e.name,arguments:JSON.parse(e.arguments.trim())}}}catch{yield{type:"error",message:`Failed to parse tool arguments for ${e.name}`}}yield{type:"text_done"}}catch(e){e instanceof Error&&"AbortError"!==e.name&&(yield{type:"error",message:e.message})}finally{a.releaseLock()}}async countTokens(e){return e.reduce((e,t)=>e+Math.ceil(this.stringContent(t.content).length/4),0)}supportsModel(e){return e.startsWith("gpt-")||e.startsWith("o1")||e.startsWith("o3")||e.startsWith("o4")}stringContent(e){if("string"==typeof e)return e;if(null==e)return"";try{return JSON.stringify(e)}catch{return String(e)}}adaptMessage(e){let t=this.stringContent(e.content),r=e.toolCalls&&e.toolCalls.length>0?null:t.length>0?t:" ",s={role:e.role,content:r};return e.images&&e.images.length>0&&!e.toolCalls&&!e.toolCallId&&(s.content=[{type:"text",text:t},...e.images.map(e=>({type:"image_url",image_url:{url:e}}))]),e.toolCalls&&e.toolCalls.length>0&&(s.tool_calls=e.toolCalls.map(e=>({id:e.id,type:"function",function:{name:e.name,arguments:JSON.stringify(e.arguments)}})),s.role="assistant"),e.toolCallId&&(s.role="tool",s.tool_call_id=e.toolCallId),"system"===e.role&&"system"===s.role&&(s.role="system"),s}}class su{constructor(e){this.providerId="deepseek",this.apiKey=e.apiKey,this.baseUrl=e.baseUrl??"https://api.deepseek.com",this.modelId=e.modelId,this.defaultMaxTokens=e.maxTokens??16384,this.defaultTemperature=e.temperature??.7}async *streamChat(e,t){let r=e.map(e=>this.adaptMessage(e)),s={model:this.modelId,messages:r,max_tokens:t?.maxTokens??this.defaultMaxTokens,temperature:t?.temperature??this.defaultTemperature,stream:!0};t?.reasoningEffort&&"off"!==t.reasoningEffort&&(s.reasoning_effort=t.reasoningEffort),t?.tools&&t.tools.length>0&&(s.tools=t.tools.map(e=>({type:"function",function:{name:e.name,description:e.description,parameters:e.parameters}})));let i=await fetch(`${this.baseUrl}/v1/chat/completions`,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${this.apiKey}`},body:JSON.stringify(s),signal:AbortSignal.timeout(3e5)});if(!i.ok){let e=await i.text().catch(()=>"unknown error");yield{type:"error",message:`DeepSeek API error ${i.status}: ${e}`};return}if(!i.body){yield{type:"error",message:"No response body"};return}let a=i.body.getReader(),n=new TextDecoder,o="",l=new Map,d=()=>{let e;return Promise.race([a.read().finally(()=>clearTimeout(e)),new Promise((t,r)=>{e=setTimeout(()=>r(Error("Stream chunk timeout: no data received for 60s")),6e4)})])};try{for(;;){let{done:e,value:t}=await d();if(e)break;let r=(o+=n.decode(t,{stream:!0})).split(`
175
+ `);for(let e of(o=r.pop()??"",r)){if(!e.startsWith("data: "))continue;let t=e.slice(6).trim();if("[DONE]"!==t&&t)try{let e=JSON.parse(t),r=e.choices?.[0]?.delta;if(!r)continue;if(r.content&&(yield{type:"text_chunk",text:r.content}),r.tool_calls)for(let e of r.tool_calls){let t=e.index;l.has(t)||l.set(t,{id:e.id??"",name:e.function?.name??"",arguments:""});let r=l.get(t);e.id&&(r.id=e.id),e.function?.name&&(r.name=e.function.name),e.function?.arguments&&(r.arguments+=e.function.arguments)}let s=e.choices?.[0]?.finish_reason;if("length"===s&&l.size>0){let e=[...l.values()].map(e=>e.name).join(", ");yield{type:"error",message:`输出被截断(max_tokens 限制),工具 ${e} 的参数 JSON 不完整。请拆分成更小的步骤,或在设置中提高模型输出 token 上限。`},l.clear()}else if("tool_calls"===s||s&&l.size>0){for(let[,e]of l)try{yield{type:"tool_call",toolCall:{id:e.id,name:e.name,arguments:JSON.parse(e.arguments.trim())}}}catch{yield{type:"error",message:`Failed to parse tool arguments for ${e.name}`}}l.clear()}}catch{}}}for(let[,e]of l)try{yield{type:"tool_call",toolCall:{id:e.id,name:e.name,arguments:JSON.parse(e.arguments.trim())}}}catch{yield{type:"error",message:`Failed to parse tool arguments for ${e.name}`}}yield{type:"text_done"}}catch(e){e instanceof Error&&"AbortError"!==e.name&&(yield{type:"error",message:e.message})}finally{a.releaseLock()}}async countTokens(e){return e.reduce((e,t)=>e+Math.ceil(this.stringContent(t.content).length/4),0)}supportsModel(e){return!0}stringContent(e){if("string"==typeof e)return e;if(null==e)return"";try{return JSON.stringify(e)}catch{return String(e)}}adaptMessage(e){let t=this.stringContent(e.content),r={role:e.role,content:e.toolCalls&&e.toolCalls.length>0?null:t||null};return e.toolCalls&&(r.tool_calls=e.toolCalls.map(e=>({id:e.id,type:"function",function:{name:e.name,arguments:JSON.stringify(e.arguments)}}))),e.toolCallId&&(r.role="tool",r.tool_call_id=e.toolCallId),r}}class sh{register(e){this.providers.set(e.providerId,e)}get(e){return this.providers.get(e)}createAndRegister(e,t){let r;switch(e){case"anthropic":r=new sd(t);break;case"openai":r=new sc(t);break;case"deepseek":r=new su(t);break;default:throw Error(`Unknown provider type: ${e}`)}return this.register(r),r}listProviders(){return Array.from(this.providers.values())}findForModel(e){for(let t of this.providers.values())if(t.supportsModel(e))return t}constructor(){this.providers=new Map}}class sp{withWorkingDirectory(e){return this.workingDirectory=e,this}withModelProvider(e){return this.modelProvider=e,this.modelRegistry.register(e),this}withModel(e,t){return this.modelProvider=this.modelRegistry.createAndRegister(e,t),this}withMaxIterations(e){return this.maxIterations=e,this}withMaxTokens(e){return this.maxTokens=e,this}withSystemPrompt(e){return this.systemPrompt=e,this}withSkillsDirectory(e){return this.skillsDir=e,this}withSkillFile(e){return this.skillFiles.push(e),this}withPluginsDirectory(e){return this.pluginsDir=e,this}withMemoryStore(e){return this.memoryStore=e,this}withSessionStore(e){return this.sessionStore=e,this}withRemoteToolStore(e,t=process.env.AGENT_PROJECT_ID??"default"){return this.remoteToolStore=e,this.projectId=t,this}withTool(e){return this.customTools=[...this.customTools.filter(t=>t.name!==e.name),e],this.toolRegistry.register(e),this}createToolRegistry(e,t){let r=new eZ;for(let e of(r.register(new r$),r.register(new rX),r.register(new rZ),r.register(new rq),r.register(new rW),r.register(new rJ),r.register(new rz),r.register(new rG),r.register(new r0),r.register(new r1),this.customTools))r.register(e);return e&&r.register(new r3({store:e,projectId:t})),r}systemPromptWithRemoteTools(e,t){let r=e?.listEnabledTools(t)??[];if(0===r.length)return this.systemPrompt;let s=["可用远程项目工具:",...r.map(r9)].join(`
176
176
  `);return[this.systemPrompt,s].filter(Boolean).join(`
177
177
 
178
- `)}withCompactThreshold(e){return this.compactThreshold=e,this}withEnabledTools(e){return this.enabledTools=e.length>0?e:null,this}withEnabledSkills(e){return this.enabledSkills=e.length>0?e:null,this}withSemanticSkillMatching(e){return this.semanticSkillMatching=e,this}withReasoningEffort(e){return this.reasoningEffort=e,this}withToolPermissionGate(e){return this.toolPermissionGate=e,this}async build(){if(!this.modelProvider)throw Error("Model provider is required. Call withModelProvider() or withModel()");let e=this.remoteToolStore,t=this.projectId;this.skillRegistry.setModelProvider(this.modelProvider),this.skillRegistry.setSemanticMatchingEnabled(this.semanticSkillMatching);let r=this.memoryStore??new r6(this.workingDirectory),s=this.createToolRegistry(e,t);for(let e of(this.toolRegistry=s,await this.skillLoader.loadAll(this.workingDirectory)))this.skillRegistry.register(e);if(this.skillsDir)for(let e of(await this.skillLoader.loadFromDirectory(this.skillsDir,"custom")))this.skillRegistry.get(e.name)||this.skillRegistry.register(e);for(let e of this.skillFiles){let t=await this.skillLoader.loadFromFile(e);this.skillRegistry.get(t.name)||this.skillRegistry.register({...t,source:"custom"})}let i=new r3(this.contextLoader),a={modelProvider:this.modelProvider,toolRegistry:s,toolExecutor:this.toolPermissionGate?new P(s,this.toolPermissionGate):s,contextAssembler:i,skillRegistry:this.skillRegistry,memoryStore:r,sessionStore:this.sessionStore,workingDirectory:this.workingDirectory,maxIterations:this.maxIterations,maxTokens:this.maxTokens,systemPrompt:this.systemPromptWithRemoteTools(e,t),compactThreshold:this.compactThreshold,enabledTools:this.enabledTools,enabledSkills:this.enabledSkills,reasoningEffort:this.reasoningEffort};return new eO().create(a)}buildSync(){if(!this.modelProvider)throw Error("Model provider is required. Call withModelProvider() or withModel()");let e=this.remoteToolStore,t=this.projectId;this.skillRegistry.setModelProvider(this.modelProvider),this.skillRegistry.setSemanticMatchingEnabled(this.semanticSkillMatching);let r=this.memoryStore??new r6(this.workingDirectory),s=this.createToolRegistry(e,t);for(let e of(this.toolRegistry=s,this.skillLoader.loadAllSync(this.workingDirectory)))this.skillRegistry.register(e);if(this.skillsDir)for(let e of this.skillLoader.loadFromDirectorySync(this.skillsDir,"custom"))this.skillRegistry.get(e.name)||this.skillRegistry.register(e);for(let e of this.skillFiles){let t=this.skillLoader.loadFromFileSync(e);this.skillRegistry.get(t.name)||this.skillRegistry.register({...t,source:"custom"})}let i=new r3(this.contextLoader),a={modelProvider:this.modelProvider,toolRegistry:s,toolExecutor:this.toolPermissionGate?new P(s,this.toolPermissionGate):s,contextAssembler:i,skillRegistry:this.skillRegistry,memoryStore:r,sessionStore:this.sessionStore,workingDirectory:this.workingDirectory,maxIterations:this.maxIterations,maxTokens:this.maxTokens,systemPrompt:this.systemPromptWithRemoteTools(e,t),compactThreshold:this.compactThreshold,enabledTools:this.enabledTools,enabledSkills:this.enabledSkills,reasoningEffort:this.reasoningEffort};return new eO().create(a)}getToolRegistry(){return this.toolRegistry}getSkillRegistry(){return this.skillRegistry}getModelRegistry(){return this.modelRegistry}constructor(){this.workingDirectory=process.cwd(),this.modelProvider=null,this.modelRegistry=new st,this.toolRegistry=new eA,this.customTools=[],this.skillLoader=new rG,this.skillRegistry=new rV(this.skillLoader),this.contextLoader=new r2,this.memoryStore=null,this.maxIterations=10,this.maxTokens=1e5,this.skillFiles=[],this.projectId=process.env.AGENT_PROJECT_ID??"default",this.enabledTools=null,this.enabledSkills=null,this.semanticSkillMatching=!0}}class ss{constructor(e){this.process=null,this.requestId=0,this.pendingRequests=new Map,this._connected=!1,this.config=null,this.toolCache=[],this.ssePostUrl=null,this.sseRes=null,this.mcpSessionId=null,this.serverId=e}get connected(){return this.config?.transport==="sse"?this._connected:this._connected&&this.process?.exitCode===null}async connect(e){if(this.config=e,"stdio"===e.transport)return this.connectStdio(e);if("sse"===e.transport)return this.connectSSE(e);if("streamableHttp"===e.transport)return this.connectStreamableHttp(e);throw Error(`Transport "${e.transport}" not supported`)}connectStdio(e){return e.command?new Promise((t,r)=>{let s=(0,d.spawn)(e.command,e.args??[],{env:{...process.env,...e.env},stdio:["pipe","pipe","pipe"]});this.process=s,(0,f.createInterface)({input:s.stdout}).on("line",e=>{try{let t=JSON.parse(e),r=this.pendingRequests.get(t.id);r&&(r(t),this.pendingRequests.delete(t.id))}catch{}}),s.stderr?.on("data",e=>{console.error(`[MCP ${this.serverId}] ${e.toString().trim()}`)}),s.on("exit",e=>{if(this._connected=!1,0!==e&&this.pendingRequests.size>0){for(let[,t]of this.pendingRequests)t({jsonrpc:"2.0",id:0,error:{code:-1,message:`Process exited with code ${e}`}});this.pendingRequests.clear()}}),s.on("error",e=>{this._connected=!1,r(e)}),this.sendRequest("initialize",{protocolVersion:"2024-11-05",capabilities:{tools:{},resources:{}},clientInfo:{name:"customer-agent",version:"0.1.0"}}).then(()=>{this._connected=!0,t()}).catch(r)}):Promise.reject(Error(`stdio 服务器 "${e.id}" 缺少 command 字段`))}disconnect(){this.process&&(this.process.kill(),this.process=null),this.sseRes&&(this.sseRes.destroy(),this.sseRes=null),this.ssePostUrl=null,this._connected=!1,this.toolCache=[]}async listTools(){let e=(await this.sendRequest("tools/list",{})).tools??[];return this.toolCache=e.map(e=>({name:e.name,description:e.description,parameters:e.inputSchema})),this.toolCache}async listResources(){return((await this.sendRequest("resources/list",{})).resources??[]).map(e=>({uri:e.uri,name:e.name,description:e.description,mimeType:e.mimeType}))}async callTool(e,t){return this.sendRequest("tools/call",{name:e,arguments:t})}async readResource(e){return this.sendRequest("resources/read",{uri:e})}sendRequest(e,t){return this.config?.transport==="sse"?this.sendRequestSSE(e,t):this.config?.transport==="streamableHttp"?this.sendRequestHttp(e,t):new Promise((r,s)=>{if(!this.process||!this.process.stdin){s(Error("MCP client not connected"));return}let i=++this.requestId;this.pendingRequests.set(i,e=>{e.error?s(Error(e.error.message)):r(e.result)});let a=setTimeout(()=>{this.pendingRequests.delete(i),s(Error(`MCP request ${e} timed out`))},3e4),n=this.pendingRequests.get(i);this.pendingRequests.set(i,e=>{clearTimeout(a),n&&n(e)}),this.process.stdin.write(JSON.stringify({jsonrpc:"2.0",id:i,method:e,params:t})+`
178
+ `)}withCompactThreshold(e){return this.compactThreshold=e,this}withEnabledTools(e){return this.enabledTools=e.length>0?e:null,this}withEnabledSkills(e){return this.enabledSkills=e.length>0?e:null,this}withSemanticSkillMatching(e){return this.semanticSkillMatching=e,this}withReasoningEffort(e){return this.reasoningEffort=e,this}withToolPermissionGate(e){return this.toolPermissionGate=e,this}async build(){if(!this.modelProvider)throw Error("Model provider is required. Call withModelProvider() or withModel()");let e=this.remoteToolStore,t=this.projectId;this.skillRegistry.setModelProvider(this.modelProvider),this.skillRegistry.setSemanticMatchingEnabled(this.semanticSkillMatching);let r=this.memoryStore??new sl(this.workingDirectory),s=this.createToolRegistry(e,t);for(let e of(this.toolRegistry=s,await this.skillLoader.loadAll(this.workingDirectory)))this.skillRegistry.register(e);if(this.skillsDir)for(let e of(await this.skillLoader.loadFromDirectory(this.skillsDir,"custom")))this.skillRegistry.get(e.name)||this.skillRegistry.register(e);for(let e of this.skillFiles){let t=await this.skillLoader.loadFromFile(e);this.skillRegistry.get(t.name)||this.skillRegistry.register({...t,source:"custom"})}let i=new sn(this.contextLoader),a={modelProvider:this.modelProvider,toolRegistry:s,toolExecutor:this.toolPermissionGate?new P(s,this.toolPermissionGate):s,contextAssembler:i,skillRegistry:this.skillRegistry,memoryStore:r,sessionStore:this.sessionStore,workingDirectory:this.workingDirectory,maxIterations:this.maxIterations,maxTokens:this.maxTokens,systemPrompt:this.systemPromptWithRemoteTools(e,t),compactThreshold:this.compactThreshold,enabledTools:this.enabledTools,enabledSkills:this.enabledSkills,reasoningEffort:this.reasoningEffort};return new eX().create(a)}buildSync(){if(!this.modelProvider)throw Error("Model provider is required. Call withModelProvider() or withModel()");let e=this.remoteToolStore,t=this.projectId;this.skillRegistry.setModelProvider(this.modelProvider),this.skillRegistry.setSemanticMatchingEnabled(this.semanticSkillMatching);let r=this.memoryStore??new sl(this.workingDirectory),s=this.createToolRegistry(e,t);for(let e of(this.toolRegistry=s,this.skillLoader.loadAllSync(this.workingDirectory)))this.skillRegistry.register(e);if(this.skillsDir)for(let e of this.skillLoader.loadFromDirectorySync(this.skillsDir,"custom"))this.skillRegistry.get(e.name)||this.skillRegistry.register(e);for(let e of this.skillFiles){let t=this.skillLoader.loadFromFileSync(e);this.skillRegistry.get(t.name)||this.skillRegistry.register({...t,source:"custom"})}let i=new sn(this.contextLoader),a={modelProvider:this.modelProvider,toolRegistry:s,toolExecutor:this.toolPermissionGate?new P(s,this.toolPermissionGate):s,contextAssembler:i,skillRegistry:this.skillRegistry,memoryStore:r,sessionStore:this.sessionStore,workingDirectory:this.workingDirectory,maxIterations:this.maxIterations,maxTokens:this.maxTokens,systemPrompt:this.systemPromptWithRemoteTools(e,t),compactThreshold:this.compactThreshold,enabledTools:this.enabledTools,enabledSkills:this.enabledSkills,reasoningEffort:this.reasoningEffort};return new eX().create(a)}getToolRegistry(){return this.toolRegistry}getSkillRegistry(){return this.skillRegistry}getModelRegistry(){return this.modelRegistry}constructor(){this.workingDirectory=process.cwd(),this.modelProvider=null,this.modelRegistry=new sh,this.toolRegistry=new eZ,this.customTools=[],this.skillLoader=new r8,this.skillRegistry=new r7(this.skillLoader),this.contextLoader=new si,this.memoryStore=null,this.maxIterations=10,this.maxTokens=1e5,this.skillFiles=[],this.projectId=process.env.AGENT_PROJECT_ID??"default",this.enabledTools=null,this.enabledSkills=null,this.semanticSkillMatching=!0}}class sm{constructor(e){this.process=null,this.requestId=0,this.pendingRequests=new Map,this._connected=!1,this.config=null,this.toolCache=[],this.ssePostUrl=null,this.sseRes=null,this.mcpSessionId=null,this.serverId=e}get connected(){return this.config?.transport==="sse"?this._connected:this._connected&&this.process?.exitCode===null}async connect(e){if(this.config=e,"stdio"===e.transport)return this.connectStdio(e);if("sse"===e.transport)return this.connectSSE(e);if("streamableHttp"===e.transport)return this.connectStreamableHttp(e);throw Error(`Transport "${e.transport}" not supported`)}connectStdio(e){return e.command?new Promise((t,r)=>{let s=(0,d.spawn)(e.command,e.args??[],{env:{...process.env,...e.env},stdio:["pipe","pipe","pipe"]});this.process=s,(0,f.createInterface)({input:s.stdout}).on("line",e=>{try{let t=JSON.parse(e),r=this.pendingRequests.get(t.id);r&&(r(t),this.pendingRequests.delete(t.id))}catch{}}),s.stderr?.on("data",e=>{console.error(`[MCP ${this.serverId}] ${e.toString().trim()}`)}),s.on("exit",e=>{if(this._connected=!1,0!==e&&this.pendingRequests.size>0){for(let[,t]of this.pendingRequests)t({jsonrpc:"2.0",id:0,error:{code:-1,message:`Process exited with code ${e}`}});this.pendingRequests.clear()}}),s.on("error",e=>{this._connected=!1,r(e)}),this.sendRequest("initialize",{protocolVersion:"2024-11-05",capabilities:{tools:{},resources:{}},clientInfo:{name:"customer-agent",version:"0.1.0"}}).then(()=>{this._connected=!0,t()}).catch(r)}):Promise.reject(Error(`stdio 服务器 "${e.id}" 缺少 command 字段`))}disconnect(){this.process&&(this.process.kill(),this.process=null),this.sseRes&&(this.sseRes.destroy(),this.sseRes=null),this.ssePostUrl=null,this._connected=!1,this.toolCache=[]}async listTools(){let e=(await this.sendRequest("tools/list",{})).tools??[];return this.toolCache=e.map(e=>({name:e.name,description:e.description,parameters:e.inputSchema})),this.toolCache}async listResources(){return((await this.sendRequest("resources/list",{})).resources??[]).map(e=>({uri:e.uri,name:e.name,description:e.description,mimeType:e.mimeType}))}async callTool(e,t){return this.sendRequest("tools/call",{name:e,arguments:t})}async readResource(e){return this.sendRequest("resources/read",{uri:e})}sendRequest(e,t){return this.config?.transport==="sse"?this.sendRequestSSE(e,t):this.config?.transport==="streamableHttp"?this.sendRequestHttp(e,t):new Promise((r,s)=>{if(!this.process||!this.process.stdin){s(Error("MCP client not connected"));return}let i=++this.requestId;this.pendingRequests.set(i,e=>{e.error?s(Error(e.error.message)):r(e.result)});let a=setTimeout(()=>{this.pendingRequests.delete(i),s(Error(`MCP request ${e} timed out`))},3e4),n=this.pendingRequests.get(i);this.pendingRequests.set(i,e=>{clearTimeout(a),n&&n(e)}),this.process.stdin.write(JSON.stringify({jsonrpc:"2.0",id:i,method:e,params:t})+`
179
179
  `)})}sendRequestSSE(e,t){return new Promise((r,s)=>{if(!this.ssePostUrl){s(Error("SSE post URL not established"));return}let i=++this.requestId,a=JSON.stringify({jsonrpc:"2.0",id:i,method:e,params:t}),n=new URL(this.ssePostUrl),o="https:"===n.protocol?y:g;this.pendingRequests.set(i,e=>{e.error?s(Error(e.error.message)):r(e.result)});let l=setTimeout(()=>{this.pendingRequests.delete(i),s(Error(`MCP SSE request ${e} timed out`))},3e4),d=this.pendingRequests.get(i);this.pendingRequests.set(i,e=>{clearTimeout(l),d(e)});let c=o.request(n,{method:"POST",headers:{"Content-Type":"application/json","Content-Length":Buffer.byteLength(a),...this.config?.env??{}}},e=>{let t="";e.on("data",e=>{t+=e}),e.on("end",()=>{if(e.statusCode&&e.statusCode>=200&&e.statusCode<300&&t.trim())try{let e=JSON.parse(t),r=this.pendingRequests.get(e.id);r&&(r(e),this.pendingRequests.delete(e.id))}catch{}})});c.on("error",e=>{this.pendingRequests.delete(i),clearTimeout(l),s(e)}),c.write(a),c.end()})}async connectStreamableHttp(e){if(!(e.url??e.sseUrl))throw Error("url is required for streamableHttp transport");for(let e of["2025-03-26","2024-11-05"])try{await this.sendRequestHttp("initialize",{protocolVersion:e,capabilities:{tools:{},resources:{}},clientInfo:{name:"customer-agent",version:"0.1.0"}});break}catch(r){let t=r instanceof Error?r.message:String(r);if(/HTTP (4\d\d)/.test(t)&&!/401|403/.test(t)){console.warn(`[MCP ${this.serverId}] initialize skipped (${t})`);break}if("2024-11-05"===e)throw r}this._connected=!0}sendRequestHttp(e,t){return new Promise((r,s)=>{let i=this.config?.url??this.config?.sseUrl;if(!i){s(Error("URL not set"));return}let a=++this.requestId,n=JSON.stringify({jsonrpc:"2.0",id:a,method:e,params:t}),o=new URL(i),l="https:"===o.protocol?y:g,d={...this.config?.headers??{},...this.config?.env??{}},c=setTimeout(()=>s(Error(`MCP HTTP request ${e} timed out`)),3e4),u=l.request(o,{method:"POST",headers:{"Content-Type":"application/json","Content-Length":Buffer.byteLength(n),Accept:"application/json, text/event-stream",...this.mcpSessionId?{"Mcp-Session-Id":this.mcpSessionId}:{},...d}},e=>{let t=e.headers["mcp-session-id"];if(t&&(this.mcpSessionId=t),401===e.statusCode){clearTimeout(c),e.destroy(),s(Error(`HTTP 401: 需要认证(Unauthorized)`));return}if(403===e.statusCode){clearTimeout(c),e.destroy(),s(Error(`HTTP 403: 访问被拒绝(Forbidden)`));return}if(e.statusCode&&e.statusCode>=400){let t="";e.on("data",e=>{t+=e}),e.on("end",()=>{clearTimeout(c);let r=t.slice(0,200).replace(/\s+/g," ");s(Error(`HTTP ${e.statusCode}: ${r||"服务器返回错误"}`))});return}if((e.headers["content-type"]??"").includes("text/event-stream")){let t="",i="";e.on("data",n=>{let o=(t+=n.toString()).split(`
180
180
  `);for(let n of(t=o.pop(),o))if(n.startsWith("event:"))n.slice(6).trim();else if(n.startsWith("data:"))i=n.slice(5).trim();else if(""===n&&i){try{let t=JSON.parse(i);t.id===a&&(clearTimeout(c),e.destroy(),t.error?s(Error(t.error.message)):r(t.result))}catch{}i=""}}),e.on("end",()=>{clearTimeout(c),s(Error("SSE stream ended without response"))}),e.on("error",e=>{clearTimeout(c),s(e)})}else{let t="";e.on("data",e=>{t+=e}),e.on("end",()=>{clearTimeout(c);try{let e=JSON.parse(t);e.error?s(Error(e.error.message)):r(e.result)}catch{s(Error(`Invalid JSON response: ${t.slice(0,100)}`))}}),e.on("error",e=>{clearTimeout(c),s(e)})}});u.on("error",e=>{clearTimeout(c),s(e)}),u.write(n),u.end()})}connectSSE(e){return new Promise((t,r)=>{let s=e.url??e.sseUrl;if(!s){r(Error("SSE URL is required for remote MCP servers"));return}let i=new URL(s),a=("https:"===i.protocol?y:g).get(s,{headers:{Accept:"text/event-stream","Cache-Control":"no-cache",...e.env??{}}},e=>{if(401===e.statusCode){e.destroy(),r(Error(`HTTP 401: 需要认证(Unauthorized)`));return}if(403===e.statusCode){e.destroy(),r(Error(`HTTP 403: 访问被拒绝(Forbidden)`));return}if(e.statusCode&&e.statusCode>=400){e.destroy(),r(Error(`HTTP ${e.statusCode}: 服务器返回错误`));return}this.sseRes=e;let s="",a="",n="",o=!1;e.on("data",e=>{let l=(s+=e.toString()).split(`
181
- `);for(let e of(s=l.pop(),l))if(e.startsWith("event:"))a=e.slice(6).trim();else if(e.startsWith("data:"))n=e.slice(5).trim();else if(""===e&&(a||n)){if("endpoint"===a){try{this.ssePostUrl=new URL(n,`${i.protocol}//${i.host}`).toString()}catch{this.ssePostUrl=n}o||(o=!0,this.sendRequestSSE("initialize",{protocolVersion:"2024-11-05",capabilities:{tools:{},resources:{}},clientInfo:{name:"customer-agent",version:"0.1.0"}}).then(()=>{this._connected=!0,t()}).catch(r))}else if("message"===a||""===a)try{let e=JSON.parse(n),t=this.pendingRequests.get(e.id);t&&(t(e),this.pendingRequests.delete(e.id))}catch{}a="",n=""}}),e.on("error",e=>{this._connected=!1,r(e)}),e.on("end",()=>{this._connected=!1})});a.on("error",r),a.setTimeout(15e3,()=>{a.destroy(),r(Error("SSE connection timed out"))})})}}class si{constructor(e){this.clients=new Map,this.toolRegistry=e}async connectServer(e){let t=new ss(e.id);return await t.connect(e),this.clients.set(e.id,t),this.toolRegistry&&await this.registerMCPTools(t),t}async disconnectServer(e){let t=this.clients.get(e);if(t){if(this.toolRegistry)for(let r of(await t.listTools().catch(()=>[])))this.toolRegistry.unregister(`mcp_${e}_${r.name}`);t.disconnect(),this.clients.delete(e)}}getClient(e){return this.clients.get(e)}listServers(){return Array.from(this.clients.values()).map(e=>({id:e.serverId,name:e.serverId,command:"",args:[],transport:"stdio"}))}async discoverAllTools(){let e=new Map;for(let[t,r]of this.clients)try{let s=await r.listTools();e.set(t,s)}catch{e.set(t,[])}return e}async registerMCPTools(e){for(let t of(await e.listTools())){let r={name:`mcp_${e.serverId}_${t.name}`,description:`[MCP:${e.serverId}] ${t.description}`,parameters:t.parameters,schema:eR.object({}).passthrough(),execute:async r=>{let s=await e.callTool(t.name,r);return{toolCallId:"",content:"string"==typeof s?s:s.content?.map(e=>e.text??"").join(`
182
- `)??JSON.stringify(s)}}};this.toolRegistry?.register(r)}}}class sa{constructor(e,t,r){this.plugins=new Map,this.toolRegistry=e,this.skillRegistry=t,this.workingDirectory=r}async loadPlugin(e){let t=await this.loadFromDirectory(e);return this.plugins.set(t.manifest.name,t),t}async unloadPlugin(e){this.plugins.get(e)&&(await this.deactivatePlugin(e),this.plugins.delete(e))}async activatePlugin(e,t){let r=this.plugins.get(e);if(!r)throw Error(`Plugin not found: ${e}`);let s=t??{registerTool:e=>this.toolRegistry?.register(e),registerSkill:e=>this.skillRegistry?.register(e),getWorkingDirectory:()=>this.workingDirectory??process.cwd(),log:(t,r="info")=>{console[r](`[Plugin:${e}] ${t}`)}};await r.activate(s)}async deactivatePlugin(e){let t=this.plugins.get(e);t&&await t.deactivate()}getPlugin(e){return this.plugins.get(e)}listPlugins(){return Array.from(this.plugins.values())}async loadFromDirectory(e){let t=(0,l.join)(e,"manifest.json"),r=JSON.parse(await (0,h.readFile)(t,"utf-8"));return this.create(r)}create(e){let t=this;return{manifest:e,loaded:!1,async load(){let t=await r(8794)(e.main);t.default&&"object"==typeof t.default&&Object.assign(this,t.default),this.loaded=!0},async activate(e){"function"==typeof this.activate&&await this.activate(e)},async deactivate(){"function"==typeof this.deactivate&&await this.deactivate(),t.plugins.delete(e.name)}}}async scanDirectory(e){let t=[];try{for(let r of(await (0,h.readdir)(e,{withFileTypes:!0}))){if(!r.isDirectory())continue;let s=(0,l.join)(e,r.name,"manifest.json");try{await (0,h.stat)(s),t.push((0,l.join)(e,r.name))}catch{}}}catch{}return t}}function sn(){return new Date().toISOString()}function so(e){return JSON.stringify(e??{})}function sl(e){let t=JSON.parse(e||"{}");return t&&"object"==typeof t&&!Array.isArray(t)?t:{}}class sd{constructor(e){this.db=e}upsertTools(e,t){let r=sn(),s=this.db.prepare(`
181
+ `);for(let e of(s=l.pop(),l))if(e.startsWith("event:"))a=e.slice(6).trim();else if(e.startsWith("data:"))n=e.slice(5).trim();else if(""===e&&(a||n)){if("endpoint"===a){try{this.ssePostUrl=new URL(n,`${i.protocol}//${i.host}`).toString()}catch{this.ssePostUrl=n}o||(o=!0,this.sendRequestSSE("initialize",{protocolVersion:"2024-11-05",capabilities:{tools:{},resources:{}},clientInfo:{name:"customer-agent",version:"0.1.0"}}).then(()=>{this._connected=!0,t()}).catch(r))}else if("message"===a||""===a)try{let e=JSON.parse(n),t=this.pendingRequests.get(e.id);t&&(t(e),this.pendingRequests.delete(e.id))}catch{}a="",n=""}}),e.on("error",e=>{this._connected=!1,r(e)}),e.on("end",()=>{this._connected=!1})});a.on("error",r),a.setTimeout(15e3,()=>{a.destroy(),r(Error("SSE connection timed out"))})})}}class sf{constructor(e){this.clients=new Map,this.toolRegistry=e}async connectServer(e){let t=new sm(e.id);return await t.connect(e),this.clients.set(e.id,t),this.toolRegistry&&await this.registerMCPTools(t),t}async disconnectServer(e){let t=this.clients.get(e);if(t){if(this.toolRegistry)for(let r of(await t.listTools().catch(()=>[])))this.toolRegistry.unregister(`mcp_${e}_${r.name}`);t.disconnect(),this.clients.delete(e)}}getClient(e){return this.clients.get(e)}listServers(){return Array.from(this.clients.values()).map(e=>({id:e.serverId,name:e.serverId,command:"",args:[],transport:"stdio"}))}async discoverAllTools(){let e=new Map;for(let[t,r]of this.clients)try{let s=await r.listTools();e.set(t,s)}catch{e.set(t,[])}return e}async registerMCPTools(e){for(let t of(await e.listTools())){let r={name:`mcp_${e.serverId}_${t.name}`,description:`[MCP:${e.serverId}] ${t.description}`,parameters:t.parameters,schema:eq.object({}).passthrough(),execute:async r=>{let s=await e.callTool(t.name,r);return{toolCallId:"",content:"string"==typeof s?s:s.content?.map(e=>e.text??"").join(`
182
+ `)??JSON.stringify(s)}}};this.toolRegistry?.register(r)}}}class sg{constructor(e,t,r){this.plugins=new Map,this.toolRegistry=e,this.skillRegistry=t,this.workingDirectory=r}async loadPlugin(e){let t=await this.loadFromDirectory(e);return this.plugins.set(t.manifest.name,t),t}async unloadPlugin(e){this.plugins.get(e)&&(await this.deactivatePlugin(e),this.plugins.delete(e))}async activatePlugin(e,t){let r=this.plugins.get(e);if(!r)throw Error(`Plugin not found: ${e}`);let s=t??{registerTool:e=>this.toolRegistry?.register(e),registerSkill:e=>this.skillRegistry?.register(e),getWorkingDirectory:()=>this.workingDirectory??process.cwd(),log:(t,r="info")=>{console[r](`[Plugin:${e}] ${t}`)}};await r.activate(s)}async deactivatePlugin(e){let t=this.plugins.get(e);t&&await t.deactivate()}getPlugin(e){return this.plugins.get(e)}listPlugins(){return Array.from(this.plugins.values())}async loadFromDirectory(e){let t=(0,l.join)(e,"manifest.json"),r=JSON.parse(await (0,h.readFile)(t,"utf-8"));return this.create(r)}create(e){let t=this;return{manifest:e,loaded:!1,async load(){let t=await r(8794)(e.main);t.default&&"object"==typeof t.default&&Object.assign(this,t.default),this.loaded=!0},async activate(e){"function"==typeof this.activate&&await this.activate(e)},async deactivate(){"function"==typeof this.deactivate&&await this.deactivate(),t.plugins.delete(e.name)}}}async scanDirectory(e){let t=[];try{for(let r of(await (0,h.readdir)(e,{withFileTypes:!0}))){if(!r.isDirectory())continue;let s=(0,l.join)(e,r.name,"manifest.json");try{await (0,h.stat)(s),t.push((0,l.join)(e,r.name))}catch{}}}catch{}return t}}function sy(){return new Date().toISOString()}function s_(e){return JSON.stringify(e??{})}function sT(e){let t=JSON.parse(e||"{}");return t&&"object"==typeof t&&!Array.isArray(t)?t:{}}class sE{constructor(e){this.db=e}upsertTools(e,t){let r=sy(),s=this.db.prepare(`
183
183
  INSERT INTO remote_tools (id, project_id, scheme, purpose, url, method, headers, input_schema, output_schema, examples, auth, enabled, created, updated)
184
184
  VALUES (@id, @projectId, @scheme, @purpose, @url, @method, @headers, @inputSchema, @outputSchema, @examples, @auth, 1, @created, @updated)
185
185
  ON CONFLICT(project_id, scheme) DO UPDATE SET
@@ -193,7 +193,7 @@ ${e.entry.content}`;if(a+t.length>n)break;i.push(t),a+=t.length}return i.join(`
193
193
  auth = excluded.auth,
194
194
  enabled = 1,
195
195
  updated = excluded.updated
196
- `);return this.db.transaction(()=>{for(let a of t){var i;s.run({id:crypto.randomUUID(),projectId:e,scheme:a.scheme,purpose:a.purpose,url:a.url,method:a.method??"POST",headers:JSON.stringify(a.headers??{}),inputSchema:so(a.inputSchema),outputSchema:so(a.outputSchema),examples:JSON.stringify(Array.isArray(i=a.examples)?i:[]),auth:so(a.auth),created:r,updated:r})}})(),t.map(t=>this.getTool(e,t.scheme)).filter(Boolean)}listEnabledTools(e){return this.db.prepare("SELECT * FROM remote_tools WHERE project_id = ? AND enabled = 1 ORDER BY scheme").all(e).map(e=>this.mapTool(e))}getTool(e,t){let r=this.db.prepare("SELECT * FROM remote_tools WHERE project_id = ? AND scheme = ? AND enabled = 1").get(e,t);return r?this.mapTool(r):null}createJob(e,t,r){if(!this.getTool(e,t))throw Error(`Remote tool ${e}/${t} is not registered or disabled`);let s=sn(),i=crypto.randomUUID();return this.db.prepare("INSERT INTO remote_tool_jobs (id, project_id, scheme, request_payload, status, created, updated) VALUES (?, ?, ?, ?, 'queued', ?, ?)").run(i,e,t,JSON.stringify(r),s,s),this.getJob(i)}markJobRunning(e){this.updateStatus(e,"running",null,null)}markJobSucceeded(e,t){this.updateStatus(e,"succeeded",JSON.stringify(t),null)}markJobFailed(e,t){this.updateStatus(e,"failed",null,t)}getJob(e){let t=this.db.prepare("SELECT * FROM remote_tool_jobs WHERE id = ?").get(e);return t?this.mapJob(t):null}updateStatus(e,t,r,s){this.db.prepare("UPDATE remote_tool_jobs SET status = ?, response_payload = ?, error = ?, updated = ? WHERE id = ?").run(t,r,s,sn(),e)}mapTool(e){return{id:e.id,projectId:e.project_id,scheme:e.scheme,purpose:e.purpose,url:e.url,method:e.method,headers:sl(e.headers),inputSchema:sl(e.input_schema),outputSchema:sl(e.output_schema),examples:function(e){let t=JSON.parse(e||"[]");return Array.isArray(t)?t:[]}(e.examples),auth:sl(e.auth),enabled:1===e.enabled,createdAt:e.created,updatedAt:e.updated}}mapJob(e){return{id:e.id,projectId:e.project_id,scheme:e.scheme,requestPayload:sl(e.request_payload),status:e.status,responsePayload:e.response_payload?sl(e.response_payload):null,error:e.error,createdAt:e.created,updatedAt:e.updated}}}class sc{constructor(e){let t=(0,l.join)(e,".agent-data");try{(0,c.mkdirSync)(t,{recursive:!0})}catch{}let r=(0,l.join)(t,"agent.db"),s=function(){let e=process.versions.electron?`electron-${process.versions.electron}`:`node-${process.versions.modules}`;try{let t="darwin"===process.platform?(0,l.join)((0,p.homedir)(),"Library","Caches","team-agent","native"):(0,l.join)((0,p.homedir)(),".cache","team-agent","native");for(let r of(0,c.readdirSync)((0,l.join)(t,e))){if(!r.startsWith("better-sqlite3-"))continue;let s=(0,l.join)(t,e,r,"better_sqlite3.node");if((0,c.existsSync)(s))return s}}catch{}}();this.db=new _(r,s?{nativeBinding:s}:void 0),this.db.pragma("journal_mode = WAL"),this.db.pragma("foreign_keys = ON"),this.migrate()}migrate(){this.db.exec(`
196
+ `);return this.db.transaction(()=>{for(let a of t){var i;s.run({id:crypto.randomUUID(),projectId:e,scheme:a.scheme,purpose:a.purpose,url:a.url,method:a.method??"POST",headers:JSON.stringify(a.headers??{}),inputSchema:s_(a.inputSchema),outputSchema:s_(a.outputSchema),examples:JSON.stringify(Array.isArray(i=a.examples)?i:[]),auth:s_(a.auth),created:r,updated:r})}})(),t.map(t=>this.getTool(e,t.scheme)).filter(Boolean)}listEnabledTools(e){return this.db.prepare("SELECT * FROM remote_tools WHERE project_id = ? AND enabled = 1 ORDER BY scheme").all(e).map(e=>this.mapTool(e))}getTool(e,t){let r=this.db.prepare("SELECT * FROM remote_tools WHERE project_id = ? AND scheme = ? AND enabled = 1").get(e,t);return r?this.mapTool(r):null}createJob(e,t,r){if(!this.getTool(e,t))throw Error(`Remote tool ${e}/${t} is not registered or disabled`);let s=sy(),i=crypto.randomUUID();return this.db.prepare("INSERT INTO remote_tool_jobs (id, project_id, scheme, request_payload, status, created, updated) VALUES (?, ?, ?, ?, 'queued', ?, ?)").run(i,e,t,JSON.stringify(r),s,s),this.getJob(i)}markJobRunning(e){this.updateStatus(e,"running",null,null)}markJobSucceeded(e,t){this.updateStatus(e,"succeeded",JSON.stringify(t),null)}markJobFailed(e,t){this.updateStatus(e,"failed",null,t)}getJob(e){let t=this.db.prepare("SELECT * FROM remote_tool_jobs WHERE id = ?").get(e);return t?this.mapJob(t):null}updateStatus(e,t,r,s){this.db.prepare("UPDATE remote_tool_jobs SET status = ?, response_payload = ?, error = ?, updated = ? WHERE id = ?").run(t,r,s,sy(),e)}mapTool(e){return{id:e.id,projectId:e.project_id,scheme:e.scheme,purpose:e.purpose,url:e.url,method:e.method,headers:sT(e.headers),inputSchema:sT(e.input_schema),outputSchema:sT(e.output_schema),examples:function(e){let t=JSON.parse(e||"[]");return Array.isArray(t)?t:[]}(e.examples),auth:sT(e.auth),enabled:1===e.enabled,createdAt:e.created,updatedAt:e.updated}}mapJob(e){return{id:e.id,projectId:e.project_id,scheme:e.scheme,requestPayload:sT(e.request_payload),status:e.status,responsePayload:e.response_payload?sT(e.response_payload):null,error:e.error,createdAt:e.created,updatedAt:e.updated}}}class sv{constructor(e){let t=(0,l.join)(e,".agent-data");try{(0,c.mkdirSync)(t,{recursive:!0})}catch{}let r=(0,l.join)(t,"agent.db"),s=function(){let e=process.versions.electron?`electron-${process.versions.electron}`:`node-${process.versions.modules}`;try{let t="darwin"===process.platform?(0,l.join)((0,p.homedir)(),"Library","Caches","team-agent","native"):(0,l.join)((0,p.homedir)(),".cache","team-agent","native");for(let r of(0,c.readdirSync)((0,l.join)(t,e))){if(!r.startsWith("better-sqlite3-"))continue;let s=(0,l.join)(t,e,r,"better_sqlite3.node");if((0,c.existsSync)(s))return s}}catch{}}();this.db=new _(r,s?{nativeBinding:s}:void 0),this.db.pragma("journal_mode = WAL"),this.db.pragma("foreign_keys = ON"),this.migrate()}migrate(){this.db.exec(`
197
197
  CREATE TABLE IF NOT EXISTS settings (
198
198
  key TEXT PRIMARY KEY,
199
199
  value TEXT NOT NULL
@@ -497,13 +497,13 @@ ${e.entry.content}`;if(a+t.length>n)break;i.push(t),a+=t.length}return i.join(`
497
497
  FROM mcp_servers;
498
498
  DROP TABLE mcp_servers;
499
499
  ALTER TABLE mcp_servers_v2 RENAME TO mcp_servers;
500
- `),this.db.pragma("foreign_keys = ON")})()}migrateMCPServerHeaders(){this.db.prepare("PRAGMA table_info(mcp_servers)").all().find(e=>"headers"===e.name)||this.db.exec("ALTER TABLE mcp_servers ADD COLUMN headers TEXT NOT NULL DEFAULT '{}'")}migrateSessionsParentId(){this.db.prepare("PRAGMA table_info(sessions)").all().find(e=>"parent_id"===e.name)||(this.db.exec("ALTER TABLE sessions ADD COLUMN parent_id TEXT REFERENCES sessions(id) ON DELETE CASCADE"),this.db.exec("CREATE INDEX IF NOT EXISTS idx_sessions_parent ON sessions(parent_id)"))}migrateMessagePresentation(){this.db.prepare("PRAGMA table_info(messages)").all().some(e=>"presentation"===e.name)||this.db.exec("ALTER TABLE messages ADD COLUMN presentation TEXT")}close(){this.db.close()}}var su=new Map;function sh(e){let t=su.get(e);return t||(t=new sc(e),su.set(e,t)),t}class sp{constructor(e){this.baseDir=e,sh(e)}async create(e){let t=sh(this.baseDir),r=this.resolveProjectId(e.projectId),s=this.resolveParentId(e.parentSessionId);return t.db.prepare("INSERT INTO sessions (id, project_id, parent_id, title, status, created, updated, metadata) VALUES (?, ?, ?, ?, ?, ?, ?, ?)").run(e.id,r,s,e.title,e.status,e.created,e.updated,JSON.stringify(e.metadata)),e}resolveProjectId(e){return e?sh(this.baseDir).db.prepare("SELECT 1 FROM projects WHERE id = ?").get(e)?e:(console.warn(`[SQLiteSessionStore] project_id "${e}" not found — storing session without project (FK-safe).`),null):null}resolveParentId(e){return e?sh(this.baseDir).db.prepare("SELECT 1 FROM sessions WHERE id = ?").get(e)?e:(console.warn(`[SQLiteSessionStore] parent_id "${e}" not found — storing session as root (FK-safe).`),null):null}async get(e){let t=sh(this.baseDir).db.prepare("SELECT * FROM sessions WHERE id = ?").get(e);return t?this.rowToSession(t):null}async update(e,t){let r=sh(this.baseDir),s=await this.get(e);if(!s)throw Error(`Session not found: ${e}`);let i={...s,...t,updated:new Date().toISOString()};return r.db.prepare("UPDATE sessions SET project_id=?, title=?, status=?, updated=?, metadata=? WHERE id=?").run(this.resolveProjectId(i.projectId),i.title,i.status,i.updated,JSON.stringify(i.metadata),e),i}async consumePendingAutoTitle(e,t){let r=sh(this.baseDir);return r.db.transaction(()=>{let s=r.db.prepare("SELECT * FROM sessions WHERE id = ?").get(e);if(!s)return null;let i=function(e,t){if(!0!==e.metadata[X]||!t.trim())return null;let r={...e.metadata};return delete r[X],{title:t.slice(0,60),metadata:r}}({metadata:JSON.parse(s.metadata)},t);if(!i)return null;let a=new Date().toISOString();return r.db.prepare("UPDATE sessions SET title = ?, metadata = ?, updated = ? WHERE id = ?").run(i.title,JSON.stringify(i.metadata),a,e),this.rowToSession({...s,title:i.title,metadata:JSON.stringify(i.metadata),updated:a})})()}async delete(e){let t=sh(this.baseDir);t.db.prepare("DELETE FROM messages WHERE session_id = ?").run(e),t.db.prepare("DELETE FROM events WHERE session_id = ?").run(e),t.db.prepare("DELETE FROM sessions WHERE id = ?").run(e)}async list(e){let t=sh(this.baseDir);return(e?t.db.prepare("SELECT * FROM sessions WHERE project_id = ? ORDER BY updated DESC").all(e):t.db.prepare("SELECT * FROM sessions ORDER BY updated DESC").all()).map(e=>this.rowToSession(e))}async listChildren(e){return sh(this.baseDir).db.prepare("SELECT * FROM sessions WHERE parent_id = ? ORDER BY updated DESC").all(e).map(e=>this.rowToSession(e))}async addMessage(e,t){sh(this.baseDir).db.prepare("INSERT INTO messages (session_id, role, content, tool_calls, tool_call_id, name, presentation, timestamp) VALUES (?,?,?,?,?,?,?,?)").run(e,t.role,t.content??"",JSON.stringify(t.toolCalls??[]),t.toolCallId??null,t.name??null,t.presentation?JSON.stringify(t.presentation):null,Date.now())}async addEvent(e,t){sh(this.baseDir).db.prepare("INSERT INTO events (session_id, type, data, timestamp) VALUES (?,?,?,?)").run(e,t.type,JSON.stringify(t),Date.now())}async replaceMessages(e,t){let r=sh(this.baseDir),s=r.db.prepare("INSERT INTO messages (session_id, role, content, tool_calls, tool_call_id, name, presentation, timestamp) VALUES (?,?,?,?,?,?,?,?)");r.db.transaction(()=>{r.db.prepare("DELETE FROM messages WHERE session_id = ?").run(e);for(let r=0;r<t.length;r++){let i=t[r];s.run(e,i.role,i.content??"",JSON.stringify(i.toolCalls??[]),i.toolCallId??null,i.name??null,i.presentation?JSON.stringify(i.presentation):null,Date.now()+r)}})()}rowToSession(e){let t=sh(this.baseDir),r=t.db.prepare("SELECT * FROM messages WHERE session_id = ? ORDER BY id ASC").all(e.id),s=t.db.prepare("SELECT * FROM events WHERE session_id = ? ORDER BY id ASC").all(e.id);return{id:e.id,projectId:e.project_id??"",parentSessionId:e.parent_id??void 0,title:e.title,status:e.status,messages:r.map(e=>{let t=JSON.parse(e.tool_calls),r=e.tool_call_id??void 0,s=e.name??void 0,i=e.presentation?JSON.parse(e.presentation):void 0;return{role:e.role,content:e.content,...t?.length?{toolCalls:t}:{},...void 0!==r?{toolCallId:r}:{},...void 0!==s?{name:s}:{},...void 0!==i?{presentation:i}:{}}}),events:s.map(e=>JSON.parse(e.data)),created:e.created,updated:e.updated,metadata:JSON.parse(e.metadata)}}}class sm{constructor(e){this.baseDir=e,sh(e)}async get(e){let t=sh(this.baseDir).db.prepare("SELECT * FROM projects WHERE id = ?").get(e);return t?this.rowToProject(t):null}async create(e){return sh(this.baseDir).db.prepare("INSERT INTO projects (id, name, description, created, updated) VALUES (?, ?, ?, ?, ?)").run(e.id,e.name,e.description,e.created,e.updated),e}async update(e,t){let r=sh(this.baseDir),s=await this.get(e);if(!s)throw Error(`Project not found: ${e}`);let i={...s,...t,updated:new Date().toISOString()};return r.db.prepare("UPDATE projects SET name=?, description=?, updated=? WHERE id=?").run(i.name,i.description,i.updated,e),i}async delete(e){let t=sh(this.baseDir);t.db.prepare("UPDATE sessions SET project_id = NULL WHERE project_id = ?").run(e),t.db.prepare("DELETE FROM projects WHERE id = ?").run(e)}async list(){return sh(this.baseDir).db.prepare("SELECT * FROM projects ORDER BY created DESC, id ASC").all().map(e=>this.rowToProject(e))}rowToProject(e){return{id:e.id,name:e.name,description:e.description,created:e.created,updated:e.updated}}}class sf{constructor(e){this.db=sh(e).db}countUsers(){return this.db.prepare("SELECT COUNT(*) AS count FROM users").get().count}createFirstUser(e){return this.db.transaction(()=>{if(0!==this.countUsers())throw Error("setup already completed");return this.db.prepare("INSERT INTO users (id, username_normalized, username_display, password_hash, password_salt, password_version, created_at, password_changed_at) VALUES (?, ?, ?, ?, ?, ?, ?, ?)").run(e.id,e.usernameNormalized,e.usernameDisplay,e.passwordHash,e.passwordSalt,e.passwordVersion,e.createdAt,e.passwordChangedAt),e})()}findUserById(e){let t=this.db.prepare("SELECT * FROM users WHERE id = ?").get(e);return t?this.rowToUser(t):null}findUserByNormalizedUsername(e){let t=this.db.prepare("SELECT * FROM users WHERE username_normalized = ?").get(e);return t?this.rowToUser(t):null}createSession(e){return this.db.prepare("INSERT INTO auth_sessions (id, user_id, token_hash, csrf_hash, ws_nonce_hash, ws_nonce_expires_at, device_id, device_name, user_agent, created_at, last_seen_at, expires_at, revoked_at) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)").run(e.id,e.userId,e.tokenHash,e.csrfHash,e.wsNonceHash,e.wsNonceExpiresAt,e.deviceId,e.deviceName,e.userAgent,e.createdAt,e.lastSeenAt,e.expiresAt,e.revokedAt),e}findSessionByTokenHash(e,t){let r=this.db.prepare("SELECT * FROM auth_sessions WHERE token_hash = ? AND revoked_at IS NULL AND expires_at > ?").get(e,t);return r?this.rowToSession(r):null}rotateCsrf(e,t,r,s){this.db.prepare("UPDATE auth_sessions SET csrf_hash = ?, last_seen_at = ?, expires_at = ? WHERE id = ? AND revoked_at IS NULL").run(t,r,s,e)}issueWsNonce(e,t,r){this.db.prepare("UPDATE auth_sessions SET ws_nonce_hash = ?, ws_nonce_expires_at = ? WHERE id = ? AND revoked_at IS NULL").run(t,r,e)}consumeWsNonce(e,t,r){return this.db.transaction(()=>!!this.db.prepare("SELECT id FROM auth_sessions WHERE id = ? AND ws_nonce_hash = ? AND ws_nonce_expires_at > ? AND revoked_at IS NULL").get(e,t,r)&&1===this.db.prepare("UPDATE auth_sessions SET ws_nonce_hash = NULL, ws_nonce_expires_at = NULL WHERE id = ? AND ws_nonce_hash = ?").run(e,t).changes)()}revokeSession(e,t){this.db.prepare("UPDATE auth_sessions SET revoked_at = ? WHERE id = ?").run(t,e)}revokeUserSessions(e,t,r){return(t?this.db.prepare("UPDATE auth_sessions SET revoked_at = ? WHERE user_id = ? AND id <> ? AND revoked_at IS NULL").run(r,e,t):this.db.prepare("UPDATE auth_sessions SET revoked_at = ? WHERE user_id = ? AND revoked_at IS NULL").run(r,e)).changes}recordLoginFailure(e,t,r){this.db.prepare("INSERT INTO login_attempts (username_normalized, ip, attempted_at) VALUES (?, ?, ?)").run(e,t,r)}countRecentLoginFailures(e,t,r){return this.db.prepare("SELECT COUNT(*) AS count FROM login_attempts WHERE username_normalized = ? AND ip = ? AND attempted_at >= ?").get(e,t,r).count}clearLoginFailures(e,t){this.db.prepare("DELETE FROM login_attempts WHERE username_normalized = ? AND ip = ?").run(e,t)}rowToUser(e){return{id:e.id,usernameNormalized:e.username_normalized,usernameDisplay:e.username_display,passwordHash:e.password_hash,passwordSalt:e.password_salt,passwordVersion:e.password_version,createdAt:e.created_at,passwordChangedAt:e.password_changed_at}}rowToSession(e){return{id:e.id,userId:e.user_id,tokenHash:e.token_hash,csrfHash:e.csrf_hash,wsNonceHash:e.ws_nonce_hash,wsNonceExpiresAt:e.ws_nonce_expires_at,deviceId:e.device_id,deviceName:e.device_name??"",userAgent:e.user_agent??"",createdAt:e.created_at,lastSeenAt:e.last_seen_at,expiresAt:e.expires_at,revokedAt:e.revoked_at}}}var sg="local";function sy(e){return(0,u.createHash)("sha256").update(e).digest()}class s_{constructor(e){this.db=sh(e).db}getOrCreatePrincipal(){let e=this.findPrincipal();if(e)return{userId:e.id,username:sg};let t=new Date().toISOString();this.db.prepare(`
500
+ `),this.db.pragma("foreign_keys = ON")})()}migrateMCPServerHeaders(){this.db.prepare("PRAGMA table_info(mcp_servers)").all().find(e=>"headers"===e.name)||this.db.exec("ALTER TABLE mcp_servers ADD COLUMN headers TEXT NOT NULL DEFAULT '{}'")}migrateSessionsParentId(){this.db.prepare("PRAGMA table_info(sessions)").all().find(e=>"parent_id"===e.name)||(this.db.exec("ALTER TABLE sessions ADD COLUMN parent_id TEXT REFERENCES sessions(id) ON DELETE CASCADE"),this.db.exec("CREATE INDEX IF NOT EXISTS idx_sessions_parent ON sessions(parent_id)"))}migrateMessagePresentation(){this.db.prepare("PRAGMA table_info(messages)").all().some(e=>"presentation"===e.name)||this.db.exec("ALTER TABLE messages ADD COLUMN presentation TEXT")}close(){this.db.close()}}var sb=new Map;function sw(e){let t=sb.get(e);return t||(t=new sv(e),sb.set(e,t)),t}class sN{constructor(e){this.baseDir=e,sw(e)}async create(e){let t=sw(this.baseDir),r=this.resolveProjectId(e.projectId),s=this.resolveParentId(e.parentSessionId);return t.db.prepare("INSERT INTO sessions (id, project_id, parent_id, title, status, created, updated, metadata) VALUES (?, ?, ?, ?, ?, ?, ?, ?)").run(e.id,r,s,e.title,e.status,e.created,e.updated,JSON.stringify(e.metadata)),e}resolveProjectId(e){return e?sw(this.baseDir).db.prepare("SELECT 1 FROM projects WHERE id = ?").get(e)?e:(console.warn(`[SQLiteSessionStore] project_id "${e}" not found — storing session without project (FK-safe).`),null):null}resolveParentId(e){return e?sw(this.baseDir).db.prepare("SELECT 1 FROM sessions WHERE id = ?").get(e)?e:(console.warn(`[SQLiteSessionStore] parent_id "${e}" not found — storing session as root (FK-safe).`),null):null}async get(e){let t=sw(this.baseDir).db.prepare("SELECT * FROM sessions WHERE id = ?").get(e);return t?this.rowToSession(t):null}async update(e,t){let r=sw(this.baseDir),s=await this.get(e);if(!s)throw Error(`Session not found: ${e}`);let i={...s,...t,updated:new Date().toISOString()};return r.db.prepare("UPDATE sessions SET project_id=?, title=?, status=?, updated=?, metadata=? WHERE id=?").run(this.resolveProjectId(i.projectId),i.title,i.status,i.updated,JSON.stringify(i.metadata),e),i}async consumePendingAutoTitle(e,t){let r=sw(this.baseDir);return r.db.transaction(()=>{let s=r.db.prepare("SELECT * FROM sessions WHERE id = ?").get(e);if(!s)return null;let i=function(e,t){if(!0!==e.metadata[V]||!t.trim())return null;let r={...e.metadata};return delete r[V],{title:t.slice(0,60),metadata:r}}({metadata:JSON.parse(s.metadata)},t);if(!i)return null;let a=new Date().toISOString();return r.db.prepare("UPDATE sessions SET title = ?, metadata = ?, updated = ? WHERE id = ?").run(i.title,JSON.stringify(i.metadata),a,e),this.rowToSession({...s,title:i.title,metadata:JSON.stringify(i.metadata),updated:a})})()}async delete(e){let t=sw(this.baseDir);t.db.prepare("DELETE FROM messages WHERE session_id = ?").run(e),t.db.prepare("DELETE FROM events WHERE session_id = ?").run(e),t.db.prepare("DELETE FROM sessions WHERE id = ?").run(e)}async list(e){let t=sw(this.baseDir);return(e?t.db.prepare("SELECT * FROM sessions WHERE project_id = ? ORDER BY updated DESC").all(e):t.db.prepare("SELECT * FROM sessions ORDER BY updated DESC").all()).map(e=>this.rowToSession(e))}async listChildren(e){return sw(this.baseDir).db.prepare("SELECT * FROM sessions WHERE parent_id = ? ORDER BY updated DESC").all(e).map(e=>this.rowToSession(e))}async addMessage(e,t){sw(this.baseDir).db.prepare("INSERT INTO messages (session_id, role, content, tool_calls, tool_call_id, name, presentation, timestamp) VALUES (?,?,?,?,?,?,?,?)").run(e,t.role,t.content??"",JSON.stringify(t.toolCalls??[]),t.toolCallId??null,t.name??null,t.presentation?JSON.stringify(t.presentation):null,Date.now())}async addEvent(e,t){sw(this.baseDir).db.prepare("INSERT INTO events (session_id, type, data, timestamp) VALUES (?,?,?,?)").run(e,t.type,JSON.stringify(t),Date.now())}async replaceMessages(e,t){let r=sw(this.baseDir),s=r.db.prepare("INSERT INTO messages (session_id, role, content, tool_calls, tool_call_id, name, presentation, timestamp) VALUES (?,?,?,?,?,?,?,?)");r.db.transaction(()=>{r.db.prepare("DELETE FROM messages WHERE session_id = ?").run(e);for(let r=0;r<t.length;r++){let i=t[r];s.run(e,i.role,i.content??"",JSON.stringify(i.toolCalls??[]),i.toolCallId??null,i.name??null,i.presentation?JSON.stringify(i.presentation):null,Date.now()+r)}})()}rowToSession(e){let t=sw(this.baseDir),r=t.db.prepare("SELECT * FROM messages WHERE session_id = ? ORDER BY id ASC").all(e.id),s=t.db.prepare("SELECT * FROM events WHERE session_id = ? ORDER BY id ASC").all(e.id);return{id:e.id,projectId:e.project_id??"",parentSessionId:e.parent_id??void 0,title:e.title,status:e.status,messages:r.map(e=>{let t=JSON.parse(e.tool_calls),r=e.tool_call_id??void 0,s=e.name??void 0,i=e.presentation?JSON.parse(e.presentation):void 0;return{role:e.role,content:e.content,...t?.length?{toolCalls:t}:{},...void 0!==r?{toolCallId:r}:{},...void 0!==s?{name:s}:{},...void 0!==i?{presentation:i}:{}}}),events:s.map(e=>JSON.parse(e.data)),created:e.created,updated:e.updated,metadata:JSON.parse(e.metadata)}}}class sS{constructor(e){this.baseDir=e,sw(e)}async get(e){let t=sw(this.baseDir).db.prepare("SELECT * FROM projects WHERE id = ?").get(e);return t?this.rowToProject(t):null}async create(e){return sw(this.baseDir).db.prepare("INSERT INTO projects (id, name, description, created, updated) VALUES (?, ?, ?, ?, ?)").run(e.id,e.name,e.description,e.created,e.updated),e}async update(e,t){let r=sw(this.baseDir),s=await this.get(e);if(!s)throw Error(`Project not found: ${e}`);let i={...s,...t,updated:new Date().toISOString()};return r.db.prepare("UPDATE projects SET name=?, description=?, updated=? WHERE id=?").run(i.name,i.description,i.updated,e),i}async delete(e){let t=sw(this.baseDir);t.db.prepare("UPDATE sessions SET project_id = NULL WHERE project_id = ?").run(e),t.db.prepare("DELETE FROM projects WHERE id = ?").run(e)}async list(){return sw(this.baseDir).db.prepare("SELECT * FROM projects ORDER BY created DESC, id ASC").all().map(e=>this.rowToProject(e))}rowToProject(e){return{id:e.id,name:e.name,description:e.description,created:e.created,updated:e.updated}}}class sk{constructor(e){this.db=sw(e).db}countUsers(){return this.db.prepare("SELECT COUNT(*) AS count FROM users").get().count}createFirstUser(e){return this.db.transaction(()=>{if(0!==this.countUsers())throw Error("setup already completed");return this.db.prepare("INSERT INTO users (id, username_normalized, username_display, password_hash, password_salt, password_version, created_at, password_changed_at) VALUES (?, ?, ?, ?, ?, ?, ?, ?)").run(e.id,e.usernameNormalized,e.usernameDisplay,e.passwordHash,e.passwordSalt,e.passwordVersion,e.createdAt,e.passwordChangedAt),e})()}findUserById(e){let t=this.db.prepare("SELECT * FROM users WHERE id = ?").get(e);return t?this.rowToUser(t):null}findUserByNormalizedUsername(e){let t=this.db.prepare("SELECT * FROM users WHERE username_normalized = ?").get(e);return t?this.rowToUser(t):null}createSession(e){return this.db.prepare("INSERT INTO auth_sessions (id, user_id, token_hash, csrf_hash, ws_nonce_hash, ws_nonce_expires_at, device_id, device_name, user_agent, created_at, last_seen_at, expires_at, revoked_at) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)").run(e.id,e.userId,e.tokenHash,e.csrfHash,e.wsNonceHash,e.wsNonceExpiresAt,e.deviceId,e.deviceName,e.userAgent,e.createdAt,e.lastSeenAt,e.expiresAt,e.revokedAt),e}findSessionByTokenHash(e,t){let r=this.db.prepare("SELECT * FROM auth_sessions WHERE token_hash = ? AND revoked_at IS NULL AND expires_at > ?").get(e,t);return r?this.rowToSession(r):null}rotateCsrf(e,t,r,s){this.db.prepare("UPDATE auth_sessions SET csrf_hash = ?, last_seen_at = ?, expires_at = ? WHERE id = ? AND revoked_at IS NULL").run(t,r,s,e)}issueWsNonce(e,t,r){this.db.prepare("UPDATE auth_sessions SET ws_nonce_hash = ?, ws_nonce_expires_at = ? WHERE id = ? AND revoked_at IS NULL").run(t,r,e)}consumeWsNonce(e,t,r){return this.db.transaction(()=>!!this.db.prepare("SELECT id FROM auth_sessions WHERE id = ? AND ws_nonce_hash = ? AND ws_nonce_expires_at > ? AND revoked_at IS NULL").get(e,t,r)&&1===this.db.prepare("UPDATE auth_sessions SET ws_nonce_hash = NULL, ws_nonce_expires_at = NULL WHERE id = ? AND ws_nonce_hash = ?").run(e,t).changes)()}revokeSession(e,t){this.db.prepare("UPDATE auth_sessions SET revoked_at = ? WHERE id = ?").run(t,e)}revokeUserSessions(e,t,r){return(t?this.db.prepare("UPDATE auth_sessions SET revoked_at = ? WHERE user_id = ? AND id <> ? AND revoked_at IS NULL").run(r,e,t):this.db.prepare("UPDATE auth_sessions SET revoked_at = ? WHERE user_id = ? AND revoked_at IS NULL").run(r,e)).changes}recordLoginFailure(e,t,r){this.db.prepare("INSERT INTO login_attempts (username_normalized, ip, attempted_at) VALUES (?, ?, ?)").run(e,t,r)}countRecentLoginFailures(e,t,r){return this.db.prepare("SELECT COUNT(*) AS count FROM login_attempts WHERE username_normalized = ? AND ip = ? AND attempted_at >= ?").get(e,t,r).count}clearLoginFailures(e,t){this.db.prepare("DELETE FROM login_attempts WHERE username_normalized = ? AND ip = ?").run(e,t)}rowToUser(e){return{id:e.id,usernameNormalized:e.username_normalized,usernameDisplay:e.username_display,passwordHash:e.password_hash,passwordSalt:e.password_salt,passwordVersion:e.password_version,createdAt:e.created_at,passwordChangedAt:e.password_changed_at}}rowToSession(e){return{id:e.id,userId:e.user_id,tokenHash:e.token_hash,csrfHash:e.csrf_hash,wsNonceHash:e.ws_nonce_hash,wsNonceExpiresAt:e.ws_nonce_expires_at,deviceId:e.device_id,deviceName:e.device_name??"",userAgent:e.user_agent??"",createdAt:e.created_at,lastSeenAt:e.last_seen_at,expiresAt:e.expires_at,revokedAt:e.revoked_at}}}var sL="local";function sx(e){return(0,u.createHash)("sha256").update(e).digest()}class sI{constructor(e){this.db=sw(e).db}getOrCreatePrincipal(){let e=this.findPrincipal();if(e)return{userId:e.id,username:sL};let t=new Date().toISOString();this.db.prepare(`
501
501
  INSERT OR IGNORE INTO users (
502
502
  id, username_normalized, username_display, password_hash, password_salt,
503
503
  password_version, created_at, password_changed_at
504
504
  ) VALUES (?, ?, ?, ?, ?, ?, ?, ?)
505
- `).run("local-web",sg,sg,(0,u.randomBytes)(32),(0,u.randomBytes)(16),1,t,t);let r=this.findPrincipal();if(!r)throw Error("failed to initialize anonymous web principal");return{userId:r.id,username:sg}}issueWsNonce(e,t,r,s=Date.now()){let i=sy(e);this.db.transaction(()=>{this.db.prepare("DELETE FROM anonymous_ws_nonces WHERE expires_at <= ?").run(s),this.db.prepare("INSERT INTO anonymous_ws_nonces (nonce_hash, user_id, expires_at) VALUES (?, ?, ?)").run(i,t,r)})()}consumeWsNonce(e,t=Date.now()){let r=this.db.prepare(`
505
+ `).run("local-web",sL,sL,(0,u.randomBytes)(32),(0,u.randomBytes)(16),1,t,t);let r=this.findPrincipal();if(!r)throw Error("failed to initialize anonymous web principal");return{userId:r.id,username:sL}}issueWsNonce(e,t,r,s=Date.now()){let i=sx(e);this.db.transaction(()=>{this.db.prepare("DELETE FROM anonymous_ws_nonces WHERE expires_at <= ?").run(s),this.db.prepare("INSERT INTO anonymous_ws_nonces (nonce_hash, user_id, expires_at) VALUES (?, ?, ?)").run(i,t,r)})()}consumeWsNonce(e,t=Date.now()){let r=this.db.prepare(`
506
506
  DELETE FROM anonymous_ws_nonces
507
507
  WHERE nonce_hash = ? AND expires_at > ?
508
508
  RETURNING user_id
509
- `).get(sy(e),t);return r?.user_id??null}findPrincipal(){return this.db.prepare("SELECT id, username_display FROM users ORDER BY created_at, id LIMIT 1").get()}}class sT{constructor(e){this.db=sh(e).db}markStaleTerminalsExited(e){return this.db.prepare("UPDATE terminal_tabs SET status='exited', exited_at=? WHERE status IN ('active','detached')").run(e).changes}listTabs(e){return this.db.prepare("SELECT * FROM terminal_tabs WHERE user_id=? AND status<>'closed' ORDER BY sort_order, created_at").all(e).map(sv)}createTab(e){this.db.prepare("INSERT INTO terminal_tabs (id,user_id,title,shell,start_cwd,current_cwd,status,sort_order,created_at,last_active_at,exited_at,closed_at) VALUES (?,?,?,?,?,?,?,?,?,?,?,?)").run(e.id,e.userId,e.title,e.shell,e.startCwd,e.currentCwd,e.status,e.sortOrder,e.createdAt,e.lastActiveAt,e.exitedAt,e.closedAt)}updateTab(e,t,r){let s={title:"title",currentCwd:"current_cwd",status:"status",sortOrder:"sort_order",lastActiveAt:"last_active_at",exitedAt:"exited_at",closedAt:"closed_at"},i=Object.entries(r).filter(([e])=>s[e]);return!!i.length&&1===this.db.prepare(`UPDATE terminal_tabs SET ${i.map(([e])=>`${s[e]}=?`).join(",")} WHERE id=? AND user_id=?`).run(...i.map(([,e])=>e),e,t).changes}getPreferences(e){let t=this.db.prepare("SELECT * FROM user_preferences WHERE user_id=?").get(e);return t?sb(t):null}savePreferences(e,t){if(null===t)try{return this.db.prepare("INSERT INTO user_preferences (user_id,revision,theme,terminal_font_size,file_button_position_json,keybar_position_json,keybar_hidden,key_order_json,pinned_commands_json,updated_at) VALUES (?,?,?,?,?,?,?,?,?,?)").run(e.userId,e.revision,e.theme,e.terminalFontSize,JSON.stringify(e.fileButtonPosition),JSON.stringify(e.keybarPosition),e.keybarHidden?1:0,JSON.stringify(e.keyOrder),JSON.stringify(e.pinnedCommands),e.updatedAt),!0}catch{return!1}return 1===this.db.prepare("UPDATE user_preferences SET revision=?,theme=?,terminal_font_size=?,file_button_position_json=?,keybar_position_json=?,keybar_hidden=?,key_order_json=?,pinned_commands_json=?,updated_at=? WHERE user_id=? AND revision=?").run(e.revision,e.theme,e.terminalFontSize,JSON.stringify(e.fileButtonPosition),JSON.stringify(e.keybarPosition),e.keybarHidden?1:0,JSON.stringify(e.keyOrder),JSON.stringify(e.pinnedCommands),e.updatedAt,e.userId,t).changes}getDeviceState(e,t){let r=this.db.prepare("SELECT * FROM device_states WHERE user_id=? AND device_id=?").get(e,t);return r?sw(r):null}saveDeviceState(e){this.db.prepare("INSERT INTO device_states (user_id,device_id,active_terminal_id,drawer_open,drawer_tab,file_tree_root,file_tree_follow_mode,expanded_paths_json,selected_file,terminal_scroll_json,updated_at) VALUES (?,?,?,?,?,?,?,?,?,?,?) ON CONFLICT(user_id,device_id) DO UPDATE SET active_terminal_id=excluded.active_terminal_id,drawer_open=excluded.drawer_open,drawer_tab=excluded.drawer_tab,file_tree_root=excluded.file_tree_root,file_tree_follow_mode=excluded.file_tree_follow_mode,expanded_paths_json=excluded.expanded_paths_json,selected_file=excluded.selected_file,terminal_scroll_json=excluded.terminal_scroll_json,updated_at=excluded.updated_at").run(e.userId,e.deviceId,e.activeTerminalId,e.drawerOpen?1:0,e.drawerTab,e.fileTreeRoot,e.fileTreeFollowMode?1:0,JSON.stringify(e.expandedPaths),e.selectedFile,JSON.stringify(e.terminalScroll),e.updatedAt)}addHistory(e,t,r,s,i,a=null){let n=r.toLowerCase(),o=this.db.prepare("INSERT INTO command_history (user_id,terminal_id,command,command_normalized,cwd,executed_at,exit_code) VALUES (?,?,?,?,?,?,?)").run(e,t,sS(r),sS(n),s,i,a);this.db.prepare("DELETE FROM command_history WHERE user_id=? AND command_normalized=? AND id<>?").run(e,sS(n),o.lastInsertRowid),this.db.prepare("DELETE FROM command_history WHERE user_id=? AND id NOT IN (SELECT id FROM command_history WHERE user_id=? ORDER BY id DESC LIMIT 5000)").run(e,e)}listHistory(e,t="",r=100,s){let i=`%${t.toLowerCase()}%`,a="AND (exit_code IS NULL OR exit_code=0)",n=s?this.db.prepare(`SELECT * FROM command_history WHERE user_id=? AND terminal_id=? AND command_normalized LIKE ? ${a} ORDER BY id DESC LIMIT ?`).all(e,s,i,r):this.db.prepare(`SELECT * FROM command_history WHERE user_id=? AND command_normalized LIKE ? ${a} ORDER BY id DESC LIMIT ?`).all(e,i,r),o=new Set;return n.filter(e=>!o.has(e.command_normalized)&&(o.add(e.command_normalized),!0)).map(sN)}deleteHistory(e,t){return 1===this.db.prepare("DELETE FROM command_history WHERE id=? AND user_id=?").run(t,e).changes}clearHistory(e,t){return(t?this.db.prepare("DELETE FROM command_history WHERE user_id=? AND terminal_id=?").run(e,t):this.db.prepare("DELETE FROM command_history WHERE user_id=?").run(e)).changes}}var sE=(e,t)=>{try{return JSON.parse(e)}catch{return t}},sv=e=>({id:e.id,userId:e.user_id,title:e.title,shell:e.shell,startCwd:e.start_cwd,currentCwd:e.current_cwd,status:e.status,sortOrder:e.sort_order,createdAt:e.created_at,lastActiveAt:e.last_active_at,exitedAt:e.exited_at,closedAt:e.closed_at}),sb=e=>({userId:e.user_id,revision:e.revision,theme:e.theme,terminalFontSize:e.terminal_font_size,fileButtonPosition:sE(e.file_button_position_json,{}),keybarPosition:sE(e.keybar_position_json,{}),keybarHidden:!!e.keybar_hidden,keyOrder:sE(e.key_order_json,[]),pinnedCommands:function(e){if(null==e)return ev();try{return eb(JSON.parse(e))}catch{return ev()}}(e.pinned_commands_json),updatedAt:e.updated_at}),sw=e=>({userId:e.user_id,deviceId:e.device_id,activeTerminalId:e.active_terminal_id,drawerOpen:!!e.drawer_open,drawerTab:e.drawer_tab,fileTreeRoot:e.file_tree_root,fileTreeFollowMode:!!e.file_tree_follow_mode,expandedPaths:sE(e.expanded_paths_json,[]),selectedFile:e.selected_file,terminalScroll:sE(e.terminal_scroll_json,{}),updatedAt:e.updated_at}),sN=e=>({id:e.id,userId:e.user_id,terminalId:e.terminal_id,command:e.command,cwd:e.cwd,executedAt:e.executed_at,exitCode:e.exit_code??null});function sS(e){return/(?:token|password|secret|api[_-]?key)\s*=/.test(e.toLowerCase())?"[REDACTED]":e}class sk extends Error{constructor(e,t,r){super(t,r),this.name="HostPathError",this.code=e}}function sL(e,t){let r=e?.code;return"ENOENT"===r||"ENOTDIR"===r?new sk("PATH_NOT_FOUND",`路径不存在:${t}`,{cause:e}):new sk("PATH_UNREADABLE",`无法访问路径:${t}`,{cause:e})}function sx(e){let t=(0,l.resolve)(e);try{return c.realpathSync.native(t)}catch(e){throw sL(e,t)}}class sI{constructor(e){let t=[];for(let r of e){let e;if(!r?.trim())continue;let s=sx(r.trim());try{e=(0,c.statSync)(s)}catch(e){throw sL(e,s)}if(!e.isDirectory())throw new sk("PATH_NOT_DIRECTORY",`不是目录:${s}`);t.includes(s)||t.push(s)}if(0===t.length)throw new sk("PATH_UNREADABLE","没有可用的宿主机目录根路径");this.roots=t}static fromEnvironment(e,t){return new sI((e?.trim()?e:t).split(l.delimiter))}assertAllowed(e){if("string"!=typeof e||!e.trim())throw new sk("PATH_NOT_FOUND","路径不能为空");let t=sx(e.trim());if(!this.roots.some(e=>(function(e,t){let r=(0,l.relative)(e,t);return""===r||".."!==r&&!r.startsWith(`..${l.sep}`)&&!(0,l.isAbsolute)(r)})(e,t)))throw new sk("PATH_OUTSIDE_ROOT",`路径不在允许范围内:${t}`);return t}assertDirectory(e){let t;let r=this.assertAllowed(e);try{t=(0,c.statSync)(r)}catch(e){throw sL(e,r)}if(!t.isDirectory())throw new sk("PATH_NOT_DIRECTORY",`不是目录:${r}`);return r}listDirectories(e){let t;let r=this.assertDirectory(e);try{t=(0,c.readdirSync)(r,{withFileTypes:!0})}catch(e){throw sL(e,r)}let s=[];for(let e of t){let t,i;let a=(0,l.resolve)(r,e.name);try{t=this.assertAllowed(a)}catch{continue}try{let e=(0,c.statSync)(t);if(e.isDirectory())i="directory";else{if(!e.isFile())continue;i="file"}}catch{continue}s.push({name:e.name||(0,l.basename)(t),path:t,kind:i,hasChildren:"directory"===i&&this.hasAllowedDirectoryChild(t)})}return s.sort((e,t)=>{if(e.kind!==t.kind)return"directory"===e.kind?-1:1;let r=e.name.startsWith(".");return r!==t.name.startsWith(".")?r?1:-1:e.name.localeCompare(t.name,void 0,{sensitivity:"base"})})}hasAllowedDirectoryChild(e){try{return(0,c.readdirSync)(e,{withFileTypes:!0}).some(t=>{if(!t.isDirectory()&&!t.isSymbolicLink())return!1;try{return this.assertDirectory((0,l.resolve)(e,t.name)),!0}catch{return!1}})}catch{return!1}}}}};
509
+ `).get(sx(e),t);return r?.user_id??null}findPrincipal(){return this.db.prepare("SELECT id, username_display FROM users ORDER BY created_at, id LIMIT 1").get()}}class sO{constructor(e){this.db=sw(e).db}markStaleTerminalsExited(e){return this.db.prepare("UPDATE terminal_tabs SET status='exited', exited_at=? WHERE status IN ('active','detached')").run(e).changes}listTabs(e){return this.db.prepare("SELECT * FROM terminal_tabs WHERE user_id=? AND status<>'closed' ORDER BY sort_order, created_at").all(e).map(sC)}createTab(e){this.db.prepare("INSERT INTO terminal_tabs (id,user_id,title,shell,start_cwd,current_cwd,status,sort_order,created_at,last_active_at,exited_at,closed_at) VALUES (?,?,?,?,?,?,?,?,?,?,?,?)").run(e.id,e.userId,e.title,e.shell,e.startCwd,e.currentCwd,e.status,e.sortOrder,e.createdAt,e.lastActiveAt,e.exitedAt,e.closedAt)}updateTab(e,t,r){let s={title:"title",currentCwd:"current_cwd",status:"status",sortOrder:"sort_order",lastActiveAt:"last_active_at",exitedAt:"exited_at",closedAt:"closed_at"},i=Object.entries(r).filter(([e])=>s[e]);return!!i.length&&1===this.db.prepare(`UPDATE terminal_tabs SET ${i.map(([e])=>`${s[e]}=?`).join(",")} WHERE id=? AND user_id=?`).run(...i.map(([,e])=>e),e,t).changes}getPreferences(e){let t=this.db.prepare("SELECT * FROM user_preferences WHERE user_id=?").get(e);return t?sR(t):null}savePreferences(e,t){if(null===t)try{return this.db.prepare("INSERT INTO user_preferences (user_id,revision,theme,terminal_font_size,file_button_position_json,keybar_position_json,keybar_hidden,key_order_json,pinned_commands_json,updated_at) VALUES (?,?,?,?,?,?,?,?,?,?)").run(e.userId,e.revision,e.theme,e.terminalFontSize,JSON.stringify(e.fileButtonPosition),JSON.stringify(e.keybarPosition),e.keybarHidden?1:0,JSON.stringify(e.keyOrder),JSON.stringify(e.pinnedCommands),e.updatedAt),!0}catch{return!1}return 1===this.db.prepare("UPDATE user_preferences SET revision=?,theme=?,terminal_font_size=?,file_button_position_json=?,keybar_position_json=?,keybar_hidden=?,key_order_json=?,pinned_commands_json=?,updated_at=? WHERE user_id=? AND revision=?").run(e.revision,e.theme,e.terminalFontSize,JSON.stringify(e.fileButtonPosition),JSON.stringify(e.keybarPosition),e.keybarHidden?1:0,JSON.stringify(e.keyOrder),JSON.stringify(e.pinnedCommands),e.updatedAt,e.userId,t).changes}getDeviceState(e,t){let r=this.db.prepare("SELECT * FROM device_states WHERE user_id=? AND device_id=?").get(e,t);return r?sD(r):null}saveDeviceState(e){this.db.prepare("INSERT INTO device_states (user_id,device_id,active_terminal_id,drawer_open,drawer_tab,file_tree_root,file_tree_follow_mode,expanded_paths_json,selected_file,terminal_scroll_json,updated_at) VALUES (?,?,?,?,?,?,?,?,?,?,?) ON CONFLICT(user_id,device_id) DO UPDATE SET active_terminal_id=excluded.active_terminal_id,drawer_open=excluded.drawer_open,drawer_tab=excluded.drawer_tab,file_tree_root=excluded.file_tree_root,file_tree_follow_mode=excluded.file_tree_follow_mode,expanded_paths_json=excluded.expanded_paths_json,selected_file=excluded.selected_file,terminal_scroll_json=excluded.terminal_scroll_json,updated_at=excluded.updated_at").run(e.userId,e.deviceId,e.activeTerminalId,e.drawerOpen?1:0,e.drawerTab,e.fileTreeRoot,e.fileTreeFollowMode?1:0,JSON.stringify(e.expandedPaths),e.selectedFile,JSON.stringify(e.terminalScroll),e.updatedAt)}addHistory(e,t,r,s,i,a=null){let n=r.toLowerCase(),o=this.db.prepare("INSERT INTO command_history (user_id,terminal_id,command,command_normalized,cwd,executed_at,exit_code) VALUES (?,?,?,?,?,?,?)").run(e,t,sj(r),sj(n),s,i,a);this.db.prepare("DELETE FROM command_history WHERE user_id=? AND command_normalized=? AND id<>?").run(e,sj(n),o.lastInsertRowid),this.db.prepare("DELETE FROM command_history WHERE user_id=? AND id NOT IN (SELECT id FROM command_history WHERE user_id=? ORDER BY id DESC LIMIT 5000)").run(e,e)}listHistory(e,t="",r=100,s){let i=`%${t.toLowerCase()}%`,a="AND (exit_code IS NULL OR exit_code=0)",n=s?this.db.prepare(`SELECT * FROM command_history WHERE user_id=? AND terminal_id=? AND command_normalized LIKE ? ${a} ORDER BY id DESC LIMIT ?`).all(e,s,i,r):this.db.prepare(`SELECT * FROM command_history WHERE user_id=? AND command_normalized LIKE ? ${a} ORDER BY id DESC LIMIT ?`).all(e,i,r),o=new Set;return n.filter(e=>!o.has(e.command_normalized)&&(o.add(e.command_normalized),!0)).map(sU)}deleteHistory(e,t){return 1===this.db.prepare("DELETE FROM command_history WHERE id=? AND user_id=?").run(t,e).changes}clearHistory(e,t){return(t?this.db.prepare("DELETE FROM command_history WHERE user_id=? AND terminal_id=?").run(e,t):this.db.prepare("DELETE FROM command_history WHERE user_id=?").run(e)).changes}}var sA=(e,t)=>{try{return JSON.parse(e)}catch{return t}},sC=e=>({id:e.id,userId:e.user_id,title:e.title,shell:e.shell,startCwd:e.start_cwd,currentCwd:e.current_cwd,status:e.status,sortOrder:e.sort_order,createdAt:e.created_at,lastActiveAt:e.last_active_at,exitedAt:e.exited_at,closedAt:e.closed_at}),sR=e=>({userId:e.user_id,revision:e.revision,theme:e.theme,terminalFontSize:e.terminal_font_size,fileButtonPosition:sA(e.file_button_position_json,{}),keybarPosition:sA(e.keybar_position_json,{}),keybarHidden:!!e.keybar_hidden,keyOrder:sA(e.key_order_json,[]),pinnedCommands:function(e){if(null==e)return eC();try{return eR(JSON.parse(e))}catch{return eC()}}(e.pinned_commands_json),updatedAt:e.updated_at}),sD=e=>({userId:e.user_id,deviceId:e.device_id,activeTerminalId:e.active_terminal_id,drawerOpen:!!e.drawer_open,drawerTab:e.drawer_tab,fileTreeRoot:e.file_tree_root,fileTreeFollowMode:!!e.file_tree_follow_mode,expandedPaths:sA(e.expanded_paths_json,[]),selectedFile:e.selected_file,terminalScroll:sA(e.terminal_scroll_json,{}),updatedAt:e.updated_at}),sU=e=>({id:e.id,userId:e.user_id,terminalId:e.terminal_id,command:e.command,cwd:e.cwd,executedAt:e.executed_at,exitCode:e.exit_code??null});function sj(e){return/(?:token|password|secret|api[_-]?key)\s*=/.test(e.toLowerCase())?"[REDACTED]":e}class sP extends Error{constructor(e,t,r){super(t,r),this.name="HostPathError",this.code=e}}function sF(e,t){let r=e?.code;return"ENOENT"===r||"ENOTDIR"===r?new sP("PATH_NOT_FOUND",`路径不存在:${t}`,{cause:e}):new sP("PATH_UNREADABLE",`无法访问路径:${t}`,{cause:e})}function sM(e){let t=(0,l.resolve)(e);try{return c.realpathSync.native(t)}catch(e){throw sF(e,t)}}class s${constructor(e){let t=[];for(let r of e){let e;if(!r?.trim())continue;let s=sM(r.trim());try{e=(0,c.statSync)(s)}catch(e){throw sF(e,s)}if(!e.isDirectory())throw new sP("PATH_NOT_DIRECTORY",`不是目录:${s}`);t.includes(s)||t.push(s)}if(0===t.length)throw new sP("PATH_UNREADABLE","没有可用的宿主机目录根路径");this.roots=t}static fromEnvironment(e,t){return new s$((e?.trim()?e:t).split(l.delimiter))}assertAllowed(e){if("string"!=typeof e||!e.trim())throw new sP("PATH_NOT_FOUND","路径不能为空");let t=sM(e.trim());if(!this.roots.some(e=>(function(e,t){let r=(0,l.relative)(e,t);return""===r||".."!==r&&!r.startsWith(`..${l.sep}`)&&!(0,l.isAbsolute)(r)})(e,t)))throw new sP("PATH_OUTSIDE_ROOT",`路径不在允许范围内:${t}`);return t}assertDirectory(e){let t;let r=this.assertAllowed(e);try{t=(0,c.statSync)(r)}catch(e){throw sF(e,r)}if(!t.isDirectory())throw new sP("PATH_NOT_DIRECTORY",`不是目录:${r}`);return r}listDirectories(e){let t;let r=this.assertDirectory(e);try{t=(0,c.readdirSync)(r,{withFileTypes:!0})}catch(e){throw sF(e,r)}let s=[];for(let e of t){let t,i;let a=(0,l.resolve)(r,e.name);try{t=this.assertAllowed(a)}catch{continue}try{let e=(0,c.statSync)(t);if(e.isDirectory())i="directory";else{if(!e.isFile())continue;i="file"}}catch{continue}s.push({name:e.name||(0,l.basename)(t),path:t,kind:i,hasChildren:"directory"===i&&this.hasAllowedDirectoryChild(t)})}return s.sort((e,t)=>{if(e.kind!==t.kind)return"directory"===e.kind?-1:1;let r=e.name.startsWith(".");return r!==t.name.startsWith(".")?r?1:-1:e.name.localeCompare(t.name,void 0,{sensitivity:"base"})})}hasAllowedDirectoryChild(e){try{return(0,c.readdirSync)(e,{withFileTypes:!0}).some(t=>{if(!t.isDirectory()&&!t.isSymbolicLink())return!1;try{return this.assertDirectory((0,l.resolve)(e,t.name)),!0}catch{return!1}})}catch{return!1}}}}};