@rainmanhhh/pi-web 0.10.18 → 0.10.19
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/server.mjs +1 -1
- package/dist/static/assets/architecture-YZFGNWBL-BurCXthG.js +1 -0
- package/dist/static/assets/{architectureDiagram-Q4EWVU46-C_8JqUyK.js → architectureDiagram-Q4EWVU46-C1vi7RLa.js} +1 -1
- package/dist/static/assets/{blockDiagram-DXYQGD6D-DKUpxvFx.js → blockDiagram-DXYQGD6D-DWqCvWzD.js} +1 -1
- package/dist/static/assets/{c4Diagram-AHTNJAMY-gkbb6SXo.js → c4Diagram-AHTNJAMY-CoPoAt6A.js} +1 -1
- package/dist/static/assets/channel-BXtF_vcE.js +1 -0
- package/dist/static/assets/{chunk-4TB4RGXK-ojfS8plc.js → chunk-4TB4RGXK-5BkPdwEX.js} +1 -1
- package/dist/static/assets/{chunk-5FUZZQ4R-BD-qs3E7.js → chunk-5FUZZQ4R-BCBtElku.js} +1 -1
- package/dist/static/assets/{chunk-5PVQY5BW-DL1jD3ph.js → chunk-5PVQY5BW-OuELSQO1.js} +1 -1
- package/dist/static/assets/{chunk-EDXVE4YY-iBMZlZaw.js → chunk-EDXVE4YY-qKdzeNf8.js} +1 -1
- package/dist/static/assets/{chunk-ENJZ2VHE-DR58QCm8.js → chunk-ENJZ2VHE-F4oqPyWN.js} +1 -1
- package/dist/static/assets/{chunk-ICPOFSXX-BcowUcHC.js → chunk-ICPOFSXX-msee_cuD.js} +1 -1
- package/dist/static/assets/{chunk-K5T4RW27-ap2yYu7x.js → chunk-K5T4RW27-DFnY3XXj.js} +1 -1
- package/dist/static/assets/{chunk-OYMX7WX6-BDZVcKjL.js → chunk-OYMX7WX6-B2n9qaJY.js} +1 -1
- package/dist/static/assets/{chunk-U2HBQHQK-BG7A-lWS.js → chunk-U2HBQHQK-C9b96dP0.js} +1 -1
- package/dist/static/assets/{chunk-X2U36JSP-Cf307VeU.js → chunk-X2U36JSP-DkgbchMa.js} +1 -1
- package/dist/static/assets/{chunk-YZCP3GAM-CUlH9eG0.js → chunk-YZCP3GAM-xY74vpgk.js} +1 -1
- package/dist/static/assets/{chunk-ZZ45TVLE-IYoxbPKW.js → chunk-ZZ45TVLE-DD7irtAM.js} +1 -1
- package/dist/static/assets/classDiagram-6PBFFD2Q-DD0ipHNr.js +1 -0
- package/dist/static/assets/classDiagram-v2-HSJHXN6E-DD0ipHNr.js +1 -0
- package/dist/static/assets/clone-DR1ucleu.js +1 -0
- package/dist/static/assets/{dagre-KV5264BT-DwQaVdgx.js → dagre-KV5264BT-B0uslWlY.js} +1 -1
- package/dist/static/assets/{dagre-D3xT7tzy.js → dagre-YuxQPNcg.js} +1 -1
- package/dist/static/assets/{diagram-5BDNPKRD-B7USn7cS.js → diagram-5BDNPKRD-DBi0aGOv.js} +1 -1
- package/dist/static/assets/{diagram-G4DWMVQ6-CIw8wCOv.js → diagram-G4DWMVQ6-C3ISbHLl.js} +1 -1
- package/dist/static/assets/{diagram-MMDJMWI5-IEfSpDLE.js → diagram-MMDJMWI5-BB8bPq5T.js} +1 -1
- package/dist/static/assets/{diagram-TYMM5635-Cgy8Gwin.js → diagram-TYMM5635-CghMqnMN.js} +1 -1
- package/dist/static/assets/{erDiagram-SMLLAGMA-BvyhLxvk.js → erDiagram-SMLLAGMA-w92uqNdA.js} +1 -1
- package/dist/static/assets/{flatten-FXY_3BNe.js → flatten-C2yIS-kK.js} +1 -1
- package/dist/static/assets/{flowDiagram-DWJPFMVM-PEPHugHU.js → flowDiagram-DWJPFMVM-CP4Bmrpo.js} +1 -1
- package/dist/static/assets/{ganttDiagram-T4ZO3ILL-BmMkl6WA.js → ganttDiagram-T4ZO3ILL-wM9iXnWV.js} +1 -1
- package/dist/static/assets/gitGraph-7Q5UKJZL-cMjMtPot.js +1 -0
- package/dist/static/assets/{gitGraphDiagram-UUTBAWPF-Dq4-dXOV.js → gitGraphDiagram-UUTBAWPF-NWamzS7D.js} +1 -1
- package/dist/static/assets/{graphlib-CJd5DvTl.js → graphlib-DQeFkXVt.js} +1 -1
- package/dist/static/assets/{highlighted-body-OFNGDK62-7Gl56gD_.js → highlighted-body-OFNGDK62-VjOjbAEP.js} +1 -1
- package/dist/static/assets/{index-DZGVu6vy.js → index-AMoNadvA.js} +8 -8
- package/dist/static/assets/{index-DWmTpE-6.css → index-BNK7tRle.css} +1 -1
- package/dist/static/assets/info-OMHHGYJF-DhbBl27P.js +1 -0
- package/dist/static/assets/{infoDiagram-42DDH7IO-BwM5D2Q8.js → infoDiagram-42DDH7IO-CwzQCJj_.js} +1 -1
- package/dist/static/assets/{ishikawaDiagram-UXIWVN3A-Bnu-9Y6U.js → ishikawaDiagram-UXIWVN3A-Qp4tcejR.js} +1 -1
- package/dist/static/assets/{journeyDiagram-VCZTEJTY-CvsIP4J9.js → journeyDiagram-VCZTEJTY-CyNJPA7C.js} +1 -1
- package/dist/static/assets/{kanban-definition-6JOO6SKY-rVhcf8On.js → kanban-definition-6JOO6SKY-Dui4BQFV.js} +1 -1
- package/dist/static/assets/{line-p7p1wiUy.js → line-rJaaR3Ah.js} +1 -1
- package/dist/static/assets/mermaid-GHXKKRXX-BhpE2f73.js +1 -0
- package/dist/static/assets/{mermaid-parser.core-662KVO4s.js → mermaid-parser.core-CloxS80R.js} +2 -2
- package/dist/static/assets/{mermaid.core-Dz9DuZsl.js → mermaid.core-BUxZ9-fv.js} +4 -4
- package/dist/static/assets/{mindmap-definition-QFDTVHPH-DhXo3uH3.js → mindmap-definition-QFDTVHPH-ml7GF9xB.js} +1 -1
- package/dist/static/assets/packet-4T2RLAQJ-Bgb3AdTI.js +1 -0
- package/dist/static/assets/pie-ZZUOXDRM-CHINAzAl.js +1 -0
- package/dist/static/assets/{pieDiagram-DEJITSTG-CoDKFJtC.js → pieDiagram-DEJITSTG-vM9GosbC.js} +1 -1
- package/dist/static/assets/{quadrantDiagram-34T5L4WZ-CxvnIPUB.js → quadrantDiagram-34T5L4WZ-B-4w9yN7.js} +1 -1
- package/dist/static/assets/radar-PYXPWWZC-C7W72196.js +1 -0
- package/dist/static/assets/{reduce-DBBM-hgD.js → reduce-D3aLnQ1d.js} +1 -1
- package/dist/static/assets/{requirementDiagram-MS252O5E-CC-XfKHJ.js → requirementDiagram-MS252O5E-H2B8KGkU.js} +1 -1
- package/dist/static/assets/{sankeyDiagram-XADWPNL6-Bsa2zF2T.js → sankeyDiagram-XADWPNL6--53oDgkO.js} +1 -1
- package/dist/static/assets/{sequenceDiagram-FGHM5R23-C_OChHpF.js → sequenceDiagram-FGHM5R23-BkJMw9LO.js} +1 -1
- package/dist/static/assets/{stateDiagram-FHFEXIEX-XxOWB-Id.js → stateDiagram-FHFEXIEX-CrsBPMXR.js} +1 -1
- package/dist/static/assets/stateDiagram-v2-QKLJ7IA2-5dVc75kC.js +1 -0
- package/dist/static/assets/{timeline-definition-GMOUNBTQ-DZkxJAPy.js → timeline-definition-GMOUNBTQ-977rCD-6.js} +1 -1
- package/dist/static/assets/treeView-SZITEDCU-C2dPiyuG.js +1 -0
- package/dist/static/assets/treemap-W4RFUUIX-BejLjod0.js +1 -0
- package/dist/static/assets/{vennDiagram-DHZGUBPP-D52oGr9n.js → vennDiagram-DHZGUBPP-D-QKQSos.js} +1 -1
- package/dist/static/assets/wardley-RL74JXVD-BXMNzcid.js +1 -0
- package/dist/static/assets/{wardleyDiagram-NUSXRM2D-BUzUFXBP.js → wardleyDiagram-NUSXRM2D-weiswpm4.js} +1 -1
- package/dist/static/assets/{xychartDiagram-5P7HB3ND-BgRWg4zP.js → xychartDiagram-5P7HB3ND-BFMgjnAZ.js} +1 -1
- package/dist/static/index.html +2 -2
- package/package.json +1 -1
- package/dist/static/assets/architecture-YZFGNWBL-CRa0IpF7.js +0 -1
- package/dist/static/assets/channel-DTiTG_qt.js +0 -1
- package/dist/static/assets/classDiagram-6PBFFD2Q-CxCaJIXb.js +0 -1
- package/dist/static/assets/classDiagram-v2-HSJHXN6E-CxCaJIXb.js +0 -1
- package/dist/static/assets/clone-Ce0Mhpii.js +0 -1
- package/dist/static/assets/gitGraph-7Q5UKJZL-NquxqPWG.js +0 -1
- package/dist/static/assets/info-OMHHGYJF-DnPlps7s.js +0 -1
- package/dist/static/assets/mermaid-GHXKKRXX-PW04-1MU.js +0 -1
- package/dist/static/assets/packet-4T2RLAQJ-DI6WGpGl.js +0 -1
- package/dist/static/assets/pie-ZZUOXDRM-Ras6TZ-J.js +0 -1
- package/dist/static/assets/radar-PYXPWWZC-DVI_iVkW.js +0 -1
- package/dist/static/assets/stateDiagram-v2-QKLJ7IA2-BQrWW6CP.js +0 -1
- package/dist/static/assets/treeView-SZITEDCU-D5U6eQm-.js +0 -1
- package/dist/static/assets/treemap-W4RFUUIX-BokW73lz.js +0 -1
- package/dist/static/assets/wardley-RL74JXVD-DEuJ6dV_.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 s3(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(),W=this.getOptionValue(h),T=this.options.find((F)=>F.negate&&h===F.attributeName()),x=this.options.find((F)=>!F.negate&&h===F.attributeName());if(T&&(T.presetArg===void 0&&W===!1||T.presetArg!==void 0&&W===T.presetArg))return T;return x||f},c=(f)=>{let h=D(f),W=h.attributeName();if(this.getOptionValueSource(W)==="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=nf(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=nf(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 C8(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=b2.basename(n,b2.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 aW(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 oW(){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 y11=new yD;var rW={name:"@rainmanhhh/pi-web",version:"0.10.18",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.2","@earendil-works/pi-ai":"0.84.2","@earendil-works/pi-coding-agent":"0.84.2","@earendil-works/pi-tui":"0.84.2","@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 Uz}from"@earendil-works/pi-coding-agent";var lW={port:31415};var Df=(n,U,D)=>{return(c,g)=>{let f=-1;return h(0);async function h(W){if(W<=f)throw Error("next() called multiple times");f=W;let T,x=!1,F;if(n[W])F=n[W][0][0],c.req.routeIndex=W;else F=W===n.length&&g||void 0;if(F)try{T=await F(c,()=>h(W+1))}catch(y){if(y instanceof Error&&U)c.error=y,T=await U(y,c),x=!0;else throw y}else if(c.finalized===!1&&D)T=await D(c);if(T&&(c.finalized===!1||x))c.res=T;return c}}};var tW=Symbol();var eW=(n,U)=>{return new Response(n,{headers:{"Content-Type":U.replace(/^[^;]+/,(c)=>c.toLowerCase())}}).formData()};var j8=(n)=>("headers"in n),nx=async(n,U=Object.create(null))=>{let{all:D=!1,dot:c=!1}=U,h=(j8(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 xO(n,{all:D,dot:c});return{}};async function xO(n,U){if(!j8(n)&&n.bodyCache.formData)return sW(await n.bodyCache.formData,U);let D=j8(n)?n.headers:n.raw.headers,c=await n.arrayBuffer(),g=eW(c,D.get("Content-Type")||"");if(!j8(n))n.bodyCache.formData=g;let f=await g;if(f)return sW(f,U);return{}}function sW(n,U){let D=Object.create(null);if(n.forEach((c,g)=>{if(!(U.all||g.endsWith("[]")))D[g]=c;else TO(D,g,c)}),U.dot)Object.entries(D).forEach(([c,g])=>{if(c.includes("."))FO(D,c,g),delete D[c]});return D}var TO=(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]},FO=(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 gf=(n)=>{let U=n.split("/");if(U[0]==="")U.shift();return U},Ux=(n)=>{let{groups:U,path:D}=yO(n),c=gf(D);return iO(c,U)},yO=(n)=>{let U=[];return n=n.replace(/\{[^}]+\}/g,(D,c)=>{let g=`@${c}`;return U.push([g,D]),g}),{groups:U,path:n}},iO=(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},I8={},Dx=(n,U)=>{if(n==="*")return"*";let D=n.match(/^\:([^\{\}]+)(?:\{(.+)\})?$/);if(D){let c=`${n}#${U}`;if(!I8[c])if(D[2])I8[c]=U&&U[0]!==":"&&U[0]!=="*"?[c,D[1],new RegExp(`^${D[2]}(?=/${U})`)]:[n,D[1],new RegExp(`^${D[2]}$`)];else I8[c]=[n,D[1],!0];return I8[c]}return null},cx=(n,U)=>{try{return U(n)}catch{return n.replace(/(?:%[0-9A-Fa-f]{2})+/g,(D)=>{try{return U(D)}catch{return D}})}},XO=(n)=>cx(n,decodeURI),ff=(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),W=f===-1?h===-1?void 0:h:h===-1?f:Math.min(f,h),T=U.slice(D,W);return XO(T.includes("%25")?T.replace(/%25/g,"%2525"):T)}else if(g===63||g===35)break}return U.slice(D,c)};var gx=(n)=>{let U=ff(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}`}`},_8=(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)},S8=(n)=>n.indexOf("%")!==-1?cx(n,JO):n,cf=(n)=>{if(n.indexOf("+")!==-1)n=n.replace(/\+/g," ");return S8(n)},fx=(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 W=n.charCodeAt(h+U.length+1);if(W===61){let T=h+U.length+2,x=n.indexOf("&",T);return cf(n.slice(T,x===-1?void 0:x))}else if(W==38||isNaN(W))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),W=n.indexOf("=",f);if(W>h&&h!==-1)W=-1;let T=n.slice(f+1,W===-1?h===-1?void 0:h:W);if(c)T=cf(T);if(f=h,T==="")continue;let x;if(W===-1)x="";else if(x=n.slice(W+1,h===-1?void 0:h),c)x=cf(x);if(D){if(!(g[T]&&Array.isArray(g[T])))g[T]=[];g[T].push(x)}else g[T]??=x}return U?g[U]:g},hx=fx,Wx=(n,U)=>{return fx(n,U,!0)},JO=decodeURIComponent;var xx=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&&S8(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]=S8(c)}return n}#c(n){return this.#U[1]?this.#U[1][n]:n}query(n){return hx(this.url,n)}queries(n){return Wx(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 nx(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[tW](){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 Tx={Stringify:1,BeforeStream:2,Stream:3},$O=(n,U)=>{let D=new String(n);return D.isEscaped=!0,D.callbacks=U,D};var hf=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((W)=>W({phase:U,buffer:g,context:c}))).then((W)=>Promise.all(W.filter(Boolean).map((T)=>hf(T,U,!1,c,g))).then(()=>g[0]));if(D)return $O(await h,f);else return h};var QO="text/plain; charset=UTF-8",Wf=(n,U)=>{return{"Content-Type":n,...U}},Lc=(n,U)=>new Response(n,U),xf=class{#n;#U;env={};#D;finalized=!1;error;#f;#c;#g;#F;#x;#T;#W;#y;#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.#y=U.matchResult}get req(){return this.#U??=new xx(this.#n,this.#i,this.#y),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||=Lc(null,{headers:this.#W??=new Headers})}set res(n){if(this.#g&&n){n=Lc(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.#x??=(U)=>this.html(U),this.#x(...n)};setLayout=(n)=>this.#F=n;getLayout=()=>this.#F;setRenderer=(n)=>{this.#x=n};header=(n,U,D)=>{if(this.finalized)this.#g=Lc(this.#g.body,this.#g);let c=this.#g?this.#g.headers:this.#W??=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.#W;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 W of h)c.append(f,W)}}}let g=typeof U==="number"?U:U?.status??this.#f;return Lc(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.#W&&!this.#f&&!U&&!D&&!this.finalized?new Response(n):this.#h(n,U,Wf(QO,D))};json=(n,U,D)=>{return this.#h(JSON.stringify(n),U,Wf("application/json",D))};html=(n,U,D)=>{let c=(g)=>this.#h(g,U,Wf("text/html; charset=UTF-8",D));return typeof n==="object"?hf(n,Tx.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??=()=>Lc(),this.#T(this)}};var A1="ALL",Fx="all",yx=["get","post","put","delete","options","patch","query"],v8="Can not add a route since the matcher is already built.",N8=class extends Error{};var ix="__COMPOSED_HANDLER";var VO=(n)=>{return n.text("404 Not Found",404)},Xx=(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)},Jx=class n{get;post;put;delete;options;patch;query;all;on;use;router;getPath;_basePath="/";#n="/";routes=[];constructor(U={}){[...yx,Fx].forEach((f)=>{this[f]=(h,...W)=>{if(typeof h==="string")this.#n=h;else this.#f(f,this.#n,h);return W.forEach((T)=>{this.#f(f,this.#n,T)}),this}}),this.on=(f,h,...W)=>{for(let T of[h].flat()){this.#n=T;for(let x of[f].flat())W.map((F)=>{this.#f(x.toUpperCase(),this.#n,F)})}return this},this.use=(f,...h)=>{if(typeof f==="string")this.#n=f;else this.#n="*",h.unshift(f);return h.forEach((W)=>{this.#f(A1,this.#n,W)}),this};let{strict:c,...g}=U;Object.assign(this,g),this.getPath=c??!0?U.getPath??ff:gx}#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=VO;errorHandler=Xx;route(U,D){let c=this.basePath(U);return D.routes.map((g)=>{let f;if(D.errorHandler===Xx)f=g.handler;else f=async(h,W)=>(await Df([],D.errorHandler)(h,()=>g.handler(h,W))).res,f[ix]=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 x=f(T);return Array.isArray(x)?x:[x]}:(T)=>{let x=void 0;try{x=T.executionCtx}catch{}return[T.env,x]};g||=(()=>{let T=m2(this._basePath,U),x=T==="/"?0:T.length;return(F)=>{let y=new URL(F.url);return y.pathname=this.getPath(F).slice(x)||"/",new Request(y,F)}})();let W=async(T,x)=>{let F=await D(g(T.req.raw),...h(T));if(F)return F;await x()};return this.#f(A1,m2(U,"*"),W),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),W=new xf(U,{path:f,matchResult:h,env:c,executionCtx:D,notFoundHandler:this.#D});if(h[0].length===1){let x;try{x=h[0][0][0][0](W,async()=>{W.res=await this.#D(W)})}catch(F){return this.#c(F,W)}return x instanceof Promise?x.then((F)=>F||(W.finalized?W.res:this.#D(W))).catch((F)=>this.#c(F,W)):x??this.#D(W)}let T=Df(h[0],this.errorHandler,this.#D);return(async()=>{try{let x=await T(W);if(!x.finalized)throw Error("Context is not finalized. Did you forget to return a Response object or `await next()`?");return x.res}catch(x){return this.#c(x,W)}})()}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 Cc=[];function P8(n,U){let D=this.buildAllMatchers(),c=(g,f)=>{let h=D[g]||D[A1],W=h[2][f];if(W)return W;let T=f.match(h[0]);if(!T)return[[],Cc];let x=T.indexOf("",1);return[h[1][x],T]};return this.match=c,c(n,U)}var R8="[^/]+",iD=".*",ZU="(?:|/.*)",a2=Symbol(),$x=new Set(".\\+*[^]$()");function YO(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===ZU)return U===ZU?-1:1;else if(U===iD||U===ZU)return-1;if(n===R8)return 1;else if(U===R8)return-1;return n.length===U.length?n<U?-1:1:U.length-n.length}var Qx=class n{#n;#U;#D=Object.create(null);insert(U,D,c,g,f){let h=this;for(let W=0,T=U.length;W<T;W++){let x=U[W],F=x.length===1?x==="*"?W===T-1?["","",iD]:["","",R8]:null:x==="/*"?["","",ZU]:x.match(/^\:([^\{\}]+)(?:\{(.+)\})?$/),y;if(F){let i=F[1],X=F[2]||R8;if(i&&F[2]){if(X===".*")throw a2;if(X=X.replace(/^\((?!\?:)(?=[^)]+\)$)/,"(?:"),/\((?!\?:)/.test(X))throw a2;if(X.length===1&&$x.has(X))throw a2}if(y=h.#D[X],!y){if(X!==iD&&X!==ZU){for(let $ in h.#D)if((X.length>1||$.length>1)&&$!==iD&&$!==ZU)throw a2}y=h.#D[X]=new n}if(i!=="")y.#U??=g.varIndex++,c.push([i,y.#U])}else if(y=h.#D[x],!y){for(let i in h.#D)if(i.length>1&&i!==iD&&i!==ZU)throw a2;y=h.#D[x]=new n}h=y}if(h.#n!==void 0)throw a2;h.#n=f?-1:D}buildRegExpStr(){let D=Object.keys(this.#D).sort(YO).map((c)=>{let g=this.#D[c],f=g.buildRegExpStr();return f===""?"":(typeof g.#U==="number"?`(${c})@${g.#U}`:$x.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 Tf=class{#n={varIndex:0};#U=new Qx;#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 W=!1;if(g=g.replace(/\{[^}]+\}/g,(T)=>{let x=`@\\${h}`;return c[h]=[x,T],h++,W=!0,x}),!W)break}let f=g.match(/(?::[^\/]+)|(?:\/\*$)|./g)||[];for(let h=c.length-1;h>=0;h--){let[W]=c[h];for(let T=f.length-1;T>=0;T--)if(f[T].indexOf(W)!==-1){f[T]=f[T].replace(W,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 Vx=Object.create(null);function Yx(n){return Vx[n]??=new RegExp(n==="*"?"":`^${n.replace(/\/\*$|([.\\+*[^\]$()])/g,(U,D)=>D?`\\${D}`:"(?:|/.*)")}$`)}function BO(){Vx=Object.create(null)}function u8(n,U){if(!n)return;for(let D of Object.keys(n).sort((c,g)=>g.length-c.length))if(Yx(D).test(U))return[...n[D]];return}var k8=class{name="RegExpRouter";#n;#U;#D;constructor(){this.#n={[A1]:Object.create(null)},this.#U={[A1]:Object.create(null)},this.#D={[A1]:new Tf}}#f(n,U){try{this.#D[n].insert(U,!/\*|\/:/.test(U))}catch(D){throw D===a2?new N8(U):D}}add(n,U,D){let c=this.#n,g=this.#U;if(!c||!g)throw Error(v8);if(!c[n])this.#D[n]=new Tf,[c,g].forEach((W)=>{W[n]=Object.create(null),Object.keys(W[A1]).forEach((T)=>{W[n][T]=[...W[A1][T]],this.#f(n,T)})});if(U==="/*")U="*";let f=(U.match(/\/:/g)||[]).length;if(/\*$/.test(U)){let W=Yx(U);Object.keys(c).forEach((T)=>{if((n===A1||n===T)&&!c[T][U])this.#f(T,U),c[T][U]=u8(c[T],U)||u8(c[A1],U)||[]}),Object.keys(c).forEach((T)=>{if(n===A1||n===T)Object.keys(c[T]).forEach((x)=>{W.test(x)&&c[T][x].push([D,f])})}),Object.keys(g).forEach((T)=>{if(n===A1||n===T)Object.keys(g[T]).forEach((x)=>W.test(x)&&g[T][x].push([D,f]))});return}let h=_8(U)||[U];for(let W=0,T=h.length;W<T;W++){let x=h[W];Object.keys(g).forEach((F)=>{if(n===A1||n===F){if(!g[F][x])this.#f(F,x),g[F][x]=[...u8(c[F],x)||u8(c[A1],x)||[]];g[F][x].push([D,f-T+W+1])}})}}match=P8;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,BO(),n}#c(n){let U=this.#n[n],D=this.#U[n],c=this.#D[n],g=Object.create(null),f=[];[U,D].forEach((F)=>{for(let y in F){let i=F[y],X=c.paths[y];if(!X){g[y]=[i.map(([V])=>[V,Object.create(null)]),Cc];continue}let $=X[1];f[X[0]]=i.map(([V,Y])=>{let Q=Object.create(null);Y-=1;for(;Y>=0;Y--){let[G,J]=$[Y];Q[G]=J}return[V,Q]})}});let[h,W,T]=c.buildRegExp();for(let F=0,y=f.length;F<y;F++)for(let i=0,X=f[F].length;i<X;i++){let $=f[F][i]?.[1];if(!$)continue;let V=Object.keys($);for(let Y=0,Q=V.length;Y<Q;Y++)$[V[Y]]=T[$[V[Y]]]}let x=[];for(let F in W)x[F]=f[W[F]];return[h,x,g]}};var GO=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(),Cc];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=P8};var Ff=class{name="SmartRouter";#n=[];#U=[];constructor(n){this.#n=n.routers}add(n,U,D){if(!this.#U)throw Error(v8);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 W=D[f];try{for(let T=0,x=c.length;T<x;T++)W.add(...c[T]);h=W.match(n,U)}catch(T){if(T instanceof N8)continue;throw T}this.match=W.match.bind(W),this.#n=[W],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 Ec=Object.create(null),KO=(n)=>{for(let U in n)return!0;return!1},Bx=class n{#n;#U;#D;#f=0;#c=Ec;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=Ux(D),h=[];for(let W=0,T=f.length;W<T;W++){let x=f[W],F=f[W+1],y=Dx(x,F),i=Array.isArray(y)?y[0]:x;if(i in g.#U){if(g=g.#U[i],y)h.push(y[1]);continue}if(g.#U[i]=new n,y)g.#D.push(y),h.push(y[1]);g=g.#U[i]}return g.#n.push({[U]:{handler:c,possibleKeys:h.filter((W,T,x)=>x.indexOf(W)===T),score:this.#f}}),g}#g(U,D,c,g,f){for(let h=0,W=D.#n.length;h<W;h++){let T=D.#n[h],x=T[c]||T[A1],F={};if(x!==void 0){if(x.params=Object.create(null),U.push(x),g!==Ec||f&&f!==Ec)for(let y=0,i=x.possibleKeys.length;y<i;y++){let X=x.possibleKeys[y],$=F[x.score];x.params[X]=f?.[X]&&!$?f[X]:g[X]??f?.[X],F[x.score]=!0}}}}search(U,D){let c=[];this.#c=Ec;let f=[this],h=gf(D),W=[],T=h.length,x=null;for(let F=0;F<T;F++){let y=h[F],i=F===T-1,X=[];for(let V=0,Y=f.length;V<Y;V++){let Q=f[V],G=Q.#U[y];if(G)if(G.#c=Q.#c,i){if(G.#U["*"])this.#g(c,G.#U["*"],U,Q.#c);this.#g(c,G,U,Q.#c)}else X.push(G);for(let J=0,B=Q.#D.length;J<B;J++){let z=Q.#D[J],q=Q.#c===Ec?{}:{...Q.#c};if(z==="*"){let w=Q.#U["*"];if(w)this.#g(c,w,U,Q.#c),w.#c=q,X.push(w);continue}let[Z,M,O]=z;if(!y&&!(O instanceof RegExp))continue;let _=Q.#U[Z];if(O instanceof RegExp){if(x===null){x=Array(T);let v=D[0]==="/"?1:0;for(let P=0;P<T;P++)x[P]=v,v+=h[P].length+1}let w=D.substring(x[F]),H=O.exec(w);if(H){if(q[M]=H[0],this.#g(c,_,U,Q.#c,q),H[0].length===w.length&&_.#U["*"])this.#g(c,_.#U["*"],U,Q.#c,q);if(KO(_.#U)){_.#c=q;let v=H[0].match(/\//g)?.length??0;(W[v]||=[]).push(_)}continue}}if(O===!0||O.test(y))if(q[M]=y,i){if(this.#g(c,_,U,q,Q.#c),_.#U["*"])this.#g(c,_.#U["*"],U,q,Q.#c)}else _.#c=q,X.push(_)}}let $=W.shift();f=$?X.concat($):X}if(c.length>1)c.sort((F,y)=>{return F.score-y.score});return[c.map(({handler:F,params:y})=>[F,y])]}};var yf=class{name="TrieRouter";#n;constructor(){this.#n=new Bx}add(n,U,D){let c=_8(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 Xf=class extends Jx{constructor(n={}){super(n);this.router=n.router??new Ff({routers:[new k8,new yf]})}};import{getAgentDir as $s}from"@earendil-works/pi-coding-agent";import{isIP as Gx}from"node:net";function Kx(n){return(n.startsWith("[")&&n.endsWith("]")?n.slice(1,-1):n).toLowerCase().replace(/\.$/,"")}function Zx(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 Kx(U.hostname)}catch{return null}}function ZO(n){let U=n?.trim();if(!U)return null;return Gx(U)?Kx(U):Zx(U)}function bO(n){return n==="localhost"||n.endsWith(".localhost")}function bx(){return[process.env.PI_WEB_HOSTNAME,...process.env.PI_WEB_ALLOWED_HOSTS?.split(",")??[]].filter((n)=>Boolean(n?.trim()))}function zx(n){try{return new URL(n).origin}catch{return null}}function zO(n){let U=new URL(n.url),D=n.headers.get("host");return D?zx(`${U.protocol}//${D}`):null}function OO(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 Jf(n,U=bx()){let D=n.headers.get("host"),c=D?Zx(D):null;if(!c)return!1;if(bO(c)||Gx(c))return!0;return U.some((g)=>ZO(g)===c)}function qO(n){let U=n.headers.get("origin");if(n.headers.get("sec-fetch-site")==="cross-site")return!1;if(!U)return!0;let c=zO(n);return c!==null&&zx(U)===c}function MO(n){return n.headers.has("origin")||n.headers.has("sec-fetch-site")}function U2(n,U=bx()){if(!Jf(n,U))return!1;if(OO(n))return!0;return!MO(n)||qO(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 AO,timingSafeEqual as HO}from"node:crypto";var LO="pi";function Ox(n){return AO("sha256").update(n,"utf8").digest()}function qx(n,U){return HO(Ox(n),Ox(U))}function $f(n=process.env.PI_WEB_PASSWORD){return typeof n==="string"&&n.length>0}function Mx(n,U=process.env.PI_WEB_PASSWORD){if(!$f(U)||!n)return!1;let D=/^Basic\s+(\S+)$/i.exec(n);if(!D)return!1;let c;try{let x=Buffer.from(D[1],"base64");if(x.toString("base64")!==D[1])return!1;c=new TextDecoder("utf-8",{fatal:!0}).decode(x)}catch{return!1}let g=c.indexOf(":");if(g===-1)return!1;let f=c.slice(0,g),h=c.slice(g+1),W=qx(f,LO),T=qx(h,U);return W&&T}class Qf 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,Ax=performance.now();function Hx(n){if(Vf=n,Ax=performance.now(),Vf)Lx("boot","debug log enabled")}function bU(n){return(U,D)=>Lx(n,U,D)}function Lx(n,U,D){if(!Vf)return;let c=performance.now()-Ax,g=new Date,f=(W,T=2)=>String(W).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 CO=bU("mount"),EO=["GET","POST","PUT","PATCH","DELETE"];function n1(n,U,D){let c=U.split("/").filter(Boolean),g=[],f=new Map;for(let W of c){let T=W.match(/^\[\.\.\.(.+)\]$/),x=W.match(/^\[(.+)\]$/);if(T)g.push(`:${T[1]}{.+}`),f.set(T[1],{hono:T[1],catchAll:!0});else if(x)g.push(`:${x[1]}`),f.set(x[1],{hono:x[1],catchAll:!1});else g.push(W)}let h=`/${g.join("/")}`;for(let W of EO){let T=D[W];if(typeof T!=="function")continue;let x=T;n.on(W,h,async(F)=>{let y=performance.now(),i={};for(let[$,{hono:V,catchAll:Y}]of f)if(Y){let Q=F.req.param(V)??"";i[$]=Q===""?[]:Q.split("/")}else i[$]=F.req.param(V)??"";let X=await x(new Qf(F.req.raw),{params:Promise.resolve(i)});return CO(`${W} ${F.req.path}`,`${X.status} ${Math.round(performance.now()-y)}ms`),X})}}var Cf={};U1(Cf,{GET:()=>Gq});import{tmpdir as Yq}from"node:os";import{Readable as Bq}from"node:stream";import{constants as Yf}from"node:fs";import{lstat as wO,open as jO}from"node:fs/promises";import{basename as IO,dirname as _O,resolve as Cx}from"node:path";var d8=5242880;function Ex(n,U){let D=Cx(n);if(_O(D)!==Cx(U))return null;if(!/^pi-bash-[A-Za-z0-9_-]+\.log$/.test(IO(D)))return null;return D}async function Bf(n){if(!(await wO(n)).isFile())throw Error("Bash output path is not a regular file");let D=typeof Yf.O_NOFOLLOW==="number"?Yf.O_NOFOLLOW:0,c=await jO(n,Yf.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 wx(n,U=d8){let{handle:D,fileInfo:c}=await Bf(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 ux,readFile as lO,readdir as tO}from"node:fs/promises";import{existsSync as eO,readdirSync as sO}from"node:fs";import{join as a8,normalize as Of}from"node:path";import{getAgentDir as nq,buildContextEntries as Uq,buildSessionContext as Dq,SessionManager as kx}from"@earendil-works/pi-coding-agent";function SO(n){return typeof n==="object"&&n!==null&&!Array.isArray(n)}function vO(n){if(!SO(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 Gf(n){if(n.role!=="assistant")return n;let U=n.content;if(!Array.isArray(U))return n;let D=U.map((c)=>{return vO(c)??c});return{...n,content:D}}import jx from"node:path";function Cn(n,U=process.platform){let D=U==="win32"?jx.win32.normalize(n):jx.posix.normalize(n);return U==="win32"?D.toLowerCase():D}import{execFile as NO}from"node:child_process";import{existsSync as p8,mkdirSync as PO,realpathSync as RO}from"node:fs";import{basename as uO,dirname as Zf,join as _x,resolve as kO}from"node:path";import{promisify as dO}from"node:util";function u1(n){let U=n.replace(/\\/g,"/");return/^[a-zA-Z]:$/.test(U)?`${U}/`:U}function Kf(){if(!globalThis.__piAdditionalAllowedRoots)globalThis.__piAdditionalAllowedRoots=new Set;return globalThis.__piAdditionalAllowedRoots}function On(n){if(!n)return;let U=u1(n);Kf().add(U),globalThis.__piAllowedRootsCache?.roots.add(U)}var pO=dO(NO),Ix=60000;function mO(){if(!globalThis.__piProjectCache)globalThis.__piProjectCache=new Map;return globalThis.__piProjectCache}function Sx(){globalThis.__piProjectCache?.clear()}async function zU(n,U){let{stdout:D}=await pO("git",["-C",n,...U],{timeout:1e4,maxBuffer:1048576,env:{...process.env,LC_ALL:"C"}});return D.trim()}function aO(n){let U=Zf(n);if(!U.endsWith("-worktrees"))return null;let D=U.slice(0,-10);if(!D||!p8(_x(D,".git")))return null;return{projectRoot:D,branch:uO(n),isWorktree:!0,isTopLevel:!0}}async function m8(n){let U=mO(),D=U.get(n);if(D&&D.expiresAt>Date.now())return D.info;let c;try{if(!p8(n))return c=aO(n)??{projectRoot:n,branch:null,isWorktree:!1,isTopLevel:!1},U.set(n,{info:c,expiresAt:Date.now()+Ix}),c;let g=await zU(n,["rev-parse","--path-format=absolute","--git-common-dir","--git-dir","--show-toplevel","--abbrev-ref","HEAD"]),[f,h,W,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 aW(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 oW(){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 y11=new yD;var rW={name:"@rainmanhhh/pi-web",version:"0.10.19",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.2","@earendil-works/pi-ai":"0.84.2","@earendil-works/pi-coding-agent":"0.84.2","@earendil-works/pi-tui":"0.84.2","@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 Uz}from"@earendil-works/pi-coding-agent";var lW={port:31415};var Df=(n,U,D)=>{return(c,g)=>{let f=-1;return h(0);async function h(W){if(W<=f)throw Error("next() called multiple times");f=W;let T,x=!1,F;if(n[W])F=n[W][0][0],c.req.routeIndex=W;else F=W===n.length&&g||void 0;if(F)try{T=await F(c,()=>h(W+1))}catch(y){if(y instanceof Error&&U)c.error=y,T=await U(y,c),x=!0;else throw y}else if(c.finalized===!1&&D)T=await D(c);if(T&&(c.finalized===!1||x))c.res=T;return c}}};var tW=Symbol();var eW=(n,U)=>{return new Response(n,{headers:{"Content-Type":U.replace(/^[^;]+/,(c)=>c.toLowerCase())}}).formData()};var j8=(n)=>("headers"in n),nx=async(n,U=Object.create(null))=>{let{all:D=!1,dot:c=!1}=U,h=(j8(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 xO(n,{all:D,dot:c});return{}};async function xO(n,U){if(!j8(n)&&n.bodyCache.formData)return sW(await n.bodyCache.formData,U);let D=j8(n)?n.headers:n.raw.headers,c=await n.arrayBuffer(),g=eW(c,D.get("Content-Type")||"");if(!j8(n))n.bodyCache.formData=g;let f=await g;if(f)return sW(f,U);return{}}function sW(n,U){let D=Object.create(null);if(n.forEach((c,g)=>{if(!(U.all||g.endsWith("[]")))D[g]=c;else TO(D,g,c)}),U.dot)Object.entries(D).forEach(([c,g])=>{if(c.includes("."))FO(D,c,g),delete D[c]});return D}var TO=(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]},FO=(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 gf=(n)=>{let U=n.split("/");if(U[0]==="")U.shift();return U},Ux=(n)=>{let{groups:U,path:D}=yO(n),c=gf(D);return iO(c,U)},yO=(n)=>{let U=[];return n=n.replace(/\{[^}]+\}/g,(D,c)=>{let g=`@${c}`;return U.push([g,D]),g}),{groups:U,path:n}},iO=(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},I8={},Dx=(n,U)=>{if(n==="*")return"*";let D=n.match(/^\:([^\{\}]+)(?:\{(.+)\})?$/);if(D){let c=`${n}#${U}`;if(!I8[c])if(D[2])I8[c]=U&&U[0]!==":"&&U[0]!=="*"?[c,D[1],new RegExp(`^${D[2]}(?=/${U})`)]:[n,D[1],new RegExp(`^${D[2]}$`)];else I8[c]=[n,D[1],!0];return I8[c]}return null},cx=(n,U)=>{try{return U(n)}catch{return n.replace(/(?:%[0-9A-Fa-f]{2})+/g,(D)=>{try{return U(D)}catch{return D}})}},XO=(n)=>cx(n,decodeURI),ff=(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),W=f===-1?h===-1?void 0:h:h===-1?f:Math.min(f,h),T=U.slice(D,W);return XO(T.includes("%25")?T.replace(/%25/g,"%2525"):T)}else if(g===63||g===35)break}return U.slice(D,c)};var gx=(n)=>{let U=ff(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}`}`},_8=(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)},S8=(n)=>n.indexOf("%")!==-1?cx(n,JO):n,cf=(n)=>{if(n.indexOf("+")!==-1)n=n.replace(/\+/g," ");return S8(n)},fx=(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 W=n.charCodeAt(h+U.length+1);if(W===61){let T=h+U.length+2,x=n.indexOf("&",T);return cf(n.slice(T,x===-1?void 0:x))}else if(W==38||isNaN(W))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),W=n.indexOf("=",f);if(W>h&&h!==-1)W=-1;let T=n.slice(f+1,W===-1?h===-1?void 0:h:W);if(c)T=cf(T);if(f=h,T==="")continue;let x;if(W===-1)x="";else if(x=n.slice(W+1,h===-1?void 0:h),c)x=cf(x);if(D){if(!(g[T]&&Array.isArray(g[T])))g[T]=[];g[T].push(x)}else g[T]??=x}return U?g[U]:g},hx=fx,Wx=(n,U)=>{return fx(n,U,!0)},JO=decodeURIComponent;var xx=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&&S8(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]=S8(c)}return n}#c(n){return this.#U[1]?this.#U[1][n]:n}query(n){return hx(this.url,n)}queries(n){return Wx(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 nx(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[tW](){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 Tx={Stringify:1,BeforeStream:2,Stream:3},$O=(n,U)=>{let D=new String(n);return D.isEscaped=!0,D.callbacks=U,D};var hf=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((W)=>W({phase:U,buffer:g,context:c}))).then((W)=>Promise.all(W.filter(Boolean).map((T)=>hf(T,U,!1,c,g))).then(()=>g[0]));if(D)return $O(await h,f);else return h};var QO="text/plain; charset=UTF-8",Wf=(n,U)=>{return{"Content-Type":n,...U}},Lc=(n,U)=>new Response(n,U),xf=class{#n;#U;env={};#D;finalized=!1;error;#f;#c;#g;#F;#x;#T;#W;#y;#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.#y=U.matchResult}get req(){return this.#U??=new xx(this.#n,this.#i,this.#y),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||=Lc(null,{headers:this.#W??=new Headers})}set res(n){if(this.#g&&n){n=Lc(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.#x??=(U)=>this.html(U),this.#x(...n)};setLayout=(n)=>this.#F=n;getLayout=()=>this.#F;setRenderer=(n)=>{this.#x=n};header=(n,U,D)=>{if(this.finalized)this.#g=Lc(this.#g.body,this.#g);let c=this.#g?this.#g.headers:this.#W??=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.#W;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 W of h)c.append(f,W)}}}let g=typeof U==="number"?U:U?.status??this.#f;return Lc(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.#W&&!this.#f&&!U&&!D&&!this.finalized?new Response(n):this.#h(n,U,Wf(QO,D))};json=(n,U,D)=>{return this.#h(JSON.stringify(n),U,Wf("application/json",D))};html=(n,U,D)=>{let c=(g)=>this.#h(g,U,Wf("text/html; charset=UTF-8",D));return typeof n==="object"?hf(n,Tx.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??=()=>Lc(),this.#T(this)}};var A1="ALL",Fx="all",yx=["get","post","put","delete","options","patch","query"],v8="Can not add a route since the matcher is already built.",N8=class extends Error{};var ix="__COMPOSED_HANDLER";var VO=(n)=>{return n.text("404 Not Found",404)},Xx=(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)},Jx=class n{get;post;put;delete;options;patch;query;all;on;use;router;getPath;_basePath="/";#n="/";routes=[];constructor(U={}){[...yx,Fx].forEach((f)=>{this[f]=(h,...W)=>{if(typeof h==="string")this.#n=h;else this.#f(f,this.#n,h);return W.forEach((T)=>{this.#f(f,this.#n,T)}),this}}),this.on=(f,h,...W)=>{for(let T of[h].flat()){this.#n=T;for(let x of[f].flat())W.map((F)=>{this.#f(x.toUpperCase(),this.#n,F)})}return this},this.use=(f,...h)=>{if(typeof f==="string")this.#n=f;else this.#n="*",h.unshift(f);return h.forEach((W)=>{this.#f(A1,this.#n,W)}),this};let{strict:c,...g}=U;Object.assign(this,g),this.getPath=c??!0?U.getPath??ff:gx}#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=VO;errorHandler=Xx;route(U,D){let c=this.basePath(U);return D.routes.map((g)=>{let f;if(D.errorHandler===Xx)f=g.handler;else f=async(h,W)=>(await Df([],D.errorHandler)(h,()=>g.handler(h,W))).res,f[ix]=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 x=f(T);return Array.isArray(x)?x:[x]}:(T)=>{let x=void 0;try{x=T.executionCtx}catch{}return[T.env,x]};g||=(()=>{let T=m2(this._basePath,U),x=T==="/"?0:T.length;return(F)=>{let y=new URL(F.url);return y.pathname=this.getPath(F).slice(x)||"/",new Request(y,F)}})();let W=async(T,x)=>{let F=await D(g(T.req.raw),...h(T));if(F)return F;await x()};return this.#f(A1,m2(U,"*"),W),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),W=new xf(U,{path:f,matchResult:h,env:c,executionCtx:D,notFoundHandler:this.#D});if(h[0].length===1){let x;try{x=h[0][0][0][0](W,async()=>{W.res=await this.#D(W)})}catch(F){return this.#c(F,W)}return x instanceof Promise?x.then((F)=>F||(W.finalized?W.res:this.#D(W))).catch((F)=>this.#c(F,W)):x??this.#D(W)}let T=Df(h[0],this.errorHandler,this.#D);return(async()=>{try{let x=await T(W);if(!x.finalized)throw Error("Context is not finalized. Did you forget to return a Response object or `await next()`?");return x.res}catch(x){return this.#c(x,W)}})()}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 Cc=[];function P8(n,U){let D=this.buildAllMatchers(),c=(g,f)=>{let h=D[g]||D[A1],W=h[2][f];if(W)return W;let T=f.match(h[0]);if(!T)return[[],Cc];let x=T.indexOf("",1);return[h[1][x],T]};return this.match=c,c(n,U)}var R8="[^/]+",iD=".*",ZU="(?:|/.*)",a2=Symbol(),$x=new Set(".\\+*[^]$()");function YO(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===ZU)return U===ZU?-1:1;else if(U===iD||U===ZU)return-1;if(n===R8)return 1;else if(U===R8)return-1;return n.length===U.length?n<U?-1:1:U.length-n.length}var Qx=class n{#n;#U;#D=Object.create(null);insert(U,D,c,g,f){let h=this;for(let W=0,T=U.length;W<T;W++){let x=U[W],F=x.length===1?x==="*"?W===T-1?["","",iD]:["","",R8]:null:x==="/*"?["","",ZU]:x.match(/^\:([^\{\}]+)(?:\{(.+)\})?$/),y;if(F){let i=F[1],X=F[2]||R8;if(i&&F[2]){if(X===".*")throw a2;if(X=X.replace(/^\((?!\?:)(?=[^)]+\)$)/,"(?:"),/\((?!\?:)/.test(X))throw a2;if(X.length===1&&$x.has(X))throw a2}if(y=h.#D[X],!y){if(X!==iD&&X!==ZU){for(let $ in h.#D)if((X.length>1||$.length>1)&&$!==iD&&$!==ZU)throw a2}y=h.#D[X]=new n}if(i!=="")y.#U??=g.varIndex++,c.push([i,y.#U])}else if(y=h.#D[x],!y){for(let i in h.#D)if(i.length>1&&i!==iD&&i!==ZU)throw a2;y=h.#D[x]=new n}h=y}if(h.#n!==void 0)throw a2;h.#n=f?-1:D}buildRegExpStr(){let D=Object.keys(this.#D).sort(YO).map((c)=>{let g=this.#D[c],f=g.buildRegExpStr();return f===""?"":(typeof g.#U==="number"?`(${c})@${g.#U}`:$x.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 Tf=class{#n={varIndex:0};#U=new Qx;#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 W=!1;if(g=g.replace(/\{[^}]+\}/g,(T)=>{let x=`@\\${h}`;return c[h]=[x,T],h++,W=!0,x}),!W)break}let f=g.match(/(?::[^\/]+)|(?:\/\*$)|./g)||[];for(let h=c.length-1;h>=0;h--){let[W]=c[h];for(let T=f.length-1;T>=0;T--)if(f[T].indexOf(W)!==-1){f[T]=f[T].replace(W,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 Vx=Object.create(null);function Yx(n){return Vx[n]??=new RegExp(n==="*"?"":`^${n.replace(/\/\*$|([.\\+*[^\]$()])/g,(U,D)=>D?`\\${D}`:"(?:|/.*)")}$`)}function BO(){Vx=Object.create(null)}function u8(n,U){if(!n)return;for(let D of Object.keys(n).sort((c,g)=>g.length-c.length))if(Yx(D).test(U))return[...n[D]];return}var k8=class{name="RegExpRouter";#n;#U;#D;constructor(){this.#n={[A1]:Object.create(null)},this.#U={[A1]:Object.create(null)},this.#D={[A1]:new Tf}}#f(n,U){try{this.#D[n].insert(U,!/\*|\/:/.test(U))}catch(D){throw D===a2?new N8(U):D}}add(n,U,D){let c=this.#n,g=this.#U;if(!c||!g)throw Error(v8);if(!c[n])this.#D[n]=new Tf,[c,g].forEach((W)=>{W[n]=Object.create(null),Object.keys(W[A1]).forEach((T)=>{W[n][T]=[...W[A1][T]],this.#f(n,T)})});if(U==="/*")U="*";let f=(U.match(/\/:/g)||[]).length;if(/\*$/.test(U)){let W=Yx(U);Object.keys(c).forEach((T)=>{if((n===A1||n===T)&&!c[T][U])this.#f(T,U),c[T][U]=u8(c[T],U)||u8(c[A1],U)||[]}),Object.keys(c).forEach((T)=>{if(n===A1||n===T)Object.keys(c[T]).forEach((x)=>{W.test(x)&&c[T][x].push([D,f])})}),Object.keys(g).forEach((T)=>{if(n===A1||n===T)Object.keys(g[T]).forEach((x)=>W.test(x)&&g[T][x].push([D,f]))});return}let h=_8(U)||[U];for(let W=0,T=h.length;W<T;W++){let x=h[W];Object.keys(g).forEach((F)=>{if(n===A1||n===F){if(!g[F][x])this.#f(F,x),g[F][x]=[...u8(c[F],x)||u8(c[A1],x)||[]];g[F][x].push([D,f-T+W+1])}})}}match=P8;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,BO(),n}#c(n){let U=this.#n[n],D=this.#U[n],c=this.#D[n],g=Object.create(null),f=[];[U,D].forEach((F)=>{for(let y in F){let i=F[y],X=c.paths[y];if(!X){g[y]=[i.map(([V])=>[V,Object.create(null)]),Cc];continue}let $=X[1];f[X[0]]=i.map(([V,Y])=>{let Q=Object.create(null);Y-=1;for(;Y>=0;Y--){let[G,J]=$[Y];Q[G]=J}return[V,Q]})}});let[h,W,T]=c.buildRegExp();for(let F=0,y=f.length;F<y;F++)for(let i=0,X=f[F].length;i<X;i++){let $=f[F][i]?.[1];if(!$)continue;let V=Object.keys($);for(let Y=0,Q=V.length;Y<Q;Y++)$[V[Y]]=T[$[V[Y]]]}let x=[];for(let F in W)x[F]=f[W[F]];return[h,x,g]}};var GO=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(),Cc];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=P8};var Ff=class{name="SmartRouter";#n=[];#U=[];constructor(n){this.#n=n.routers}add(n,U,D){if(!this.#U)throw Error(v8);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 W=D[f];try{for(let T=0,x=c.length;T<x;T++)W.add(...c[T]);h=W.match(n,U)}catch(T){if(T instanceof N8)continue;throw T}this.match=W.match.bind(W),this.#n=[W],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 Ec=Object.create(null),KO=(n)=>{for(let U in n)return!0;return!1},Bx=class n{#n;#U;#D;#f=0;#c=Ec;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=Ux(D),h=[];for(let W=0,T=f.length;W<T;W++){let x=f[W],F=f[W+1],y=Dx(x,F),i=Array.isArray(y)?y[0]:x;if(i in g.#U){if(g=g.#U[i],y)h.push(y[1]);continue}if(g.#U[i]=new n,y)g.#D.push(y),h.push(y[1]);g=g.#U[i]}return g.#n.push({[U]:{handler:c,possibleKeys:h.filter((W,T,x)=>x.indexOf(W)===T),score:this.#f}}),g}#g(U,D,c,g,f){for(let h=0,W=D.#n.length;h<W;h++){let T=D.#n[h],x=T[c]||T[A1],F={};if(x!==void 0){if(x.params=Object.create(null),U.push(x),g!==Ec||f&&f!==Ec)for(let y=0,i=x.possibleKeys.length;y<i;y++){let X=x.possibleKeys[y],$=F[x.score];x.params[X]=f?.[X]&&!$?f[X]:g[X]??f?.[X],F[x.score]=!0}}}}search(U,D){let c=[];this.#c=Ec;let f=[this],h=gf(D),W=[],T=h.length,x=null;for(let F=0;F<T;F++){let y=h[F],i=F===T-1,X=[];for(let V=0,Y=f.length;V<Y;V++){let Q=f[V],G=Q.#U[y];if(G)if(G.#c=Q.#c,i){if(G.#U["*"])this.#g(c,G.#U["*"],U,Q.#c);this.#g(c,G,U,Q.#c)}else X.push(G);for(let J=0,B=Q.#D.length;J<B;J++){let z=Q.#D[J],q=Q.#c===Ec?{}:{...Q.#c};if(z==="*"){let w=Q.#U["*"];if(w)this.#g(c,w,U,Q.#c),w.#c=q,X.push(w);continue}let[Z,M,O]=z;if(!y&&!(O instanceof RegExp))continue;let _=Q.#U[Z];if(O instanceof RegExp){if(x===null){x=Array(T);let v=D[0]==="/"?1:0;for(let P=0;P<T;P++)x[P]=v,v+=h[P].length+1}let w=D.substring(x[F]),H=O.exec(w);if(H){if(q[M]=H[0],this.#g(c,_,U,Q.#c,q),H[0].length===w.length&&_.#U["*"])this.#g(c,_.#U["*"],U,Q.#c,q);if(KO(_.#U)){_.#c=q;let v=H[0].match(/\//g)?.length??0;(W[v]||=[]).push(_)}continue}}if(O===!0||O.test(y))if(q[M]=y,i){if(this.#g(c,_,U,q,Q.#c),_.#U["*"])this.#g(c,_.#U["*"],U,q,Q.#c)}else _.#c=q,X.push(_)}}let $=W.shift();f=$?X.concat($):X}if(c.length>1)c.sort((F,y)=>{return F.score-y.score});return[c.map(({handler:F,params:y})=>[F,y])]}};var yf=class{name="TrieRouter";#n;constructor(){this.#n=new Bx}add(n,U,D){let c=_8(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 Xf=class extends Jx{constructor(n={}){super(n);this.router=n.router??new Ff({routers:[new k8,new yf]})}};import{getAgentDir as $s}from"@earendil-works/pi-coding-agent";import{isIP as Gx}from"node:net";function Kx(n){return(n.startsWith("[")&&n.endsWith("]")?n.slice(1,-1):n).toLowerCase().replace(/\.$/,"")}function Zx(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 Kx(U.hostname)}catch{return null}}function ZO(n){let U=n?.trim();if(!U)return null;return Gx(U)?Kx(U):Zx(U)}function bO(n){return n==="localhost"||n.endsWith(".localhost")}function bx(){return[process.env.PI_WEB_HOSTNAME,...process.env.PI_WEB_ALLOWED_HOSTS?.split(",")??[]].filter((n)=>Boolean(n?.trim()))}function zx(n){try{return new URL(n).origin}catch{return null}}function zO(n){let U=new URL(n.url),D=n.headers.get("host");return D?zx(`${U.protocol}//${D}`):null}function OO(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 Jf(n,U=bx()){let D=n.headers.get("host"),c=D?Zx(D):null;if(!c)return!1;if(bO(c)||Gx(c))return!0;return U.some((g)=>ZO(g)===c)}function qO(n){let U=n.headers.get("origin");if(n.headers.get("sec-fetch-site")==="cross-site")return!1;if(!U)return!0;let c=zO(n);return c!==null&&zx(U)===c}function MO(n){return n.headers.has("origin")||n.headers.has("sec-fetch-site")}function U2(n,U=bx()){if(!Jf(n,U))return!1;if(OO(n))return!0;return!MO(n)||qO(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 AO,timingSafeEqual as HO}from"node:crypto";var LO="pi";function Ox(n){return AO("sha256").update(n,"utf8").digest()}function qx(n,U){return HO(Ox(n),Ox(U))}function $f(n=process.env.PI_WEB_PASSWORD){return typeof n==="string"&&n.length>0}function Mx(n,U=process.env.PI_WEB_PASSWORD){if(!$f(U)||!n)return!1;let D=/^Basic\s+(\S+)$/i.exec(n);if(!D)return!1;let c;try{let x=Buffer.from(D[1],"base64");if(x.toString("base64")!==D[1])return!1;c=new TextDecoder("utf-8",{fatal:!0}).decode(x)}catch{return!1}let g=c.indexOf(":");if(g===-1)return!1;let f=c.slice(0,g),h=c.slice(g+1),W=qx(f,LO),T=qx(h,U);return W&&T}class Qf 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,Ax=performance.now();function Hx(n){if(Vf=n,Ax=performance.now(),Vf)Lx("boot","debug log enabled")}function bU(n){return(U,D)=>Lx(n,U,D)}function Lx(n,U,D){if(!Vf)return;let c=performance.now()-Ax,g=new Date,f=(W,T=2)=>String(W).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 CO=bU("mount"),EO=["GET","POST","PUT","PATCH","DELETE"];function n1(n,U,D){let c=U.split("/").filter(Boolean),g=[],f=new Map;for(let W of c){let T=W.match(/^\[\.\.\.(.+)\]$/),x=W.match(/^\[(.+)\]$/);if(T)g.push(`:${T[1]}{.+}`),f.set(T[1],{hono:T[1],catchAll:!0});else if(x)g.push(`:${x[1]}`),f.set(x[1],{hono:x[1],catchAll:!1});else g.push(W)}let h=`/${g.join("/")}`;for(let W of EO){let T=D[W];if(typeof T!=="function")continue;let x=T;n.on(W,h,async(F)=>{let y=performance.now(),i={};for(let[$,{hono:V,catchAll:Y}]of f)if(Y){let Q=F.req.param(V)??"";i[$]=Q===""?[]:Q.split("/")}else i[$]=F.req.param(V)??"";let X=await x(new Qf(F.req.raw),{params:Promise.resolve(i)});return CO(`${W} ${F.req.path}`,`${X.status} ${Math.round(performance.now()-y)}ms`),X})}}var Cf={};U1(Cf,{GET:()=>Gq});import{tmpdir as Yq}from"node:os";import{Readable as Bq}from"node:stream";import{constants as Yf}from"node:fs";import{lstat as wO,open as jO}from"node:fs/promises";import{basename as IO,dirname as _O,resolve as Cx}from"node:path";var d8=5242880;function Ex(n,U){let D=Cx(n);if(_O(D)!==Cx(U))return null;if(!/^pi-bash-[A-Za-z0-9_-]+\.log$/.test(IO(D)))return null;return D}async function Bf(n){if(!(await wO(n)).isFile())throw Error("Bash output path is not a regular file");let D=typeof Yf.O_NOFOLLOW==="number"?Yf.O_NOFOLLOW:0,c=await jO(n,Yf.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 wx(n,U=d8){let{handle:D,fileInfo:c}=await Bf(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 ux,readFile as lO,readdir as tO}from"node:fs/promises";import{existsSync as eO,readdirSync as sO}from"node:fs";import{join as a8,normalize as Of}from"node:path";import{getAgentDir as nq,buildContextEntries as Uq,buildSessionContext as Dq,SessionManager as kx}from"@earendil-works/pi-coding-agent";function SO(n){return typeof n==="object"&&n!==null&&!Array.isArray(n)}function vO(n){if(!SO(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 Gf(n){if(n.role!=="assistant")return n;let U=n.content;if(!Array.isArray(U))return n;let D=U.map((c)=>{return vO(c)??c});return{...n,content:D}}import jx from"node:path";function Cn(n,U=process.platform){let D=U==="win32"?jx.win32.normalize(n):jx.posix.normalize(n);return U==="win32"?D.toLowerCase():D}import{execFile as NO}from"node:child_process";import{existsSync as p8,mkdirSync as PO,realpathSync as RO}from"node:fs";import{basename as uO,dirname as Zf,join as _x,resolve as kO}from"node:path";import{promisify as dO}from"node:util";function u1(n){let U=n.replace(/\\/g,"/");return/^[a-zA-Z]:$/.test(U)?`${U}/`:U}function Kf(){if(!globalThis.__piAdditionalAllowedRoots)globalThis.__piAdditionalAllowedRoots=new Set;return globalThis.__piAdditionalAllowedRoots}function On(n){if(!n)return;let U=u1(n);Kf().add(U),globalThis.__piAllowedRootsCache?.roots.add(U)}var pO=dO(NO),Ix=60000;function mO(){if(!globalThis.__piProjectCache)globalThis.__piProjectCache=new Map;return globalThis.__piProjectCache}function Sx(){globalThis.__piProjectCache?.clear()}async function zU(n,U){let{stdout:D}=await pO("git",["-C",n,...U],{timeout:1e4,maxBuffer:1048576,env:{...process.env,LC_ALL:"C"}});return D.trim()}function aO(n){let U=Zf(n);if(!U.endsWith("-worktrees"))return null;let D=U.slice(0,-10);if(!D||!p8(_x(D,".git")))return null;return{projectRoot:D,branch:uO(n),isWorktree:!0,isTopLevel:!0}}async function m8(n){let U=mO(),D=U.get(n);if(D&&D.expiresAt>Date.now())return D.info;let c;try{if(!p8(n))return c=aO(n)??{projectRoot:n,branch:null,isWorktree:!1,isTopLevel:!1},U.set(n,{info:c,expiresAt:Date.now()+Ix}),c;let g=await zU(n,["rev-parse","--path-format=absolute","--git-common-dir","--git-dir","--show-toplevel","--abbrev-ref","HEAD"]),[f,h,W,T]=g.split(`
|
|
253
253
|
`).map((i)=>i.trim()),x=n;try{x=RO(n)}catch{}let F=W===x,y=h!==f&&F;c={projectRoot:y?Zf(f):n,branch:T&&T!=="HEAD"?T:null,isWorktree:y,isTopLevel:F}}catch{c={projectRoot:n,branch:null,isWorktree:!1,isTopLevel:!1}}return U.set(n,{info:c,expiresAt:Date.now()+Ix}),c}async function oO(n){let U=await zU(n,["rev-parse","--path-format=absolute","--git-common-dir"]);return Zf(U)}async function bf(n){let U=await zU(n,["worktree","list","--porcelain"]),D=[],c=null,g=()=>{if(c?.path){if(!c.prunable&&p8(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 rO(n){return n.replace(/[/\\:*?"<>|\s]+/g,"-").replace(/^-+|-+$/g,"")}async function vx(n,U){let D=U.trim();if(!D)throw Error("Branch name is required");let c=rO(D);if(!c)throw Error(`Invalid branch name: ${U}`);let g=await oO(n),f=`${kO(g)}-worktrees`,h=_x(f,c);if(p8(h))throw Error(`Directory already exists: ${h}`);PO(f,{recursive:!0});let W=!1;try{await zU(g,["rev-parse","--verify","--quiet",`refs/heads/${D}`]),W=!0}catch{W=!1}try{if(W)await zU(g,["worktree","add","--",h,D]);else await zU(g,["worktree","add","-b",D,"--",h])}catch(T){throw Error(Px(T),{cause:T})}return On(h),Sx(),{path:h,branch:D}}async function Nx(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(Px(f),{cause:f})}Sx()}function Px(n){let U=n.stderr;if(typeof U==="string"&&U.trim())return U.trim();return n instanceof Error?n.message:String(n)}async function cq(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 m8(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 gq(){let n=await dx(a8(nq(),"sessions"));for(let U of n)o2(U.id,U.path);return n}async function fq(n){let U=[],D=async(c)=>{let g;try{g=await tO(c,{withFileTypes:!0})}catch{return}for(let f of g){let h=a8(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 hq(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 Wq(n){let U=await lO(n,"utf8"),D=[];for(let x of U.split(`
|
|
255
255
|
`)){let F=x.trim();if(!F)continue;try{let y=JSON.parse(F);if(y&&typeof y==="object")D.push(y)}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="",W,T;for(let x of D){let F=x;if(F.type==="session_info"){let $=F.name;if(typeof $==="string"&&$.trim())W=$.trim();continue}if(F.type!=="message")continue;f++;let y=F.message;if(!y||y.role!=="user"&&y.role!=="assistant")continue;let i=typeof y.timestamp==="number"?y.timestamp:new Date(F.timestamp).getTime();if(typeof i==="number"&&!Number.isNaN(i))T=Math.max(T??0,i);if(y.role==="user"&&!h){let $=hq(y);if($)h=$}}return{path:n,id:c.id,cwd:typeof c.cwd==="string"?c.cwd:"",name:W,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 xq(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 Tq(n){try{let U=await ux(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-DFnY3XXj.js";import{y as e}from"./mermaid-parser.core-CloxS80R.js";export{e as createArchitectureServices};
|