agentroam-runtime-darwin-arm64 0.2.0-preview.13 → 0.2.0-preview.14
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/manifest.json +1 -1
- package/package.json +1 -1
- package/runtime/.next/BUILD_ID +1 -1
- package/runtime/.next/app-build-manifest.json +8 -8
- package/runtime/.next/app-path-routes-manifest.json +1 -1
- package/runtime/.next/build-manifest.json +6 -6
- package/runtime/.next/prerender-manifest.json +1 -1
- package/runtime/.next/react-loadable-manifest.json +1 -1
- package/runtime/.next/required-server-files.json +1 -1
- package/runtime/.next/routes-manifest.json +1 -1
- package/runtime/.next/server/app/_not-found/page.js +1 -1
- package/runtime/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/runtime/.next/server/app/_not-found.html +1 -1
- package/runtime/.next/server/app/_not-found.rsc +1 -1
- package/runtime/.next/server/app/api/agent/abort/route.js +1 -1
- package/runtime/.next/server/app/api/agent/answer/route.js +1 -1
- package/runtime/.next/server/app/api/agent/model/route.js +1 -1
- package/runtime/.next/server/app/api/agent/models/route.js +1 -1
- package/runtime/.next/server/app/api/agent/run/route.js +1 -1
- package/runtime/.next/server/app/api/agent/runtime-health/route.js +1 -1
- package/runtime/.next/server/app/api/agent/steer/route.js +1 -1
- package/runtime/.next/server/app/api/agent/stream/route.js +4 -4
- package/runtime/.next/server/app/api/agent-workspaces/[workspaceId]/sessions/route.js +1 -1
- package/runtime/.next/server/app/api/agent-workspaces/route.js +1 -1
- package/runtime/.next/server/app/api/auth/verify/route.js +1 -1
- package/runtime/.next/server/app/api/mcp/connect/route.js +1 -1
- package/runtime/.next/server/app/api/mcp/disconnect/route.js +1 -1
- package/runtime/.next/server/app/api/mcp/servers/route.js +1 -1
- package/runtime/.next/server/app/api/memory/[key]/route.js +1 -1
- package/runtime/.next/server/app/api/memory/route.js +1 -1
- package/runtime/.next/server/app/api/plugins/load/route.js +1 -1
- package/runtime/.next/server/app/api/projects/[id]/route.js +1 -1
- package/runtime/.next/server/app/api/projects/check/route.js +1 -1
- package/runtime/.next/server/app/api/projects/directories/route.js +1 -1
- package/runtime/.next/server/app/api/projects/roots/route.js +1 -1
- package/runtime/.next/server/app/api/projects/route.js +1 -1
- package/runtime/.next/server/app/api/remote-tools/register/route.js +1 -1
- package/runtime/.next/server/app/api/sessions/[id]/changes/route.js +2 -2
- package/runtime/.next/server/app/api/sessions/[id]/fork/route.js +1 -1
- package/runtime/.next/server/app/api/sessions/[id]/goals/route.js +1 -1
- package/runtime/.next/server/app/api/sessions/[id]/handoff/route.js +1 -1
- package/runtime/.next/server/app/api/sessions/[id]/query-index/route.js +1 -1
- package/runtime/.next/server/app/api/sessions/[id]/release/route.js +1 -0
- package/runtime/.next/server/app/api/sessions/[id]/release/route.js.nft.json +1 -0
- package/runtime/.next/server/app/api/sessions/[id]/route.js +1 -1
- package/runtime/.next/server/app/api/sessions/[id]/tool-result/route.js +1 -0
- package/runtime/.next/server/app/api/sessions/[id]/tool-result/route.js.nft.json +1 -0
- package/runtime/.next/server/app/api/sessions/route.js +1 -1
- package/runtime/.next/server/app/api/skills/route.js +1 -1
- package/runtime/.next/server/app/api/tools/route.js +1 -1
- package/runtime/.next/server/app/api/web-auth/login/route.js +1 -1
- package/runtime/.next/server/app/api/web-auth/logout/route.js +1 -1
- package/runtime/.next/server/app/api/web-auth/revoke-all/route.js +1 -1
- package/runtime/.next/server/app/api/web-auth/setup/route.js +1 -1
- package/runtime/.next/server/app/api/web-auth/status/route.js +1 -1
- package/runtime/.next/server/app/api/web-console/bootstrap/route.js +1 -1
- package/runtime/.next/server/app/api/web-console/device-state/route.js +1 -1
- package/runtime/.next/server/app/api/web-console/history/route.js +1 -1
- package/runtime/.next/server/app/api/web-console/preferences/route.js +1 -1
- package/runtime/.next/server/app/web/page.js +11 -8
- package/runtime/.next/server/app/web/page_client-reference-manifest.js +1 -1
- package/runtime/.next/server/app/web.html +1 -1
- package/runtime/.next/server/app/web.rsc +2 -2
- package/runtime/.next/server/app-paths-manifest.json +27 -25
- package/runtime/.next/server/chunks/1322.js +37 -37
- package/runtime/.next/server/chunks/2083.js +12 -12
- package/runtime/.next/server/chunks/5303.js +1 -1
- package/runtime/.next/server/chunks/7186.js +3 -3
- package/runtime/.next/server/middleware-build-manifest.js +1 -1
- package/runtime/.next/server/middleware-react-loadable-manifest.js +1 -1
- package/runtime/.next/server/pages/404.html +1 -1
- package/runtime/.next/server/pages/500.html +1 -1
- package/runtime/.next/server/server-reference-manifest.json +1 -1
- package/runtime/.next/static/chunks/137.e70970795c25de4f.js +1 -0
- package/runtime/.next/static/chunks/919-e3163c9448664f1a.js +1 -0
- package/runtime/.next/static/chunks/app/web/page-f8e555341da23177.js +1 -0
- package/runtime/.next/static/chunks/main-app-07d67f2d4e96ecb8.js +1 -0
- package/runtime/.next/static/chunks/{webpack-d22db940097662ef.js → webpack-819dfd677dd52477.js} +1 -1
- package/runtime/lib/file-preview-service.mjs +29 -0
- package/runtime/lib/markdown-preview.mjs +65 -0
- package/runtime/node_modules/.package-lock.json +23 -11
- package/runtime/node_modules/@agent/core/dist/domain/agent/entities.d.ts +3 -0
- package/runtime/node_modules/@agent/core/dist/domain/agent/entities.d.ts.map +1 -1
- package/runtime/node_modules/@agent/core/dist/domain/model/entities.d.ts +7 -0
- package/runtime/node_modules/@agent/core/dist/domain/model/entities.d.ts.map +1 -1
- package/runtime/node_modules/@agent/core/dist/domain/session/entities.d.ts +16 -0
- package/runtime/node_modules/@agent/core/dist/domain/session/entities.d.ts.map +1 -1
- package/runtime/node_modules/@agent/core/dist/domain/session/index.d.ts +2 -2
- package/runtime/node_modules/@agent/core/dist/domain/session/index.d.ts.map +1 -1
- package/runtime/node_modules/@agent/core/dist/index.js +2 -1
- package/runtime/node_modules/@agent/core/dist/index.js.map +1 -1
- package/runtime/node_modules/@anthropic-ai/claude-agent-sdk/bridge.mjs +39 -39
- package/runtime/node_modules/@anthropic-ai/claude-agent-sdk/browser-sdk.js +1 -1
- package/runtime/node_modules/@anthropic-ai/claude-agent-sdk/manifest.json +18 -20
- package/runtime/node_modules/@anthropic-ai/claude-agent-sdk/manifest.zst.json +23 -25
- package/runtime/node_modules/@anthropic-ai/claude-agent-sdk/package.json +10 -10
- package/runtime/node_modules/@anthropic-ai/claude-agent-sdk/sdk.mjs +41 -41
- package/runtime/node_modules/marked/LICENSE.md +44 -0
- package/runtime/node_modules/marked/README.md +106 -0
- package/runtime/node_modules/marked/bin/main.js +282 -0
- package/runtime/node_modules/marked/bin/marked.js +15 -0
- package/runtime/node_modules/marked/lib/marked.cjs +2211 -0
- package/runtime/node_modules/marked/lib/marked.d.cts +728 -0
- package/runtime/node_modules/marked/lib/marked.esm.js +2189 -0
- package/runtime/node_modules/marked/lib/marked.umd.js +2213 -0
- package/runtime/node_modules/marked/man/marked.1 +111 -0
- package/runtime/node_modules/marked/man/marked.1.md +92 -0
- package/runtime/node_modules/marked/marked.min.js +69 -0
- package/runtime/node_modules/marked/package.json +111 -0
- package/runtime/package-lock.json +48 -35
- package/runtime/package.json +1 -0
- package/runtime/webapp/dist/assets/App-u5-hbDMQ.js +285 -0
- package/runtime/webapp/dist/assets/index-3s0r60kD.css +1 -0
- package/runtime/webapp/dist/assets/{index-BAH3pT_c.js → index-jGt09xOx.js} +2 -2
- package/runtime/webapp/dist/index.html +2 -2
- package/runtime/ws-server.mjs +13 -0
- package/runtime/.next/static/chunks/108-bc4a0fe192dfff08.js +0 -1
- package/runtime/.next/static/chunks/137.261fab9d606d75d3.js +0 -1
- package/runtime/.next/static/chunks/app/web/page-8e4da33d77868123.js +0 -1
- package/runtime/.next/static/chunks/main-app-3596fd7d2841e9a3.js +0 -1
- package/runtime/webapp/dist/assets/App-CZspcejP.js +0 -275
- package/runtime/webapp/dist/assets/index-lt5J4xDf.css +0 -1
- /package/runtime/.next/static/{iaxCayE60RyqJY_Zj-OjS → 1LC7dx7c9RaWO6oZD2h4N}/_buildManifest.js +0 -0
- /package/runtime/.next/static/{iaxCayE60RyqJY_Zj-OjS → 1LC7dx7c9RaWO6oZD2h4N}/_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:()=>
|
|
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.
|
|
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:()=>eL,Cr:()=>U,E0:()=>ex,FP:()=>eh,Fi:()=>V,G1:()=>sb,H8:()=>ey,In:()=>en,JX:()=>ef,KS:()=>sg,LJ:()=>eg,MO:()=>J,N7:()=>r7,N8:()=>sN,Ny:()=>O,OG:()=>q,Q$:()=>sy,Q3:()=>X,S3:()=>sL,Sf:()=>N,T3:()=>sO,TL:()=>sF,Tp:()=>sX,Tu:()=>ee,Wf:()=>ea,Wo:()=>eu,XP:()=>j,XU:()=>sA,XW:()=>sk,Y4:()=>sm,Y_:()=>eb,ZC:()=>el,_O:()=>eR,as:()=>rQ,bX:()=>b,buildSessionQueryIndex:()=>$,ds:()=>sd,h1:()=>ed,kE:()=>Z,l7:()=>eD,m6:()=>sS,pG:()=>G,rt:()=>sv,s_:()=>em,tw:()=>ep,uA:()=>es,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)W(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(W);for(let e of(t=B(t,String(r.length)),r)){let r=e.content??"";t=B(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)}.${(B(2166136261,s)>>>0).toString(36)}`}function q(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}function W(e){return"user"===e.role||"assistant"===e.role}function B(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 H="history.v1.";function J(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=q(r.anchor,s);if(i>=e.length||e[i]?.role!=="user")throw new M;let a=K(e,Math.max(0,i-Math.floor(t/2)));return{start:a,end:z(e,a,Math.max(t,i-a+1)),kind:"anchored"}}if(r.after){let s=Y(r.after,e.length);return{start:s,end:z(e,s,t),kind:"anchored"}}let i=Y(r.before,e.length);return{start:K(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?`${H}${l}`:null,hasMore:l>0,pageSize:u.length,totalItems:a.length,olderCursor:l>0?`${H}${l}`:null,newerCursor:d<a.length?`${H}${d}`:null,kind:c,revision:o}}}function z(e,t,r){let s=Math.min(e.length,t+r);for(;s<e.length&&e[s]?.role!=="user";)s+=1;return s}function K(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 Y(e,t){if(!e?.startsWith(H))return t;let r=Number(e.slice(H.length));return!Number.isSafeInteger(r)||r<0?t:Math.min(r,t)}class G{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 V="新会话",Q="autoTitleFromFirstMessage";function ee(e,t){return e===V?{...t,[Q]:!0}:t}var et={active:null,queued:[],history:[]},er="goalState";function es(e){let t=e?.[er];return t&&"object"==typeof t?e_({active:eT(t.active)&&"active"===t.active.status?{...t.active}:null,queued:Array.isArray(t.queued)?t.queued.filter(eT).map(e=>({...e,status:"queued"})):[],history:Array.isArray(t.history)?t.history.filter(eT).filter(e=>"active"!==e.status&&"queued"!==e.status):[]}):e_(et)}function ei(e,t){return{...e??{},[er]:e_(t)}}function ea(e,t){return eo(e,{...t,kind:"goal"})}function en(e,t){return eo(e,{...t,kind:"message"})}function eo(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:ev(t.messagePayload)}:{}},i="goal"===t.kind?[...e.queued.filter(e=>"goal"===ep(e)),s,...e.queued.filter(e=>"message"===ep(e))]:[...e.queued,s],a=e_({active:e.active?{...e.active}:null,queued:i,history:[...e.history]});return a.active||!1===t.activate?a:em(a,t.now)}function el(e,t){return ec(e,"goal",t)}function ed(e,t){return ec(e,"message",t)}function ec(e,t,r){let s=e.queued.filter(e=>ep(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 e_({active:e.active?{...e.active}:null,queued:e.queued.map(e=>ep(e)===t?{...a.get(r[n++])}:{...e}),history:[...e.history]})}function eu(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"!==ep(e)?{...e}:(n=!0,{...e,objective:a,messagePayload:ev(s??e.messagePayload),updatedAt:i}));if(!n)throw Error("Queued message not found");return e_({active:e.active?{...e.active}:null,queued:o,history:[...e.history]})}function eh(e){return e.queued.filter(e=>"message"===ep(e)).map(e=>({...e}))}function ep(e){return"message"===e.kind?"message":"goal"}function em(e,t){if(e.active||0===e.queued.length)return e_(e);let r=e.queued.findIndex(e=>"goal"===ep(e)),s=r>=0?r:0;return e_({active:{...e.queued[s],status:"active",updatedAt:t},queued:e.queued.filter((e,t)=>t!==s),history:[...e.history]})}function ef(e,t,r,s){if(!e.active)return e_(e);let i={...e.active,status:t,position:0,updatedAt:r,...s?{lastReason:s}:{}};return em(e_({active:null,queued:[...e.queued],history:"goal"===ep(i)?[...e.history,i].slice(-100):[...e.history]}),r)}function eg(e,t,r){if(e.active?.id===t)return ef(e,"cancelled",r);let s=e.queued.find(e=>e.id===t);return s?e_({active:e.active?{...e.active}:null,queued:e.queued.filter(e=>e.id!==t),history:"goal"===ep(s)?[...e.history,{...s,status:"cancelled",position:0,updatedAt:r}].slice(-100):[...e.history]}):e_(e)}function ey(e,t){return e.queued.find(e=>e.id===t&&"message"===ep(e))?e_({active:e.active?{...e.active}:null,queued:e.queued.filter(e=>e.id!==t),history:[...e.history]}):e_(e)}function e_(e){return{active:e.active?eE({...e.active,status:"active",position:0}):null,queued:e.queued.map((e,t)=>eE({...e,status:"queued",position:t})),history:e.history.map(e=>eE({...e,position:0}))}}function eT(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 eE(e){let t=ep(e);return{...e,kind:t,..."message"===t?{messagePayload:ev(e.messagePayload)}:{}}}function ev(e){return e?{...e.images?.length?{images:[...e.images]}:{},...e.agentIds?.length?{agentIds:[...e.agentIds]}:{},...e.agentName?{agentName:e.agentName}:{}}:{}}class eb{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=es((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=ea(es(s.metadata),{id:this.createId(),sessionId:e,objective:t,sourceMessageId:r,now:this.now()});return await this.store.update(e,{metadata:ei(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=el(es(r.metadata),t);return await this.store.update(e,{metadata:ei(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=es(r.metadata),i=s.active?.id===t,a=eg(s,t,this.now());return await this.store.update(e,{metadata:ei(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=es((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=es(s.metadata);if(i.active?.id!==r.id)return;let a=ef(i,t.outcome,this.now(),t.reason);await this.store.update(e,{metadata:ei(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 ew={N:16384,r:8,p:1,maxmem:67108864};function eN(e,t){return new Promise((r,s)=>{(0,u.scrypt)(e,t,32,ew,(e,t)=>e?s(e):r(t))})}async function eS(e){let t=(0,u.randomBytes)(16);return{hash:await eN(e,t),salt:t,version:1}}async function ek(e,t){return 1===t.version&&32===t.hash.byteLength&&(0,u.timingSafeEqual)(await eN(e,t.salt),t.hash)}class eL extends Error{constructor(e,t,r){super(t),this.code=e,this.status=r}}class ex{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 eL("SETUP_COMPLETED","初始化已完成",409);let i=eI(e);(function(e,t){if(!/^[a-z0-9._-]{3,64}$/.test(e))throw new eL("INVALID_INPUT","用户名需为 3-64 位字母、数字或 ._-",400);if(t.length<10)throw new eL("INVALID_INPUT","密码至少 10 位",400)})(i,t);let a=this.now().toISOString(),n=await eS(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 eL("SETUP_COMPLETED","初始化已完成",409)}return this.createLoginSession(s,r)}async login(e,t,r){let s=eI(e),i=this.now(),a=new Date(i.getTime()-9e5).toISOString();if(this.store.countRecentLoginFailures(s,r.ip,a)>=5)throw new eL("RATE_LIMITED","登录尝试过多,请稍后再试",429);let n=this.store.findUserByNormalizedUsername(s),o=!!n&&await ek(t,{hash:n.passwordHash,salt:n.passwordSalt,version:n.passwordVersion});if(!n||!o)throw this.store.recordLoginFailure(s,r.ip,i.toISOString()),new eL("INVALID_CREDENTIALS","用户名或密码错误",401);return this.store.clearLoginFailures(s,r.ip),this.createLoginSession(n,r)}authenticateToken(e){if(!e)throw new eL("UNAUTHENTICATED","请先登录",401);let t=this.now().toISOString(),r=this.store.findSessionByTokenHash(eO(e),t);if(!r)throw new eL("UNAUTHENTICATED","登录已失效",401);let s=this.store.findUserById(r.userId);if(!s)throw new eL("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=eA(),s=this.now(),i=new Date(s.getTime()+2592e6).toISOString();return this.store.rotateCsrf(t.session.id,eO(r),s.toISOString(),i),{principal:t.principal,csrfToken:r,expiresAt:i}}validateCsrf(e,t){var r,s;if(!t||(r=eO(t),s=e.session.csrfHash,!(r.byteLength===s.byteLength&&(0,u.timingSafeEqual)(r,s))))throw new eL("INVALID_CSRF","CSRF 校验失败",403)}issueWsNonce(e){let t=this.authenticateToken(e),r=eA(),s=new Date(this.now().getTime()+6e4).toISOString();return this.store.issueWsNonce(t.session.id,eO(r),s),{nonce:r,expiresAt:s,principal:t.principal}}consumeWsNonce(e,t){let r=this.authenticateToken(e);if(!this.store.consumeWsNonce(r.session.id,eO(t),this.now().toISOString()))throw new eL("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=eA(),i=eA(),a=t.deviceId||(0,u.randomUUID)(),n=new Date(r.getTime()+2592e6).toISOString(),o={id:(0,u.randomUUID)(),userId:e.id,tokenHash:eO(s),csrfHash:eO(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 eI(e){return e.trim().normalize("NFKC").toLowerCase()}function eO(e){return(0,u.createHash)("sha256").update(e).digest()}function eA(){return(0,u.randomBytes)(32).toString("base64url")}var eC=["codex","claude agents","opencode","agent-tui"];function eR(){return eC.map((e,t)=>({id:`default-${t+1}`,command:e}))}function eD(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 eU=`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.`,
|
|
12
|
+
Output ONLY the handoff summary text, no preamble or meta-commentary.`,ej="This is a summary of the conversation so far, written to preserve continuity after context compaction.",eP="Understood. I have reviewed the summary and will continue from where we left off.";class eF{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:
|
|
16
|
-
${l}`},{role:"assistant",content:
|
|
15
|
+
`),l="";for await(let e of this.modelProvider.streamChat([{role:"system",content:eU},{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:`${ej}
|
|
16
|
+
${l}`},{role:"assistant",content:eP},...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:
|
|
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(
|
|
20
|
-
${e.summary}`},{role:"assistant",content:
|
|
18
|
+
`),s="";for await(let e of this.modelProvider.streamChat([{role:"system",content:eU},{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:`${ej}
|
|
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(ej)}}var eM=["systemBase","environment","projectContext","skills","memory","embeddedTools","conversationHistory","currentUserMessage","assistantMessages","toolCalls","toolResults","images","compactionSummary","nativeToolDefinitions","messageOverhead"];function e$(e){return Math.ceil(e.length/4)}class eX{constructor(e){this.abortController=null,this.config=e,this.compactor=new eF(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:`${ej}
|
|
20
|
+
${e.summary}`},{role:"assistant",content:eP},...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(eM.map(e=>[e,0]));t.systemBase=e$(e.systemSections.systemBase),t.environment=e$(e.systemSections.environment),t.projectContext=e$(e.systemSections.projectContext),t.skills=e$(e.systemSections.skills),t.memory=e$(e.systemSections.memory),t.embeddedTools=e$(e.systemSections.embeddedTools);let r=Object.values(e.systemSections).filter(Boolean).length;t.messageOverhead+=e$(`
|
|
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(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(`
|
|
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(ej)&&(t.add(r),e[r+1]?.role==="assistant"&&e[r+1]?.content===eP&&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+=e$(e.content);return}if("user"===e.role){let i=r===s?"currentUserMessage":"conversationHistory";t[i]+=e$(e.content);return}if("assistant"===e.role){for(let r of(t.assistantMessages+=e$(e.content),e.toolCalls??[]))t.toolCalls+=e$(JSON.stringify(r));return}t.toolResults+=e$(JSON.stringify({toolCallId:e.toolCallId,name:e.name,content:e.content}))}}),e.nativeToolDefinitions.length>0&&(t.nativeToolDefinitions=e$(JSON.stringify(e.nativeToolDefinitions)),t.messageOverhead+=4*e.nativeToolDefinitions.length);let a=eM.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 eZ{create(e){return new eX(e)}}class eq{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 eW={};((e,t)=>{for(var r in t)T(e,r,{get:t[r],enumerable:!0,configurable:!0,set:v.bind(t,r)})})(eW,{void:()=>rm,util:()=>s,unknown:()=>rh,union:()=>r_,undefined:()=>rd,tuple:()=>rv,transformer:()=>rA,symbol:()=>rl,string:()=>rr,strictObject:()=>ry,setErrorMap:()=>eV,set:()=>rN,record:()=>rb,quotelessJson:()=>ez,promise:()=>rO,preprocess:()=>rD,pipeline:()=>rU,ostring:()=>rj,optional:()=>rC,onumber:()=>rP,oboolean:()=>rF,objectUtil:()=>i,object:()=>rg,number:()=>rs,nullable:()=>rR,null:()=>rc,never:()=>rp,nativeEnum:()=>rI,nan:()=>ri,map:()=>rw,makeIssue:()=>e0,literal:()=>rL,lazy:()=>rk,late:()=>re,isValid:()=>e7,isDirty:()=>e8,isAsync:()=>te,isAborted:()=>e5,intersection:()=>rE,instanceof:()=>rt,getParsedType:()=>eH,getErrorMap:()=>eQ,function:()=>rS,enum:()=>rx,effect:()=>rA,discriminatedUnion:()=>rT,defaultErrorMap:()=>eY,datetimeRegex:()=>tb,date:()=>ro,custom:()=>t7,coerce:()=>rM,boolean:()=>rn,bigint:()=>ra,array:()=>rf,any:()=>ru,addIssueToContext:()=>e4,ZodVoid:()=>tD,ZodUnknown:()=>tC,ZodUnion:()=>tP,ZodUndefined:()=>tI,ZodType:()=>ti,ZodTuple:()=>tX,ZodTransformer:()=>tV,ZodSymbol:()=>tx,ZodString:()=>tw,ZodSet:()=>tW,ZodSchema:()=>ti,ZodRecord:()=>tZ,ZodReadonly:()=>t5,ZodPromise:()=>tG,ZodPipeline:()=>t6,ZodParsedType:()=>eB,ZodOptional:()=>tQ,ZodObject:()=>tj,ZodNumber:()=>tN,ZodNullable:()=>t0,ZodNull:()=>tO,ZodNever:()=>tR,ZodNativeEnum:()=>tY,ZodNaN:()=>t2,ZodMap:()=>tq,ZodLiteral:()=>tJ,ZodLazy:()=>tH,ZodIssueCode:()=>eJ,ZodIntersection:()=>t$,ZodFunction:()=>tB,ZodFirstPartyTypeKind:()=>o,ZodError:()=>eK,ZodEnum:()=>tK,ZodEffects:()=>tV,ZodDiscriminatedUnion:()=>tM,ZodDefault:()=>t1,ZodDate:()=>tL,ZodCatch:()=>t4,ZodBranded:()=>t3,ZodBoolean:()=>tk,ZodBigInt:()=>tS,ZodArray:()=>tU,ZodAny:()=>tA,Schema:()=>ti,ParseStatus:()=>e2,OK:()=>e6,NEVER:()=>r$,INVALID:()=>e9,EMPTY_PATH:()=>e1,DIRTY:()=>e3,BRAND:()=>t9}),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 eB=s.arrayToEnum(["string","nan","number","integer","float","boolean","date","bigint","symbol","function","undefined","null","array","object","unknown","promise","void","never","map","set"]),eH=e=>{switch(typeof e){case"undefined":return eB.undefined;case"string":return eB.string;case"number":return Number.isNaN(e)?eB.nan:eB.number;case"boolean":return eB.boolean;case"function":return eB.function;case"bigint":return eB.bigint;case"symbol":return eB.symbol;case"object":if(Array.isArray(e))return eB.array;if(null===e)return eB.null;if(e.then&&"function"==typeof e.then&&e.catch&&"function"==typeof e.catch)return eB.promise;if("undefined"!=typeof Map&&e instanceof Map)return eB.map;if("undefined"!=typeof Set&&e instanceof Set)return eB.set;if("undefined"!=typeof Date&&e instanceof Date)return eB.date;return eB.object;default:return eB.unknown}},eJ=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"]),ez=e=>JSON.stringify(e,null,2).replace(/"([^"]+)":/g,"$1:");class eK 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 eK))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()}}eK.create=e=>new eK(e);var eY=(e,t)=>{let r;switch(e.code){case eJ.invalid_type:r=e.received===eB.undefined?"Required":`Expected ${e.expected}, received ${e.received}`;break;case eJ.invalid_literal:r=`Invalid literal value, expected ${JSON.stringify(e.expected,s.jsonStringifyReplacer)}`;break;case eJ.unrecognized_keys:r=`Unrecognized key(s) in object: ${s.joinValues(e.keys,", ")}`;break;case eJ.invalid_union:r="Invalid input";break;case eJ.invalid_union_discriminator:r=`Invalid discriminator value. Expected ${s.joinValues(e.options)}`;break;case eJ.invalid_enum_value:r=`Invalid enum value. Expected ${s.joinValues(e.options)}, received '${e.received}'`;break;case eJ.invalid_arguments:r="Invalid function arguments";break;case eJ.invalid_return_type:r="Invalid function return type";break;case eJ.invalid_date:r="Invalid date";break;case eJ.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 eJ.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 eJ.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 eJ.custom:r="Invalid input";break;case eJ.invalid_intersection_types:r="Intersection results could not be merged";break;case eJ.not_multiple_of:r=`Number must be a multiple of ${e.multipleOf}`;break;case eJ.not_finite:r="Number must be finite";break;default:r=t.defaultError,s.assertNever(e)}return{message:r}},eG=eY;function eV(e){eG=e}function eQ(){return eG}var e0=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}},e1=[];function e4(e,t){let r=eG,s=e0({issueData:t,data:e.data,path:e.path,errorMaps:[e.common.contextualErrorMap,e.schemaErrorMap,r,r===eY?void 0:eY].filter(e=>!!e)});e.common.issues.push(s)}class e2{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 e9;"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 e2.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 e9;"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 e9=Object.freeze({status:"aborted"}),e3=e=>({status:"dirty",value:e}),e6=e=>({status:"valid",value:e}),e5=e=>"aborted"===e.status,e8=e=>"dirty"===e.status,e7=e=>"valid"===e.status,te=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 tt{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 tr=(e,t)=>{if(e7(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 eK(e.common.issues);return this._error=t,this._error}}};function ts(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 ti{get description(){return this._def.description}_getType(e){return eH(e.data)}_getOrReturnCtx(e,t){return t||{common:e.parent.common,data:e.data,parsedType:eH(e.data),schemaErrorMap:this._def.errorMap,path:e.path,parent:e.parent}}_processInputParams(e){return{status:new e2,ctx:{common:e.parent.common,data:e.data,parsedType:eH(e.data),schemaErrorMap:this._def.errorMap,path:e.path,parent:e.parent}}}_parseSync(e){let t=this._parse(e);if(te(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:eH(e)},s=this._parseSync({data:e,path:r.path,parent:r});return tr(r,s)}"~validate"(e){let t={common:{issues:[],async:!!this["~standard"].async},path:[],schemaErrorMap:this._def.errorMap,parent:null,data:e,parsedType:eH(e)};if(!this["~standard"].async)try{let r=this._parseSync({data:e,path:[],parent:t});return e7(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=>e7(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:eH(e)},s=this._parse({data:e,path:r.path,parent:r});return tr(r,await (te(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:eJ.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 tV({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 tQ.create(this,this._def)}nullable(){return t0.create(this,this._def)}nullish(){return this.nullable().optional()}array(){return tU.create(this)}promise(){return tG.create(this,this._def)}or(e){return tP.create([this,e],this._def)}and(e){return t$.create(this,e,this._def)}transform(e){return new tV({...ts(this._def),schema:this,typeName:o.ZodEffects,effect:{type:"transform",transform:e}})}default(e){return new t1({...ts(this._def),innerType:this,defaultValue:"function"==typeof e?e:()=>e,typeName:o.ZodDefault})}brand(){return new t3({typeName:o.ZodBranded,type:this,...ts(this._def)})}catch(e){return new t4({...ts(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 t6.create(this,e)}readonly(){return t5.create(this)}isOptional(){return this.safeParse(void 0).success}isNullable(){return this.safeParse(null).success}}var ta=/^c[^\s-]{8,}$/i,tn=/^[0-9a-z]+$/,to=/^[0-9A-HJKMNP-TV-Z]{26}$/i,tl=/^[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,td=/^[a-z0-9_-]{21}$/i,tc=/^[A-Za-z0-9-_]+\.[A-Za-z0-9-_]+\.[A-Za-z0-9-_]*$/,tu=/^[-+]?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)?)??$/,th=/^(?!\.)(?!.*\.\.)([A-Z0-9_'+\-\.]*)[A-Z0-9_+-]@([A-Z0-9][A-Z0-9\-]*\.)+[A-Z]{2,}$/i,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])$/,tm=/^(?:(?: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])$/,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]))$/,tg=/^(([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])$/,ty=/^([0-9a-zA-Z+/]{4})*(([0-9a-zA-Z+/]{2}==)|([0-9a-zA-Z+/]{3}=))?$/,t_=/^([0-9a-zA-Z-_]{4})*(([0-9a-zA-Z-_]{2}(==)?)|([0-9a-zA-Z-_]{3}(=)?))?$/,tT="((\\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])))",tE=RegExp(`^${tT}$`);function tv(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 tb(e){let t=`${tT}T${tv(e)}`,r=[];return r.push(e.local?"Z?":"Z"),e.offset&&r.push("([+-]\\d{2}:?\\d{2})"),t=`${t}(${r.join("|")})`,RegExp(`^${t}$`)}class tw extends ti{_parse(e){var t,r,i,a;let o;if(this._def.coerce&&(e.data=String(e.data)),this._getType(e)!==eB.string){let t=this._getOrReturnCtx(e);return e4(t,{code:eJ.invalid_type,expected:eB.string,received:t.parsedType}),e9}let l=new e2;for(let d of this._def.checks)if("min"===d.kind)e.data.length<d.value&&(e4(o=this._getOrReturnCtx(e,o),{code:eJ.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&&(e4(o=this._getOrReturnCtx(e,o),{code:eJ.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?e4(o,{code:eJ.too_big,maximum:d.value,type:"string",inclusive:!0,exact:!0,message:d.message}):r&&e4(o,{code:eJ.too_small,minimum:d.value,type:"string",inclusive:!0,exact:!0,message:d.message}),l.dirty())}else if("email"===d.kind)th.test(e.data)||(e4(o=this._getOrReturnCtx(e,o),{validation:"email",code:eJ.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)||(e4(o=this._getOrReturnCtx(e,o),{validation:"emoji",code:eJ.invalid_string,message:d.message}),l.dirty());else if("uuid"===d.kind)tl.test(e.data)||(e4(o=this._getOrReturnCtx(e,o),{validation:"uuid",code:eJ.invalid_string,message:d.message}),l.dirty());else if("nanoid"===d.kind)td.test(e.data)||(e4(o=this._getOrReturnCtx(e,o),{validation:"nanoid",code:eJ.invalid_string,message:d.message}),l.dirty());else if("cuid"===d.kind)ta.test(e.data)||(e4(o=this._getOrReturnCtx(e,o),{validation:"cuid",code:eJ.invalid_string,message:d.message}),l.dirty());else if("cuid2"===d.kind)tn.test(e.data)||(e4(o=this._getOrReturnCtx(e,o),{validation:"cuid2",code:eJ.invalid_string,message:d.message}),l.dirty());else if("ulid"===d.kind)to.test(e.data)||(e4(o=this._getOrReturnCtx(e,o),{validation:"ulid",code:eJ.invalid_string,message:d.message}),l.dirty());else if("url"===d.kind)try{new URL(e.data)}catch{e4(o=this._getOrReturnCtx(e,o),{validation:"url",code:eJ.invalid_string,message:d.message}),l.dirty()}else"regex"===d.kind?(d.regex.lastIndex=0,d.regex.test(e.data)||(e4(o=this._getOrReturnCtx(e,o),{validation:"regex",code:eJ.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)||(e4(o=this._getOrReturnCtx(e,o),{code:eJ.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)||(e4(o=this._getOrReturnCtx(e,o),{code:eJ.invalid_string,validation:{startsWith:d.value},message:d.message}),l.dirty()):"endsWith"===d.kind?e.data.endsWith(d.value)||(e4(o=this._getOrReturnCtx(e,o),{code:eJ.invalid_string,validation:{endsWith:d.value},message:d.message}),l.dirty()):"datetime"===d.kind?tb(d).test(e.data)||(e4(o=this._getOrReturnCtx(e,o),{code:eJ.invalid_string,validation:"datetime",message:d.message}),l.dirty()):"date"===d.kind?tE.test(e.data)||(e4(o=this._getOrReturnCtx(e,o),{code:eJ.invalid_string,validation:"date",message:d.message}),l.dirty()):"time"===d.kind?RegExp(`^${tv(d)}$`).test(e.data)||(e4(o=this._getOrReturnCtx(e,o),{code:eJ.invalid_string,validation:"time",message:d.message}),l.dirty()):"duration"===d.kind?tu.test(e.data)||(e4(o=this._getOrReturnCtx(e,o),{validation:"duration",code:eJ.invalid_string,message:d.message}),l.dirty()):"ip"===d.kind?(t=e.data,("v4"===(r=d.version)||!r)&&tp.test(t)||("v6"===r||!r)&&tf.test(t)||(e4(o=this._getOrReturnCtx(e,o),{validation:"ip",code:eJ.invalid_string,message:d.message}),l.dirty())):"jwt"===d.kind?!function(e,t){if(!tc.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)&&(e4(o=this._getOrReturnCtx(e,o),{validation:"jwt",code:eJ.invalid_string,message:d.message}),l.dirty()):"cidr"===d.kind?(i=e.data,("v4"===(a=d.version)||!a)&&tm.test(i)||("v6"===a||!a)&&tg.test(i)||(e4(o=this._getOrReturnCtx(e,o),{validation:"cidr",code:eJ.invalid_string,message:d.message}),l.dirty())):"base64"===d.kind?ty.test(e.data)||(e4(o=this._getOrReturnCtx(e,o),{validation:"base64",code:eJ.invalid_string,message:d.message}),l.dirty()):"base64url"===d.kind?t_.test(e.data)||(e4(o=this._getOrReturnCtx(e,o),{validation:"base64url",code:eJ.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:eJ.invalid_string,...a.errToObj(r)})}_addCheck(e){return new tw({...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 tw({...this._def,checks:[...this._def.checks,{kind:"trim"}]})}toLowerCase(){return new tw({...this._def,checks:[...this._def.checks,{kind:"toLowerCase"}]})}toUpperCase(){return new tw({...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}}tw.create=e=>new tw({checks:[],typeName:o.ZodString,coerce:e?.coerce??!1,...ts(e)});class tN extends ti{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)!==eB.number){let t=this._getOrReturnCtx(e);return e4(t,{code:eJ.invalid_type,expected:eB.number,received:t.parsedType}),e9}let r=new e2;for(let i of this._def.checks)"int"===i.kind?s.isInteger(e.data)||(e4(t=this._getOrReturnCtx(e,t),{code:eJ.invalid_type,expected:"integer",received:"float",message:i.message}),r.dirty()):"min"===i.kind?(i.inclusive?e.data<i.value:e.data<=i.value)&&(e4(t=this._getOrReturnCtx(e,t),{code:eJ.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)&&(e4(t=this._getOrReturnCtx(e,t),{code:eJ.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)&&(e4(t=this._getOrReturnCtx(e,t),{code:eJ.not_multiple_of,multipleOf:i.value,message:i.message}),r.dirty()):"finite"===i.kind?Number.isFinite(e.data)||(e4(t=this._getOrReturnCtx(e,t),{code:eJ.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 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]})}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)}}tN.create=e=>new tN({checks:[],typeName:o.ZodNumber,coerce:e?.coerce||!1,...ts(e)});class tS extends ti{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)!==eB.bigint)return this._getInvalidInput(e);let r=new e2;for(let i of this._def.checks)"min"===i.kind?(i.inclusive?e.data<i.value:e.data<=i.value)&&(e4(t=this._getOrReturnCtx(e,t),{code:eJ.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)&&(e4(t=this._getOrReturnCtx(e,t),{code:eJ.too_big,type:"bigint",maximum:i.value,inclusive:i.inclusive,message:i.message}),r.dirty()):"multipleOf"===i.kind?e.data%i.value!==BigInt(0)&&(e4(t=this._getOrReturnCtx(e,t),{code:eJ.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 e4(t,{code:eJ.invalid_type,expected:eB.bigint,received:t.parsedType}),e9}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 tS({...this._def,checks:[...this._def.checks,{kind:e,value:t,inclusive:r,message:a.toString(s)}]})}_addCheck(e){return new tS({...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}}tS.create=e=>new tS({checks:[],typeName:o.ZodBigInt,coerce:e?.coerce??!1,...ts(e)});class tk extends ti{_parse(e){if(this._def.coerce&&(e.data=!!e.data),this._getType(e)!==eB.boolean){let t=this._getOrReturnCtx(e);return e4(t,{code:eJ.invalid_type,expected:eB.boolean,received:t.parsedType}),e9}return e6(e.data)}}tk.create=e=>new tk({typeName:o.ZodBoolean,coerce:e?.coerce||!1,...ts(e)});class tL extends ti{_parse(e){let t;if(this._def.coerce&&(e.data=new Date(e.data)),this._getType(e)!==eB.date){let t=this._getOrReturnCtx(e);return e4(t,{code:eJ.invalid_type,expected:eB.date,received:t.parsedType}),e9}if(Number.isNaN(e.data.getTime()))return e4(this._getOrReturnCtx(e),{code:eJ.invalid_date}),e9;let r=new e2;for(let i of this._def.checks)"min"===i.kind?e.data.getTime()<i.value&&(e4(t=this._getOrReturnCtx(e,t),{code:eJ.too_small,message:i.message,inclusive:!0,exact:!1,minimum:i.value,type:"date"}),r.dirty()):"max"===i.kind?e.data.getTime()>i.value&&(e4(t=this._getOrReturnCtx(e,t),{code:eJ.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 tL({...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}}tL.create=e=>new tL({checks:[],coerce:e?.coerce||!1,typeName:o.ZodDate,...ts(e)});class tx extends ti{_parse(e){if(this._getType(e)!==eB.symbol){let t=this._getOrReturnCtx(e);return e4(t,{code:eJ.invalid_type,expected:eB.symbol,received:t.parsedType}),e9}return e6(e.data)}}tx.create=e=>new tx({typeName:o.ZodSymbol,...ts(e)});class tI extends ti{_parse(e){if(this._getType(e)!==eB.undefined){let t=this._getOrReturnCtx(e);return e4(t,{code:eJ.invalid_type,expected:eB.undefined,received:t.parsedType}),e9}return e6(e.data)}}tI.create=e=>new tI({typeName:o.ZodUndefined,...ts(e)});class tO extends ti{_parse(e){if(this._getType(e)!==eB.null){let t=this._getOrReturnCtx(e);return e4(t,{code:eJ.invalid_type,expected:eB.null,received:t.parsedType}),e9}return e6(e.data)}}tO.create=e=>new tO({typeName:o.ZodNull,...ts(e)});class tA extends ti{constructor(){super(...arguments),this._any=!0}_parse(e){return e6(e.data)}}tA.create=e=>new tA({typeName:o.ZodAny,...ts(e)});class tC extends ti{constructor(){super(...arguments),this._unknown=!0}_parse(e){return e6(e.data)}}tC.create=e=>new tC({typeName:o.ZodUnknown,...ts(e)});class tR extends ti{_parse(e){let t=this._getOrReturnCtx(e);return e4(t,{code:eJ.invalid_type,expected:eB.never,received:t.parsedType}),e9}}tR.create=e=>new tR({typeName:o.ZodNever,...ts(e)});class tD extends ti{_parse(e){if(this._getType(e)!==eB.undefined){let t=this._getOrReturnCtx(e);return e4(t,{code:eJ.invalid_type,expected:eB.void,received:t.parsedType}),e9}return e6(e.data)}}tD.create=e=>new tD({typeName:o.ZodVoid,...ts(e)});class tU extends ti{_parse(e){let{ctx:t,status:r}=this._processInputParams(e),s=this._def;if(t.parsedType!==eB.array)return e4(t,{code:eJ.invalid_type,expected:eB.array,received:t.parsedType}),e9;if(null!==s.exactLength){let e=t.data.length>s.exactLength.value,i=t.data.length<s.exactLength.value;(e||i)&&(e4(t,{code:e?eJ.too_big:eJ.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&&(e4(t,{code:eJ.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&&(e4(t,{code:eJ.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 tt(t,e,t.path,r)))).then(e=>e2.mergeArray(r,e));let i=[...t.data].map((e,r)=>s.type._parseSync(new tt(t,e,t.path,r)));return e2.mergeArray(r,i)}get element(){return this._def.type}min(e,t){return new tU({...this._def,minLength:{value:e,message:a.toString(t)}})}max(e,t){return new tU({...this._def,maxLength:{value:e,message:a.toString(t)}})}length(e,t){return new tU({...this._def,exactLength:{value:e,message:a.toString(t)}})}nonempty(e){return this.min(1,e)}}tU.create=(e,t)=>new tU({type:e,minLength:null,maxLength:null,exactLength:null,typeName:o.ZodArray,...ts(t)});class tj extends ti{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)!==eB.object){let t=this._getOrReturnCtx(e);return e4(t,{code:eJ.invalid_type,expected:eB.object,received:t.parsedType}),e9}let{status:t,ctx:r}=this._processInputParams(e),{shape:s,keys:i}=this._getCached(),a=[];if(!(this._def.catchall instanceof tR&&"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 tt(r,i,r.path,e)),alwaysSet:e in r.data})}if(this._def.catchall instanceof tR){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&&(e4(r,{code:eJ.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 tt(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=>e2.mergeObjectSync(t,e)):e2.mergeObjectSync(t,n)}get shape(){return this._def.shape()}strict(e){return a.errToObj,new tj({...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 tj({...this._def,unknownKeys:"strip"})}passthrough(){return new tj({...this._def,unknownKeys:"passthrough"})}extend(e){return new tj({...this._def,shape:()=>({...this._def.shape(),...e})})}merge(e){return new tj({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 tj({...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 tj({...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 tj({...this._def,shape:()=>t})}deepPartial(){return function e(t){if(t instanceof tj){let r={};for(let s in t.shape){let i=t.shape[s];r[s]=tQ.create(e(i))}return new tj({...t._def,shape:()=>r})}return t instanceof tU?new tU({...t._def,type:e(t.element)}):t instanceof tQ?tQ.create(e(t.unwrap())):t instanceof t0?t0.create(e(t.unwrap())):t instanceof tX?tX.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 tj({...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 tQ;)e=e._def.innerType;t[r]=e}return new tj({...this._def,shape:()=>t})}keyof(){return tz(s.objectKeys(this.shape))}}tj.create=(e,t)=>new tj({shape:()=>e,unknownKeys:"strip",catchall:tR.create(),typeName:o.ZodObject,...ts(t)}),tj.strictCreate=(e,t)=>new tj({shape:()=>e,unknownKeys:"strict",catchall:tR.create(),typeName:o.ZodObject,...ts(t)}),tj.lazycreate=(e,t)=>new tj({shape:e,unknownKeys:"strip",catchall:tR.create(),typeName:o.ZodObject,...ts(t)});class tP extends ti{_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 eK(e.ctx.common.issues));return e4(t,{code:eJ.invalid_union,unionErrors:r}),e9});{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 eK(e));return e4(t,{code:eJ.invalid_union,unionErrors:i}),e9}}get options(){return this._def.options}}tP.create=(e,t)=>new tP({options:e,typeName:o.ZodUnion,...ts(t)});var tF=e=>{if(e instanceof tH)return tF(e.schema);if(e instanceof tV)return tF(e.innerType());if(e instanceof tJ)return[e.value];if(e instanceof tK)return e.options;if(e instanceof tY)return s.objectValues(e.enum);if(e instanceof t1)return tF(e._def.innerType);if(e instanceof tI)return[void 0];else if(e instanceof tO)return[null];else if(e instanceof tQ)return[void 0,...tF(e.unwrap())];else if(e instanceof t0)return[null,...tF(e.unwrap())];else if(e instanceof t3)return tF(e.unwrap());else if(e instanceof t5)return tF(e.unwrap());else if(e instanceof t4)return tF(e._def.innerType);else return[]};class tM extends ti{_parse(e){let{ctx:t}=this._processInputParams(e);if(t.parsedType!==eB.object)return e4(t,{code:eJ.invalid_type,expected:eB.object,received:t.parsedType}),e9;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}):(e4(t,{code:eJ.invalid_union_discriminator,options:Array.from(this.optionsMap.keys()),path:[r]}),e9)}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=tF(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 tM({typeName:o.ZodDiscriminatedUnion,discriminator:e,options:t,optionsMap:s,...ts(r)})}}class t$ extends ti{_parse(e){let{status:t,ctx:r}=this._processInputParams(e),i=(e,i)=>{if(e5(e)||e5(i))return e9;let a=function e(t,r){let i=eH(t),a=eH(r);if(t===r)return{valid:!0,data:t};if(i===eB.object&&a===eB.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===eB.array&&a===eB.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===eB.date&&a===eB.date&&+t==+r?{valid:!0,data:t}:{valid:!1}}(e.value,i.value);return a.valid?((e8(e)||e8(i))&&t.dirty(),{status:t.value,value:a.data}):(e4(r,{code:eJ.invalid_intersection_types}),e9)};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}))}}t$.create=(e,t,r)=>new t$({left:e,right:t,typeName:o.ZodIntersection,...ts(r)});class tX extends ti{_parse(e){let{status:t,ctx:r}=this._processInputParams(e);if(r.parsedType!==eB.array)return e4(r,{code:eJ.invalid_type,expected:eB.array,received:r.parsedType}),e9;if(r.data.length<this._def.items.length)return e4(r,{code:eJ.too_small,minimum:this._def.items.length,inclusive:!0,exact:!1,type:"array"}),e9;!this._def.rest&&r.data.length>this._def.items.length&&(e4(r,{code:eJ.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 tt(r,e,r.path,t)):null}).filter(e=>!!e);return r.common.async?Promise.all(s).then(e=>e2.mergeArray(t,e)):e2.mergeArray(t,s)}get items(){return this._def.items}rest(e){return new tX({...this._def,rest:e})}}tX.create=(e,t)=>{if(!Array.isArray(e))throw Error("You must pass an array of schemas to z.tuple([ ... ])");return new tX({items:e,typeName:o.ZodTuple,rest:null,...ts(t)})};class tZ extends ti{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!==eB.object)return e4(r,{code:eJ.invalid_type,expected:eB.object,received:r.parsedType}),e9;let s=[],i=this._def.keyType,a=this._def.valueType;for(let e in r.data)s.push({key:i._parse(new tt(r,e,r.path,e)),value:a._parse(new tt(r,r.data[e],r.path,e)),alwaysSet:e in r.data});return r.common.async?e2.mergeObjectAsync(t,s):e2.mergeObjectSync(t,s)}get element(){return this._def.valueType}static create(e,t,r){return new tZ(t instanceof ti?{keyType:e,valueType:t,typeName:o.ZodRecord,...ts(r)}:{keyType:tw.create(),valueType:e,typeName:o.ZodRecord,...ts(t)})}}class tq extends ti{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!==eB.map)return e4(r,{code:eJ.invalid_type,expected:eB.map,received:r.parsedType}),e9;let s=this._def.keyType,i=this._def.valueType,a=[...r.data.entries()].map(([e,t],a)=>({key:s._parse(new tt(r,e,r.path,[a,"key"])),value:i._parse(new tt(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 e9;("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 e9;("dirty"===s.status||"dirty"===i.status)&&t.dirty(),e.set(s.value,i.value)}return{status:t.value,value:e}}}}tq.create=(e,t,r)=>new tq({valueType:t,keyType:e,typeName:o.ZodMap,...ts(r)});class tW extends ti{_parse(e){let{status:t,ctx:r}=this._processInputParams(e);if(r.parsedType!==eB.set)return e4(r,{code:eJ.invalid_type,expected:eB.set,received:r.parsedType}),e9;let s=this._def;null!==s.minSize&&r.data.size<s.minSize.value&&(e4(r,{code:eJ.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&&(e4(r,{code:eJ.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 e9;"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 tt(r,e,r.path,t)));return r.common.async?Promise.all(n).then(e=>a(e)):a(n)}min(e,t){return new tW({...this._def,minSize:{value:e,message:a.toString(t)}})}max(e,t){return new tW({...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)}}tW.create=(e,t)=>new tW({valueType:e,minSize:null,maxSize:null,typeName:o.ZodSet,...ts(t)});class tB extends ti{constructor(){super(...arguments),this.validate=this.implement}_parse(e){let{ctx:t}=this._processInputParams(e);if(t.parsedType!==eB.function)return e4(t,{code:eJ.invalid_type,expected:eB.function,received:t.parsedType}),e9;function r(e,r){return e0({data:e,path:t.path,errorMaps:[t.common.contextualErrorMap,t.schemaErrorMap,eG,eY].filter(e=>!!e),issueData:{code:eJ.invalid_arguments,argumentsError:r}})}function s(e,r){return e0({data:e,path:t.path,errorMaps:[t.common.contextualErrorMap,t.schemaErrorMap,eG,eY].filter(e=>!!e),issueData:{code:eJ.invalid_return_type,returnTypeError:r}})}let i={errorMap:t.common.contextualErrorMap},a=t.data;if(this._def.returns instanceof tG){let e=this;return e6(async function(...t){let n=new eK([]),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 e6(function(...t){let n=e._def.args.safeParse(t,i);if(!n.success)throw new eK([r(t,n.error)]);let o=Reflect.apply(a,this,n.data),l=e._def.returns.safeParse(o,i);if(!l.success)throw new eK([s(o,l.error)]);return l.data})}}parameters(){return this._def.args}returnType(){return this._def.returns}args(...e){return new tB({...this._def,args:tX.create(e).rest(tC.create())})}returns(e){return new tB({...this._def,returns:e})}implement(e){return this.parse(e)}strictImplement(e){return this.parse(e)}static create(e,t,r){return new tB({args:e||tX.create([]).rest(tC.create()),returns:t||tC.create(),typeName:o.ZodFunction,...ts(r)})}}class tH extends ti{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})}}tH.create=(e,t)=>new tH({getter:e,typeName:o.ZodLazy,...ts(t)});class tJ extends ti{_parse(e){if(e.data!==this._def.value){let t=this._getOrReturnCtx(e);return e4(t,{received:t.data,code:eJ.invalid_literal,expected:this._def.value}),e9}return{status:"valid",value:e.data}}get value(){return this._def.value}}function tz(e,t){return new tK({values:e,typeName:o.ZodEnum,...ts(t)})}tJ.create=(e,t)=>new tJ({value:e,typeName:o.ZodLiteral,...ts(t)});class tK extends ti{_parse(e){if("string"!=typeof e.data){let t=this._getOrReturnCtx(e),r=this._def.values;return e4(t,{expected:s.joinValues(r),received:t.parsedType,code:eJ.invalid_type}),e9}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 e4(t,{received:t.data,code:eJ.invalid_enum_value,options:r}),e9}return e6(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 tK.create(e,{...this._def,...t})}exclude(e,t=this._def){return tK.create(this.options.filter(t=>!e.includes(t)),{...this._def,...t})}}tK.create=tz;class tY extends ti{_parse(e){let t=s.getValidEnumValues(this._def.values),r=this._getOrReturnCtx(e);if(r.parsedType!==eB.string&&r.parsedType!==eB.number){let e=s.objectValues(t);return e4(r,{expected:s.joinValues(e),received:r.parsedType,code:eJ.invalid_type}),e9}if(this._cache||(this._cache=new Set(s.getValidEnumValues(this._def.values))),!this._cache.has(e.data)){let e=s.objectValues(t);return e4(r,{received:r.data,code:eJ.invalid_enum_value,options:e}),e9}return e6(e.data)}get enum(){return this._def.values}}tY.create=(e,t)=>new tY({values:e,typeName:o.ZodNativeEnum,...ts(t)});class tG extends ti{unwrap(){return this._def.type}_parse(e){let{ctx:t}=this._processInputParams(e);return t.parsedType!==eB.promise&&!1===t.common.async?(e4(t,{code:eJ.invalid_type,expected:eB.promise,received:t.parsedType}),e9):e6((t.parsedType===eB.promise?t.data:Promise.resolve(t.data)).then(e=>this._def.type.parseAsync(e,{path:t.path,errorMap:t.common.contextualErrorMap})))}}tG.create=(e,t)=>new tG({type:e,typeName:o.ZodPromise,...ts(t)});class tV extends ti{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=>{e4(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 e9;let s=await this._def.schema._parseAsync({data:e,path:r.path,parent:r});return"aborted"===s.status?e9:"dirty"===s.status||"dirty"===t.value?e3(s.value):s});{if("aborted"===t.value)return e9;let s=this._def.schema._parseSync({data:e,path:r.path,parent:r});return"aborted"===s.status?e9:"dirty"===s.status||"dirty"===t.value?e3(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?e9:("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?e9:("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=>e7(e)?Promise.resolve(i.transform(e.value,a)).then(e=>({status:t.value,value:e})):e9);{let e=this._def.schema._parseSync({data:r.data,path:r.path,parent:r});if(!e7(e))return e9;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)}}tV.create=(e,t,r)=>new tV({schema:e,typeName:o.ZodEffects,effect:t,...ts(r)}),tV.createWithPreprocess=(e,t,r)=>new tV({schema:t,effect:{type:"preprocess",transform:e},typeName:o.ZodEffects,...ts(r)});class tQ extends ti{_parse(e){return this._getType(e)===eB.undefined?e6(void 0):this._def.innerType._parse(e)}unwrap(){return this._def.innerType}}tQ.create=(e,t)=>new tQ({innerType:e,typeName:o.ZodOptional,...ts(t)});class t0 extends ti{_parse(e){return this._getType(e)===eB.null?e6(null):this._def.innerType._parse(e)}unwrap(){return this._def.innerType}}t0.create=(e,t)=>new t0({innerType:e,typeName:o.ZodNullable,...ts(t)});class t1 extends ti{_parse(e){let{ctx:t}=this._processInputParams(e),r=t.data;return t.parsedType===eB.undefined&&(r=this._def.defaultValue()),this._def.innerType._parse({data:r,path:t.path,parent:t})}removeDefault(){return this._def.innerType}}t1.create=(e,t)=>new t1({innerType:e,typeName:o.ZodDefault,defaultValue:"function"==typeof t.default?t.default:()=>t.default,...ts(t)});class t4 extends ti{_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 te(s)?s.then(e=>({status:"valid",value:"valid"===e.status?e.value:this._def.catchValue({get error(){return new eK(r.common.issues)},input:r.data})})):{status:"valid",value:"valid"===s.status?s.value:this._def.catchValue({get error(){return new eK(r.common.issues)},input:r.data})}}removeCatch(){return this._def.innerType}}t4.create=(e,t)=>new t4({innerType:e,typeName:o.ZodCatch,catchValue:"function"==typeof t.catch?t.catch:()=>t.catch,...ts(t)});class t2 extends ti{_parse(e){if(this._getType(e)!==eB.nan){let t=this._getOrReturnCtx(e);return e4(t,{code:eJ.invalid_type,expected:eB.nan,received:t.parsedType}),e9}return{status:"valid",value:e.data}}}t2.create=e=>new t2({typeName:o.ZodNaN,...ts(e)});var t9=Symbol("zod_brand");class t3 extends ti{_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 t6 extends ti{_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?e9:"dirty"===e.status?(t.dirty(),e3(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?e9:"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 t6({in:e,out:t,typeName:o.ZodPipeline})}}class t5 extends ti{_parse(e){let t=this._def.innerType._parse(e),r=e=>(e7(e)&&(e.value=Object.freeze(e.value)),e);return te(t)?t.then(e=>r(e)):r(t)}unwrap(){return this._def.innerType}}function t8(e,t){let r="function"==typeof e?e(t):"string"==typeof e?{message:e}:e;return"string"==typeof r?{message:r}:r}function t7(e,t={},r){return e?tA.create().superRefine((s,i)=>{let a=e(s);if(a instanceof Promise)return a.then(e=>{if(!e){let e=t8(t,s),a=e.fatal??r??!0;i.addIssue({code:"custom",...e,fatal:a})}});if(!a){let e=t8(t,s),a=e.fatal??r??!0;i.addIssue({code:"custom",...e,fatal:a})}}):tA.create()}t5.create=(e,t)=>new t5({innerType:e,typeName:o.ZodReadonly,...ts(t)});var re={object:tj.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 rt=(e,t={message:`Input not instance of ${e.name}`})=>t7(t=>t instanceof e,t),rr=tw.create,rs=tN.create,ri=t2.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=tj.create,ry=tj.strictCreate,r_=tP.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=tJ.create,rx=tK.create,rI=tY.create,rO=tG.create,rA=tV.create,rC=tQ.create,rR=t0.create,rD=tV.createWithPreprocess,rU=t6.create,rj=()=>rr().optional(),rP=()=>rs().optional(),rF=()=>rn().optional(),rM={string:e=>tw.create({...e,coerce:!0}),number:e=>tN.create({...e,coerce:!0}),boolean:e=>tk.create({...e,coerce:!0}),bigint:e=>tS.create({...e,coerce:!0}),date:e=>tL.create({...e,coerce:!0})},r$=e9;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),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=
|
|
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=eW.object({file_path:eW.string().describe("The absolute path to the file to read"),offset:eW.number().optional().describe("Line number to start reading from"),limit:eW.number().optional().describe("Maximum number of lines to read")}),this.parameters=this.schemaToParams()}}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};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=eW.object({file_path:eW.string().describe("The absolute path to the file to write"),content:eW.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 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{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=
|
|
30
|
+
If old_string appears multiple times, use more context to make it unique.`,this.schema=eW.object({file_path:eW.string().describe("Absolute path to the file to edit"),old_string:eW.string().describe("The exact string to find and replace. Must be unique in the file."),new_string:eW.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 rW{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=eW.object({command:eW.string().describe("The bash command to execute"),timeout:eW.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 rB{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(/ /g," ").replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/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=
|
|
35
|
+
`).trim()}constructor(){this.name="web_fetch",this.description="Fetch content from a URL and process into markdown",this.schema=eW.object({url:eW.string().url().describe("The URL to fetch content from"),prompt:eW.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 rH(e){return e.replace(/<[^>]+>/g,"")}function rJ(e){return e.replace(/</g,"<").replace(/>/g,">").replace(/"/g,'"').replace(/'|'/g,"'").replace(/ /g," ").replace(/&/g,"&")}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 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=rH(
|
|
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=rJ(rH(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=rJ(rH(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=rJ(rH(s[2])).trim(),a=/<p[^>]*>([\s\S]*?)<\/p>/.exec(e),n=a?rJ(rH(a[1])).trim():"",o=function(e){let t=rJ(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=eW.object({query:eW.string().min(2).describe("The search query")}),this.parameters={type:"object",properties:{query:{type:"string",description:"The search query"}},required:["query"]}}}class rK{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=
|
|
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=eW.object({pattern:eW.string().describe("The search pattern (string or regex)"),path:eW.string().optional().describe("File or directory to search in (defaults to working directory)"),recursive:eW.boolean().optional().describe("Search recursively in directories (default: true)"),case_sensitive:eW.boolean().optional().describe("Case-sensitive search (default: false)"),include:eW.string().optional().describe("Glob-style file extension filter, e.g. '.ts' or '.ts,.js'"),max_results:eW.number().optional().describe("Maximum number of matching lines to return (default: 50)")}),this.parameters=this.schemaToParams()}}function rY(e){return e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&").replace(/\\\*/g,"[^/]*")}var rG=new Set(["node_modules",".git","dist",".next","build","__pycache__",".cache"]);class rV{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(rY);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(".")||rG.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=
|
|
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=eW.object({pattern:eW.string().describe("Glob pattern, e.g. '**/*.ts', 'src/**/*.{ts,tsx}', '*.md'"),path:eW.string().optional().describe("Directory to search in (default: working directory)"),max_results:eW.number().int().positive().optional().describe("Maximum number of results to return (default: 200)"),include_hidden:eW.boolean().optional().describe("Include hidden files/dirs starting with '.' (default: false)")}),this.parameters=this.schemaToParams()}}class rQ{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=eW.object({question:eW.string().min(1).describe("The question to ask the user"),options:eW.array(eW.object({label:eW.string().describe("Short display label for this option"),description:eW.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:eW.array(eW.object({name:eW.string().min(1).describe("Stable field name returned with the answer"),label:eW.string().min(1).describe("Display label for the input"),description:eW.string().optional().describe("Help text shown below the input"),type:eW.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:eW.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 r0(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 r1{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=
|
|
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=r0(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=r0(e,r,n,!0))&&(t=r,a=s)}if(null===o&&(o=r0(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=
|
|
76
|
+
context line`,this.schema=eW.object({patch:eW.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 r4{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=eW.object({widget_type:eW.string().describe("Card type identifier, e.g. 'storyboard_workbench'"),data:eW.record(eW.unknown()).describe("Structured data for the card to render"),update_id:eW.string().optional().describe("ID of existing widget to update (omit to create new)")}),this.parameters=this.schemaToParams()}}var r2=eW.object({action:eW.string().min(1),payload:eW.record(eW.unknown())});function r9(e){return e instanceof Error?e.message:String(e||"Remote action failed")}function r3(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
|
|
78
|
+
examples: ${JSON.stringify(e.examples)}`:"";return`- ${e.scheme}: ${e.purpose}${t}${r}`}class r6{constructor(e={}){this.name="remote_project_action",this.schema=r2,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(r3);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:
|
|
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:r9(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,r9(t))}}markJobFailedSafely(e,t){try{this.store?.markJobFailed(e,t)}catch{}}}var r5="SKILL.md",r8=[{dir:".claude",source:"claude"},{dir:".cursor",source:"cursor"},{dir:".github",source:"github"},{dir:".codex",source:"codex"},{dir:".copilot",source:"copilot"}];class r7{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,r5);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,r5);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"},...r8.map(({dir:t,source:r})=>({dir:(0,l.join)(e,t,"skills"),source:r})),...r8.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"},...r8.map(({dir:t,source:r})=>({dir:(0,l.join)(e,t,"skills"),source:r})),...r8.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,r5),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,r5)),{...a,filePath:(0,l.join)(n,r5),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
|
|
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 r8)if(r.includes(`/${e}/skills/`))return t;return"custom"}}class se{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
|
|
95
|
+
`)}}var st=["AGENTS.md","CLAUDE.md","README.md","CONTRIBUTING.md",".cursorrules",".github/copilot-instructions.md"],sr=st.map(e=>(0,l.join)(".customer-agent",e)),ss=new Set(["AGENTS.md","CLAUDE.md"]),si=new Set(["node_modules",".git","dist","build","out","coverage",".cache",".next",".next-dev",".output",".turbo"]);class sa{constructor(e=(0,p.homedir)()){this.homeDirectory=e}async loadProjectContext(e){let t=[],r=new Set;for(let s of[...st,...sr]){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 ss.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(si.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()&&ss.has(i.name)&&t.push(s)}}catch{}};return await r(e),t.sort((e,t)=>e.localeCompare(t))}}var sn=`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
|
|
137
|
+
- If a task requires many steps, state your plan first, then execute.`;class so{constructor(e){this.contextLoader=e}async assemble(e){let t=e.maxTokens??1e5,r=e.systemPrompt??sn,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
|
|
157
|
+
... (truncated)`;return t<=r.length?e.slice(0,t):e.slice(0,t-r.length)+r}}var sl="MEMORY.md";class sd{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===sl||!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,
|
|
160
|
+
`)}async getIndex(){let e=(0,l.join)(this.memoryDir,sl);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,
|
|
163
|
+
`)}async updateIndex(e){await this.ensureDir();let t=(0,l.join)(this.memoryDir,sl),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,
|
|
166
|
+
`).trimStart(),"utf-8")}async removeFromIndex(e){let t=(0,l.join)(this.memoryDir,sl);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
|
|
168
|
+
`),"utf-8")}catch{}}}class sc{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
|
|
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
|
|
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
|
|
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 su{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 sh{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 sp{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 sc(t);break;case"openai":r=new su(t);break;case"deepseek":r=new sh(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 sm{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 eq;for(let e of(r.register(new rX),r.register(new rZ),r.register(new rq),r.register(new rW),r.register(new rB),r.register(new rz),r.register(new rK),r.register(new rV),r.register(new r1),r.register(new r4),this.customTools))r.register(e);return e&&r.register(new r6({store:e,projectId:t})),r}systemPromptWithRemoteTools(e,t){let r=e?.listEnabledTools(t)??[];if(0===r.length)return this.systemPrompt;let s=["可用远程项目工具:",...r.map(r3)].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
|
|
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 sd(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 so(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 eZ().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 sd(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 so(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 eZ().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 sp,this.toolRegistry=new eq,this.customTools=[],this.skillLoader=new r7,this.skillRegistry=new se(this.skillLoader),this.contextLoader=new sa,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 sf{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
|
|
182
|
-
`)??JSON.stringify(s)}}};this.toolRegistry?.register(r)}}}class
|
|
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 sg{constructor(e){this.clients=new Map,this.toolRegistry=e}async connectServer(e){let t=new sf(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:eW.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 sy{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 s_(){return new Date().toISOString()}function sT(e){return JSON.stringify(e??{})}function sE(e){let t=JSON.parse(e||"{}");return t&&"object"==typeof t&&!Array.isArray(t)?t:{}}class sv{constructor(e){this.db=e}upsertTools(e,t){let r=s_(),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:
|
|
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:sT(a.inputSchema),outputSchema:sT(a.outputSchema),examples:JSON.stringify(Array.isArray(i=a.examples)?i:[]),auth:sT(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=s_(),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,s_(),e)}mapTool(e){return{id:e.id,projectId:e.project_id,scheme:e.scheme,purpose:e.purpose,url:e.url,method:e.method,headers:sE(e.headers),inputSchema:sE(e.input_schema),outputSchema:sE(e.output_schema),examples:function(e){let t=JSON.parse(e||"[]");return Array.isArray(t)?t:[]}(e.examples),auth:sE(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:sE(e.request_payload),status:e.status,responsePayload:e.response_payload?sE(e.response_payload):null,error:e.error,createdAt:e.created,updatedAt:e.updated}}}class sb{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 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(`
|
|
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 sw=new Map;function sN(e){let t=sw.get(e);return t||(t=new sb(e),sw.set(e,t)),t}class sS{constructor(e){this.baseDir=e,sN(e)}async create(e){let t=sN(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?sN(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?sN(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=sN(this.baseDir).db.prepare("SELECT * FROM sessions WHERE id = ?").get(e);return t?this.rowToSession(t):null}async update(e,t){let r=sN(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=sN(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[Q]||!t.trim())return null;let r={...e.metadata};return delete r[Q],{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=sN(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=sN(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 sN(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){sN(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){sN(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=sN(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=sN(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 sk{constructor(e){this.baseDir=e,sN(e)}async get(e){let t=sN(this.baseDir).db.prepare("SELECT * FROM projects WHERE id = ?").get(e);return t?this.rowToProject(t):null}async create(e){return sN(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=sN(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=sN(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 sN(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 sL{constructor(e){this.db=sN(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 sx="local";function sI(e){return(0,u.createHash)("sha256").update(e).digest()}class sO{constructor(e){this.db=sN(e).db}getOrCreatePrincipal(){let e=this.findPrincipal();if(e)return{userId:e.id,username:sx};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",
|
|
505
|
+
`).run("local-web",sx,sx,(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:sx}}issueWsNonce(e,t,r,s=Date.now()){let i=sI(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(
|
|
509
|
+
`).get(sI(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 sA{constructor(e){this.db=sN(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(sR)}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?sD(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?sU(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,sP(r),sP(n),s,i,a);this.db.prepare("DELETE FROM command_history WHERE user_id=? AND command_normalized=? AND id<>?").run(e,sP(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(sj)}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 sC=(e,t)=>{try{return JSON.parse(e)}catch{return t}},sR=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}),sD=e=>({userId:e.user_id,revision:e.revision,theme:e.theme,terminalFontSize:e.terminal_font_size,fileButtonPosition:sC(e.file_button_position_json,{}),keybarPosition:sC(e.keybar_position_json,{}),keybarHidden:!!e.keybar_hidden,keyOrder:sC(e.key_order_json,[]),pinnedCommands:function(e){if(null==e)return eR();try{return eD(JSON.parse(e))}catch{return eR()}}(e.pinned_commands_json),updatedAt:e.updated_at}),sU=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:sC(e.expanded_paths_json,[]),selectedFile:e.selected_file,terminalScroll:sC(e.terminal_scroll_json,{}),updatedAt:e.updated_at}),sj=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 sP(e){return/(?:token|password|secret|api[_-]?key)\s*=/.test(e.toLowerCase())?"[REDACTED]":e}class sF extends Error{constructor(e,t,r){super(t,r),this.name="HostPathError",this.code=e}}function sM(e,t){let r=e?.code;return"ENOENT"===r||"ENOTDIR"===r?new sF("PATH_NOT_FOUND",`路径不存在:${t}`,{cause:e}):new sF("PATH_UNREADABLE",`无法访问路径:${t}`,{cause:e})}function s$(e){let t=(0,l.resolve)(e);try{return c.realpathSync.native(t)}catch(e){throw sM(e,t)}}class sX{constructor(e){let t=[];for(let r of e){let e;if(!r?.trim())continue;let s=s$(r.trim());try{e=(0,c.statSync)(s)}catch(e){throw sM(e,s)}if(!e.isDirectory())throw new sF("PATH_NOT_DIRECTORY",`不是目录:${s}`);t.includes(s)||t.push(s)}if(0===t.length)throw new sF("PATH_UNREADABLE","没有可用的宿主机目录根路径");this.roots=t}static fromEnvironment(e,t){return new sX((e?.trim()?e:t).split(l.delimiter))}assertAllowed(e){if("string"!=typeof e||!e.trim())throw new sF("PATH_NOT_FOUND","路径不能为空");let t=s$(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 sF("PATH_OUTSIDE_ROOT",`路径不在允许范围内:${t}`);return t}assertDirectory(e){let t;let r=this.assertAllowed(e);try{t=(0,c.statSync)(r)}catch(e){throw sM(e,r)}if(!t.isDirectory())throw new sF("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 sM(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}}}}};
|