@rainmanhhh/pi-web 0.10.5 → 0.10.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/server.mjs +1 -1
- package/dist/static/assets/architecture-YZFGNWBL-CHYDpJxN.js +1 -0
- package/dist/static/assets/{architectureDiagram-Q4EWVU46-DTKzOnyB.js → architectureDiagram-Q4EWVU46-fLUzzWYI.js} +1 -1
- package/dist/static/assets/{blockDiagram-DXYQGD6D-BqDvrkR9.js → blockDiagram-DXYQGD6D-CYdvwqLi.js} +1 -1
- package/dist/static/assets/{c4Diagram-AHTNJAMY-DQ2w9W7Y.js → c4Diagram-AHTNJAMY-DshRyMzY.js} +1 -1
- package/dist/static/assets/channel-DVogmuqZ.js +1 -0
- package/dist/static/assets/{chunk-4TB4RGXK-CKQApzfR.js → chunk-4TB4RGXK-ytng1rN8.js} +1 -1
- package/dist/static/assets/{chunk-5FUZZQ4R-Db2CDtxB.js → chunk-5FUZZQ4R-Bs0i1co0.js} +1 -1
- package/dist/static/assets/{chunk-5PVQY5BW-CC7ORbuT.js → chunk-5PVQY5BW-CDe1fMNb.js} +1 -1
- package/dist/static/assets/{chunk-EDXVE4YY-v5auYA0J.js → chunk-EDXVE4YY-CUM8Jj7H.js} +1 -1
- package/dist/static/assets/{chunk-ENJZ2VHE-LhoZ54ZX.js → chunk-ENJZ2VHE-DurAwhZ9.js} +1 -1
- package/dist/static/assets/{chunk-ICPOFSXX-zIQh5HBi.js → chunk-ICPOFSXX-ChutJQP9.js} +1 -1
- package/dist/static/assets/{chunk-K5T4RW27-DE9C-yn2.js → chunk-K5T4RW27-CKaOGjfa.js} +1 -1
- package/dist/static/assets/{chunk-OYMX7WX6-C1kVMSA5.js → chunk-OYMX7WX6-tRk5LJMh.js} +1 -1
- package/dist/static/assets/{chunk-U2HBQHQK-BjJd66K6.js → chunk-U2HBQHQK-DGB-rbXQ.js} +1 -1
- package/dist/static/assets/{chunk-X2U36JSP-Ga4MbVAD.js → chunk-X2U36JSP-Cr2aowp4.js} +1 -1
- package/dist/static/assets/{chunk-YZCP3GAM-Dj9HcLGZ.js → chunk-YZCP3GAM-DdbXKkbk.js} +1 -1
- package/dist/static/assets/{chunk-ZZ45TVLE-PxAL8ZQO.js → chunk-ZZ45TVLE-Ct6qWV6o.js} +1 -1
- package/dist/static/assets/classDiagram-6PBFFD2Q-D3_Ipn5G.js +1 -0
- package/dist/static/assets/classDiagram-v2-HSJHXN6E-D3_Ipn5G.js +1 -0
- package/dist/static/assets/clone-DB-wkPug.js +1 -0
- package/dist/static/assets/{dagre-KV5264BT-uZfzVaqe.js → dagre-KV5264BT-BQOG6G3s.js} +1 -1
- package/dist/static/assets/{dagre-C_o9VDIj.js → dagre-bmzKLGcL.js} +1 -1
- package/dist/static/assets/{diagram-5BDNPKRD-D3PTrA8j.js → diagram-5BDNPKRD-DQj0szUn.js} +1 -1
- package/dist/static/assets/{diagram-G4DWMVQ6-BM9TmRaw.js → diagram-G4DWMVQ6-pjffztEO.js} +1 -1
- package/dist/static/assets/{diagram-MMDJMWI5-D5CmdqhZ.js → diagram-MMDJMWI5-DDMIaLNo.js} +1 -1
- package/dist/static/assets/{diagram-TYMM5635-Dg63XQPs.js → diagram-TYMM5635-_yqezcAE.js} +1 -1
- package/dist/static/assets/{erDiagram-SMLLAGMA-BEi2GxJV.js → erDiagram-SMLLAGMA-DUt4zK-s.js} +1 -1
- package/dist/static/assets/{flatten-DcYJBqXO.js → flatten-B7RqgTAH.js} +1 -1
- package/dist/static/assets/{flowDiagram-DWJPFMVM-Dkae39jG.js → flowDiagram-DWJPFMVM-a8yYkU1C.js} +1 -1
- package/dist/static/assets/{ganttDiagram-T4ZO3ILL-CbnM_bJg.js → ganttDiagram-T4ZO3ILL-2Svuz390.js} +1 -1
- package/dist/static/assets/gitGraph-7Q5UKJZL-CyWiyT7I.js +1 -0
- package/dist/static/assets/{gitGraphDiagram-UUTBAWPF-BTf6trIx.js → gitGraphDiagram-UUTBAWPF-CFre2F3K.js} +1 -1
- package/dist/static/assets/{graphlib-BsUCY7Vx.js → graphlib-9xobtxOM.js} +1 -1
- package/dist/static/assets/{highlighted-body-OFNGDK62-DI83tYM2.js → highlighted-body-OFNGDK62-D_RrCykS.js} +1 -1
- package/dist/static/assets/{index-CE8KqYf0.js → index-BvSRwpXc.js} +8 -8
- package/dist/static/assets/info-OMHHGYJF-BdsRggXG.js +1 -0
- package/dist/static/assets/{infoDiagram-42DDH7IO-CmWDuZK-.js → infoDiagram-42DDH7IO-BbAuovk1.js} +1 -1
- package/dist/static/assets/{ishikawaDiagram-UXIWVN3A-D4BJPKsl.js → ishikawaDiagram-UXIWVN3A-DIZqeIgH.js} +1 -1
- package/dist/static/assets/{journeyDiagram-VCZTEJTY-B7k4U-ek.js → journeyDiagram-VCZTEJTY-y-w6X_3V.js} +1 -1
- package/dist/static/assets/{kanban-definition-6JOO6SKY-UefnCJ4B.js → kanban-definition-6JOO6SKY-C_X5ab9j.js} +1 -1
- package/dist/static/assets/{line-B50e62dd.js → line-BgqLa81K.js} +1 -1
- package/dist/static/assets/mermaid-GHXKKRXX-DHmZ7AEG.js +1 -0
- package/dist/static/assets/{mermaid-parser.core-DOjPOIL6.js → mermaid-parser.core-DagEl33x.js} +2 -2
- package/dist/static/assets/{mermaid.core-C_sMJavz.js → mermaid.core-BUVD82cN.js} +4 -4
- package/dist/static/assets/{mindmap-definition-QFDTVHPH-CjB79OQT.js → mindmap-definition-QFDTVHPH-C3BHvTf8.js} +1 -1
- package/dist/static/assets/packet-4T2RLAQJ-BZ6jLOtf.js +1 -0
- package/dist/static/assets/pie-ZZUOXDRM-DimWCOAg.js +1 -0
- package/dist/static/assets/{pieDiagram-DEJITSTG-BARXGsOZ.js → pieDiagram-DEJITSTG-C5allMWX.js} +1 -1
- package/dist/static/assets/{quadrantDiagram-34T5L4WZ-BxKlrZol.js → quadrantDiagram-34T5L4WZ-DXdKPbLX.js} +1 -1
- package/dist/static/assets/radar-PYXPWWZC-CidPptZ-.js +1 -0
- package/dist/static/assets/{reduce-BCtAxpG6.js → reduce-DD1dpWPu.js} +1 -1
- package/dist/static/assets/{requirementDiagram-MS252O5E-BtK4ZgxP.js → requirementDiagram-MS252O5E-DUmp8f-b.js} +1 -1
- package/dist/static/assets/{sankeyDiagram-XADWPNL6-DF2iPngn.js → sankeyDiagram-XADWPNL6-Be3mel4t.js} +1 -1
- package/dist/static/assets/{sequenceDiagram-FGHM5R23-DXzeT8TC.js → sequenceDiagram-FGHM5R23-BrP7Xm1H.js} +1 -1
- package/dist/static/assets/{stateDiagram-FHFEXIEX-C6n2THUy.js → stateDiagram-FHFEXIEX-B4LTC7ZW.js} +1 -1
- package/dist/static/assets/stateDiagram-v2-QKLJ7IA2-x6fw2X5B.js +1 -0
- package/dist/static/assets/{timeline-definition-GMOUNBTQ-B3bE_ild.js → timeline-definition-GMOUNBTQ-DUavrTUO.js} +1 -1
- package/dist/static/assets/treeView-SZITEDCU-Bts0OHri.js +1 -0
- package/dist/static/assets/treemap-W4RFUUIX-DHBfXLus.js +1 -0
- package/dist/static/assets/{vennDiagram-DHZGUBPP-C95Ko4wc.js → vennDiagram-DHZGUBPP-B4siwLo0.js} +1 -1
- package/dist/static/assets/wardley-RL74JXVD-LBmzxefn.js +1 -0
- package/dist/static/assets/{wardleyDiagram-NUSXRM2D-B9Hx0Kwj.js → wardleyDiagram-NUSXRM2D-DTd7D-HQ.js} +1 -1
- package/dist/static/assets/{xychartDiagram-5P7HB3ND--wjGBGiz.js → xychartDiagram-5P7HB3ND-v-DHHAD1.js} +1 -1
- package/dist/static/index.html +1 -1
- package/package.json +1 -1
- package/dist/static/assets/architecture-YZFGNWBL-BnXv04Bq.js +0 -1
- package/dist/static/assets/channel-H5a5zvAa.js +0 -1
- package/dist/static/assets/classDiagram-6PBFFD2Q-B7pRfwhF.js +0 -1
- package/dist/static/assets/classDiagram-v2-HSJHXN6E-B7pRfwhF.js +0 -1
- package/dist/static/assets/clone-BYZ-WaXs.js +0 -1
- package/dist/static/assets/gitGraph-7Q5UKJZL-CqmVzYBQ.js +0 -1
- package/dist/static/assets/info-OMHHGYJF-BtBdmG_R.js +0 -1
- package/dist/static/assets/mermaid-GHXKKRXX-CdYIiI-L.js +0 -1
- package/dist/static/assets/packet-4T2RLAQJ-C9RRDm4x.js +0 -1
- package/dist/static/assets/pie-ZZUOXDRM-m_Y2Q_U9.js +0 -1
- package/dist/static/assets/radar-PYXPWWZC-HpYWCTu7.js +0 -1
- package/dist/static/assets/stateDiagram-v2-QKLJ7IA2-wye0FLmb.js +0 -1
- package/dist/static/assets/treeView-SZITEDCU-CT1tdKhL.js +0 -1
- package/dist/static/assets/treemap-W4RFUUIX-B0ypud6Z.js +0 -1
- package/dist/static/assets/wardley-RL74JXVD-lyOYfcuD.js +0 -1
package/dist/server.mjs
CHANGED
|
@@ -249,7 +249,7 @@ Expecting one of '${D.join("', '")}'`);if(this._lifeCycleHooks[n])this._lifeCycl
|
|
|
249
249
|
`),this.outputHelp({error:!0});let D=U||{},c=D.exitCode||1,g=D.code||"commander.error";this._exit(c,g,n)}_parseOptionsEnv(){this.options.forEach((n)=>{if(n.envVar&&n.envVar in T1.env){let U=n.attributeName();if(this.getOptionValue(U)===void 0||["default","config","env"].includes(this.getOptionValueSource(U)))if(n.required||n.optional)this.emit(`optionEnv:${n.name()}`,T1.env[n.envVar]);else this.emit(`optionEnv:${n.name()}`)}})}_parseOptionsImplied(){let n=new e3(this.options),U=(D)=>{return this.getOptionValue(D)!==void 0&&!["default","implied"].includes(this.getOptionValueSource(D))};this.options.filter((D)=>D.implied!==void 0&&U(D.attributeName())&&n.valueFromOption(this.getOptionValue(D.attributeName()),D)).forEach((D)=>{Object.keys(D.implied).filter((c)=>!U(c)).forEach((c)=>{this.setOptionValueWithSource(c,D.implied[c],"implied")})})}missingArgument(n){let U=`error: missing required argument '${n}'`;this.error(U,{code:"commander.missingArgument"})}optionMissingArgument(n){let U=`error: option '${n.flags}' argument missing`;this.error(U,{code:"commander.optionMissingArgument"})}missingMandatoryOptionValue(n){let U=`error: required option '${n.flags}' not specified`;this.error(U,{code:"commander.missingMandatoryOptionValue"})}_conflictingOption(n,U){let D=(f)=>{let h=f.attributeName(),x=this.getOptionValue(h),T=this.options.find((y)=>y.negate&&h===y.attributeName()),W=this.options.find((y)=>!y.negate&&h===y.attributeName());if(T&&(T.presetArg===void 0&&x===!1||T.presetArg!==void 0&&x===T.presetArg))return T;return W||f},c=(f)=>{let h=D(f),x=h.attributeName();if(this.getOptionValueSource(x)==="env")return`environment variable '${h.envVar}'`;return`option '${h.flags}'`},g=`error: ${c(n)} cannot be used with ${c(U)}`;this.error(g,{code:"commander.conflictingOption"})}unknownOption(n){if(this._allowUnknownOption)return;let U="";if(n.startsWith("--")&&this._showSuggestionAfterError){let c=[],g=this;do{let f=g.createHelp().visibleOptions(g).filter((h)=>h.long).map((h)=>h.long);c=c.concat(f),g=g.parent}while(g&&!g._enablePositionalOptions);U=s3(n,c)}let D=`error: unknown option '${n}'${U}`;this.error(D,{code:"commander.unknownOption"})}_excessArguments(n){if(this._allowExcessArguments)return;let U=this.registeredArguments.length,D=U===1?"":"s",c=n.length,g=this.parent?` for '${this.name()}'`:"",f=n.join(", "),h=`error: too many arguments${g}. Expected ${U} argument${D} but got ${c}: ${f}.`;this.error(h,{code:"commander.excessArguments"})}unknownCommand(){let n=this.args[0],U="";if(this._showSuggestionAfterError){let c=[];this.createHelp().visibleCommands(this).forEach((g)=>{if(c.push(g.name()),g.alias())c.push(g.alias())}),U=s3(n,c)}let D=`error: unknown command '${n}'${U}`;this.error(D,{code:"commander.unknownCommand"})}version(n,U,D){if(n===void 0)return this._version;this._version=n,U=U||"-V, --version",D=D||"output the version number";let c=this.createOption(U,D);return this._versionOptionName=c.attributeName(),this._registerOption(c),this.on("option:"+c.name(),()=>{this._outputConfiguration.writeOut(`${n}
|
|
250
250
|
`),this._exit(0,"commander.version",n)}),this}description(n,U){if(n===void 0&&U===void 0)return this._description;if(this._description=n,U)this._argsDescription=U;return this}summary(n){if(n===void 0)return this._summary;return this._summary=n,this}alias(n){if(n===void 0)return this._aliases[0];let U=this;if(this.commands.length!==0&&this.commands[this.commands.length-1]._executableHandler)U=this.commands[this.commands.length-1];if(n===U._name)throw Error("Command alias can't be the same as its name");let D=this.parent?._findCommand(n);if(D){let c=[D.name()].concat(D.aliases()).join("|");throw Error(`cannot add alias '${n}' to command '${this.name()}' as already have command '${c}'`)}return U._aliases.push(n),this}aliases(n){if(n===void 0)return this._aliases;return n.forEach((U)=>this.alias(U)),this}usage(n){if(n===void 0){if(this._usage)return this._usage;let U=this.registeredArguments.map((D)=>{return A8(D)});return[].concat(this.options.length||this._helpOption!==null?"[options]":[],this.commands.length?"[command]":[],this.registeredArguments.length?U:[]).join(" ")}return this._usage=n,this}name(n){if(n===void 0)return this._name;return this._name=n,this}helpGroup(n){if(n===void 0)return this._helpGroupHeading??"";return this._helpGroupHeading=n,this}commandsGroup(n){if(n===void 0)return this._defaultCommandGroup??"";return this._defaultCommandGroup=n,this}optionsGroup(n){if(n===void 0)return this._defaultOptionGroup??"";return this._defaultOptionGroup=n,this}_initOptionGroup(n){if(this._defaultOptionGroup&&!n.helpGroupHeading)n.helpGroup(this._defaultOptionGroup)}_initCommandGroup(n){if(this._defaultCommandGroup&&!n.helpGroup())n.helpGroup(this._defaultCommandGroup)}nameFromFilename(n){return this._name=Z2.basename(n,Z2.extname(n)),this}executableDir(n){if(n===void 0)return this._executableDir;return this._executableDir=n,this}helpInformation(n){let U=this.createHelp(),D=this._getOutputContext(n);U.prepareContext({error:D.error,helpWidth:D.helpWidth,outputHasColors:D.hasColors});let c=U.formatHelp(this,U);if(D.hasColors)return c;return this._outputConfiguration.stripColor(c)}_getOutputContext(n){n=n||{};let U=!!n.error,D,c,g;if(U)D=(h)=>this._outputConfiguration.writeErr(h),c=this._outputConfiguration.getErrHasColors(),g=this._outputConfiguration.getErrHelpWidth();else D=(h)=>this._outputConfiguration.writeOut(h),c=this._outputConfiguration.getOutHasColors(),g=this._outputConfiguration.getOutHelpWidth();return{error:U,write:(h)=>{if(!c)h=this._outputConfiguration.stripColor(h);return D(h)},hasColors:c,helpWidth:g}}outputHelp(n){let U;if(typeof n==="function")U=n,n=void 0;let D=this._getOutputContext(n),c={error:D.error,write:D.write,command:this};this._getCommandAndAncestors().reverse().forEach((f)=>f.emit("beforeAllHelp",c)),this.emit("beforeHelp",c);let g=this.helpInformation({error:D.error});if(U){if(g=U(g),typeof g!=="string"&&!Buffer.isBuffer(g))throw Error("outputHelp callback must return a string or a Buffer")}if(D.write(g),this._getHelpOption()?.long)this.emit(this._getHelpOption().long);this.emit("afterHelp",c),this._getCommandAndAncestors().forEach((f)=>f.emit("afterAllHelp",c))}helpOption(n,U){if(typeof n==="boolean"){if(n){if(this._helpOption===null)this._helpOption=void 0;if(this._defaultOptionGroup)this._initOptionGroup(this._getHelpOption())}else this._helpOption=null;return this}if(this._helpOption=this.createOption(n??"-h, --help",U??"display help for command"),n||U)this._initOptionGroup(this._helpOption);return this}_getHelpOption(){if(this._helpOption===void 0)this.helpOption(void 0,void 0);return this._helpOption}addHelpOption(n){return this._helpOption=n,this._initOptionGroup(n),this}help(n){this.outputHelp(n);let U=Number(T1.exitCode??0);if(U===0&&n&&typeof n!=="function"&&n.error)U=1;this._exit(U,"commander.help","(outputHelp)")}addHelpText(n,U){let D=["beforeAll","before","after","afterAll"];if(!D.includes(n))throw Error(`Unexpected value for position to addHelpText.
|
|
251
251
|
Expecting one of '${D.join("', '")}'`);let c=`${n}Help`;return this.on(c,(g)=>{let f;if(typeof U==="function")f=U({error:g.error,command:g.command});else f=U;if(f)g.write(`${f}
|
|
252
|
-
`)}),this}_outputHelpIfRequested(n){let U=this._getHelpOption();if(U&&n.find((c)=>U.is(c)))this.outputHelp(),this._exit(0,"commander.helpDisplayed","(outputHelp)")}}function Px(n){return n.map((U)=>{if(!U.startsWith("--inspect"))return U;let D,c="127.0.0.1",g="9229",f;if((f=U.match(/^(--inspect(-brk)?)$/))!==null)D=f[1];else if((f=U.match(/^(--inspect(-brk|-port)?)=([^:]+)$/))!==null)if(D=f[1],/^\d+$/.test(f[3]))g=f[3];else c=f[3];else if((f=U.match(/^(--inspect(-brk|-port)?)=([^:]+):(\d+)$/))!==null)D=f[1],c=f[3],g=f[4];if(D&&g!=="0")return`${D}=${c}:${parseInt(g)+1}`;return U})}function Rx(){if(T1.env.NO_COLOR||T1.env.FORCE_COLOR==="0"||T1.env.FORCE_COLOR==="false")return!1;if(T1.env.FORCE_COLOR||T1.env.CLICOLOR_FORCE!==void 0)return!0;return}var ss=new FD;var ux={name:"@rainmanhhh/pi-web",version:"0.10.5",description:"Web UI for the pi coding agent (fork of @agegr/pi-web)",homepage:"https://gitee.com/dsxbygzzl/pi-web#readme",repository:{type:"git",url:"git+https://gitee.com/dsxbygzzl/pi-web.git"},bugs:{url:"https://gitee.com/dsxbygzzl/pi-web/issues"},author:"rainmanhhh",license:"MIT",publishConfig:{access:"public",registry:"https://registry.npmjs.org"},engines:{node:">=22.19.0"},files:["dist","public","extensions","package.json"],bin:{"pi-web":"dist/server.mjs"},scripts:{dev:"vite","dev:lan":"vite --host 0.0.0.0",mb:"bun run --env-file=.env.manual api",mf:"bun run --env-file=.env.manual dev -- --port 3001",api:"bun run server/main.ts","api:node":"bun run build:server && node dist/server.mjs","build:server":'bun build server/main.ts --target node --outfile dist/server.mjs --minify --external "@earendil-works/*" --define "process.env.PI_WEB_PACKAGED=1"',"e2e:stop":"bun run scripts/e2e-stop.mjs",build:"vite build && bun run scripts/prune-fonts.mjs","build:analyze":"vite build --config scripts/analyze-bundle.config.ts && bun run scripts/prune-fonts.mjs",lint:"oxlint --fix",jscpd:"jscpd --config .jscpd.json",check:"tsc --noEmit",format:"biome check --write .",prepublishOnly:"bun run check && bun run build && bun run build:server","test:e2e":"playwright test","test:unit":"vitest run",prepare:"husky || true"},dependencies:{"@earendil-works/pi-agent-core":"0.84.1","@earendil-works/pi-ai":"0.84.1","@earendil-works/pi-coding-agent":"0.84.1","@earendil-works/pi-tui":"0.84.1","@hono/node-server":"^2.1.0","class-variance-authority":"^0.7.1",clsx:"^2.1.1",hono:"^4.13.1","lucide-react":"^1.31.0",pointrix:"^1.1.0","proper-lockfile":"4.1.2","radix-ui":"^1.6.7",react:"^19.2.4","react-dom":"^19.2.4",shadcn:"^4.17.0",streamdown:"2.5.0","tailwind-merge":"^3.6.0","tw-animate-css":"^1.4.0",undici:"8.9.0"},devDependencies:{"@lobehub/icons":"^5.6.0","@playwright/test":"^1.62.1","@tailwindcss/postcss":"^4.2.2","@testing-library/dom":"^10.4.1","@testing-library/react":"^16.3.2","@types/node":"^25","@types/proper-lockfile":"4.1.4","@types/react":"^19","@types/react-dom":"^19","@types/react-resizable":"^4.0.0","@types/react-syntax-highlighter":"^15.5.13","@vitejs/plugin-react":"^6.0.5",biome:"^0.3.3",commander:"^15.0.0",husky:"^9.1.7",jiti:"^2.7.0",jscpd:"^5.0.14",jsdom:"^30.0.1",katex:"^0.16.47","lint-staged":"^17.3.0",mammoth:"^1.12.0",mermaid:"^11.14.0",oxlint:"^1.78.0",postcss:"^8","react-markdown":"^10.1.0","react-syntax-highlighter":"^16.1.1","rehype-katex":"^7.0.1","rehype-raw":"^7.0.0","rehype-sanitize":"^6.0.0","remark-gfm":"^4.0.1","remark-math":"^6.0.0",tailwindcss:"^4.2.2",typescript:"^7.0.2",vite:"^8.2.1","vite-plugin-svgr":"^5.2.0",vitest:"^4.1.10"},type:"module"};import{getAgentDir as pZ}from"@earendil-works/pi-coding-agent";var dx={port:31415};var Uf=(n,U,D)=>{return(c,g)=>{let f=-1;return h(0);async function h(x){if(x<=f)throw Error("next() called multiple times");f=x;let T,W=!1,y;if(n[x])y=n[x][0][0],c.req.routeIndex=x;else y=x===n.length&&g||void 0;if(y)try{T=await y(c,()=>h(x+1))}catch(F){if(F instanceof Error&&U)c.error=F,T=await U(F,c),W=!0;else throw F}else if(c.finalized===!1&&D)T=await D(c);if(T&&(c.finalized===!1||W))c.res=T;return c}}};var kx=Symbol();var px=(n,U)=>{return new Response(n,{headers:{"Content-Type":U.replace(/^[^;]+/,(c)=>c.toLowerCase())}}).formData()};var C8=(n)=>("headers"in n),ax=async(n,U=Object.create(null))=>{let{all:D=!1,dot:c=!1}=U,h=(C8(n)?n.headers:n.raw.headers).get("Content-Type")?.split(";")[0].trim().toLowerCase();if(h==="multipart/form-data"||h==="application/x-www-form-urlencoded")return ez(n,{all:D,dot:c});return{}};async function ez(n,U){if(!C8(n)&&n.bodyCache.formData)return mx(await n.bodyCache.formData,U);let D=C8(n)?n.headers:n.raw.headers,c=await n.arrayBuffer(),g=px(c,D.get("Content-Type")||"");if(!C8(n))n.bodyCache.formData=g;let f=await g;if(f)return mx(f,U);return{}}function mx(n,U){let D=Object.create(null);if(n.forEach((c,g)=>{if(!(U.all||g.endsWith("[]")))D[g]=c;else sz(D,g,c)}),U.dot)Object.entries(D).forEach(([c,g])=>{if(c.includes("."))nO(D,c,g),delete D[c]});return D}var sz=(n,U,D)=>{if(n[U]!==void 0)if(Array.isArray(n[U]))n[U].push(D);else n[U]=[n[U],D];else if(!U.endsWith("[]"))n[U]=D;else n[U]=[D]},nO=(n,U,D)=>{if(/(?:^|\.)__proto__\./.test(U))return;let c=n,g=U.split(".");g.forEach((f,h)=>{if(h===g.length-1)c[f]=D;else{if(!c[f]||typeof c[f]!=="object"||Array.isArray(c[f])||c[f]instanceof File)c[f]=Object.create(null);c=c[f]}})};var cf=(n)=>{let U=n.split("/");if(U[0]==="")U.shift();return U},ox=(n)=>{let{groups:U,path:D}=UO(n),c=cf(D);return DO(c,U)},UO=(n)=>{let U=[];return n=n.replace(/\{[^}]+\}/g,(D,c)=>{let g=`@${c}`;return U.push([g,D]),g}),{groups:U,path:n}},DO=(n,U)=>{for(let D=U.length-1;D>=0;D--){let[c]=U[D];for(let g=n.length-1;g>=0;g--)if(n[g].includes(c)){n[g]=n[g].replace(c,U[D][1]);break}}return n},E8={},rx=(n,U)=>{if(n==="*")return"*";let D=n.match(/^\:([^\{\}]+)(?:\{(.+)\})?$/);if(D){let c=`${n}#${U}`;if(!E8[c])if(D[2])E8[c]=U&&U[0]!==":"&&U[0]!=="*"?[c,D[1],new RegExp(`^${D[2]}(?=/${U})`)]:[n,D[1],new RegExp(`^${D[2]}$`)];else E8[c]=[n,D[1],!0];return E8[c]}return null},lx=(n,U)=>{try{return U(n)}catch{return n.replace(/(?:%[0-9A-Fa-f]{2})+/g,(D)=>{try{return U(D)}catch{return D}})}},cO=(n)=>lx(n,decodeURI),gf=(n)=>{let U=n.url,D=U.indexOf("/",U.indexOf(":")+4),c=D;for(;c<U.length;c++){let g=U.charCodeAt(c);if(g===37){let f=U.indexOf("?",c),h=U.indexOf("#",c),x=f===-1?h===-1?void 0:h:h===-1?f:Math.min(f,h),T=U.slice(D,x);return cO(T.includes("%25")?T.replace(/%25/g,"%2525"):T)}else if(g===63||g===35)break}return U.slice(D,c)};var tx=(n)=>{let U=gf(n);return U.length>1&&U.at(-1)==="/"?U.slice(0,-1):U},m2=(n,U,...D)=>{if(D.length)U=m2(U,...D);return`${n?.[0]==="/"?"":"/"}${n}${U==="/"?"":`${n?.at(-1)==="/"?"":"/"}${U?.[0]==="/"?U.slice(1):U}`}`},w8=(n)=>{if(n.charCodeAt(n.length-1)!==63||!n.includes(":"))return null;let U=n.split("/"),D=[],c="";return U.forEach((g)=>{if(g!==""&&!/\:/.test(g))c+="/"+g;else if(/\:/.test(g))if(/\?/.test(g)){if(D.length===0&&c==="")D.push("/");else D.push(c);let f=g.replace("?","");c+="/"+f,D.push(c)}else c+="/"+g}),D.filter((g,f,h)=>h.indexOf(g)===f)},j8=(n)=>n.indexOf("%")!==-1?lx(n,gO):n,Df=(n)=>{if(n.indexOf("+")!==-1)n=n.replace(/\+/g," ");return j8(n)},ex=(n,U,D)=>{let c;if(!D&&U&&U.indexOf("%")===-1&&U.indexOf("+")===-1){let h=n.indexOf("?",8);if(h===-1)return;if(!n.startsWith(U,h+1))h=n.indexOf(`&${U}`,h+1);while(h!==-1){let x=n.charCodeAt(h+U.length+1);if(x===61){let T=h+U.length+2,W=n.indexOf("&",T);return Df(n.slice(T,W===-1?void 0:W))}else if(x==38||isNaN(x))return"";h=n.indexOf(`&${U}`,h+1)}if(c=/[%+]/.test(n),!c)return}let g=Object.create(null);c??=/[%+]/.test(n);let f=n.indexOf("?",8);while(f!==-1){let h=n.indexOf("&",f+1),x=n.indexOf("=",f);if(x>h&&h!==-1)x=-1;let T=n.slice(f+1,x===-1?h===-1?void 0:h:x);if(c)T=Df(T);if(f=h,T==="")continue;let W;if(x===-1)W="";else if(W=n.slice(x+1,h===-1?void 0:h),c)W=Df(W);if(D){if(!(g[T]&&Array.isArray(g[T])))g[T]=[];g[T].push(W)}else g[T]??=W}return U?g[U]:g},sx=ex,nW=(n,U)=>{return ex(n,U,!0)},gO=decodeURIComponent;var UW=class{raw;#n;#U;routeIndex=0;path;bodyCache={};constructor(n,U="/",D=[[]]){this.raw=n,this.path=U,this.#U=D}param(n){return n?this.#D(n):this.#f()}#D(n){let U=this.#U[0][this.routeIndex][1][n],D=this.#c(U);return D&&j8(D)}#f(){let n={},U=Object.keys(this.#U[0][this.routeIndex][1]);for(let D of U){let c=this.#c(this.#U[0][this.routeIndex][1][D]);if(c!==void 0)n[D]=j8(c)}return n}#c(n){return this.#U[1]?this.#U[1][n]:n}query(n){return sx(this.url,n)}queries(n){return nW(this.url,n)}header(n){if(n)return this.raw.headers.get(n)??void 0;let U=Object.create(null);return this.raw.headers.forEach((D,c)=>{U[c]=D}),U}async parseBody(n){return ax(this,n)}#g=(n)=>{let{bodyCache:U,raw:D}=this,c=U[n];if(c)return c;for(let g in U)return U[g].then((f)=>{if(g==="json")f=JSON.stringify(f);return new Response(f)[n]()});return U[n]=D[n]()};json(){return this.#g("text").then((n)=>JSON.parse(n))}text(){return this.#g("text")}arrayBuffer(){return this.#g("arrayBuffer")}bytes(){return this.#g("arrayBuffer").then((n)=>new Uint8Array(n))}blob(){return this.#g("blob")}formData(){return this.#g("formData")}addValidatedData(n,U){(this.#n??={})[n]=U}valid(n){return this.#n?.[n]}get url(){return this.raw.url}get method(){return this.raw.method}get[kx](){return this.#U}get matchedRoutes(){return this.#U[0].map(([[,n]])=>n)}get routePath(){return this.#U[0].map(([[,n]])=>n)[this.routeIndex].path}};var DW={Stringify:1,BeforeStream:2,Stream:3},fO=(n,U)=>{let D=new String(n);return D.isEscaped=!0,D.callbacks=U,D};var ff=async(n,U,D,c,g)=>{if(typeof n==="object"&&!(n instanceof String)){if(!(n instanceof Promise))n=n.toString();if(n instanceof Promise)n=await n}let f=n.callbacks;if(!f?.length)return Promise.resolve(n);if(g)g[0]+=n;else g=[n];let h=Promise.all(f.map((x)=>x({phase:U,buffer:g,context:c}))).then((x)=>Promise.all(x.filter(Boolean).map((T)=>ff(T,U,!1,c,g))).then(()=>g[0]));if(D)return fO(await h,f);else return h};var hO="text/plain; charset=UTF-8",hf=(n,U)=>{return{"Content-Type":n,...U}},Hc=(n,U)=>new Response(n,U),xf=class{#n;#U;env={};#D;finalized=!1;error;#f;#c;#g;#y;#W;#T;#x;#F;#i;constructor(n,U){if(this.#n=n,U)this.#c=U.executionCtx,this.env=U.env,this.#T=U.notFoundHandler,this.#i=U.path,this.#F=U.matchResult}get req(){return this.#U??=new UW(this.#n,this.#i,this.#F),this.#U}get event(){if(this.#c&&"respondWith"in this.#c)return this.#c;else throw Error("This context has no FetchEvent")}get executionCtx(){if(this.#c)return this.#c;else throw Error("This context has no ExecutionContext")}get res(){return this.#g||=Hc(null,{headers:this.#x??=new Headers})}set res(n){if(this.#g&&n){n=Hc(n.body,n);for(let[U,D]of this.#g.headers.entries()){if(U==="content-type")continue;if(U==="set-cookie"){let c=this.#g.headers.getSetCookie();n.headers.delete("set-cookie");for(let g of c)n.headers.append("set-cookie",g)}else n.headers.set(U,D)}}this.#g=n,this.finalized=!0}render=(...n)=>{return this.#W??=(U)=>this.html(U),this.#W(...n)};setLayout=(n)=>this.#y=n;getLayout=()=>this.#y;setRenderer=(n)=>{this.#W=n};header=(n,U,D)=>{if(this.finalized)this.#g=Hc(this.#g.body,this.#g);let c=this.#g?this.#g.headers:this.#x??=new Headers;if(U===void 0)c.delete(n);else if(D?.append)c.append(n,U);else c.set(n,U)};status=(n)=>{this.#f=n};set=(n,U)=>{this.#D??=new Map,this.#D.set(n,U)};get=(n)=>{return this.#D?this.#D.get(n):void 0};get var(){if(!this.#D)return{};return Object.fromEntries(this.#D)}#h(n,U,D){let c=this.#g?new Headers(this.#g.headers):this.#x;if(typeof U==="object"&&U.headers){c??=new Headers;for(let[f,h]of new Headers(U.headers))if(f==="set-cookie")c.append(f,h);else c.set(f,h)}if(D){if(!c){let f=0;for(let h in D)if(++f>1||typeof D[h]!=="string"){c=new Headers;break}}if(c)for(let f in D){let h=D[f];if(typeof h==="string")c.set(f,h);else{c.delete(f);for(let x of h)c.append(f,x)}}}let g=typeof U==="number"?U:U?.status??this.#f;return Hc(n,{status:g,headers:c??D})}newResponse=(...n)=>this.#h(...n);body=(n,U,D)=>this.#h(n,U,D);text=(n,U,D)=>{return!this.#x&&!this.#f&&!U&&!D&&!this.finalized?new Response(n):this.#h(n,U,hf(hO,D))};json=(n,U,D)=>{return this.#h(JSON.stringify(n),U,hf("application/json",D))};html=(n,U,D)=>{let c=(g)=>this.#h(g,U,hf("text/html; charset=UTF-8",D));return typeof n==="object"?ff(n,DW.Stringify,!1,{}).then(c):c(n)};redirect=(n,U)=>{let D=String(n);return this.header("Location",!/[^\x00-\xFF]/.test(D)?D:encodeURI(D)),this.newResponse(null,U??302)};notFound=()=>{return this.#T??=()=>Hc(),this.#T(this)}};var A1="ALL",cW="all",gW=["get","post","put","delete","options","patch","query"],I8="Can not add a route since the matcher is already built.",_8=class extends Error{};var fW="__COMPOSED_HANDLER";var xO=(n)=>{return n.text("404 Not Found",404)},hW=(n,U)=>{if("getResponse"in n){let D=n.getResponse();return U.newResponse(D.body,D)}return console.error(n),U.text("Internal Server Error",500)},xW=class n{get;post;put;delete;options;patch;query;all;on;use;router;getPath;_basePath="/";#n="/";routes=[];constructor(U={}){[...gW,cW].forEach((f)=>{this[f]=(h,...x)=>{if(typeof h==="string")this.#n=h;else this.#f(f,this.#n,h);return x.forEach((T)=>{this.#f(f,this.#n,T)}),this}}),this.on=(f,h,...x)=>{for(let T of[h].flat()){this.#n=T;for(let W of[f].flat())x.map((y)=>{this.#f(W.toUpperCase(),this.#n,y)})}return this},this.use=(f,...h)=>{if(typeof f==="string")this.#n=f;else this.#n="*",h.unshift(f);return h.forEach((x)=>{this.#f(A1,this.#n,x)}),this};let{strict:c,...g}=U;Object.assign(this,g),this.getPath=c??!0?U.getPath??gf:tx}#U(){let U=new n({router:this.router,getPath:this.getPath});return U.errorHandler=this.errorHandler,U.#D=this.#D,U.routes=this.routes,U}#D=xO;errorHandler=hW;route(U,D){let c=this.basePath(U);return D.routes.map((g)=>{let f;if(D.errorHandler===hW)f=g.handler;else f=async(h,x)=>(await Uf([],D.errorHandler)(h,()=>g.handler(h,x))).res,f[fW]=g.handler;c.#f(g.method,g.path,f,g.basePath)}),this}basePath(U){let D=this.#U();return D._basePath=m2(this._basePath,U),D}onError=(U)=>{return this.errorHandler=U,this};notFound=(U)=>{return this.#D=U,this};mount(U,D,c){let g,f;if(c)if(typeof c==="function")f=c;else if(f=c.optionHandler,c.replaceRequest===!1)g=(T)=>T;else g=c.replaceRequest;let h=f?(T)=>{let W=f(T);return Array.isArray(W)?W:[W]}:(T)=>{let W=void 0;try{W=T.executionCtx}catch{}return[T.env,W]};g||=(()=>{let T=m2(this._basePath,U),W=T==="/"?0:T.length;return(y)=>{let F=new URL(y.url);return F.pathname=this.getPath(y).slice(W)||"/",new Request(F,y)}})();let x=async(T,W)=>{let y=await D(g(T.req.raw),...h(T));if(y)return y;await W()};return this.#f(A1,m2(U,"*"),x),this}#f(U,D,c,g){U=U.toUpperCase(),D=m2(this._basePath,D);let f={basePath:g!==void 0?m2(this._basePath,g):this._basePath,path:D,method:U,handler:c};this.router.add(U,D,[c,f]),this.routes.push(f)}#c(U,D){if(U instanceof Error)return this.errorHandler(U,D);throw U}#g(U,D,c,g){if(g==="HEAD")return(async()=>new Response(null,await this.#g(U,D,c,"GET")))();let f=this.getPath(U,{env:c}),h=this.router.match(g,f),x=new xf(U,{path:f,matchResult:h,env:c,executionCtx:D,notFoundHandler:this.#D});if(h[0].length===1){let W;try{W=h[0][0][0][0](x,async()=>{x.res=await this.#D(x)})}catch(y){return this.#c(y,x)}return W instanceof Promise?W.then((y)=>y||(x.finalized?x.res:this.#D(x))).catch((y)=>this.#c(y,x)):W??this.#D(x)}let T=Uf(h[0],this.errorHandler,this.#D);return(async()=>{try{let W=await T(x);if(!W.finalized)throw Error("Context is not finalized. Did you forget to return a Response object or `await next()`?");return W.res}catch(W){return this.#c(W,x)}})()}fetch=(U,...D)=>{return this.#g(U,D[1],D[0],U.method)};request=(U,D,c,g)=>{if(U instanceof Request)return this.fetch(D?new Request(U,D):U,c,g);return U=U.toString(),this.fetch(new Request(/^https?:\/\//.test(U)?U:`http://localhost${m2("/",U)}`,D),c,g)};fire=()=>{addEventListener("fetch",(U)=>{U.respondWith(this.#g(U.request,U,void 0,U.request.method))})}};var Lc=[];function S8(n,U){let D=this.buildAllMatchers(),c=(g,f)=>{let h=D[g]||D[A1],x=h[2][f];if(x)return x;let T=f.match(h[0]);if(!T)return[[],Lc];let W=T.indexOf("",1);return[h[1][W],T]};return this.match=c,c(n,U)}var v8="[^/]+",iD=".*",bU="(?:|/.*)",a2=Symbol(),WW=new Set(".\\+*[^]$()");function WO(n,U){if(n.length===1)return U.length===1?n<U?-1:1:-1;if(U.length===1)return 1;if(n===iD||n===bU)return U===bU?-1:1;else if(U===iD||U===bU)return-1;if(n===v8)return 1;else if(U===v8)return-1;return n.length===U.length?n<U?-1:1:U.length-n.length}var TW=class n{#n;#U;#D=Object.create(null);insert(U,D,c,g,f){let h=this;for(let x=0,T=U.length;x<T;x++){let W=U[x],y=W.length===1?W==="*"?x===T-1?["","",iD]:["","",v8]:null:W==="/*"?["","",bU]:W.match(/^\:([^\{\}]+)(?:\{(.+)\})?$/),F;if(y){let i=y[1],X=y[2]||v8;if(i&&y[2]){if(X===".*")throw a2;if(X=X.replace(/^\((?!\?:)(?=[^)]+\)$)/,"(?:"),/\((?!\?:)/.test(X))throw a2;if(X.length===1&&WW.has(X))throw a2}if(F=h.#D[X],!F){if(X!==iD&&X!==bU){for(let $ in h.#D)if((X.length>1||$.length>1)&&$!==iD&&$!==bU)throw a2}F=h.#D[X]=new n}if(i!=="")F.#U??=g.varIndex++,c.push([i,F.#U])}else if(F=h.#D[W],!F){for(let i in h.#D)if(i.length>1&&i!==iD&&i!==bU)throw a2;F=h.#D[W]=new n}h=F}if(h.#n!==void 0)throw a2;h.#n=f?-1:D}buildRegExpStr(){let D=Object.keys(this.#D).sort(WO).map((c)=>{let g=this.#D[c],f=g.buildRegExpStr();return f===""?"":(typeof g.#U==="number"?`(${c})@${g.#U}`:WW.has(c)?`\\${c}`:c)+f}).filter(Boolean);if(typeof this.#n==="number"&&this.#n!==-1)D.unshift(`#${this.#n}`);if(D.length===0)return"";if(D.length===1)return D[0];return"(?:"+D.join("|")+")"}};var Wf=class{#n={varIndex:0};#U=new TW;#D=0;paths=Object.create(null);insert(n,U){if(U){this.#U.insert(n.split(""),0,[],this.#n,!0);return}let D=[],c=[],g=n;for(let h=0;;){let x=!1;if(g=g.replace(/\{[^}]+\}/g,(T)=>{let W=`@\\${h}`;return c[h]=[W,T],h++,x=!0,W}),!x)break}let f=g.match(/(?::[^\/]+)|(?:\/\*$)|./g)||[];for(let h=c.length-1;h>=0;h--){let[x]=c[h];for(let T=f.length-1;T>=0;T--)if(f[T].indexOf(x)!==-1){f[T]=f[T].replace(x,c[h][1]);break}}this.#U.insert(f,this.#D,D,this.#n,!1),this.paths[n]=[this.#D++,D]}buildRegExp(){let n=this.#U.buildRegExpStr();if(n==="")return[/^$/,[],[]];let U=0,D=[],c=[];return n=n.replace(/#(\d+)|@(\d+)|\.\*\$/g,(g,f,h)=>{if(f!==void 0)return D[++U]=Number(f),"$()";if(h!==void 0)return c[Number(h)]=++U,"";return""}),[new RegExp(`^${n}`),D,c]}};var yW=Object.create(null);function FW(n){return yW[n]??=new RegExp(n==="*"?"":`^${n.replace(/\/\*$|([.\\+*[^\]$()])/g,(U,D)=>D?`\\${D}`:"(?:|/.*)")}$`)}function TO(){yW=Object.create(null)}function N8(n,U){if(!n)return;for(let D of Object.keys(n).sort((c,g)=>g.length-c.length))if(FW(D).test(U))return[...n[D]];return}var P8=class{name="RegExpRouter";#n;#U;#D;constructor(){this.#n={[A1]:Object.create(null)},this.#U={[A1]:Object.create(null)},this.#D={[A1]:new Wf}}#f(n,U){try{this.#D[n].insert(U,!/\*|\/:/.test(U))}catch(D){throw D===a2?new _8(U):D}}add(n,U,D){let c=this.#n,g=this.#U;if(!c||!g)throw Error(I8);if(!c[n])this.#D[n]=new Wf,[c,g].forEach((x)=>{x[n]=Object.create(null),Object.keys(x[A1]).forEach((T)=>{x[n][T]=[...x[A1][T]],this.#f(n,T)})});if(U==="/*")U="*";let f=(U.match(/\/:/g)||[]).length;if(/\*$/.test(U)){let x=FW(U);Object.keys(c).forEach((T)=>{if((n===A1||n===T)&&!c[T][U])this.#f(T,U),c[T][U]=N8(c[T],U)||N8(c[A1],U)||[]}),Object.keys(c).forEach((T)=>{if(n===A1||n===T)Object.keys(c[T]).forEach((W)=>{x.test(W)&&c[T][W].push([D,f])})}),Object.keys(g).forEach((T)=>{if(n===A1||n===T)Object.keys(g[T]).forEach((W)=>x.test(W)&&g[T][W].push([D,f]))});return}let h=w8(U)||[U];for(let x=0,T=h.length;x<T;x++){let W=h[x];Object.keys(g).forEach((y)=>{if(n===A1||n===y){if(!g[y][W])this.#f(y,W),g[y][W]=[...N8(c[y],W)||N8(c[A1],W)||[]];g[y][W].push([D,f-T+x+1])}})}}match=S8;buildAllMatchers(){let n=Object.create(null);return Object.keys(this.#U).concat(Object.keys(this.#n)).forEach((U)=>{n[U]||=this.#c(U)}),this.#n=this.#U=this.#D=void 0,TO(),n}#c(n){let U=this.#n[n],D=this.#U[n],c=this.#D[n],g=Object.create(null),f=[];[U,D].forEach((y)=>{for(let F in y){let i=y[F],X=c.paths[F];if(!X){g[F]=[i.map(([Q])=>[Q,Object.create(null)]),Lc];continue}let $=X[1];f[X[0]]=i.map(([Q,Y])=>{let V=Object.create(null);Y-=1;for(;Y>=0;Y--){let[G,J]=$[Y];V[G]=J}return[Q,V]})}});let[h,x,T]=c.buildRegExp();for(let y=0,F=f.length;y<F;y++)for(let i=0,X=f[y].length;i<X;i++){let $=f[y][i]?.[1];if(!$)continue;let Q=Object.keys($);for(let Y=0,V=Q.length;Y<V;Y++)$[Q[Y]]=T[$[Q[Y]]]}let W=[];for(let y in x)W[y]=f[x[y]];return[h,W,g]}};var yO=class{name="PreparedRegExpRouter";#n;#U;constructor(n,U){this.#n=n,this.#U=U}#D(n,U){let D=this.#n[n];D[1].forEach((c)=>c&&c.push(U)),Object.values(D[2]).forEach((c)=>c[0].push(U))}#f(n,U,D,c,g){let f=this.#n[n];if(!g)f[2][U][0].push([D,{}]);else c.forEach((h)=>{if(typeof h==="number")f[1][h].push([D,g]);else f[2][h||U][0].push([D,g])})}add(n,U,D){if(!this.#n[n]){let g=this.#n[A1],f={};for(let h in g[2])f[h]=[g[2][h][0].slice(),Lc];this.#n[n]=[g[0],g[1].map((h)=>Array.isArray(h)?h.slice():0),f]}if(U==="/*"||U==="*"){let g=[D,{}];if(n===A1)for(let f in this.#n)this.#D(f,g);else this.#D(n,g);return}let c=this.#U[U];if(!c)throw Error(`Path ${U} is not registered`);for(let[g,f]of c)if(n===A1)for(let h in this.#n)this.#f(h,U,D,g,f);else this.#f(n,U,D,g,f)}buildAllMatchers(){return this.#n}match=S8};var Tf=class{name="SmartRouter";#n=[];#U=[];constructor(n){this.#n=n.routers}add(n,U,D){if(!this.#U)throw Error(I8);this.#U.push([n,U,D])}match(n,U){if(!this.#U)throw Error("Fatal error");let D=this.#n,c=this.#U,g=D.length,f=0,h;for(;f<g;f++){let x=D[f];try{for(let T=0,W=c.length;T<W;T++)x.add(...c[T]);h=x.match(n,U)}catch(T){if(T instanceof _8)continue;throw T}this.match=x.match.bind(x),this.#n=[x],this.#U=void 0;break}if(f===g)throw Error("Fatal error");return this.name=`SmartRouter + ${this.activeRouter.name}`,h}get activeRouter(){if(this.#U||this.#n.length!==1)throw Error("No active router has been determined yet.");return this.#n[0]}};var Cc=Object.create(null),FO=(n)=>{for(let U in n)return!0;return!1},iW=class n{#n;#U;#D;#f=0;#c=Cc;constructor(U,D,c){if(this.#U=c||Object.create(null),this.#n=[],U&&D){let g=Object.create(null);g[U]={handler:D,possibleKeys:[],score:0},this.#n=[g]}this.#D=[]}insert(U,D,c){this.#f=++this.#f;let g=this,f=ox(D),h=[];for(let x=0,T=f.length;x<T;x++){let W=f[x],y=f[x+1],F=rx(W,y),i=Array.isArray(F)?F[0]:W;if(i in g.#U){if(g=g.#U[i],F)h.push(F[1]);continue}if(g.#U[i]=new n,F)g.#D.push(F),h.push(F[1]);g=g.#U[i]}return g.#n.push({[U]:{handler:c,possibleKeys:h.filter((x,T,W)=>W.indexOf(x)===T),score:this.#f}}),g}#g(U,D,c,g,f){for(let h=0,x=D.#n.length;h<x;h++){let T=D.#n[h],W=T[c]||T[A1],y={};if(W!==void 0){if(W.params=Object.create(null),U.push(W),g!==Cc||f&&f!==Cc)for(let F=0,i=W.possibleKeys.length;F<i;F++){let X=W.possibleKeys[F],$=y[W.score];W.params[X]=f?.[X]&&!$?f[X]:g[X]??f?.[X],y[W.score]=!0}}}}search(U,D){let c=[];this.#c=Cc;let f=[this],h=cf(D),x=[],T=h.length,W=null;for(let y=0;y<T;y++){let F=h[y],i=y===T-1,X=[];for(let Q=0,Y=f.length;Q<Y;Q++){let V=f[Q],G=V.#U[F];if(G)if(G.#c=V.#c,i){if(G.#U["*"])this.#g(c,G.#U["*"],U,V.#c);this.#g(c,G,U,V.#c)}else X.push(G);for(let J=0,B=V.#D.length;J<B;J++){let z=V.#D[J],q=V.#c===Cc?{}:{...V.#c};if(z==="*"){let w=V.#U["*"];if(w)this.#g(c,w,U,V.#c),w.#c=q,X.push(w);continue}let[b,M,O]=z;if(!F&&!(O instanceof RegExp))continue;let _=V.#U[b];if(O instanceof RegExp){if(W===null){W=Array(T);let v=D[0]==="/"?1:0;for(let P=0;P<T;P++)W[P]=v,v+=h[P].length+1}let w=D.substring(W[y]),H=O.exec(w);if(H){if(q[M]=H[0],this.#g(c,_,U,V.#c,q),H[0].length===w.length&&_.#U["*"])this.#g(c,_.#U["*"],U,V.#c,q);if(FO(_.#U)){_.#c=q;let v=H[0].match(/\//g)?.length??0;(x[v]||=[]).push(_)}continue}}if(O===!0||O.test(F))if(q[M]=F,i){if(this.#g(c,_,U,q,V.#c),_.#U["*"])this.#g(c,_.#U["*"],U,q,V.#c)}else _.#c=q,X.push(_)}}let $=x.shift();f=$?X.concat($):X}if(c.length>1)c.sort((y,F)=>{return y.score-F.score});return[c.map(({handler:y,params:F})=>[y,F])]}};var yf=class{name="TrieRouter";#n;constructor(){this.#n=new iW}add(n,U,D){let c=w8(U);if(c){for(let g=0,f=c.length;g<f;g++)this.#n.insert(n,c[g],D);return}this.#n.insert(n,U,D)}match(n,U){return this.#n.search(n,U)}};var Ff=class extends xW{constructor(n={}){super(n);this.router=n.router??new Tf({routers:[new P8,new yf]})}};import{getAgentDir as cs}from"@earendil-works/pi-coding-agent";import{isIP as XW}from"node:net";function JW(n){return(n.startsWith("[")&&n.endsWith("]")?n.slice(1,-1):n).toLowerCase().replace(/\.$/,"")}function $W(n){if(!n||/[\s/@\\]/.test(n))return null;try{let U=new URL(`http://${n}`);if(U.username||U.password||U.pathname!=="/"||U.search||U.hash)return null;return JW(U.hostname)}catch{return null}}function iO(n){let U=n?.trim();if(!U)return null;return XW(U)?JW(U):$W(U)}function XO(n){return n==="localhost"||n.endsWith(".localhost")}function VW(){return[process.env.PI_WEB_HOSTNAME,...process.env.PI_WEB_ALLOWED_HOSTS?.split(",")??[]].filter((n)=>Boolean(n?.trim()))}function QW(n){try{return new URL(n).origin}catch{return null}}function JO(n){let U=new URL(n.url),D=n.headers.get("host");return D?QW(`${U.protocol}//${D}`):null}function $O(n){if(n.method!=="GET"||n.headers.get("sec-fetch-mode")!=="navigate"||n.headers.get("sec-fetch-dest")!=="document"||n.headers.get("sec-fetch-user")!=="?1")return!1;try{return/^\/api\/sessions\/[^/]+\/export$/.test(new URL(n.url).pathname)}catch{return!1}}function Xf(n,U=VW()){let D=n.headers.get("host"),c=D?$W(D):null;if(!c)return!1;if(XO(c)||XW(c))return!0;return U.some((g)=>iO(g)===c)}function VO(n){let U=n.headers.get("origin");if(n.headers.get("sec-fetch-site")==="cross-site")return!1;if(!U)return!0;let c=JO(n);return c!==null&&QW(U)===c}function QO(n){return n.headers.has("origin")||n.headers.has("sec-fetch-site")}function U2(n,U=VW()){if(!Xf(n,U))return!1;if($O(n))return!0;return!QO(n)||VO(n)}function XD(n){let U=n.headers.get("content-type")?.split(";",1)[0]?.trim().toLowerCase();return U==="application/json"||Boolean(U?.startsWith("application/")&&U.endsWith("+json"))}import{createHash as YO,timingSafeEqual as BO}from"node:crypto";var GO="pi";function YW(n){return YO("sha256").update(n,"utf8").digest()}function BW(n,U){return BO(YW(n),YW(U))}function Jf(n=process.env.PI_WEB_PASSWORD){return typeof n==="string"&&n.length>0}function GW(n,U=process.env.PI_WEB_PASSWORD){if(!Jf(U)||!n)return!1;let D=/^Basic\s+(\S+)$/i.exec(n);if(!D)return!1;let c;try{let W=Buffer.from(D[1],"base64");if(W.toString("base64")!==D[1])return!1;c=new TextDecoder("utf-8",{fatal:!0}).decode(W)}catch{return!1}let g=c.indexOf(":");if(g===-1)return!1;let f=c.slice(0,g),h=c.slice(g+1),x=BW(f,GO),T=BW(h,U);return x&&T}class $f extends Request{nextUrl;constructor(n){let U=n.method!=="GET"&&n.method!=="HEAD";super(n.url,{method:n.method,headers:n.headers,body:U?n.body:void 0,duplex:U?"half":void 0,signal:n.signal});this.nextUrl=new URL(n.url)}}class K extends Response{static json(n,U){let D=new Headers(U?.headers);return D.set("content-type","application/json; charset=utf-8"),new K(JSON.stringify(n),{status:U?.status??200,statusText:U?.statusText,headers:D})}}var Vf=!1,KW=performance.now();function bW(n){if(Vf=n,KW=performance.now(),Vf)ZW("boot","debug log enabled")}function ZU(n){return(U,D)=>ZW(n,U,D)}function ZW(n,U,D){if(!Vf)return;let c=performance.now()-KW,g=new Date,f=(x,T=2)=>String(x).padStart(T,"0"),h=`${f(g.getHours())}:${f(g.getMinutes())}:${f(g.getSeconds())}.${f(g.getMilliseconds(),3)}`;console.debug(`[debug][${n}][${h}][+${c.toFixed(1)}ms] ${U}${D?` — ${D}`:""}`)}var KO=ZU("mount"),bO=["GET","POST","PUT","PATCH","DELETE"];function n1(n,U,D){let c=U.split("/").filter(Boolean),g=[],f=new Map;for(let x of c){let T=x.match(/^\[\.\.\.(.+)\]$/),W=x.match(/^\[(.+)\]$/);if(T)g.push(`:${T[1]}{.+}`),f.set(T[1],{hono:T[1],catchAll:!0});else if(W)g.push(`:${W[1]}`),f.set(W[1],{hono:W[1],catchAll:!1});else g.push(x)}let h=`/${g.join("/")}`;for(let x of bO){let T=D[x];if(typeof T!=="function")continue;let W=T;n.on(x,h,async(y)=>{let F=performance.now(),i={};for(let[$,{hono:Q,catchAll:Y}]of f)if(Y){let V=y.req.param(Q)??"";i[$]=V===""?[]:V.split("/")}else i[$]=y.req.param(Q)??"";let X=await W(new $f(y.req.raw),{params:Promise.resolve(i)});return KO(`${x} ${y.req.path}`,`${X.status} ${Math.round(performance.now()-F)}ms`),X})}}var Lf={};U1(Lf,{GET:()=>yq});import{tmpdir as Wq}from"node:os";import{Readable as Tq}from"node:stream";import{constants as Qf}from"node:fs";import{lstat as ZO,open as zO}from"node:fs/promises";import{basename as OO,dirname as qO,resolve as zW}from"node:path";var R8=5242880;function OW(n,U){let D=zW(n);if(qO(D)!==zW(U))return null;if(!/^pi-bash-[A-Za-z0-9_-]+\.log$/.test(OO(D)))return null;return D}async function Yf(n){if(!(await ZO(n)).isFile())throw Error("Bash output path is not a regular file");let D=typeof Qf.O_NOFOLLOW==="number"?Qf.O_NOFOLLOW:0,c=await zO(n,Qf.O_RDONLY|D);try{let g=await c.stat();if(!g.isFile())throw Error("Bash output path is not a regular file");return{handle:c,fileInfo:g}}catch(g){throw await c.close(),g}}async function qW(n,U=R8){let{handle:D,fileInfo:c}=await Yf(n);try{if(c.size>U)return{tooLarge:!0,size:c.size};let g=Buffer.alloc(c.size),f=0;while(f<g.length){let h=await D.read(g,f,g.length-f,f);if(h.bytesRead===0)break;f+=h.bytesRead}return{tooLarge:!1,content:g.subarray(0,f).toString("utf8"),size:f}}finally{await D.close()}}import{open as IW,readFile as PO,readdir as RO}from"node:fs/promises";import{existsSync as uO,readdirSync as dO}from"node:fs";import{join as k8,normalize as zf}from"node:path";import{getAgentDir as kO,buildContextEntries as pO,buildSessionContext as mO,SessionManager as _W}from"@earendil-works/pi-coding-agent";function MO(n){return typeof n==="object"&&n!==null&&!Array.isArray(n)}function AO(n){if(!MO(n)||n.type!=="toolCall")return null;return{type:"toolCall",toolCallId:typeof n.toolCallId==="string"?n.toolCallId:typeof n.id==="string"?n.id:"",toolName:typeof n.toolName==="string"?n.toolName:typeof n.name==="string"?n.name:"",input:typeof n.input==="object"&&n.input!==null&&!Array.isArray(n.input)?n.input:typeof n.arguments==="object"&&n.arguments!==null&&!Array.isArray(n.arguments)?n.arguments:{}}}function Bf(n){if(n.role!=="assistant")return n;let U=n.content;if(!Array.isArray(U))return n;let D=U.map((c)=>{return AO(c)??c});return{...n,content:D}}import MW from"node:path";function Cn(n,U=process.platform){let D=U==="win32"?MW.win32.normalize(n):MW.posix.normalize(n);return U==="win32"?D.toLowerCase():D}import{execFile as HO}from"node:child_process";import{existsSync as u8,mkdirSync as LO,realpathSync as CO}from"node:fs";import{basename as EO,dirname as Kf,join as HW,resolve as wO}from"node:path";import{promisify as jO}from"node:util";function R1(n){let U=n.replace(/\\/g,"/");return/^[a-zA-Z]:$/.test(U)?`${U}/`:U}function Gf(){if(!globalThis.__piAdditionalAllowedRoots)globalThis.__piAdditionalAllowedRoots=new Set;return globalThis.__piAdditionalAllowedRoots}function On(n){if(!n)return;let U=R1(n);Gf().add(U),globalThis.__piAllowedRootsCache?.roots.add(U)}var IO=jO(HO),AW=60000;function _O(){if(!globalThis.__piProjectCache)globalThis.__piProjectCache=new Map;return globalThis.__piProjectCache}function LW(){globalThis.__piProjectCache?.clear()}async function zU(n,U){let{stdout:D}=await IO("git",["-C",n,...U],{timeout:1e4,maxBuffer:1048576,env:{...process.env,LC_ALL:"C"}});return D.trim()}function SO(n){let U=Kf(n);if(!U.endsWith("-worktrees"))return null;let D=U.slice(0,-10);if(!D||!u8(HW(D,".git")))return null;return{projectRoot:D,branch:EO(n),isWorktree:!0,isTopLevel:!0}}async function d8(n){let U=_O(),D=U.get(n);if(D&&D.expiresAt>Date.now())return D.info;let c;try{if(!u8(n))return c=SO(n)??{projectRoot:n,branch:null,isWorktree:!1,isTopLevel:!1},U.set(n,{info:c,expiresAt:Date.now()+AW}),c;let g=await zU(n,["rev-parse","--path-format=absolute","--git-common-dir","--git-dir","--show-toplevel","--abbrev-ref","HEAD"]),[f,h,x,T]=g.split(`
|
|
252
|
+
`)}),this}_outputHelpIfRequested(n){let U=this._getHelpOption();if(U&&n.find((c)=>U.is(c)))this.outputHelp(),this._exit(0,"commander.helpDisplayed","(outputHelp)")}}function Px(n){return n.map((U)=>{if(!U.startsWith("--inspect"))return U;let D,c="127.0.0.1",g="9229",f;if((f=U.match(/^(--inspect(-brk)?)$/))!==null)D=f[1];else if((f=U.match(/^(--inspect(-brk|-port)?)=([^:]+)$/))!==null)if(D=f[1],/^\d+$/.test(f[3]))g=f[3];else c=f[3];else if((f=U.match(/^(--inspect(-brk|-port)?)=([^:]+):(\d+)$/))!==null)D=f[1],c=f[3],g=f[4];if(D&&g!=="0")return`${D}=${c}:${parseInt(g)+1}`;return U})}function Rx(){if(T1.env.NO_COLOR||T1.env.FORCE_COLOR==="0"||T1.env.FORCE_COLOR==="false")return!1;if(T1.env.FORCE_COLOR||T1.env.CLICOLOR_FORCE!==void 0)return!0;return}var ss=new FD;var ux={name:"@rainmanhhh/pi-web",version:"0.10.6",description:"Web UI for the pi coding agent (fork of @agegr/pi-web)",homepage:"https://gitee.com/dsxbygzzl/pi-web#readme",repository:{type:"git",url:"git+https://gitee.com/dsxbygzzl/pi-web.git"},bugs:{url:"https://gitee.com/dsxbygzzl/pi-web/issues"},author:"rainmanhhh",license:"MIT",publishConfig:{access:"public",registry:"https://registry.npmjs.org"},engines:{node:">=22.19.0"},files:["dist","public","extensions","package.json"],bin:{"pi-web":"dist/server.mjs"},scripts:{dev:"vite","dev:lan":"vite --host 0.0.0.0",mb:"bun run --env-file=.env.manual api",mf:"bun run --env-file=.env.manual dev -- --port 3001",api:"bun run server/main.ts","api:node":"bun run build:server && node dist/server.mjs","build:server":'bun build server/main.ts --target node --outfile dist/server.mjs --minify --external "@earendil-works/*" --define "process.env.PI_WEB_PACKAGED=1"',"e2e:stop":"bun run scripts/e2e-stop.mjs",build:"vite build && bun run scripts/prune-fonts.mjs","build:analyze":"vite build --config scripts/analyze-bundle.config.ts && bun run scripts/prune-fonts.mjs",lint:"oxlint --fix",jscpd:"jscpd --config .jscpd.json",check:"tsc --noEmit",format:"biome check --write .",prepublishOnly:"bun run check && bun run build && bun run build:server","test:e2e":"playwright test","test:unit":"vitest run",prepare:"husky || true"},dependencies:{"@earendil-works/pi-agent-core":"0.84.1","@earendil-works/pi-ai":"0.84.1","@earendil-works/pi-coding-agent":"0.84.1","@earendil-works/pi-tui":"0.84.1","@hono/node-server":"^2.1.0","class-variance-authority":"^0.7.1",clsx:"^2.1.1",hono:"^4.13.1","lucide-react":"^1.31.0",pointrix:"^1.1.0","proper-lockfile":"4.1.2","radix-ui":"^1.6.7",react:"^19.2.4","react-dom":"^19.2.4",shadcn:"^4.17.0",streamdown:"2.5.0","tailwind-merge":"^3.6.0","tw-animate-css":"^1.4.0",undici:"8.9.0"},devDependencies:{"@lobehub/icons":"^5.6.0","@playwright/test":"^1.62.1","@tailwindcss/postcss":"^4.2.2","@testing-library/dom":"^10.4.1","@testing-library/react":"^16.3.2","@types/node":"^25","@types/proper-lockfile":"4.1.4","@types/react":"^19","@types/react-dom":"^19","@types/react-resizable":"^4.0.0","@types/react-syntax-highlighter":"^15.5.13","@vitejs/plugin-react":"^6.0.5",biome:"^0.3.3",commander:"^15.0.0",husky:"^9.1.7",jiti:"^2.7.0",jscpd:"^5.0.14",jsdom:"^30.0.1",katex:"^0.16.47","lint-staged":"^17.3.0",mammoth:"^1.12.0",mermaid:"^11.14.0",oxlint:"^1.78.0",postcss:"^8","react-markdown":"^10.1.0","react-syntax-highlighter":"^16.1.1","rehype-katex":"^7.0.1","rehype-raw":"^7.0.0","rehype-sanitize":"^6.0.0","remark-gfm":"^4.0.1","remark-math":"^6.0.0",tailwindcss:"^4.2.2",typescript:"^7.0.2",vite:"^8.2.1","vite-plugin-svgr":"^5.2.0",vitest:"^4.1.10"},type:"module"};import{getAgentDir as pZ}from"@earendil-works/pi-coding-agent";var dx={port:31415};var Uf=(n,U,D)=>{return(c,g)=>{let f=-1;return h(0);async function h(x){if(x<=f)throw Error("next() called multiple times");f=x;let T,W=!1,y;if(n[x])y=n[x][0][0],c.req.routeIndex=x;else y=x===n.length&&g||void 0;if(y)try{T=await y(c,()=>h(x+1))}catch(F){if(F instanceof Error&&U)c.error=F,T=await U(F,c),W=!0;else throw F}else if(c.finalized===!1&&D)T=await D(c);if(T&&(c.finalized===!1||W))c.res=T;return c}}};var kx=Symbol();var px=(n,U)=>{return new Response(n,{headers:{"Content-Type":U.replace(/^[^;]+/,(c)=>c.toLowerCase())}}).formData()};var C8=(n)=>("headers"in n),ax=async(n,U=Object.create(null))=>{let{all:D=!1,dot:c=!1}=U,h=(C8(n)?n.headers:n.raw.headers).get("Content-Type")?.split(";")[0].trim().toLowerCase();if(h==="multipart/form-data"||h==="application/x-www-form-urlencoded")return ez(n,{all:D,dot:c});return{}};async function ez(n,U){if(!C8(n)&&n.bodyCache.formData)return mx(await n.bodyCache.formData,U);let D=C8(n)?n.headers:n.raw.headers,c=await n.arrayBuffer(),g=px(c,D.get("Content-Type")||"");if(!C8(n))n.bodyCache.formData=g;let f=await g;if(f)return mx(f,U);return{}}function mx(n,U){let D=Object.create(null);if(n.forEach((c,g)=>{if(!(U.all||g.endsWith("[]")))D[g]=c;else sz(D,g,c)}),U.dot)Object.entries(D).forEach(([c,g])=>{if(c.includes("."))nO(D,c,g),delete D[c]});return D}var sz=(n,U,D)=>{if(n[U]!==void 0)if(Array.isArray(n[U]))n[U].push(D);else n[U]=[n[U],D];else if(!U.endsWith("[]"))n[U]=D;else n[U]=[D]},nO=(n,U,D)=>{if(/(?:^|\.)__proto__\./.test(U))return;let c=n,g=U.split(".");g.forEach((f,h)=>{if(h===g.length-1)c[f]=D;else{if(!c[f]||typeof c[f]!=="object"||Array.isArray(c[f])||c[f]instanceof File)c[f]=Object.create(null);c=c[f]}})};var cf=(n)=>{let U=n.split("/");if(U[0]==="")U.shift();return U},ox=(n)=>{let{groups:U,path:D}=UO(n),c=cf(D);return DO(c,U)},UO=(n)=>{let U=[];return n=n.replace(/\{[^}]+\}/g,(D,c)=>{let g=`@${c}`;return U.push([g,D]),g}),{groups:U,path:n}},DO=(n,U)=>{for(let D=U.length-1;D>=0;D--){let[c]=U[D];for(let g=n.length-1;g>=0;g--)if(n[g].includes(c)){n[g]=n[g].replace(c,U[D][1]);break}}return n},E8={},rx=(n,U)=>{if(n==="*")return"*";let D=n.match(/^\:([^\{\}]+)(?:\{(.+)\})?$/);if(D){let c=`${n}#${U}`;if(!E8[c])if(D[2])E8[c]=U&&U[0]!==":"&&U[0]!=="*"?[c,D[1],new RegExp(`^${D[2]}(?=/${U})`)]:[n,D[1],new RegExp(`^${D[2]}$`)];else E8[c]=[n,D[1],!0];return E8[c]}return null},lx=(n,U)=>{try{return U(n)}catch{return n.replace(/(?:%[0-9A-Fa-f]{2})+/g,(D)=>{try{return U(D)}catch{return D}})}},cO=(n)=>lx(n,decodeURI),gf=(n)=>{let U=n.url,D=U.indexOf("/",U.indexOf(":")+4),c=D;for(;c<U.length;c++){let g=U.charCodeAt(c);if(g===37){let f=U.indexOf("?",c),h=U.indexOf("#",c),x=f===-1?h===-1?void 0:h:h===-1?f:Math.min(f,h),T=U.slice(D,x);return cO(T.includes("%25")?T.replace(/%25/g,"%2525"):T)}else if(g===63||g===35)break}return U.slice(D,c)};var tx=(n)=>{let U=gf(n);return U.length>1&&U.at(-1)==="/"?U.slice(0,-1):U},m2=(n,U,...D)=>{if(D.length)U=m2(U,...D);return`${n?.[0]==="/"?"":"/"}${n}${U==="/"?"":`${n?.at(-1)==="/"?"":"/"}${U?.[0]==="/"?U.slice(1):U}`}`},w8=(n)=>{if(n.charCodeAt(n.length-1)!==63||!n.includes(":"))return null;let U=n.split("/"),D=[],c="";return U.forEach((g)=>{if(g!==""&&!/\:/.test(g))c+="/"+g;else if(/\:/.test(g))if(/\?/.test(g)){if(D.length===0&&c==="")D.push("/");else D.push(c);let f=g.replace("?","");c+="/"+f,D.push(c)}else c+="/"+g}),D.filter((g,f,h)=>h.indexOf(g)===f)},j8=(n)=>n.indexOf("%")!==-1?lx(n,gO):n,Df=(n)=>{if(n.indexOf("+")!==-1)n=n.replace(/\+/g," ");return j8(n)},ex=(n,U,D)=>{let c;if(!D&&U&&U.indexOf("%")===-1&&U.indexOf("+")===-1){let h=n.indexOf("?",8);if(h===-1)return;if(!n.startsWith(U,h+1))h=n.indexOf(`&${U}`,h+1);while(h!==-1){let x=n.charCodeAt(h+U.length+1);if(x===61){let T=h+U.length+2,W=n.indexOf("&",T);return Df(n.slice(T,W===-1?void 0:W))}else if(x==38||isNaN(x))return"";h=n.indexOf(`&${U}`,h+1)}if(c=/[%+]/.test(n),!c)return}let g=Object.create(null);c??=/[%+]/.test(n);let f=n.indexOf("?",8);while(f!==-1){let h=n.indexOf("&",f+1),x=n.indexOf("=",f);if(x>h&&h!==-1)x=-1;let T=n.slice(f+1,x===-1?h===-1?void 0:h:x);if(c)T=Df(T);if(f=h,T==="")continue;let W;if(x===-1)W="";else if(W=n.slice(x+1,h===-1?void 0:h),c)W=Df(W);if(D){if(!(g[T]&&Array.isArray(g[T])))g[T]=[];g[T].push(W)}else g[T]??=W}return U?g[U]:g},sx=ex,nW=(n,U)=>{return ex(n,U,!0)},gO=decodeURIComponent;var UW=class{raw;#n;#U;routeIndex=0;path;bodyCache={};constructor(n,U="/",D=[[]]){this.raw=n,this.path=U,this.#U=D}param(n){return n?this.#D(n):this.#f()}#D(n){let U=this.#U[0][this.routeIndex][1][n],D=this.#c(U);return D&&j8(D)}#f(){let n={},U=Object.keys(this.#U[0][this.routeIndex][1]);for(let D of U){let c=this.#c(this.#U[0][this.routeIndex][1][D]);if(c!==void 0)n[D]=j8(c)}return n}#c(n){return this.#U[1]?this.#U[1][n]:n}query(n){return sx(this.url,n)}queries(n){return nW(this.url,n)}header(n){if(n)return this.raw.headers.get(n)??void 0;let U=Object.create(null);return this.raw.headers.forEach((D,c)=>{U[c]=D}),U}async parseBody(n){return ax(this,n)}#g=(n)=>{let{bodyCache:U,raw:D}=this,c=U[n];if(c)return c;for(let g in U)return U[g].then((f)=>{if(g==="json")f=JSON.stringify(f);return new Response(f)[n]()});return U[n]=D[n]()};json(){return this.#g("text").then((n)=>JSON.parse(n))}text(){return this.#g("text")}arrayBuffer(){return this.#g("arrayBuffer")}bytes(){return this.#g("arrayBuffer").then((n)=>new Uint8Array(n))}blob(){return this.#g("blob")}formData(){return this.#g("formData")}addValidatedData(n,U){(this.#n??={})[n]=U}valid(n){return this.#n?.[n]}get url(){return this.raw.url}get method(){return this.raw.method}get[kx](){return this.#U}get matchedRoutes(){return this.#U[0].map(([[,n]])=>n)}get routePath(){return this.#U[0].map(([[,n]])=>n)[this.routeIndex].path}};var DW={Stringify:1,BeforeStream:2,Stream:3},fO=(n,U)=>{let D=new String(n);return D.isEscaped=!0,D.callbacks=U,D};var ff=async(n,U,D,c,g)=>{if(typeof n==="object"&&!(n instanceof String)){if(!(n instanceof Promise))n=n.toString();if(n instanceof Promise)n=await n}let f=n.callbacks;if(!f?.length)return Promise.resolve(n);if(g)g[0]+=n;else g=[n];let h=Promise.all(f.map((x)=>x({phase:U,buffer:g,context:c}))).then((x)=>Promise.all(x.filter(Boolean).map((T)=>ff(T,U,!1,c,g))).then(()=>g[0]));if(D)return fO(await h,f);else return h};var hO="text/plain; charset=UTF-8",hf=(n,U)=>{return{"Content-Type":n,...U}},Hc=(n,U)=>new Response(n,U),xf=class{#n;#U;env={};#D;finalized=!1;error;#f;#c;#g;#y;#W;#T;#x;#F;#i;constructor(n,U){if(this.#n=n,U)this.#c=U.executionCtx,this.env=U.env,this.#T=U.notFoundHandler,this.#i=U.path,this.#F=U.matchResult}get req(){return this.#U??=new UW(this.#n,this.#i,this.#F),this.#U}get event(){if(this.#c&&"respondWith"in this.#c)return this.#c;else throw Error("This context has no FetchEvent")}get executionCtx(){if(this.#c)return this.#c;else throw Error("This context has no ExecutionContext")}get res(){return this.#g||=Hc(null,{headers:this.#x??=new Headers})}set res(n){if(this.#g&&n){n=Hc(n.body,n);for(let[U,D]of this.#g.headers.entries()){if(U==="content-type")continue;if(U==="set-cookie"){let c=this.#g.headers.getSetCookie();n.headers.delete("set-cookie");for(let g of c)n.headers.append("set-cookie",g)}else n.headers.set(U,D)}}this.#g=n,this.finalized=!0}render=(...n)=>{return this.#W??=(U)=>this.html(U),this.#W(...n)};setLayout=(n)=>this.#y=n;getLayout=()=>this.#y;setRenderer=(n)=>{this.#W=n};header=(n,U,D)=>{if(this.finalized)this.#g=Hc(this.#g.body,this.#g);let c=this.#g?this.#g.headers:this.#x??=new Headers;if(U===void 0)c.delete(n);else if(D?.append)c.append(n,U);else c.set(n,U)};status=(n)=>{this.#f=n};set=(n,U)=>{this.#D??=new Map,this.#D.set(n,U)};get=(n)=>{return this.#D?this.#D.get(n):void 0};get var(){if(!this.#D)return{};return Object.fromEntries(this.#D)}#h(n,U,D){let c=this.#g?new Headers(this.#g.headers):this.#x;if(typeof U==="object"&&U.headers){c??=new Headers;for(let[f,h]of new Headers(U.headers))if(f==="set-cookie")c.append(f,h);else c.set(f,h)}if(D){if(!c){let f=0;for(let h in D)if(++f>1||typeof D[h]!=="string"){c=new Headers;break}}if(c)for(let f in D){let h=D[f];if(typeof h==="string")c.set(f,h);else{c.delete(f);for(let x of h)c.append(f,x)}}}let g=typeof U==="number"?U:U?.status??this.#f;return Hc(n,{status:g,headers:c??D})}newResponse=(...n)=>this.#h(...n);body=(n,U,D)=>this.#h(n,U,D);text=(n,U,D)=>{return!this.#x&&!this.#f&&!U&&!D&&!this.finalized?new Response(n):this.#h(n,U,hf(hO,D))};json=(n,U,D)=>{return this.#h(JSON.stringify(n),U,hf("application/json",D))};html=(n,U,D)=>{let c=(g)=>this.#h(g,U,hf("text/html; charset=UTF-8",D));return typeof n==="object"?ff(n,DW.Stringify,!1,{}).then(c):c(n)};redirect=(n,U)=>{let D=String(n);return this.header("Location",!/[^\x00-\xFF]/.test(D)?D:encodeURI(D)),this.newResponse(null,U??302)};notFound=()=>{return this.#T??=()=>Hc(),this.#T(this)}};var A1="ALL",cW="all",gW=["get","post","put","delete","options","patch","query"],I8="Can not add a route since the matcher is already built.",_8=class extends Error{};var fW="__COMPOSED_HANDLER";var xO=(n)=>{return n.text("404 Not Found",404)},hW=(n,U)=>{if("getResponse"in n){let D=n.getResponse();return U.newResponse(D.body,D)}return console.error(n),U.text("Internal Server Error",500)},xW=class n{get;post;put;delete;options;patch;query;all;on;use;router;getPath;_basePath="/";#n="/";routes=[];constructor(U={}){[...gW,cW].forEach((f)=>{this[f]=(h,...x)=>{if(typeof h==="string")this.#n=h;else this.#f(f,this.#n,h);return x.forEach((T)=>{this.#f(f,this.#n,T)}),this}}),this.on=(f,h,...x)=>{for(let T of[h].flat()){this.#n=T;for(let W of[f].flat())x.map((y)=>{this.#f(W.toUpperCase(),this.#n,y)})}return this},this.use=(f,...h)=>{if(typeof f==="string")this.#n=f;else this.#n="*",h.unshift(f);return h.forEach((x)=>{this.#f(A1,this.#n,x)}),this};let{strict:c,...g}=U;Object.assign(this,g),this.getPath=c??!0?U.getPath??gf:tx}#U(){let U=new n({router:this.router,getPath:this.getPath});return U.errorHandler=this.errorHandler,U.#D=this.#D,U.routes=this.routes,U}#D=xO;errorHandler=hW;route(U,D){let c=this.basePath(U);return D.routes.map((g)=>{let f;if(D.errorHandler===hW)f=g.handler;else f=async(h,x)=>(await Uf([],D.errorHandler)(h,()=>g.handler(h,x))).res,f[fW]=g.handler;c.#f(g.method,g.path,f,g.basePath)}),this}basePath(U){let D=this.#U();return D._basePath=m2(this._basePath,U),D}onError=(U)=>{return this.errorHandler=U,this};notFound=(U)=>{return this.#D=U,this};mount(U,D,c){let g,f;if(c)if(typeof c==="function")f=c;else if(f=c.optionHandler,c.replaceRequest===!1)g=(T)=>T;else g=c.replaceRequest;let h=f?(T)=>{let W=f(T);return Array.isArray(W)?W:[W]}:(T)=>{let W=void 0;try{W=T.executionCtx}catch{}return[T.env,W]};g||=(()=>{let T=m2(this._basePath,U),W=T==="/"?0:T.length;return(y)=>{let F=new URL(y.url);return F.pathname=this.getPath(y).slice(W)||"/",new Request(F,y)}})();let x=async(T,W)=>{let y=await D(g(T.req.raw),...h(T));if(y)return y;await W()};return this.#f(A1,m2(U,"*"),x),this}#f(U,D,c,g){U=U.toUpperCase(),D=m2(this._basePath,D);let f={basePath:g!==void 0?m2(this._basePath,g):this._basePath,path:D,method:U,handler:c};this.router.add(U,D,[c,f]),this.routes.push(f)}#c(U,D){if(U instanceof Error)return this.errorHandler(U,D);throw U}#g(U,D,c,g){if(g==="HEAD")return(async()=>new Response(null,await this.#g(U,D,c,"GET")))();let f=this.getPath(U,{env:c}),h=this.router.match(g,f),x=new xf(U,{path:f,matchResult:h,env:c,executionCtx:D,notFoundHandler:this.#D});if(h[0].length===1){let W;try{W=h[0][0][0][0](x,async()=>{x.res=await this.#D(x)})}catch(y){return this.#c(y,x)}return W instanceof Promise?W.then((y)=>y||(x.finalized?x.res:this.#D(x))).catch((y)=>this.#c(y,x)):W??this.#D(x)}let T=Uf(h[0],this.errorHandler,this.#D);return(async()=>{try{let W=await T(x);if(!W.finalized)throw Error("Context is not finalized. Did you forget to return a Response object or `await next()`?");return W.res}catch(W){return this.#c(W,x)}})()}fetch=(U,...D)=>{return this.#g(U,D[1],D[0],U.method)};request=(U,D,c,g)=>{if(U instanceof Request)return this.fetch(D?new Request(U,D):U,c,g);return U=U.toString(),this.fetch(new Request(/^https?:\/\//.test(U)?U:`http://localhost${m2("/",U)}`,D),c,g)};fire=()=>{addEventListener("fetch",(U)=>{U.respondWith(this.#g(U.request,U,void 0,U.request.method))})}};var Lc=[];function S8(n,U){let D=this.buildAllMatchers(),c=(g,f)=>{let h=D[g]||D[A1],x=h[2][f];if(x)return x;let T=f.match(h[0]);if(!T)return[[],Lc];let W=T.indexOf("",1);return[h[1][W],T]};return this.match=c,c(n,U)}var v8="[^/]+",iD=".*",bU="(?:|/.*)",a2=Symbol(),WW=new Set(".\\+*[^]$()");function WO(n,U){if(n.length===1)return U.length===1?n<U?-1:1:-1;if(U.length===1)return 1;if(n===iD||n===bU)return U===bU?-1:1;else if(U===iD||U===bU)return-1;if(n===v8)return 1;else if(U===v8)return-1;return n.length===U.length?n<U?-1:1:U.length-n.length}var TW=class n{#n;#U;#D=Object.create(null);insert(U,D,c,g,f){let h=this;for(let x=0,T=U.length;x<T;x++){let W=U[x],y=W.length===1?W==="*"?x===T-1?["","",iD]:["","",v8]:null:W==="/*"?["","",bU]:W.match(/^\:([^\{\}]+)(?:\{(.+)\})?$/),F;if(y){let i=y[1],X=y[2]||v8;if(i&&y[2]){if(X===".*")throw a2;if(X=X.replace(/^\((?!\?:)(?=[^)]+\)$)/,"(?:"),/\((?!\?:)/.test(X))throw a2;if(X.length===1&&WW.has(X))throw a2}if(F=h.#D[X],!F){if(X!==iD&&X!==bU){for(let $ in h.#D)if((X.length>1||$.length>1)&&$!==iD&&$!==bU)throw a2}F=h.#D[X]=new n}if(i!=="")F.#U??=g.varIndex++,c.push([i,F.#U])}else if(F=h.#D[W],!F){for(let i in h.#D)if(i.length>1&&i!==iD&&i!==bU)throw a2;F=h.#D[W]=new n}h=F}if(h.#n!==void 0)throw a2;h.#n=f?-1:D}buildRegExpStr(){let D=Object.keys(this.#D).sort(WO).map((c)=>{let g=this.#D[c],f=g.buildRegExpStr();return f===""?"":(typeof g.#U==="number"?`(${c})@${g.#U}`:WW.has(c)?`\\${c}`:c)+f}).filter(Boolean);if(typeof this.#n==="number"&&this.#n!==-1)D.unshift(`#${this.#n}`);if(D.length===0)return"";if(D.length===1)return D[0];return"(?:"+D.join("|")+")"}};var Wf=class{#n={varIndex:0};#U=new TW;#D=0;paths=Object.create(null);insert(n,U){if(U){this.#U.insert(n.split(""),0,[],this.#n,!0);return}let D=[],c=[],g=n;for(let h=0;;){let x=!1;if(g=g.replace(/\{[^}]+\}/g,(T)=>{let W=`@\\${h}`;return c[h]=[W,T],h++,x=!0,W}),!x)break}let f=g.match(/(?::[^\/]+)|(?:\/\*$)|./g)||[];for(let h=c.length-1;h>=0;h--){let[x]=c[h];for(let T=f.length-1;T>=0;T--)if(f[T].indexOf(x)!==-1){f[T]=f[T].replace(x,c[h][1]);break}}this.#U.insert(f,this.#D,D,this.#n,!1),this.paths[n]=[this.#D++,D]}buildRegExp(){let n=this.#U.buildRegExpStr();if(n==="")return[/^$/,[],[]];let U=0,D=[],c=[];return n=n.replace(/#(\d+)|@(\d+)|\.\*\$/g,(g,f,h)=>{if(f!==void 0)return D[++U]=Number(f),"$()";if(h!==void 0)return c[Number(h)]=++U,"";return""}),[new RegExp(`^${n}`),D,c]}};var yW=Object.create(null);function FW(n){return yW[n]??=new RegExp(n==="*"?"":`^${n.replace(/\/\*$|([.\\+*[^\]$()])/g,(U,D)=>D?`\\${D}`:"(?:|/.*)")}$`)}function TO(){yW=Object.create(null)}function N8(n,U){if(!n)return;for(let D of Object.keys(n).sort((c,g)=>g.length-c.length))if(FW(D).test(U))return[...n[D]];return}var P8=class{name="RegExpRouter";#n;#U;#D;constructor(){this.#n={[A1]:Object.create(null)},this.#U={[A1]:Object.create(null)},this.#D={[A1]:new Wf}}#f(n,U){try{this.#D[n].insert(U,!/\*|\/:/.test(U))}catch(D){throw D===a2?new _8(U):D}}add(n,U,D){let c=this.#n,g=this.#U;if(!c||!g)throw Error(I8);if(!c[n])this.#D[n]=new Wf,[c,g].forEach((x)=>{x[n]=Object.create(null),Object.keys(x[A1]).forEach((T)=>{x[n][T]=[...x[A1][T]],this.#f(n,T)})});if(U==="/*")U="*";let f=(U.match(/\/:/g)||[]).length;if(/\*$/.test(U)){let x=FW(U);Object.keys(c).forEach((T)=>{if((n===A1||n===T)&&!c[T][U])this.#f(T,U),c[T][U]=N8(c[T],U)||N8(c[A1],U)||[]}),Object.keys(c).forEach((T)=>{if(n===A1||n===T)Object.keys(c[T]).forEach((W)=>{x.test(W)&&c[T][W].push([D,f])})}),Object.keys(g).forEach((T)=>{if(n===A1||n===T)Object.keys(g[T]).forEach((W)=>x.test(W)&&g[T][W].push([D,f]))});return}let h=w8(U)||[U];for(let x=0,T=h.length;x<T;x++){let W=h[x];Object.keys(g).forEach((y)=>{if(n===A1||n===y){if(!g[y][W])this.#f(y,W),g[y][W]=[...N8(c[y],W)||N8(c[A1],W)||[]];g[y][W].push([D,f-T+x+1])}})}}match=S8;buildAllMatchers(){let n=Object.create(null);return Object.keys(this.#U).concat(Object.keys(this.#n)).forEach((U)=>{n[U]||=this.#c(U)}),this.#n=this.#U=this.#D=void 0,TO(),n}#c(n){let U=this.#n[n],D=this.#U[n],c=this.#D[n],g=Object.create(null),f=[];[U,D].forEach((y)=>{for(let F in y){let i=y[F],X=c.paths[F];if(!X){g[F]=[i.map(([Q])=>[Q,Object.create(null)]),Lc];continue}let $=X[1];f[X[0]]=i.map(([Q,Y])=>{let V=Object.create(null);Y-=1;for(;Y>=0;Y--){let[G,J]=$[Y];V[G]=J}return[Q,V]})}});let[h,x,T]=c.buildRegExp();for(let y=0,F=f.length;y<F;y++)for(let i=0,X=f[y].length;i<X;i++){let $=f[y][i]?.[1];if(!$)continue;let Q=Object.keys($);for(let Y=0,V=Q.length;Y<V;Y++)$[Q[Y]]=T[$[Q[Y]]]}let W=[];for(let y in x)W[y]=f[x[y]];return[h,W,g]}};var yO=class{name="PreparedRegExpRouter";#n;#U;constructor(n,U){this.#n=n,this.#U=U}#D(n,U){let D=this.#n[n];D[1].forEach((c)=>c&&c.push(U)),Object.values(D[2]).forEach((c)=>c[0].push(U))}#f(n,U,D,c,g){let f=this.#n[n];if(!g)f[2][U][0].push([D,{}]);else c.forEach((h)=>{if(typeof h==="number")f[1][h].push([D,g]);else f[2][h||U][0].push([D,g])})}add(n,U,D){if(!this.#n[n]){let g=this.#n[A1],f={};for(let h in g[2])f[h]=[g[2][h][0].slice(),Lc];this.#n[n]=[g[0],g[1].map((h)=>Array.isArray(h)?h.slice():0),f]}if(U==="/*"||U==="*"){let g=[D,{}];if(n===A1)for(let f in this.#n)this.#D(f,g);else this.#D(n,g);return}let c=this.#U[U];if(!c)throw Error(`Path ${U} is not registered`);for(let[g,f]of c)if(n===A1)for(let h in this.#n)this.#f(h,U,D,g,f);else this.#f(n,U,D,g,f)}buildAllMatchers(){return this.#n}match=S8};var Tf=class{name="SmartRouter";#n=[];#U=[];constructor(n){this.#n=n.routers}add(n,U,D){if(!this.#U)throw Error(I8);this.#U.push([n,U,D])}match(n,U){if(!this.#U)throw Error("Fatal error");let D=this.#n,c=this.#U,g=D.length,f=0,h;for(;f<g;f++){let x=D[f];try{for(let T=0,W=c.length;T<W;T++)x.add(...c[T]);h=x.match(n,U)}catch(T){if(T instanceof _8)continue;throw T}this.match=x.match.bind(x),this.#n=[x],this.#U=void 0;break}if(f===g)throw Error("Fatal error");return this.name=`SmartRouter + ${this.activeRouter.name}`,h}get activeRouter(){if(this.#U||this.#n.length!==1)throw Error("No active router has been determined yet.");return this.#n[0]}};var Cc=Object.create(null),FO=(n)=>{for(let U in n)return!0;return!1},iW=class n{#n;#U;#D;#f=0;#c=Cc;constructor(U,D,c){if(this.#U=c||Object.create(null),this.#n=[],U&&D){let g=Object.create(null);g[U]={handler:D,possibleKeys:[],score:0},this.#n=[g]}this.#D=[]}insert(U,D,c){this.#f=++this.#f;let g=this,f=ox(D),h=[];for(let x=0,T=f.length;x<T;x++){let W=f[x],y=f[x+1],F=rx(W,y),i=Array.isArray(F)?F[0]:W;if(i in g.#U){if(g=g.#U[i],F)h.push(F[1]);continue}if(g.#U[i]=new n,F)g.#D.push(F),h.push(F[1]);g=g.#U[i]}return g.#n.push({[U]:{handler:c,possibleKeys:h.filter((x,T,W)=>W.indexOf(x)===T),score:this.#f}}),g}#g(U,D,c,g,f){for(let h=0,x=D.#n.length;h<x;h++){let T=D.#n[h],W=T[c]||T[A1],y={};if(W!==void 0){if(W.params=Object.create(null),U.push(W),g!==Cc||f&&f!==Cc)for(let F=0,i=W.possibleKeys.length;F<i;F++){let X=W.possibleKeys[F],$=y[W.score];W.params[X]=f?.[X]&&!$?f[X]:g[X]??f?.[X],y[W.score]=!0}}}}search(U,D){let c=[];this.#c=Cc;let f=[this],h=cf(D),x=[],T=h.length,W=null;for(let y=0;y<T;y++){let F=h[y],i=y===T-1,X=[];for(let Q=0,Y=f.length;Q<Y;Q++){let V=f[Q],G=V.#U[F];if(G)if(G.#c=V.#c,i){if(G.#U["*"])this.#g(c,G.#U["*"],U,V.#c);this.#g(c,G,U,V.#c)}else X.push(G);for(let J=0,B=V.#D.length;J<B;J++){let z=V.#D[J],q=V.#c===Cc?{}:{...V.#c};if(z==="*"){let w=V.#U["*"];if(w)this.#g(c,w,U,V.#c),w.#c=q,X.push(w);continue}let[b,M,O]=z;if(!F&&!(O instanceof RegExp))continue;let _=V.#U[b];if(O instanceof RegExp){if(W===null){W=Array(T);let v=D[0]==="/"?1:0;for(let P=0;P<T;P++)W[P]=v,v+=h[P].length+1}let w=D.substring(W[y]),H=O.exec(w);if(H){if(q[M]=H[0],this.#g(c,_,U,V.#c,q),H[0].length===w.length&&_.#U["*"])this.#g(c,_.#U["*"],U,V.#c,q);if(FO(_.#U)){_.#c=q;let v=H[0].match(/\//g)?.length??0;(x[v]||=[]).push(_)}continue}}if(O===!0||O.test(F))if(q[M]=F,i){if(this.#g(c,_,U,q,V.#c),_.#U["*"])this.#g(c,_.#U["*"],U,q,V.#c)}else _.#c=q,X.push(_)}}let $=x.shift();f=$?X.concat($):X}if(c.length>1)c.sort((y,F)=>{return y.score-F.score});return[c.map(({handler:y,params:F})=>[y,F])]}};var yf=class{name="TrieRouter";#n;constructor(){this.#n=new iW}add(n,U,D){let c=w8(U);if(c){for(let g=0,f=c.length;g<f;g++)this.#n.insert(n,c[g],D);return}this.#n.insert(n,U,D)}match(n,U){return this.#n.search(n,U)}};var Ff=class extends xW{constructor(n={}){super(n);this.router=n.router??new Tf({routers:[new P8,new yf]})}};import{getAgentDir as cs}from"@earendil-works/pi-coding-agent";import{isIP as XW}from"node:net";function JW(n){return(n.startsWith("[")&&n.endsWith("]")?n.slice(1,-1):n).toLowerCase().replace(/\.$/,"")}function $W(n){if(!n||/[\s/@\\]/.test(n))return null;try{let U=new URL(`http://${n}`);if(U.username||U.password||U.pathname!=="/"||U.search||U.hash)return null;return JW(U.hostname)}catch{return null}}function iO(n){let U=n?.trim();if(!U)return null;return XW(U)?JW(U):$W(U)}function XO(n){return n==="localhost"||n.endsWith(".localhost")}function VW(){return[process.env.PI_WEB_HOSTNAME,...process.env.PI_WEB_ALLOWED_HOSTS?.split(",")??[]].filter((n)=>Boolean(n?.trim()))}function QW(n){try{return new URL(n).origin}catch{return null}}function JO(n){let U=new URL(n.url),D=n.headers.get("host");return D?QW(`${U.protocol}//${D}`):null}function $O(n){if(n.method!=="GET"||n.headers.get("sec-fetch-mode")!=="navigate"||n.headers.get("sec-fetch-dest")!=="document"||n.headers.get("sec-fetch-user")!=="?1")return!1;try{return/^\/api\/sessions\/[^/]+\/export$/.test(new URL(n.url).pathname)}catch{return!1}}function Xf(n,U=VW()){let D=n.headers.get("host"),c=D?$W(D):null;if(!c)return!1;if(XO(c)||XW(c))return!0;return U.some((g)=>iO(g)===c)}function VO(n){let U=n.headers.get("origin");if(n.headers.get("sec-fetch-site")==="cross-site")return!1;if(!U)return!0;let c=JO(n);return c!==null&&QW(U)===c}function QO(n){return n.headers.has("origin")||n.headers.has("sec-fetch-site")}function U2(n,U=VW()){if(!Xf(n,U))return!1;if($O(n))return!0;return!QO(n)||VO(n)}function XD(n){let U=n.headers.get("content-type")?.split(";",1)[0]?.trim().toLowerCase();return U==="application/json"||Boolean(U?.startsWith("application/")&&U.endsWith("+json"))}import{createHash as YO,timingSafeEqual as BO}from"node:crypto";var GO="pi";function YW(n){return YO("sha256").update(n,"utf8").digest()}function BW(n,U){return BO(YW(n),YW(U))}function Jf(n=process.env.PI_WEB_PASSWORD){return typeof n==="string"&&n.length>0}function GW(n,U=process.env.PI_WEB_PASSWORD){if(!Jf(U)||!n)return!1;let D=/^Basic\s+(\S+)$/i.exec(n);if(!D)return!1;let c;try{let W=Buffer.from(D[1],"base64");if(W.toString("base64")!==D[1])return!1;c=new TextDecoder("utf-8",{fatal:!0}).decode(W)}catch{return!1}let g=c.indexOf(":");if(g===-1)return!1;let f=c.slice(0,g),h=c.slice(g+1),x=BW(f,GO),T=BW(h,U);return x&&T}class $f extends Request{nextUrl;constructor(n){let U=n.method!=="GET"&&n.method!=="HEAD";super(n.url,{method:n.method,headers:n.headers,body:U?n.body:void 0,duplex:U?"half":void 0,signal:n.signal});this.nextUrl=new URL(n.url)}}class K extends Response{static json(n,U){let D=new Headers(U?.headers);return D.set("content-type","application/json; charset=utf-8"),new K(JSON.stringify(n),{status:U?.status??200,statusText:U?.statusText,headers:D})}}var Vf=!1,KW=performance.now();function bW(n){if(Vf=n,KW=performance.now(),Vf)ZW("boot","debug log enabled")}function ZU(n){return(U,D)=>ZW(n,U,D)}function ZW(n,U,D){if(!Vf)return;let c=performance.now()-KW,g=new Date,f=(x,T=2)=>String(x).padStart(T,"0"),h=`${f(g.getHours())}:${f(g.getMinutes())}:${f(g.getSeconds())}.${f(g.getMilliseconds(),3)}`;console.debug(`[debug][${n}][${h}][+${c.toFixed(1)}ms] ${U}${D?` — ${D}`:""}`)}var KO=ZU("mount"),bO=["GET","POST","PUT","PATCH","DELETE"];function n1(n,U,D){let c=U.split("/").filter(Boolean),g=[],f=new Map;for(let x of c){let T=x.match(/^\[\.\.\.(.+)\]$/),W=x.match(/^\[(.+)\]$/);if(T)g.push(`:${T[1]}{.+}`),f.set(T[1],{hono:T[1],catchAll:!0});else if(W)g.push(`:${W[1]}`),f.set(W[1],{hono:W[1],catchAll:!1});else g.push(x)}let h=`/${g.join("/")}`;for(let x of bO){let T=D[x];if(typeof T!=="function")continue;let W=T;n.on(x,h,async(y)=>{let F=performance.now(),i={};for(let[$,{hono:Q,catchAll:Y}]of f)if(Y){let V=y.req.param(Q)??"";i[$]=V===""?[]:V.split("/")}else i[$]=y.req.param(Q)??"";let X=await W(new $f(y.req.raw),{params:Promise.resolve(i)});return KO(`${x} ${y.req.path}`,`${X.status} ${Math.round(performance.now()-F)}ms`),X})}}var Lf={};U1(Lf,{GET:()=>yq});import{tmpdir as Wq}from"node:os";import{Readable as Tq}from"node:stream";import{constants as Qf}from"node:fs";import{lstat as ZO,open as zO}from"node:fs/promises";import{basename as OO,dirname as qO,resolve as zW}from"node:path";var R8=5242880;function OW(n,U){let D=zW(n);if(qO(D)!==zW(U))return null;if(!/^pi-bash-[A-Za-z0-9_-]+\.log$/.test(OO(D)))return null;return D}async function Yf(n){if(!(await ZO(n)).isFile())throw Error("Bash output path is not a regular file");let D=typeof Qf.O_NOFOLLOW==="number"?Qf.O_NOFOLLOW:0,c=await zO(n,Qf.O_RDONLY|D);try{let g=await c.stat();if(!g.isFile())throw Error("Bash output path is not a regular file");return{handle:c,fileInfo:g}}catch(g){throw await c.close(),g}}async function qW(n,U=R8){let{handle:D,fileInfo:c}=await Yf(n);try{if(c.size>U)return{tooLarge:!0,size:c.size};let g=Buffer.alloc(c.size),f=0;while(f<g.length){let h=await D.read(g,f,g.length-f,f);if(h.bytesRead===0)break;f+=h.bytesRead}return{tooLarge:!1,content:g.subarray(0,f).toString("utf8"),size:f}}finally{await D.close()}}import{open as IW,readFile as PO,readdir as RO}from"node:fs/promises";import{existsSync as uO,readdirSync as dO}from"node:fs";import{join as k8,normalize as zf}from"node:path";import{getAgentDir as kO,buildContextEntries as pO,buildSessionContext as mO,SessionManager as _W}from"@earendil-works/pi-coding-agent";function MO(n){return typeof n==="object"&&n!==null&&!Array.isArray(n)}function AO(n){if(!MO(n)||n.type!=="toolCall")return null;return{type:"toolCall",toolCallId:typeof n.toolCallId==="string"?n.toolCallId:typeof n.id==="string"?n.id:"",toolName:typeof n.toolName==="string"?n.toolName:typeof n.name==="string"?n.name:"",input:typeof n.input==="object"&&n.input!==null&&!Array.isArray(n.input)?n.input:typeof n.arguments==="object"&&n.arguments!==null&&!Array.isArray(n.arguments)?n.arguments:{}}}function Bf(n){if(n.role!=="assistant")return n;let U=n.content;if(!Array.isArray(U))return n;let D=U.map((c)=>{return AO(c)??c});return{...n,content:D}}import MW from"node:path";function Cn(n,U=process.platform){let D=U==="win32"?MW.win32.normalize(n):MW.posix.normalize(n);return U==="win32"?D.toLowerCase():D}import{execFile as HO}from"node:child_process";import{existsSync as u8,mkdirSync as LO,realpathSync as CO}from"node:fs";import{basename as EO,dirname as Kf,join as HW,resolve as wO}from"node:path";import{promisify as jO}from"node:util";function R1(n){let U=n.replace(/\\/g,"/");return/^[a-zA-Z]:$/.test(U)?`${U}/`:U}function Gf(){if(!globalThis.__piAdditionalAllowedRoots)globalThis.__piAdditionalAllowedRoots=new Set;return globalThis.__piAdditionalAllowedRoots}function On(n){if(!n)return;let U=R1(n);Gf().add(U),globalThis.__piAllowedRootsCache?.roots.add(U)}var IO=jO(HO),AW=60000;function _O(){if(!globalThis.__piProjectCache)globalThis.__piProjectCache=new Map;return globalThis.__piProjectCache}function LW(){globalThis.__piProjectCache?.clear()}async function zU(n,U){let{stdout:D}=await IO("git",["-C",n,...U],{timeout:1e4,maxBuffer:1048576,env:{...process.env,LC_ALL:"C"}});return D.trim()}function SO(n){let U=Kf(n);if(!U.endsWith("-worktrees"))return null;let D=U.slice(0,-10);if(!D||!u8(HW(D,".git")))return null;return{projectRoot:D,branch:EO(n),isWorktree:!0,isTopLevel:!0}}async function d8(n){let U=_O(),D=U.get(n);if(D&&D.expiresAt>Date.now())return D.info;let c;try{if(!u8(n))return c=SO(n)??{projectRoot:n,branch:null,isWorktree:!1,isTopLevel:!1},U.set(n,{info:c,expiresAt:Date.now()+AW}),c;let g=await zU(n,["rev-parse","--path-format=absolute","--git-common-dir","--git-dir","--show-toplevel","--abbrev-ref","HEAD"]),[f,h,x,T]=g.split(`
|
|
253
253
|
`).map((i)=>i.trim()),W=n;try{W=CO(n)}catch{}let y=x===W,F=h!==f&&y;c={projectRoot:F?Kf(f):n,branch:T&&T!=="HEAD"?T:null,isWorktree:F,isTopLevel:y}}catch{c={projectRoot:n,branch:null,isWorktree:!1,isTopLevel:!1}}return U.set(n,{info:c,expiresAt:Date.now()+AW}),c}async function vO(n){let U=await zU(n,["rev-parse","--path-format=absolute","--git-common-dir"]);return Kf(U)}async function bf(n){let U=await zU(n,["worktree","list","--porcelain"]),D=[],c=null,g=()=>{if(c?.path){if(!c.prunable&&u8(c.path))D.push({path:c.path,branch:c.branch??null,isMain:D.length===0})}c=null};for(let f of U.split(`
|
|
254
254
|
`))if(f.startsWith("worktree "))g(),c={path:f.slice(9).trim()};else if(f.startsWith("branch ")&&c)c.branch=f.slice(7).trim().replace(/^refs\/heads\//,"");else if(f.startsWith("prunable")&&c)c.prunable=!0;else if(f.trim()==="")g();return g(),D}function NO(n){return n.replace(/[/\\:*?"<>|\s]+/g,"-").replace(/^-+|-+$/g,"")}async function CW(n,U){let D=U.trim();if(!D)throw Error("Branch name is required");let c=NO(D);if(!c)throw Error(`Invalid branch name: ${U}`);let g=await vO(n),f=`${wO(g)}-worktrees`,h=HW(f,c);if(u8(h))throw Error(`Directory already exists: ${h}`);LO(f,{recursive:!0});let x=!1;try{await zU(g,["rev-parse","--verify","--quiet",`refs/heads/${D}`]),x=!0}catch{x=!1}try{if(x)await zU(g,["worktree","add","--",h,D]);else await zU(g,["worktree","add","-b",D,"--",h])}catch(T){throw Error(wW(T),{cause:T})}return On(h),LW(),{path:h,branch:D}}async function EW(n,U,D=!1){let g=(await bf(n)).find((f)=>f.path===U);if(!g)throw Error(`Not a worktree of this repository: ${U}`);if(g.isMain)throw Error("Cannot remove the main worktree");try{await zU(n,["worktree","remove",...D?["--force"]:[],U])}catch(f){throw Error(wW(f),{cause:f})}LW()}function wW(n){let U=n.stderr;if(typeof U==="string"&&U.trim())return U.trim();return n instanceof Error?n.message:String(n)}async function aO(n,U){let D=new Map;for(let f of n)D.set(Cn(f.path),f.id);let c=[...new Set(n.map((f)=>f.cwd).filter(Boolean))],g=new Map;return await Promise.all(c.map(async(f)=>{g.set(f,await d8(f))})),n.map((f)=>{o2(f.id,f.path,U);let h=f.cwd?g.get(f.cwd):void 0;return{path:f.path,id:f.id,cwd:f.cwd,name:f.name,created:f.created instanceof Date?f.created.toISOString():String(f.created),modified:f.modified instanceof Date?f.modified.toISOString():String(f.modified),messageCount:f.messageCount,firstMessage:f.firstMessage||"(no messages)",parentSessionId:f.parentSessionPath?D.get(Cn(f.parentSessionPath)):void 0,projectRoot:h?.projectRoot??f.cwd,...h?.isWorktree&&h.branch?{worktreeBranch:h.branch}:{}}})}async function oO(){let n=await SW(k8(kO(),"sessions"));for(let U of n)o2(U.id,U.path);return n}async function rO(n){let U=[],D=async(c)=>{let g;try{g=await RO(c,{withFileTypes:!0})}catch{return}for(let f of g){let h=k8(c,f.name);if(f.isDirectory())await D(h);else if(f.name.endsWith(".jsonl"))U.push(h)}};try{await D(n)}catch{}return U}function lO(n){if(!Array.isArray(n.content))return"";return n.content.filter((U)=>!!U&&typeof U==="object"&&U.type==="text"&&typeof U.text==="string").map((U)=>U.text).join(" ")}async function tO(n){let U=await PO(n,"utf8"),D=[];for(let W of U.split(`
|
|
255
255
|
`)){let y=W.trim();if(!y)continue;try{let F=JSON.parse(y);if(F&&typeof F==="object")D.push(F)}catch{}}if(D.length===0)throw Error("file contains no session entries");let c=D[0];if(c?.type!=="session"||typeof c.id!=="string")throw Error("missing session header (first line must be a session entry)");let g=new Date(c.timestamp);if(Number.isNaN(g.getTime()))throw Error(`invalid session header timestamp: ${JSON.stringify(c.timestamp)}`);let f=0,h="",x,T;for(let W of D){let y=W;if(y.type==="session_info"){let $=y.name;if(typeof $==="string"&&$.trim())x=$.trim();continue}if(y.type!=="message")continue;f++;let F=y.message;if(!F||F.role!=="user"&&F.role!=="assistant")continue;let i=typeof F.timestamp==="number"?F.timestamp:new Date(y.timestamp).getTime();if(typeof i==="number"&&!Number.isNaN(i))T=Math.max(T??0,i);if(F.role==="user"&&!h){let $=lO(F);if($)h=$}}return{path:n,id:c.id,cwd:typeof c.cwd==="string"?c.cwd:"",name:x,parentSessionPath:typeof c.parentSession==="string"?c.parentSession:void 0,created:g,modified:typeof T==="number"&&T>0?new Date(T):g,messageCount:f,firstMessage:h||"(no messages)",allMessagesText:""}}function eO(n,U){if(n.error)return U.error?0:1;if(U.error)return-1;return n.modified<U.modified?1:n.modified>U.modified?-1:0}async function sO(n){try{let U=await IW(n,"r");try{let D=Buffer.alloc(8192),{bytesRead:c}=await U.read(D,0,D.length,null),g=D.subarray(0,c).toString("utf8").split(`
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import"./chunk-K5T4RW27-CKaOGjfa.js";import{y as e}from"./mermaid-parser.core-DagEl33x.js";export{e as createArchitectureServices};
|