@jetcrab/pi-desk 1.1.0 → 1.1.1
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/package.json +1 -1
- package/src/server/l4_foundation/model-settings/l4-model-settings-store.ts +3 -5
- package/src/server/l4_foundation/pi/l4-pi-session-catalog.ts +22 -63
- package/src/server/l4_foundation/pi/l4-pi-session-discovery.ts +139 -0
- package/src/server/l4_foundation/pi/l4-pi-session-history-catalog.ts +36 -7
- package/temp/build/pi-desk/release/.next/BUILD_ID +1 -1
- package/temp/build/pi-desk/release/.next/build-manifest.json +2 -2
- package/temp/build/pi-desk/release/.next/prerender-manifest.json +3 -3
- package/temp/build/pi-desk/release/.next/required-server-files.js +2 -2
- package/temp/build/pi-desk/release/.next/required-server-files.json +2 -2
- package/temp/build/pi-desk/release/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
- package/temp/build/pi-desk/release/.next/server/app/_global-error.html +1 -1
- package/temp/build/pi-desk/release/.next/server/app/_global-error.rsc +1 -1
- package/temp/build/pi-desk/release/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
- package/temp/build/pi-desk/release/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
- package/temp/build/pi-desk/release/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/temp/build/pi-desk/release/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/temp/build/pi-desk/release/.next/server/app/api/health/route.js +1 -1
- package/temp/build/pi-desk/release/.next/server/app/api/model-catalog/list/route.js +1 -1
- package/temp/build/pi-desk/release/.next/server/app/api/model-settings/get/route.js +1 -1
- package/temp/build/pi-desk/release/.next/server/app/api/model-settings/replace/route.js +1 -1
- package/temp/build/pi-desk/release/.next/server/app/api/project-model-default/get/route.js +1 -1
- package/temp/build/pi-desk/release/.next/server/app/api/project-model-default/replace/route.js +1 -1
- package/temp/build/pi-desk/release/.next/server/app/login/page_client-reference-manifest.js +1 -1
- package/temp/build/pi-desk/release/.next/server/app/page.js +1 -1
- package/temp/build/pi-desk/release/.next/server/app/page_client-reference-manifest.js +1 -1
- package/temp/build/pi-desk/release/.next/server/chunks/25406.js +6 -6
- package/temp/build/pi-desk/release/.next/server/chunks/3108.js +3 -3
- package/temp/build/pi-desk/release/.next/server/chunks/78262.js +3 -3
- package/temp/build/pi-desk/release/.next/server/middleware-build-manifest.js +1 -1
- package/temp/build/pi-desk/release/.next/server/pages/500.html +1 -1
- package/temp/build/pi-desk/release/.next/server/server-reference-manifest.json +1 -1
- package/temp/build/pi-desk/release/.next/static/chunks/app/{page-a659ca2be4d0f904.js → page-39b146293b6eb488.js} +1 -1
- package/temp/build/pi-desk/release/.next/trace-build +1 -1
- /package/temp/build/pi-desk/release/.next/static/{nyIG3F2lwWYn5hTFPNrHZ → STVrBHA3z9KPtvBE4WcE2}/_buildManifest.js +0 -0
- /package/temp/build/pi-desk/release/.next/static/{nyIG3F2lwWYn5hTFPNrHZ → STVrBHA3z9KPtvBE4WcE2}/_ssgManifest.js +0 -0
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
exports.id=3108,exports.ids=[3108],exports.modules={7499:(a,b,c)=>{"use strict";c.a(a,async(a,d)=>{try{c.d(b,{Us:()=>l,fL:()=>m,sC:()=>k});var e=c(71473),f=c(77598),g=c(73024),h=c(76760),i=a([e]);function j(){return(0,h.join)((0,e.M)(),"ignored-pi-directories.json")}function k(a){let b=(0,h.resolve)(a);return"win32"===process.platform?b.toLowerCase():b}function l(){let a=j();if(!(0,g.existsSync)(a))return[];try{return function(a){let b=new Set,c=[];for(let d of a){let a=(0,h.resolve)(d.trim()),e=k(a);b.has(e)||(b.add(e),c.push(a))}return c}(function(a){if(!Array.isArray(a)||a.some(a=>"string"!=typeof a||0===a.trim().length))throw Error("Ignored Pi directories must be a string array");return a}(JSON.parse((0,g.readFileSync)(a,"utf8"))))}catch(a){return console.warn("[Pi Desk][PiDirectoryIgnoreStore] 忽略目录配置无效,将按空列表处理",{errorName:a instanceof Error?a.name:"UnknownError"}),[]}}function m(a,b){let c=(0,h.resolve)(a),d=k(c),e=l();if(e.some(a=>k(a)===d)===b)return;let i=b?[...e,c]:e.filter(a=>k(a)!==d),m=j();(0,g.mkdirSync)((0,h.dirname)(m),{recursive:!0});let n=`${m}.${process.pid}.${(0,f.randomUUID)()}.tmp`;try{(0,g.writeFileSync)(n,`${JSON.stringify(i,null,2)}
|
|
2
|
-
`,"utf8"),(0,g.renameSync)(n,m)}finally{(0,g.existsSync)(n)&&(0,g.unlinkSync)(n)}console.info("[Pi Desk][PiDirectoryIgnoreStore] 已更新忽略目录",{cwd:c,ignored:b,ignoredCount:i.length})}e=(i.then?(await i)():i)[0],d()}catch(a){d(a)}})},8602:(a,b,c)=>{"use strict";function d(a,b=200){return Response.json({code:0,msg:"",data:a},{status:b})}function e(a,b,c){let d={code:a,msg:b,data:null,...c?{i18n:c}:{}};return Response.json(d,{status:a})}c.d(b,{e:()=>e,n:()=>d})},17862:()=>{},35166:()=>{},65209:(a,b,c)=>{"use strict";c.a(a,async(a,d)=>{try{c.d(b,{Ko:()=>
|
|
3
|
-
`,"utf8"),(0,g.renameSync)(c,b)}catch(a){console.warn("[Pi Desk][PiSessionCatalog] 写入项目目录持久缓存失败",{path:b,errorName:a instanceof Error?a.name:"UnknownError"})}finally{(0,g.existsSync)(c)&&(0,g.unlinkSync)(c)}}function p(){if(!globalThis.__piDeskPiSessionCatalogState){let a=function(){let a=n();if(!(0,g.existsSync)(a))return null;try{return
|
|
4
|
-
`,"utf8"),(0,g.renameSync)(c,b);let d=
|
|
2
|
+
`,"utf8"),(0,g.renameSync)(n,m)}finally{(0,g.existsSync)(n)&&(0,g.unlinkSync)(n)}console.info("[Pi Desk][PiDirectoryIgnoreStore] 已更新忽略目录",{cwd:c,ignored:b,ignoredCount:i.length})}e=(i.then?(await i)():i)[0],d()}catch(a){d(a)}})},8602:(a,b,c)=>{"use strict";function d(a,b=200){return Response.json({code:0,msg:"",data:a},{status:b})}function e(a,b,c){let d={code:a,msg:b,data:null,...c?{i18n:c}:{}};return Response.json(d,{status:a})}c.d(b,{e:()=>e,n:()=>d})},17862:()=>{},21916:(a,b,c)=>{"use strict";c.a(a,async(a,d)=>{try{c.d(b,{W:()=>k,p:()=>j});var e=c(51455),f=c(76760),g=c(75430),h=a([g]);async function i(a){let b;try{b=await (0,e.open)(a,"r");let c=[],d=Buffer.allocUnsafe(4096),f=0;for(;f<1048576;){let{bytesRead:a}=await b.read(d,0,d.length,null);f+=a;let e=0;for(let b=0;b<=a;b+=1){let f;if(b===a&&a>0)break;if(b<a&&10!==d[b])continue;c.push(Buffer.from(d.subarray(e,b)));let g=Buffer.concat(c).toString("utf8").trim();if(c.length=0,e=b+1,!g)continue;try{f=JSON.parse(g)}catch{continue}if(!f||"object"!=typeof f)return null;let h=f;return"session"===h.type&&"string"==typeof h.id?{id:h.id,cwd:"string"==typeof h.cwd?h.cwd:""}:null}if(0===a)return null;c.push(Buffer.from(d.subarray(e,a)))}console.warn("[Pi Desk][PiSessionDiscovery] 会话文件头超过读取上限",{path:a})}catch(b){"ENOENT"!==b.code&&console.warn("[Pi Desk][PiSessionDiscovery] 无法读取会话文件头",{path:a,message:b instanceof Error?b.message:String(b)})}finally{await b?.close()}return null}async function j(a,b,c){let d=async c=>{let d=await i(c);return d?.id===b&&""!==d.cwd&&(0,f.resolve)(d.cwd)===a},h=g.SessionManager.create(a).getSessionDir();if(c&&(0,f.dirname)((0,f.resolve)(c))===(0,f.resolve)(h)&&await d(c))return c;for(let a of(await (0,e.readdir)(h))){if(a!==`${b}.jsonl`&&!a.endsWith(`_${b}.jsonl`))continue;let c=(0,f.join)(h,a);if(await d(c))return c}let j=g.SessionManager.findById(a,b,h);return j&&await d(j)?j:null}async function k(){let a,b=(0,f.join)((0,g.getAgentDir)(),"sessions");try{a=await (0,e.readdir)(b,{withFileTypes:!0})}catch(a){if("ENOENT"===a.code)return[];throw a}let c=a.filter(a=>a.isDirectory()||a.isSymbolicLink()),d=new Map,h=0;async function j(){for(;h<c.length;){let a,g=(0,f.join)(b,c[h++].name);try{a=await (0,e.readdir)(g)}catch(a){console.warn("[Pi Desk][PiSessionDiscovery] 无法读取会话目录",{directory:g,message:a instanceof Error?a.message:String(a)});continue}for(let b of a){if(!b.endsWith(".jsonl"))continue;let a=(0,f.join)(g,b),c=await i(a);if(!c?.cwd)continue;let h=await (0,e.stat)(a).catch(()=>null);if(!h?.isFile())continue;let j=(0,f.resolve)(c.cwd),k=d.get(j)??{cwd:j,sessionCount:0,updatedAt:0};k.sessionCount+=1,k.updatedAt=Math.max(k.updatedAt,h.mtime.getTime()),d.set(j,k)}}}return await Promise.all(Array.from({length:Math.min(10,c.length)},()=>j())),[...d.values()].sort((a,b)=>b.updatedAt-a.updatedAt)}g=(h.then?(await h)():h)[0],d()}catch(a){d(a)}})},35166:()=>{},65209:(a,b,c)=>{"use strict";c.a(a,async(a,d)=>{try{c.d(b,{Ko:()=>x,Yk:()=>z,Z4:()=>v,fR:()=>A,jp:()=>w,pJ:()=>t,vg:()=>r,xt:()=>y});var e=c(71473),f=c(77598),g=c(73024),h=c(76760),i=c(59473),j=c(7499),k=c(91620),l=c(21916),m=a([e,j,k,l]);[e,j,k,l]=m.then?(await m)():m;let B=i.Ik({cwd:i.Yj().trim().min(1),sessionCount:i.ai().int().nonnegative(),updatedAt:i.ai().int().nonnegative()}).strict(),C=i.Ik({directories:i.YO(B)}).strict();function n(){return(0,h.join)((0,e.M)(),"pi-directories.json")}function o(a){let b=n(),c=`${b}.${process.pid}.${(0,f.randomUUID)()}.tmp`;try{(0,g.mkdirSync)((0,h.dirname)(b),{recursive:!0}),(0,g.writeFileSync)(c,`${JSON.stringify({directories:a},null,2)}
|
|
3
|
+
`,"utf8"),(0,g.renameSync)(c,b)}catch(a){console.warn("[Pi Desk][PiSessionCatalog] 写入项目目录持久缓存失败",{path:b,errorName:a instanceof Error?a.name:"UnknownError"})}finally{(0,g.existsSync)(c)&&(0,g.unlinkSync)(c)}}function p(){if(!globalThis.__piDeskPiSessionCatalogState){let a=function(){let a=n();if(!(0,g.existsSync)(a))return null;try{return C.parse(JSON.parse((0,g.readFileSync)(a,"utf8"))).directories}catch(b){return console.warn("[Pi Desk][PiSessionCatalog] 项目目录持久缓存无效",{path:a,errorName:b instanceof Error?b.name:"UnknownError"}),null}}();globalThis.__piDeskPiSessionCatalogState={directorySummaryCache:null,directorySummaryValue:a,directorySummaryNeedsRefresh:null!==a}}return globalThis.__piDeskPiSessionCatalogState}function q(a){return(0,h.resolve)(a)}async function r(a,b){return(0,l.p)(q(a),b,(0,k.Ph)(a,b))}function s(){let a=p();if(a.directorySummaryCache)return a.directorySummaryCache;let b=performance.now(),c=(0,l.W)();return a.directorySummaryCache=c,c.then(c=>{a.directorySummaryValue=c,a.directorySummaryNeedsRefresh=!1,o(c),console.info("[Pi Desk][PiSessionCatalog] 已更新 Pi 目录元数据缓存",{directoryCount:c.length,durationMs:Math.round(performance.now()-b)})},b=>{a.directorySummaryNeedsRefresh=!0,console.warn("[Pi Desk][PiSessionCatalog] 更新 Pi 目录元数据缓存失败",{errorName:b instanceof Error?b.name:"UnknownError"})}).finally(()=>{a.directorySummaryCache===c&&(a.directorySummaryCache=null)}),c}function t(a=!1){let b=p();return!a&&b.directorySummaryValue?(b.directorySummaryNeedsRefresh&&s(),Promise.resolve(b.directorySummaryValue)):s()}function u(){return new Set((0,j.Us)().map(j.sC))}async function v(a=!1){let b=await t(a),c=u();return b.filter(a=>!c.has((0,j.sC)(a.cwd)))}async function w(a=!1){let b=await t(a),c=u();return b.filter(a=>c.has((0,j.sC)(a.cwd)))}function x(a){let b=p();if(a||(b.directorySummaryNeedsRefresh=!0),a&&b.directorySummaryValue){let c=q(a),d=b.directorySummaryValue.find(a=>(0,j.sC)(a.cwd)===(0,j.sC)(c));d?(d.sessionCount+=1,d.updatedAt=Math.max(d.updatedAt,Date.now())):b.directorySummaryValue=[...b.directorySummaryValue,{cwd:c,sessionCount:1,updatedAt:Date.now()}].sort((a,b)=>b.updatedAt-a.updatedAt),o(b.directorySummaryValue)}(0,k.xt)(a)}function y(a){(0,k.xt)(a)}function z(a,b="",c=!1,d){return(0,k.Yk)(q(a),b,c,d)}function A(a){return(0,k.fR)({...a,cwd:q(a.cwd)})}d()}catch(a){d(a)}})},71473:(a,b,c)=>{"use strict";c.a(a,async(a,d)=>{try{c.d(b,{M:()=>j});var e=c(77598),f=c(73024),g=c(76760),h=c(75430),i=a([h]);function j(){let a=(0,h.getAgentDir)(),b=(0,g.join)(a,"pi-desk"),c=(0,g.join)(a,"pi-super");if((0,f.existsSync)(b)||!(0,f.existsSync)(c))return b;let d=(0,g.join)(a,`.pi-desk-migration-${(0,e.randomUUID)()}`);try{(0,f.cpSync)(c,d,{recursive:!0,errorOnExist:!0,force:!1}),(0,f.renameSync)(d,b),console.info("[Pi Desk] 已复制旧版应用数据到新目录")}finally{(0,f.rmSync)(d,{recursive:!0,force:!0})}return b}h=(i.then?(await i)():i)[0],d()}catch(a){d(a)}})},91620:(a,b,c)=>{"use strict";c.a(a,async(a,d)=>{try{c.d(b,{Ph:()=>Q,Yk:()=>N,fR:()=>P,xt:()=>R});var e=c(71473),f=c(77598),g=c(73024),h=c(51455),i=c(76760),j=c(80481),k=c(75430),l=c(59473),m=c(21916),n=a([e,k,m]);[e,k,m]=n.then?(await n)():n;let S=["title","user"],T=l.Ik({entryId:l.Yj().min(1),timestampMs:l.ai().int().nonnegative(),text:l.Yj()}).strict(),U=l.Ik({path:l.Yj().min(1),sessionId:l.Yj().min(1),cwd:l.Yj().min(1),name:l.Yj().nullable(),createdAt:l.ai().int().nonnegative(),updatedAt:l.ai().int().nonnegative(),messageCount:l.ai().int().nonnegative(),userMessageCount:l.ai().int().nonnegative(),firstMessage:l.Yj(),userMessages:l.YO(T),assistantMessages:l.YO(T),textBytes:l.ai().int().nonnegative()}).strict(),V=l.Ik({descriptor:l.Ik({path:l.Yj().min(1),size:l.ai().int().nonnegative(),modifiedAt:l.ai().int().nonnegative()}).strict(),record:U.nullable()}).strict(),W=l.Ik({cwd:l.Yj().min(1),files:l.YO(V)}).strict(),X=W.extend({version:l.eu(2)}),Y=l.Ik({version:l.eu(1),catalogs:l.YO(W)}).strict();function o(){return(0,i.join)((0,e.M)(),"pi-session-history")}function p(a){let b=(0,f.createHash)("sha256").update(a).digest("hex");return(0,i.join)(o(),`${b}.json`)}function q(a){return Array.from(a.values()).flatMap(a=>a.record?[a.record]:[]).sort((a,b)=>b.updatedAt-a.updatedAt)}function r(a){return a.reduce((a,b)=>a+b.textBytes,0)}function s(a){let b=(0,i.resolve)(a.cwd),c=new Map;for(let d of a.files){let a=null;if(d.record&&d.record.path===d.descriptor.path&&(0,i.resolve)(d.record.cwd)===b){let b=d.record.assistantMessages.filter(a=>a.text.trim()),c=d.record.assistantMessages.reduce((a,b)=>a+(b.text.trim()?0:Buffer.byteLength(b.text,"utf8")),0);a={...d.record,assistantMessages:b,textBytes:d.record.textBytes-c}}c.set(d.descriptor.path,{descriptor:d.descriptor,record:a})}let d=q(c),e=Date.now();return{cwd:b,files:c,sessions:d,textBytes:r(d),dirty:!1,validatedAt:0,lastAccessedAt:e}}function t(a){let b=p(a);if((0,g.existsSync)(b))try{let c=X.parse(JSON.parse((0,g.readFileSync)(b,"utf8")));if((0,i.resolve)(c.cwd)!==a)throw Error("缓存项目目录不匹配");let d=s(c);if(d.files.size>4096||d.textBytes>0x2000000)return;return d}catch(a){console.warn("[Pi Desk][PiSessionHistoryCatalog] 历史会话持久缓存无效",{path:b,errorName:a instanceof Error?a.name:"UnknownError"});return}}function u(a){let b=p(a.cwd),c=`${b}.${process.pid}.${(0,f.randomUUID)()}.tmp`;try{(0,g.mkdirSync)((0,i.dirname)(b),{recursive:!0}),(0,g.writeFileSync)(c,`${JSON.stringify({version:2,cwd:a.cwd,files:Array.from(a.files.values())})}
|
|
4
|
+
`,"utf8"),(0,g.renameSync)(c,b);let d=o(),e=(0,g.readdirSync)(d).filter(a=>/^[a-f0-9]{64}\.json$/u.test(a)).map(a=>{let b=(0,i.join)(d,a),c=(0,g.statSync)(b);return{path:b,size:c.size,modifiedAt:c.mtimeMs}}).sort((a,b)=>a.modifiedAt-b.modifiedAt),f=e.reduce((a,b)=>a+b.size,0);for(;e.length>1&&(e.length>8||f>0x4000000);){let a=e.shift();(0,g.unlinkSync)(a.path),f-=a.size}return!0}catch(a){return console.warn("[Pi Desk][PiSessionHistoryCatalog] 写入历史会话持久缓存失败",{path:b,errorName:a instanceof Error?a.name:"UnknownError"}),!1}finally{(0,g.existsSync)(c)&&(0,g.unlinkSync)(c)}}function v(){return globalThis.__piDeskPiSessionHistoryCatalogState||(!function(){let a=(0,i.join)((0,e.M)(),"pi-session-history.json");if((0,g.existsSync)(a))try{let b=Y.parse(JSON.parse((0,g.readFileSync)(a,"utf8")));for(let a of b.catalogs){let b=s(a);if(!(0,g.existsSync)(p(b.cwd))&&!u(b))return}(0,g.unlinkSync)(a),console.info("[Pi Desk][PiSessionHistoryCatalog] 已迁移历史会话缓存",{catalogCount:b.catalogs.length})}catch(b){console.warn("[Pi Desk][PiSessionHistoryCatalog] 迁移历史会话缓存失败",{path:a,errorName:b instanceof Error?b.name:"UnknownError"})}}(),globalThis.__piDeskPiSessionHistoryCatalogState={epochs:new Map,activeLoads:new Map,catalogs:new Map}),globalThis.__piDeskPiSessionHistoryCatalogState}function w(a){return"object"==typeof a&&null!==a&&!Array.isArray(a)}function x(a){if("number"==typeof a&&Number.isSafeInteger(a)&&a>=0)return a;if("string"!=typeof a)return null;let b=Date.parse(a);return Number.isSafeInteger(b)&&b>=0?b:null}function y(a){return a.trim().toLowerCase()}function z(a,b){let c=a.replace(/\s+/g," ").trim();return c.length<=b?c:`${c.slice(0,b-1).trimEnd()}…`}function A(a,b){var c;let d;if("session_info"===b.type&&(a.name="string"==typeof b.name&&b.name.trim()||null),"string"!=typeof b.id||0===b.id.length||"string"!=typeof b.type)return;let e=w(b.message)?b.message:null,f="message"===b.type&&e&&"string"==typeof e.role?e.role:null,g="string"==typeof b.parentId?b.parentId:null,h={id:b.id,parentId:g,type:b.type,timestampMs:(c=a.createdAt,d=x(b.timestamp),null!==d?d:w(b.message)?x(b.message.timestamp)??c:c),messageRole:f,messageText:"user"===f||"assistant"===f?function(a){if(!w(a))return"";let b=a.content;return"string"==typeof b?b:Array.isArray(b)?b.flatMap(a=>w(a)&&"text"===a.type&&"string"==typeof a.text?[a.text]:[]).join("\n"):""}(e):""};a.entriesById.set(h.id,h),a.leafId=h.id}function B(a,b,c){if(!c.sessionId||c.headerCwd&&(0,i.resolve)(c.headerCwd)!==b)return null;let d=[],e=new Set,f=c.leafId?c.entriesById.get(c.leafId):void 0;for(;f&&!e.has(f.id);)e.add(f.id),d.push(f),f=f.parentId?c.entriesById.get(f.parentId):void 0;d.reverse();let g=0,h=0,j="",k=c.createdAt,l=0,m=[],n=[];for(let a of d)if("message"===a.type){if(g+=1,k=Math.max(k,a.timestampMs),"user"===a.messageRole){h+=1,!j&&a.messageText.trim()&&(j=z(a.messageText,160)),l+=Buffer.byteLength(a.messageText,"utf8"),m.push({entryId:a.id,timestampMs:a.timestampMs,text:a.messageText});continue}"assistant"===a.messageRole&&a.messageText.trim()&&(l+=Buffer.byteLength(a.messageText,"utf8"),n.push({entryId:a.id,timestampMs:a.timestampMs,text:a.messageText}))}return{path:a.path,sessionId:c.sessionId,cwd:b,name:c.name,createdAt:c.createdAt,updatedAt:Math.max(k,a.modifiedAt),messageCount:g,userMessageCount:h,firstMessage:j,userMessages:m,assistantMessages:n,textBytes:l}}async function C(a,b){let c=(0,g.createReadStream)(a.path,{encoding:"utf8"}),d=(0,j.createInterface)({input:c,crlfDelay:1/0}),e=null,f=null;try{for await(let b of d){let c;if(b.trim()){if(f){f.push(b);continue}try{c=JSON.parse(b)}catch{continue}if(w(c)){if(!e){if("session"!==c.type||"string"!=typeof c.id)return null;let d=x(c.timestamp)??a.modifiedAt;e={sessionId:c.id,headerCwd:"string"==typeof c.cwd?c.cwd:"",createdAt:d,name:null,leafId:null,entriesById:new Map},("number"==typeof c.version?c.version:1)<k.CURRENT_SESSION_VERSION&&(f=[b]);continue}A(e,c)}}}}finally{d.close(),c.destroy()}if(f){var h=f;let c=(0,k.parseSessionEntries)(h.join("\n"));(0,k.migrateSessionEntries)(c);let d=c.find(a=>"session"===a.type);if(!d||"string"!=typeof d.id)return null;let e=x(d.timestamp)??a.modifiedAt,g={sessionId:d.id,headerCwd:"string"==typeof d.cwd?d.cwd:"",createdAt:e,name:null,leafId:null,entriesById:new Map};for(let a of c)"session"!==a.type&&A(g,a);return B(a,b,g)}return e?B(a,b,e):null}async function D(a,b,c){let d=Array(a.length),e=0;async function f(){for(;e<a.length;){let b=e;e+=1,d[b]=await c(a[b])}}return await Promise.all(Array.from({length:Math.min(b,a.length)},()=>f())),d}async function E(a){let b,c=k.SessionManager.create(a).getSessionDir();try{b=(await (0,h.readdir)(c)).filter(a=>a.endsWith(".jsonl")).sort()}catch{return[]}return(await D(b,10,async a=>{let b=(0,i.resolve)(c,a);try{let a=await (0,h.stat)(b);if(!a.isFile())return null;return{path:b,size:a.size,modifiedAt:a.mtime.getTime()}}catch{return null}})).filter(a=>null!==a)}function F(a,b){return a.path===b.path&&a.size===b.size&&a.modifiedAt===b.modifiedAt}async function G(a,b){let c=await E(a),d=await D(c,10,async c=>{let d=b?.files.get(c.path);if(d&&F(d.descriptor,c))return{entry:{descriptor:c,record:d.record},changed:!1};try{return{entry:{descriptor:c,record:await C(c,a)},changed:!0}}catch(b){return console.warn("[Pi Desk][PiSessionHistoryCatalog] 已忽略无法读取的 Pi 会话",{cwd:a,path:c.path,errorName:b instanceof Error?b.name:"UnknownError"}),{entry:null,changed:!0}}}),e=new Map;for(let a of d)a.entry&&e.set(a.entry.descriptor.path,a.entry);let f=q(e),g=Date.now();return{catalog:{cwd:a,files:e,sessions:f,textBytes:r(f),dirty:!1,validatedAt:g,lastAccessedAt:g},changed:void 0===b||b.files.size!==e.size||d.some(a=>a.changed)}}function H(a){let b=v();for(let[c,d]of b.catalogs)a-d.lastAccessedAt>9e5&&b.catalogs.delete(c)}function I(a,b){let c=v();if(a.files.size>4096||a.textBytes>0x2000000){if(c.catalogs.delete(a.cwd),b){let b=p(a.cwd);try{(0,g.existsSync)(b)&&(0,g.unlinkSync)(b)}catch(a){console.warn("[Pi Desk][PiSessionHistoryCatalog] 清理超限缓存失败",{path:b,errorName:a instanceof Error?a.name:"UnknownError"})}}console.warn("[Pi Desk][PiSessionHistoryCatalog] 历史会话超过内存缓存上限",{cwd:a.cwd,fileCount:a.files.size,textBytes:a.textBytes});return}c.catalogs.delete(a.cwd),c.catalogs.set(a.cwd,a);let d=[...c.catalogs.values()].reduce((a,b)=>a+b.textBytes,0);for(;c.catalogs.size>8||d>0x2000000;){let a=c.catalogs.entries().next().value;if(!a)break;c.catalogs.delete(a[0]),d-=a[1].textBytes}b&&u(a)}function J(a){return v().epochs.get(a)??0}function K(a){let b=J(a)+1;return v().epochs.set(a,b),b}async function L(a,b=!1){let c=(0,i.resolve)(a),d=v(),e=Date.now();H(e);let f=d.catalogs.get(c)??t(c),g=b?K(c):J(c);b&&f&&(f.dirty=!0);let h=d.activeLoads.get(c);if(h&&h.epoch===g)return h.promise;if(!b&&f&&!f.dirty&&e-f.validatedAt<2e3){let a;return f.lastAccessedAt=e,(a=v()).catalogs.delete(f.cwd),a.catalogs.set(f.cwd,f),f}let j=(async()=>{let a=await G(c,f),d=a.catalog;return J(c)===g&&I(d,a.changed),console.info("[Pi Desk][PiSessionHistoryCatalog] 已更新历史会话内存投影",{cwd:c,sessionCount:d.sessions.length,fileCount:d.files.size,textBytes:d.textBytes,forceRefresh:b}),d})();d.activeLoads.set(c,{epoch:g,promise:j});try{return await j}finally{d.activeLoads.get(c)?.promise===j&&d.activeLoads.delete(c)}}function M(a,b,c){let d=b.filter(a=>a.text.toLowerCase().includes(c));if(0===d.length)return null;let e=d.at(-1);return{scope:a,count:d.length,entryId:e.entryId,timestampMs:e.timestampMs,preview:function(a,b){let c=a.toLowerCase().indexOf(b);if(c<0)return"";let d=Math.max(0,c-16),e=c+b.length,f=Math.min(a.length,Math.max(d+120,e)),g=a.slice(d,f).replace(/\s+/g," ").trim();return`${d>0?"…":""}${g}${f<a.length?"…":""}`}(e.text,c)}}async function N(a,b="",c=!1,d=S){let e=await L(a,c),f=y(b),g=new Set(d);return e.sessions.flatMap(a=>{let b=function(a,b,c){if(!b)return{sessionId:a.sessionId,cwd:a.cwd,name:a.name,createdAt:a.createdAt,updatedAt:a.updatedAt,messageCount:a.messageCount,userMessageCount:a.userMessageCount,firstMessage:a.firstMessage,matches:null};let d=[];if(c.has("title")&&a.name?.toLowerCase().includes(b)&&d.push({scope:"title",count:1,entryId:null,timestampMs:null,preview:z(a.name,160)}),c.has("user")){let c=M("user",a.userMessages,b);c&&d.push(c)}if(c.has("assistant")){let c=M("assistant",a.assistantMessages,b);c&&d.push(c)}return(c.has("sessionId")&&a.sessionId.toLowerCase().includes(b)&&d.push({scope:"sessionId",count:1,entryId:null,timestampMs:null,preview:a.sessionId}),0===d.length)?null:{sessionId:a.sessionId,cwd:a.cwd,name:a.name,createdAt:a.createdAt,updatedAt:a.updatedAt,messageCount:a.messageCount,userMessageCount:a.userMessageCount,firstMessage:a.firstMessage,matches:d}}(a,f,g);return b?[b]:[]})}async function O(a,b){let c=(0,i.resolve)(a);H(Date.now());let d=v().catalogs.get(c)??t(c),e=d?.sessions.find(a=>a.sessionId===b),f=await (0,m.p)(c,b,e?.path);if(!f)return null;let g=await (0,h.stat)(f).catch(()=>null);if(!g?.isFile())return null;let j={path:f,size:g.size,modifiedAt:g.mtime.getTime()},k=d?.files.get(f);if(d&&k&&F(k.descriptor,j))return d.lastAccessedAt=Date.now(),I(d,!1),k.record;let l=await C(j,c),n=d??s({cwd:c,files:[]});return n.files.set(f,{descriptor:j,record:l}),n.sessions=q(n.files),n.textBytes=r(n.sessions),n.dirty=!0,n.lastAccessedAt=Date.now(),I(n,!1),l}async function P(a){let b=await O(a.cwd,a.sessionId);if(!b)return null;let c=y(a.query),d=b.userMessages.filter(a=>!c||a.text.toLowerCase().includes(c)).reverse(),e=(a.page.index-1)*a.page.size;return{page:{index:a.page.index,size:a.page.size,total:d.length},messages:d.slice(e,e+a.page.size).map(({entryId:a,timestampMs:b,text:c})=>({entryId:a,timestampMs:b,text:c}))}}function Q(a,b){let c=v().catalogs.get((0,i.resolve)(a));if(c&&!c.dirty)return c.sessions.find(a=>a.sessionId===b)?.path}function R(a){let b=v();if(a){let c=(0,i.resolve)(a);K(c);let d=b.catalogs.get(c);d&&(d.dirty=!0);return}for(let a of new Set([...b.catalogs.keys(),...b.activeLoads.keys()])){K(a);let c=b.catalogs.get(a);c&&(c.dirty=!0)}}d()}catch(a){d(a)}})}};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
"use strict";exports.id=78262,exports.ids=[78262],exports.modules={6816:(a,b,c)=>{c.a(a,async(a,d)=>{try{c.d(b,{n:()=>w});var e=c(71473),f=c(77598),g=c(73024),h=c(76760),i=c(75430),j=c(28802),k=a([e,i,j]);[e,i,j]=k.then?(await k)():k;let x=new Set(["openrouter","vercel-ai-gateway","ai-router","cloudflare-ai-gateway","opencode","opencode-go"]),y=null;function l(a){return"object"==typeof a&&null!==a&&!Array.isArray(a)}function m(){return(0,h.join)((0,e.M)(),"model-catalog.json")}function n(a){return a.trim().toLowerCase().replace(/[\s_]+/gu,"-").replace(/-+/gu,"-")}function o(a){let b=n(a).replace(/:(free|online)$/u,""),c=b.split("/").filter(Boolean);return c.length>1?c.at(-1):b}function p(a){return`${a.provider}\u0000${a.modelId}`}function q(a,b){let c=a[b];return"number"==typeof c&&Number.isFinite(c)&&c>=0?c:null}function r(a,b){if(x.has(a))return!1;let c=n(a),d=n(b);if(b.includes("/"))return d.split("/")[0]===c;let e=o(b);return(e.match(/^(gpt|chatgpt|o1|o3|o4)-/u)?["openai"]:e.startsWith("claude-")?["anthropic"]:e.match(/^(gemini|gemma)-/u)?["google","google-vertex"]:e.startsWith("deepseek-")?["deepseek"]:e.startsWith("glm-")?["zai","zai-coding-cn"]:e.match(/^(kimi|moonshot)-/u)?["moonshotai","moonshotai-cn"]:e.match(/^(mistral|codestral|pixtral)-/u)?["mistral"]:[]).includes(c)}async function s(a){let b=new AbortController,c=setTimeout(()=>b.abort(),2e4);try{let c=await fetch("https://models.dev/api.json",{headers:a?.etag?{"If-None-Match":a.etag}:void 0,signal:b.signal});if(304===c.status){let b=a?.models.flatMap(a=>a.sources.filter(a=>"models-dev"===a.origin));if(!b?.length)throw Error("models.dev 返回 304,但本地没有可用缓存");return{etag:a?.etag??null,unchanged:!0,sources:b}}if(!c.ok)throw Error(`models.dev 请求失败:HTTP ${c.status}`);let d=await c.json();if(!l(d))throw Error("models.dev 返回格式无效");let e=[];for(let[a,b]of Object.entries(d)){if(!l(b)||!l(b.models))continue;let c="string"==typeof b.name&&b.name.trim()?b.name:a;for(let[d,f]of Object.entries(b.models)){if(!l(f))continue;let b="string"==typeof f.id&&f.id.trim()?f.id:d,g=function(a,b,c,d){let e=l(d.limit)?d.limit:{},f=q(e,"context"),g=q(e,"output");if(!f||!g)return null;let h=l(d.modalities)&&Array.isArray(d.modalities.input)?d.modalities.input:["text"],i=[...new Set(h.filter(a=>"text"===a||"image"===a))];return{origin:"models-dev",modelName:"string"==typeof d.name&&d.name.trim()?d.name:c,provider:a,providerName:b,modelId:c,official:r(a,c),defaults:{reasoning:!0===d.reasoning,thinkingLevels:function(a){if(!0!==a.reasoning)return[{level:"off",providerValue:null}];let b=(Array.isArray(a.reasoning_options)?a.reasoning_options:[]).find(a=>l(a)&&"effort"===a.type&&Array.isArray(a.values));if(l(b)&&Array.isArray(b.values)){let a=[];for(let c of b.values){if("string"!=typeof c)continue;let b="none"===c?"off":c;("off"===b||"minimal"===b||"low"===b||"medium"===b||"high"===b||"xhigh"===b||"max"===b)&&a.push({level:b,providerValue:c})}if(a.length>0)return a}return[{level:"high",providerValue:null}]}(d),input:i.length>0?i:["text"],contextWindow:Math.trunc(f),maxTokens:Math.trunc(g),cost:function(a){if(!l(a))return null;let b=q(a,"input"),c=q(a,"output");return null===b||null===c?null:{input:b,output:c,cacheRead:q(a,"cache_read")??0,cacheWrite:q(a,"cache_write")??0}}(d.cost)}}}(a,c,b,f);g&&e.push(g)}}if(0===e.length)throw Error("models.dev 没有返回可用模型");return{etag:c.headers.get("etag"),unchanged:!1,sources:e}}finally{clearTimeout(c)}}async function t(){let a=await i.ModelRuntime.create({allowModelNetwork:!1}),b=new AbortController,c=setTimeout(()=>b.abort(),2e4),d=!1;try{let c=await a.refresh({allowNetwork:!0,force:!0,signal:b.signal});(d=c.aborted||c.errors.size>0)&&console.warn("[Pi Desk][ModelCatalog] Pi 模型目录部分刷新失败",{aborted:c.aborted,providers:[...c.errors.keys()]})}catch(a){d=!0,console.warn("[Pi Desk][ModelCatalog] Pi 模型目录刷新失败",{errorName:a instanceof Error?a.name:"UnknownError"})}finally{clearTimeout(c)}return{sources:a.getModels().map(b=>{var c;return c=a.getProvider(b.provider)?.name??b.provider,{origin:"pi",modelName:b.name,provider:b.provider,providerName:c,modelId:b.id,official:r(b.provider,b.id),defaults:{reasoning:b.reasoning,thinkingLevels:(0,j.getSupportedThinkingLevels)(b).map(a=>({level:a,providerValue:"string"==typeof b.thinkingLevelMap?.[a]?b.thinkingLevelMap[a]:null})),input:[...b.input],contextWindow:b.contextWindow,maxTokens:b.maxTokens,cost:{input:b.cost.input,output:b.cost.output,cacheRead:b.cost.cacheRead,cacheWrite:b.cost.cacheWrite}}}}),failed:d}}async function u(a){let b=a?.models.flatMap(a=>a.sources.filter(a=>"models-dev"===a.origin))??[],c=a?.models.flatMap(a=>a.sources.filter(a=>"pi"===a.origin))??[],[d,e]=await Promise.allSettled([s(a),t()]),i="fulfilled"===d.status,j="fulfilled"===e.status&&!e.value.failed,k=i?d.value.sources:b,l="fulfilled"===e.status?e.value.sources:c;if(!k.length&&!l.length){let a="rejected"===d.status?d.reason:"没有可用缓存";throw Error(`模型参考目录没有可用数据:${a instanceof Error?a.message:String(a)}`)}"rejected"===d.status&&console.warn("[Pi Desk][ModelCatalog] models.dev 刷新失败,继续使用可用目录",{errorName:d.reason instanceof Error?d.reason.name:"UnknownError"});let n=function(a){let b=new Map;for(let d of a){var c;let a=(c=d.modelId,o(c));if(!a)continue;let e=b.get(a),f=e?.name??d.modelName,g=d.official?d.modelName:f;if(!e){b.set(a,{referenceId:a,name:g,sources:[d]});continue}let h=e.sources.findIndex(a=>p(a)===p(d));h>=0?"pi"===d.origin&&(e.sources[h]=d):e.sources.push(d),d.official&&(e.name=g)}return[...b.values()].map(a=>({...a,name:a.sources.find(a=>a.official)?.modelName??a.sources[0]?.modelName??a.name,sources:a.sources.sort((a,b)=>Number(b.official)-Number(a.official)||a.provider.localeCompare(b.provider))})).sort((a,b)=>a.name.localeCompare(b.name))}([...k,...l]),q=!a||JSON.stringify(n)!==JSON.stringify(a.models),r={etag:"fulfilled"===d.status?d.value.etag:a?.etag??null,updatedAt:q?Date.now():a?.updatedAt??Date.now(),models:n},u=m();(0,g.mkdirSync)((0,h.dirname)(u),{recursive:!0});let v=`${u}.${process.pid}.${(0,f.randomUUID)()}.tmp`;try{(0,g.writeFileSync)(v,`${JSON.stringify(r)}
|
|
2
|
-
`,"utf8"),(0,g.renameSync)(v,u)}finally{(0,g.existsSync)(v)&&(0,g.unlinkSync)(v)}let w=Number(i)+Number(j);return{cache:r,result:0===w?"cached":1===w?"partial":q?"updated":"unchanged"}}async function v(a){return y||(y=u(a).finally(()=>{y=null}))}async function w(a){var b;let c,d,e,f,h,i=function(){let a=m();if(!(0,g.existsSync)(a))return null;try{let b=JSON.parse((0,g.readFileSync)(a,"utf8"));if(!l(b)||"number"!=typeof b.updatedAt||!Array.isArray(b.models))return null;let c=[];for(let a of b.models){if(!l(a)||!Array.isArray(a.sources))continue;let b=[];for(let c of a.sources){if(!l(c)||"models-dev"!==c.origin&&"pi"!==c.origin||"string"!=typeof c.modelName)continue;let a=function(a){if("models-dev"!==a.origin&&"pi"!==a.origin||"string"!=typeof a.modelName||"string"!=typeof a.provider||"string"!=typeof a.providerName||"string"!=typeof a.modelId||"boolean"!=typeof a.official||!l(a.defaults))return null;let b=a.defaults;if("boolean"!=typeof b.reasoning||!Array.isArray(b.thinkingLevels)||!Array.isArray(b.input)||"number"!=typeof b.contextWindow||"number"!=typeof b.maxTokens)return null;let c=[];for(let a of b.thinkingLevels){if(!l(a)||"string"!=typeof a.level||"off"!==a.level&&"minimal"!==a.level&&"low"!==a.level&&"medium"!==a.level&&"high"!==a.level&&"xhigh"!==a.level&&"max"!==a.level||null!==a.providerValue&&"string"!=typeof a.providerValue)return null;c.push({level:a.level,providerValue:a.providerValue})}let d=b.input.filter(a=>"text"===a||"image"===a);if(0===c.length||0===d.length)return null;let e=null;if(null!==b.cost){if(!l(b.cost))return null;let a=q(b.cost,"input"),c=q(b.cost,"output"),d=q(b.cost,"cacheRead"),f=q(b.cost,"cacheWrite");if(null===a||null===c||null===d||null===f)return null;e={input:a,output:c,cacheRead:d,cacheWrite:f}}return{origin:a.origin,modelName:a.modelName,provider:a.provider,providerName:a.providerName,modelId:a.modelId,official:a.official,defaults:{reasoning:b.reasoning,thinkingLevels:c,input:d,contextWindow:Math.trunc(b.contextWindow),maxTokens:Math.trunc(b.maxTokens),cost:e}}}(c);a&&b.push(a)}"string"==typeof a.referenceId&&"string"==typeof a.name&&b.length>0&&c.push({referenceId:a.referenceId,name:a.name,sources:b})}if(0===c.length)return null;return{etag:"string"==typeof b.etag?b.etag:null,updatedAt:b.updatedAt,models:c}}catch(a){return console.warn("[Pi Desk][ModelCatalog] 模型参考缓存无效",{errorName:a instanceof Error?a.name:"UnknownError"}),null}}(),j="not-requested";if(a.refresh||!i){let a=await v(i);i=a.cache,j=a.result}let k=(b=i,c=n(a.query),e=(d=b.models.map(a=>{if(!c)return{model:a,exact:!1,similar:!0};let b=[n(a.referenceId),...a.sources.flatMap(a=>[n(a.modelId),o(a.modelId)])],d=[...b,n(a.name),...a.sources.map(a=>n(a.providerName))],e=b.some(a=>a===c),f=e||d.some(a=>a.includes(c));return{model:a,exact:e,similar:f}}).filter(a=>a.similar)).filter(a=>a.exact).length,d.sort((a,b)=>Number(b.exact)-Number(a.exact)||a.model.name.localeCompare(b.model.name)),f=(a.page.index-1)*a.page.size,h=d.slice(f,f+a.page.size).map(({model:a,exact:b})=>({referenceId:a.referenceId,name:a.name,match:c?b&&1===e?"exact":"similar":null,sources:a.sources.map(({origin:a,modelName:b,...c})=>c)})),{total:d.length,models:h});return{updatedAt:i.updatedAt,refreshResult:j,page:{index:a.page.index,size:a.page.size,total:k.total},models:k.models}}d()}catch(a){d(a)}})},78262:(a,b,c)=>{c.a(a,async(a,d)=>{try{c.d(b,{ZJ:()=>f.ZJ,aY:()=>f.aY,n7:()=>f.n7,nZ:()=>e.n,oj:()=>f.oj,ur:()=>f.ur});var e=c(6816),f=c(82526),g=a([e,f]);[e,f]=g.then?(await g)():g,d()}catch(a){d(a)}})},82526:(a,b,c)=>{c.a(a,async(a,d)=>{try{c.d(b,{ZJ:()=>
|
|
3
|
-
`,"utf8"),(0,f.renameSync)(c,a)}finally{(0,f.existsSync)(c)&&(0,f.unlinkSync)(c)}}function
|
|
4
|
-
`,"utf8");try{let a=await i.ModelRuntime.create({modelsPath:c,modelsStorePath:d,allowModelNetwork:!1}),b=a.getError();if(b)throw Error(`模型配置校验失败:${b}`);return a}finally{(0,f.existsSync)(c)&&(0,f.unlinkSync)(c),(0,f.existsSync)(d)&&(0,f.unlinkSync)(d)}}function D(a,b){return(0,k.gX)(a,b,r(q()))}async function E(a,b){let c=await a.listCredentials(),d=new Set(c.filter(a=>"oauth"===a.type).map(a=>a.providerId));return[...new Set([...d,...b.map(a=>a.provider)])].map(b=>{let c=a.getProvider(b);return{provider:b,name:c?.name??b,loggedIn:d.has(b),subscription:c?.auth.oauth?.isSubscription===!0,models:a.getModels(b).map(a=>v({id:a.id,cost:a.cost},a,void 0))}})}async function F(a,b,c){let d=await c.listCredentials(),e=m(a.providers)?a.providers:{},f=m(b.providers)?b.providers:{},g=["baseUrl","api","apiKey","headers","authHeader"];for(let a of d){if("oauth"!==a.type)continue;let b=e[a.providerId],c=f[a.providerId],d=m(b)?b:{},i=m(c)?c:{};if(g.some(a=>void 0!==i[a]&&!(0,h.isDeepStrictEqual)(d[a],i[a])))throw Error(`服务 ${a.providerId} 已保存账号登录,请为自定义 API 使用独立服务 ID,或先退出账号`)}}async function G(a,b){let c=(0,k.Tp)(b),d=new Set([...(0,k.Tp)(a)].filter(a=>!c.has(a)));if(d.size){for(let a of z(b))if(d.has((0,k.It)(a.provider,a.modelId)))throw Error(`模型 ${a.provider}/${a.modelId} 仍被常用组合引用,请先移除对应组合`);for(let a of new Set((await i.SessionManager.listAll()).map(a=>a.cwd).filter(Boolean))){let b=r((0,g.join)(a,i.CONFIG_DIR_NAME,"settings.json"));if("string"==typeof b.defaultProvider&&"string"==typeof b.defaultModel&&d.has((0,k.It)(b.defaultProvider,b.defaultModel)))throw Error(`项目“${a}”仍将 ${b.defaultProvider}/${b.defaultModel} 设为默认模型,请先在“项目默认”中调整`)}}}async function H(){let a=performance.now(),b=r(q()),c=await i.ModelRuntime.create({allowModelNetwork:!1}),d=await i.ModelRuntime.create({modelsPath:null,allowModelNetwork:!1}),e=(0,k.u1)(b),f=performance.now(),g={providers:w(b,c),presets:z(b),models:await y(c,void 0,b),nativeConfig:b,accountModels:e,accounts:await E(d,e)},h=performance.now()-a;return h>500&&console.warn("[Pi Desk][ModelSettings] 读取模型配置耗时较长",{totalMs:Math.round(h),runtimeMs:Math.round(f-a),projectionMs:Math.round(performance.now()-f),providers:g.providers.length,models:g.models.length}),g}async function I(a){await t(async()=>{let b=q();try{let c,d;try{c=r(b)}catch(b){if(void 0===a.nativeConfig)throw b;c={}}if(void 0!==a.nativeConfig)d=a.nativeConfig;else{let b=await i.ModelRuntime.create({allowModelNetwork:!1}),e=b.getError();if(e)throw Error(`当前模型配置不可用,请先通过原生配置修正:${e}`);let f=void 0===a.accountModels?b:await i.ModelRuntime.create({modelsPath:null,allowModelNetwork:!1});d=function(a,b,c,d){if(void 0!==b.nativeConfig)return b.nativeConfig;let e={...a};if(b.providers){let d=m(a.providers)?a.providers:{},f=new Map(w(a,c).map(a=>[a.provider,a]));e.providers=Object.fromEntries([...Object.entries(d).filter(([a])=>!f.has(a)),...b.providers.map(a=>[a.provider,function(a,b,c){let d=m(a)?{...a}:{};for(let a of["name","baseUrl","api","apiKey","authHeader"])c&&b[a]===c[a]||A(d,a,b[a]);c&&(0,h.isDeepStrictEqual)(b.headers,c.headers)||B(d,"headers",b.headers);let e=Array.isArray(d.models)?d.models.filter(m):[],f=new Map(e.filter(a=>"string"==typeof a.id).map(a=>[a.id,a])),g=new Map(c?.models.map(a=>[a.modelId,a])),i=m(d.modelOverrides)?{...d.modelOverrides}:void 0,j=b.models.map(a=>{let b=i?.[a.modelId],c=m(b)?{...b}:void 0,d=function(a,b,c,d){let e=m(a)?{...a}:{};e.id=b.modelId;let f=a=>d&&Object.hasOwn(d,a)?d:e,g=a=>!c||!(0,h.isDeepStrictEqual)(b[a],c[a]);for(let a of["name","api","baseUrl"])g(a)&&A(f(a),a,b[a]);for(let a of["reasoning","input","contextWindow","maxTokens"])g(a)&&(f(a)[a]=b[a]);if(g("thinkingLevels")&&function(a,b,c){let d=m(a.thinkingLevelMap)?{...a.thinkingLevelMap}:{},e=new Map(c?.thinkingLevels.map(a=>[a.level,a.providerValue])),f=new Map(b.thinkingLevels.map(a=>[a.level,a.providerValue]));for(let a of N)if(!c||e.has(a)!==f.has(a)||e.get(a)!==f.get(a))if(f.has(a)){let b=f.get(a);null===b?delete d[a]:d[a]=b}else("xhigh"!==a&&"max"!==a||e.has(a))&&(d[a]=null);B(a,"thinkingLevelMap",d)}(f("thinkingLevelMap"),b,c),g("cost")){let a=f("cost");if(b.cost){let d=m(a.cost)?{...a.cost}:{...b.cost};for(let a of["input","output","cacheRead","cacheWrite"])c&&b.cost[a]===c.cost?.[a]||(d[a]=b.cost[a]);a.cost=d}else delete e.cost,d&&delete d.cost}if(g("headers")&&function(a,b,c,d){let e=p(a.headers),f=p(b?.headers);for(let a of new Set([...Object.keys(d),...Object.keys(c)]))if(c[a]!==d[a]){if(!Object.hasOwn(c,a)){delete e[a],delete f[a];continue}(Object.hasOwn(e,a)||!Object.hasOwn(f,a)?e:f)[a]=c[a]}B(a,"headers",e),b&&B(b,"headers",f)}(e,d,b.headers,c?.headers??{}),g("compat")){let a=f("compat"),d=m(a.compat)?{...a.compat}:{};for(let a of["supportsDeveloperRole","thinkingFormat","requiresReasoningContentOnAssistantMessages"]){let e=b.compat?.[a]??null;c&&e===(c.compat?.[a]??null)||A(d,a,e)}B(a,"compat",d)}return e}(f.get(a.modelId),a,g.get(a.modelId),c);return i&&c&&(i[a.modelId]=c),d});return(void 0!==d.models||j.length>0)&&(d.models=j),i&&(d.modelOverrides=i),d}(d[a.provider],a,f.get(a.provider))])])}return void 0!==b.accountModels&&(0,k.OM)(a,e,b.accountModels,d),b.presets&&!(0,h.isDeepStrictEqual)(b.presets,z(a))&&(e.modelPresets=b.presets),e}(c,a,b,f)}let e=await C(d),f=await y(e,void 0,d);await F(c,d,e),await G(c,d),function(a,b,c=[]){let d=new Set(c.map(a=>`${u(a.provider,a.modelId)}\u0000${a.thinkingLevel}`)),e=new Map(b.map(a=>[u(a.provider,a.modelId),a])),f=new Set;for(let b of a){let a=`${u(b.provider,b.modelId)}\u0000${b.thinkingLevel}`;if(f.has(a))throw Error("模型预设存在重复组合");f.add(a);let c=e.get(u(b.provider,b.modelId));if((!c||!c.thinkingLevels.includes(b.thinkingLevel))&&!d.has(a))throw Error(`模型预设 ${b.provider}/${b.modelId}:${b.thinkingLevel} 不可用`)}}(z(d),f,z(c)),s(b,d)}catch(a){throw console.error("[Pi Desk][ModelSettings] 模型配置保存失败",{message:a instanceof Error?a.message:String(a)}),Error(`模型配置保存失败:${a instanceof Error?a.message:String(a)}`,{cause:a})}})}function J(a){let b=(0,g.resolve)(a);if(!(0,g.isAbsolute)(b)||!(0,f.existsSync)(b)||!(0,f.statSync)(b).isDirectory())throw Error("项目目录不存在");return b}function K(a){return(0,g.join)(J(a),i.CONFIG_DIR_NAME,"settings.json")}async function L(a){let b=J(a),c=K(b),d=r(c),e=await i.ModelRuntime.create({allowModelNetwork:!1}),f=await y(e,b);if(!["defaultProvider","defaultModel","defaultThinkingLevel"].some(a=>Object.hasOwn(d,a)))return{cwd:b,default:null,models:f};let g=i.SettingsManager.create(b,(0,i.getAgentDir)()),h=g.getDefaultProvider(),j=g.getDefaultModel(),k=g.getDefaultThinkingLevel(),l=f.find(a=>a.provider===h&&a.modelId===j),m=h&&j&&k&&l?.thinkingLevels.includes(k)?{provider:h,modelId:j,thinkingLevel:k}:null;return{cwd:b,default:m,models:f}}async function M(a,b){await t(async()=>{let c=J(a);if(b){let a=await i.ModelRuntime.create({allowModelNetwork:!1}),d=(await y(a,c)).find(a=>a.provider===b.provider&&a.modelId===b.modelId);if(!d||!d.thinkingLevels.includes(b.thinkingLevel))throw Error("项目默认模型或思考等级不可用")}let d=K(c),e=r(d);b?(e.defaultProvider=b.provider,e.defaultModel=b.modelId,e.defaultThinkingLevel=b.thinkingLevel):(delete e.defaultProvider,delete e.defaultModel,delete e.defaultThinkingLevel),s(d,e)})}d()}catch(a){d(a)}})},97219:(a,b,c)=>{c.d(b,{It:()=>g,OM:()=>k,Tp:()=>i,gX:()=>j,u1:()=>h});var d=c(57975);let e=["input","output","cacheRead","cacheWrite"];function f(a){return"object"!=typeof a||null===a||Array.isArray(a)?{}:a}function g(a,b){return`${a}\u0000${b}`}function h(a){if(void 0===a.modelSelections)return[];if(!Array.isArray(a.modelSelections))throw Error("modelSelections 必须是模型引用数组");let b=new Set;return a.modelSelections.map(c=>{let d=f(c);if("string"!=typeof d.provider||!d.provider.trim()||"string"!=typeof d.modelId||!d.modelId.trim())throw Error("modelSelections 中的模型必须包含服务 ID 和模型 ID");let h=g(d.provider,d.modelId);if(b.has(h))throw Error(`重复收录模型:${d.provider}/${d.modelId}`);b.add(h);let i=f(f(f(a.providers)[d.provider]).modelOverrides)[d.modelId],j=f(i),k={};for(let a of["contextWindow","maxTokens"])"number"==typeof j[a]&&(k[a]=j[a]);if(void 0!==j.cost){let a=f(j.cost);k.cost=Object.fromEntries(e.filter(b=>"number"==typeof a[b]).map(b=>[b,a[b]]))}return{provider:d.provider,modelId:d.modelId,overrides:k}})}function i(a){let b=new Set(h(a).map(a=>g(a.provider,a.modelId)));for(let[c,d]of Object.entries(f(a.providers))){let a=f(d).models;if(Array.isArray(a))for(let d of a){let a=f(d);"string"==typeof a.id&&b.add(g(c,a.id))}}return b}function j(a,b,c){let d=i(c),e=new Set(b.getRegisteredProviderIds());return a.filter(a=>d.has(g(a.provider,a.id))||e.has(a.provider)||void 0!==b.getRegisteredNativeProvider(a.provider)||!b.getPhysicalModel(a.provider,a.id))}function k(a,b,c,i){let j=new Map(h(a).map(a=>[g(a.provider,a.modelId),a])),k=new Set,l={...f(b.providers)};for(let a of c){let b=g(a.provider,a.modelId);if(k.has(b))throw Error(`重复收录模型:${a.provider}/${a.modelId}`);k.add(b);let c=j.get(b),h=i.getModel(a.provider,a.modelId);if(!c&&(!h||!i.getProvider(a.provider)?.auth.oauth))throw Error(`登录服务未提供模型:${a.provider}/${a.modelId}`);let m={...f(l[a.provider])};if(Array.isArray(m.models)&&m.models.some(b=>f(b).id===a.modelId))throw Error(`模型已存在于自定义配置:${a.provider}/${a.modelId}`);let n={...f(m.modelOverrides)},o={...f(n[a.modelId])},p=!1;for(let b of["contextWindow","maxTokens","cost"]){let g=a.overrides[b],h=c?.overrides[b];if(!(0,d.isDeepStrictEqual)(h,g))if(p=!0,void 0===g)delete o[b];else if("cost"===b){let b={...f(o.cost)};for(let c of e){let d=a.overrides.cost?.[c];void 0===d?delete b[c]:b[c]=d}Object.keys(b).length?o.cost=b:delete o.cost}else o[b]=g}p&&(Object.keys(o).length?n[a.modelId]=o:delete n[a.modelId],Object.keys(n).length?m.modelOverrides=n:delete m.modelOverrides,Object.keys(m).length?l[a.provider]=m:delete l[a.provider])}let m=c.map(({provider:a,modelId:b})=>({provider:a,modelId:b})),n=h(a).map(({provider:a,modelId:b})=>({provider:a,modelId:b}));(0,d.isDeepStrictEqual)(n,m)||(b.modelSelections=m),(0,d.isDeepStrictEqual)(l,f(b.providers))||(b.providers=l)}}};
|
|
2
|
+
`,"utf8"),(0,g.renameSync)(v,u)}finally{(0,g.existsSync)(v)&&(0,g.unlinkSync)(v)}let w=Number(i)+Number(j);return{cache:r,result:0===w?"cached":1===w?"partial":q?"updated":"unchanged"}}async function v(a){return y||(y=u(a).finally(()=>{y=null}))}async function w(a){var b;let c,d,e,f,h,i=function(){let a=m();if(!(0,g.existsSync)(a))return null;try{let b=JSON.parse((0,g.readFileSync)(a,"utf8"));if(!l(b)||"number"!=typeof b.updatedAt||!Array.isArray(b.models))return null;let c=[];for(let a of b.models){if(!l(a)||!Array.isArray(a.sources))continue;let b=[];for(let c of a.sources){if(!l(c)||"models-dev"!==c.origin&&"pi"!==c.origin||"string"!=typeof c.modelName)continue;let a=function(a){if("models-dev"!==a.origin&&"pi"!==a.origin||"string"!=typeof a.modelName||"string"!=typeof a.provider||"string"!=typeof a.providerName||"string"!=typeof a.modelId||"boolean"!=typeof a.official||!l(a.defaults))return null;let b=a.defaults;if("boolean"!=typeof b.reasoning||!Array.isArray(b.thinkingLevels)||!Array.isArray(b.input)||"number"!=typeof b.contextWindow||"number"!=typeof b.maxTokens)return null;let c=[];for(let a of b.thinkingLevels){if(!l(a)||"string"!=typeof a.level||"off"!==a.level&&"minimal"!==a.level&&"low"!==a.level&&"medium"!==a.level&&"high"!==a.level&&"xhigh"!==a.level&&"max"!==a.level||null!==a.providerValue&&"string"!=typeof a.providerValue)return null;c.push({level:a.level,providerValue:a.providerValue})}let d=b.input.filter(a=>"text"===a||"image"===a);if(0===c.length||0===d.length)return null;let e=null;if(null!==b.cost){if(!l(b.cost))return null;let a=q(b.cost,"input"),c=q(b.cost,"output"),d=q(b.cost,"cacheRead"),f=q(b.cost,"cacheWrite");if(null===a||null===c||null===d||null===f)return null;e={input:a,output:c,cacheRead:d,cacheWrite:f}}return{origin:a.origin,modelName:a.modelName,provider:a.provider,providerName:a.providerName,modelId:a.modelId,official:a.official,defaults:{reasoning:b.reasoning,thinkingLevels:c,input:d,contextWindow:Math.trunc(b.contextWindow),maxTokens:Math.trunc(b.maxTokens),cost:e}}}(c);a&&b.push(a)}"string"==typeof a.referenceId&&"string"==typeof a.name&&b.length>0&&c.push({referenceId:a.referenceId,name:a.name,sources:b})}if(0===c.length)return null;return{etag:"string"==typeof b.etag?b.etag:null,updatedAt:b.updatedAt,models:c}}catch(a){return console.warn("[Pi Desk][ModelCatalog] 模型参考缓存无效",{errorName:a instanceof Error?a.name:"UnknownError"}),null}}(),j="not-requested";if(a.refresh||!i){let a=await v(i);i=a.cache,j=a.result}let k=(b=i,c=n(a.query),e=(d=b.models.map(a=>{if(!c)return{model:a,exact:!1,similar:!0};let b=[n(a.referenceId),...a.sources.flatMap(a=>[n(a.modelId),o(a.modelId)])],d=[...b,n(a.name),...a.sources.map(a=>n(a.providerName))],e=b.some(a=>a===c),f=e||d.some(a=>a.includes(c));return{model:a,exact:e,similar:f}}).filter(a=>a.similar)).filter(a=>a.exact).length,d.sort((a,b)=>Number(b.exact)-Number(a.exact)||a.model.name.localeCompare(b.model.name)),f=(a.page.index-1)*a.page.size,h=d.slice(f,f+a.page.size).map(({model:a,exact:b})=>({referenceId:a.referenceId,name:a.name,match:c?b&&1===e?"exact":"similar":null,sources:a.sources.map(({origin:a,modelName:b,...c})=>c)})),{total:d.length,models:h});return{updatedAt:i.updatedAt,refreshResult:j,page:{index:a.page.index,size:a.page.size,total:k.total},models:k.models}}d()}catch(a){d(a)}})},78262:(a,b,c)=>{c.a(a,async(a,d)=>{try{c.d(b,{ZJ:()=>f.ZJ,aY:()=>f.aY,n7:()=>f.n7,nZ:()=>e.n,oj:()=>f.oj,ur:()=>f.ur});var e=c(6816),f=c(82526),g=a([e,f]);[e,f]=g.then?(await g)():g,d()}catch(a){d(a)}})},82526:(a,b,c)=>{c.a(a,async(a,d)=>{try{c.d(b,{ZJ:()=>I,aY:()=>M,n7:()=>J,oj:()=>E,ur:()=>N});var e=c(77598),f=c(73024),g=c(76760),h=c(57975),i=c(75430),j=c(28802),k=c(65209),l=c(97219),m=a([i,j,k]);[i,j,k]=m.then?(await m)():m;let O=["off","minimal","low","medium","high","xhigh","max"],P=/^#[0-9a-fA-F]{6}$/,Q=Promise.resolve();function n(a){return"object"==typeof a&&null!==a&&!Array.isArray(a)}function o(a){return"string"==typeof a&&a.trim()?a:null}function p(a){return"boolean"==typeof a?a:null}function q(a){return n(a)?Object.fromEntries(Object.entries(a).filter(a=>!!a[0].trim()&&"string"==typeof a[1])):{}}function r(){return(0,g.join)((0,i.getAgentDir)(),"models.json")}function s(a){let b;if(!(0,f.existsSync)(a))return{};let c=(0,f.readFileSync)(a,"utf8");try{let a=(65279===c.charCodeAt(0)?c.slice(1):c).replace(/"(?:\\.|[^"\\])*"|\/\/[^\n]*/g,a=>'"'===a[0]?a:"").replace(/"(?:\\.|[^"\\])*"|,(\s*[}\]])/g,(a,b)=>b??('"'===a[0]?a:""));b=JSON.parse(a)}catch(b){throw Error(`配置文件 ${a} 解析失败:${b instanceof Error?b.message:String(b)}`,{cause:b})}if(!n(b))throw Error(`${a} 必须是 JSON 对象`);return b}function t(a,b){(0,f.mkdirSync)((0,g.dirname)(a),{recursive:!0});let c=`${a}.${process.pid}.${(0,e.randomUUID)()}.tmp`;try{(0,f.writeFileSync)(c,`${JSON.stringify(b,null,2)}
|
|
3
|
+
`,"utf8"),(0,f.renameSync)(c,a)}finally{(0,f.existsSync)(c)&&(0,f.unlinkSync)(c)}}function u(a){let b=Q.then(a,a);return Q=b.then(()=>void 0,()=>void 0),b}function v(a,b){return`${a}\u0000${b}`}function w(a,b,c){let d=o(a.id)??b?.id;if(!d)throw Error("模型缺少 id");let e=b?.reasoning??p(a.reasoning)??!1,f=b?.thinkingLevelMap??(n(a.thinkingLevelMap)?a.thinkingLevelMap:{}),g=(b?(0,j.getSupportedThinkingLevels)(b):e?O.filter(a=>"xhigh"===a||"max"===a?"string"==typeof f[a]:null!==f[a]):["off"]).map(a=>({level:a,providerValue:"string"==typeof f[a]?f[a]:null})),h=b?.input??(Array.isArray(a.input)?a.input:["text"]),i=[...new Set(h.filter(a=>"text"===a||"image"===a))],k=n(a.cost)?a.cost:null,l=n(c)&&n(c.cost)?c.cost:null,m=k||l?b?.cost??k:null,r=m&&"number"==typeof m.input&&"number"==typeof m.output&&"number"==typeof m.cacheRead&&"number"==typeof m.cacheWrite?{input:m.input,output:m.output,cacheRead:m.cacheRead,cacheWrite:m.cacheWrite}:null;return{modelId:d,name:b?.name??o(a.name)??d,api:o(a.api),baseUrl:o(a.baseUrl),reasoning:e,thinkingLevels:g,input:i.length>0?i:["text"],contextWindow:b?.contextWindow??("number"==typeof a.contextWindow&&a.contextWindow>0?Math.trunc(a.contextWindow):128e3),maxTokens:b?.maxTokens??("number"==typeof a.maxTokens&&a.maxTokens>0?Math.trunc(a.maxTokens):16384),cost:r,headers:{...q(n(c)?c.headers:void 0),...q(a.headers),...q(b?.headers)},compat:function(a){if(!n(a))return null;let b=o(a.thinkingFormat),c={supportsDeveloperRole:p(a.supportsDeveloperRole),thinkingFormat:b,requiresReasoningContentOnAssistantMessages:p(a.requiresReasoningContentOnAssistantMessages)};return Object.values(c).some(a=>null!==a)?c:null}(b?.compat??a.compat)}}function x(a,b){let c=n(a.providers)?a.providers:{},d=[];for(let[a,e]of Object.entries(c)){if(!a.trim()||!n(e)||void 0!==e.modelOverrides&&Object.keys(e).every(a=>"modelOverrides"===a))continue;let c=Array.isArray(e.models)?e.models:[];d.push({provider:a,name:o(e.name),baseUrl:o(e.baseUrl),api:o(e.api),apiKey:"string"==typeof e.apiKey?e.apiKey:null,authHeader:p(e.authHeader),headers:q(e.headers),models:c.filter(n).map(c=>w(c,"string"==typeof c.id?b.getModel(a,c.id):void 0,n(e.modelOverrides)&&"string"==typeof c.id?e.modelOverrides[c.id]:void 0))})}return d}function y(a){return{provider:a.provider,modelId:a.id,name:a.name,input:[...a.input],contextWindow:a.contextWindow,thinkingLevels:[...(0,j.getSupportedThinkingLevels)(a)]}}async function z(a,b,c=s(r())){let d=[...a.getAvailableSnapshot()];if(b){let c=i.SettingsManager.create(b,(0,i.getAgentDir)()).getEnabledModels();c?.length&&(d=(await (0,i.resolveModelScopeWithDiagnostics)(c,a)).scopedModels.map(a=>a.model))}let e=new Map;for(let b of(0,l.gX)(d,a,c))e.set(v(b.provider,b.id),b);return[...e.values()].map(y)}function A(a){if(!Array.isArray(a.modelPresets))return[];let b=[];for(let c of a.modelPresets){if(!n(c))continue;let a=o(c.provider),d=o(c.modelId),e=o(c.thinkingLevel);a&&d&&e&&O.includes(e)&&b.push({provider:a,modelId:d,thinkingLevel:e,color:"string"==typeof c.color&&P.test(c.color)?c.color:null})}return b}function B(a,b,c){null===c?delete a[b]:a[b]=c}function C(a,b,c){Object.keys(c).length>0?a[b]=c:delete a[b]}async function D(a){let b=(0,i.getAgentDir)();(0,f.mkdirSync)(b,{recursive:!0});let c=(0,g.join)(b,`models.${process.pid}.${(0,e.randomUUID)()}.tmp.json`),d=(0,g.join)(b,`models-store.${process.pid}.${(0,e.randomUUID)()}.tmp.json`);(0,f.writeFileSync)(c,`${JSON.stringify(a,null,2)}
|
|
4
|
+
`,"utf8");try{let a=await i.ModelRuntime.create({modelsPath:c,modelsStorePath:d,allowModelNetwork:!1}),b=a.getError();if(b)throw Error(`模型配置校验失败:${b}`);return a}finally{(0,f.existsSync)(c)&&(0,f.unlinkSync)(c),(0,f.existsSync)(d)&&(0,f.unlinkSync)(d)}}function E(a,b){return(0,l.gX)(a,b,s(r()))}async function F(a,b){let c=await a.listCredentials(),d=new Set(c.filter(a=>"oauth"===a.type).map(a=>a.providerId));return[...new Set([...d,...b.map(a=>a.provider)])].map(b=>{let c=a.getProvider(b);return{provider:b,name:c?.name??b,loggedIn:d.has(b),subscription:c?.auth.oauth?.isSubscription===!0,models:a.getModels(b).map(a=>w({id:a.id,cost:a.cost},a,void 0))}})}async function G(a,b,c){let d=await c.listCredentials(),e=n(a.providers)?a.providers:{},f=n(b.providers)?b.providers:{},g=["baseUrl","api","apiKey","headers","authHeader"];for(let a of d){if("oauth"!==a.type)continue;let b=e[a.providerId],c=f[a.providerId],d=n(b)?b:{},i=n(c)?c:{};if(g.some(a=>void 0!==i[a]&&!(0,h.isDeepStrictEqual)(d[a],i[a])))throw Error(`服务 ${a.providerId} 已保存账号登录,请为自定义 API 使用独立服务 ID,或先退出账号`)}}async function H(a,b){let c=(0,l.Tp)(b),d=new Set([...(0,l.Tp)(a)].filter(a=>!c.has(a)));if(d.size){for(let a of A(b))if(d.has((0,l.It)(a.provider,a.modelId)))throw Error(`模型 ${a.provider}/${a.modelId} 仍被常用组合引用,请先移除对应组合`);for(let{cwd:a}of(await (0,k.pJ)(!0))){let b=s((0,g.join)(a,i.CONFIG_DIR_NAME,"settings.json"));if("string"==typeof b.defaultProvider&&"string"==typeof b.defaultModel&&d.has((0,l.It)(b.defaultProvider,b.defaultModel)))throw Error(`项目“${a}”仍将 ${b.defaultProvider}/${b.defaultModel} 设为默认模型,请先在“项目默认”中调整`)}}}async function I(){let a=performance.now(),b=s(r()),c=await i.ModelRuntime.create({allowModelNetwork:!1}),d=await i.ModelRuntime.create({modelsPath:null,allowModelNetwork:!1}),e=(0,l.u1)(b),f=performance.now(),g={providers:x(b,c),presets:A(b),models:await z(c,void 0,b),nativeConfig:b,accountModels:e,accounts:await F(d,e)},h=performance.now()-a;return h>500&&console.warn("[Pi Desk][ModelSettings] 读取模型配置耗时较长",{totalMs:Math.round(h),runtimeMs:Math.round(f-a),projectionMs:Math.round(performance.now()-f),providers:g.providers.length,models:g.models.length}),g}async function J(a){await u(async()=>{let b=r();try{let c,d;try{c=s(b)}catch(b){if(void 0===a.nativeConfig)throw b;c={}}if(void 0!==a.nativeConfig)d=a.nativeConfig;else{let b=await i.ModelRuntime.create({allowModelNetwork:!1}),e=b.getError();if(e)throw Error(`当前模型配置不可用,请先通过原生配置修正:${e}`);let f=void 0===a.accountModels?b:await i.ModelRuntime.create({modelsPath:null,allowModelNetwork:!1});d=function(a,b,c,d){if(void 0!==b.nativeConfig)return b.nativeConfig;let e={...a};if(b.providers){let d=n(a.providers)?a.providers:{},f=new Map(x(a,c).map(a=>[a.provider,a]));e.providers=Object.fromEntries([...Object.entries(d).filter(([a])=>!f.has(a)),...b.providers.map(a=>[a.provider,function(a,b,c){let d=n(a)?{...a}:{};for(let a of["name","baseUrl","api","apiKey","authHeader"])c&&b[a]===c[a]||B(d,a,b[a]);c&&(0,h.isDeepStrictEqual)(b.headers,c.headers)||C(d,"headers",b.headers);let e=Array.isArray(d.models)?d.models.filter(n):[],f=new Map(e.filter(a=>"string"==typeof a.id).map(a=>[a.id,a])),g=new Map(c?.models.map(a=>[a.modelId,a])),i=n(d.modelOverrides)?{...d.modelOverrides}:void 0,j=b.models.map(a=>{let b=i?.[a.modelId],c=n(b)?{...b}:void 0,d=function(a,b,c,d){let e=n(a)?{...a}:{};e.id=b.modelId;let f=a=>d&&Object.hasOwn(d,a)?d:e,g=a=>!c||!(0,h.isDeepStrictEqual)(b[a],c[a]);for(let a of["name","api","baseUrl"])g(a)&&B(f(a),a,b[a]);for(let a of["reasoning","input","contextWindow","maxTokens"])g(a)&&(f(a)[a]=b[a]);if(g("thinkingLevels")&&function(a,b,c){let d=n(a.thinkingLevelMap)?{...a.thinkingLevelMap}:{},e=new Map(c?.thinkingLevels.map(a=>[a.level,a.providerValue])),f=new Map(b.thinkingLevels.map(a=>[a.level,a.providerValue]));for(let a of O)if(!c||e.has(a)!==f.has(a)||e.get(a)!==f.get(a))if(f.has(a)){let b=f.get(a);null===b?delete d[a]:d[a]=b}else("xhigh"!==a&&"max"!==a||e.has(a))&&(d[a]=null);C(a,"thinkingLevelMap",d)}(f("thinkingLevelMap"),b,c),g("cost")){let a=f("cost");if(b.cost){let d=n(a.cost)?{...a.cost}:{...b.cost};for(let a of["input","output","cacheRead","cacheWrite"])c&&b.cost[a]===c.cost?.[a]||(d[a]=b.cost[a]);a.cost=d}else delete e.cost,d&&delete d.cost}if(g("headers")&&function(a,b,c,d){let e=q(a.headers),f=q(b?.headers);for(let a of new Set([...Object.keys(d),...Object.keys(c)]))if(c[a]!==d[a]){if(!Object.hasOwn(c,a)){delete e[a],delete f[a];continue}(Object.hasOwn(e,a)||!Object.hasOwn(f,a)?e:f)[a]=c[a]}C(a,"headers",e),b&&C(b,"headers",f)}(e,d,b.headers,c?.headers??{}),g("compat")){let a=f("compat"),d=n(a.compat)?{...a.compat}:{};for(let a of["supportsDeveloperRole","thinkingFormat","requiresReasoningContentOnAssistantMessages"]){let e=b.compat?.[a]??null;c&&e===(c.compat?.[a]??null)||B(d,a,e)}C(a,"compat",d)}return e}(f.get(a.modelId),a,g.get(a.modelId),c);return i&&c&&(i[a.modelId]=c),d});return(void 0!==d.models||j.length>0)&&(d.models=j),i&&(d.modelOverrides=i),d}(d[a.provider],a,f.get(a.provider))])])}return void 0!==b.accountModels&&(0,l.OM)(a,e,b.accountModels,d),b.presets&&!(0,h.isDeepStrictEqual)(b.presets,A(a))&&(e.modelPresets=b.presets),e}(c,a,b,f)}let e=await D(d),f=await z(e,void 0,d);await G(c,d,e),await H(c,d),function(a,b,c=[]){let d=new Set(c.map(a=>`${v(a.provider,a.modelId)}\u0000${a.thinkingLevel}`)),e=new Map(b.map(a=>[v(a.provider,a.modelId),a])),f=new Set;for(let b of a){let a=`${v(b.provider,b.modelId)}\u0000${b.thinkingLevel}`;if(f.has(a))throw Error("模型预设存在重复组合");f.add(a);let c=e.get(v(b.provider,b.modelId));if((!c||!c.thinkingLevels.includes(b.thinkingLevel))&&!d.has(a))throw Error(`模型预设 ${b.provider}/${b.modelId}:${b.thinkingLevel} 不可用`)}}(A(d),f,A(c)),t(b,d)}catch(a){throw console.error("[Pi Desk][ModelSettings] 模型配置保存失败",{message:a instanceof Error?a.message:String(a)}),Error(`模型配置保存失败:${a instanceof Error?a.message:String(a)}`,{cause:a})}})}function K(a){let b=(0,g.resolve)(a);if(!(0,g.isAbsolute)(b)||!(0,f.existsSync)(b)||!(0,f.statSync)(b).isDirectory())throw Error("项目目录不存在");return b}function L(a){return(0,g.join)(K(a),i.CONFIG_DIR_NAME,"settings.json")}async function M(a){let b=K(a),c=L(b),d=s(c),e=await i.ModelRuntime.create({allowModelNetwork:!1}),f=await z(e,b);if(!["defaultProvider","defaultModel","defaultThinkingLevel"].some(a=>Object.hasOwn(d,a)))return{cwd:b,default:null,models:f};let g=i.SettingsManager.create(b,(0,i.getAgentDir)()),h=g.getDefaultProvider(),j=g.getDefaultModel(),k=g.getDefaultThinkingLevel(),l=f.find(a=>a.provider===h&&a.modelId===j),m=h&&j&&k&&l?.thinkingLevels.includes(k)?{provider:h,modelId:j,thinkingLevel:k}:null;return{cwd:b,default:m,models:f}}async function N(a,b){await u(async()=>{let c=K(a);if(b){let a=await i.ModelRuntime.create({allowModelNetwork:!1}),d=(await z(a,c)).find(a=>a.provider===b.provider&&a.modelId===b.modelId);if(!d||!d.thinkingLevels.includes(b.thinkingLevel))throw Error("项目默认模型或思考等级不可用")}let d=L(c),e=s(d);b?(e.defaultProvider=b.provider,e.defaultModel=b.modelId,e.defaultThinkingLevel=b.thinkingLevel):(delete e.defaultProvider,delete e.defaultModel,delete e.defaultThinkingLevel),t(d,e)})}d()}catch(a){d(a)}})},97219:(a,b,c)=>{c.d(b,{It:()=>g,OM:()=>k,Tp:()=>i,gX:()=>j,u1:()=>h});var d=c(57975);let e=["input","output","cacheRead","cacheWrite"];function f(a){return"object"!=typeof a||null===a||Array.isArray(a)?{}:a}function g(a,b){return`${a}\u0000${b}`}function h(a){if(void 0===a.modelSelections)return[];if(!Array.isArray(a.modelSelections))throw Error("modelSelections 必须是模型引用数组");let b=new Set;return a.modelSelections.map(c=>{let d=f(c);if("string"!=typeof d.provider||!d.provider.trim()||"string"!=typeof d.modelId||!d.modelId.trim())throw Error("modelSelections 中的模型必须包含服务 ID 和模型 ID");let h=g(d.provider,d.modelId);if(b.has(h))throw Error(`重复收录模型:${d.provider}/${d.modelId}`);b.add(h);let i=f(f(f(a.providers)[d.provider]).modelOverrides)[d.modelId],j=f(i),k={};for(let a of["contextWindow","maxTokens"])"number"==typeof j[a]&&(k[a]=j[a]);if(void 0!==j.cost){let a=f(j.cost);k.cost=Object.fromEntries(e.filter(b=>"number"==typeof a[b]).map(b=>[b,a[b]]))}return{provider:d.provider,modelId:d.modelId,overrides:k}})}function i(a){let b=new Set(h(a).map(a=>g(a.provider,a.modelId)));for(let[c,d]of Object.entries(f(a.providers))){let a=f(d).models;if(Array.isArray(a))for(let d of a){let a=f(d);"string"==typeof a.id&&b.add(g(c,a.id))}}return b}function j(a,b,c){let d=i(c),e=new Set(b.getRegisteredProviderIds());return a.filter(a=>d.has(g(a.provider,a.id))||e.has(a.provider)||void 0!==b.getRegisteredNativeProvider(a.provider)||!b.getPhysicalModel(a.provider,a.id))}function k(a,b,c,i){let j=new Map(h(a).map(a=>[g(a.provider,a.modelId),a])),k=new Set,l={...f(b.providers)};for(let a of c){let b=g(a.provider,a.modelId);if(k.has(b))throw Error(`重复收录模型:${a.provider}/${a.modelId}`);k.add(b);let c=j.get(b),h=i.getModel(a.provider,a.modelId);if(!c&&(!h||!i.getProvider(a.provider)?.auth.oauth))throw Error(`登录服务未提供模型:${a.provider}/${a.modelId}`);let m={...f(l[a.provider])};if(Array.isArray(m.models)&&m.models.some(b=>f(b).id===a.modelId))throw Error(`模型已存在于自定义配置:${a.provider}/${a.modelId}`);let n={...f(m.modelOverrides)},o={...f(n[a.modelId])},p=!1;for(let b of["contextWindow","maxTokens","cost"]){let g=a.overrides[b],h=c?.overrides[b];if(!(0,d.isDeepStrictEqual)(h,g))if(p=!0,void 0===g)delete o[b];else if("cost"===b){let b={...f(o.cost)};for(let c of e){let d=a.overrides.cost?.[c];void 0===d?delete b[c]:b[c]=d}Object.keys(b).length?o.cost=b:delete o.cost}else o[b]=g}p&&(Object.keys(o).length?n[a.modelId]=o:delete n[a.modelId],Object.keys(n).length?m.modelOverrides=n:delete m.modelOverrides,Object.keys(m).length?l[a.provider]=m:delete l[a.provider])}let m=c.map(({provider:a,modelId:b})=>({provider:a,modelId:b})),n=h(a).map(({provider:a,modelId:b})=>({provider:a,modelId:b}));(0,d.isDeepStrictEqual)(n,m)||(b.modelSelections=m),(0,d.isDeepStrictEqual)(l,f(b.providers))||(b.providers=l)}}};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
globalThis.__BUILD_MANIFEST={polyfillFiles:["static/chunks/polyfills-42372ed130431b0a.js"],devFiles:[],lowPriorityFiles:["static/
|
|
1
|
+
globalThis.__BUILD_MANIFEST={polyfillFiles:["static/chunks/polyfills-42372ed130431b0a.js"],devFiles:[],lowPriorityFiles:["static/STVrBHA3z9KPtvBE4WcE2/_buildManifest.js","static/STVrBHA3z9KPtvBE4WcE2/_ssgManifest.js"],rootMainFiles:["static/chunks/webpack-45424d28099bbefa.js","static/chunks/e388c842-1ca92f1ea0dfe8ee.js","static/chunks/64444-3e955f910569274d.js","static/chunks/main-app-6230945a5a062fce.js"],rootMainFilesTree:{},pages:{"/_app":[]}};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
<!DOCTYPE html><html id="__next_error__"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/webpack-45424d28099bbefa.js"/><script src="/_next/static/chunks/e388c842-1ca92f1ea0dfe8ee.js" async=""></script><script src="/_next/static/chunks/64444-3e955f910569274d.js" async=""></script><script src="/_next/static/chunks/main-app-6230945a5a062fce.js" async=""></script><script src="/_next/static/chunks/78923-539a8b5f7af3c54a.js" async=""></script><script src="/_next/static/chunks/81881-f11dbe7dc0d04ed9.js" async=""></script><script src="/_next/static/chunks/app/error-0296a3b20cd1bf00.js" async=""></script><script src="/_next/static/chunks/app/not-found-2aab8b33ebbf3257.js" async=""></script><script src="/_next/static/chunks/app/global-error-6f5fc4928fd1966c.js" async=""></script><title>500: This page couldn’t load</title><style>:root {--next-error-bg: #fff;--next-error-text: #171717;--next-error-title: #171717;--next-error-message: #171717;--next-error-digest: #666666;--next-error-btn-text: #fff;--next-error-btn-bg: #171717;--next-error-btn-border: none;--next-error-btn-secondary-text: #171717;--next-error-btn-secondary-bg: transparent;--next-error-btn-secondary-border: 1px solid rgba(0,0,0,0.08);}@media (prefers-color-scheme: dark) {:root {--next-error-bg: #0a0a0a;--next-error-text: #ededed;--next-error-title: #ededed;--next-error-message: #ededed;--next-error-digest: #a0a0a0;--next-error-btn-text: #0a0a0a;--next-error-btn-bg: #ededed;--next-error-btn-border: none;--next-error-btn-secondary-text: #ededed;--next-error-btn-secondary-bg: transparent;--next-error-btn-secondary-border: 1px solid rgba(255,255,255,0.14);}}body { margin: 0; color: var(--next-error-text); background: var(--next-error-bg); }</style><script src="/_next/static/chunks/polyfills-42372ed130431b0a.js" noModule=""></script></head><body><div hidden=""><!--$--><!--/$--></div><div style="font-family:system-ui,"Segoe UI",Roboto,Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji";height:100vh;display:flex;align-items:center;justify-content:center"><div style="margin-top:-32px;max-width:325px;padding:32px 28px;text-align:left"><svg width="32" height="32" viewBox="-0.2 -1.5 32 32" fill="none" style="margin-bottom:24px"><path d="M16.9328 0C18.0839 0.000116771 19.1334 0.658832 19.634 1.69531L31.4299 26.1309C32.0708 27.4588 31.1036 28.9999 29.6291 29H2.00215C0.527541 29 -0.439628 27.4588 0.201371 26.1309L11.9973 1.69531C12.4979 0.658823 13.5474 7.75066e-05 14.6984 0H16.9328ZM3.59493 26H28.0363L16.9328 3H14.6984L3.59493 26ZM15.8156 19C16.9202 19.0001 17.8156 19.8955 17.8156 21C17.8156 22.1045 16.9202 22.9999 15.8156 23C14.7111 23 13.8156 22.1046 13.8156 21C13.8156 19.8954 14.7111 19 15.8156 19ZM17.3156 16.5H14.3156V8.5H17.3156V16.5Z" fill="var(--next-error-title)"></path></svg><h1 style="font-size:24px;font-weight:500;letter-spacing:-0.02em;line-height:32px;margin:0 0 12px 0;color:var(--next-error-title)">This page couldn’t load</h1><p style="font-size:14px;font-weight:400;line-height:21px;margin:0 0 20px 0;color:var(--next-error-message)">A server error occurred. Reload to try again.</p><form style="margin:0"><button type="submit" style="display:inline-flex;align-items:center;justify-content:center;height:32px;padding:0 12px;font-size:14px;font-weight:500;line-height:20px;border-radius:6px;cursor:pointer;color:var(--next-error-btn-text);background:var(--next-error-btn-bg);border:var(--next-error-btn-border)">Reload</button></form></div></div><!--$--><!--/$--><script src="/_next/static/chunks/webpack-45424d28099bbefa.js" id="_R_" async=""></script><script>(self.__next_f=self.__next_f||[]).push([0])</script><script>self.__next_f.push([1,"1:\"$Sreact.fragment\"\n2:I[90184,[],\"\"]\n3:I[84845,[\"78923\",\"static/chunks/78923-539a8b5f7af3c54a.js\",\"81881\",\"static/chunks/81881-f11dbe7dc0d04ed9.js\",\"18039\",\"static/chunks/app/error-0296a3b20cd1bf00.js\"],\"default\"]\n4:I[44478,[],\"\"]\n5:I[66999,[\"78923\",\"static/chunks/78923-539a8b5f7af3c54a.js\",\"81881\",\"static/chunks/81881-f11dbe7dc0d04ed9.js\",\"24345\",\"static/chunks/app/not-found-2aab8b33ebbf3257.js\"],\"L1ErrorPage\"]\n6:I[14405,[],\"OutletBoundary\"]\n7:\"$Sreact.suspense\"\na:I[14405,[],\"ViewportBoundary\"]\nc:I[14405,[],\"MetadataBoundary\"]\ne:I[71713,[\"34219\",\"static/chunks/app/global-error-6f5fc4928fd1966c.js\"],\"default\"]\n9:X\n0:{\"P\":null,\"c\":[\"\",\"_global-error\"],\"q\":\"\",\"i\":false,\"f\":[[[\"\",{\"children\":[\"_global-error\",{\"children\":[\"__PAGE__\",{},\"$undefined\",\"$undefined\",4624]},\"$undefined\",\"$undefined\",4624]},\"$undefined\",\"$undefined\",4624],[[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L2\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$3\",\"errorStyles\":[],\"errorScripts\":null,\"template\":[\"$\",\"$L4\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":[[\"$\",\"$L5\",null,{\"notFound\":true}],[]],\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L2\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L4\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[[\"$\",\"html\",null,{\"id\":\"__next_error__\",\"children\":[[\"$\",\"head\",null,{\"children\":[[\"$\",\"title\",null,{\"children\":\"500: This page couldn’t load\"}],[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\":root {--next-error-bg: #fff;--next-error-text: #171717;--next-error-title: #171717;--next-error-message: #171717;--next-error-digest: #666666;--next-error-btn-text: #fff;--next-error-btn-bg: #171717;--next-error-btn-border: none;--next-error-btn-secondary-text: #171717;--next-error-btn-secondary-bg: transparent;--next-error-btn-secondary-border: 1px solid rgba(0,0,0,0.08);}@media (prefers-color-scheme: dark) {:root {--next-error-bg: #0a0a0a;--next-error-text: #ededed;--next-error-title: #ededed;--next-error-message: #ededed;--next-error-digest: #a0a0a0;--next-error-btn-text: #0a0a0a;--next-error-btn-bg: #ededed;--next-error-btn-border: none;--next-error-btn-secondary-text: #ededed;--next-error-btn-secondary-bg: transparent;--next-error-btn-secondary-border: 1px solid rgba(255,255,255,0.14);}}body { margin: 0; color: var(--next-error-text); background: var(--next-error-bg); }\"}}]]}],[\"$\",\"body\",null,{\"children\":[\"$\",\"div\",null,{\"style\":{\"fontFamily\":\"system-ui,\\\"Segoe UI\\\",Roboto,Helvetica,Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\"\",\"height\":\"100vh\",\"display\":\"flex\",\"alignItems\":\"center\",\"justifyContent\":\"center\"},\"children\":[\"$\",\"div\",null,{\"style\":{\"marginTop\":\"-32px\",\"maxWidth\":\"325px\",\"padding\":\"32px 28px\",\"textAlign\":\"left\"},\"children\":[[\"$\",\"svg\",null,{\"width\":\"32\",\"height\":\"32\",\"viewBox\":\"-0.2 -1.5 32 32\",\"fill\":\"none\",\"style\":{\"marginBottom\":\"24px\"},\"children\":[\"$\",\"path\",null,{\"d\":\"M16.9328 0C18.0839 0.000116771 19.1334 0.658832 19.634 1.69531L31.4299 26.1309C32.0708 27.4588 31.1036 28.9999 29.6291 29H2.00215C0.527541 29 -0.439628 27.4588 0.201371 26.1309L11.9973 1.69531C12.4979 0.658823 13.5474 7.75066e-05 14.6984 0H16.9328ZM3.59493 26H28.0363L16.9328 3H14.6984L3.59493 26ZM15.8156 19C16.9202 19.0001 17.8156 19.8955 17.8156 21C17.8156 22.1045 16.9202 22.9999 15.8156 23C14.7111 23 13.8156 22.1046 13.8156 21C13.8156 19.8954 14.7111 19 15.8156 19ZM17.3156 16.5H14.3156V8.5H17.3156V16.5Z\",\"fill\":\"var(--next-error-title)\"}]}],[\"$\",\"h1\",null,{\"style\":{\"fontSize\":\"24px\",\"fontWeight\":500,\"letterSpacing\":\"-0.02em\",\"lineHeight\":\"32px\",\"margin\":\"0 0 12px 0\",\"color\":\"var(--next-error-title)\"},\"children\":\"This page couldn’t load\"}],[\"$\",\"p\",null,{\"style\":{\"fontSize\":\"14px\",\"fontWeight\":400,\"lineHeight\":\"21px\",\"margin\":\"0 0 20px 0\",\"color\":\"var(--next-error-message)\"},\"children\":\"A server error occurred. Reload to try again.\"}],[\"$\",\"form\",null,{\"style\":{\"margin\":0},\"children\":[\"$\",\"button\",null,{\"type\":\"submit\",\"style\":{\"display\":\"inline-flex\",\"alignItems\":\"center\",\"justifyContent\":\"center\",\"height\":\"32px\",\"padding\":\"0 12px\",\"fontSize\":\"14px\",\"fontWeight\":500,\"lineHeight\":\"20px\",\"borderRadius\":\"6px\",\"cursor\":\"pointer\",\"color\":\"var(--next-error-btn-text)\",\"background\":\"var(--next-error-btn-bg)\",\"border\":\"var(--next-error-btn-border)\"},\"children\":\"Reload\"}]}]]}]}]}]]}],null,[\"$\",\"$L6\",null,{\"children\":[\"$\",\"$7\",null,{\"name\":\"Next.MetadataOutlet\",\"children\":\"$@8\"}]}]]}],{},null,false,null]},null,false,\"$9\"]},null,false,\"$9\"],[\"$\",\"$1\",\"h\",{\"children\":[null,[\"$\",\"$La\",null,{\"children\":\"$Lb\"}],[\"$\",\"div\",null,{\"hidden\":true,\"children\":[\"$\",\"$Lc\",null,{\"children\":[\"$\",\"$7\",null,{\"name\":\"Next.Metadata\",\"children\":\"$Ld\"}]}]}],null]}],false]],\"m\":\"$undefined\",\"G\":[\"$e\",[]],\"S\":true,\"h\":null,\"r\":\"$undefined\",\"s\":\"$undefined\",\"a\":\"$undefined\",\"l\":\"$undefined\",\"p\":\"$undefined\",\"d\":\"$undefined\",\"b\":\"
|
|
1
|
+
<!DOCTYPE html><html id="__next_error__"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/webpack-45424d28099bbefa.js"/><script src="/_next/static/chunks/e388c842-1ca92f1ea0dfe8ee.js" async=""></script><script src="/_next/static/chunks/64444-3e955f910569274d.js" async=""></script><script src="/_next/static/chunks/main-app-6230945a5a062fce.js" async=""></script><script src="/_next/static/chunks/78923-539a8b5f7af3c54a.js" async=""></script><script src="/_next/static/chunks/81881-f11dbe7dc0d04ed9.js" async=""></script><script src="/_next/static/chunks/app/error-0296a3b20cd1bf00.js" async=""></script><script src="/_next/static/chunks/app/not-found-2aab8b33ebbf3257.js" async=""></script><script src="/_next/static/chunks/app/global-error-6f5fc4928fd1966c.js" async=""></script><title>500: This page couldn’t load</title><style>:root {--next-error-bg: #fff;--next-error-text: #171717;--next-error-title: #171717;--next-error-message: #171717;--next-error-digest: #666666;--next-error-btn-text: #fff;--next-error-btn-bg: #171717;--next-error-btn-border: none;--next-error-btn-secondary-text: #171717;--next-error-btn-secondary-bg: transparent;--next-error-btn-secondary-border: 1px solid rgba(0,0,0,0.08);}@media (prefers-color-scheme: dark) {:root {--next-error-bg: #0a0a0a;--next-error-text: #ededed;--next-error-title: #ededed;--next-error-message: #ededed;--next-error-digest: #a0a0a0;--next-error-btn-text: #0a0a0a;--next-error-btn-bg: #ededed;--next-error-btn-border: none;--next-error-btn-secondary-text: #ededed;--next-error-btn-secondary-bg: transparent;--next-error-btn-secondary-border: 1px solid rgba(255,255,255,0.14);}}body { margin: 0; color: var(--next-error-text); background: var(--next-error-bg); }</style><script src="/_next/static/chunks/polyfills-42372ed130431b0a.js" noModule=""></script></head><body><div hidden=""><!--$--><!--/$--></div><div style="font-family:system-ui,"Segoe UI",Roboto,Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji";height:100vh;display:flex;align-items:center;justify-content:center"><div style="margin-top:-32px;max-width:325px;padding:32px 28px;text-align:left"><svg width="32" height="32" viewBox="-0.2 -1.5 32 32" fill="none" style="margin-bottom:24px"><path d="M16.9328 0C18.0839 0.000116771 19.1334 0.658832 19.634 1.69531L31.4299 26.1309C32.0708 27.4588 31.1036 28.9999 29.6291 29H2.00215C0.527541 29 -0.439628 27.4588 0.201371 26.1309L11.9973 1.69531C12.4979 0.658823 13.5474 7.75066e-05 14.6984 0H16.9328ZM3.59493 26H28.0363L16.9328 3H14.6984L3.59493 26ZM15.8156 19C16.9202 19.0001 17.8156 19.8955 17.8156 21C17.8156 22.1045 16.9202 22.9999 15.8156 23C14.7111 23 13.8156 22.1046 13.8156 21C13.8156 19.8954 14.7111 19 15.8156 19ZM17.3156 16.5H14.3156V8.5H17.3156V16.5Z" fill="var(--next-error-title)"></path></svg><h1 style="font-size:24px;font-weight:500;letter-spacing:-0.02em;line-height:32px;margin:0 0 12px 0;color:var(--next-error-title)">This page couldn’t load</h1><p style="font-size:14px;font-weight:400;line-height:21px;margin:0 0 20px 0;color:var(--next-error-message)">A server error occurred. Reload to try again.</p><form style="margin:0"><button type="submit" style="display:inline-flex;align-items:center;justify-content:center;height:32px;padding:0 12px;font-size:14px;font-weight:500;line-height:20px;border-radius:6px;cursor:pointer;color:var(--next-error-btn-text);background:var(--next-error-btn-bg);border:var(--next-error-btn-border)">Reload</button></form></div></div><!--$--><!--/$--><script src="/_next/static/chunks/webpack-45424d28099bbefa.js" id="_R_" async=""></script><script>(self.__next_f=self.__next_f||[]).push([0])</script><script>self.__next_f.push([1,"1:\"$Sreact.fragment\"\n2:I[90184,[],\"\"]\n3:I[84845,[\"78923\",\"static/chunks/78923-539a8b5f7af3c54a.js\",\"81881\",\"static/chunks/81881-f11dbe7dc0d04ed9.js\",\"18039\",\"static/chunks/app/error-0296a3b20cd1bf00.js\"],\"default\"]\n4:I[44478,[],\"\"]\n5:I[66999,[\"78923\",\"static/chunks/78923-539a8b5f7af3c54a.js\",\"81881\",\"static/chunks/81881-f11dbe7dc0d04ed9.js\",\"24345\",\"static/chunks/app/not-found-2aab8b33ebbf3257.js\"],\"L1ErrorPage\"]\n6:I[14405,[],\"OutletBoundary\"]\n7:\"$Sreact.suspense\"\na:I[14405,[],\"ViewportBoundary\"]\nc:I[14405,[],\"MetadataBoundary\"]\ne:I[71713,[\"34219\",\"static/chunks/app/global-error-6f5fc4928fd1966c.js\"],\"default\"]\n9:X\n0:{\"P\":null,\"c\":[\"\",\"_global-error\"],\"q\":\"\",\"i\":false,\"f\":[[[\"\",{\"children\":[\"_global-error\",{\"children\":[\"__PAGE__\",{},\"$undefined\",\"$undefined\",4624]},\"$undefined\",\"$undefined\",4624]},\"$undefined\",\"$undefined\",4624],[[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L2\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$3\",\"errorStyles\":[],\"errorScripts\":null,\"template\":[\"$\",\"$L4\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":[[\"$\",\"$L5\",null,{\"notFound\":true}],[]],\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L2\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L4\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[[\"$\",\"html\",null,{\"id\":\"__next_error__\",\"children\":[[\"$\",\"head\",null,{\"children\":[[\"$\",\"title\",null,{\"children\":\"500: This page couldn’t load\"}],[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\":root {--next-error-bg: #fff;--next-error-text: #171717;--next-error-title: #171717;--next-error-message: #171717;--next-error-digest: #666666;--next-error-btn-text: #fff;--next-error-btn-bg: #171717;--next-error-btn-border: none;--next-error-btn-secondary-text: #171717;--next-error-btn-secondary-bg: transparent;--next-error-btn-secondary-border: 1px solid rgba(0,0,0,0.08);}@media (prefers-color-scheme: dark) {:root {--next-error-bg: #0a0a0a;--next-error-text: #ededed;--next-error-title: #ededed;--next-error-message: #ededed;--next-error-digest: #a0a0a0;--next-error-btn-text: #0a0a0a;--next-error-btn-bg: #ededed;--next-error-btn-border: none;--next-error-btn-secondary-text: #ededed;--next-error-btn-secondary-bg: transparent;--next-error-btn-secondary-border: 1px solid rgba(255,255,255,0.14);}}body { margin: 0; color: var(--next-error-text); background: var(--next-error-bg); }\"}}]]}],[\"$\",\"body\",null,{\"children\":[\"$\",\"div\",null,{\"style\":{\"fontFamily\":\"system-ui,\\\"Segoe UI\\\",Roboto,Helvetica,Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\"\",\"height\":\"100vh\",\"display\":\"flex\",\"alignItems\":\"center\",\"justifyContent\":\"center\"},\"children\":[\"$\",\"div\",null,{\"style\":{\"marginTop\":\"-32px\",\"maxWidth\":\"325px\",\"padding\":\"32px 28px\",\"textAlign\":\"left\"},\"children\":[[\"$\",\"svg\",null,{\"width\":\"32\",\"height\":\"32\",\"viewBox\":\"-0.2 -1.5 32 32\",\"fill\":\"none\",\"style\":{\"marginBottom\":\"24px\"},\"children\":[\"$\",\"path\",null,{\"d\":\"M16.9328 0C18.0839 0.000116771 19.1334 0.658832 19.634 1.69531L31.4299 26.1309C32.0708 27.4588 31.1036 28.9999 29.6291 29H2.00215C0.527541 29 -0.439628 27.4588 0.201371 26.1309L11.9973 1.69531C12.4979 0.658823 13.5474 7.75066e-05 14.6984 0H16.9328ZM3.59493 26H28.0363L16.9328 3H14.6984L3.59493 26ZM15.8156 19C16.9202 19.0001 17.8156 19.8955 17.8156 21C17.8156 22.1045 16.9202 22.9999 15.8156 23C14.7111 23 13.8156 22.1046 13.8156 21C13.8156 19.8954 14.7111 19 15.8156 19ZM17.3156 16.5H14.3156V8.5H17.3156V16.5Z\",\"fill\":\"var(--next-error-title)\"}]}],[\"$\",\"h1\",null,{\"style\":{\"fontSize\":\"24px\",\"fontWeight\":500,\"letterSpacing\":\"-0.02em\",\"lineHeight\":\"32px\",\"margin\":\"0 0 12px 0\",\"color\":\"var(--next-error-title)\"},\"children\":\"This page couldn’t load\"}],[\"$\",\"p\",null,{\"style\":{\"fontSize\":\"14px\",\"fontWeight\":400,\"lineHeight\":\"21px\",\"margin\":\"0 0 20px 0\",\"color\":\"var(--next-error-message)\"},\"children\":\"A server error occurred. Reload to try again.\"}],[\"$\",\"form\",null,{\"style\":{\"margin\":0},\"children\":[\"$\",\"button\",null,{\"type\":\"submit\",\"style\":{\"display\":\"inline-flex\",\"alignItems\":\"center\",\"justifyContent\":\"center\",\"height\":\"32px\",\"padding\":\"0 12px\",\"fontSize\":\"14px\",\"fontWeight\":500,\"lineHeight\":\"20px\",\"borderRadius\":\"6px\",\"cursor\":\"pointer\",\"color\":\"var(--next-error-btn-text)\",\"background\":\"var(--next-error-btn-bg)\",\"border\":\"var(--next-error-btn-border)\"},\"children\":\"Reload\"}]}]]}]}]}]]}],null,[\"$\",\"$L6\",null,{\"children\":[\"$\",\"$7\",null,{\"name\":\"Next.MetadataOutlet\",\"children\":\"$@8\"}]}]]}],{},null,false,null]},null,false,\"$9\"]},null,false,\"$9\"],[\"$\",\"$1\",\"h\",{\"children\":[null,[\"$\",\"$La\",null,{\"children\":\"$Lb\"}],[\"$\",\"div\",null,{\"hidden\":true,\"children\":[\"$\",\"$Lc\",null,{\"children\":[\"$\",\"$7\",null,{\"name\":\"Next.Metadata\",\"children\":\"$Ld\"}]}]}],null]}],false]],\"m\":\"$undefined\",\"G\":[\"$e\",[]],\"S\":true,\"h\":null,\"r\":\"$undefined\",\"s\":\"$undefined\",\"a\":\"$undefined\",\"l\":\"$undefined\",\"p\":\"$undefined\",\"d\":\"$undefined\",\"b\":\"STVrBHA3z9KPtvBE4WcE2\"}\n9:C\nb:[[\"$\",\"meta\",\"0\",{\"charSet\":\"utf-8\"}],[\"$\",\"meta\",\"1\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1\"}]]\n8:null\nd:[]\n"])</script></body></html>
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"node":{},"edge":{},"encryptionKey":"
|
|
1
|
+
{"node":{},"edge":{},"encryptionKey":"5xQZtGoi8qI+AU48D/+bJxg8Qf5pEFZOz32hkKhYqD4="}
|