@rexvane/piweb 0.3.17 → 0.3.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/.next/BUILD_ID +1 -1
- package/.next/app-path-routes-manifest.json +6 -4
- package/.next/build-manifest.json +3 -3
- package/.next/prerender-manifest.json +4 -4
- package/.next/react-loadable-manifest.json +23 -9
- package/.next/required-server-files.js +2 -1
- package/.next/required-server-files.json +2 -1
- package/.next/routes-manifest.json +12 -0
- package/.next/server/app/_global-error/page.js +2 -2
- package/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
- package/.next/server/app/_global-error.html +1 -1
- package/.next/server/app/_global-error.rsc +1 -1
- package/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
- package/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
- package/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/.next/server/app/_not-found/page.js +1 -1
- package/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/.next/server/app/_not-found.html +1 -1
- package/.next/server/app/_not-found.rsc +2 -2
- package/.next/server/app/_not-found.segments/_full.segment.rsc +2 -2
- package/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +2 -2
- package/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/api/agent/[id]/events/route.js +3 -3
- package/.next/server/app/api/agent/[id]/events/route.js.nft.json +1 -1
- package/.next/server/app/api/agent/[id]/route.js +1 -1
- package/.next/server/app/api/agent/[id]/route.js.nft.json +1 -1
- package/.next/server/app/api/agent/[id]/tree/route.js +1 -1
- package/.next/server/app/api/agent/[id]/tree/route.js.nft.json +1 -1
- package/.next/server/app/api/agent/new/route.js +1 -1
- package/.next/server/app/api/agent/new/route.js.nft.json +1 -1
- package/.next/server/app/api/config/route.js +1 -1
- package/.next/server/app/api/config/route.js.nft.json +1 -1
- package/.next/server/app/api/files/route.js +1 -1
- package/.next/server/app/api/files/route.js.nft.json +1 -1
- package/.next/server/app/api/fs/route.js +1 -0
- package/.next/server/app/api/fs/route.js.nft.json +1 -0
- package/.next/server/app/api/fs/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/git/route.js +2 -2
- package/.next/server/app/api/git/route.js.nft.json +1 -1
- package/.next/server/app/api/growth/route.js +1 -1
- package/.next/server/app/api/growth/route.js.nft.json +1 -1
- package/.next/server/app/api/health/route.js +1 -1
- package/.next/server/app/api/models/route.js +1 -1
- package/.next/server/app/api/models/route.js.nft.json +1 -1
- package/.next/server/app/api/pi-settings/route.js +1 -1
- package/.next/server/app/api/pi-settings/route.js.nft.json +1 -1
- package/.next/server/app/api/plugins/route.js +1 -1
- package/.next/server/app/api/plugins/route.js.nft.json +1 -1
- package/.next/server/app/api/prompts/route.js +1 -1
- package/.next/server/app/api/prompts/route.js.nft.json +1 -1
- package/.next/server/app/api/remote/route.js +8 -0
- package/.next/server/app/api/remote/route.js.nft.json +1 -0
- package/.next/server/app/api/remote/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/security/route.js +1 -1
- package/.next/server/app/api/security/route.js.nft.json +1 -1
- package/.next/server/app/api/sessions/[id]/export/route.js +1 -1
- package/.next/server/app/api/sessions/[id]/export/route.js.nft.json +1 -1
- package/.next/server/app/api/sessions/[id]/route.js +1 -1
- package/.next/server/app/api/sessions/[id]/route.js.nft.json +1 -1
- package/.next/server/app/api/sessions/import/route.js +2 -2
- package/.next/server/app/api/sessions/import/route.js.nft.json +1 -1
- package/.next/server/app/api/sessions/route.js +1 -1
- package/.next/server/app/api/sessions/route.js.nft.json +1 -1
- package/.next/server/app/api/skills/route.js +1 -1
- package/.next/server/app/api/skills/route.js.nft.json +1 -1
- package/.next/server/app/api/update/route.js +2 -2
- package/.next/server/app/api/update/route.js.nft.json +1 -1
- package/.next/server/app/api/version/route.js +1 -1
- package/.next/server/app/api/version/route.js.nft.json +1 -1
- package/.next/server/app/api/web-auth/route.js +3 -1
- package/.next/server/app/api/workspaces/route.js +1 -1
- package/.next/server/app/api/workspaces/route.js.nft.json +1 -1
- package/.next/server/app/icon.svg/route.js +1 -1
- package/.next/server/app/index.html +1 -1
- package/.next/server/app/index.rsc +4 -4
- package/.next/server/app/index.segments/__PAGE__.segment.rsc +4 -4
- package/.next/server/app/index.segments/_full.segment.rsc +4 -4
- package/.next/server/app/index.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/login/page.js +1 -1
- package/.next/server/app/login/page_client-reference-manifest.js +1 -1
- package/.next/server/app/login.html +1 -1
- package/.next/server/app/login.rsc +3 -3
- package/.next/server/app/login.segments/_full.segment.rsc +3 -3
- package/.next/server/app/login.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/login.segments/login/__PAGE__.segment.rsc +3 -3
- package/.next/server/app/page.js +1 -1
- package/.next/server/app/page.js.nft.json +1 -1
- package/.next/server/app/page_client-reference-manifest.js +1 -1
- package/.next/server/app-paths-manifest.json +6 -4
- package/.next/server/chunks/229.js +1 -1
- package/.next/server/chunks/243.js +1 -0
- package/.next/server/chunks/393.js +1 -0
- package/.next/server/chunks/496.js +1 -1
- package/.next/server/chunks/538.js +1 -0
- package/.next/server/chunks/686.js +1 -4
- package/.next/server/chunks/802.js +2 -0
- package/.next/server/chunks/807.js +1 -0
- package/.next/server/chunks/920.js +4 -0
- package/.next/server/chunks/924.js +6 -0
- package/.next/server/instrumentation.js +1 -0
- package/.next/server/instrumentation.js.nft.json +1 -0
- package/.next/server/middleware-build-manifest.js +1 -1
- package/.next/server/middleware-react-loadable-manifest.js +1 -1
- package/.next/server/middleware.js +4 -3
- package/.next/server/pages/404.html +1 -1
- package/.next/server/pages/500.html +1 -1
- package/.next/server/server-reference-manifest.json +1 -1
- package/.next/static/JDGSR-TIbk9qZWcUNYIX3/_buildManifest.js +1 -0
- package/.next/static/chunks/2716.7ad073038e94a802.js +1 -0
- package/.next/static/chunks/316-5ea443ee6b512aa9.js +1 -0
- package/.next/static/chunks/4673.8a5a9e6855350e34.js +1 -0
- package/.next/static/chunks/4686-e3825f3b6a384aa1.js +1 -0
- package/.next/static/chunks/4778.e4c9ed093a413bc4.js +1 -0
- package/.next/static/chunks/5173.91ddb803785009f8.js +1 -0
- package/.next/static/chunks/839.7403c6bdace4c56c.js +1 -0
- package/.next/static/chunks/8552.6bfe3e101250b20f.js +1 -0
- package/.next/static/chunks/app/_global-error/page-b179d9f7f6f2daf9.js +1 -0
- package/.next/static/chunks/app/api/agent/[id]/events/route-b179d9f7f6f2daf9.js +1 -0
- package/.next/static/chunks/app/api/agent/[id]/route-b179d9f7f6f2daf9.js +1 -0
- package/.next/static/chunks/app/api/agent/[id]/tree/route-b179d9f7f6f2daf9.js +1 -0
- package/.next/static/chunks/app/api/agent/new/route-b179d9f7f6f2daf9.js +1 -0
- package/.next/static/chunks/app/api/config/route-b179d9f7f6f2daf9.js +1 -0
- package/.next/static/chunks/app/api/files/route-b179d9f7f6f2daf9.js +1 -0
- package/.next/static/chunks/app/api/fs/route-b179d9f7f6f2daf9.js +1 -0
- package/.next/static/chunks/app/api/git/route-b179d9f7f6f2daf9.js +1 -0
- package/.next/static/chunks/app/api/growth/route-b179d9f7f6f2daf9.js +1 -0
- package/.next/static/chunks/app/api/health/route-b179d9f7f6f2daf9.js +1 -0
- package/.next/static/chunks/app/api/models/route-b179d9f7f6f2daf9.js +1 -0
- package/.next/static/chunks/app/api/pi-settings/route-b179d9f7f6f2daf9.js +1 -0
- package/.next/static/chunks/app/api/plugins/route-b179d9f7f6f2daf9.js +1 -0
- package/.next/static/chunks/app/api/prompts/route-b179d9f7f6f2daf9.js +1 -0
- package/.next/static/chunks/app/api/remote/route-b179d9f7f6f2daf9.js +1 -0
- package/.next/static/chunks/app/api/security/route-b179d9f7f6f2daf9.js +1 -0
- package/.next/static/chunks/app/api/sessions/[id]/export/route-b179d9f7f6f2daf9.js +1 -0
- package/.next/static/chunks/app/api/sessions/[id]/route-b179d9f7f6f2daf9.js +1 -0
- package/.next/static/chunks/app/api/sessions/import/route-b179d9f7f6f2daf9.js +1 -0
- package/.next/static/chunks/app/api/sessions/route-b179d9f7f6f2daf9.js +1 -0
- package/.next/static/chunks/app/api/skills/route-b179d9f7f6f2daf9.js +1 -0
- package/.next/static/chunks/app/api/update/route-b179d9f7f6f2daf9.js +1 -0
- package/.next/static/chunks/app/api/version/route-b179d9f7f6f2daf9.js +1 -0
- package/.next/static/chunks/app/api/web-auth/route-b179d9f7f6f2daf9.js +1 -0
- package/.next/static/chunks/app/api/workspaces/route-b179d9f7f6f2daf9.js +1 -0
- package/.next/static/chunks/app/login/page-5e276a1eeb8867df.js +1 -0
- package/.next/static/chunks/app/page-2e425ef83fba0782.js +1 -0
- package/.next/static/chunks/next/dist/client/components/builtin/app-error-b179d9f7f6f2daf9.js +1 -0
- package/.next/static/chunks/next/dist/client/components/builtin/forbidden-b179d9f7f6f2daf9.js +1 -0
- package/.next/static/chunks/next/dist/client/components/builtin/not-found-b179d9f7f6f2daf9.js +1 -0
- package/.next/static/chunks/next/dist/client/components/builtin/unauthorized-b179d9f7f6f2daf9.js +1 -0
- package/.next/static/chunks/webpack-bd2b9202ecbcdcaa.js +1 -0
- package/.next/static/css/7391c42e1ae617f9.css +1 -0
- package/.next/types/app/api/fs/route.ts +353 -0
- package/.next/types/app/api/remote/route.ts +353 -0
- package/.next/types/routes.d.ts +3 -1
- package/.next/types/validator.ts +18 -0
- package/README.md +56 -10
- package/next.config.ts +3 -2
- package/package.json +3 -3
- package/scripts/launcher.mjs +194 -13
- package/scripts/release.mjs +0 -2
- package/src/app/api/agent/[id]/events/route.ts +11 -6
- package/src/app/api/fs/route.ts +119 -0
- package/src/app/api/growth/route.ts +11 -6
- package/src/app/api/models/route.ts +21 -9
- package/src/app/api/remote/route.ts +67 -0
- package/src/app/api/sessions/[id]/export/route.ts +11 -1
- package/src/app/api/sessions/route.ts +3 -1
- package/src/app/api/web-auth/route.ts +45 -49
- package/src/app/api/workspaces/route.ts +16 -0
- package/src/app/globals.css +11 -3
- package/src/app/login/page.tsx +8 -60
- package/src/components/AppShell.tsx +202 -155
- package/src/components/ChatInput.tsx +61 -6
- package/src/components/ChatWindow.tsx +274 -132
- package/src/components/DirectoryPicker.tsx +189 -0
- package/src/components/DrawerPanel.tsx +164 -0
- package/src/components/FileViewer.tsx +2 -2
- package/src/components/GrowthTree.tsx +6 -5
- package/src/components/MarkdownBlock.tsx +134 -0
- package/src/components/OutlineRail.tsx +22 -1
- package/src/components/ProjectPanel.tsx +197 -14
- package/src/components/RemoteSection.tsx +232 -0
- package/src/components/SessionImportSection.tsx +60 -38
- package/src/components/SettingsPanel.tsx +104 -57
- package/src/components/icons.tsx +23 -0
- package/src/hooks/useGrowth.ts +47 -25
- package/src/hooks/usePiWeb.ts +100 -14
- package/src/i18n.tsx +115 -28
- package/src/instrumentation-node.ts +35 -0
- package/src/instrumentation.ts +18 -0
- package/src/lib/agent-config.ts +134 -0
- package/src/lib/agent-manager.ts +243 -61
- package/src/lib/auth-throttle.ts +102 -0
- package/src/lib/auth.ts +35 -27
- package/src/lib/files-service.ts +61 -1
- package/src/lib/font.ts +84 -0
- package/src/lib/git-service.ts +5 -3
- package/src/lib/growth-service.ts +78 -30
- package/src/lib/growth-tracker.ts +91 -9
- package/src/lib/models-service.ts +36 -11
- package/src/lib/pi-settings.ts +10 -12
- package/src/lib/pi.ts +145 -18
- package/src/lib/plugins-service.ts +67 -35
- package/src/lib/remote/assets.json +4 -0
- package/src/lib/remote/mobile-proxy.ts +149 -0
- package/src/lib/remote/supervisor.ts +482 -0
- package/src/lib/security-service.ts +6 -11
- package/src/lib/session-import/claude.ts +45 -21
- package/src/lib/session-reader.ts +106 -3
- package/src/lib/skills-service.ts +34 -12
- package/src/lib/text-sanitize.ts +12 -0
- package/src/lib/theme.ts +3 -0
- package/src/lib/types.ts +16 -2
- package/src/lib/update-service.ts +0 -1
- package/src/lib/web-auth-shared.ts +5 -1
- package/src/lib/web-auth.ts +139 -22
- package/src/lib/web-launch-token.ts +55 -0
- package/src/lib/web-secret.ts +182 -0
- package/src/lib/workspace-store.ts +91 -7
- package/src/proxy.ts +46 -12
- package/.next/server/chunks/532.js +0 -1
- package/.next/static/chunks/2155.2f27fe7098987699.js +0 -1
- package/.next/static/chunks/2608.ec8ff1f5767c9056.js +0 -1
- package/.next/static/chunks/2716.93be8ad5c970c516.js +0 -1
- package/.next/static/chunks/4632.112d2e893d48d188.js +0 -1
- package/.next/static/chunks/4673.c1fb1580efc6ace7.js +0 -1
- package/.next/static/chunks/4686-f4a037d609cea3f2.js +0 -1
- package/.next/static/chunks/692-7992db0ae9cc3021.js +0 -1
- package/.next/static/chunks/app/_global-error/page-f77e9ede9808b18e.js +0 -1
- package/.next/static/chunks/app/api/agent/[id]/events/route-f77e9ede9808b18e.js +0 -1
- package/.next/static/chunks/app/api/agent/[id]/route-f77e9ede9808b18e.js +0 -1
- package/.next/static/chunks/app/api/agent/[id]/tree/route-f77e9ede9808b18e.js +0 -1
- package/.next/static/chunks/app/api/agent/new/route-f77e9ede9808b18e.js +0 -1
- package/.next/static/chunks/app/api/config/route-f77e9ede9808b18e.js +0 -1
- package/.next/static/chunks/app/api/files/route-f77e9ede9808b18e.js +0 -1
- package/.next/static/chunks/app/api/git/route-f77e9ede9808b18e.js +0 -1
- package/.next/static/chunks/app/api/growth/route-f77e9ede9808b18e.js +0 -1
- package/.next/static/chunks/app/api/health/route-f77e9ede9808b18e.js +0 -1
- package/.next/static/chunks/app/api/models/route-f77e9ede9808b18e.js +0 -1
- package/.next/static/chunks/app/api/pi-settings/route-f77e9ede9808b18e.js +0 -1
- package/.next/static/chunks/app/api/plugins/route-f77e9ede9808b18e.js +0 -1
- package/.next/static/chunks/app/api/prompts/route-f77e9ede9808b18e.js +0 -1
- package/.next/static/chunks/app/api/security/route-f77e9ede9808b18e.js +0 -1
- package/.next/static/chunks/app/api/sessions/[id]/export/route-f77e9ede9808b18e.js +0 -1
- package/.next/static/chunks/app/api/sessions/[id]/route-f77e9ede9808b18e.js +0 -1
- package/.next/static/chunks/app/api/sessions/import/route-f77e9ede9808b18e.js +0 -1
- package/.next/static/chunks/app/api/sessions/route-f77e9ede9808b18e.js +0 -1
- package/.next/static/chunks/app/api/skills/route-f77e9ede9808b18e.js +0 -1
- package/.next/static/chunks/app/api/update/route-f77e9ede9808b18e.js +0 -1
- package/.next/static/chunks/app/api/version/route-f77e9ede9808b18e.js +0 -1
- package/.next/static/chunks/app/api/web-auth/route-f77e9ede9808b18e.js +0 -1
- package/.next/static/chunks/app/api/workspaces/route-f77e9ede9808b18e.js +0 -1
- package/.next/static/chunks/app/login/page-52ef4841cbd199a8.js +0 -1
- package/.next/static/chunks/app/page-b51087831582ee37.js +0 -1
- package/.next/static/chunks/next/dist/client/components/builtin/app-error-f77e9ede9808b18e.js +0 -1
- package/.next/static/chunks/next/dist/client/components/builtin/forbidden-f77e9ede9808b18e.js +0 -1
- package/.next/static/chunks/next/dist/client/components/builtin/not-found-f77e9ede9808b18e.js +0 -1
- package/.next/static/chunks/next/dist/client/components/builtin/unauthorized-f77e9ede9808b18e.js +0 -1
- package/.next/static/chunks/webpack-c31263fd83d75ce6.js +0 -1
- package/.next/static/css/850c2fd130ffa2fc.css +0 -1
- package/.next/static/zsynuO_9Kx6nrXgkTUJ04/_buildManifest.js +0 -1
- /package/.next/static/{zsynuO_9Kx6nrXgkTUJ04 → JDGSR-TIbk9qZWcUNYIX3}/_ssgManifest.js +0 -0
|
@@ -1,4 +1 @@
|
|
|
1
|
-
"use strict";exports.id=686,exports.ids=[686],exports.modules={3672:(a,b,c)=>{c.d(b,{H4:()=>e,Pn:()=>g,WZ:()=>h});var d=c(29296);function e(a){if(!a||"object"!=typeof a)return;let b={};return"number"==typeof a.input&&(b.input=a.input),"number"==typeof a.output&&(b.output=a.output),"number"==typeof a.cacheRead&&(b.cacheRead=a.cacheRead),"number"==typeof a.cacheWrite&&(b.cacheWrite=a.cacheWrite),Object.keys(b).length?b:void 0}function f(a){if(null==a)return"";if("string"==typeof a)return a;if(Array.isArray(a))return a.map(f).join("");if("object"==typeof a){if("string"==typeof a.text)return a.text;if("string"==typeof a.thinking)return a.thinking}return""}class g{constructor(a=[]){this.streamingStart=null,this.turnStartedAt=null,this.toolIndex=new Map,this.toolStart=new Map,this.pendingToolArgs=new Map,this.dirty=[],this.entries=a.map(a=>({...a})),this.nextSeq=Math.max(0,...this.entries.map(a=>a.seq))+1}push(a){let b={...a,seq:this.nextSeq++};return this.entries.push(b),this.dirty.push(b),b}touch(a){a&&!this.dirty.includes(a)&&this.dirty.push(a)}drainDirty(){let a=this.dirty;return this.dirty=[],a}onEvent(a,b=Date.now()){switch(a.type){case"turn_start":this.turnStartedAt=b;break;case"message_start":{let c=a.message;if(c?.role==="user")this.push({kind:"user",ts:c.timestamp??b,detail:f(c.content)});else if(c?.role==="assistant"){let a=this.turnStartedAt??b;this.turnStartedAt=null,this.streamingStart={seq:this.nextSeq,t0:a},this.push({kind:"message",ts:a,title:"assistant"})}else if(c?.role==="toolResult"){let a=c.toolCallId?this.toolIndex.get(c.toolCallId):void 0;if(void 0!==a){let b=this.entries[a],g=(0,d.R)(f(c.content));b.detail=g.text||b.detail,b.encodingLoss=g.encodingLoss||b.encodingLoss,b.isError=!0===c.isError,b.tokens=e(c.usage)??b.tokens,this.touch(b)}}break}case"message_update":{let c=a.assistantMessageEvent;if(!c)break;if(("text_delta"===c.type||"thinking_delta"===c.type)&&this.streamingStart&&void 0===this.streamingStart.firstToken){this.streamingStart.firstToken=b;let a=this.entries[this.entries.length-1];a?.kind==="message"&&(a.timing={...a.timing??{},ttftMs:b-this.streamingStart.t0},this.touch(a))}"toolcall_end"===c.type&&c.toolCall&&this.pendingToolArgs.set(c.toolCall.id,c.toolCall.arguments);break}case"message_end":{let c=a.message;if(c?.role==="assistant"){let a=this.entries[this.entries.length-1],d=a?.kind==="message"?a:this.push({kind:"message",ts:b});for(let a of(this.streamingStart&&(d.timing={...void 0===this.streamingStart.firstToken?{}:{ttftMs:this.streamingStart.firstToken-this.streamingStart.t0,decodeMs:b-this.streamingStart.firstToken},durationMs:b-this.streamingStart.t0}),d.tokens=e(c.usage),d.thinking=f((c.content??[]).filter(a=>"thinking"===a.type).map(a=>a.thinking)),d.detail=f((c.content??[]).filter(a=>"text"===a.type)),d.isError="error"===c.stopReason,"error"===c.stopReason&&(d.title="error"),this.touch(d),this.streamingStart=null,c.content??[]))"toolCall"===a.type&&(this.toolIndex.set(a.id,this.entries.length),this.push({kind:"tool",ts:b,toolName:a.name,toolCallId:a.id,title:a.name,detail:JSON.stringify(a.arguments??{},null,2)}))}break}case"tool_execution_start":{this.toolStart.set(a.toolCallId,b);let c=this.toolIndex.get(a.toolCallId);if(void 0===c)c=this.entries.length,this.toolIndex.set(a.toolCallId,c),this.push({kind:"tool",ts:b,toolName:a.toolName,toolCallId:a.toolCallId,title:a.toolName,detail:JSON.stringify(a.args??{},null,2)});else{let b=this.entries[c];b.detail=JSON.stringify(a.args??{},null,2),this.touch(b)}break}case"tool_execution_update":{let b=this.toolIndex.get(a.toolCallId);if(void 0!==b){let c=this.entries[b],e=(0,d.R)(f(a.partialResult));e.text&&(c.preview=e.text.slice(-2e3)),c.encodingLoss=e.encodingLoss||c.encodingLoss,this.touch(c)}break}case"tool_execution_end":{let c=this.toolIndex.get(a.toolCallId);if(void 0!==c){let e=this.entries[c],g=(0,d.R)(f(a.result));e.detail=[e.detail,g.text].filter(Boolean).join("\n\n---\n\n"),e.encodingLoss=g.encodingLoss||e.encodingLoss,e.isError=!0===a.isError;let h=this.toolStart.get(a.toolCallId);void 0!==h&&(e.timing={...e.timing??{},durationMs:b-h}),this.touch(e)}this.toolStart.delete(a.toolCallId);break}case"compaction_start":this.push({kind:"compacted",ts:b,title:`compact (${a.reason})`});break;case"compaction_end":{let b=[...this.entries].reverse().find(a=>"compacted"===a.kind);b&&(a.errorMessage&&(b.isError=!0,b.detail=a.errorMessage),a.result?.tokensBefore!=null&&(b.tokens={input:a.result.tokensBefore}),this.touch(b))}}}}function h(a){let b=[],c=1,g=a=>"number"==typeof a?.timestamp?a.timestamp:Date.now();for(let h of a)if("message"===h.type){let a=h.message;if(!a)continue;if("user"===a.role)b.push({seq:c++,kind:"user",ts:g(a),detail:f(a.content)});else if("assistant"===a.role){let d=f((a.content??[]).filter(a=>"thinking"===a.type)),h=f((a.content??[]).filter(a=>"text"===a.type));for(let f of(b.push({seq:c++,kind:"message",ts:g(a),title:"error"===a.stopReason?"error":"assistant",detail:h,thinking:d||void 0,tokens:e(a.usage),isError:"error"===a.stopReason||void 0}),a.content??[]))"toolCall"===f.type&&b.push({seq:c++,kind:"tool",ts:g(a),toolName:f.name,toolCallId:f.id,title:f.name,detail:JSON.stringify(f.arguments??{},null,2)})}else if("toolResult"===a.role){let c=b.findLast?.(b=>"tool"===b.kind&&(a.toolCallId?b.toolCallId===a.toolCallId:b.toolName===a.toolName));if(c){let b=(0,d.R)(f(a.content));c.detail=[c.detail,b.text].filter(Boolean).join("\n\n---\n\n"),c.encodingLoss=b.encodingLoss||c.encodingLoss,c.isError=!0===a.isError||void 0,c.tokens=e(a.usage)??c.tokens}}}else"compaction"===h.type?b.push({seq:c++,kind:"compacted",ts:g(h),title:"compact",tokens:null!=h.tokensBefore?{input:h.tokensBefore}:e(h.usage)}):"branch_summary"===h.type&&b.push({seq:c++,kind:"compacted",ts:g(h),title:"branch summary",tokens:e(h.usage),detail:h.summary});return b}},14719:(a,b,c)=>{c.d(b,{X:()=>e});var d=c(77598);function e(a){let b=new Map,c=new Map,e=!1,f=(c,f,g,h)=>{if(e||!a.hasViewers()||f?.signal?.aborted)return Promise.resolve(g);let i=(0,d.randomUUID)();return new Promise(d=>{let e=c=>{let e=b.get(i);e&&(b.delete(i),e.timer&&clearTimeout(e.timer),e.removeAbortListener?.(),a.publish({type:"extension_ui_resolved",id:i,ts:Date.now()}),d(c?h(c):g))},j={type:"extension_ui",id:i,...c,timeout:f?.timeout,ts:Date.now()},k={request:j,resolve:a=>e(a)};k.timer=setTimeout(()=>e(null),f?.timeout??6e5),k.timer.unref?.();let l=()=>e(null);f?.signal?.addEventListener("abort",l,{once:!0}),k.removeAbortListener=()=>f?.signal?.removeEventListener("abort",l),b.set(i,k),a.publish(j)})};return{uiContext:{select:(a,b,c)=>f({method:"select",title:a,options:b},c,void 0,a=>a.cancelled?void 0:a.value),confirm:(a,b,c)=>f({method:"confirm",title:a,message:b},c,!1,a=>!a.cancelled&&!0===a.confirmed),input:(a,b,c)=>f({method:"input",title:a,placeholder:b},c,void 0,a=>a.cancelled?void 0:a.value),notify:(b,c)=>{a.publish({type:"extension_ui",id:(0,d.randomUUID)(),method:"notify",message:b,notifyType:c??"info",ts:Date.now()})},setStatus:(b,e)=>{void 0===e?c.delete(b):c.set(b,e),a.publish({type:"extension_ui",id:(0,d.randomUUID)(),method:"setStatus",statusKey:b,statusText:e,ts:Date.now()})},setWorkingMessage:b=>{a.publish({type:"extension_ui",id:(0,d.randomUUID)(),method:"setWorkingMessage",message:b,ts:Date.now()})},onTerminalInput:()=>()=>{},setWorkingVisible:()=>{},setWorkingIndicator:()=>{},setHiddenThinkingLabel:()=>{},setWidget:()=>{},setFooter:()=>{},setHeader:()=>{},setTitle:()=>{},custom:async()=>void 0,pasteToEditor:()=>{},setEditorText:()=>{},getEditorText:()=>"",editor:async()=>void 0,addAutocompleteProvider:()=>{},setEditorComponent:()=>{},getEditorComponent:()=>void 0,getAllThemes:()=>[],getTheme:()=>void 0,setTheme:()=>{},getToolsExpanded:()=>!1,setToolsExpanded:()=>{}},statuses:c,getPendingRequests:()=>[...b.values()].map(({request:a})=>({...a,options:a.options?[...a.options]:void 0})),respond(a,c){let d=b.get(a);return!!d&&(d.resolve(c),!0)},dispose(){for(let a of(e=!0,b.values()))a.resolve({cancelled:!0});b.clear()}}}},28686:(a,b,c)=>{c.a(a,async(a,d)=>{try{c.d(b,{B1:()=>af,H$:()=>w,Hx:()=>_,Rq:()=>aj,SG:()=>N,Sj:()=>ad,al:()=>ag,bS:()=>L,g7:()=>ah,lX:()=>ai,tX:()=>ae,vJ:()=>ak});var e=c(73024),f=c(77598),g=c(76760),h=c.n(g),i=c(75430),j=c(87982),k=c(14719),l=c(35851),m=c(34007),n=c(3672),o=c(31374),p=c(29296),q=c(62433),r=c(34070),s=c(75554),t=c(6512),u=a([i,j,o,q,s]);[i,j,o,q,s]=u.then?(await u)():u;let al=globalThis,am=al.__piWebSessions??=new Map;function v(a){if(null==a)return"";if("string"==typeof a)return a;if(Array.isArray(a))return a.map(v).join("");if("object"==typeof a){if("string"==typeof a.text)return a.text;if("string"==typeof a.thinking)return a.thinking}return""}function w(a,b){if(!a||"object"!=typeof a)return{role:"other",content:[]};let c={role:"other",content:[]};b?c.id=b:"string"==typeof a.id&&(c.id=a.id),"number"==typeof a.timestamp&&(c.timestamp=a.timestamp);let d=[];for(let b of Array.isArray(a.content)?a.content:"string"==typeof a.content?[{type:"text",text:a.content}]:[])b&&"object"==typeof b&&("text"===b.type&&"string"==typeof b.text?d.push({type:"text",text:b.text}):"thinking"===b.type&&"string"==typeof b.thinking?d.push({type:"thinking",thinking:b.thinking}):"toolCall"===b.type?d.push({type:"toolCall",id:String(b.id??""),name:String(b.name??""),arguments:b.arguments}):"image"===b.type&&"string"==typeof b.data&&"string"==typeof b.mimeType&&d.push({type:"image",data:b.data,mimeType:b.mimeType}));if(c.content=d,"user"===a.role)c.role="user";else if("assistant"===a.role)c.role="assistant",c.stopReason=a.stopReason,c.errorMessage=a.errorMessage??void 0,c.usage=(0,n.H4)(a.usage),a.usage?.cost?.total!=null&&(c.usage={...c.usage,cost:{total:a.usage.cost.total}}),c.model="string"==typeof a.model?a.model:void 0,c.provider="string"==typeof a.provider?a.provider:void 0;else if("toolResult"===a.role){c.role="toolResult";let b=(0,p.R)(v(a.content));c.content=[{type:"toolResult",toolCallId:a.toolCallId,text:b.text,isError:!0===a.isError,encodingLoss:b.encodingLoss||void 0,patch:y(a.details)}]}return c}function x(a,b){return{...w(b,function(a,b){for(let c of[...a.getEntries()].reverse())if(c?.type==="message"&&c.message===b)return c.id}(a.sm,b)),streamId:function(a,b){if(!b||"object"!=typeof b)return;a.messageIds??=new WeakMap;let c=a.messageIds.get(b);return c||(c=(0,f.randomUUID)(),a.messageIds.set(b,c)),c}(a,b)}}function y(a){let b=a?.patch;return"string"==typeof b&&b.trim()?b.slice(0,6e4):void 0}let an=new Map;function z(a){return{target:"string"==typeof a?.path?a.path:"string"==typeof a?.file_path?a.file_path:"",content:"string"==typeof a?.content?a.content:void 0}}function A(a){if(null!=a){if("string"==typeof a)return a.slice(-4e3);if(Array.isArray(a))return a.map(v).join("").slice(-4e3)||void 0;if("object"==typeof a){let b=v(a.content);if(b)return b.slice(-4e3);try{return JSON.stringify(a).slice(-4e3)}catch{}}}}let ao=new WeakMap;function B(a){let b=ao.get(a);if(b){for(;b.length>0&&null!==b[0].events;)for(let c of b.shift().events)C(a,c);0===b.length&&ao.delete(a)}}function C(a,b){if(a.disposed)return;a.seq+=1;let c=JSON.stringify(b);for(let b of(a.buffer.push({seq:a.seq,json:c}),a.buffer.length>400&&a.buffer.shift(),a.subscribers))try{b(a.seq,c)}catch{a.subscribers.delete(b)}}function D(a,b){let c=ao.get(a);if(!c)return C(a,b);c.push({events:[b]}),B(a)}function E(a,b){let c=b.model;D(a,{type:"model",provider:c?String(c.provider??""):void 0,model:c?String(c.id??""):void 0,thinkingLevel:String(b.thinkingLevel??""),thinkingLevels:b.getAvailableThinkingLevels(),ts:Date.now()})}function F(a,b){if(!a.desiredThinkingLevel)return;let c=(0,t.Kt)(b.model,a.desiredThinkingLevel);c!==b.thinkingLevel&&b.setThinkingLevel(c)}function G(a){let b=0,c=0,d=0,e=0,f=0,g=0;for(let h of a.ledger.entries){if("tool"===h.kind){c+=Math.max(0,h.timing?.durationMs??0);continue}"message"===h.kind&&(b+=Math.max(0,h.timing?.durationMs??0),h.timing?.ttftMs!==void 0&&(d+=Math.max(0,h.timing.ttftMs),e+=1),h.timing?.decodeMs!==void 0&&h.tokens?.output!==void 0&&(f+=Math.max(0,h.timing.decodeMs),g+=Math.max(0,h.tokens.output)))}return{llmMs:b,toolMs:c,ttftMs:d,ttftSteps:e,decodeMs:f,decodeTokens:g}}function H(a){if(!a.session)return null;try{let b=a.session.getSessionStats();return{userMessages:b.userMessages,assistantMessages:b.assistantMessages,toolCalls:b.toolCalls,totalMessages:b.totalMessages,tokens:b.tokens,cost:b.cost,...G(a)}}catch{return null}}function I(a){if(!a.session)return null;let b=H(a),c=a.session.getContextUsage()??null;return{type:"usage",stats:b,contextUsage:c?{tokens:c.tokens,contextWindow:c.contextWindow,percent:c.percent}:null,ts:Date.now()}}function J(a){let b=I(a);b&&D(a,b)}function K(a){return a.growth&&a.growth.version!==l.I&&(a.growth.dispose(),a.growth=null),a.growth??=(0,l.k)({cwd:a.cwd,sessionPath:a.sessionPath,publish:b=>D(a,b),entries:()=>a.sm.getEntries()})}async function L(a){return M(a),K(a).recordNow()}function M(a){a.lastActive=Date.now()}function N(a){let b=am.get(a);if(!b){if(!(0,e.existsSync)(a))throw new q.BV("session not found");let c=(0,j.G1)(a);b=O(a,c.getCwd()||process.cwd(),c)}return M(b),b}function O(a,b,c){let d=[];try{d=(0,n.WZ)(c.getEntries())}catch{}let e={sessionPath:a,cwd:b,sm:c,session:null,creating:null,subscribers:new Set,buffer:[],seq:0,inflight:null,ui:null,growth:null,ledger:new n.Pn(d),lastActive:Date.now(),toolPreset:"readonly",resourceVersion:0,resourceReloadPending:!1,resourceReloading:!1,promptSubmitting:!1,runActive:!1,disposed:!1,messageIds:new WeakMap};return am.set(a,e),e}function P(a,b=(0,j.ye)(a)){let c=b.getAgentsFiles().agentsFiles.map(a=>({path:a.path,content:a.content,source:"project"})),d=b.getAppendSystemPrompt(),e=b.getAppendSystemPromptSources();return[...c,...d.map((a,b)=>({path:e[b]?.path??`Appended system prompt ${b+1}`,content:a,source:"extension"}))]}async function Q(a,b,c){let d={systemPrompt:0,systemTools:0,customTools:0,memory:0,skills:0,compacted:0,autoCompactBuffer:0};if(!b)return d;try{let a=b.systemPrompt??"",f=c.filter(a=>"project"===a.source).map(a=>a.content).join("\n\n");d.memory=(0,r.ec)(f);try{let{skills:c}=b.resourceLoader.getSkills();if(c.length&&a){let b=a.indexOf("The following skills provide specialized instructions"),c=a.indexOf("</available_skills>");b>=0&&c>b&&(d.skills=(0,r.ec)(a.slice(b,c+19)))}}catch{}let g=d.memory+d.skills;d.systemPrompt=Math.max(0,(0,r.ec)(a)-g);try{for(let a of b.getAllTools()){let b=(0,r.ec)(JSON.stringify({name:a.name,description:a.description,parameters:a.parameters,promptGuidelines:a.promptGuidelines}));a.sourceInfo?.source==="builtin"?d.systemTools+=b:d.customTools+=b}}catch{}try{var e;let a=(e=b,e.sm?.getEntries?.()??e.sessionManager?.getEntries?.()??[]);for(let b=a.length-1;b>=0;b-=1){let c=a[b];if(c?.type==="compaction"&&"string"==typeof c.summary){d.compacted=(0,r.ec)(c.summary);break}}}catch{}try{let a=await (0,s.J0)();a.compaction.enabled&&(d.autoCompactBuffer=a.compaction.reserveTokens)}catch{}}catch{}return d}function R(a,b){let c=a.ledger.entries[0]?.ts??Date.now(),d=[];b?.systemPrompt&&d.push({seq:-1,kind:"system",ts:c,title:"Initial System Prompt",detail:b.systemPrompt});try{P(a.cwd,a.session?.resourceLoader).forEach((a,b)=>d.push({seq:-2-b,kind:"context",ts:c,title:a.path,detail:a.content}))}catch{}return d}function S(a,b){for(let c of R(a,b))D(a,{type:"traj",entry:c,ts:Date.now()})}async function T(a){if(a.disposed)throw Error("session is disposed");return a.creating?a.creating:a.session?a.session:(a.creating=(async()=>{let b;await (0,j.Df)(a.cwd);let c=await (0,j.Yb)(a.cwd);try{var d,f;let g,l;if(a.disposed)throw Error("session is disposed");let{session:m}=await (0,j.az)({cwd:a.cwd,agentDir:(0,j.$M)(),sessionManager:a.sm,modelRuntime:await (0,j.uU)(),resourceLoader:c,settingsManager:(0,j.vT)(a.cwd)});if(b=m,a.disposed)throw Error("session is disposed");a.session=m,d=a,g=(f=m).setActiveToolsByName.bind(f),f.setActiveToolsByName=a=>{let b=V(d,f);g([...new Set(a)].filter(a=>b.includes(a)))},l=f.reload.bind(f),f.reload=async a=>{if(d.disposed)throw Error("session is disposed");if(U(d))throw Error("session is busy");d.resourceReloading=!0;try{await (0,j.YW)(async()=>{if(d.disposed||d.runActive||!f.isIdle)throw Error("session is busy");await l({beforeSessionStart:async()=>{W(d,f),await a?.beforeSessionStart?.(),W(d,f)}})}),d.resourceVersion=(0,j.Ec)(d.cwd)}finally{W(d,f),d.resourceReloading=!1,d.disposed||(X(d,f),S(d,f),ab(d))}},W(a,m),m.subscribe(b=>{a.disposed||function(a,b){a.ledger.onEvent(b),K(a).onEvent(b);let c=Date.now();switch(b.type){case"message_start":{let d=b.message,e=x(a,d);"assistant"===e.role&&(a.inflight=d,a.inflightId=e.streamId,a.inflightIndex=a.session?.messages.length,e.stopReason="pending",e.content=e.content.map(a=>"text"===a.type?{...a,text:""}:"thinking"===a.type?{...a,thinking:""}:a)),("user"===e.role||"assistant"===e.role)&&D(a,{type:"message",message:e,phase:"start",ts:c});break}case"message_update":{let d=b.assistantMessageEvent;if(b.message&&(a.inflight=b.message,a.inflightId&&a.messageIds.set(b.message,a.inflightId)),!d)break;"text_delta"===d.type&&"string"==typeof d.delta?D(a,{type:"delta",kind:"text",contentIndex:d.contentIndex,delta:d.delta,messageId:a.inflightId,ts:c}):"thinking_delta"===d.type&&"string"==typeof d.delta&&D(a,{type:"delta",kind:"thinking",contentIndex:d.contentIndex,delta:d.delta,messageId:a.inflightId,ts:c});break}case"message_end":{let d,e,f=b.message;f?.role==="assistant"&&(a.inflightId&&a.messageIds.set(f,a.inflightId),a.inflight=null,a.inflightId=void 0,a.inflightIndex=void 0),d=ao.get(a)??[],e={events:null},d.push(e),ao.set(a,d),queueMicrotask(()=>{e.events=(()=>{let b=x(a,f);"assistant"===b.role&&(b.endedAt=c);let d=I(a);return d?[{type:"message",message:b,phase:"end",ts:c},d]:[{type:"message",message:b,phase:"end",ts:c}]})(),B(a)});break}case"tool_execution_start":b.toolName?.toLowerCase()==="write"&&function(a,b,c,d){let{target:f}=z(d);if(f)try{let d=h().isAbsolute(f)?f:h().resolve(a,f),g=(0,e.statSync)(d);if(!g.isFile()||g.size>524288)return;let i=(0,e.readFileSync)(d,"utf8");if(i.includes("\0"))return;an.size>256&&an.clear(),an.set(`${b}\u0000${c}`,i)}catch{}}(a.cwd,a.sessionPath,b.toolCallId,b.args),D(a,{type:"tool",id:b.toolCallId,name:b.toolName,args:b.args,state:"running",ts:c});break;case"tool_execution_update":{let d=(0,p.R)(A(b.partialResult)??"");D(a,{type:"tool",id:b.toolCallId,name:b.toolName,args:b.args,state:"running",partialResult:d.text||void 0,encodingLoss:d.encodingLoss||void 0,ts:c});break}case"tool_execution_end":{let d=(0,p.R)(A(b.result)??"");D(a,{type:"tool",id:b.toolCallId,name:b.toolName,args:b.args,state:"done",result:d.text||void 0,isError:b.isError,encodingLoss:d.encodingLoss||void 0,patch:y(b.result?.details)??(b.toolName?.toLowerCase()==="write"?function(a,b,c,d){let e=`${b}\u0000${c}`,f=an.get(e);if(an.delete(e),void 0===f)return;let{target:g,content:h}=z(d);if(void 0!==h&&h!==f)try{return(0,i.generateUnifiedPatch)(g,f,h).slice(0,6e4)}catch{return}}(a.cwd,a.sessionPath,b.toolCallId,b.args):void 0),ts:c}),J(a);break}case"agent_start":a.runActive=!0,D(a,{type:"status",isStreaming:!0,state:"running",ts:c});break;case"agent_end":J(a);break;case"agent_settled":a.runActive=!1,D(a,{type:"status",isStreaming:!1,state:"idle",ts:c}),J(a),a.resourceReloadPending&&queueMicrotask(()=>void ac(a));break;case"queue_update":D(a,{type:"queue",steering:[...b.steering],followUp:[...b.followUp],ts:c});break;case"compaction_start":D(a,{type:"status",isStreaming:!0,state:"compacting",ts:c}),D(a,{type:"compaction",phase:"start",reason:b.reason,ts:c});break;case"compaction_end":D(a,{type:"compaction",phase:"end",reason:b.reason,errorMessage:b.errorMessage,ts:c}),J(a),"manual"===b.reason&&(D(a,{type:"status",isStreaming:U(a),state:U(a)?"running":"idle",ts:c}),a.resourceReloadPending&&queueMicrotask(()=>void ac(a)));break;case"session_info_changed":D(a,{type:"name",name:b.name??"",ts:c});break;case"thinking_level_changed":a.session?E(a,a.session):D(a,{type:"model",thinkingLevel:b.level,ts:c});break;case"auto_retry_start":D(a,{type:"retry",attempt:Number(b.attempt)||0,maxAttempts:Number(b.maxAttempts)||0,message:String(b.errorMessage??""),ts:c})}for(let b of a.ledger.drainDirty())D(a,{type:"traj",entry:b,ts:Date.now()})}(a,b)});let n=(0,k.X)({publish:b=>D(a,b),hasViewers:()=>!a.disposed&&a.subscribers.size>0});if(a.ui=n,await m.bindExtensions({mode:"rpc",uiContext:n.uiContext,onError:b=>{D(a,{type:"error",message:`扩展 ${b.extensionPath.split(/[\\/]/).pop()} 在 ${b.event} 出错:${b.error}`,ts:Date.now()})},abortHandler:()=>void m.abort().catch(()=>void 0)}),a.disposed)throw Error("session is disposed");return W(a,m),a.resourceVersion=(0,j.Ec)(a.cwd),S(a,m),X(a,m),ab(a),J(a),m}catch(d){throw a.ui?.dispose(),a.ui=null,b?.dispose(),c.getExtensions().runtime.invalidate(),a.session=null,d}})().catch(b=>{throw a.disposed||D(a,{type:"error",message:String(b?.message??b),ts:Date.now()}),b}).finally(()=>{a.creating=null}),a.creating)}function U(a){return a.promptSubmitting||a.resourceReloading||a.runActive||!!(a.session&&!a.session.isIdle)}function V(a,b){let c=a.customActiveTools??("full"===a.toolPreset?void 0:j.Ax[a.toolPreset]);return Y(b).filter(a=>!c||c.includes(a))}function W(a,b){b.setActiveToolsByName(V(a,b))}function X(a,b){D(a,{type:"tools",active:Z(b),all:Y(b),toolPreset:a.toolPreset,customActiveTools:a.customActiveTools??null,ts:Date.now()})}function Y(a){let b=a.getAllTools?.();return b?b.map(a=>a.name):[]}function Z(a){return a.getActiveToolNames?.()??[]}function $(a){if(!a.disposed){a.disposed=!0,a.ui?.dispose(),a.ui=null,a.growth?.dispose(),a.growth=null;try{a.session?.dispose()}catch{}for(let b of(a.creating&&a.creating.then(a=>{try{a?.dispose()}catch{}}).catch(()=>void 0),a.subscribers))try{b(a.seq,JSON.stringify({type:"status",isStreaming:!1,state:"disposed",ts:Date.now()}))}catch{}a.subscribers.clear(),am.delete(a.sessionPath)}}async function _(a){let b=am.get(a);if(!b)return;let c=b.session??(b.creating?await b.creating.catch(()=>null):null);c?.isStreaming&&await c.abort().catch(()=>void 0),$(b)}function aa(a){let b=a.session?.resourceLoader??(0,j.v9)(a.cwd)??(0,j.ye)(a.cwd),c=[],d=[];try{let a=b.getSkills();for(let b of(d=a.skills.map(a=>({name:String(a.name??""),description:String(a.description??"")})),a.diagnostics??[]))c.push({kind:"skill",path:b.path,message:b.message})}catch{d=[]}let e=[];try{let a=b.getPrompts();for(let b of(e=a.prompts.map(a=>({name:String(a.name??""),description:String(a.description??""),argumentHint:a.argumentHint})),a.diagnostics??[]))c.push({kind:"prompt",path:b.path,message:b.message})}catch{e=[]}try{for(let a of b.getExtensions().errors??[])c.push({kind:"extension",path:a.path,message:a.error})}catch{}let f=[];if(a.session)try{let b=a.session.extensionRunner;if(b)for(let a of(f=b.getRegisteredCommands().map(a=>({name:a.invocationName,description:String(a.description??""),source:String(a.sourceInfo?.path??"").split(/[\\/]/).pop()??""})),b.getCommandDiagnostics()??[]))c.push({kind:"command",path:a.path,message:a.message})}catch{f=[]}return{skills:d,promptTemplates:e,extensionCommands:f,projectTrust:(0,j.af)(a.cwd),resourceDiagnostics:c}}function ab(a){D(a,{type:"resources",...aa(a),ts:Date.now()})}async function ac(a){if(a.disposed||!a.session||a.creating||U(a))return!1;a.resourceReloadPending=!1;try{return await a.session.reload(),!0}catch(b){return D(a,{type:"error",message:`重载扩展失败:${String(b?.message??b)}`,ts:Date.now()}),!1}finally{a.resourceReloadPending&&!U(a)&&queueMicrotask(()=>void ac(a))}}async function ad(a){let b=a=>"win32"===process.platform?a.replace(/\\/g,"/").toLowerCase():a.replace(/\\/g,"/"),c=0;for(let d of am.values())if(!a||b(d.cwd)===b(a)){if(!d.session){d.subscribers.size>0&&ab(d);continue}if(d.creating||U(d)){d.resourceReloadPending=!0,D(d,{type:"error",message:"资源已更新,将在本轮结束后生效",ts:Date.now()}),ab(d);continue}await ac(d)&&(c+=1)}return c}async function ae(a){let b,c,d,e;M(a),await (0,j.Df)(a.cwd);try{a.session&&U(a)?((0,j.Dc)(a.cwd)||a.resourceVersion!==(0,j.Ec)(a.cwd))&&(a.resourceReloadPending=!0):(await (0,j.jz)(a.cwd),a.session&&(a.resourceReloadPending||a.resourceVersion!==(0,j.Ec)(a.cwd))&&(a.resourceReloadPending=!0,await ac(a)))}catch{}let f=a.session,g=[],h=!1,i=["off","minimal","low","medium","high","xhigh","max"];if(f){let e=function(a,b){if(!a.inflightId||void 0===a.inflightIndex)return!1;let c=b.messages[a.inflightIndex];return!!c&&"assistant"===c.role&&(a.messageIds.set(c,a.inflightId),!0)}(a,f);if(g=f.messages.map(b=>x(a,b)),!e&&a.inflight){let b=x(a,a.inflight);"assistant"===b.role&&g.push({...b,stopReason:"pending"})}b=a.seq;let j=f.model;j&&(c={provider:String(j.provider??""),id:String(j.id??""),name:String(j.name??j.id??"")}),d=String(f.thinkingLevel??"");try{i=f.getAvailableThinkingLevels()}catch{}h=U(a)}else{try{g=a.sm.buildContextEntries().filter(a=>"message"===a.type&&a.message).map(a=>w(a.message,a.id))}catch{g=[]}try{let b=a.sm,e=b.buildSessionContext?.();if(e?.model&&(c={provider:e.model.provider,id:e.model.modelId,name:e.model.modelId}),d=e?.thinkingLevel,e?.model){let a=(await (0,j.uU)()).getModel(e.model.provider,e.model.modelId);a&&(i=(0,t.W8)(a),d&&(d=(0,t.Kt)(a,d)))}}catch{}}let k=f?H(a):function(a){let b=0,c=0,d=0,e=0,f={input:0,output:0,cacheRead:0,cacheWrite:0,total:0},g=0,h=a=>{a&&"object"==typeof a&&(f.input+=Number(a.input??0),f.output+=Number(a.output??0),f.cacheRead+=Number(a.cacheRead??0),f.cacheWrite+=Number(a.cacheWrite??0),g+=Number(a.cost?.total??0))};for(let f of a.sm.getEntries()){if(("branch_summary"===f.type||"compaction"===f.type)&&f.usage&&h(f.usage),"message"!==f.type||!f.message)continue;e+=1;let a=f.message;"user"===a.role?b+=1:"assistant"===a.role?(c+=1,d+=Array.isArray(a.content)?a.content.filter(a=>a?.type==="toolCall").length:0,h(a.usage)):"toolResult"===a.role&&h(a.usage)}return f.total=f.input+f.output+f.cacheRead+f.cacheWrite,{userMessages:b,assistantMessages:c,toolCalls:d,totalMessages:e,tokens:f,cost:g,...G(a)}}(a),l=null;if(f){let a=f.getContextUsage()??null;l=a?{tokens:a.tokens,contextWindow:a.contextWindow,percent:a.percent}:null}else if(c)try{let b=(await (0,j.uU)()).getModels(c.provider).find(a=>String(a.id)===c.id),d=Number(b?.contextWindow??0),e=0,f=a.sm.getEntries(),h=!1;for(let a=f.length-1;a>=0;a--){let b=f[a];if("compaction"===b.type||"branch_summary"===b.type){h=!0;break}if("message"===b.type&&b.message?.role==="assistant"&&"error"!==b.message.stopReason&&"aborted"!==b.message.stopReason)break}for(let a=g.length-1;a>=0&&!h;a--){let b=g[a];if("assistant"===b.role&&b.usage){e=Number(b.usage.input??0)+Number(b.usage.cacheRead??0)+Number(b.usage.cacheWrite??0)+Number(b.usage.output??0);break}}d>0&&e>0?l={tokens:e,contextWindow:d,percent:e/d*100}:d>0&&(l={tokens:null,contextWindow:d,percent:null})}catch{}let o=f?{active:Z(f),all:Y(f).map(a=>({name:a}))}:{active:[],all:[]},p=f?{steering:[...f.getSteeringMessages()],followUp:[...f.getFollowUpMessages()]}:{steering:[],followUp:[]},q="";try{q=a.sm.getSessionName?.()??""}catch{q=""}let r=[];try{r=P(a.cwd,a.session?.resourceLoader)}catch{r=[]}try{e=await Q(a.cwd,a.session,r)}catch{e=void 0}let s=aa(a),u=a.ledger.entries.length?a.ledger.entries:function(a){try{return(0,n.WZ)(a.sm.getEntries())}catch{return[]}}(a),v=[...R(a,f),...u];return{seq:b??a.seq,sessionPath:a.sessionPath,cwd:a.cwd,name:q,contextFiles:r.map(a=>a.path),contextResources:r,contextBreakdown:e,...s,messages:g,userTurns:(0,m.g)(a.sm.getEntries()),growthError:a.growth?.getError?.()??null,model:c,thinkingLevel:d,thinkingLevels:i,toolPreset:a.toolPreset,customActiveTools:a.customActiveTools??null,extensionUiRequests:a.ui?.getPendingRequests()??[],tools:o,stats:k,contextUsage:l,queue:p,trajectory:v,isStreaming:h}}function af(a,b,c){if(M(a),c<0||c>a.seq)return!1;let d=a.buffer.filter(a=>a.seq>c);if(d.length!==a.seq-c)return!1;let e=new Set(a.ui?.getPendingRequests().map(a=>a.id));if(d.some(a=>{let b=JSON.parse(a.json);return"extension_ui"===b.type&&["select","confirm","input"].includes(b.method)&&!e.has(b.id)}))return!1;for(let c of(a.subscribers.add(b),d))b(c.seq,c.json);return!0}function ag(a,b){a.subscribers.delete(b)}async function ah(a,b){M(a);try{switch(b.cmd){case"prepare":return await T(a),{ok:!0};case"prompt":{let c=(b.text??"").trim();if(!c&&!b.images?.length)return{ok:!1,error:"empty prompt"};if(a.promptSubmitting||a.resourceReloading)return{ok:!1,error:"session is busy accepting another command"};a.promptSubmitting=!0;try{let d=await T(a);if(a.disposed)throw Error("session is disposed");if((d.isStreaming||a.runActive)&&!b.behavior)return{ok:!1,error:"session is busy; choose steer or followUp"};if(d.isStreaming||await Promise.race([K(a).prepare().catch(()=>void 0),new Promise(a=>setTimeout(a,5e3))]),a.disposed)throw Error("session is disposed");return await new Promise(e=>{let f=!1;d.prompt(c,{images:b.images,streamingBehavior:b.behavior,source:"rpc",preflightResult:a=>{a&&(f=!0,e({ok:!0,data:{accepted:!0}}))}}).then(()=>{f||e({ok:!1,error:"prompt completed without acceptance"})},b=>{let c=String(b?.message??b);f?D(a,{type:"error",message:c,ts:Date.now()}):e({ok:!1,error:c})})})}finally{a.promptSubmitting=!1,a.disposed||D(a,{type:"status",isStreaming:U(a),state:U(a)?"running":"idle",ts:Date.now()}),a.resourceReloadPending&&queueMicrotask(()=>void ac(a))}}case"steer":case"followUp":{if(a.promptSubmitting||a.resourceReloading)return{ok:!1,error:"session is busy accepting another command"};let c=await T(a);if(a.promptSubmitting||a.resourceReloading||!c.isStreaming)return{ok:!1,error:"session is not accepting queued messages"};return await c[b.cmd](b.text??"",b.images),{ok:!0}}case"clearQueue":{if(!a.session)return{ok:!0,data:{steering:[],followUp:[]}};let b=a.session.clearQueue();return D(a,{type:"queue",steering:[],followUp:[],ts:Date.now()}),{ok:!0,data:b}}case"abort":{if(!a.session)return{ok:!0,data:{steering:[],followUp:[]}};let b=a.session.clearQueue();return await a.session.abort(),D(a,{type:"status",isStreaming:!1,state:"aborted",ts:Date.now()}),{ok:!0,data:b}}case"compact":{let c=await T(a);return await c.compact(b.instructions||void 0),{ok:!0}}case"setModel":{let c=await T(a),d=(await (0,j.uU)()).getModels(b.provider).find(a=>a.id===b.modelId);if(!d)return{ok:!1,error:`unknown model ${b.provider}/${b.modelId}`};return await c.setModel(d,{persist:!1}),F(a,c),E(a,c),{ok:!0,data:{thinkingLevel:c.thinkingLevel,thinkingLevels:c.getAvailableThinkingLevels()}}}case"setThinkingLevel":{let c=await T(a),d=String(b.level??"medium"),e=(0,t.Kt)(c.model,d);return a.desiredThinkingLevel=d,c.setThinkingLevel(e),E(a,c),{ok:!0,data:{requested:d,thinkingLevel:c.thinkingLevel,clamped:c.thinkingLevel!==d}}}case"setToolPreset":{let c=b.preset;if(!Object.hasOwn(j.Ax,c))return{ok:!1,error:"invalid tool preset"};if(U(a))return{ok:!1,error:"cannot change tools while the agent is running"};let d=await T(a);if(U(a))return{ok:!1,error:"cannot change tools while the agent is running"};return a.toolPreset=c,a.customActiveTools=void 0,W(a,d),S(a,d),X(a,d),{ok:!0}}case"setActiveTools":{if(U(a))return{ok:!1,error:"cannot change tools while the agent is running"};let c=await T(a);if(U(a))return{ok:!1,error:"cannot change tools while the agent is running"};let d=Array.isArray(b.names)?b.names.map(String):[],e=Y(c),f=[...new Set(d)].filter(a=>e.includes(a));if(0===f.length)return{ok:!1,error:"cannot disable all tools"};return a.customActiveTools=f,W(a,c),S(a,c),X(a,c),{ok:!0,data:{active:Z(c)}}}case"cycleModel":{let c=await T(a),d=await c.cycleModel(b.direction??"forward");if(d?.model)return F(a,c),E(a,c),{ok:!0,data:{model:String(d.model.id??""),thinkingLevel:c.thinkingLevel}};return{ok:!1,error:"no scoped models to cycle"}}case"navigate":{let c=await T(a),d=String(b.entryId??"");if(!d)return{ok:!1,error:"missing entryId"};let e=await c.navigateTree(d);return{ok:!e?.cancelled,data:{cancelled:e?.cancelled===!0,editorText:e?.editorText}}}case"editAndResend":{let c=String(b.entryId??""),d=(b.text??"").trim();if(!c)return{ok:!1,error:"missing entryId"};if(!d)return{ok:!1,error:"empty prompt"};if(a.promptSubmitting||a.resourceReloading)return{ok:!1,error:"session is busy accepting another command"};a.promptSubmitting=!0;try{let b=await T(a);if(a.disposed)throw Error("session is disposed");if(b.isStreaming||a.runActive){await b.abort().catch(()=>void 0);for(let c=0;c<50&&!a.disposed&&(b.isStreaming||a.runActive);c+=1)await new Promise(a=>setTimeout(a,100))}if(a.disposed)throw Error("session is disposed");let e=await b.navigateTree(c);if(e?.cancelled)return{ok:!1,error:"edit cancelled"};return await K(a).prepare().catch(()=>void 0),await b.prompt(d),{ok:!0}}finally{a.promptSubmitting=!1}}case"rename":{let c=(b.text??"").trim();return a.session?a.session.setSessionName(c):a.sm.appendSessionInfo(c),D(a,{type:"name",name:c,ts:Date.now()}),{ok:!0}}case"extensionUiResponse":return a.ui?.respond(String(b.requestId),{value:b.value,confirmed:b.confirmed,cancelled:b.cancelled})?{ok:!0}:{ok:!1,error:"no pending extension request"};case"reload":{if(U(a))return{ok:!1,error:"session is busy"};let b=await T(a);return await b.reload(),{ok:!0}}case"fork":{let c=(b.entryId?j.Cv.open(a.sessionPath).createBranchedSession(b.entryId):j.Cv.forkFrom(a.sessionPath,a.cwd).getSessionFile())??"";if(!c)return{ok:!1,error:"failed to create forked session"};return{ok:!0,data:{sessionPath:c}}}default:return{ok:!1,error:"unknown cmd"}}}catch(a){return{ok:!1,error:String(a?.message??a)}}}async function ai(a){let b=j.Cv.create(a),c=b.getSessionFile()??"";if(!c)throw Error("failed to create session file");return O(c,a,b),{sessionPath:c}}function aj(){let a={};for(let[b,c]of am){let d;if(c.session){for(let a=c.ledger.entries.length-1;a>=0;a-=1){let b=c.ledger.entries[a];if("tool"===b.kind){d=[b.toolName,(b.preview??b.title??"").split("\n")[0].slice(0,80)].filter(Boolean).join(" \xb7 ");break}}a[b]={streaming:U(c),lastStep:d}}}return a}async function ak(a,b){let d=a.sessionPath.replace(/\\/g,"/").split("/").pop()??"session";if("jsonl"===b){let{readFile:b}=await Promise.resolve().then(c.t.bind(c,51455,23));return{filename:d,content:await b(a.sessionPath,"utf8"),contentType:"application/jsonl"}}let e=await T(a),f=await e.exportToHtml(),{readFile:g,rm:h}=await Promise.resolve().then(c.t.bind(c,51455,23)),i=await g(f,"utf8");return await h(f,{force:!0}).catch(()=>void 0),{filename:d.replace(/\.jsonl$/,".html"),content:i,contentType:"text/html"}}setInterval(function(){let a=Date.now();for(let b of[...am.values()])!(b.subscribers.size>0)&&!(a-b.lastActive<=6e5)&&(b.creating||U(b)||$(b));let b=[...am.values()].filter(a=>a.session);if(b.length>6)for(let a of b.filter(a=>!a.creating&&!U(a)&&0===a.subscribers.size).sort((a,b)=>a.lastActive-b.lastActive).slice(0,b.length-6))$(a)},6e4).unref?.(),(0,o.j8)({isActive:function(a){let b="win32"===process.platform?a.toLowerCase():a;for(let a of am.keys())if(("win32"===process.platform?a.toLowerCase():a)===b)return!0;return!1},log:a=>console.log(a)}),d()}catch(a){d(a)}})},29296:(a,b,c)=>{c.d(b,{R:()=>d});function d(a){return a.includes("�")?{text:a.split(/\r?\n/).filter(a=>!a.includes("�")).join("\n").replace(/\n{3,}/g,"\n\n").trim(),encodingLoss:!0}:{text:a,encodingLoss:!1}}},31374:(a,b,c)=>{c.a(a,async(a,d)=>{try{c.d(b,{j8:()=>l});var e=c(51455),f=c.n(e),g=c(76760),h=c.n(g),i=c(6896),j=a([i]);async function k({now:a=Date.now(),retentionDays:b=30,isActive:d=()=>!1,log:e=console.log,dryRun:g=!1}={}){let j={scanned:0,deleted:[],missing:[],skippedActive:[],kept:0};if(!Number.isFinite(b)||b<=0)return j;let l=a-24*b*36e5,{archivedSessions:m}=await (0,i.vQ)();for(let k of m){let m;j.scanned+=1;let n=h().resolve(k);if(d(n)){j.skippedActive.push(n),j.kept+=1;continue}try{let a=await f().stat(n);if(!a.isFile())throw Object.assign(Error("not a file"),{code:"ENOENT"});m=a.mtimeMs}catch(a){if("ENOENT"!==a.code)throw a;j.missing.push(n),g||await (0,i.Iz)(n);continue}if(m>l){j.kept+=1;continue}let o=Math.floor((a-m)/864e5);if(j.deleted.push({path:n,idleDays:o}),g)continue;let{deleteSession:p}=await c.e(229).then(c.bind(c,66229));await p(n),await (0,i.Iz)(n),e(`[piweb] 归档会话已超过 ${b} 天没有活动(${o} 天),已删除:${n}`)}return j}i=(j.then?(await j)():j)[0];let m=!1;function l({intervalMs:a=216e5,delayMs:b=5e3,log:c=console.log,isActive:d}={}){if(m)return;m=!0;let e=async()=>{Date.now();try{let a=await k({log:c,isActive:d});(a.deleted.length||a.missing.length)&&c(`[piweb] 归档清理:删除 ${a.deleted.length} 个,清理失效记录 ${a.missing.length} 个,保留 ${a.kept} 个`)}catch(a){c(`[piweb] 归档清理失败:${a instanceof Error?a.message:a}`)}},f=setTimeout(()=>{e();let b=setInterval(()=>void e(),a);b.unref?.()},b);f.unref?.()}d()}catch(a){d(a)}})},34007:(a,b,c)=>{function d(a){let b=[];for(let[c,d]of a.entries()){if("message"!==d.type||d.message?.role!=="user")continue;let a="number"==typeof d.timestamp?d.timestamp:Date.parse(d.timestamp??""),e=Number.isFinite(a)?a:d.message.timestamp;b.push({id:d.id??`entry:${c}`,ts:"number"==typeof e&&Number.isFinite(e)?e:NaN})}return b}function e(a,b=0){let c=[],d="";for(let e of a.slice(Math.max(0,b)))if("message"===e.type&&e.message?.role==="user"&&e.id){var f;c.push(e.id),d||(d=("string"==typeof(f=e.message.content)?f:!Array.isArray(f)?"":f.map(a=>a&&"object"==typeof a&&"text"===a.type?String(a.text??""):"").join("")).split("\n").map(a=>a.trim()).find(Boolean)??"")}return{ids:c,title:d}}c.d(b,{S:()=>e,g:()=>d})},34070:(a,b,c)=>{c.d(b,{ec:()=>d});function d(a){return Math.ceil(a.length/4)}},35851:(a,b,c)=>{c.d(b,{I:()=>f,k:()=>g});var d=c(83188),e=c(34007);let f=4;function g(a){let{cwd:b,sessionPath:c,publish:g,entries:h}=a,i=!1,j=null,k=!1,l=0,m=!1,n=null,o=Promise.resolve(),p=null,q=a=>{let c=a instanceof Error?a.message:String(a),e=a instanceof d.qy&&("unavailable"===a.code||"too-large"===a.code);e&&(i=!0,j=a,p=null),m=!0,n=c;let f=Date.now();(e||!(f-l<6e4))&&(l=f,console.warn(`[piweb] growth commit failed for ${b}: ${c}`),g({type:"growth_error",message:c,ts:f}))},r=a=>o=o.then(a,a).catch(q),s=a=>(m&&(m=!1,n=null,g({type:"growth_error",message:null,ts:Date.now()})),a&&!k&&g({type:"growth",round:a,ts:Date.now()}),a);return{version:f,getError:()=>n,prepare:()=>i||k?o:r(async()=>{i||k||s(await (0,d.uP)(b,c))}),onEvent(a){if(!k&&!i)switch(a.type){case"agent_start":null===p&&(p=h().length);break;case"agent_settled":{if(null===p)break;let a=h().slice(p),{ids:f,title:g}=(0,e.S)(a);p=null,r(async()=>{i||k||s(await (0,d.qo)(b,{kind:"round",session:c,title:g,promptIds:f,status:function(a){for(let b=a.length-1;b>=0;b-=1){let c="message"===a[b].type?a[b].message:void 0;if(c?.role==="assistant"){if("aborted"===c.stopReason)return"aborted";if("error"===c.stopReason)return"error";break}}return"done"}(a)}))})}}},async recordNow(){let a;if(i)throw j??new d.qy("growth tracking is disabled for this workspace","unavailable");let e=null;if(await r(async()=>{try{if(i)throw j??new d.qy("growth tracking is disabled for this workspace","unavailable");e=s(await (0,d.uP)(b,c))}catch(b){a=b,q(b)}}),a)throw a;return e},dispose(){k=!0}}}},62433:(a,b,c)=>{c.a(a,async(a,d)=>{try{c.d(b,{BV:()=>q,CN:()=>l,Eb:()=>o,XI:()=>n,gS:()=>p,os:()=>m});var e=c(51455),f=c.n(e),g=c(76760),h=c.n(g),i=c(87982),j=a([i]);i=(j.then?(await j)():j)[0];class q extends Error{constructor(a){super(a),this.name="BoundaryError"}}function k(a){let b=h().resolve(a);return"win32"===process.platform?b.toLowerCase():b}function l(a,b){let c=h().relative(k(a),k(b));return""===c||!c.startsWith("..")&&!h().isAbsolute(c)}async function m(a,b){if(!(0,i.Sd)(a))throw new q("invalid session id");let c=(0,i.Gg)(a);if(!h().isAbsolute(c)||".jsonl"!==h().extname(c).toLowerCase())throw new q("invalid session path");let d=h().join((0,i.$M)(),"sessions"),e=await f().realpath(d).catch(()=>h().resolve(d));if(!l(e,h().resolve(c)))throw new q("session path is outside the Pi session store");if(b?.allowPending){let a=await f().realpath(c).catch(a=>{if("ENOENT"===a.code)return null;throw a});if(!a){let a=h().dirname(c);for(;l(d,a);){let b=await f().realpath(a).catch(a=>{if("ENOENT"===a.code)return null;throw a});if(b){if(!l(e,b))throw new q("session path escapes the Pi session store");return c}if(o(a,d))break;a=h().dirname(a)}throw new q("session store not found")}if(!l(e,a))throw new q("session path escapes the Pi session store");return c}let g=await f().realpath(c).catch(()=>{throw new q("session not found")});if(!l(e,g))throw new q("session path escapes the Pi session store");if(!(await f().stat(g)).isFile())throw new q("session is not a file");return g}async function n(a){if("string"!=typeof a||0===a.trim().length||a.length>4096)throw new q("invalid workspace path");let b=await f().realpath(h().resolve(a.trim())).catch(()=>{throw new q("workspace not found")});if(!(await f().stat(b)).isDirectory())throw new q("workspace is not a directory");return b}function o(a,b){return k(a)===k(b)}async function p(a,b){if("string"!=typeof a||!h().isAbsolute(a)||a.length>4096)throw new q("invalid resource path");let c=await f().realpath(a).catch(()=>{throw new q("resource not found")});for(let a of b){if(!a)continue;let b=await f().realpath(a).catch(()=>null);if(b&&o(c,b))return c}throw new q("resource is not part of the discovered Pi configuration")}d()}catch(a){d(a)}})},75554:(a,b,c)=>{c.a(a,async(a,d)=>{try{c.d(b,{DY:()=>q,Gh:()=>v,J0:()=>p,MO:()=>n});var e=c(51455),f=c.n(e),g=c(76760),h=c.n(g),i=c(77598),j=c(87982),k=c(49904),l=a([j]);j=(l.then?(await l)():l)[0];let r=16384,s=2e4,t=3,u=2e3;async function m(){let a;try{a=await f().readFile(h().join((0,j.$M)(),"settings.json"),"utf8")}catch(a){if("ENOENT"===a.code)return{};throw a}let b=JSON.parse(a.replace(/^\uFEFF/,""));if(!b||"object"!=typeof b||Array.isArray(b))throw Error("settings.json must contain a JSON object");return b}async function n(){let a=(await m()).enabledModels;return!Array.isArray(a)||a.some(a=>"string"!=typeof a)?null:a}function o(a,b){let c=a[b];return c&&"object"==typeof c&&!Array.isArray(c)?c:{}}async function p(){let a=await m(),b=a.compaction??{},c=a.retry??{},d=(a,b)=>"number"==typeof a&&Number.isSafeInteger(a)&&a>=0?a:b;return{compaction:{enabled:!1!==b.enabled,reserveTokens:d(b.reserveTokens,r),keepRecentTokens:d(b.keepRecentTokens,s)},retry:{enabled:!1!==c.enabled,maxRetries:d(c.maxRetries,t),baseDelayMs:d(c.baseDelayMs,u)}}}class v extends Error{}async function q(a){let b=function(a){if(!a||"object"!=typeof a||Array.isArray(a))throw new v("invalid settings patch");if(Object.keys(a).some(a=>"compaction"!==a&&"retry"!==a))throw new v("unknown settings field");let b={};for(let c of["compaction","retry"]){if(void 0===a[c])continue;let d=a[c];if(!d||"object"!=typeof d||Array.isArray(d))throw new v(`invalid ${c} settings`);let e="compaction"===c?["enabled","reserveTokens","keepRecentTokens"]:["enabled","maxRetries","baseDelayMs"];for(let[a,b]of Object.entries(d)){if(!e.includes(a))throw new v(`unknown ${c} field: ${a}`);if("enabled"===a){if("boolean"!=typeof b)throw new v(`${c}.${a} must be boolean`)}else if("number"!=typeof b||!Number.isSafeInteger(b)||b<0||b>1e9)throw new v(`${c}.${a} must be a non-negative integer`)}"compaction"===c?b.compaction=d:b.retry=d}return b}(a),c=h().join((0,j.$M)(),"settings.json");await (0,k.Ax)(c,()=>(0,k._i)(c,async()=>{let a=await m();b.compaction&&(a.compaction={...o(a,"compaction"),...b.compaction}),b.retry&&(a.retry={...o(a,"retry"),...b.retry}),await f().mkdir(h().dirname(c),{recursive:!0});let d=`${c}.${process.pid}.${(0,i.randomUUID)()}.tmp`;try{await f().writeFile(d,JSON.stringify(a,null," "),"utf8"),await f().rename(d,c)}finally{await f().rm(d,{force:!0}).catch(()=>void 0)}})),await (0,j.BW)()}d()}catch(a){d(a)}})},83188:(a,b,c)=>{c.d(b,{qy:()=>m,iv:()=>$,qo:()=>T,qY:()=>aa,vO:()=>_,e2:()=>V,nT:()=>Z,MB:()=>Y,uP:()=>U});var d=c(31421),e=c(77598),f=c(73024),g=c(51455),h=c.n(g),i=c(76760),j=c.n(i);let k="refs/piweb/rounds",l=`# PiWeb growth snapshot exclusions (generated, do not edit)
|
|
2
|
-
${[...["node_modules",".git",".next",".next-dev",".next-dev-webpack",".next-dev-clean","dist","build","out",".venv","venv","__pycache__",".cache","target",".turbo",".pytest_cache",".mypy_cache",".ruff_cache",".idea",".pnpm",".pnpm-store",".npm",".yarn",".gradle",".tox",".nox",".uv",".pixi",".conda",".svelte-kit",".nuxt",".output",".parcel-cache",".angular",".expo",".dart_tool",".terraform",".serverless",".aws-sam","coverage","htmlcov"].map(a=>`${a}/`),".DS_Store","Thumbs.db","*.log",".env",".env.*","!.env.example","*.pem","*.key","*.p12","*.pfx","id_rsa*","id_ed25519*"].join("\n")}
|
|
3
|
-
`;class m extends Error{constructor(a,b="failed"){super(a),this.code=b,this.name="GrowthError"}}let n=globalThis,o=n.__piWebGrowthRounds??={workspaces:new Map};function p(a){let b=j().resolve(a).replace(/\\/g,"/");return"win32"===process.platform?b.toLowerCase():b}function q(a){let b=j().resolve(a);try{b=f.realpathSync.native(b)}catch{}let c=p(b),d=c.replace(/[^a-z0-9]+/gi,"-").replace(/^-+|-+$/g,"").slice(-48).toLowerCase();return`${d||"root"}-${(0,e.createHash)("sha1").update(c).digest("hex").slice(0,8)}`}async function r(){if(o.gitBin)return o.gitBin;let a="git";if("win32"!==process.platform&&!await new Promise(a=>{let b=(0,d.spawn)("git",["--version"],{stdio:"ignore"});b.on("error",()=>a(!1)),b.on("close",b=>a(0===b))})){for(let b of["/opt/homebrew/bin/git","/usr/local/bin/git","/usr/bin/git","/usr/local/git/bin/git"])if(await new Promise(a=>{let c=(0,d.spawn)(b,["--version"],{stdio:"ignore"});c.on("error",()=>a(!1)),c.on("close",b=>a(0===b))})){a=b;break}}return o.gitBin=a,a}function s(a,b={}){let c=b.maxBuffer??0x4000000;return r().then(e=>new Promise((g,h)=>{let i=(0,d.spawn)(e,a,{cwd:b.cwd,env:{...process.env,GIT_TERMINAL_PROMPT:"0",GIT_OPTIONAL_LOCKS:"0",...b.env},windowsHide:!0,stdio:["pipe","pipe","pipe"]}),j=[],k=[],l=0,n=!1,o=setTimeout(()=>p(new m("git timed out","failed")),3e4),p=a=>{n||(n=!0,clearTimeout(o),i.kill(),h(a))};i.stdout.on("data",a=>{if((l+=a.length)>c){i.kill(),p(new m("git output exceeded the buffer limit","too-large"));return}j.push(a)}),i.stderr.on("data",a=>k.push(a)),i.on("error",a=>{"ENOENT"===a.code&&b.cwd&&!(0,f.existsSync)(b.cwd)?p(new m("workspace directory not found","failed")):p("ENOENT"===a.code?new m("git is not installed","unavailable"):a)}),i.on("close",a=>{n||(n=!0,clearTimeout(o),g({stdout:Buffer.concat(j),stderr:Buffer.concat(k).toString("utf8"),code:a??-1}))}),void 0!==b.input?i.stdin.end(b.input):i.stdin.end()}))}async function t(){if(o.gitOk)return o.gitOk;if(o.gitFailedAt&&Date.now()-o.gitFailedAt<6e4)return!1;let a=s(["--version"]).then(a=>0===a.code,()=>!1);return o.gitOk=a,a.then(a=>{o.gitOk=void 0,a?o.gitFailedAt=void 0:o.gitFailedAt=Date.now()}),a}let u=["-c","core.autocrlf=false","-c","core.safecrlf=false","-c","core.quotepath=false","-c","core.fsmonitor=false","-c","core.untrackedCache=false","-c","filter.lfs.clean=","-c","filter.lfs.smudge=","-c","filter.lfs.process=","-c","filter.lfs.required=false"];async function v(a,b,c={}){let d=["--git-dir",a.gitDir,"--work-tree",a.cwd,...u],e={GIT_INDEX_FILE:a.indexFile,...c.env},f=await s([...d,...b],{cwd:a.cwd,input:c.input,maxBuffer:c.maxBuffer,env:e});if(0!==f.code&&!c.allowFail)throw new m(`git ${b[0]} failed: ${f.stderr.trim().split("\n")[0]||`exit ${f.code}`}`);return f}function w(a){try{return f.realpathSync.native(a)}catch{return a}}async function x(a){let b=j().join(a,".git"),c=await h().stat(b).catch(()=>null);if(c?.isDirectory())return b;if(c?.isFile()){let c=await h().readFile(b,"utf8").catch(()=>""),d=/^gitdir:[ \t]*(.+)$/m.exec(c);if(d)return j().resolve(a,d[1].trim())}return null}async function y(a,b){let c=(await h().readFile(j().join(a,"commondir"),"utf8").catch(()=>"")).trim(),d=c?j().resolve(a,c):a;return!!await h().stat(j().join(d,...b.split("/"))).then(a=>a.isFile(),()=>!1)||(await h().readFile(j().join(d,"packed-refs"),"utf8").catch(()=>"")).split("\n").some(a=>a.endsWith(` ${b}`))}async function z(a){let b=async()=>{let b=await s(["rev-parse","--absolute-git-dir","--show-toplevel","--is-bare-repository"],{cwd:a});if(0!==b.code)return null;let[c="",d="",e=""]=b.stdout.toString("utf8").split("\n").map(a=>a.trim());return c&&"true"!==e&&d&&p(w(d))===p(w(a))?c:null},c=await b();if(c)return c;let d=await s(["init","-q"],{cwd:a});if(0!==d.code)throw new m(`git init failed: ${d.stderr.trim().split("\n")[0]||`exit ${d.code}`}`,"unavailable");let e=await b();if(!e)throw new m("workspace cannot be used as a git repository","unavailable");return e}async function A(a){let[b="",c=""]=(await v(a,["for-each-ref","--format=%(objectname) %(tree)",a.ref])).stdout.toString("utf8").trim().split(" ");return D.test(b)&&D.test(c)?{commit:b,tree:c}:null}async function B(a){if(!await t())throw new m("git is not installed","unavailable");let b=q(a),c=await z(a),d=j().join(c,"piweb");await h().mkdir(d,{recursive:!0});let e={key:b,cwd:a,gitDir:c,indexFile:j().join(d,"index"),excludeFile:j().join(d,"exclude"),ref:`${k}/${b}`,rounds:null,emptyTree:"",lock:Promise.resolve()};await h().writeFile(e.excludeFile,l,"utf8");let f=await A(e);e.lastCommit=f?.commit,e.lastTree=f?.tree;let g=await v(e,["hash-object","-t","tree","--stdin"],{input:""});return e.emptyTree=g.stdout.toString("utf8").trim(),e}async function C(a){let b=await h().realpath(j().resolve(a)).catch(()=>j().resolve(a)),c=q(b),d=o.workspaces.get(c);if(d){let a=await d.catch(()=>null);a&&await h().stat(j().join(a.gitDir,"HEAD")).then(()=>!0,()=>!1)||(o.workspaces.delete(c),d=void 0)}return d||(d=B(b),o.workspaces.set(c,d),d.catch(()=>o.workspaces.delete(c))),d}let D=/^[0-9a-f]{40}([0-9a-f]{24})?$/;function E(a,b="hash"){if("string"!=typeof a||!D.test(a))throw new m(`invalid ${b}`,"not-found");return a}function F(a){if("string"!=typeof a||!a.trim())throw new m("missing path","not-found");let b=a.replace(/\\/g,"/").replace(/^\.\//,"");if(b.startsWith("/")||/^[A-Za-z]:\//.test(b)||b.split("/").some(a=>".."===a))throw new m("invalid path","not-found");return b}function G(a){let b=a.split("\0"),c=[];for(let a=0;a<b.length;a+=1){let d=b[a];if(!d)continue;let e=d[0];if("R"===e||"C"===e){let d=b[a+1],f=b[a+2];if(a+=2,void 0===f)break;c.push("R"===e?{status:"R",path:f,from:d}:{status:"A",path:f});continue}let f=b[a+1];if(a+=1,void 0===f)break;"A"===e||"M"===e||"D"===e?c.push({status:e,path:f}):"T"===e&&c.push({status:"M",path:f})}return c}function H(a){let b=a.split("\0"),c=new Map;for(let a=0;a<b.length;a+=1){let d=b[a];if(!d)continue;let[e,f,g]=d.split(" ");if(void 0===e||void 0===f)continue;let h="-"===e||"-"===f,i={add:h?0:Number(e)||0,del:h?0:Number(f)||0,binary:h};if(void 0===g||""===g){let d=b[a+2];a+=2,void 0!==d&&c.set(d,i);continue}c.set(g,i)}return c}function I(a,b){for(let c of a){let a=b.get(c.path);a&&(c.add=a.add,c.del=a.del,a.binary&&(c.binary=!0))}return a.sort((a,b)=>a.path.localeCompare(b.path))}let J=["round","user","baseline"],K=["done","aborted","error"],L={round:"piweb: round",user:"piweb: workspace changes",baseline:"piweb: baseline"};function M(a){let b=a.split("\n"),c=new Map;for(let a of b){let b=/^Piweb-([A-Za-z]+):[ \t]*(.*)$/.exec(a.trim());b&&c.set(b[1].toLowerCase(),b[2].trim())}let d=J.find(a=>a===c.get("kind"))??"round",e=K.find(a=>a===c.get("status"))??"done",f=(b[0]??"").trim();return{kind:d,title:"round"===d&&f!==L.round?f:"",session:c.get("session")??"",promptIds:(c.get("prompts")??"").split(",").map(a=>a.trim()).filter(Boolean),status:e}}function N(a){return a.replace(/[\x00-\x1f\x7f]+/g," ").replace(/\s+/g," ").trim()}function O(a,b){let c=[Array.from(N(a.title??"")).slice(0,72).join("")||L[b],"",`Piweb-Kind: ${b}`,`Piweb-Session: ${N(P(a.session))}`],d=(a.promptIds??[]).filter(a=>/^[\w.:-]{1,128}$/.test(a));return d.length&&c.push(`Piweb-Prompts: ${d.join(",")}`),c.push(`Piweb-Status: ${a.status??"done"}`),`${c.join("\n")}
|
|
4
|
-
`}function P(a){return j().basename(a.replace(/\\/g,"/"))}function Q(a){let b={added:0,modified:0,deleted:0,renamed:0,add:0,del:0};for(let c of a)"A"===c.status?b.added+=1:"M"===c.status?b.modified+=1:"D"===c.status?b.deleted+=1:b.renamed+=1,b.add+=c.add??0,b.del+=c.del??0;return b}async function R(a,b,c){let[d,e]=await Promise.all([v(a,["diff-tree","-r","-M","--name-status","-z",b,c]),v(a,["diff-tree","-r","-M","--numstat","-z",b,c])]);return I(G(d.stdout.toString("utf8")),H(e.stdout.toString("utf8")))}async function S(a){let b=a.excludeFile.replace(/\\/g,"/"),c=Array.from(new Set((await v(a,["ls-files","-z","--others","--modified","--deleted","--exclude-standard",`--exclude-from=${b}`])).stdout.toString("utf8").split("\0").filter(a=>a&&!a.endsWith("/"))));if(c.length>5e4){let a=new Map;for(let b of c){let c=b.split("/"),d=c.length>1?c.slice(0,2).join("/"):"(root)";a.set(d,(a.get(d)??0)+1)}let b=[...a].sort((a,b)=>b[1]-a[1]).slice(0,3).map(([a,b])=>`${a}: ${b}`).join(", ");throw new m(`snapshot has ${c.length} candidate files (limit 50000); largest directories: ${b}. Exclude generated directories with .gitignore`,"too-large")}let d=[],e=[],f=new Map,g=b=>{if(!b)return Promise.resolve(!0);let c=f.get(b);if(c)return c;let d=(async()=>{let c=b.includes("/")?b.slice(0,b.lastIndexOf("/")):"";if(!await g(c))return!1;let d=await h().lstat(j().join(a.cwd,b)).catch(a=>{if("ENOENT"===a.code||"ENOTDIR"===a.code)return null;throw a});return!!(d?.isDirectory()&&!d.isSymbolicLink())})();return f.set(b,d),d};for(let b=0;b<c.length;b+=256)for(let{rel:f,include:i}of(await Promise.all(c.slice(b,b+256).map(async b=>{let c=b.includes("/")?b.slice(0,b.lastIndexOf("/")):"";if(!await g(c))return{rel:b,include:!1};let d=await h().lstat(j().join(a.cwd,b)).catch(a=>{if("ENOENT"===a.code||"ENOTDIR"===a.code)return null;throw a});return{rel:b,include:!!(d?.isFile()&&d.size<=1048576)}}))))(i?d:e).push(f);for(let b=0;b<e.length;b+=256)await v(a,["update-index","--force-remove","-z","--stdin"],{input:`${e.slice(b,b+256).join("\0")}\0`});for(let b=0;b<d.length;b+=256)await v(a,["update-index","--add","--remove","--replace","-z","--stdin"],{input:`${d.slice(b,b+256).join("\0")}\0`});return c.length}async function T(a,b){var c;let d,e=await C(a);return c=async()=>{e.excludeRules!==l&&(await h().writeFile(e.excludeFile,l,"utf8"),e.excludeRules=l),await S(e);let a=(await v(e,["write-tree"])).stdout.toString("utf8").trim();E(a,"tree");let c={GIT_AUTHOR_NAME:"PiWeb",GIT_AUTHOR_EMAIL:"piweb@localhost",GIT_COMMITTER_NAME:"PiWeb",GIT_COMMITTER_EMAIL:"piweb@localhost"};for(let d=0;;d+=1){let f=e.lastCommit,g="user"!==b.kind||f?b.kind:"baseline";if("round"!==g&&f&&a===e.lastTree)return null;let h=(await v(e,["commit-tree",a,...f?["-p",f]:[],"-F","-"],{env:c,input:O(b,g)})).stdout.toString("utf8").trim();E(h,"commit");let i=await v(e,["update-ref",e.ref,h,f??""],{allowFail:!0});if(0!==i.code){let a=await A(e);if(d>=2||a?.commit===f)throw new m(`git update-ref failed: ${i.stderr.trim().split("\n")[0]||`exit ${i.code}`}`);e.lastCommit=a?.commit,e.lastTree=a?.tree;continue}let j=f?e.lastTree??e.emptyTree:e.emptyTree,k=f?await R(e,j,a):[],l=k.slice(0,2e3),n={commit:h,parent:f??null,tree:a,parentTree:j,ts:Date.now(),...M(O(b,g)),changes:l,truncated:k.length>l.length||void 0,initial:!f||void 0,stats:Q(k)};return e.rounds&&e.loadedHead===f&&(e.rounds.push(n),e.loadedHead=h),e.lastCommit=h,e.lastTree=a,n}},d=e.lock.then(c,c),e.lock=d.then(()=>void 0,()=>void 0),d}function U(a,b){return T(a,{kind:"user",session:b})}async function V(){return t()}async function W(a,b,c,d){let e=await v(a,["-c","log.showRoot=false","-c","log.showSignature=false","-c","diff.relative=false","log","-z","--topo-order","--reverse","--raw","--numstat","-M","--no-abbrev","--no-color","--format=%x1e%H%x1f%T%x1f%P%x1f%ct%x1f%B%x1f",b,...c?[`^${c}`]:[],"--"]),f=[];for(let b of function(a){let b=[];for(let c of a.split("\x1e")){if(!c)continue;let a=c.indexOf("\x1f\0"),d=(a>=0?c.slice(0,a):c.replace(/[\x1f\0\n]+$/,"")).split("\x1f");if(d.length<5)continue;let[e,f,g,h]=d,i=[],j=[],k=a>=0?c.slice(a+2).replace(/^\n/,"").split("\0"):[];for(let a=0;a<k.length;a+=1){let b=k[a];if(b)if(b.startsWith(":")){let c=b.slice(b.lastIndexOf(" ")+1),d="R"===c[0]||"C"===c[0]?2:1;i.push(c,...k.slice(a+1,a+1+d)),a+=d}else{let c=b.split(" "),d=2*(3===c.length&&""===c[2]);j.push(b,...k.slice(a+1,a+1+d)),a+=d}}b.push({commit:e,tree:f,parent:g.split(" ").filter(Boolean)[0]??null,ts:1e3*Number(h),message:d.slice(4).join("\x1f"),changes:I(G(`${i.join("\0")}\0`),H(`${j.join("\0")}\0`))})}return b}(e.stdout.toString("utf8"))){let c=b.changes.slice(0,2e3);f.push({commit:b.commit,parent:b.parent,tree:b.tree,parentTree:b.parent&&d.get(b.parent)||a.emptyTree,ts:b.ts,...M(b.message),changes:c,truncated:b.changes.length>c.length||void 0,initial:!b.parent||void 0,stats:Q(b.changes)}),d.set(b.commit,b.tree)}return f}async function X(a){let b=await A(a);if(!b)return a.rounds=[],a.loadedHead=void 0,a.rounds;if(a.rounds&&a.loadedHead===b.commit)return a.rounds;let c=a.rounds&&a.loadedHead?a.rounds:null,d=new Map((c??[]).map(a=>[a.commit,a.tree])),e=await W(a,b.commit,c?a.loadedHead:void 0,d);return c&&e.length&&e[0].parent!==a.loadedHead?e=await W(a,b.commit,void 0,new Map):c&&(e=[...c,...e]),a.rounds=e,a.loadedHead=b.commit,e}async function Y(a,b){let c=await h().realpath(j().resolve(a)).catch(()=>j().resolve(a)),d=q(c);if(!o.workspaces.has(d)){let a=await x(c);if(!a||!await y(a,`${k}/${d}`))return[]}let e=await C(c),f=await X(e);if(!b)return[...f];let g=P(b);return f.filter(a=>{var b;return b=a.session,"win32"===process.platform?b.toLowerCase()===g.toLowerCase():b===g})}async function Z(a,b){let c=await C(a),d=E(b,"tree");if(d===c.emptyTree)return[];var e=(await v(c,["ls-tree","-r","-l","-z",d])).stdout.toString("utf8");let f=[];for(let a of e.split("\0")){if(!a)continue;let b=a.match(/^(\d+) (\w+) ([0-9a-f]+) +(-|\d+)\t([\s\S]+)$/);b&&"blob"===b[2]&&f.push({path:b[5],size:"-"===b[4]?0:Number(b[4])})}return f}async function $(a,b,c){return R(await C(a),E(b,"from"),E(c,"to"))}async function _(a,b,c,d,e){let f=await C(a),g=[F(d)];"string"==typeof e&&e&&g.push(F(e));let h=await v(f,["diff","-M","--no-color","--no-ext-diff","-U1000000",E(b,"from"),E(c,"to"),"--",...g]);return/^Binary files .* differ$/m.test(h.stdout.toString("utf8",0,Math.min(h.stdout.length,65536)))?{patch:"",binary:!0,truncated:!1}:h.stdout.length<=4194304?{patch:h.stdout.toString("utf8"),binary:!1,truncated:!1}:{patch:h.stdout.subarray(0,4194304).toString("utf8"),binary:!1,truncated:!0}}async function aa(a,b,c){let d=await C(a),e=F(c),f=await v(d,["cat-file","-p",`${E(b,"tree")}:${e}`],{allowFail:!0});if(0!==f.code)throw new m("file not found in this snapshot","not-found");let g=f.stdout;return g.subarray(0,Math.min(g.length,8e3)).includes(0)?{content:"",binary:!0,truncated:!1,size:g.length}:g.length<=262144?{content:g.toString("utf8"),binary:!1,truncated:!1,size:g.length}:{content:g.subarray(0,262144).toString("utf8"),binary:!1,truncated:!0,size:g.length}}}};
|
|
1
|
+
"use strict";exports.id=686,exports.ids=[686],exports.modules={3672:(a,b,c)=>{c.d(b,{H4:()=>e,Pn:()=>g,WZ:()=>h});var d=c(29296);function e(a){if(!a||"object"!=typeof a)return;let b={};return"number"==typeof a.input&&(b.input=a.input),"number"==typeof a.output&&(b.output=a.output),"number"==typeof a.cacheRead&&(b.cacheRead=a.cacheRead),"number"==typeof a.cacheWrite&&(b.cacheWrite=a.cacheWrite),Object.keys(b).length?b:void 0}function f(a){if(null==a)return"";if("string"==typeof a)return a;if(Array.isArray(a))return a.map(f).join("");if("object"==typeof a){if("string"==typeof a.text)return a.text;if("string"==typeof a.thinking)return a.thinking}return""}class g{constructor(a=[]){this.streamingStart=null,this.turnStartedAt=null,this.toolIndex=new Map,this.toolStart=new Map,this.pendingToolArgs=new Map,this.dirty=[],this.entries=a.map(a=>({...a})),this.nextSeq=Math.max(0,...this.entries.map(a=>a.seq))+1}push(a){let b={...a,seq:this.nextSeq++};return this.entries.push(b),this.dirty.push(b),b}touch(a){a&&!this.dirty.includes(a)&&this.dirty.push(a)}drainDirty(){let a=this.dirty;return this.dirty=[],a}onEvent(a,b=Date.now()){switch(a.type){case"turn_start":this.turnStartedAt=b;break;case"message_start":{let c=a.message;if(c?.role==="user")this.push({kind:"user",ts:c.timestamp??b,detail:f(c.content)});else if(c?.role==="assistant"){let a=this.turnStartedAt??b;this.turnStartedAt=null,this.streamingStart={seq:this.nextSeq,t0:a},this.push({kind:"message",ts:a,title:"assistant"})}else if(c?.role==="toolResult"){let a=c.toolCallId?this.toolIndex.get(c.toolCallId):void 0;if(void 0!==a){let b=this.entries[a],g=(0,d.R)(f(c.content));b.detail=g.text||b.detail,b.encodingLoss=g.encodingLoss||b.encodingLoss,b.isError=!0===c.isError,b.tokens=e(c.usage)??b.tokens,this.touch(b)}}break}case"message_update":{let c=a.assistantMessageEvent;if(!c)break;if(("text_delta"===c.type||"thinking_delta"===c.type)&&this.streamingStart&&void 0===this.streamingStart.firstToken){this.streamingStart.firstToken=b;let a=this.entries[this.entries.length-1];a?.kind==="message"&&(a.timing={...a.timing??{},ttftMs:b-this.streamingStart.t0},this.touch(a))}"toolcall_end"===c.type&&c.toolCall&&this.pendingToolArgs.set(c.toolCall.id,c.toolCall.arguments);break}case"message_end":{let c=a.message;if(c?.role==="assistant"){let a=this.entries[this.entries.length-1],d=a?.kind==="message"?a:this.push({kind:"message",ts:b});for(let a of(this.streamingStart&&(d.timing={...void 0===this.streamingStart.firstToken?{}:{ttftMs:this.streamingStart.firstToken-this.streamingStart.t0,decodeMs:b-this.streamingStart.firstToken},durationMs:b-this.streamingStart.t0}),d.tokens=e(c.usage),d.thinking=f((c.content??[]).filter(a=>"thinking"===a.type).map(a=>a.thinking)),d.detail=f((c.content??[]).filter(a=>"text"===a.type)),d.isError="error"===c.stopReason,"error"===c.stopReason&&(d.title="error"),this.touch(d),this.streamingStart=null,c.content??[]))"toolCall"===a.type&&(this.toolIndex.set(a.id,this.entries.length),this.push({kind:"tool",ts:b,toolName:a.name,toolCallId:a.id,title:a.name,detail:JSON.stringify(a.arguments??{},null,2)}))}break}case"tool_execution_start":{this.toolStart.set(a.toolCallId,b);let c=this.toolIndex.get(a.toolCallId);if(void 0===c)c=this.entries.length,this.toolIndex.set(a.toolCallId,c),this.push({kind:"tool",ts:b,toolName:a.toolName,toolCallId:a.toolCallId,title:a.toolName,detail:JSON.stringify(a.args??{},null,2)});else{let b=this.entries[c];b.detail=JSON.stringify(a.args??{},null,2),this.touch(b)}break}case"tool_execution_update":{let b=this.toolIndex.get(a.toolCallId);if(void 0!==b){let c=this.entries[b],e=(0,d.R)(f(a.partialResult));e.text&&(c.preview=e.text.slice(-2e3)),c.encodingLoss=e.encodingLoss||c.encodingLoss,this.touch(c)}break}case"tool_execution_end":{let c=this.toolIndex.get(a.toolCallId);if(void 0!==c){let e=this.entries[c],g=(0,d.R)(f(a.result));e.detail=[e.detail,g.text].filter(Boolean).join("\n\n---\n\n"),e.encodingLoss=g.encodingLoss||e.encodingLoss,e.isError=!0===a.isError;let h=this.toolStart.get(a.toolCallId);void 0!==h&&(e.timing={...e.timing??{},durationMs:b-h}),this.touch(e)}this.toolStart.delete(a.toolCallId);break}case"compaction_start":this.push({kind:"compacted",ts:b,title:`compact (${a.reason})`});break;case"compaction_end":{let b=[...this.entries].reverse().find(a=>"compacted"===a.kind);b&&(a.errorMessage&&(b.isError=!0,b.detail=a.errorMessage),a.result?.tokensBefore!=null&&(b.tokens={input:a.result.tokensBefore}),this.touch(b))}}}}function h(a){let b=[],c=1,g=a=>"number"==typeof a?.timestamp?a.timestamp:Date.now();for(let h of a)if("message"===h.type){let a=h.message;if(!a)continue;if("user"===a.role)b.push({seq:c++,kind:"user",ts:g(a),detail:f(a.content)});else if("assistant"===a.role){let d=f((a.content??[]).filter(a=>"thinking"===a.type)),h=f((a.content??[]).filter(a=>"text"===a.type));for(let f of(b.push({seq:c++,kind:"message",ts:g(a),title:"error"===a.stopReason?"error":"assistant",detail:h,thinking:d||void 0,tokens:e(a.usage),isError:"error"===a.stopReason||void 0}),a.content??[]))"toolCall"===f.type&&b.push({seq:c++,kind:"tool",ts:g(a),toolName:f.name,toolCallId:f.id,title:f.name,detail:JSON.stringify(f.arguments??{},null,2)})}else if("toolResult"===a.role){let c=b.findLast?.(b=>"tool"===b.kind&&(a.toolCallId?b.toolCallId===a.toolCallId:b.toolName===a.toolName));if(c){let b=(0,d.R)(f(a.content));c.detail=[c.detail,b.text].filter(Boolean).join("\n\n---\n\n"),c.encodingLoss=b.encodingLoss||c.encodingLoss,c.isError=!0===a.isError||void 0,c.tokens=e(a.usage)??c.tokens}}}else"compaction"===h.type?b.push({seq:c++,kind:"compacted",ts:g(h),title:"compact",tokens:null!=h.tokensBefore?{input:h.tokensBefore}:e(h.usage)}):"branch_summary"===h.type&&b.push({seq:c++,kind:"compacted",ts:g(h),title:"branch summary",tokens:e(h.usage),detail:h.summary});return b}},6896:(a,b,c)=>{c.a(a,async(a,d)=>{try{c.d(b,{Iz:()=>E,JZ:()=>D,PY:()=>y,Tp:()=>z,XG:()=>G,X_:()=>J,cH:()=>B,qM:()=>A,qh:()=>H,r7:()=>F,vQ:()=>C});var e=c(51455),f=c.n(e),g=c(48161),h=c.n(g),i=c(76760),j=c.n(i),k=c(92584),l=c(31421),m=c(46193),n=c(87982),o=c(77598),p=c(49904),q=a([n]);function r(){return j().join((0,n.$M)(),"web-workspaces.json")}async function s(a=r()){try{let b=JSON.parse(await f().readFile(a,"utf8"));if(!b||"object"!=typeof b||Array.isArray(b))throw Error("invalid workspace registry");let c=Object.fromEntries(Object.entries("object"==typeof b.aliases&&null!==b.aliases?b.aliases:{}).filter(a=>"string"==typeof a[1])),d=Object.fromEntries(Object.entries("object"==typeof b.growthInit&&null!==b.growthInit?b.growthInit:{}).filter(a=>"boolean"==typeof a[1]));return{workspaces:Array.isArray(b.workspaces)?b.workspaces.filter(a=>"string"==typeof a):[],aliases:c,archivedSessions:Array.isArray(b.archivedSessions)?b.archivedSessions.filter(a=>"string"==typeof a):[],removedWorkspaces:Array.isArray(b.removedWorkspaces)?b.removedWorkspaces.filter(a=>"string"==typeof a):[],...Object.keys(d).length?{growthInit:d}:{}}}catch(a){if("ENOENT"!==a.code)throw a}return{workspaces:[],aliases:{},archivedSessions:[],removedWorkspaces:[]}}function t(a){let b=j().resolve(a);return"win32"===process.platform?b.toLowerCase():b}async function u(a,b){await f().mkdir(j().dirname(b),{recursive:!0});let c=`${b}.${(0,o.randomUUID)()}.tmp`;try{await f().writeFile(c,JSON.stringify(a,null,2),{encoding:"utf8",flag:"wx",mode:384}),await f().rename(c,b)}finally{await f().unlink(c).catch(()=>void 0)}}n=(q.then?(await q)():q)[0];let K=null;async function v(a){var b;let c;try{c=await f().stat(a)}catch(a){if("ENOENT"!==a.code)throw a;return K=null,{workspaces:[],aliases:{},archivedSessions:[],removedWorkspaces:[]}}let d=(b=c,`${b.mtimeMs}:${b.ctimeMs}:${b.size}:${b.ino}`);if(K&&K.path===a&&K.stamp===d)return K.data;let e=await s(a);return K={path:a,stamp:d,data:e},e}async function w(){return v(r())}async function x(a){let b=r();return(0,p.Ax)(b,()=>(0,p._i)(b,async()=>{try{return await a(await s(b),b)}finally{K=null}}))}async function y(){return(await w()).removedWorkspaces??[]}async function z(a,b){let c=t(j().resolve(a));return x(async(a,d)=>{for(let b of(a.aliases||(a.aliases={}),Object.keys(a.aliases)))b!==c&&t(b)===c&&delete a.aliases[b];return b.trim()?a.aliases[c]=b.trim():delete a.aliases[c],await u(a,d),a.aliases})}async function A(a){return(await w()).growthInit?.[t(a)]??null}async function B(a,b){let c=t(a);await x(async(a,d)=>{a.growthInit={...a.growthInit,[c]:b},await u(a,d)})}async function C(){let a=await w();return{workspaces:a.workspaces,aliases:a.aliases??{},archivedSessions:a.archivedSessions??[],removedWorkspaces:a.removedWorkspaces??[]}}async function D(a){let b=j().resolve(a),c=t(b);return x(async(a,d)=>(a.archivedSessions||(a.archivedSessions=[]),a.archivedSessions.some(a=>t(a)===c)||(a.archivedSessions.push(b),await u(a,d)),a.archivedSessions))}async function E(a){let b=j().resolve(a),c=t(b);return x(async(a,b)=>{let d=a.archivedSessions??[],e=d.filter(a=>t(a)!==c);return e.length!==d.length&&(a.archivedSessions=e,await u(a,b)),e})}async function F(a){let b=j().resolve(a),c=t(b);return x(async(a,d)=>{let e=!1;if(a.workspaces.some(a=>t(a)===c)||(a.workspaces.push(b),e=!0),a.removedWorkspaces){let b=a.removedWorkspaces.filter(a=>t(a)!==c);e||=b.length!==a.removedWorkspaces.length,a.removedWorkspaces=b}return e&&await u(a,d),{workspaces:a.workspaces,removedWorkspaces:a.removedWorkspaces??[]}})}async function G(a){let b=r(),c=await v(b),d=new Set((c.removedWorkspaces??[]).map(t)),e=new Set(c.workspaces.map(t)),f=!1;for(let b of a){if(!b||"string"!=typeof b)continue;let a=t(j().resolve(b));d.has(a)||e.has(a)||(e.add(a),f=!0)}return f?x(async(b,c)=>{let d=!1,e=new Set((b.removedWorkspaces??[]).map(t)),f=new Set(b.workspaces.map(t));for(let c of a){if(!c||"string"!=typeof c)continue;let a=j().resolve(c),g=t(a);e.has(g)||f.has(g)||(b.workspaces.push(a),f.add(g),d=!0)}return d&&await u(b,c),b.workspaces}):c.workspaces}async function H(a){let b=j().resolve(a),c=t(b);return x(async(a,d)=>{if(a.workspaces=a.workspaces.filter(a=>t(a)!==c),a.removedWorkspaces||(a.removedWorkspaces=[]),a.removedWorkspaces.some(a=>t(a)===c)||a.removedWorkspaces.push(b),a.aliases)for(let b of Object.keys(a.aliases))t(b)===c&&delete a.aliases[b];return await u(a,d),{workspaces:a.workspaces,removedWorkspaces:a.removedWorkspaces,aliases:a.aliases??{}}})}let L=!1;function I(a,b={}){let{timeoutMs:c=3e5,windowsHide:d=!1}=b;return new Promise((b,e)=>{let f,g=(0,l.spawn)(a[0],a.slice(1),{stdio:["ignore","pipe","pipe"],windowsHide:d}),h=new m.StringDecoder("utf8"),i="",j="",k=!1;g.stdout.on("data",a=>{i+=h.write(a)}),g.stderr.on("data",a=>{j=(j+a.toString("utf8")).slice(-1e3)});let n=!1,o=a=>{n||(n=!0,clearTimeout(f),k||(k=!0,i+=h.end()),a?e(a):b(i.trim()))};g.on("error",a=>o(a)),g.on("close",a=>o(0===a?void 0:Error(j||`folder picker exited with code ${a}`))),f=setTimeout(()=>{try{g.kill()}catch{}o(Error("folder picker timed out"))},c)})}async function J(){if(L)return{path:null,canceled:!0};L=!0;try{if("win32"===process.platform){let a=j().join(k.V,"scripts","pick-folder.ps1"),b=await I(["powershell.exe","-NoProfile","-STA","-ExecutionPolicy","Bypass","-File",a,"选择工作区文件夹"],{windowsHide:!0});return b?{path:b,canceled:!1}:{path:null,canceled:!0}}if("darwin"===process.platform){let a=await I(["osascript","-e",'POSIX path of (choose folder with prompt "选择工作区文件夹")']),b=function(a){let b=a.trim();if((b=b.replace(/^alias\s+/i,"").replace(/^"(.*)"$/s,"$1")).startsWith("/"))return b.replace(/\\(.)/g,"$1");if(/^[A-Za-z][A-Za-z0-9 ]*:(.+)$/.test(b)){let a=b.slice(b.indexOf(":")+1);return`/${a.split(":").filter(Boolean).join("/")}`}return b}(a);return b?{path:b,canceled:!1}:{path:null,canceled:!0}}for(let a of[["zenity","--file-selection","--directory","--title=选择工作区文件夹"],["kdialog","--getexistingdirectory",`${h().homedir()}`,"--title","选择工作区文件夹"]])try{let b=await I(a);return b?{path:b,canceled:!1}:{path:null,canceled:!0}}catch(a){if(a instanceof Error&&/ENOENT|not found|not recognized/i.test(a.message))continue;if(/exited with code (1|5)$/.test(a instanceof Error?a.message:String(a)))return{path:null,canceled:!0};throw a}throw Error("no folder picker available: install zenity or kdialog, or type the path manually")}finally{L=!1}}d()}catch(a){d(a)}})},14719:(a,b,c)=>{c.d(b,{X:()=>e});var d=c(77598);function e(a){let b=new Map,c=new Map,e=!1,f=(c,f,g,h)=>{if(e||!a.hasViewers()||f?.signal?.aborted)return Promise.resolve(g);let i=(0,d.randomUUID)();return new Promise(d=>{let e=c=>{let e=b.get(i);e&&(b.delete(i),e.timer&&clearTimeout(e.timer),e.removeAbortListener?.(),a.publish({type:"extension_ui_resolved",id:i,ts:Date.now()}),d(c?h(c):g))},j={type:"extension_ui",id:i,...c,timeout:f?.timeout,ts:Date.now()},k={request:j,resolve:a=>e(a)};k.timer=setTimeout(()=>e(null),f?.timeout??6e5),k.timer.unref?.();let l=()=>e(null);f?.signal?.addEventListener("abort",l,{once:!0}),k.removeAbortListener=()=>f?.signal?.removeEventListener("abort",l),b.set(i,k),a.publish(j)})};return{uiContext:{select:(a,b,c)=>f({method:"select",title:a,options:b},c,void 0,a=>a.cancelled?void 0:a.value),confirm:(a,b,c)=>f({method:"confirm",title:a,message:b},c,!1,a=>!a.cancelled&&!0===a.confirmed),input:(a,b,c)=>f({method:"input",title:a,placeholder:b},c,void 0,a=>a.cancelled?void 0:a.value),notify:(b,c)=>{a.publish({type:"extension_ui",id:(0,d.randomUUID)(),method:"notify",message:b,notifyType:c??"info",ts:Date.now()})},setStatus:(b,e)=>{void 0===e?c.delete(b):c.set(b,e),a.publish({type:"extension_ui",id:(0,d.randomUUID)(),method:"setStatus",statusKey:b,statusText:e,ts:Date.now()})},setWorkingMessage:b=>{a.publish({type:"extension_ui",id:(0,d.randomUUID)(),method:"setWorkingMessage",message:b,ts:Date.now()})},onTerminalInput:()=>()=>{},setWorkingVisible:()=>{},setWorkingIndicator:()=>{},setHiddenThinkingLabel:()=>{},setWidget:()=>{},setFooter:()=>{},setHeader:()=>{},setTitle:()=>{},custom:async()=>void 0,pasteToEditor:()=>{},setEditorText:()=>{},getEditorText:()=>"",editor:async()=>void 0,addAutocompleteProvider:()=>{},setEditorComponent:()=>{},getEditorComponent:()=>void 0,getAllThemes:()=>[],getTheme:()=>void 0,setTheme:()=>{},getToolsExpanded:()=>!1,setToolsExpanded:()=>{}},statuses:c,getPendingRequests:()=>[...b.values()].map(({request:a})=>({...a,options:a.options?[...a.options]:void 0})),respond(a,c){let d=b.get(a);return!!d&&(d.resolve(c),!0)},dispose(){for(let a of(e=!0,b.values()))a.resolve({cancelled:!0});b.clear()}}}},28686:(a,b,c)=>{c.a(a,async(a,d)=>{try{c.d(b,{B1:()=>al,H$:()=>x,Hx:()=>ad,Lf:()=>P,Lz:()=>ak,PO:()=>aj,Rq:()=>ar,SG:()=>Q,Sj:()=>ah,al:()=>am,bS:()=>M,g7:()=>ap,lX:()=>aq,mk:()=>N,tX:()=>ai,vJ:()=>as});var e=c(73024),f=c(77598),g=c(76760),h=c.n(g),i=c(75430),j=c(87982),k=c(14719),l=c(35851),m=c(34007),n=c(3672),o=c(31374),p=c(29296),q=c(62433),r=c(34070),s=c(75554),t=c(6896),u=c(6512),v=a([i,j,o,q,s,t]);[i,j,o,q,s,t]=v.then?(await v)():v;let at=globalThis,au=at.__piWebSessions??=new Map;function w(a){if(null==a)return"";if("string"==typeof a)return a;if(Array.isArray(a))return a.map(w).join("");if("object"==typeof a){if("string"==typeof a.text)return a.text;if("string"==typeof a.thinking)return a.thinking}return""}function x(a,b){if(!a||"object"!=typeof a)return{role:"other",content:[]};let c={role:"other",content:[]};b?c.id=b:"string"==typeof a.id&&(c.id=a.id),"number"==typeof a.timestamp&&(c.timestamp=a.timestamp);let d=[];for(let b of Array.isArray(a.content)?a.content:"string"==typeof a.content?[{type:"text",text:a.content}]:[])b&&"object"==typeof b&&("text"===b.type&&"string"==typeof b.text?d.push({type:"text",text:b.text}):"thinking"===b.type&&"string"==typeof b.thinking?d.push({type:"thinking",thinking:b.thinking}):"toolCall"===b.type?d.push({type:"toolCall",id:String(b.id??""),name:String(b.name??""),arguments:b.arguments}):"image"===b.type&&"string"==typeof b.data&&"string"==typeof b.mimeType&&d.push({type:"image",data:b.data,mimeType:b.mimeType}));if(c.content=d,"user"===a.role)c.role="user";else if("assistant"===a.role)c.role="assistant",c.stopReason=a.stopReason,c.errorMessage=a.errorMessage??void 0,c.usage=(0,n.H4)(a.usage),a.usage?.cost?.total!=null&&(c.usage={...c.usage,cost:{total:a.usage.cost.total}}),c.model="string"==typeof a.model?a.model:void 0,c.provider="string"==typeof a.provider?a.provider:void 0;else if("toolResult"===a.role){c.role="toolResult";let b=(0,p.R)(w(a.content));c.content=[{type:"toolResult",toolCallId:a.toolCallId,text:b.text,isError:!0===a.isError,encodingLoss:b.encodingLoss||void 0,patch:z(a.details)}]}return c}let av=new WeakMap;function y(a,b){return{...x(b,function(a,b){if(!b||"object"!=typeof b)return;let c=a.getEntryCount,d=c?null:a.getEntries(),e=c?c.call(a):d.length,f=av.get(a);if(!f||f.count!==e){for(let b of(f={count:e,ids:new WeakMap},d??a.getEntries()))b?.type==="message"&&b.message&&"object"==typeof b.message&&f.ids.set(b.message,b.id);av.set(a,f)}return f.ids.get(b)}(a.sm,b)),streamId:function(a,b){if(!b||"object"!=typeof b)return;a.messageIds??=new WeakMap;let c=a.messageIds.get(b);return c||(c=(0,f.randomUUID)(),a.messageIds.set(b,c)),c}(a,b)}}function z(a){let b=a?.patch;return"string"==typeof b&&b.trim()?b.slice(0,6e4):void 0}let aw=new Map;function A(a){return{target:"string"==typeof a?.path?a.path:"string"==typeof a?.file_path?a.file_path:"",content:"string"==typeof a?.content?a.content:void 0}}function B(a){if(null!=a){if("string"==typeof a)return a.slice(-4e3);if(Array.isArray(a))return a.map(w).join("").slice(-4e3)||void 0;if("object"==typeof a){let b=w(a.content);if(b)return b.slice(-4e3);try{return JSON.stringify(a).slice(-4e3)}catch{}}}}let ax=new WeakMap;function C(a){let b=ax.get(a);if(b){for(;b.length>0&&null!==b[0].events;)for(let c of b.shift().events)D(a,c);0===b.length&&ax.delete(a)}}function D(a,b){if(a.disposed)return;a.seq+=1;let c=JSON.stringify(b);for(let b of(a.buffer.push({seq:a.seq,json:c}),a.buffer.length>400&&a.buffer.shift(),a.subscribers))try{b(a.seq,c)}catch{a.subscribers.delete(b)}}function E(a,b){let c=ax.get(a);if(!c)return D(a,b);c.push({events:[b]}),C(a)}function F(a,b){let c=b.model;E(a,{type:"model",provider:c?String(c.provider??""):void 0,model:c?String(c.id??""):void 0,thinkingLevel:String(b.thinkingLevel??""),thinkingLevels:b.getAvailableThinkingLevels(),ts:Date.now()})}function G(a,b){if(!a.desiredThinkingLevel)return;let c=(0,u.Kt)(b.model,a.desiredThinkingLevel);c!==b.thinkingLevel&&b.setThinkingLevel(c)}function H(a){let b=0,c=0,d=0,e=0,f=0,g=0;for(let h of a.ledger.entries){if("tool"===h.kind){c+=Math.max(0,h.timing?.durationMs??0);continue}"message"===h.kind&&(b+=Math.max(0,h.timing?.durationMs??0),h.timing?.ttftMs!==void 0&&(d+=Math.max(0,h.timing.ttftMs),e+=1),h.timing?.decodeMs!==void 0&&h.tokens?.output!==void 0&&(f+=Math.max(0,h.timing.decodeMs),g+=Math.max(0,h.tokens.output)))}return{llmMs:b,toolMs:c,ttftMs:d,ttftSteps:e,decodeMs:f,decodeTokens:g}}function I(a){if(!a.session)return null;try{let b=a.session.getSessionStats();return{userMessages:b.userMessages,assistantMessages:b.assistantMessages,toolCalls:b.toolCalls,totalMessages:b.totalMessages,tokens:b.tokens,cost:b.cost,...H(a)}}catch{return null}}function J(a){if(!a.session)return null;let b=I(a),c=a.session.getContextUsage()??null;return{type:"usage",stats:b,contextUsage:c?{tokens:c.tokens,contextWindow:c.contextWindow,percent:c.percent}:null,ts:Date.now()}}function K(a){let b=J(a);b&&E(a,b)}function L(a){return a.growth&&a.growth.version!==l.I&&(a.growth.dispose(),a.growth=null),a.growth??=(0,l.k)({cwd:a.cwd,sessionPath:a.sessionPath,publish:b=>E(a,b),entries:()=>a.sm.getEntries(),consent:()=>(0,t.qM)(a.cwd).catch(()=>null)})}async function M(a){return O(a),L(a).recordNow()}async function N(a,b){O(a),await (0,t.cH)(a.cwd,b);let c=a=>"win32"===process.platform?h().resolve(a).toLowerCase():h().resolve(a);for(let d of au.values())d!==a&&d.growth?.getConsentRequest()&&c(d.cwd)===c(a.cwd)&&d.growth.consentAnswered(b).catch(()=>void 0);return L(a).consentAnswered(b)}function O(a){a.lastActive=Date.now()}let ay=new Set;function P(a){for(let b of a){if(!b||ay.size>=2)return;let a="win32"===process.platform?b.toLowerCase():b;!ay.has(a)&&(ay.add(a),(0,j.v9)(b)||(0,j.Df)(b).catch(()=>void 0))}}function Q(a){let b=au.get(a);if(!b){if(!(0,e.existsSync)(a))throw new q.BV("session not found");let c=(0,j.G1)(a);b=R(a,c.getCwd()||process.cwd(),c)}return O(b),b}function R(a,b,c){let d=[];try{d=(0,n.WZ)(c.getEntries())}catch{}let e={sessionPath:a,cwd:b,sm:c,session:null,creating:null,subscribers:new Set,buffer:[],seq:0,epoch:(0,f.randomUUID)().replace(/-/g,"").slice(0,12),inflight:null,ui:null,growth:null,ledger:new n.Pn(d),lastActive:Date.now(),toolPreset:"readonly",requestedTools:new Set,resourceVersion:0,resourceReloadPending:!1,resourceReloading:!1,promptSubmitting:!1,runActive:!1,disposed:!1,messageIds:new WeakMap};return au.set(a,e),e}function S(a,b=(0,j.ye)(a)){let c=b.getAgentsFiles().agentsFiles.map(a=>({path:a.path,content:a.content,source:"project"})),d=b.getAppendSystemPrompt(),e=b.getAppendSystemPromptSources();return[...c,...d.map((a,b)=>({path:e[b]?.path??`Appended system prompt ${b+1}`,content:a,source:"extension"}))]}async function T(a,b,c){let d={systemPrompt:0,systemTools:0,customTools:0,memory:0,skills:0,compacted:0,autoCompactBuffer:0};if(!b)return d;try{let a=b.systemPrompt??"",f=c.filter(a=>"project"===a.source).map(a=>a.content).join("\n\n");d.memory=(0,r.ec)(f);try{let{skills:c}=b.resourceLoader.getSkills();if(c.length&&a){let b=a.indexOf("The following skills provide specialized instructions"),c=a.indexOf("</available_skills>");b>=0&&c>b&&(d.skills=(0,r.ec)(a.slice(b,c+19)))}}catch{}let g=d.memory+d.skills;d.systemPrompt=Math.max(0,(0,r.ec)(a)-g);try{for(let a of b.getAllTools()){let b=(0,r.ec)(JSON.stringify({name:a.name,description:a.description,parameters:a.parameters,promptGuidelines:a.promptGuidelines}));a.sourceInfo?.source==="builtin"?d.systemTools+=b:d.customTools+=b}}catch{}try{var e;let a=(e=b,e.sm?.getEntries?.()??e.sessionManager?.getEntries?.()??[]);for(let b=a.length-1;b>=0;b-=1){let c=a[b];if(c?.type==="compaction"&&"string"==typeof c.summary){d.compacted=(0,r.ec)(c.summary);break}}}catch{}try{let a=await (0,s.J0)();a.compaction.enabled&&(d.autoCompactBuffer=a.compaction.reserveTokens)}catch{}}catch{}return d}function U(a,b,c){let d=a.ledger.entries[0]?.ts??Date.now(),e=[];b?.systemPrompt&&e.push({seq:-1,kind:"system",ts:d,title:"Initial System Prompt",detail:b.systemPrompt});try{(c??S(a.cwd,a.session?.resourceLoader)).forEach((a,b)=>e.push({seq:-2-b,kind:"context",ts:d,title:a.path,detail:a.content}))}catch{}return e}function V(a,b){for(let c of U(a,b))E(a,{type:"traj",entry:c,ts:Date.now()})}async function W(a){if(a.disposed)throw Error("session is disposed");return a.creating?a.creating:a.session?a.session:(a.creating=(async()=>{let b;await (0,j.Df)(a.cwd);let c=await (0,j.Yb)(a.cwd);try{var d,f;let g,l;if(a.disposed)throw Error("session is disposed");let{session:m}=await (0,j.az)({cwd:a.cwd,agentDir:(0,j.$M)(),sessionManager:a.sm,modelRuntime:await (0,j.uU)(),resourceLoader:c,settingsManager:(0,j.vT)(a.cwd)});if(b=m,a.disposed)throw Error("session is disposed");a.session=m,a.requestedTools=new Set(m.getActiveToolNames()),d=a,g=(f=m).setActiveToolsByName.bind(f),az.set(f,g),f.setActiveToolsByName=a=>{let b=[...new Set(a)];for(let a of ab(f))b.includes(a)||d.requestedTools.delete(a);for(let a of b)d.requestedTools.add(a);let c=Y(d,f);g(b.filter(a=>c.includes(a)))},l=f.reload.bind(f),f.reload=async a=>{if(d.disposed)throw Error("session is disposed");if(X(d))throw Error("session is busy");d.resourceReloading=!0;try{await (0,j.YW)(async()=>{if(d.disposed||d.runActive||!f.isIdle)throw Error("session is busy");await l({beforeSessionStart:async()=>{for(let a of ab(f))d.requestedTools.add(a);Z(d,f),await a?.beforeSessionStart?.(),Z(d,f)}})}),d.resourceVersion=(0,j.Ec)(d.cwd)}finally{Z(d,f),d.resourceReloading=!1,d.disposed||(_(d,f),V(d,f),af(d))}},Z(a,m),m.subscribe(b=>{a.disposed||function(a,b){a.ledger.onEvent(b),L(a).onEvent(b);let c=Date.now();switch(b.type){case"message_start":{let d=b.message,e=y(a,d);"assistant"===e.role&&(a.inflight=d,a.inflightId=e.streamId,a.inflightIndex=a.session?.messages.length,e.stopReason="pending",e.content=e.content.map(a=>"text"===a.type?{...a,text:""}:"thinking"===a.type?{...a,thinking:""}:a)),("user"===e.role||"assistant"===e.role)&&E(a,{type:"message",message:e,phase:"start",ts:c});break}case"message_update":{let d=b.assistantMessageEvent;if(b.message&&(a.inflight=b.message,a.inflightId&&a.messageIds.set(b.message,a.inflightId)),!d)break;"text_delta"===d.type&&"string"==typeof d.delta?E(a,{type:"delta",kind:"text",contentIndex:d.contentIndex,delta:d.delta,messageId:a.inflightId,ts:c}):"thinking_delta"===d.type&&"string"==typeof d.delta&&E(a,{type:"delta",kind:"thinking",contentIndex:d.contentIndex,delta:d.delta,messageId:a.inflightId,ts:c});break}case"message_end":{let d,e,f=b.message;f?.role==="assistant"&&(a.inflightId&&a.messageIds.set(f,a.inflightId),a.inflight=null,a.inflightId=void 0,a.inflightIndex=void 0),d=ax.get(a)??[],e={events:null},d.push(e),ax.set(a,d),queueMicrotask(()=>{e.events=(()=>{let b=y(a,f);"assistant"===b.role&&(b.endedAt=c);let d=J(a);return d?[{type:"message",message:b,phase:"end",ts:c},d]:[{type:"message",message:b,phase:"end",ts:c}]})(),C(a)});break}case"tool_execution_start":b.toolName?.toLowerCase()==="write"&&function(a,b,c,d){let{target:f}=A(d);if(f)try{let d=h().isAbsolute(f)?f:h().resolve(a,f),g=(0,e.statSync)(d);if(!g.isFile()||g.size>524288)return;let i=(0,e.readFileSync)(d,"utf8");if(i.includes("\0"))return;aw.size>=256&&aw.delete(aw.keys().next().value),aw.set(`${b}\u0000${c}`,i)}catch{}}(a.cwd,a.sessionPath,b.toolCallId,b.args),E(a,{type:"tool",id:b.toolCallId,name:b.toolName,args:b.args,state:"running",ts:c});break;case"tool_execution_update":{let d=(0,p.R)(B(b.partialResult)??"");E(a,{type:"tool",id:b.toolCallId,name:b.toolName,state:"running",partialResult:d.text||void 0,encodingLoss:d.encodingLoss||void 0,ts:c});break}case"tool_execution_end":{let d=(0,p.R)(B(b.result)??"");E(a,{type:"tool",id:b.toolCallId,name:b.toolName,args:b.args,state:"done",result:d.text||void 0,isError:b.isError,encodingLoss:d.encodingLoss||void 0,patch:z(b.result?.details)??(b.toolName?.toLowerCase()==="write"?function(a,b,c,d){let e=`${b}\u0000${c}`,f=aw.get(e);if(aw.delete(e),void 0===f)return;let{target:g,content:h}=A(d);if(void 0!==h&&h!==f)try{return(0,i.generateUnifiedPatch)(g,f,h).slice(0,6e4)}catch{return}}(a.cwd,a.sessionPath,b.toolCallId,b.args):void 0),ts:c}),K(a);break}case"agent_start":a.runActive=!0,E(a,{type:"status",isStreaming:!0,state:"running",ts:c});break;case"agent_end":K(a);break;case"agent_settled":a.runActive=!1,E(a,{type:"status",isStreaming:!1,state:"idle",ts:c}),K(a),a.resourceReloadPending&&queueMicrotask(()=>void ag(a));break;case"queue_update":E(a,{type:"queue",steering:[...b.steering],followUp:[...b.followUp],ts:c});break;case"compaction_start":E(a,{type:"status",isStreaming:!0,state:"compacting",ts:c}),E(a,{type:"compaction",phase:"start",reason:b.reason,ts:c});break;case"compaction_end":E(a,{type:"compaction",phase:"end",reason:b.reason,errorMessage:b.errorMessage,ts:c}),K(a),"manual"===b.reason&&(E(a,{type:"status",isStreaming:X(a),state:X(a)?"running":"idle",ts:c}),a.resourceReloadPending&&queueMicrotask(()=>void ag(a)));break;case"session_info_changed":E(a,{type:"name",name:b.name??"",ts:c});break;case"thinking_level_changed":a.session?F(a,a.session):E(a,{type:"model",thinkingLevel:b.level,ts:c});break;case"auto_retry_start":E(a,{type:"retry",attempt:Number(b.attempt)||0,maxAttempts:Number(b.maxAttempts)||0,message:String(b.errorMessage??""),ts:c})}for(let b of a.ledger.drainDirty())E(a,{type:"traj",entry:b,ts:Date.now()})}(a,b)});let n=(0,k.X)({publish:b=>E(a,b),hasViewers:()=>!a.disposed&&a.subscribers.size>0});if(a.ui=n,await m.bindExtensions({mode:"rpc",uiContext:n.uiContext,onError:b=>{E(a,{type:"error",message:`扩展 ${b.extensionPath.split(/[\\/]/).pop()} 在 ${b.event} 出错:${b.error}`,ts:Date.now()})},abortHandler:()=>void m.abort().catch(()=>void 0)}),a.disposed)throw Error("session is disposed");return Z(a,m),a.resourceVersion=(0,j.Ec)(a.cwd),V(a,m),_(a,m),af(a),K(a),m}catch(e){a.ui?.dispose(),a.ui=null;let d=c.getExtensions().runtime;throw b?$(b).finally(()=>d.invalidate()):d.invalidate(),a.session=null,e}})().catch(b=>{throw a.disposed||E(a,{type:"error",message:String(b?.message??b),ts:Date.now()}),b}).finally(()=>{a.creating=null}),a.creating)}function X(a){return a.promptSubmitting||a.resourceReloading||a.runActive||!!(a.session&&!a.session.isIdle)}function Y(a,b){let c=a.customActiveTools;return aa(b).filter(b=>c?c.includes(b):(0,j.YQ)(a.toolPreset,b))}let az=new WeakMap;function Z(a,b){let c=function(a,b){let c=Y(a,b);if(a.customActiveTools)return c;let d=new Set(b.getAllTools().filter(a=>("direct"===a.exposure||"model-only"===a.exposure)&&b.getToolDefinition(a.name)?.defaultActive!==!1).map(a=>a.name));return c.filter(b=>d.has(b)||a.requestedTools.has(b))}(a,b);(az.get(b)??b.setActiveToolsByName.bind(b))(c)}let aA=new WeakMap;function $(a){let b,c=aA.get(a);if(c)return c;try{a.agent.abort()}catch{}let d=Promise.resolve();try{let b=a.extensionRunner;b.hasHandlers("session_shutdown")&&(d=b.emit({type:"session_shutdown",reason:"quit"}))}catch{}let e=new Promise(a=>{b=setTimeout(a,5e3),b.unref?.()}),f=Promise.race([d.then(()=>void 0,()=>void 0),e]).finally(()=>{clearTimeout(b);try{a.dispose()}catch{}});return aA.set(a,f),f}function _(a,b){E(a,{type:"tools",active:ab(b),all:aa(b),toolPreset:a.toolPreset,customActiveTools:a.customActiveTools??null,ts:Date.now()})}function aa(a){let b=a.getAllTools?.();return b?b.map(a=>a.name):[]}function ab(a){return a.getActiveToolNames?.()??[]}function ac(a){if(!a.disposed){for(let b of(a.disposed=!0,a.ui?.dispose(),a.ui=null,a.growth?.dispose(),a.growth=null,a.session&&$(a.session),a.creating&&a.creating.then(a=>a?$(a):void 0).catch(()=>void 0),a.subscribers))try{b(a.seq,JSON.stringify({type:"status",isStreaming:!1,state:"disposed",ts:Date.now()}))}catch{}a.subscribers.clear(),au.delete(a.sessionPath)}}async function ad(a){let b=au.get(a);if(!b)return;let c=b.session??(b.creating?await b.creating.catch(()=>null):null);c?.isStreaming&&await c.abort().catch(()=>void 0),ac(b)}{let a=globalThis;a.__piWebReaper&&clearInterval(a.__piWebReaper),a.__piWebReaper=setInterval(function(){let a=Date.now();for(let b of[...au.values()])!(b.subscribers.size>0)&&!(a-b.lastActive<=6e5)&&(b.creating||X(b)||ac(b));let b=[...au.values()].filter(a=>a.session);if(b.length>6)for(let a of b.filter(a=>!a.creating&&!X(a)&&0===a.subscribers.size).sort((a,b)=>a.lastActive-b.lastActive).slice(0,b.length-6))ac(a)},6e4),a.__piWebReaper.unref?.()}function ae(a){let b=a.session?.resourceLoader??(0,j.v9)(a.cwd)??(0,j.ye)(a.cwd),c=[],d=[];try{let a=b.getSkills();for(let b of(d=a.skills.map(a=>({name:String(a.name??""),description:String(a.description??"")})),a.diagnostics??[]))c.push({kind:"skill",path:b.path,message:b.message})}catch{d=[]}let e=[];try{let a=b.getPrompts();for(let b of(e=a.prompts.map(a=>({name:String(a.name??""),description:String(a.description??""),argumentHint:a.argumentHint})),a.diagnostics??[]))c.push({kind:"prompt",path:b.path,message:b.message})}catch{e=[]}try{for(let a of b.getExtensions().errors??[])c.push({kind:"extension",path:a.path,message:a.error})}catch{}let f=[];if(a.session)try{let b=a.session.extensionRunner;if(b)for(let a of(f=b.getRegisteredCommands().map(a=>({name:a.invocationName,description:String(a.description??""),source:String(a.sourceInfo?.path??"").split(/[\\/]/).pop()??""})),b.getCommandDiagnostics()??[]))c.push({kind:"command",path:a.path,message:a.message})}catch{f=[]}return{skills:d,promptTemplates:e,extensionCommands:f,projectTrust:(0,j.af)(a.cwd),resourceDiagnostics:c}}function af(a){E(a,{type:"resources",...ae(a),ts:Date.now()})}async function ag(a){if(a.disposed||!a.session||a.creating||X(a))return!1;a.resourceReloadPending=!1;try{await a.session.reload();let b=a.session.model,c=b&&a.session.modelRuntime.getModel(b.provider,b.id);return c&&c!==b&&(a.session.agent.state.model=c),!0}catch(b){return E(a,{type:"error",message:`重载扩展失败:${String(b?.message??b)}`,ts:Date.now()}),!1}finally{a.resourceReloadPending&&!X(a)&&queueMicrotask(()=>void ag(a))}}async function ah(a){let b=a=>"win32"===process.platform?a.replace(/\\/g,"/").toLowerCase():a.replace(/\\/g,"/"),c=0;for(let d of au.values())if(!a||b(d.cwd)===b(a)){if(!d.session){d.subscribers.size>0&&af(d);continue}if(d.creating||X(d)){d.resourceReloadPending=!0,E(d,{type:"error",message:"资源已更新,将在本轮结束后生效",ts:Date.now()}),af(d);continue}await ag(d)&&(c+=1)}return c}async function ai(a){let b,c,d,e;O(a),await (0,j.Df)(a.cwd);try{a.session&&X(a)?((0,j.Dc)(a.cwd)||a.resourceVersion!==(0,j.Ec)(a.cwd))&&(a.resourceReloadPending=!0):(await (0,j.jz)(a.cwd),a.session&&(a.resourceReloadPending||a.resourceVersion!==(0,j.Ec)(a.cwd))&&(a.resourceReloadPending=!0,await ag(a)))}catch{}let f=a.session,g=[],h=!1,i=["off","minimal","low","medium","high","xhigh","max"];if(f){let e=function(a,b){if(!a.inflightId||void 0===a.inflightIndex)return!1;let c=b.messages[a.inflightIndex];return!!c&&"assistant"===c.role&&(a.messageIds.set(c,a.inflightId),!0)}(a,f);if(g=f.messages.map(b=>y(a,b)),!e&&a.inflight){let b=y(a,a.inflight);"assistant"===b.role&&g.push({...b,stopReason:"pending"})}b=a.seq;let j=f.model;j&&(c={provider:String(j.provider??""),id:String(j.id??""),name:String(j.name??j.id??"")}),d=String(f.thinkingLevel??"");try{i=f.getAvailableThinkingLevels()}catch{}h=X(a)}else{try{g=a.sm.buildContextEntries().filter(a=>"message"===a.type&&a.message).map(a=>x(a.message,a.id))}catch{g=[]}try{let b=a.sm,e=b.buildSessionContext?.();if(e?.model&&(c={provider:e.model.provider,id:e.model.modelId,name:e.model.modelId}),d=e?.thinkingLevel,e?.model){let a=(await (0,j.uU)()).getModel(e.model.provider,e.model.modelId);a&&(i=(0,u.W8)(a),d&&(d=(0,u.Kt)(a,d)))}}catch{}}let k=f?I(a):function(a){let b=0,c=0,d=0,e=0,f={input:0,output:0,cacheRead:0,cacheWrite:0,total:0},g=0,h=a=>{a&&"object"==typeof a&&(f.input+=Number(a.input??0),f.output+=Number(a.output??0),f.cacheRead+=Number(a.cacheRead??0),f.cacheWrite+=Number(a.cacheWrite??0),g+=Number(a.cost?.total??0))};for(let f of a.sm.getEntries()){if(("branch_summary"===f.type||"compaction"===f.type)&&f.usage&&h(f.usage),"message"!==f.type||!f.message)continue;e+=1;let a=f.message;"user"===a.role?b+=1:"assistant"===a.role?(c+=1,d+=Array.isArray(a.content)?a.content.filter(a=>a?.type==="toolCall").length:0,h(a.usage)):"toolResult"===a.role&&h(a.usage)}return f.total=f.input+f.output+f.cacheRead+f.cacheWrite,{userMessages:b,assistantMessages:c,toolCalls:d,totalMessages:e,tokens:f,cost:g,...H(a)}}(a),l=null;if(f){let a=f.getContextUsage()??null;l=a?{tokens:a.tokens,contextWindow:a.contextWindow,percent:a.percent}:null}else if(c)try{let b=(await (0,j.uU)()).getModels(c.provider).find(a=>String(a.id)===c.id),d=Number(b?.contextWindow??0),e=0,f=a.sm.getEntries(),h=!1;for(let a=f.length-1;a>=0;a--){let b=f[a];if("compaction"===b.type||"branch_summary"===b.type){h=!0;break}if("message"===b.type&&b.message?.role==="assistant"&&"error"!==b.message.stopReason&&"aborted"!==b.message.stopReason)break}for(let a=g.length-1;a>=0&&!h;a--){let b=g[a];if("assistant"===b.role&&b.usage){e=Number(b.usage.input??0)+Number(b.usage.cacheRead??0)+Number(b.usage.cacheWrite??0)+Number(b.usage.output??0);break}}d>0&&e>0?l={tokens:e,contextWindow:d,percent:e/d*100}:d>0&&(l={tokens:null,contextWindow:d,percent:null})}catch{}let o=f?{active:ab(f),all:aa(f).map(a=>({name:a}))}:{active:[],all:[]},p=f?{steering:[...f.getSteeringMessages()],followUp:[...f.getFollowUpMessages()]}:{steering:[],followUp:[]},q="";try{q=a.sm.getSessionName?.()??""}catch{q=""}let r=[],s=!1;try{r=S(a.cwd,a.session?.resourceLoader),s=!0}catch{r=[]}try{e=await T(a.cwd,a.session,r)}catch{e=void 0}let t=ae(a),v=a.ledger.entries.length?a.ledger.entries:function(a){try{return(0,n.WZ)(a.sm.getEntries())}catch{return[]}}(a),w=[...U(a,f,s?r:void 0),...v];return{seq:b??a.seq,sessionPath:a.sessionPath,cwd:a.cwd,name:q,contextFiles:r.map(a=>a.path),contextResources:r,contextBreakdown:e,...t,messages:g,userTurns:(0,m.g)(a.sm.getEntries()),growthError:a.growth?.getError?.()??null,growthConsent:a.growth?.getConsentRequest?.()??null,model:c,thinkingLevel:d,thinkingLevels:i,toolPreset:a.toolPreset,customActiveTools:a.customActiveTools??null,extensionUiRequests:a.ui?.getPendingRequests()??[],extensionStatuses:Object.fromEntries(a.ui?.statuses??[]),tools:o,stats:k,contextUsage:l,queue:p,trajectory:w,isStreaming:h}}function aj(a,b){return`${a.epoch}.${b}`}function ak(a,b){let c=/^([A-Za-z0-9]+)\.(\d+)$/.exec(b?.trim()??"");if(!c||c[1]!==a.epoch)return;let d=Number(c[2]);return Number.isSafeInteger(d)?d:void 0}function al(a,b,c){if(O(a),c<0||c>a.seq)return!1;let d=a.buffer.filter(a=>a.seq>c);if(d.length!==a.seq-c)return!1;let e=new Set(a.ui?.getPendingRequests().map(a=>a.id));if(d.some(a=>{let b=JSON.parse(a.json);return"extension_ui"===b.type&&["select","confirm","input"].includes(b.method)&&!e.has(b.id)}))return!1;for(let c of(a.subscribers.add(b),d))b(c.seq,c.json);return!0}function am(a,b){a.subscribers.delete(b)}async function an(a){await Promise.race([L(a).prepare().catch(()=>void 0),new Promise(a=>setTimeout(a,5e3))])}function ao(a,b,c,d={}){return new Promise(e=>{let f=!1;b.prompt(c,{...d,source:"rpc",preflightResult:a=>{a&&(f=!0,e({ok:!0,data:{accepted:!0}}))}}).then(()=>{f||e({ok:!1,error:"prompt completed without acceptance"})},b=>{let c=String(b?.message??b);f?E(a,{type:"error",message:c,ts:Date.now()}):e({ok:!1,error:c})})})}async function ap(a,b){O(a);try{switch(b.cmd){case"prepare":return await W(a),{ok:!0};case"prompt":{let c=(b.text??"").trim();if(!c&&!b.images?.length)return{ok:!1,error:"empty prompt"};if(a.promptSubmitting||a.resourceReloading)return{ok:!1,error:"session is busy accepting another command"};a.promptSubmitting=!0;try{let d=await W(a);if(a.disposed)throw Error("session is disposed");if((d.isStreaming||a.runActive)&&!b.behavior)return{ok:!1,error:"session is busy; choose steer or followUp"};if(d.isStreaming||await an(a),a.disposed)throw Error("session is disposed");return await ao(a,d,c,{images:b.images,streamingBehavior:b.behavior})}finally{a.promptSubmitting=!1,a.disposed||E(a,{type:"status",isStreaming:X(a),state:X(a)?"running":"idle",ts:Date.now()}),a.resourceReloadPending&&queueMicrotask(()=>void ag(a))}}case"steer":case"followUp":{if(a.promptSubmitting||a.resourceReloading)return{ok:!1,error:"session is busy accepting another command"};let c=await W(a);if(a.promptSubmitting||a.resourceReloading||!c.isStreaming)return{ok:!1,error:"session is not accepting queued messages"};return await c[b.cmd](b.text??"",b.images),{ok:!0}}case"clearQueue":{if(!a.session)return{ok:!0,data:{steering:[],followUp:[]}};let b=a.session.clearQueue();return E(a,{type:"queue",steering:[],followUp:[],ts:Date.now()}),{ok:!0,data:b}}case"abort":{if(!a.session)return{ok:!0,data:{steering:[],followUp:[]}};let b=a.session.clearQueue();return await a.session.abort(),E(a,{type:"status",isStreaming:!1,state:"aborted",ts:Date.now()}),{ok:!0,data:b}}case"compact":{let c=await W(a);return await c.compact(b.instructions||void 0),{ok:!0}}case"setModel":{let c=await W(a),d=(await (0,j.uU)()).getModels(b.provider).find(a=>a.id===b.modelId);if(!d)return{ok:!1,error:`unknown model ${b.provider}/${b.modelId}`};return await c.setModel(d,{persist:!1}),G(a,c),F(a,c),{ok:!0,data:{thinkingLevel:c.thinkingLevel,thinkingLevels:c.getAvailableThinkingLevels()}}}case"setThinkingLevel":{let c=await W(a),d=String(b.level??"medium"),e=(0,u.Kt)(c.model,d);return a.desiredThinkingLevel=d,c.setThinkingLevel(e),F(a,c),{ok:!0,data:{requested:d,thinkingLevel:c.thinkingLevel,clamped:c.thinkingLevel!==d}}}case"setToolPreset":{let c=b.preset;if(!Object.hasOwn(j.Ax,c))return{ok:!1,error:"invalid tool preset"};if(X(a))return{ok:!1,error:"cannot change tools while the agent is running"};if(!a.session&&!a.creating)return a.toolPreset=c,a.customActiveTools=void 0,E(a,{type:"tools",active:[],all:[],toolPreset:c,customActiveTools:null,ts:Date.now()}),{ok:!0};let d=await W(a);if(X(a))return{ok:!1,error:"cannot change tools while the agent is running"};return a.toolPreset=c,a.customActiveTools=void 0,Z(a,d),V(a,d),_(a,d),{ok:!0}}case"setActiveTools":{if(X(a))return{ok:!1,error:"cannot change tools while the agent is running"};let c=await W(a);if(X(a))return{ok:!1,error:"cannot change tools while the agent is running"};let d=Array.isArray(b.names)?b.names.map(String):[],e=aa(c),f=[...new Set(d)].filter(a=>e.includes(a));if(0===f.length)return{ok:!1,error:"cannot disable all tools"};return a.customActiveTools=f,Z(a,c),V(a,c),_(a,c),{ok:!0,data:{active:ab(c)}}}case"cycleModel":{let c=await W(a),d=await c.cycleModel(b.direction??"forward");if(d?.model)return G(a,c),F(a,c),{ok:!0,data:{model:String(d.model.id??""),thinkingLevel:c.thinkingLevel}};return{ok:!1,error:"no scoped models to cycle"}}case"navigate":{let c=await W(a),d=String(b.entryId??"");if(!d)return{ok:!1,error:"missing entryId"};let e=await c.navigateTree(d);return{ok:!e?.cancelled,data:{cancelled:e?.cancelled===!0,editorText:e?.editorText}}}case"editAndResend":{let c=String(b.entryId??""),d=(b.text??"").trim();if(!c)return{ok:!1,error:"missing entryId"};if(!d)return{ok:!1,error:"empty prompt"};if(a.promptSubmitting||a.resourceReloading)return{ok:!1,error:"session is busy accepting another command"};a.promptSubmitting=!0;try{let b=await W(a);if(a.disposed)throw Error("session is disposed");if(b.isStreaming||a.runActive){await b.abort().catch(()=>void 0);for(let c=0;c<50&&!a.disposed&&(b.isStreaming||a.runActive);c+=1)await new Promise(a=>setTimeout(a,100))}if(a.disposed)throw Error("session is disposed");let e=await b.navigateTree(c);if(e?.cancelled)return{ok:!1,error:"edit cancelled"};if(await an(a),a.disposed)throw Error("session is disposed");return await ao(a,b,d)}finally{a.promptSubmitting=!1,a.disposed||E(a,{type:"status",isStreaming:X(a),state:X(a)?"running":"idle",ts:Date.now()}),a.resourceReloadPending&&queueMicrotask(()=>void ag(a))}}case"rename":{let c=(b.text??"").trim();return a.session?a.session.setSessionName(c):a.sm.appendSessionInfo(c),E(a,{type:"name",name:c,ts:Date.now()}),{ok:!0}}case"extensionUiResponse":return a.ui?.respond(String(b.requestId),{value:b.value,confirmed:b.confirmed,cancelled:b.cancelled})?{ok:!0}:{ok:!1,error:"no pending extension request"};case"reload":{if(X(a))return{ok:!1,error:"session is busy"};let b=await W(a);return await b.reload(),{ok:!0}}case"fork":{let c=(b.entryId?j.Cv.open(a.sessionPath).createBranchedSession(b.entryId):j.Cv.forkFrom(a.sessionPath,a.cwd).getSessionFile())??"";if(!c)return{ok:!1,error:"failed to create forked session"};return{ok:!0,data:{sessionPath:c}}}default:return{ok:!1,error:"unknown cmd"}}}catch(a){return{ok:!1,error:String(a?.message??a)}}}async function aq(a){let b=j.Cv.create(a),c=b.getSessionFile()??"";if(!c)throw Error("failed to create session file");return R(c,a,b),{sessionPath:c}}function ar(){let a={};for(let[b,c]of au){let d;if(c.session){for(let a=c.ledger.entries.length-1;a>=0;a-=1){let b=c.ledger.entries[a];if("tool"===b.kind){d=[b.toolName,(b.preview??b.title??"").split("\n")[0].slice(0,80)].filter(Boolean).join(" \xb7 ");break}}a[b]={streaming:X(c),lastStep:d}}}return a}async function as(a,b){let d=a.sessionPath.replace(/\\/g,"/").split("/").pop()??"session";if("jsonl"===b){let{readFile:b}=await Promise.resolve().then(c.t.bind(c,51455,23));return{filename:d,content:await b(a.sessionPath,"utf8"),contentType:"application/jsonl"}}let e=await W(a),f=await e.exportToHtml(),{readFile:g,rm:h}=await Promise.resolve().then(c.t.bind(c,51455,23)),i=await g(f,"utf8");return await h(f,{force:!0}).catch(()=>void 0),{filename:d.replace(/\.jsonl$/,".html"),content:i,contentType:"text/html"}}(0,o.j8)({isActive:function(a){let b="win32"===process.platform?a.toLowerCase():a;for(let a of au.keys())if(("win32"===process.platform?a.toLowerCase():a)===b)return!0;return!1},log:a=>console.log(a)}),d()}catch(a){d(a)}})},31374:(a,b,c)=>{c.a(a,async(a,d)=>{try{c.d(b,{j8:()=>l});var e=c(51455),f=c.n(e),g=c(76760),h=c.n(g),i=c(6896),j=a([i]);async function k({now:a=Date.now(),retentionDays:b=30,isActive:d=()=>!1,log:e=console.log,dryRun:g=!1}={}){let j={scanned:0,deleted:[],missing:[],skippedActive:[],kept:0};if(!Number.isFinite(b)||b<=0)return j;let l=a-24*b*36e5,{archivedSessions:m}=await (0,i.vQ)();for(let k of m){let m;j.scanned+=1;let n=h().resolve(k);if(d(n)){j.skippedActive.push(n),j.kept+=1;continue}try{let a=await f().stat(n);if(!a.isFile())throw Object.assign(Error("not a file"),{code:"ENOENT"});m=a.mtimeMs}catch(a){if("ENOENT"!==a.code)throw a;j.missing.push(n),g||await (0,i.Iz)(n);continue}if(m>l){j.kept+=1;continue}let o=Math.floor((a-m)/864e5);if(j.deleted.push({path:n,idleDays:o}),g)continue;let{deleteSession:p}=await c.e(229).then(c.bind(c,66229));await p(n),await (0,i.Iz)(n),e(`[piweb] 归档会话已超过 ${b} 天没有活动(${o} 天),已删除:${n}`)}return j}i=(j.then?(await j)():j)[0];let m=!1;function l({intervalMs:a=216e5,delayMs:b=5e3,log:c=console.log,isActive:d}={}){if(m)return;m=!0;let e=async()=>{Date.now();try{let a=await k({log:c,isActive:d});(a.deleted.length||a.missing.length)&&c(`[piweb] 归档清理:删除 ${a.deleted.length} 个,清理失效记录 ${a.missing.length} 个,保留 ${a.kept} 个`)}catch(a){c(`[piweb] 归档清理失败:${a instanceof Error?a.message:a}`)}},f=setTimeout(()=>{e();let b=setInterval(()=>void e(),a);b.unref?.()},b);f.unref?.()}d()}catch(a){d(a)}})},34007:(a,b,c)=>{function d(a){let b=[];for(let[c,d]of a.entries()){if("message"!==d.type||d.message?.role!=="user")continue;let a="number"==typeof d.timestamp?d.timestamp:Date.parse(d.timestamp??""),e=Number.isFinite(a)?a:d.message.timestamp;b.push({id:d.id??`entry:${c}`,ts:"number"==typeof e&&Number.isFinite(e)?e:NaN})}return b}function e(a,b=0){let c=[],d="";for(let e of a.slice(Math.max(0,b)))if("message"===e.type&&e.message?.role==="user"&&e.id){var f;c.push(e.id),d||(d=("string"==typeof(f=e.message.content)?f:!Array.isArray(f)?"":f.map(a=>a&&"object"==typeof a&&"text"===a.type?String(a.text??""):"").join("")).split("\n").map(a=>a.trim()).find(Boolean)??"")}return{ids:c,title:d}}c.d(b,{S:()=>e,g:()=>d})},34070:(a,b,c)=>{c.d(b,{ec:()=>d});function d(a){return Math.ceil(a.length/4)}},35851:(a,b,c)=>{c.d(b,{I:()=>f,k:()=>g});var d=c(83188),e=c(34007);let f=5;function g(a){let{cwd:b,sessionPath:c,publish:g,entries:h,consent:i}=a,j=!1,k=null,l=!1,m=0,n=!1,o=null,p=Promise.resolve(),q=null,r=0,s=!1,t=null,u=a=>{let c=a instanceof Error?a.message:String(a),e=a instanceof d.qy&&("unavailable"===a.code||"too-large"===a.code);e&&(j=!0,k=a,q=null),n=!0,o=c;let f=Date.now();(e||!(f-m<6e4))&&(m=f,console.warn(`[piweb] growth commit failed for ${b}: ${c}`),g({type:"growth_error",message:c,ts:f}))},v=a=>p=p.then(a,a).catch(u),w=a=>(n&&(n=!1,o=null,g({type:"growth_error",message:null,ts:Date.now()})),a&&!l&&g({type:"growth",round:a,ts:Date.now()}),a),x=()=>{j=!0,k=new d.qy("growth tracking was declined for this workspace","unavailable"),q=null},y=async(a,c)=>{let e=s?await i():null;if(!1===e)return void x();if(!s||null!==e)try{return await a({allowInit:!0===e,abortIf:c})}catch(f){if(!(f instanceof d.qy)||"needs-consent"!==f.code)throw f;s=!0;let e=await i();if(!1===e)return void x();if(!0===e)return a({allowInit:!0,abortIf:c});t||l||g({type:"growth_consent",request:t={cwd:b,reason:f.target?.reason??"not-git",parent:f.target?.parent},ts:Date.now()});return}},z=a=>y(a=>(0,d.uP)(b,c,a),a);return{version:f,getError:()=>o,getConsentRequest:()=>t,prepare(){if(j||l)return p;let a=r;return v(async()=>{if(j||l)return;let b=await z(()=>r!==a);void 0!==b&&w(b)})},onEvent(a){if(!l&&!j)switch(a.type){case"agent_start":null===q&&(q=h().length,r+=1);break;case"agent_settled":{if(null===q)break;let a=h().slice(q),{ids:f,title:g}=(0,e.S)(a);q=null,v(async()=>{if(j||l)return;let e=await y(e=>(0,d.qo)(b,{kind:"round",session:c,title:g,promptIds:f,status:function(a){for(let b=a.length-1;b>=0;b-=1){let c="message"===a[b].type?a[b].message:void 0;if(c?.role==="assistant"){if("aborted"===c.stopReason)return"aborted";if("error"===c.stopReason)return"error";break}}return"done"}(a)},e));void 0!==e&&w(e)})}}},async recordNow(){let a;if(j)throw k??new d.qy("growth tracking is disabled for this workspace","unavailable");let b=null;if(await v(async()=>{try{if(j)throw k??new d.qy("growth tracking is disabled for this workspace","unavailable");let a=await z();if(void 0===a)throw j?k??new d.qy("growth tracking is disabled for this workspace","unavailable"):new d.qy("growth tracking is waiting for permission to create a git repository","needs-consent");b=w(a)}catch(b){a=b,b instanceof d.qy&&"needs-consent"===b.code||u(b)}}),a)throw a;return b},async consentAnswered(a){let b=t;if(t=null,b&&!l&&g({type:"growth_consent",request:null,ts:Date.now()}),!a)return x(),null;if(j||l)return null;let c=null;return await v(async()=>{let a=await z();c=void 0===a?null:w(a)}),c},dispose(){l=!0}}}},49904:(a,b,c)=>{c.d(b,{Ax:()=>k,Jt:()=>m,_i:()=>l});var d=c(51455),e=c.n(d),f=c(76760),g=c.n(f),h=c(80974),i=c.n(h);let j=new Map;function k(a,b){let c=g().resolve(a),d="win32"===process.platform?c.toLowerCase():c,e=(j.get(d)??Promise.resolve()).then(b,b),f=e.then(()=>void 0,()=>void 0);return j.set(d,f),f.then(()=>{j.get(d)===f&&j.delete(d)}),e}async function l(a,b){await e().mkdir(g().dirname(a),{recursive:!0});let c=await i().lock(a,{realpath:!1,retries:{retries:20,minTimeout:20,maxTimeout:100}});try{return await b()}finally{await c()}}async function m(a){await a.flush();let b=a.drainErrors();if(b.length)throw Error(`Pi settings failed: ${b.map(({scope:a,error:b})=>`${a}: ${b.message}`).join("; ")}`,{cause:b[0].error})}},75554:(a,b,c)=>{c.a(a,async(a,d)=>{try{c.d(b,{DY:()=>s,Gh:()=>x,J0:()=>r,MO:()=>p});var e=c(51455),f=c.n(e),g=c(76760),h=c.n(g),i=c(77598),j=c(86159),k=c(87982),l=c(49904),m=a([k]);k=(m.then?(await m)():m)[0];let t=16384,u=2e4,v=3,w=2e3;function n(){return h().join((0,k.$M)(),"settings.json")}async function o(){return(0,j.op)(n())}async function p(){let a=(await o()).enabledModels;return!Array.isArray(a)||a.some(a=>"string"!=typeof a)?null:a}function q(a,b){let c=a[b];return c&&"object"==typeof c&&!Array.isArray(c)?c:{}}async function r(){let a=await o(),b=a.compaction??{},c=a.retry??{},d=(a,b)=>"number"==typeof a&&Number.isSafeInteger(a)&&a>=0?a:b;return{compaction:{enabled:!1!==b.enabled,reserveTokens:d(b.reserveTokens,t),keepRecentTokens:d(b.keepRecentTokens,u)},retry:{enabled:!1!==c.enabled,maxRetries:d(c.maxRetries,v),baseDelayMs:d(c.baseDelayMs,w)}}}class x extends Error{}async function s(a){let b=function(a){if(!a||"object"!=typeof a||Array.isArray(a))throw new x("invalid settings patch");if(Object.keys(a).some(a=>"compaction"!==a&&"retry"!==a))throw new x("unknown settings field");let b={};for(let c of["compaction","retry"]){if(void 0===a[c])continue;let d=a[c];if(!d||"object"!=typeof d||Array.isArray(d))throw new x(`invalid ${c} settings`);let e="compaction"===c?["enabled","reserveTokens","keepRecentTokens"]:["enabled","maxRetries","baseDelayMs"];for(let[a,b]of Object.entries(d)){if(!e.includes(a))throw new x(`unknown ${c} field: ${a}`);if("enabled"===a){if("boolean"!=typeof b)throw new x(`${c}.${a} must be boolean`)}else if("number"!=typeof b||!Number.isSafeInteger(b)||b<0||b>1e9)throw new x(`${c}.${a} must be a non-negative integer`)}"compaction"===c?b.compaction=d:b.retry=d}return b}(a),c=n();await (0,l.Ax)(c,()=>(0,l._i)(c,async()=>{let a=await (0,j.mu)(c);b.compaction&&(a.compaction={...q(a,"compaction"),...b.compaction}),b.retry&&(a.retry={...q(a,"retry"),...b.retry}),await f().mkdir(h().dirname(c),{recursive:!0});let d=`${c}.${process.pid}.${(0,i.randomUUID)()}.tmp`;try{await f().writeFile(d,JSON.stringify(a,null," "),"utf8"),await f().rename(d,c)}finally{await f().rm(d,{force:!0}).catch(()=>void 0)}(0,j.Ix)(c)})),await (0,k.BW)()}d()}catch(a){d(a)}})},92584:(a,b,c)=>{c.d(b,{V:()=>e});var d=c(76760);let e=c.n(d)().resolve(process.env.PI_WEB_ROOT??process.cwd())}};
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";exports.id=802,exports.ids=[802],exports.modules={1175:(a,b,c)=>{c.d(b,{Fu:()=>h}),c(77598),c(73024);var d=c(48161),e=c.n(d),f=c(76760),g=c.n(f);function h(){let a=process.env.PI_CODING_AGENT_DIR;if(a)return"~"===a?e().homedir():a.startsWith("~/")||a.startsWith("~\\")?g().join(e().homedir(),a.slice(2)):a;return g().join(e().homedir(),".pi","agent")}},95802:(a,b,c)=>{c.r(b),c.d(b,{TOKEN_BYTES:()=>k,TOKEN_QUERY:()=>j,launchTokenFile:()=>m,publishLaunchToken:()=>n,validLaunchToken:()=>l});var d=c(77598),e=c(73024),f=c.n(e),g=c(76760),h=c.n(g),i=c(1175);let j="token",k=32;function l(a,b){if(!a||!b)return!1;let c=Buffer.from(a,"utf8"),e=Buffer.from(b,"utf8");return c.byteLength===e.byteLength&&(0,d.timingSafeEqual)(c,e)}function m(a){return h().join((0,i.Fu)(),"web-launch",`${a}.token`)}function n(a=process.env){let b=a.PI_WEB_LAUNCH_TOKEN,c=a.PIWEB_PORT;if(!b||!c)return;let d=m(c);try{f().mkdirSync(h().dirname(d),{recursive:!0}),f().writeFileSync(d,`${b}
|
|
2
|
+
`,{mode:384})}catch{return}process.once("exit",()=>{try{f().readFileSync(d,"utf8").trim()===b&&f().unlinkSync(d)}catch{}})}}};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";exports.id=807,exports.ids=[807],exports.modules={24807:(a,b,c)=>{c.d(b,{registerNode:()=>d});async function d(){if("phase-production-build"===process.env.NEXT_PHASE)return;let{authEnabled:a}=await c.e(393).then(c.bind(c,75393));a()&&(await c.e(802).then(c.bind(c,95802))).publishLaunchToken();let{remoteBlocked:b,remoteLanEnabled:d,startLan:e}=await c.e(924).then(c.bind(c,3924));if(!d())return;let f=b();if("auth"===f)return void console.warn("[远程连接] 已跳过局域网入口:认证没开。请设 PI_WEB_AUTH=1。");if("dev"===f)return void console.warn("[远程连接] 已跳过局域网入口:开发模式只服务本机(认证保护不了 Next 开发工具端点)。");let g=await e();g.running?console.log(`[远程连接] 局域网入口已就绪:${g.urls.join(" ")}`):console.warn(`[远程连接] 局域网入口启动失败:${g.error}`)}}};
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
"use strict";exports.id=920,exports.ids=[920],exports.modules={29296:(a,b,c)=>{function d(a,b){if(a.length<=b)return a;let c=b;for(;c>0&&c>b-4&&(192&a[c])==128;)c-=1;return a.subarray(0,c)}function e(a){return a.includes("�")?{text:a.split(/\r?\n/).filter(a=>!a.includes("�")).join("\n").replace(/\n{3,}/g,"\n\n").trim(),encodingLoss:!0}:{text:a,encodingLoss:!1}}c.d(b,{R:()=>e,y:()=>d})},62433:(a,b,c)=>{c.a(a,async(a,d)=>{try{c.d(b,{BV:()=>q,CN:()=>l,Eb:()=>o,XI:()=>n,gS:()=>p,os:()=>m});var e=c(51455),f=c.n(e),g=c(76760),h=c.n(g),i=c(87982),j=a([i]);i=(j.then?(await j)():j)[0];class q extends Error{constructor(a){super(a),this.name="BoundaryError"}}function k(a){let b=h().resolve(a);return"win32"===process.platform?b.toLowerCase():b}function l(a,b){let c=h().relative(k(a),k(b));return""===c||!c.startsWith("..")&&!h().isAbsolute(c)}async function m(a,b){if(!(0,i.Sd)(a))throw new q("invalid session id");let c=(0,i.Gg)(a);if(!h().isAbsolute(c)||".jsonl"!==h().extname(c).toLowerCase())throw new q("invalid session path");let d=h().join((0,i.$M)(),"sessions"),e=await f().realpath(d).catch(()=>h().resolve(d));if(!l(e,h().resolve(c)))throw new q("session path is outside the Pi session store");if(b?.allowPending){let a=await f().realpath(c).catch(a=>{if("ENOENT"===a.code)return null;throw a});if(!a){let a=h().dirname(c);for(;l(d,a);){let b=await f().realpath(a).catch(a=>{if("ENOENT"===a.code)return null;throw a});if(b){if(!l(e,b))throw new q("session path escapes the Pi session store");return c}if(o(a,d))break;a=h().dirname(a)}throw new q("session store not found")}if(!l(e,a))throw new q("session path escapes the Pi session store");return c}let g=await f().realpath(c).catch(()=>{throw new q("session not found")});if(!l(e,g))throw new q("session path escapes the Pi session store");if(!(await f().stat(g)).isFile())throw new q("session is not a file");return g}async function n(a){if("string"!=typeof a||0===a.trim().length||a.length>4096)throw new q("invalid workspace path");let b=await f().realpath(h().resolve(a.trim())).catch(()=>{throw new q("workspace not found")});if(!(await f().stat(b)).isDirectory())throw new q("workspace is not a directory");return b}function o(a,b){return k(a)===k(b)}async function p(a,b){if("string"!=typeof a||!h().isAbsolute(a)||a.length>4096)throw new q("invalid resource path");let c=await f().realpath(a).catch(()=>{throw new q("resource not found")});for(let a of b){if(!a)continue;let b=await f().realpath(a).catch(()=>null);if(b&&o(c,b))return c}throw new q("resource is not part of the discovered Pi configuration")}d()}catch(a){d(a)}})},83188:(a,b,c)=>{c.d(b,{qy:()=>n,iv:()=>ab,qo:()=>W,qY:()=>ad,vO:()=>ac,e2:()=>Y,nT:()=>aa,MB:()=>_,uP:()=>X,CB:()=>s});var d=c(31421),e=c(77598),f=c(73024),g=c(51455),h=c.n(g),i=c(76760),j=c.n(i),k=c(29296);let l="refs/piweb/rounds",m=`# PiWeb growth snapshot exclusions (generated, do not edit)
|
|
2
|
+
${[...["node_modules",".git",".next",".next-dev",".next-dev-webpack",".next-dev-clean","dist","build","out",".venv","venv","__pycache__",".cache","target",".turbo",".pytest_cache",".mypy_cache",".ruff_cache",".idea",".pnpm",".pnpm-store",".npm",".yarn",".gradle",".tox",".nox",".uv",".pixi",".conda",".svelte-kit",".nuxt",".output",".parcel-cache",".angular",".expo",".dart_tool",".terraform",".serverless",".aws-sam","coverage","htmlcov"].map(a=>`${a}/`),".DS_Store","Thumbs.db","*.log",".env",".env.*","!.env.example","*.pem","*.key","*.p12","*.pfx","id_rsa*","id_ed25519*"].join("\n")}
|
|
3
|
+
`;class n extends Error{constructor(a,b="failed",c){super(a),this.code=b,this.target=c,this.name="GrowthError"}}let o=globalThis,p=o.__piWebGrowthRounds??={workspaces:new Map};function q(a){let b=j().resolve(a).replace(/\\/g,"/");return"win32"===process.platform?b.toLowerCase():b}function r(a){let b=j().resolve(a);try{b=f.realpathSync.native(b)}catch{}let c=q(b),d=c.replace(/[^a-z0-9]+/gi,"-").replace(/^-+|-+$/g,"").slice(-48).toLowerCase();return`${d||"root"}-${(0,e.createHash)("sha1").update(c).digest("hex").slice(0,8)}`}async function s(){if(p.gitBin)return p.gitBin;let a="git";if("win32"!==process.platform&&!await new Promise(a=>{let b=(0,d.spawn)("git",["--version"],{stdio:"ignore"});b.on("error",()=>a(!1)),b.on("close",b=>a(0===b))})){for(let b of["/opt/homebrew/bin/git","/usr/local/bin/git","/usr/bin/git","/usr/local/git/bin/git"])if(await new Promise(a=>{let c=(0,d.spawn)(b,["--version"],{stdio:"ignore"});c.on("error",()=>a(!1)),c.on("close",b=>a(0===b))})){a=b;break}}return p.gitBin=a,a}function t(a,b={}){let c=b.maxBuffer??0x4000000;return s().then(e=>new Promise((g,h)=>{let i=(0,d.spawn)(e,a,{cwd:b.cwd,env:{...process.env,GIT_TERMINAL_PROMPT:"0",GIT_OPTIONAL_LOCKS:"0",...b.env},windowsHide:!0,stdio:["pipe","pipe","pipe"]}),j=[],k=[],l=0,m=!1,o=setTimeout(()=>p(new n("git timed out","failed")),3e4),p=a=>{m||(m=!0,clearTimeout(o),i.kill(),h(a))};i.stdout.on("data",a=>{if((l+=a.length)>c){i.kill(),p(new n("git output exceeded the buffer limit","too-large"));return}j.push(a)}),i.stderr.on("data",a=>k.push(a)),i.on("error",a=>{"ENOENT"===a.code&&b.cwd&&!(0,f.existsSync)(b.cwd)?p(new n("workspace directory not found","failed")):p("ENOENT"===a.code?new n("git is not installed","unavailable"):a)}),i.on("close",a=>{m||(m=!0,clearTimeout(o),g({stdout:Buffer.concat(j),stderr:Buffer.concat(k).toString("utf8"),code:a??-1}))}),void 0!==b.input?i.stdin.end(b.input):i.stdin.end()}))}async function u(){if(p.gitOk)return p.gitOk;if(p.gitFailedAt&&Date.now()-p.gitFailedAt<6e4)return!1;let a=t(["--version"]).then(a=>0===a.code,()=>!1);return p.gitOk=a,a.then(a=>{if(a){p.gitFailedAt=void 0;return}p.gitOk=void 0,p.gitFailedAt=Date.now()}),a}let v=["-c","core.autocrlf=false","-c","core.safecrlf=false","-c","core.quotepath=false","-c","core.fsmonitor=false","-c","core.untrackedCache=false","-c","filter.lfs.clean=","-c","filter.lfs.smudge=","-c","filter.lfs.process=","-c","filter.lfs.required=false"];async function w(a,b,c={}){let d=["--git-dir",a.gitDir,"--work-tree",a.cwd,...v],e={GIT_INDEX_FILE:a.indexFile,...c.env},f=await t([...d,...b],{cwd:a.cwd,input:c.input,maxBuffer:c.maxBuffer,env:e});if(0!==f.code&&!c.allowFail)throw new n(`git ${b[0]} failed: ${f.stderr.trim().split("\n")[0]||`exit ${f.code}`}`);return f}function x(a){try{return f.realpathSync.native(a)}catch{return a}}async function y(a){let b=j().join(a,".git"),c=await h().stat(b).catch(()=>null);if(c?.isDirectory())return b;if(c?.isFile()){let c=await h().readFile(b,"utf8").catch(()=>""),d=/^gitdir:[ \t]*(.+)$/m.exec(c);if(d)return j().resolve(a,d[1].trim())}return null}async function z(a,b){let c=(await h().readFile(j().join(a,"commondir"),"utf8").catch(()=>"")).trim(),d=c?j().resolve(a,c):a;return!!await h().stat(j().join(d,...b.split("/"))).then(a=>a.isFile(),()=>!1)||(await h().readFile(j().join(d,"packed-refs"),"utf8").catch(()=>"")).split("\n").some(a=>a.endsWith(` ${b}`))}async function A(a,b){let c=async()=>{let b=await t(["rev-parse","--absolute-git-dir","--show-toplevel","--is-bare-repository"],{cwd:a});if(0!==b.code)return{reason:"not-git"};let[c="",d="",e=""]=b.stdout.toString("utf8").split("\n").map(a=>a.trim());return c&&"true"!==e&&d?q(x(d))!==q(x(a))?{reason:"nested",parent:j().resolve(d)}:{gitDir:c}:{reason:"not-git"}},d=await c();if("gitDir"in d)return d.gitDir;if(!b)throw new n("growth tracking needs consent to create a git repository here","needs-consent",d);let e=await t(["init","-q"],{cwd:a});if(0!==e.code)throw new n(`git init failed: ${e.stderr.trim().split("\n")[0]||`exit ${e.code}`}`,"unavailable");let f=await c();if(!("gitDir"in f))throw new n("workspace cannot be used as a git repository","unavailable");return f.gitDir}async function B(a){let[b="",c=""]=(await w(a,["for-each-ref","--format=%(objectname) %(tree)",a.ref])).stdout.toString("utf8").trim().split(" ");return E.test(b)&&E.test(c)?{commit:b,tree:c}:null}async function C(a,b){if(!await u())throw new n("git is not installed","unavailable");let c=r(a),d=await A(a,b),e=j().join(d,"piweb");await h().mkdir(e,{recursive:!0});let f={key:c,cwd:a,gitDir:d,indexFile:j().join(e,"index"),excludeFile:j().join(e,"exclude"),ref:`${l}/${c}`,rounds:null,emptyTree:"",lock:Promise.resolve()};await h().writeFile(f.excludeFile,m,"utf8");let g=await B(f);f.lastCommit=g?.commit,f.lastTree=g?.tree;let i=await w(f,["hash-object","-t","tree","--stdin"],{input:""});return f.emptyTree=i.stdout.toString("utf8").trim(),f}async function D(a,b=!1){let c=await h().realpath(j().resolve(a)).catch(()=>j().resolve(a)),d=r(c),e=p.workspaces.get(d);if(e){let a=await e.catch(()=>null);a&&await h().stat(j().join(a.gitDir,"HEAD")).then(()=>!0,()=>!1)||(p.workspaces.delete(d),e=void 0)}return e||(e=C(c,b),p.workspaces.set(d,e),e.catch(()=>p.workspaces.delete(d))),e}let E=/^[0-9a-f]{40}([0-9a-f]{24})?$/;function F(a,b="hash"){if("string"!=typeof a||!E.test(a))throw new n(`invalid ${b}`,"not-found");return a}function G(a){if("string"!=typeof a||!a.trim())throw new n("missing path","not-found");let b=a.replace(/\\/g,"/").replace(/^\.\//,"");if(b.startsWith("/")||/^[A-Za-z]:\//.test(b)||b.split("/").some(a=>".."===a))throw new n("invalid path","not-found");return b}function H(a){let b=a.split("\0"),c=[];for(let a=0;a<b.length;a+=1){let d=b[a];if(!d)continue;let e=d[0];if("R"===e||"C"===e){let d=b[a+1],f=b[a+2];if(a+=2,void 0===f)break;c.push("R"===e?{status:"R",path:f,from:d}:{status:"A",path:f});continue}let f=b[a+1];if(a+=1,void 0===f)break;"A"===e||"M"===e||"D"===e?c.push({status:e,path:f}):"T"===e&&c.push({status:"M",path:f})}return c}function I(a){let b=a.split("\0"),c=new Map;for(let a=0;a<b.length;a+=1){let d=b[a];if(!d)continue;let[e,f,g]=d.split(" ");if(void 0===e||void 0===f)continue;let h="-"===e||"-"===f,i={add:h?0:Number(e)||0,del:h?0:Number(f)||0,binary:h};if(void 0===g||""===g){let d=b[a+2];a+=2,void 0!==d&&c.set(d,i);continue}c.set(g,i)}return c}function J(a,b){for(let c of a){let a=b.get(c.path);a&&(c.add=a.add,c.del=a.del,a.binary&&(c.binary=!0))}return a.sort((a,b)=>a.path.localeCompare(b.path))}let K=["round","user","baseline"],L=["done","aborted","error"],M={round:"piweb: round",user:"piweb: workspace changes",baseline:"piweb: baseline"};function N(a){let b=a.split("\n"),c=new Map;for(let a of b){let b=/^Piweb-([A-Za-z]+):[ \t]*(.*)$/.exec(a.trim());b&&c.set(b[1].toLowerCase(),b[2].trim())}let d=K.find(a=>a===c.get("kind"))??"round",e=L.find(a=>a===c.get("status"))??"done",f=(b[0]??"").trim();return{kind:d,title:"round"===d&&f!==M.round?f:"",session:c.get("session")??"",promptIds:(c.get("prompts")??"").split(",").map(a=>a.trim()).filter(Boolean),status:e}}function O(a){return a.replace(/[\x00-\x1f\x7f]+/g," ").replace(/\s+/g," ").trim()}function P(a,b){let c=[Array.from(O(a.title??"")).slice(0,72).join("")||M[b],"",`Piweb-Kind: ${b}`,`Piweb-Session: ${O(Q(a.session))}`],d=(a.promptIds??[]).filter(a=>/^[\w.:-]{1,128}$/.test(a));return d.length&&c.push(`Piweb-Prompts: ${d.join(",")}`),c.push(`Piweb-Status: ${a.status??"done"}`),`${c.join("\n")}
|
|
4
|
+
`}function Q(a){return j().basename(a.replace(/\\/g,"/"))}function R(a){let b={added:0,modified:0,deleted:0,renamed:0,add:0,del:0};for(let c of a)"A"===c.status?b.added+=1:"M"===c.status?b.modified+=1:"D"===c.status?b.deleted+=1:b.renamed+=1,b.add+=c.add??0,b.del+=c.del??0;return b}async function S(a,b,c){let[d,e]=await Promise.all([w(a,["diff-tree","-r","-M","--name-status","-z",b,c]),w(a,["diff-tree","-r","-M","--numstat","-z",b,c])]);return J(H(d.stdout.toString("utf8")),I(e.stdout.toString("utf8")))}async function T(a){let b=a.excludeFile.replace(/\\/g,"/"),c=Array.from(new Set((await w(a,["ls-files","-z","--others","--modified","--deleted","--exclude-standard",`--exclude-from=${b}`])).stdout.toString("utf8").split("\0").filter(a=>a&&!a.endsWith("/"))));if(c.length>5e4){let a=new Map;for(let b of c){let c=b.split("/"),d=c.length>1?c.slice(0,2).join("/"):"(root)";a.set(d,(a.get(d)??0)+1)}let b=[...a].sort((a,b)=>b[1]-a[1]).slice(0,3).map(([a,b])=>`${a}: ${b}`).join(", ");throw new n(`snapshot has ${c.length} candidate files (limit 50000); largest directories: ${b}. Exclude generated directories with .gitignore`,"too-large")}let d=[],e=[],f=new Map,g=b=>{if(!b)return Promise.resolve(!0);let c=f.get(b);if(c)return c;let d=(async()=>{let c=b.includes("/")?b.slice(0,b.lastIndexOf("/")):"";if(!await g(c))return!1;let d=await h().lstat(j().join(a.cwd,b)).catch(a=>{if("ENOENT"===a.code||"ENOTDIR"===a.code)return null;throw a});return!!(d?.isDirectory()&&!d.isSymbolicLink())})();return f.set(b,d),d};for(let b=0;b<c.length;b+=256)for(let{rel:f,include:i}of(await Promise.all(c.slice(b,b+256).map(async b=>{let c=b.includes("/")?b.slice(0,b.lastIndexOf("/")):"";if(!await g(c))return{rel:b,include:!1};let d=await h().lstat(j().join(a.cwd,b)).catch(a=>{if("ENOENT"===a.code||"ENOTDIR"===a.code)return null;throw a});return{rel:b,include:!!(d?.isFile()&&d.size<=1048576)}}))))(i?d:e).push(f);for(let b=0;b<e.length;b+=256)await w(a,["update-index","--force-remove","-z","--stdin"],{input:`${e.slice(b,b+256).join("\0")}\0`});for(let b=0;b<d.length;b+=256)await w(a,["update-index","--add","--remove","--replace","-z","--stdin"],{input:`${d.slice(b,b+256).join("\0")}\0`});return c.length}let U=new Map;async function V(a){let b=await s(),c=(0,d.spawn)(b,["--git-dir",a.gitDir,"gc","--auto","--quiet"],{cwd:a.cwd,env:{...process.env,GIT_TERMINAL_PROMPT:"0"},stdio:"ignore",windowsHide:!0});c.on("error",()=>void 0),c.unref()}async function W(a,b,c={}){var d;let e,f=await D(a,!0===c.allowInit);return d=async()=>{if(c.abortIf?.())return null;f.excludeRules!==m&&(await h().writeFile(f.excludeFile,m,"utf8"),f.excludeRules=m),await T(f);let a=(await w(f,["write-tree"])).stdout.toString("utf8").trim();if(F(a,"tree"),c.abortIf?.())return null;let d={GIT_AUTHOR_NAME:"PiWeb",GIT_AUTHOR_EMAIL:"piweb@localhost",GIT_COMMITTER_NAME:"PiWeb",GIT_COMMITTER_EMAIL:"piweb@localhost"};for(let c=0;;c+=1){let e=f.lastCommit,g="user"!==b.kind||e?b.kind:"baseline";if("round"!==g&&e&&a===f.lastTree)return null;let h=(await w(f,["commit-tree",a,...e?["-p",e]:[],"-F","-"],{env:d,input:P(b,g)})).stdout.toString("utf8").trim();F(h,"commit");let i=await w(f,["update-ref",f.ref,h,e??""],{allowFail:!0});if(0!==i.code){let a=await B(f);if(c>=2||a?.commit===e)throw new n(`git update-ref failed: ${i.stderr.trim().split("\n")[0]||`exit ${i.code}`}`);f.lastCommit=a?.commit,f.lastTree=a?.tree;continue}let j=e?f.lastTree??f.emptyTree:f.emptyTree,k=e?await S(f,j,a):[],l=k.slice(0,2e3),m={commit:h,parent:e??null,tree:a,parentTree:j,ts:Date.now(),...N(P(b,g)),changes:l,truncated:k.length>l.length||void 0,initial:!e||void 0,stats:R(k)};f.rounds&&f.loadedHead===e&&(f.rounds.push(m),f.loadedHead=h),f.lastCommit=h,f.lastTree=a;let o=(U.get(f.key)??0)+1;return U.set(f.key,o%50),o>=50&&V(f),m}},e=f.lock.then(d,d),f.lock=e.then(()=>void 0,()=>void 0),e}function X(a,b,c={}){return W(a,{kind:"user",session:b},c)}async function Y(){return u()}async function Z(a,b,c,d){let e=await w(a,["-c","log.showRoot=false","-c","log.showSignature=false","-c","diff.relative=false","log","-z","--topo-order","--reverse","--raw","--numstat","-M","--no-abbrev","--no-color","--format=%x1e%H%x1f%T%x1f%P%x1f%ct%x1f%B%x1f",b,...c?[`^${c}`]:[],"--"]),f=[];for(let b of function(a){let b=[];for(let c of a.split("\x1e")){if(!c)continue;let a=c.indexOf("\x1f\0"),d=(a>=0?c.slice(0,a):c.replace(/[\x1f\0\n]+$/,"")).split("\x1f");if(d.length<5)continue;let[e,f,g,h]=d,i=[],j=[],k=a>=0?c.slice(a+2).replace(/^\n/,"").split("\0"):[];for(let a=0;a<k.length;a+=1){let b=k[a];if(b)if(b.startsWith(":")){let c=b.slice(b.lastIndexOf(" ")+1),d="R"===c[0]||"C"===c[0]?2:1;i.push(c,...k.slice(a+1,a+1+d)),a+=d}else{let c=b.split(" "),d=2*(3===c.length&&""===c[2]);j.push(b,...k.slice(a+1,a+1+d)),a+=d}}b.push({commit:e,tree:f,parent:g.split(" ").filter(Boolean)[0]??null,ts:1e3*Number(h),message:d.slice(4).join("\x1f"),changes:J(H(`${i.join("\0")}\0`),I(`${j.join("\0")}\0`))})}return b}(e.stdout.toString("utf8"))){let c=b.changes.slice(0,2e3);f.push({commit:b.commit,parent:b.parent,tree:b.tree,parentTree:b.parent&&d.get(b.parent)||a.emptyTree,ts:b.ts,...N(b.message),changes:c,truncated:b.changes.length>c.length||void 0,initial:!b.parent||void 0,stats:R(b.changes)}),d.set(b.commit,b.tree)}return f}async function $(a){let b=await B(a);if(!b)return a.rounds=[],a.loadedHead=void 0,a.rounds;if(a.rounds&&a.loadedHead===b.commit)return a.rounds;let c=a.rounds&&a.loadedHead?a.rounds:null,d=new Map((c??[]).map(a=>[a.commit,a.tree])),e=await Z(a,b.commit,c?a.loadedHead:void 0,d);return c&&e.length&&e[0].parent!==a.loadedHead?e=await Z(a,b.commit,void 0,new Map):c&&(e=[...c,...e]),a.rounds=e,a.loadedHead=b.commit,e}async function _(a,b){let c=await h().realpath(j().resolve(a)).catch(()=>j().resolve(a)),d=r(c);if(!p.workspaces.has(d)){let a=await y(c);if(!a||!await z(a,`${l}/${d}`))return[]}let e=await D(c),f=await $(e);if(!b)return[...f];let g=Q(b);return f.filter(a=>{var b;return b=a.session,"win32"===process.platform?b.toLowerCase()===g.toLowerCase():b===g})}async function aa(a,b){let c=await D(a),d=F(b,"tree");if(d===c.emptyTree)return[];var e=(await w(c,["ls-tree","-r","-l","-z",d])).stdout.toString("utf8");let f=[];for(let a of e.split("\0")){if(!a)continue;let b=a.match(/^(\d+) (\w+) ([0-9a-f]+) +(-|\d+)\t([\s\S]+)$/);b&&"blob"===b[2]&&f.push({path:b[5],size:"-"===b[4]?0:Number(b[4])})}return f}async function ab(a,b,c){return S(await D(a),F(b,"from"),F(c,"to"))}async function ac(a,b,c,d,e){let f=await D(a),g=[G(d)];"string"==typeof e&&e&&g.push(G(e));let h=await w(f,["diff","-M","--no-color","--no-ext-diff","-U1000000",F(b,"from"),F(c,"to"),"--",...g]);return/^Binary files .* differ$/m.test(h.stdout.toString("utf8",0,Math.min(h.stdout.length,65536)))?{patch:"",binary:!0,truncated:!1}:h.stdout.length<=4194304?{patch:h.stdout.toString("utf8"),binary:!1,truncated:!1}:{patch:(0,k.y)(h.stdout,4194304).toString("utf8"),binary:!1,truncated:!0}}async function ad(a,b,c){let d=await D(a),e=G(c),f=await w(d,["cat-file","-p",`${F(b,"tree")}:${e}`],{allowFail:!0});if(0!==f.code)throw new n("file not found in this snapshot","not-found");let g=f.stdout;return g.subarray(0,Math.min(g.length,8e3)).includes(0)?{content:"",binary:!0,truncated:!1,size:g.length}:g.length<=262144?{content:g.toString("utf8"),binary:!1,truncated:!1,size:g.length}:{content:(0,k.y)(g,262144).toString("utf8"),binary:!1,truncated:!0,size:g.length}}}};
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
"use strict";exports.id=924,exports.ids=[393,924],exports.modules={1175:(a,b,c)=>{c.d(b,{Fu:()=>h}),c(77598),c(73024);var d=c(48161),e=c.n(d),f=c(76760),g=c.n(f);function h(){let a=process.env.PI_CODING_AGENT_DIR;if(a)return"~"===a?e().homedir():a.startsWith("~/")||a.startsWith("~\\")?g().join(e().homedir(),a.slice(2)):a;return g().join(e().homedir(),".pi","agent")}},3924:(a,b,c)=>{c.d(b,{remoteBlocked:()=>p,remoteLanEnabled:()=>s,startLan:()=>u}),c(31421),c(73024),c(44708);var d=c(48161),e=c.n(d);c(76760);var f=c(75393);c(1175);var g=c(37067),h=c.n(g),i=c(57075),j=c(38522),k=c.n(j);c(77030);let l=JSON.parse('{"A":"/*\\n * 手机端适配。不改 PiWeb,只在经代理的远程页面上生效\\n * (本机直连 127.0.0.1:30141 的桌面页面完全不加载它)。\\n *\\n * 取值参照 dsh-remote 为 DSH 定的那套移动适配(同作者),并针对 PiWeb 的实测问题:\\n * 390px 下输入框 304px、markdown 表格 442px 超出视口、底部统计行被截断。\\n */\\n@media (max-width: 840px) {\\n\\t/* 1) 输入框自适应高度失控。\\n\\t 实测:视口 390 → 304px,500 → 43px,700+ → 22px;而自然内容高始终 22px。\\n\\t 原因在 ChatInput 的 autoSize():它把\\"被 flex 拉伸后\\"的 scrollHeight 写进了\\n\\t inline height,写回后又把自己撑住,形成自锁。inline 样式不是 important,\\n\\t 所以这里用 max-height !important 把它夹住。 */\\n\\ttextarea {\\n\\t\\tmax-height: 132px !important;\\n\\t\\toverflow-y: auto !important;\\n\\t}\\n\\n\\t/* 2) Markdown 宽表格超出视口被裁掉(实测 442 > 390,body 又是 overflow-x:hidden,\\n\\t 等于右侧内容既看不到也滑不到)。让表格自己横向滚动。 */\\n\\t.md table {\\n\\t\\tdisplay: block !important;\\n\\t\\tmax-width: 100% !important;\\n\\t\\toverflow-x: auto !important;\\n\\t\\t-webkit-overflow-scrolling: touch;\\n\\t}\\n\\n\\t/* 3) 全局溢出护栏(dsh-remote 同款):任何一块都不许把文档撑宽 */\\n\\thtml,\\n\\tbody {\\n\\t\\tmax-width: 100vw !important;\\n\\t\\toverflow-x: hidden !important;\\n\\t}\\n\\tpre {\\n\\t\\tmax-width: 100% !important;\\n\\t\\toverflow-x: auto !important;\\n\\t\\t-webkit-overflow-scrolling: touch;\\n\\t}\\n\\timg,\\n\\tsvg,\\n\\tvideo,\\n\\tcanvas {\\n\\t\\tmax-width: 100% !important;\\n\\t}\\n\\n\\t/* 4) 底部统计行原本 nowrap + ellipsis,手机上「| 输入 2…」之后永远看不到。\\n\\t 改成可横向滑动,滚动条隐藏,信息不再丢。 */\\n\\tdiv.text-center > div.overflow-hidden.text-ellipsis.whitespace-nowrap {\\n\\t\\toverflow-x: auto !important;\\n\\t\\toverflow-y: hidden !important;\\n\\t\\ttext-overflow: clip !important;\\n\\t\\t-webkit-overflow-scrolling: touch;\\n\\t\\tscrollbar-width: none;\\n\\t}\\n\\tdiv.text-center > div.overflow-hidden.text-ellipsis.whitespace-nowrap::-webkit-scrollbar {\\n\\t\\tdisplay: none;\\n\\t}\\n\\n\\t/* 5) 给手机的手势条留位置(没有 insets 的设备 env() 为 0,等于没写) */\\n\\t.pi-main {\\n\\t\\tpadding-bottom: env(safe-area-inset-bottom) !important;\\n\\t}\\n\\n\\t/* 6) 左上角的抽屉按钮。原来是个悬浮的圆角方块(12px/12px、34px),盖在内容上、\\n\\t 和右边那排图标也不在一条水平线上。按 dsh-remote 对 DSH 左侧的做法收成贴角圆形,\\n\\t 尺寸和位置改成与右侧图标完全一致(实测右侧图标是 top 12 / 30\xd730,中心 y=27),\\n\\t 这样整行对齐,按钮底边 42 也在头部分隔线(y=43)之上,不会压住那条线。 */\\n\\t.pi-mobile-menu {\\n\\t\\twidth: 30px !important;\\n\\t\\theight: 30px !important;\\n\\t\\tborder-radius: 999px !important;\\n\\t\\tleft: calc(env(safe-area-inset-left) + 12px) !important;\\n\\t\\ttop: calc(env(safe-area-inset-top) + 12px) !important;\\n\\t}\\n\\t.pi-main > .hairline-b {\\n\\t\\tpadding-left: 52px !important;\\n\\t}\\n\\n\\t/* 7) 右侧大纲导轨是绝对定位的(right-2 + 约 34px 宽的竖条),正文和用户气泡\\n\\t 会从它下面穿过去。不动条宽——那是层级信息——而是把导轨贴边收窄,\\n\\t 再给滚动区留出它实际占的宽度。 */\\n\\t.outline-rail {\\n\\t\\tright: 2px !important;\\n\\t}\\n\\t.outline-rail > div {\\n\\t\\tpadding-left: 6px !important;\\n\\t\\tpadding-right: 2px !important;\\n\\t}\\n\\t.pi-main div.min-h-0.flex-1.overflow-y-auto {\\n\\t\\tpadding-right: 30px !important;\\n\\t}\\n\\n\\t/* 8) 设置弹窗:高度用 100vh(移动端的大视口),内容列又没有 min-height:0\\n\\t 也没有 overflow-y,于是 1986px 的内容被 overflow:hidden 裁在 828px 里,\\n\\t 手机上完全滑不动。实测 client=828 / scroll=1986。 */\\n\\t.settings-dialog {\\n\\t\\theight: calc(100vh - 16px) !important;\\n\\t}\\n\\t.settings-dialog > div:not(.settings-nav) {\\n\\t\\tmin-height: 0 !important;\\n\\t\\toverflow-y: auto !important;\\n\\t\\t-webkit-overflow-scrolling: touch;\\n\\t}\\n\\n\\t/* 9) 模型 / 思考等级浮层锚在胶囊自己的 relative 容器上,right-0 是**胶囊**右缘,\\n\\t 312px 往左展开就顶出屏幕左边(实测 left 为负)。把胶囊容器解除定位,\\n\\t 浮层改用整张输入卡(上一层 relative)做定位父级,right-0 落在卡片右缘就装得下。\\n\\t :has() 在移动端 Safari 15.4+ / Chrome 105+ 都可用。 */\\n\\tdiv.relative:has(> button.chip[aria-haspopup=\\"menu\\"]) {\\n\\t\\tposition: static !important;\\n\\t}\\n\\n\\t/* 10) 设置→模型 的提供方卡片:那一行是 nowrap,中间的名字列被右侧一串按钮挤成\\n\\t 0 宽(实测 w=0),于是「凭据: auth.json」竖着拆行、「编辑」拆成「编/辑」、\\n\\t 右侧的按钮还被裁掉。手机上让这行能换行,并给名字列一个真实的最小宽度。 */\\n\\t.settings-dialog div.flex.items-center.gap-3:has(> div.min-w-0.flex-1) {\\n\\t\\tflex-wrap: wrap !important;\\n\\t\\trow-gap: 8px !important;\\n\\t}\\n\\t.settings-dialog div.flex.items-center.gap-3:has(> div.min-w-0.flex-1) > div.min-w-0.flex-1 {\\n\\t\\tflex: 1 1 140px !important;\\n\\t\\tmin-width: 140px !important;\\n\\t}\\n\\n\\t/* 11) 设置里 Row 那一套([文字列][控件列] 两栏)。控件列是 flex-none,\\n\\t 有的行右侧很宽(「开关 + 两个数字输入框」≈272px、「繁忙时 Enter」的下拉≈233px),\\n\\t 于是 390px 下文字列只剩 70px 左右,中文按每行一两字竖排,行高被撑到\\n\\t 122px / 218px(实测 70\xd7122、69\xd7218)。\\n\\t 试过的几种写法与实测结论:\\n\\t - 只给文字列 flex 增长权重:完全没用(那行没有空闲空间)\\n\\t - 只缩小 gap:只能缓解(70\xd7122 → 86\xd798)\\n\\t - 让所有 Row 都上下排(flex:1 1 100%):能修好,但把本来正常的行也撑高\\n\\t (界面语言 53→85、字体步进 95→105),是密度回退\\n\\t - 正解:文字列 flex-basis 设 0、只留 min-width 当\\"不许被压到多窄\\"的下限。\\n\\t 换行判断用的是 flex-basis(max-content 会很大,所以上一版全换行了),\\n\\t 设成 0 之后判断就只看 min-width:\\n\\t 控件窄的行(界面语言 77px、字体步进 116px)→ 仍并排,保持紧凑\\n\\t 控件宽的行(272px / 233px)→ 控件换到下一行,文字拿满 326px\\n\\t 实测:界面语言 53 不变、界面字体 95→71、繁忙时Enter 239→135、\\n\\t 自动压缩 143→111、自动重试 119→111,全部不再竖排。 */\\n\\t.settings-dialog div.hairline-b.gap-6 {\\n\\t\\tflex-wrap: wrap !important;\\n\\t\\tgap: 8px !important;\\n\\t}\\n\\t.settings-dialog div.hairline-b.gap-6 > div.min-w-0 {\\n\\t\\tflex: 1 1 0 !important;\\n\\t\\tmin-width: 45% !important;\\n\\t}\\n\\t.settings-dialog div.hairline-b.gap-6 > div.flex-none > div.flex.items-center {\\n\\t\\tflex-wrap: wrap !important;\\n\\t\\tjustify-content: flex-end !important;\\n\\t\\trow-gap: 6px !important;\\n\\t}\\n\\n\\t/* 12) 外观主题卡片。卡片是 flex: 1 1 150px 的两列网格,但左右各留 32px 内边距,\\n\\t 159px 的卡片只剩 95px 给标题,于是「石灰与煤炭」「亚麻与苔绿」掉到第二行,\\n\\t 卡片高度变成 110px 而其余是 88px,网格参差(实测 6 张卡:4 张 88 / 2 张 110)。\\n\\t 把左右内边距收到 10px,6 张卡全部回到 88px,标题一行放得下。 */\\n\\t.settings-dialog button[aria-pressed] {\\n\\t\\tpadding-left: 10px !important;\\n\\t\\tpadding-right: 10px !important;\\n\\t}\\n\\n\\t/* 13) 可点目标偏小(实测:字体步进器 26\xd726、reset 48\xd724、开关 36\xd720)。\\n\\t 只扩**热区**,绝不改可见尺寸:开关的滑块位置在 PiWeb 里是写死的\\n\\t (left: 18px / 2px),把开关拉宽会让滑块错位、变成被拉长的怪药丸\\n\\t —— 我第一版写的 min-width:44px 就是这个后果,用户报了\\"启动按钮好丑\\"。\\n\\t 另外这里只做**纵向**扩张(左右不扩):字体步进器 −/+/ 之间只有 8px,\\n\\t 横向扩到 44px 会让两个按钮的热区重叠约 10px,点 − 反而命中 +。 */\\n\\t.settings-dialog .icon-btn,\\n\\t.settings-dialog button.h-6,\\n\\t.settings-dialog button.h-5,\\n\\t.settings-dialog [role=\\"switch\\"] {\\n\\t\\tposition: relative !important;\\n\\t}\\n\\t.settings-dialog .icon-btn::after,\\n\\t.settings-dialog button.h-6::after,\\n\\t.settings-dialog button.h-5::after,\\n\\t.settings-dialog [role=\\"switch\\"]::after {\\n\\t\\tcontent: \\"\\" !important;\\n\\t\\tposition: absolute !important;\\n\\t\\tleft: 0 !important;\\n\\t\\tright: 0 !important;\\n\\t\\ttop: 50% !important;\\n\\t\\theight: max(100%, 44px) !important;\\n\\t\\ttransform: translateY(-50%) !important;\\n\\t\\tborder-radius: 999px !important;\\n\\t}\\n}\\n\\n/* 手机上的浮层统一兜底:不许比屏幕宽,不许比屏幕高,超出就自己滚。 */\\n@media (max-width: 840px) {\\n\\t.popover {\\n\\t\\tmax-width: calc(100vw - 16px) !important;\\n\\t\\tmax-height: 420px !important;\\n\\t\\toverflow-y: auto !important;\\n\\t\\t-webkit-overflow-scrolling: touch;\\n\\t}\\n}\\n\\n/* 11) 模型名太长时跑马灯。取值与做法照搬 dsh-remote 对 DSH 的:\\n\\t 名字窗口固定 28vw 并允许被压缩,装得下就完全不动;装不下时由注入的\\n\\t mobile-fit.js 打上 data-piweb-marquee,再由这里的两份伪元素首尾相接匀速左移。\\n\\t 一份走完另一份正好接上(travel 已含间隔),所以循环处看不出接缝。 */\\n@media (max-width: 840px) {\\n\\tbutton.chip[aria-haspopup=\\"menu\\"] > span.truncate {\\n\\t\\tmin-width: 0 !important;\\n\\t\\tmax-width: 28vw !important;\\n\\t}\\n\\t[data-piweb-marquee] {\\n\\t\\tposition: relative !important;\\n\\t\\tdisplay: block !important;\\n\\t\\twidth: 28vw !important;\\n\\t\\tflex: none !important;\\n\\t\\ttext-overflow: clip !important;\\n\\t\\twhite-space: nowrap !important;\\n\\t\\toverflow: hidden !important;\\n\\t\\ttext-indent: 0 !important;\\n\\t\\tcontain: layout paint !important;\\n\\t\\tcolor: transparent !important;\\n\\t\\tline-height: 20px !important;\\n\\t}\\n\\t[data-piweb-marquee]::before,\\n\\t[data-piweb-marquee]::after {\\n\\t\\tcontent: attr(data-piweb-text);\\n\\t\\tposition: absolute;\\n\\t\\ttop: 0;\\n\\t\\tleft: 0;\\n\\t\\tcolor: var(--piweb-marquee-color, var(--dsw-label-primary));\\n\\t\\tfont-size: 13px;\\n\\t\\tline-height: 20px;\\n\\t\\twhite-space: nowrap;\\n\\t\\twill-change: transform;\\n\\t\\ttransform: translate3d(0, 0, 0);\\n\\t\\tanimation: piweb-mfit-marquee var(--piweb-marquee-duration, 8s) linear infinite both;\\n\\t}\\n\\t[data-piweb-marquee]::after {\\n\\t\\tleft: var(--piweb-marquee-text, 0px);\\n\\t}\\n\\t@keyframes piweb-mfit-marquee {\\n\\t\\tfrom { transform: translate3d(0, 0, 0); }\\n\\t\\tto { transform: translate3d(calc(-1 * var(--piweb-marquee-text, 0px)), 0, 0); }\\n\\t}\\n}\\n\\n/* dvh 是\\"实际可见高度\\",比 100vh(移动 Chrome 的大视口)可靠;\\n 不支持时上面那两条固定值兜底。 */\\n@supports (height: 100dvh) {\\n\\t@media (max-width: 840px) {\\n\\t\\ttextarea {\\n\\t\\t\\tmax-height: min(132px, 26dvh) !important;\\n\\t\\t}\\n\\t\\t.popover {\\n\\t\\t\\tmax-height: min(60dvh, 420px) !important;\\n\\t\\t}\\n\\t\\t.settings-dialog {\\n\\t\\t\\theight: calc(100dvh - 16px) !important;\\n\\t\\t}\\n\\t}\\n}\\n","js":"/*\\n * 手机端脚本(配合 mobile-fit.css)。\\n *\\n * 做两件事:\\n * 1) 模型名太长时改成「跑马灯」。做法照搬 dsh-remote 对 DSH 的处理——\\n * 名字窗口固定 28vw,装得下就完全不动;装不下时才把两份文本首尾相接匀速左移,\\n * 一份走完另一份正好接上,循环没有空档。CSS 负责动画,这里只负责\\"量\\"和\\"打标记\\"。\\n * 为什么必须用 JS 量:纯 CSS 判断不了\\"是否真的被截断\\",只能用省略号一裁了之,\\n * 名字的尾巴就永远看不到了。\\n * 2) 设置里「文字 + 开关」那种行,手机上点文字也能切开关。\\n * 手机断点下这行是上下排(见 mobile-fit.css 第 11 条),文字占满一行、开关缩在下面,\\n * 而 PiWeb 只让那个 36\xd720 的小开关可点 —— 用户点最显眼的标题文字毫无反应,\\n * 看起来就是\\"这个开关坏了\\"。实测:点文字 0 次请求,点开关才发请求。\\n */\\n(function () {\\n\\t\\"use strict\\";\\n\\n\\tvar ATTR = \\"data-piweb-marquee\\";\\n\\tvar TEXT_ATTR = \\"data-piweb-text\\";\\n\\tvar TEXT_VAR = \\"--piweb-marquee-text\\";\\n\\tvar DURATION_VAR = \\"--piweb-marquee-duration\\";\\n\\tvar COLOR_VAR = \\"--piweb-marquee-color\\";\\n\\tvar /** 两份文本之间留的间隔,也是 travel 里多出来的那一段 */\\n\\t\\tGAP = 40;\\n\\tvar /** 每秒移动多少像素,太长就慢一点 */\\n\\t\\tSPEED = 22;\\n\\tvar MIN_CYCLE = 6;\\n\\tvar ROW_BOUND_ATTR = \\"data-piweb-row-bound\\";\\n\\n\\t/** 模型胶囊里的名字(ModelSelector 里那个 span.truncate) */\\n\\tfunction label() {\\n\\t\\treturn document.querySelector(\'button.chip[aria-haspopup=\\"menu\\"] > span.truncate\');\\n\\t}\\n\\n\\tfunction apply() {\\n\\t\\tvar el = label();\\n\\t\\tif (!el) return;\\n\\t\\tvar text = el.textContent || \\"\\";\\n\\t\\tif (!text) return;\\n\\n\\t\\t// 同一个名字已经标过就别再动它:重设属性会把 CSS 动画从头开始,看起来是\\"一直重启\\"\\n\\t\\tif (el.hasAttribute(ATTR) && el.getAttribute(TEXT_ATTR) === text) return;\\n\\n\\t\\t// 量必须在\\"静止态\\"下做:先摘掉标记,否则量到的是被 28vw 框死之后的宽度\\n\\t\\tif (el.hasAttribute(ATTR)) el.removeAttribute(ATTR);\\n\\t\\tvar natural = el.scrollWidth;\\n\\t\\tvar windowWidth = el.clientWidth;\\n\\t\\tif (!windowWidth || natural <= windowWidth + 1) return; // 装得下,什么都不做\\n\\n\\t\\tel.style.setProperty(COLOR_VAR, getComputedStyle(el).color);\\n\\t\\tel.style.setProperty(TEXT_VAR, natural + GAP + \\"px\\");\\n\\t\\tel.style.setProperty(DURATION_VAR, Math.max(MIN_CYCLE, (natural + GAP) / SPEED).toFixed(1) + \\"s\\");\\n\\t\\tel.setAttribute(TEXT_ATTR, text);\\n\\t\\tel.setAttribute(ATTR, \\"\\");\\n\\t}\\n\\n\\t/**\\n\\t * 设置里「文字 + 开关」的行:把文字列变成开关的\\"大号按钮\\"。\\n\\t *\\n\\t * 只绑文字列(Row 里那个 min-w-0 的直系子元素),不碰控件列:\\n\\t * 控件列里有数字输入框,整行可点会把\\"点输入框\\"也变成切开关。\\n\\t * React 重渲染会换掉节点,所以每次轮询都重查;用属性做幂等标记,重复绑不会叠加。\\n\\t */\\n\\tfunction bindSwitchRows() {\\n\\t\\tvar switches = document.querySelectorAll(\'.settings-dialog [role=\\"switch\\"]\');\\n\\t\\tfor (var i = 0; i < switches.length; i++) {\\n\\t\\t\\tvar sw = switches[i];\\n\\t\\t\\tvar row = sw.closest(\\".hairline-b\\");\\n\\t\\t\\tif (!row || row.getAttribute(ROW_BOUND_ATTR) === \\"1\\") continue;\\n\\t\\t\\t// Row 的文字列:hairline-b 的直系子元素里带 min-w-0 的那个\\n\\t\\t\\tvar label = null;\\n\\t\\t\\tfor (var c = 0; c < row.children.length; c += 1) {\\n\\t\\t\\t\\tif (row.children[c].classList.contains(\\"min-w-0\\")) { label = row.children[c]; break; }\\n\\t\\t\\t}\\n\\t\\t\\tif (!label) continue;\\n\\t\\t\\trow.setAttribute(ROW_BOUND_ATTR, \\"1\\");\\n\\t\\t\\t(function (button, labelEl) {\\n\\t\\t\\t\\tlabelEl.style.cursor = \\"pointer\\";\\n\\t\\t\\t\\tlabelEl.addEventListener(\\"click\\", function (event) {\\n\\t\\t\\t\\t\\t// 文字里可能有链接/按钮,别抢它们\\n\\t\\t\\t\\t\\tif (event.target.closest(\\"a, button, input, select, textarea\\")) return;\\n\\t\\t\\t\\t\\tif (button.disabled) return;\\n\\t\\t\\t\\t\\tevent.preventDefault();\\n\\t\\t\\t\\t\\tbutton.click();\\n\\t\\t\\t\\t});\\n\\t\\t\\t})(sw, label);\\n\\t\\t}\\n\\t}\\n\\n\\t// 模型名会随会话/选择变化,输入卡也会整体重挂载;轮询最省事,且因为有上面的\\n\\t// 提前返回,稳态下每次只花一个 querySelector。\\n\\tfunction start() {\\n\\t\\tapply();\\n\\t\\tbindSwitchRows();\\n\\t\\tsetInterval(function () { apply(); bindSwitchRows(); }, 800);\\n\\t\\twindow.addEventListener(\\"resize\\", apply, { passive: true });\\n\\t\\twindow.addEventListener(\\"orientationchange\\", apply, { passive: true });\\n\\t}\\n\\n\\tif (document.readyState === \\"loading\\") document.addEventListener(\\"DOMContentLoaded\\", start, { once: true });\\n\\telse start();\\n})();"}'),m="piweb-mobile-fit",n=l.A,o=l.js;function p(a=process.env){return(0,f.authEnabled)(a)?"development"===a.NODE_ENV?"dev":null:"auth"}function q(){let a=globalThis,b=Symbol.for("piweb:remote-supervisor"),c=a[b];if(c)return c;let d={lan:null,tunnel:null,lanError:null,publicError:null,enginePath:null,engineChecked:!1};return a[b]=d,d}function r(a=process.env){for(let b of[a.PIWEB_PORT,a.PORT]){let a=Number(b);if(Number.isInteger(a)&&a>=1&&a<=65535)return a}return 30141}function s(a=process.env){let b;return"0"!==(b=(a.PIWEB_REMOTE_LAN??"").trim().toLowerCase())&&"false"!==b&&"off"!==b&&"no"!==b}function t(){let a=q(),b=a.lan?.port??null;return{plugin:"builtin-remote",targetPort:r(),blocked:p(),lan:{running:!!a.lan,port:b,urls:b?(function(){let a=[];for(let b of Object.values(e().networkInterfaces()))for(let c of b??[])"IPv4"!==c.family||c.internal||c.address.startsWith("169.254.")||a.push(c.address);return a})().map(a=>`http://${a}:${b}`):[],error:a.lanError},public:{running:!!a.tunnel,url:a.tunnel?.url??null,ready:!!a.tunnel?.ready,engine:a.tunnel?"cloudflared":null,engineAvailable:!a.engineChecked||null!==a.enginePath,error:a.publicError}}}function u(a=function(a=process.env){let b=Number(a.PIWEB_REMOTE_LAN_PORT);return Number.isInteger(b)&&b>=1&&b<=65535?b:30142}(),b="0.0.0.0",c=r()){let d=q();if(d.lan)return Promise.resolve(t().lan);if(d.lanStarting)return d.lanStarting;let e=v(a,b,c).finally(()=>{d.lanStarting===e&&(d.lanStarting=null)});return d.lanStarting=e,e}async function v(a,b,c){let d=q();d.lanError=null;let e=function({targetPort:a,targetHost:b="127.0.0.1",css:c=null,js:d=null,log:e=()=>{}}){return h().createServer((f,g)=>{let j,l={...f.headers},n=!!(c||d)&&!("localhost"===(j=(function(a){let b=String(a??"").trim().toLowerCase();if(b.startsWith("[")){let a=b.indexOf("]");return a>=0?b.slice(1,a):b.slice(1)}return 1===(b.match(/:/g)??[]).length?b.slice(0,b.indexOf(":")):b})(l.host).trim().toLowerCase().replace(/^\[|\]$/g,""))||j.endsWith(".localhost")||"::1"===j||"0:0:0:0:0:0:0:1"===j||/^127(?:\.\d{1,3}){3}$/.test(j));n&&String(l.accept??"").includes("text/html")&&(l["accept-encoding"]="identity");let o=h().request({host:b,port:a,method:f.method,path:f.url??"/",headers:l},a=>{let b=String(a.headers["content-type"]??"");if(!n||!b.includes("text/html")){g.writeHead(a.statusCode??502,a.headers),(0,i.pipeline)(a,g,()=>void 0);return}let f=[];a.on("error",a=>{e(`[远程连接] 上游中途断开:${a.message}`),g.destroy()}),a.on("data",a=>f.push(a)),a.on("end",()=>{let b,h=Buffer.concat(f);try{b=Buffer.from(function(a,{css:b=null,js:c=null}={}){if(!b&&!c||a.includes(`id="${m}"`))return a;let d=[];b&&d.push(`<style id="${m}">
|
|
2
|
+
${b}
|
|
3
|
+
</style>`),c&&d.push(`<script id="${m}-js">
|
|
4
|
+
${c}
|
|
5
|
+
</script>`);let e=d.join("\n"),f=a.indexOf("</head>");if(f>=0)return`${a.slice(0,f)}${e}
|
|
6
|
+
${a.slice(f)}`;let g=a.indexOf("<body");if(g>=0){let b=a.indexOf(">",g);if(b>=0)return`${a.slice(0,b+1)}${e}${a.slice(b+1)}`}return e+a}((function(a,b){let c=String(b??"").toLowerCase();if(!c||"identity"===c)return a;if("gzip"===c||"x-gzip"===c)return k().gunzipSync(a);if("deflate"===c)return k().inflateSync(a);if("br"===c)return k().brotliDecompressSync(a);throw Error(`不支持的 content-encoding:${b}`)})(h,a.headers["content-encoding"]).toString("utf8"),{css:c,js:d}),"utf8")}catch(c){e(`[远程连接] 注入失败,原样返回:${c instanceof Error?c.message:String(c)}`);let b={...a.headers};delete b["content-encoding"],delete b["content-length"],g.writeHead(a.statusCode??200,b),g.end(h);return}let i={...a.headers};delete i["content-encoding"],delete i["transfer-encoding"],delete i.etag,i["content-length"]=String(b.byteLength),i["cache-control"]="no-store",g.writeHead(a.statusCode??200,i),g.end(b)})}),p=!1;o.on("error",a=>{p||(e(`[远程连接] 代理连不上 PiWeb:${a.message}`),g.headersSent||g.writeHead(502,{"content-type":"text/plain; charset=utf-8"}),g.end(`[远程连接] 连不上 PiWeb(${a.message})`))}),g.on("close",()=>{g.writableFinished||(p=!0,o.destroy())}),f.pipe(o)})}({targetPort:c,css:n,js:o,log:a=>console.warn(a)});try{await new Promise((c,d)=>{e.once("error",d),e.listen(a,b,c)})}catch(a){return d.lanError=a instanceof Error?a.message:String(a),e.close(),t().lan}return d.lan={server:e,port:a},t().lan}},75393:(a,b,c)=>{function d(a=process.env){let b=(a.PI_WEB_AUTH??"").trim().toLowerCase();return"1"===b||"true"===b||"on"===b||"yes"===b}c.d(b,{authEnabled:()=>d}),c(77598)}};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";(()=>{var a={};a.id=183,a.ids=[183],a.modules={31421:a=>{a.exports=require("node:child_process")},37067:a=>{a.exports=require("node:http")},38522:a=>{a.exports=require("node:zlib")},44708:a=>{a.exports=require("node:https")},48161:a=>{a.exports=require("node:os")},57075:a=>{a.exports=require("node:stream")},73024:a=>{a.exports=require("node:fs")},76760:a=>{a.exports=require("node:path")},77030:a=>{a.exports=require("node:net")},77598:a=>{a.exports=require("node:crypto")},92322:(a,b,c)=>{async function d(){{let{registerNode:a}=await c.e(807).then(c.bind(c,24807));await a()}}c.r(b),c.d(b,{register:()=>d})}};var b=require("./webpack-runtime.js");b.C(a);var c=b(b.s=92322);module.exports=c})();
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":1,"files":["../package.json","chunks/393.js","chunks/802.js","chunks/807.js","chunks/924.js","webpack-runtime.js"]}
|
|
@@ -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/JDGSR-TIbk9qZWcUNYIX3/_buildManifest.js","static/JDGSR-TIbk9qZWcUNYIX3/_ssgManifest.js"],rootMainFiles:["static/chunks/webpack-bd2b9202ecbcdcaa.js","static/chunks/4bd1b696-93bf506b236d6248.js","static/chunks/3794-3679f1c05160977c.js","static/chunks/main-app-e9b53f0e1c6591b2.js"],rootMainFilesTree:{},pages:{"/_app":[]}};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
self.__REACT_LOADABLE_MANIFEST='{"components/AppShell.tsx -> @/components/
|
|
1
|
+
self.__REACT_LOADABLE_MANIFEST='{"components/AppShell.tsx -> @/components/DrawerPanel":{"id":4778,"files":["static/chunks/4673.8a5a9e6855350e34.js","static/chunks/4778.e4c9ed093a413bc4.js"]},"components/AppShell.tsx -> @/components/FileViewer":{"id":2716,"files":["static/chunks/5173.91ddb803785009f8.js","static/chunks/2716.7ad073038e94a802.js"]},"components/AppShell.tsx -> @/components/MarkdownBlock":{"id":8552,"files":["static/chunks/5173.91ddb803785009f8.js","static/chunks/8552.6bfe3e101250b20f.js"]},"components/AppShell.tsx -> @/components/ProjectPanel":{"id":4673,"files":["static/chunks/4673.8a5a9e6855350e34.js"]},"components/AppShell.tsx -> @/components/SettingsPanel":{"id":839,"files":["static/css/2959bd6b626b7ffe.css","static/chunks/839.7403c6bdace4c56c.js"]},"components/AppShell.tsx -> @/components/TrajectoryView":{"id":618,"files":["static/css/08815507594e8b8d.css","static/chunks/618.ee5d5bf1c647e483.js"]},"components/ChatWindow.tsx -> @/components/MarkdownBlock":{"id":8552,"files":["static/chunks/5173.91ddb803785009f8.js","static/chunks/8552.6bfe3e101250b20f.js"]}}';
|