pi-webapp 0.1.18 → 0.1.19

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/extension.js CHANGED
@@ -1,4 +1,4 @@
1
- (function(){try{var r=typeof window<"u"?window:typeof global<"u"?global:typeof globalThis<"u"?globalThis:typeof self<"u"?self:{},e=new r.Error().stack;e&&(r._sentryDebugIds=r._sentryDebugIds||{},r._sentryDebugIds[e]="86a84df3-8328-49e5-bf10-b6cac8a72ad2",r._sentryDebugIdIdentifier="sentry-dbid-86a84df3-8328-49e5-bf10-b6cac8a72ad2")}catch{}})();import{delimiter as go,dirname as ho,join as ze,resolve as vt}from"node:path";import{realpathSync as ti,watch as wo}from"node:fs";import{fileURLToPath as yo}from"node:url";import{DefaultPackageManager as ni,getAgentDir as oe,ModelRuntime as bo,SessionManager as si,SettingsManager as vo,VERSION as He}from"@earendil-works/pi-coding-agent";import{getSupportedThinkingLevels as ko}from"@earendil-works/pi-ai";import{randomBytes as Ir,randomUUID as st,timingSafeEqual as Hn}from"node:crypto";import{readFile as Jn,readdir as Kn}from"node:fs/promises";import{createServer as qn}from"node:http";import{isAbsolute as Xn,join as Cr,relative as Yn}from"node:path";import{mkdir as ui,opendir as fi,stat as mi}from"node:fs/promises";import{homedir as gi}from"node:os";import{basename as hi,dirname as xt,join as Pt,posix as wi,resolve as St,win32 as yi}from"node:path";function It(r){return process.platform==="win32"?yi.isAbsolute(r)&&/^(?:[A-Za-z]:[\\/]|[\\/]{2}[^\\/]+[\\/]+[^\\/]+)/.test(r):wi.isAbsolute(r)}function bi(r,e,t){if(r.length===t&&e.name.localeCompare(r[r.length-1].name)>=0)return!0;let i=0,n=r.length;for(;i<n;){let s=i+n>>>1;e.name.localeCompare(r[s].name)<0?n=s:i=s+1}return r.splice(i,0,e),r.length<=t?!1:(r.pop(),!0)}async function Ct(r){if(r!==void 0&&!It(r))throw new Error("\u76EE\u5F55\u8DEF\u5F84\u5FC5\u987B\u662F\u7EDD\u5BF9\u8DEF\u5F84");let e=gi(),t=St(r??e),i=[];for(let p=t;;p=xt(p)){let w=xt(p);if(i.unshift({name:w===p?p:hi(p),path:p,hidden:!1}),w===p)break}let n=[],s=!1,a=await fi(t);for await(let p of a)!p.isDirectory()&&!p.isSymbolicLink()||bi(n,{name:p.name,isDirectory:p.isDirectory(),isSymbolicLink:p.isSymbolicLink()},1001)&&(s=!0);let l=[];for(let p of n){let w=Pt(t,p.name);if(!p.isDirectory&&p.isSymbolicLink)try{if(!(await mi(w)).isDirectory())continue}catch{continue}if(l.length===1e3){s=!0;break}l.push({name:p.name,path:w,hidden:p.name.startsWith(".")})}return{path:t,home:e,crumbs:i,entries:l,truncated:s}}async function _t(r,e){if(!It(r))throw new Error("\u7236\u76EE\u5F55\u8DEF\u5F84\u5FC5\u987B\u662F\u7EDD\u5BF9\u8DEF\u5F84");if(!e.trim()||e==="."||e===".."||/[/\\]/.test(e))throw new Error("\u6587\u4EF6\u5939\u540D\u79F0\u65E0\u6548");let t=Pt(St(r),e);return await ui(t),t}import{constants as Ke}from"node:fs";import{open as vi,opendir as ki,realpath as Tt,stat as Mt}from"node:fs/promises";import{isAbsolute as Nt,relative as Ei,resolve as xi,sep as Pi,win32 as Si}from"node:path";var Ii=1e3,Ci=512*1024,_i=8*1024*1024,At=1e4,Ti=new Intl.Collator("en",{numeric:!0,sensitivity:"base"}),j=class extends Error{status;constructor(e,t=400){super(e),this.name="WorkspaceFileError",this.status=t}};function Rt(r,e){let t=Ei(r,e);return t!==".."&&!t.startsWith(`..${Pi}`)&&!Nt(t)}async function qe(r,e){if(typeof e!="string"||e.length>4096||e.includes("\0")||e.includes("\\")||Nt(e)||Si.isAbsolute(e))throw new j("\u5DE5\u4F5C\u533A\u6587\u4EF6\u8DEF\u5F84\u65E0\u6548");let t=await Tt(r),i=xi(t,e);if(!Rt(t,i))throw new j("\u6587\u4EF6\u4F4D\u4E8E\u5DE5\u4F5C\u533A\u4E4B\u5916",403);let n=await Tt(i);if(!Rt(t,n))throw new j("\u6587\u4EF6\u4F4D\u4E8E\u5DE5\u4F5C\u533A\u4E4B\u5916",403);return n}async function Wt(r){try{return await r()}catch(e){if(e instanceof j)throw e;let t=e.code;throw t==="ENOENT"||t==="ENOTDIR"?new j("\u6587\u4EF6\u6216\u76EE\u5F55\u5DF2\u4E0D\u5B58\u5728",404):t==="EACCES"||t==="EPERM"?new j("\u6CA1\u6709\u6743\u9650\u8BFB\u53D6\u6587\u4EF6\u6216\u76EE\u5F55",403):e}}async function Dt(r,e){return Wt(async()=>{let t=await qe(r,e),i=[],n=!1;for await(let s of await ki(t)){if(i.length===Ii){n=!0;break}let a=e?`${e}/${s.name}`:s.name,l=s.isDirectory()?"directory":s.isFile()?"file":"other";if(s.isSymbolicLink())try{let p=await Mt(await qe(r,a));l=p.isDirectory()?"directory":p.isFile()?"file":"other"}catch{}i.push({name:s.name,path:a,kind:l})}return i.sort((s,a)=>+(a.kind==="directory")-+(s.kind==="directory")||Ti.compare(s.name,a.name)||s.name.localeCompare(a.name)),{path:e,entries:i,truncated:n}})}function Ai(r){if(r.subarray(0,8).equals(Buffer.from([137,80,78,71,13,10,26,10])))return"image/png";if(r[0]===255&&r[1]===216&&r[2]===255)return"image/jpeg";if(["GIF87a","GIF89a"].includes(r.subarray(0,6).toString("ascii")))return"image/gif";if(r.subarray(0,4).toString("ascii")==="RIFF"&&r.subarray(8,12).toString("ascii")==="WEBP")return"image/webp"}async function Se(r,e){return Wt(async()=>{let t=await qe(r,e);if(!(await Mt(t)).isFile())throw new j("\u8FD9\u4E0D\u662F\u53EF\u9884\u89C8\u7684\u666E\u901A\u6587\u4EF6");let i=await vi(t,Ke.O_RDONLY|Ke.O_NONBLOCK|(Ke.O_NOFOLLOW??0));try{let n=await i.stat();if(!n.isFile())throw new j("\u8FD9\u4E0D\u662F\u53EF\u9884\u89C8\u7684\u666E\u901A\u6587\u4EF6");let s={path:e,size:n.size},a=Buffer.alloc(16);await i.read(a,0,a.length,0);let l=Ai(a),p=l?_i:Ci;if(n.size>p)return{...s,kind:"too-large",limit:p,unit:"bytes"};let w=Buffer.alloc(Math.min(n.size+1,p+1)),m=0;for(;m<w.length;){let{bytesRead:f}=await i.read(w,m,w.length-m,m);if(!f)break;m+=f}if(m>n.size)throw new j("\u6587\u4EF6\u6B63\u5728\u53D8\u5316\uFF0C\u8BF7\u91CD\u65B0\u8BFB\u53D6",409);let c=w.subarray(0,m);if(l)return{...s,kind:"image",mimeType:l,data:c.toString("base64")};if(c.some(f=>f===0||f<32&&![9,10,12,13,27].includes(f)))return{...s,kind:"unsupported"};let u=1;for(let f=0;f<c.length-1;f++)if(c[f]===10&&++u>At)return{...s,kind:"too-large",limit:At,unit:"lines"};try{return{...s,kind:"text",text:new TextDecoder("utf-8",{fatal:!0}).decode(c)}}catch{return{...s,kind:"unsupported"}}}finally{await i.close()}})}import{execFile as Ri}from"node:child_process";import{realpath as Mi}from"node:fs/promises";import{isAbsolute as Ot,relative as Ni,sep as Wi,win32 as Di}from"node:path";var P=class extends Error{status;reason;constructor(e,t=400,i="git_failed"){super(e),this.name="WorkspaceGitError",this.status=t,this.reason=i}};function T(r,e,t=2*1024*1024,i={}){let n=Object.fromEntries(Object.entries(process.env).filter(([s])=>!s.startsWith("GIT_")));return new Promise((s,a)=>{let l=Ri("git",["--no-pager","--literal-pathspecs","-c","core.fsmonitor=false",...e],{cwd:r,env:{...n,LC_ALL:"C",GIT_OPTIONAL_LOCKS:"0",GIT_TERMINAL_PROMPT:"0",GIT_NO_REPLACE_OBJECTS:"1"},encoding:"utf8",timeout:i.write?3e4:1e4,maxBuffer:t,windowsHide:!0},(p,w,m)=>{if(!p){s(w);return}if(i.write){let u=p.killed||p.code==="ERR_CHILD_PROCESS_STDIO_MAXBUFFER"?"outcome_unknown":/index\.lock|cannot lock ref|could not lock/i.test(m)?"index_locked":/already exists/i.test(m)?"branch_exists":/already checked out|used by worktree/i.test(m)?"branch_in_use":/would be overwritten|local changes/i.test(m)?"dirty_worktree":/identity unknown|unable to auto-detect email|empty ident/i.test(m)?"identity_missing":"git_failed";a(new P("Git \u64CD\u4F5C\u5931\u8D25\uFF0C\u8BF7\u5237\u65B0\u68C0\u67E5\u4ED3\u5E93\u72B6\u6001\u3001\u8EAB\u4EFD\u6216 hooks \u914D\u7F6E",u==="outcome_unknown"?503:409,u));return}let c=p.code;c==="ENOENT"?a(new P("Git \u672A\u5B89\u88C5\u6216\u5DE5\u4F5C\u533A\u4E0D\u53EF\u7528",503)):c==="ERR_CHILD_PROCESS_STDIO_MAXBUFFER"?a(new P("Git \u8F93\u51FA\u8FC7\u5927\uFF0C\u8BF7\u7F29\u5C0F\u8BFB\u53D6\u8303\u56F4",413)):/not a git repository/.test(m)?a(new P("\u5F53\u524D\u76EE\u5F55\u4E0D\u662F Git \u4ED3\u5E93",404)):a(new P(p.killed?"Git \u8BFB\u53D6\u8D85\u65F6\uFF0C\u8BF7\u91CD\u8BD5":"Git \u8BFB\u53D6\u5931\u8D25\uFF0C\u8BF7\u68C0\u67E5\u4ED3\u5E93\u72B6\u6001\u548C\u76EE\u5F55\u6743\u9650",503))});i.input!==void 0&&l.stdin?.end(i.input)})}async function q(r){let e=await Mi(r),t;try{t=(await T(e,["rev-parse","--show-toplevel"])).replace(/\n$/,"")}catch(n){if(n instanceof P&&n.status===404)return{kind:"not-repository"};if(n instanceof P&&n.message==="Git \u672A\u5B89\u88C5\u6216\u5DE5\u4F5C\u533A\u4E0D\u53EF\u7528")return{kind:"unavailable"};throw n}let i=Ni(t,e).split(Wi).join("/");if(i===".."||i.startsWith("../")||Ot(i))throw new P("\u4ED3\u5E93\u4F4D\u4E8E\u5DE5\u4F5C\u533A\u4E4B\u5916",403);return{kind:"repository",cwd:e,root:t,scope:i?`${i}/`:""}}function Q(r){if(typeof r!="string"||!r||r.length>4096||r.includes("\0")||r.includes("\\")||Ot(r)||Di.isAbsolute(r)||r.split("/").some(e=>!e||e==="."||e===".."))throw new P("\u5DE5\u4F5C\u533A\u6587\u4EF6\u8DEF\u5F84\u65E0\u6548",403)}import{createHash as ji}from"node:crypto";import{lstat as Ye,realpath as Gt}from"node:fs/promises";import{dirname as Lt,isAbsolute as $i,relative as Li,resolve as me}from"node:path";import{lstat as Oi}from"node:fs/promises";import{resolve as Fi}from"node:path";var Bi=1e3,Ft=512*1024,Bt=1e4;function jt(r,e){return e.startsWith(r)&&e.slice(r.length)||void 0}async function ae(r){let e=await q(r);if(e.kind!=="repository")return e;let{root:t,scope:i}=e,n=await T(e.cwd,["status","--porcelain=v2","--branch","-z","--untracked-files=all","--","."]),s={kind:"repository",root:t,scope:i,branch:null,head:null,upstream:null,ahead:null,behind:null,entries:[],truncated:!1},a=n.split("\0");for(let l=0;l<a.length;l++){let p=a[l];if(p.startsWith("# branch.oid ")){let C=p.slice(13);s.head=C==="(initial)"?null:C;continue}if(p.startsWith("# branch.head ")){let C=p.slice(14);s.branch=C==="(detached)"?null:C;continue}if(p.startsWith("# branch.upstream ")){s.upstream=p.slice(18);continue}if(p.startsWith("# branch.ab ")){let C=p.match(/\+(\d+) -(\d+)/);C&&(s.ahead=Number(C[1]),s.behind=Number(C[2]));continue}let w=p[0];if(!["1","2","u","?"].includes(w??""))continue;let m=w==="?"?1:w==="1"?8:w==="2"?9:10,c=0;for(let C=0;C<m;C++)c=p.indexOf(" ",c)+1;let u=jt(i,p.slice(c)),f=w==="2"?a[++l]:void 0;if(!u)continue;if(s.entries.length===Bi){s.truncated=!0;continue}let g=p.slice(0,c).split(" "),x={path:u,index:w==="?"?"?":g[1][0],worktree:w==="?"?"?":g[1][1],conflict:w==="u",untracked:w==="?",submodule:w!=="?"&&g[2]!=="N..."},I=f===void 0?void 0:jt(i,f);I&&(x.originalPath=I),s.entries.push(x)}return s}async function $t(r,e,t){if(Q(e),!["staged","unstaged","untracked"].includes(t))throw new P("Git \u5DEE\u5F02\u8303\u56F4\u65E0\u6548");let i=await ae(r);if(i.kind!=="repository")throw new P("\u5F53\u524D\u5DE5\u4F5C\u533A\u6CA1\u6709\u53EF\u8BFB\u53D6\u7684 Git \u4ED3\u5E93",404);let n={path:e,area:t},s=i.entries.find(l=>l.path===e);if(!s)return{...n,kind:"empty"};if(s.conflict)return{...n,kind:"conflict"};if(s.submodule)return{...n,kind:"submodule"};if(t==="untracked"){if(!s.untracked)return{...n,kind:"empty"};if(!(await Oi(Fi(r,e))).isFile())return{...n,kind:"unsupported"};let l=await Se(r,e);if(l.kind==="too-large")return{...n,kind:"too-large"};if(l.kind!=="text")return{...n,kind:"binary"};if(!l.text)return{...n,kind:"empty"};let p=l.text.split(`
1
+ (function(){try{var r=typeof window<"u"?window:typeof global<"u"?global:typeof globalThis<"u"?globalThis:typeof self<"u"?self:{},e=new r.Error().stack;e&&(r._sentryDebugIds=r._sentryDebugIds||{},r._sentryDebugIds[e]="f5cdf18b-b938-4e27-b6ec-f6380e75fffc",r._sentryDebugIdIdentifier="sentry-dbid-f5cdf18b-b938-4e27-b6ec-f6380e75fffc")}catch{}})();import{delimiter as go,dirname as ho,join as ze,resolve as vt}from"node:path";import{realpathSync as ti,watch as wo}from"node:fs";import{fileURLToPath as yo}from"node:url";import{DefaultPackageManager as ni,getAgentDir as oe,ModelRuntime as bo,SessionManager as si,SettingsManager as vo,VERSION as He}from"@earendil-works/pi-coding-agent";import{getSupportedThinkingLevels as ko}from"@earendil-works/pi-ai";import{randomBytes as Ir,randomUUID as st,timingSafeEqual as Hn}from"node:crypto";import{readFile as Jn,readdir as Kn}from"node:fs/promises";import{createServer as qn}from"node:http";import{isAbsolute as Xn,join as Cr,relative as Yn}from"node:path";import{mkdir as ui,opendir as fi,stat as mi}from"node:fs/promises";import{homedir as gi}from"node:os";import{basename as hi,dirname as xt,join as Pt,posix as wi,resolve as St,win32 as yi}from"node:path";function It(r){return process.platform==="win32"?yi.isAbsolute(r)&&/^(?:[A-Za-z]:[\\/]|[\\/]{2}[^\\/]+[\\/]+[^\\/]+)/.test(r):wi.isAbsolute(r)}function bi(r,e,t){if(r.length===t&&e.name.localeCompare(r[r.length-1].name)>=0)return!0;let i=0,n=r.length;for(;i<n;){let s=i+n>>>1;e.name.localeCompare(r[s].name)<0?n=s:i=s+1}return r.splice(i,0,e),r.length<=t?!1:(r.pop(),!0)}async function Ct(r){if(r!==void 0&&!It(r))throw new Error("\u76EE\u5F55\u8DEF\u5F84\u5FC5\u987B\u662F\u7EDD\u5BF9\u8DEF\u5F84");let e=gi(),t=St(r??e),i=[];for(let p=t;;p=xt(p)){let w=xt(p);if(i.unshift({name:w===p?p:hi(p),path:p,hidden:!1}),w===p)break}let n=[],s=!1,a=await fi(t);for await(let p of a)!p.isDirectory()&&!p.isSymbolicLink()||bi(n,{name:p.name,isDirectory:p.isDirectory(),isSymbolicLink:p.isSymbolicLink()},1001)&&(s=!0);let l=[];for(let p of n){let w=Pt(t,p.name);if(!p.isDirectory&&p.isSymbolicLink)try{if(!(await mi(w)).isDirectory())continue}catch{continue}if(l.length===1e3){s=!0;break}l.push({name:p.name,path:w,hidden:p.name.startsWith(".")})}return{path:t,home:e,crumbs:i,entries:l,truncated:s}}async function _t(r,e){if(!It(r))throw new Error("\u7236\u76EE\u5F55\u8DEF\u5F84\u5FC5\u987B\u662F\u7EDD\u5BF9\u8DEF\u5F84");if(!e.trim()||e==="."||e===".."||/[/\\]/.test(e))throw new Error("\u6587\u4EF6\u5939\u540D\u79F0\u65E0\u6548");let t=Pt(St(r),e);return await ui(t),t}import{constants as Ke}from"node:fs";import{open as vi,opendir as ki,realpath as Tt,stat as Mt}from"node:fs/promises";import{isAbsolute as Nt,relative as Ei,resolve as xi,sep as Pi,win32 as Si}from"node:path";var Ii=1e3,Ci=512*1024,_i=8*1024*1024,At=1e4,Ti=new Intl.Collator("en",{numeric:!0,sensitivity:"base"}),j=class extends Error{status;constructor(e,t=400){super(e),this.name="WorkspaceFileError",this.status=t}};function Rt(r,e){let t=Ei(r,e);return t!==".."&&!t.startsWith(`..${Pi}`)&&!Nt(t)}async function qe(r,e){if(typeof e!="string"||e.length>4096||e.includes("\0")||e.includes("\\")||Nt(e)||Si.isAbsolute(e))throw new j("\u5DE5\u4F5C\u533A\u6587\u4EF6\u8DEF\u5F84\u65E0\u6548");let t=await Tt(r),i=xi(t,e);if(!Rt(t,i))throw new j("\u6587\u4EF6\u4F4D\u4E8E\u5DE5\u4F5C\u533A\u4E4B\u5916",403);let n=await Tt(i);if(!Rt(t,n))throw new j("\u6587\u4EF6\u4F4D\u4E8E\u5DE5\u4F5C\u533A\u4E4B\u5916",403);return n}async function Wt(r){try{return await r()}catch(e){if(e instanceof j)throw e;let t=e.code;throw t==="ENOENT"||t==="ENOTDIR"?new j("\u6587\u4EF6\u6216\u76EE\u5F55\u5DF2\u4E0D\u5B58\u5728",404):t==="EACCES"||t==="EPERM"?new j("\u6CA1\u6709\u6743\u9650\u8BFB\u53D6\u6587\u4EF6\u6216\u76EE\u5F55",403):e}}async function Dt(r,e){return Wt(async()=>{let t=await qe(r,e),i=[],n=!1;for await(let s of await ki(t)){if(i.length===Ii){n=!0;break}let a=e?`${e}/${s.name}`:s.name,l=s.isDirectory()?"directory":s.isFile()?"file":"other";if(s.isSymbolicLink())try{let p=await Mt(await qe(r,a));l=p.isDirectory()?"directory":p.isFile()?"file":"other"}catch{}i.push({name:s.name,path:a,kind:l})}return i.sort((s,a)=>+(a.kind==="directory")-+(s.kind==="directory")||Ti.compare(s.name,a.name)||s.name.localeCompare(a.name)),{path:e,entries:i,truncated:n}})}function Ai(r){if(r.subarray(0,8).equals(Buffer.from([137,80,78,71,13,10,26,10])))return"image/png";if(r[0]===255&&r[1]===216&&r[2]===255)return"image/jpeg";if(["GIF87a","GIF89a"].includes(r.subarray(0,6).toString("ascii")))return"image/gif";if(r.subarray(0,4).toString("ascii")==="RIFF"&&r.subarray(8,12).toString("ascii")==="WEBP")return"image/webp"}async function Se(r,e){return Wt(async()=>{let t=await qe(r,e);if(!(await Mt(t)).isFile())throw new j("\u8FD9\u4E0D\u662F\u53EF\u9884\u89C8\u7684\u666E\u901A\u6587\u4EF6");let i=await vi(t,Ke.O_RDONLY|Ke.O_NONBLOCK|(Ke.O_NOFOLLOW??0));try{let n=await i.stat();if(!n.isFile())throw new j("\u8FD9\u4E0D\u662F\u53EF\u9884\u89C8\u7684\u666E\u901A\u6587\u4EF6");let s={path:e,size:n.size},a=Buffer.alloc(16);await i.read(a,0,a.length,0);let l=Ai(a),p=l?_i:Ci;if(n.size>p)return{...s,kind:"too-large",limit:p,unit:"bytes"};let w=Buffer.alloc(Math.min(n.size+1,p+1)),m=0;for(;m<w.length;){let{bytesRead:f}=await i.read(w,m,w.length-m,m);if(!f)break;m+=f}if(m>n.size)throw new j("\u6587\u4EF6\u6B63\u5728\u53D8\u5316\uFF0C\u8BF7\u91CD\u65B0\u8BFB\u53D6",409);let c=w.subarray(0,m);if(l)return{...s,kind:"image",mimeType:l,data:c.toString("base64")};if(c.some(f=>f===0||f<32&&![9,10,12,13,27].includes(f)))return{...s,kind:"unsupported"};let u=1;for(let f=0;f<c.length-1;f++)if(c[f]===10&&++u>At)return{...s,kind:"too-large",limit:At,unit:"lines"};try{return{...s,kind:"text",text:new TextDecoder("utf-8",{fatal:!0}).decode(c)}}catch{return{...s,kind:"unsupported"}}}finally{await i.close()}})}import{execFile as Ri}from"node:child_process";import{realpath as Mi}from"node:fs/promises";import{isAbsolute as Ot,relative as Ni,sep as Wi,win32 as Di}from"node:path";var P=class extends Error{status;reason;constructor(e,t=400,i="git_failed"){super(e),this.name="WorkspaceGitError",this.status=t,this.reason=i}};function T(r,e,t=2*1024*1024,i={}){let n=Object.fromEntries(Object.entries(process.env).filter(([s])=>!s.startsWith("GIT_")));return new Promise((s,a)=>{let l=Ri("git",["--no-pager","--literal-pathspecs","-c","core.fsmonitor=false",...e],{cwd:r,env:{...n,LC_ALL:"C",GIT_OPTIONAL_LOCKS:"0",GIT_TERMINAL_PROMPT:"0",GIT_NO_REPLACE_OBJECTS:"1"},encoding:"utf8",timeout:i.write?3e4:1e4,maxBuffer:t,windowsHide:!0},(p,w,m)=>{if(!p){s(w);return}if(i.write){let u=p.killed||p.code==="ERR_CHILD_PROCESS_STDIO_MAXBUFFER"?"outcome_unknown":/index\.lock|cannot lock ref|could not lock/i.test(m)?"index_locked":/already exists/i.test(m)?"branch_exists":/already checked out|used by worktree/i.test(m)?"branch_in_use":/would be overwritten|local changes/i.test(m)?"dirty_worktree":/identity unknown|unable to auto-detect email|empty ident/i.test(m)?"identity_missing":"git_failed";a(new P("Git \u64CD\u4F5C\u5931\u8D25\uFF0C\u8BF7\u5237\u65B0\u68C0\u67E5\u4ED3\u5E93\u72B6\u6001\u3001\u8EAB\u4EFD\u6216 hooks \u914D\u7F6E",u==="outcome_unknown"?503:409,u));return}let c=p.code;c==="ENOENT"?a(new P("Git \u672A\u5B89\u88C5\u6216\u5DE5\u4F5C\u533A\u4E0D\u53EF\u7528",503)):c==="ERR_CHILD_PROCESS_STDIO_MAXBUFFER"?a(new P("Git \u8F93\u51FA\u8FC7\u5927\uFF0C\u8BF7\u7F29\u5C0F\u8BFB\u53D6\u8303\u56F4",413)):/not a git repository/.test(m)?a(new P("\u5F53\u524D\u76EE\u5F55\u4E0D\u662F Git \u4ED3\u5E93",404)):a(new P(p.killed?"Git \u8BFB\u53D6\u8D85\u65F6\uFF0C\u8BF7\u91CD\u8BD5":"Git \u8BFB\u53D6\u5931\u8D25\uFF0C\u8BF7\u68C0\u67E5\u4ED3\u5E93\u72B6\u6001\u548C\u76EE\u5F55\u6743\u9650",503))});i.input!==void 0&&l.stdin?.end(i.input)})}async function q(r){let e=await Mi(r),t;try{t=(await T(e,["rev-parse","--show-toplevel"])).replace(/\n$/,"")}catch(n){if(n instanceof P&&n.status===404)return{kind:"not-repository"};if(n instanceof P&&n.message==="Git \u672A\u5B89\u88C5\u6216\u5DE5\u4F5C\u533A\u4E0D\u53EF\u7528")return{kind:"unavailable"};throw n}let i=Ni(t,e).split(Wi).join("/");if(i===".."||i.startsWith("../")||Ot(i))throw new P("\u4ED3\u5E93\u4F4D\u4E8E\u5DE5\u4F5C\u533A\u4E4B\u5916",403);return{kind:"repository",cwd:e,root:t,scope:i?`${i}/`:""}}function Q(r){if(typeof r!="string"||!r||r.length>4096||r.includes("\0")||r.includes("\\")||Ot(r)||Di.isAbsolute(r)||r.split("/").some(e=>!e||e==="."||e===".."))throw new P("\u5DE5\u4F5C\u533A\u6587\u4EF6\u8DEF\u5F84\u65E0\u6548",403)}import{createHash as ji}from"node:crypto";import{lstat as Ye,realpath as Gt}from"node:fs/promises";import{dirname as Lt,isAbsolute as $i,relative as Li,resolve as me}from"node:path";import{lstat as Oi}from"node:fs/promises";import{resolve as Fi}from"node:path";var Bi=1e3,Ft=512*1024,Bt=1e4;function jt(r,e){return e.startsWith(r)&&e.slice(r.length)||void 0}async function ae(r){let e=await q(r);if(e.kind!=="repository")return e;let{root:t,scope:i}=e,n=await T(e.cwd,["status","--porcelain=v2","--branch","-z","--untracked-files=all","--","."]),s={kind:"repository",root:t,scope:i,branch:null,head:null,upstream:null,ahead:null,behind:null,entries:[],truncated:!1},a=n.split("\0");for(let l=0;l<a.length;l++){let p=a[l];if(p.startsWith("# branch.oid ")){let C=p.slice(13);s.head=C==="(initial)"?null:C;continue}if(p.startsWith("# branch.head ")){let C=p.slice(14);s.branch=C==="(detached)"?null:C;continue}if(p.startsWith("# branch.upstream ")){s.upstream=p.slice(18);continue}if(p.startsWith("# branch.ab ")){let C=p.match(/\+(\d+) -(\d+)/);C&&(s.ahead=Number(C[1]),s.behind=Number(C[2]));continue}let w=p[0];if(!["1","2","u","?"].includes(w??""))continue;let m=w==="?"?1:w==="1"?8:w==="2"?9:10,c=0;for(let C=0;C<m;C++)c=p.indexOf(" ",c)+1;let u=jt(i,p.slice(c)),f=w==="2"?a[++l]:void 0;if(!u)continue;if(s.entries.length===Bi){s.truncated=!0;continue}let g=p.slice(0,c).split(" "),x={path:u,index:w==="?"?"?":g[1][0],worktree:w==="?"?"?":g[1][1],conflict:w==="u",untracked:w==="?",submodule:w!=="?"&&g[2]!=="N..."},I=f===void 0?void 0:jt(i,f);I&&(x.originalPath=I),s.entries.push(x)}return s}async function $t(r,e,t){if(Q(e),!["staged","unstaged","untracked"].includes(t))throw new P("Git \u5DEE\u5F02\u8303\u56F4\u65E0\u6548");let i=await ae(r);if(i.kind!=="repository")throw new P("\u5F53\u524D\u5DE5\u4F5C\u533A\u6CA1\u6709\u53EF\u8BFB\u53D6\u7684 Git \u4ED3\u5E93",404);let n={path:e,area:t},s=i.entries.find(l=>l.path===e);if(!s)return{...n,kind:"empty"};if(s.conflict)return{...n,kind:"conflict"};if(s.submodule)return{...n,kind:"submodule"};if(t==="untracked"){if(!s.untracked)return{...n,kind:"empty"};if(!(await Oi(Fi(r,e))).isFile())return{...n,kind:"unsupported"};let l=await Se(r,e);if(l.kind==="too-large")return{...n,kind:"too-large"};if(l.kind!=="text")return{...n,kind:"binary"};if(!l.text)return{...n,kind:"empty"};let p=l.text.split(`
2
2
  `),w=p.at(-1)==="";w&&p.pop();let m=`--- /dev/null
3
3
  +++ b/${e.replace(/[\r\n]/g," ")}
4
4
  @@ -0,0 +1,${p.length} @@
@@ -14,7 +14,7 @@ ${w.stack.split(`
14
14
  `).slice(1).join(`
15
15
  `)}`);let c=this.reportError(m,{...s,stage:"provider_login"});p.view={id:l,providerId:e,method:t,status:"error",error:"\u767B\u5F55\u5931\u8D25\uFF0C\u8BF7\u68C0\u67E5\u63D0\u4F9B\u65B9\u63D0\u793A\u5E76\u91CD\u8BD5\u3002",errorId:c}}}),{...p.view}}get(e){let t=this.flows.get(e)?.view;return t?{...t}:void 0}getActive(){let e=[...this.flows.values()].find(({view:t})=>t.status==="running"||t.status==="waiting")?.view;return e?{...e}:void 0}respond(e,t){let i=this.flows.get(e);if(!i?.answer||i.view.status!=="waiting"||i.view.prompt?.type==="select"&&!i.view.prompt.options.some(s=>s.id===t))return!1;let n=i.answer;return i.answer=void 0,i.reject=void 0,i.view={...i.view,status:"running",prompt:void 0},n(t),!0}cancel(e){let t=this.flows.get(e);return!t||t.view.status==="done"||t.view.status==="error"?!1:(t.view={...t.view,status:"cancelled",prompt:void 0},t.controller.abort(),t.reject?.(new Error("\u767B\u5F55\u5DF2\u53D6\u6D88")),t.answer=void 0,t.reject=void 0,!0)}close(){for(let e of this.flows.keys())this.cancel(e);this.flows.clear()}};import{randomBytes as un}from"node:crypto";import{readFile as fn,rename as mn,rm as gn,stat as hn,writeFile as wn,mkdir as yn}from"node:fs/promises";import{dirname as bn}from"node:path";var vn=["openai-completions","openai-responses","anthropic-messages"];function et(r){if(!r||typeof r!="object")return!1;let e=r;if(typeof e.id!="string"||!/^[a-z0-9][a-z0-9._-]{0,63}$/.test(e.id)||typeof e.name!="string"||!e.name.trim()||e.name.length>100||typeof e.modelId!="string"||!e.modelId.trim()||e.modelId.length>200||!vn.includes(e.api)||typeof e.baseUrl!="string"||e.baseUrl.length>2048)return!1;try{let t=new URL(e.baseUrl);return(t.protocol==="https:"||t.protocol==="http:")&&!!t.hostname&&!t.username&&!t.password&&!t.hash}catch{return!1}}async function cr(r,e){if(!et(e))throw new Error("\u81EA\u5B9A\u4E49\u63D0\u4F9B\u65B9\u540D\u79F0\u3001\u5730\u5740\u6216\u6A21\u578B\u65E0\u6548");let t;try{t=await fn(r,"utf8")}catch(l){if(l.code!=="ENOENT")throw l}let i;if(t===void 0)i={providers:{}};else{try{i=JSON.parse(t)}catch{throw new Error("models.json \u542B\u6CE8\u91CA\u6216\u683C\u5F0F\u9519\u8BEF\uFF0C\u8BF7\u5728\u914D\u7F6E\u6587\u4EF6\u4E2D\u624B\u52A8\u6DFB\u52A0\u63D0\u4F9B\u65B9")}if(!i||typeof i!="object"||!i.providers||typeof i.providers!="object"||Array.isArray(i.providers))throw new Error("models.json \u7ED3\u6784\u65E0\u6548")}if(Object.hasOwn(i.providers,e.id))throw new Error("\u63D0\u4F9B\u65B9\u5DF2\u5B58\u5728");let n={...i,providers:{...i.providers,[e.id]:{name:e.name.trim(),baseUrl:e.baseUrl,api:e.api,models:[{id:e.modelId.trim()}]}}};await yn(bn(r),{recursive:!0});let s=t===void 0?384:(await hn(r)).mode&511,a=`${r}.pi-web-${un(6).toString("hex")}.tmp`;try{await wn(a,`${JSON.stringify(n,null,2)}
16
16
  `,{mode:s,flag:"wx"}),await mn(a,r)}finally{await gn(a,{force:!0})}}import{randomBytes as kn}from"node:crypto";import{mkdir as En,readFile as xn,rename as Pn,rm as Sn,stat as In,writeFile as Cn}from"node:fs/promises";import{dirname as _n}from"node:path";function lr(r){if(!r||r.length>2048)return!1;try{let e=new URL(r);return(e.protocol==="https:"||e.protocol==="http:")&&!!e.hostname&&!e.username&&!e.password&&!e.search&&!e.hash}catch{return!1}}function dr(r){if(!r||typeof r!="object")return!1;let e=r;return e.action==="save"?(e.originalId===void 0||typeof e.originalId=="string")&&pr(e.model):e.action==="base_url"?e.baseUrl===null||typeof e.baseUrl=="string"&&lr(e.baseUrl):e.action==="remove"&&typeof e.id=="string"&&e.id.length>0&&e.id.length<=200}function pr(r){if(!r||typeof r!="object")return!1;let e=r;if(typeof e.id!="string"||!e.id.trim()||e.id.length>200||e.name!==void 0&&(typeof e.name!="string"||!e.name.trim()||e.name.length>200))return!1;for(let t of[e.contextWindow,e.maxTokens])if(t!==void 0&&(!Number.isSafeInteger(t)||t<=0))return!1;return e.input===void 0||Array.isArray(e.input)&&e.input.length>0&&e.input.every(t=>t==="text"||t==="image")&&new Set(e.input).size===e.input.length}async function ur(r){let e;try{e=await xn(r,"utf8")}catch(i){if(i.code!=="ENOENT")throw i}if(e===void 0)return{config:{providers:{}}};let t;try{t=JSON.parse(e)}catch{throw new Error("models.json \u542B\u6CE8\u91CA\u6216\u683C\u5F0F\u9519\u8BEF\uFF0C\u8BF7\u5728\u914D\u7F6E\u6587\u4EF6\u4E2D\u624B\u52A8\u4FEE\u6539")}if(!t||typeof t!="object"||!t.providers||typeof t.providers!="object"||Array.isArray(t.providers))throw new Error("models.json \u7ED3\u6784\u65E0\u6548");return{config:t,existing:e}}async function Tn(r,e,t){await En(_n(r),{recursive:!0});let i=t===void 0?384:(await In(r)).mode&511,n=`${r}.pi-web-${kn(6).toString("hex")}.tmp`;try{await Cn(n,`${JSON.stringify(e,null,2)}
17
- `,{mode:i,flag:"wx"}),await Pn(n,r)}finally{await Sn(n,{force:!0})}}async function fr(r,e,t){if(!t.getProvider(e))throw new Error("\u63D0\u4F9B\u65B9\u4E0D\u5B58\u5728");let{config:i}=await ur(r),n=i.providers[e],s=new Set(n?.models?.map(a=>a.id)??[]);return{providerId:e,baseUrl:n?.baseUrl,models:t.getModels(e).map(a=>({id:a.id,name:a.name,contextWindow:a.contextWindow,maxTokens:a.maxTokens,input:[...a.input],source:s.has(a.id)?"custom":"builtin",overridden:!!n?.modelOverrides?.[a.id]}))}}async function mr(r,e,t,i){if(!i.getProvider(e))throw new Error("\u63D0\u4F9B\u65B9\u4E0D\u5B58\u5728");let{config:n,existing:s}=await ur(r),a={...n.providers[e]??{}},l=[...a.models??[]],p={...a.modelOverrides??{}};if(t.action==="base_url"){if(t.baseUrl!==null&&!lr(t.baseUrl))throw new Error("API \u5730\u5740\u65E0\u6548");t.baseUrl===null?delete a.baseUrl:a.baseUrl=t.baseUrl}else if(t.action==="save"){if(!pr(t.model))throw new Error("\u6A21\u578B\u53C2\u6570\u65E0\u6548");let w={id:t.model.id.trim(),...t.model.name===void 0?{}:{name:t.model.name},...t.model.contextWindow===void 0?{}:{contextWindow:t.model.contextWindow},...t.model.maxTokens===void 0?{}:{maxTokens:t.model.maxTokens},...t.model.input===void 0?{}:{input:t.model.input}},m=t.originalId,c=m===void 0?-1:l.findIndex(u=>u.id===m);if(m===void 0&&(l.some(u=>u.id===w.id)||i.getModel(e,w.id)))throw new Error("\u6A21\u578B ID \u5DF2\u5B58\u5728");if(c>=0){if(w.id!==m&&(l.some(f=>f.id===w.id)||i.getModel(e,w.id)))throw new Error("\u6A21\u578B ID \u5DF2\u5B58\u5728");let u={...l[c],...w};for(let f of["name","contextWindow","maxTokens","input"])w[f]===void 0&&delete u[f];l[c]=u}else if(m!==void 0&&i.getModel(e,m)){if(w.id!==m)throw new Error("\u5185\u7F6E\u6A21\u578B ID \u4E0D\u53EF\u4FEE\u6539");let{id:u,...f}=w;p[m]={...p[m],...f};for(let g of["name","contextWindow","maxTokens","input"])w[g]===void 0&&delete p[m][g]}else{if(m!==void 0)throw new Error("\u6A21\u578B\u4E0D\u5B58\u5728");l.push(w)}}else{let w=l.findIndex(m=>m.id===t.id);if(w>=0)l.splice(w,1);else if(Object.hasOwn(p,t.id))delete p[t.id];else throw new Error("\u53EA\u80FD\u79FB\u9664\u81EA\u5B9A\u4E49\u6A21\u578B\u6216\u6062\u590D\u5DF2\u4FEE\u6539\u7684\u5185\u7F6E\u6A21\u578B")}l.length?a.models=l:delete a.models,Object.keys(p).length?a.modelOverrides=p:delete a.modelOverrides,Object.keys(a).length?n.providers[e]=a:delete n.providers[e],await Tn(r,n,s)}function gr(r){return/^(?:npm:|git:|https?:\/\/|ssh:\/\/|git@)/i.test(r.trim())}import{randomBytes as kr,createHash as On}from"node:crypto";import{fileURLToPath as Fn}from"node:url";var Ae="pi-webapp@0.1.18+76216a01d81ea00edaed",J="76216a01d81ea00edaed";var Me=new Set(["bash","powershell","read","write","edit","grep","find","ls"]),An=new Set(["cancelled","blocked","validation","not_found","permission","timeout","process_exit","unknown"]),hr={userInfo:!1,cookies:!1,httpHeaders:!1,httpBodies:[],urlQueryParams:!1,genAI:{inputs:!1,outputs:!1},graphQL:{document:!1,variables:!1},databaseQueryData:!1,queues:!1,stackFrameVariables:!1,frameContextLines:0},Rn=new Set(["stage","route","method","status","durationMs","connection","idle","model","thinkingLevel","messageCount","attachmentCount","session","requestId","operationId","errorId","repeats","dropped","componentStack","eventType","sequence","nodeVersion","piVersion","platform","browser","buildId","code","toolName","toolId","toolCallId","failureKind","errorCode","exitCode","timeoutMs","diagnosticSource","originalStackAvailable","errorSummary","summaryOmitted","summaryOmittedReason","level"]),Mn=new Set(["/api/workspace/git/control","/api/workspace/git/write","/api/workspace/git/status","/api/workspace/git/diff","/api/workspace/git/history","/api/workspace/git/commit-detail","/api/workspace/git/commit-diff","/api/workspace/files/list","/api/workspace/files/preview","/api/plugins","/api/plugin-action","/api/plugin-interaction","/api/resume","/api/update","/api/update/version","/api/provider/models","/api/provider/logout","/api/provider/login/active","/api/telemetry/config","/api/image","/api/attachment","/api/attachment/remove","/api/session","/api/providers","/api/models","/api/config","/api/workspaces","/api/commands","/api/events","/api/message","/api/abort","/api/compact","/api/new-session","/api/model","/api/thinking-level","/api/provider/login","/api/provider/login/respond","/api/provider/login/cancel","/api/provider/custom","/api/workspace/add","/api/workspace/select","/api/workspace/new-session","/api/workspace/remove","/api/session/select","/api/directory/capability","/api/directory/list","/api/directory/create","/api/directory/pick"]);function wr(r){return r==="/api/message"||r.startsWith("/api/provider/")||r.startsWith("/api/workspace/files/")||r.startsWith("/api/workspace/git/")||["/api/plugin-action","/api/plugin-interaction","/api/resume","/api/compact"].includes(r)}function L(r){return r.slice(0,8192).replace(/-----BEGIN [^-\n]+-----[\s\S]*?(?:-----END [^-\n]+-----|$)/g,"[redacted]").replace(/(["'`])[\s\S]*?\1/g,"[quoted]").replace(/(?:Bearer\s+\S+|(?:api[_-]?key|token|password|secret|authorization)\s*[=:]\s*\S+)/gi,"[redacted]").replace(/\b(?:sk-|sntrys_|eyJ)[A-Za-z0-9_.-]+/g,"[redacted]").replace(/[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}/g,"[email]").replace(/https?:\/\/[^\s)]+/gi,"[url]").replace(/(?:file:\/\/)?(?:\/[\w.~-]+){2,}(?::\d+(?::\d+)?)?/g,"[path]").replace(/[A-Za-z]:\\[^\s)]+/g,"[path]").replace(/(?:^|\s)(?:\.\.?[\\/]|~[\\/])[^\s)]+/g," [path]").replace(/\b(?:[\w.-]+[\\/])+[\w.-]+/g,"[path]").replace(/\{[^\n]*\}/g,"[object]").replace(/\b[A-Za-z0-9_-]{24,}\b/g,"[redacted]").slice(0,1024)}function z(r){let e={};for(let t of Rn){let i=r[t];t==="toolName"?typeof i=="string"&&(Me.has(i)||i==="custom")&&(e[t]=i):t==="failureKind"?An.has(i)&&(e[t]=i):t==="level"?(i==="warning"||i==="error")&&(e[t]=i):t==="diagnosticSource"?(i==="tool_execution_end"||i==="message_end")&&(e[t]=i):t==="errorCode"?typeof i=="string"&&/^(?:E[A-Z0-9]{1,20}|nonzero_exit|timeout|cancelled|blocked|invalid_arguments|tool_not_found|unknown)$/.test(i)&&(e[t]=i):t==="toolId"?typeof i=="string"&&/^[a-f0-9]{16}$/.test(i)&&(e[t]=i):t==="route"&&typeof i=="string"?e[t]=Mn.has(i.split("?")[0])?i.split("?")[0]:"[route]":t==="model"&&typeof i=="string"&&/^[\w.-]+\/[\w.-]+$/.test(i)?e[t]=i.split("/").map(L).join("/"):typeof i=="string"?e[t]=["requestId","operationId","errorId","session","buildId","toolId","toolCallId"].includes(t)&&/^[\w-]{1,80}$/.test(i)?i:L(i).slice(0,t==="errorSummary"?512:1024):(typeof i=="boolean"||typeof i=="number"&&Number.isFinite(i)||i===null)&&(e[t]=i)}return e}function tt(r){let e=r.replace(/\\/g,"/").split(/[?#]/)[0];return e.startsWith("node:")?e.slice(0,150):`app:///${(e.match(/(?:^|\/)((?:web\/src|extension|shared|dist|assets)\/[^\s:)]+)$/)?.[1]??e.split("/").pop()??"unknown").replace(/[^\w./-]/g,"_").slice(-200)}`}function le(r,e=0){let t=r instanceof Error?r:new Error(typeof r=="string"?r:"Non-Error rejection"),i=new Error(L(t.message));if(i.name=L(t.name).slice(0,100),t.stack){let n=t.stack.split(`
17
+ `,{mode:i,flag:"wx"}),await Pn(n,r)}finally{await Sn(n,{force:!0})}}async function fr(r,e,t){if(!t.getProvider(e))throw new Error("\u63D0\u4F9B\u65B9\u4E0D\u5B58\u5728");let{config:i}=await ur(r),n=i.providers[e],s=new Set(n?.models?.map(a=>a.id)??[]);return{providerId:e,baseUrl:n?.baseUrl,models:t.getModels(e).map(a=>({id:a.id,name:a.name,contextWindow:a.contextWindow,maxTokens:a.maxTokens,input:[...a.input],source:s.has(a.id)?"custom":"builtin",overridden:!!n?.modelOverrides?.[a.id]}))}}async function mr(r,e,t,i){if(!i.getProvider(e))throw new Error("\u63D0\u4F9B\u65B9\u4E0D\u5B58\u5728");let{config:n,existing:s}=await ur(r),a={...n.providers[e]??{}},l=[...a.models??[]],p={...a.modelOverrides??{}};if(t.action==="base_url"){if(t.baseUrl!==null&&!lr(t.baseUrl))throw new Error("API \u5730\u5740\u65E0\u6548");t.baseUrl===null?delete a.baseUrl:a.baseUrl=t.baseUrl}else if(t.action==="save"){if(!pr(t.model))throw new Error("\u6A21\u578B\u53C2\u6570\u65E0\u6548");let w={id:t.model.id.trim(),...t.model.name===void 0?{}:{name:t.model.name},...t.model.contextWindow===void 0?{}:{contextWindow:t.model.contextWindow},...t.model.maxTokens===void 0?{}:{maxTokens:t.model.maxTokens},...t.model.input===void 0?{}:{input:t.model.input}},m=t.originalId,c=m===void 0?-1:l.findIndex(u=>u.id===m);if(m===void 0&&(l.some(u=>u.id===w.id)||i.getModel(e,w.id)))throw new Error("\u6A21\u578B ID \u5DF2\u5B58\u5728");if(c>=0){if(w.id!==m&&(l.some(f=>f.id===w.id)||i.getModel(e,w.id)))throw new Error("\u6A21\u578B ID \u5DF2\u5B58\u5728");let u={...l[c],...w};for(let f of["name","contextWindow","maxTokens","input"])w[f]===void 0&&delete u[f];l[c]=u}else if(m!==void 0&&i.getModel(e,m)){if(w.id!==m)throw new Error("\u5185\u7F6E\u6A21\u578B ID \u4E0D\u53EF\u4FEE\u6539");let{id:u,...f}=w;p[m]={...p[m],...f};for(let g of["name","contextWindow","maxTokens","input"])w[g]===void 0&&delete p[m][g]}else{if(m!==void 0)throw new Error("\u6A21\u578B\u4E0D\u5B58\u5728");l.push(w)}}else{let w=l.findIndex(m=>m.id===t.id);if(w>=0)l.splice(w,1);else if(Object.hasOwn(p,t.id))delete p[t.id];else throw new Error("\u53EA\u80FD\u79FB\u9664\u81EA\u5B9A\u4E49\u6A21\u578B\u6216\u6062\u590D\u5DF2\u4FEE\u6539\u7684\u5185\u7F6E\u6A21\u578B")}l.length?a.models=l:delete a.models,Object.keys(p).length?a.modelOverrides=p:delete a.modelOverrides,Object.keys(a).length?n.providers[e]=a:delete n.providers[e],await Tn(r,n,s)}function gr(r){return/^(?:npm:|git:|https?:\/\/|ssh:\/\/|git@)/i.test(r.trim())}import{randomBytes as kr,createHash as On}from"node:crypto";import{fileURLToPath as Fn}from"node:url";var Ae="pi-webapp@0.1.19+e370826d8f2658b06bbc",J="e370826d8f2658b06bbc";var Me=new Set(["bash","powershell","read","write","edit","grep","find","ls"]),An=new Set(["cancelled","blocked","validation","not_found","permission","timeout","process_exit","unknown"]),hr={userInfo:!1,cookies:!1,httpHeaders:!1,httpBodies:[],urlQueryParams:!1,genAI:{inputs:!1,outputs:!1},graphQL:{document:!1,variables:!1},databaseQueryData:!1,queues:!1,stackFrameVariables:!1,frameContextLines:0},Rn=new Set(["stage","route","method","status","durationMs","connection","idle","model","thinkingLevel","messageCount","attachmentCount","session","requestId","operationId","errorId","repeats","dropped","componentStack","eventType","sequence","nodeVersion","piVersion","platform","browser","buildId","code","toolName","toolId","toolCallId","failureKind","errorCode","exitCode","timeoutMs","diagnosticSource","originalStackAvailable","errorSummary","summaryOmitted","summaryOmittedReason","level"]),Mn=new Set(["/api/workspace/git/control","/api/workspace/git/write","/api/workspace/git/status","/api/workspace/git/diff","/api/workspace/git/history","/api/workspace/git/commit-detail","/api/workspace/git/commit-diff","/api/workspace/files/list","/api/workspace/files/preview","/api/plugins","/api/plugin-action","/api/plugin-interaction","/api/resume","/api/update","/api/update/version","/api/provider/models","/api/provider/logout","/api/provider/login/active","/api/telemetry/config","/api/image","/api/attachment","/api/attachment/remove","/api/session","/api/providers","/api/models","/api/config","/api/workspaces","/api/commands","/api/events","/api/message","/api/abort","/api/compact","/api/new-session","/api/model","/api/thinking-level","/api/provider/login","/api/provider/login/respond","/api/provider/login/cancel","/api/provider/custom","/api/workspace/add","/api/workspace/select","/api/workspace/new-session","/api/workspace/remove","/api/session/select","/api/directory/capability","/api/directory/list","/api/directory/create","/api/directory/pick"]);function wr(r){return r==="/api/message"||r.startsWith("/api/provider/")||r.startsWith("/api/workspace/files/")||r.startsWith("/api/workspace/git/")||["/api/plugin-action","/api/plugin-interaction","/api/resume","/api/compact"].includes(r)}function L(r){return r.slice(0,8192).replace(/-----BEGIN [^-\n]+-----[\s\S]*?(?:-----END [^-\n]+-----|$)/g,"[redacted]").replace(/(["'`])[\s\S]*?\1/g,"[quoted]").replace(/(?:Bearer\s+\S+|(?:api[_-]?key|token|password|secret|authorization)\s*[=:]\s*\S+)/gi,"[redacted]").replace(/\b(?:sk-|sntrys_|eyJ)[A-Za-z0-9_.-]+/g,"[redacted]").replace(/[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}/g,"[email]").replace(/https?:\/\/[^\s)]+/gi,"[url]").replace(/(?:file:\/\/)?(?:\/[\w.~-]+){2,}(?::\d+(?::\d+)?)?/g,"[path]").replace(/[A-Za-z]:\\[^\s)]+/g,"[path]").replace(/(?:^|\s)(?:\.\.?[\\/]|~[\\/])[^\s)]+/g," [path]").replace(/\b(?:[\w.-]+[\\/])+[\w.-]+/g,"[path]").replace(/\{[^\n]*\}/g,"[object]").replace(/\b[A-Za-z0-9_-]{24,}\b/g,"[redacted]").slice(0,1024)}function z(r){let e={};for(let t of Rn){let i=r[t];t==="toolName"?typeof i=="string"&&(Me.has(i)||i==="custom")&&(e[t]=i):t==="failureKind"?An.has(i)&&(e[t]=i):t==="level"?(i==="warning"||i==="error")&&(e[t]=i):t==="diagnosticSource"?(i==="tool_execution_end"||i==="message_end")&&(e[t]=i):t==="errorCode"?typeof i=="string"&&/^(?:E[A-Z0-9]{1,20}|nonzero_exit|timeout|cancelled|blocked|invalid_arguments|tool_not_found|unknown)$/.test(i)&&(e[t]=i):t==="toolId"?typeof i=="string"&&/^[a-f0-9]{16}$/.test(i)&&(e[t]=i):t==="route"&&typeof i=="string"?e[t]=Mn.has(i.split("?")[0])?i.split("?")[0]:"[route]":t==="model"&&typeof i=="string"&&/^[\w.-]+\/[\w.-]+$/.test(i)?e[t]=i.split("/").map(L).join("/"):typeof i=="string"?e[t]=["requestId","operationId","errorId","session","buildId","toolId","toolCallId"].includes(t)&&/^[\w-]{1,80}$/.test(i)?i:L(i).slice(0,t==="errorSummary"?512:1024):(typeof i=="boolean"||typeof i=="number"&&Number.isFinite(i)||i===null)&&(e[t]=i)}return e}function tt(r){let e=r.replace(/\\/g,"/").split(/[?#]/)[0];return e.startsWith("node:")?e.slice(0,150):`app:///${(e.match(/(?:^|\/)((?:web\/src|extension|shared|dist|assets)\/[^\s:)]+)$/)?.[1]??e.split("/").pop()??"unknown").replace(/[^\w./-]/g,"_").slice(-200)}`}function le(r,e=0){let t=r instanceof Error?r:new Error(typeof r=="string"?r:"Non-Error rejection"),i=new Error(L(t.message));if(i.name=L(t.name).slice(0,100),t.stack){let n=t.stack.split(`
18
18
  `).slice(1,31).map(s=>{let a=s.match(/((?:file:\/\/|https?:\/\/|\/|[A-Za-z]:\\)[^\s()]+):(\d+):(\d+)(\)?)$/);return a?`${L(s.slice(0,a.index))}${a[1]}:${a[2]}:${a[3]}${a[4]}`:L(s)});i.stack=`${i.name}: ${i.message}
19
19
  ${n.join(`
20
20
  `)}`}else i.stack=void 0;return e<3&&t.cause!==void 0&&(i.cause=le(t.cause,e+1)),i}function ee(r,e){let t=new Error(e);return r instanceof Error&&(t.name=r.name,r.stack&&(t.stack=`${t.name}: ${e}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "pi-webapp",
3
- "version": "0.1.18",
3
+ "version": "0.1.19",
4
4
  "type": "module",
5
5
  "description": "A browser interface for Pi with live chat, workspaces, models, and attachments",
6
6
  "repository": {
@@ -15,7 +15,7 @@
15
15
  "pi-webapp": "./bin/pi-webapp.mjs"
16
16
  },
17
17
  "pi": {
18
- "image": "https://cdn.jsdelivr.net/npm/pi-webapp@0.1.18/assets/cover-webapp.png",
18
+ "image": "https://cdn.jsdelivr.net/npm/pi-webapp@0.1.19/assets/cover-webapp.png",
19
19
  "extensions": [
20
20
  "./dist/extension.js"
21
21
  ]
@@ -122,13 +122,13 @@
122
122
  "isDynamicEntry": true
123
123
  },
124
124
  "../../node_modules/@shikijs/langs/dist/graphql.mjs": {
125
- "file": "assets/graphql-CLuiQLXf.js",
125
+ "file": "assets/graphql-Bz9lYT3E.js",
126
126
  "name": "graphql",
127
127
  "src": "../../node_modules/@shikijs/langs/dist/graphql.mjs",
128
128
  "isDynamicEntry": true,
129
129
  "imports": [
130
130
  "_javascript-D_ijBMSX.js",
131
- "_app-grSRYeEE.js",
131
+ "_app-4px1DWHV.js",
132
132
  "index.html"
133
133
  ]
134
134
  },
@@ -161,12 +161,12 @@
161
161
  ]
162
162
  },
163
163
  "../../node_modules/@shikijs/langs/dist/http.mjs": {
164
- "file": "assets/http-JHeTzO2o.js",
164
+ "file": "assets/http-oJQxPuUz.js",
165
165
  "name": "http",
166
166
  "src": "../../node_modules/@shikijs/langs/dist/http.mjs",
167
167
  "isDynamicEntry": true,
168
168
  "imports": [
169
- "_app-grSRYeEE.js",
169
+ "_app-4px1DWHV.js",
170
170
  "../../node_modules/@shikijs/langs/dist/xml.mjs",
171
171
  "../../node_modules/@shikijs/langs/dist/graphql.mjs",
172
172
  "index.html",
@@ -275,7 +275,7 @@
275
275
  ]
276
276
  },
277
277
  "../../node_modules/@shikijs/langs/dist/php.mjs": {
278
- "file": "assets/php-DX4AdxY7.js",
278
+ "file": "assets/php-C_eP8QT0.js",
279
279
  "name": "php",
280
280
  "src": "../../node_modules/@shikijs/langs/dist/php.mjs",
281
281
  "isDynamicEntry": true,
@@ -284,7 +284,7 @@
284
284
  "../../node_modules/@shikijs/langs/dist/xml.mjs",
285
285
  "../../node_modules/@shikijs/langs/dist/sql.mjs",
286
286
  "_javascript-D_ijBMSX.js",
287
- "_app-grSRYeEE.js",
287
+ "_app-4px1DWHV.js",
288
288
  "../../node_modules/@shikijs/langs/dist/css.mjs",
289
289
  "../../node_modules/@shikijs/langs/dist/java.mjs",
290
290
  "index.html"
@@ -315,7 +315,7 @@
315
315
  "isDynamicEntry": true
316
316
  },
317
317
  "../../node_modules/@shikijs/langs/dist/rst.mjs": {
318
- "file": "assets/rst-DVdeQzC2.js",
318
+ "file": "assets/rst-D71MTZLw.js",
319
319
  "name": "rst",
320
320
  "src": "../../node_modules/@shikijs/langs/dist/rst.mjs",
321
321
  "isDynamicEntry": true,
@@ -324,7 +324,7 @@
324
324
  "../../node_modules/@shikijs/langs/dist/cpp.mjs",
325
325
  "../../node_modules/@shikijs/langs/dist/python.mjs",
326
326
  "_javascript-D_ijBMSX.js",
327
- "_app-grSRYeEE.js",
327
+ "_app-4px1DWHV.js",
328
328
  "../../node_modules/@shikijs/langs/dist/yaml.mjs",
329
329
  "../../node_modules/@shikijs/langs/dist/cmake.mjs",
330
330
  "../../node_modules/@shikijs/langs/dist/ruby.mjs",
@@ -340,7 +340,7 @@
340
340
  ]
341
341
  },
342
342
  "../../node_modules/@shikijs/langs/dist/ruby.mjs": {
343
- "file": "assets/ruby-CwqnXjsB.js",
343
+ "file": "assets/ruby-DVYYFOy_.js",
344
344
  "name": "ruby",
345
345
  "src": "../../node_modules/@shikijs/langs/dist/ruby.mjs",
346
346
  "isDynamicEntry": true,
@@ -353,7 +353,7 @@
353
353
  "../../node_modules/@shikijs/langs/dist/graphql.mjs",
354
354
  "../../node_modules/@shikijs/langs/dist/cpp.mjs",
355
355
  "../../node_modules/@shikijs/langs/dist/c.mjs",
356
- "_app-grSRYeEE.js",
356
+ "_app-4px1DWHV.js",
357
357
  "../../node_modules/@shikijs/langs/dist/lua.mjs",
358
358
  "../../node_modules/@shikijs/langs/dist/yaml.mjs",
359
359
  "../../node_modules/@shikijs/langs/dist/java.mjs",
@@ -388,13 +388,13 @@
388
388
  "isDynamicEntry": true
389
389
  },
390
390
  "../../node_modules/@shikijs/langs/dist/svelte.mjs": {
391
- "file": "assets/svelte-YsqFMt71.js",
391
+ "file": "assets/svelte-uHeUtAW3.js",
392
392
  "name": "svelte",
393
393
  "src": "../../node_modules/@shikijs/langs/dist/svelte.mjs",
394
394
  "isDynamicEntry": true,
395
395
  "imports": [
396
396
  "_javascript-D_ijBMSX.js",
397
- "_app-grSRYeEE.js",
397
+ "_app-4px1DWHV.js",
398
398
  "../../node_modules/@shikijs/langs/dist/css.mjs",
399
399
  "index.html"
400
400
  ]
@@ -430,14 +430,14 @@
430
430
  "isDynamicEntry": true
431
431
  },
432
432
  "../../node_modules/@shikijs/langs/dist/vue.mjs": {
433
- "file": "assets/vue-D6Eizkci.js",
433
+ "file": "assets/vue-C1Yqc5Ux.js",
434
434
  "name": "vue",
435
435
  "src": "../../node_modules/@shikijs/langs/dist/vue.mjs",
436
436
  "isDynamicEntry": true,
437
437
  "imports": [
438
438
  "../../node_modules/@shikijs/langs/dist/css.mjs",
439
439
  "_javascript-D_ijBMSX.js",
440
- "_app-grSRYeEE.js",
440
+ "_app-4px1DWHV.js",
441
441
  "../../node_modules/@shikijs/langs/dist/html.mjs",
442
442
  "_html-derivative-BaRuZAr6.js",
443
443
  "index.html"
@@ -695,17 +695,17 @@
695
695
  "src": "../../node_modules/katex/dist/fonts/KaTeX_Typewriter-Regular.woff2"
696
696
  },
697
697
  "WorkspaceTerminal.tsx": {
698
- "file": "assets/WorkspaceTerminal-BCq77BLP.js",
698
+ "file": "assets/WorkspaceTerminal-DF87HK0D.js",
699
699
  "name": "WorkspaceTerminal",
700
700
  "src": "WorkspaceTerminal.tsx",
701
701
  "isDynamicEntry": true,
702
702
  "imports": [
703
- "_app-grSRYeEE.js",
703
+ "_app-4px1DWHV.js",
704
704
  "index.html"
705
705
  ]
706
706
  },
707
- "_app-grSRYeEE.js": {
708
- "file": "assets/app-grSRYeEE.js",
707
+ "_app-4px1DWHV.js": {
708
+ "file": "assets/app-4px1DWHV.js",
709
709
  "name": "app",
710
710
  "isDynamicEntry": true,
711
711
  "imports": [
@@ -851,7 +851,7 @@
851
851
  "isEntry": true,
852
852
  "dynamicImports": [
853
853
  "telemetry-client.ts",
854
- "_app-grSRYeEE.js"
854
+ "_app-4px1DWHV.js"
855
855
  ]
856
856
  },
857
857
  "style.css": {
@@ -1,4 +1,4 @@
1
- var Zr=Object.defineProperty;var Qr=(e,t,i)=>t in e?Zr(e,t,{enumerable:!0,configurable:!0,writable:!0,value:i}):e[t]=i;var V=(e,t,i)=>Qr(e,typeof t!="symbol"?t+"":t,i);import{b as en,a as Lt,H as cs,r as Pt,j as lt,l as tt,B as tn}from"./app-grSRYeEE.js";import{d as sn}from"./app.js";(function(){try{var e=typeof window<"u"?window:typeof global<"u"?global:typeof globalThis<"u"?globalThis:typeof self<"u"?self:{},t=new e.Error().stack;t&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[t]="94e921c5-5f1b-46d8-97a2-921f61ed502e",e._sentryDebugIdIdentifier="sentry-dbid-94e921c5-5f1b-46d8-97a2-921f61ed502e")}catch{}})();/**
1
+ var Zr=Object.defineProperty;var Qr=(e,t,i)=>t in e?Zr(e,t,{enumerable:!0,configurable:!0,writable:!0,value:i}):e[t]=i;var V=(e,t,i)=>Qr(e,typeof t!="symbol"?t+"":t,i);import{b as en,a as Lt,H as cs,r as Pt,j as lt,l as tt,B as tn}from"./app-4px1DWHV.js";import{d as sn}from"./app.js";(function(){try{var e=typeof window<"u"?window:typeof global<"u"?global:typeof globalThis<"u"?globalThis:typeof self<"u"?self:{},t=new e.Error().stack;t&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[t]="94e921c5-5f1b-46d8-97a2-921f61ed502e",e._sentryDebugIdIdentifier="sentry-dbid-94e921c5-5f1b-46d8-97a2-921f61ed502e")}catch{}})();/**
2
2
  * Copyright (c) 2014-2024 The xterm.js authors. All rights reserved.
3
3
  * @license MIT
4
4
  *