@rainmanhhh/pi-web 0.9.0 → 0.10.0

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.
Files changed (83) hide show
  1. package/dist/server.mjs +1 -1
  2. package/dist/static/assets/architecture-YZFGNWBL-DkzoGEvJ.js +1 -0
  3. package/dist/static/assets/{architectureDiagram-Q4EWVU46-CepQmwd9.js → architectureDiagram-Q4EWVU46-62PDFjsT.js} +1 -1
  4. package/dist/static/assets/{blockDiagram-DXYQGD6D-DM6fBh6J.js → blockDiagram-DXYQGD6D-Dx8qXCPh.js} +1 -1
  5. package/dist/static/assets/{c4Diagram-AHTNJAMY-CsV0-G7f.js → c4Diagram-AHTNJAMY-czJe0shB.js} +1 -1
  6. package/dist/static/assets/channel-BXsKrjRL.js +1 -0
  7. package/dist/static/assets/{chunk-4TB4RGXK-C4AJN_rs.js → chunk-4TB4RGXK-B8cxmEYq.js} +1 -1
  8. package/dist/static/assets/{chunk-5FUZZQ4R-BbLBlovZ.js → chunk-5FUZZQ4R-DYPo1pUJ.js} +1 -1
  9. package/dist/static/assets/{chunk-5PVQY5BW-C0Ke6c9z.js → chunk-5PVQY5BW-C2D9dpo8.js} +1 -1
  10. package/dist/static/assets/{chunk-EDXVE4YY-B7pKDVW3.js → chunk-EDXVE4YY-DSKDKKsy.js} +1 -1
  11. package/dist/static/assets/{chunk-ENJZ2VHE-C_qCY_1d.js → chunk-ENJZ2VHE-Cmf9wkT9.js} +1 -1
  12. package/dist/static/assets/{chunk-ICPOFSXX-GO7mD4si.js → chunk-ICPOFSXX-BhTkHl2F.js} +1 -1
  13. package/dist/static/assets/{chunk-K5T4RW27-DpNBLPBn.js → chunk-K5T4RW27-wF3yQwi7.js} +1 -1
  14. package/dist/static/assets/{chunk-OYMX7WX6-DdL9N2BH.js → chunk-OYMX7WX6-CvCy0gWi.js} +1 -1
  15. package/dist/static/assets/{chunk-U2HBQHQK-CL5_cUoi.js → chunk-U2HBQHQK-CiyJF6Oy.js} +1 -1
  16. package/dist/static/assets/{chunk-X2U36JSP-D7U2ggxq.js → chunk-X2U36JSP-q3AsYcpv.js} +1 -1
  17. package/dist/static/assets/{chunk-YZCP3GAM-vePKcLvm.js → chunk-YZCP3GAM-C3vPfjP9.js} +1 -1
  18. package/dist/static/assets/{chunk-ZZ45TVLE-Q63F4PKi.js → chunk-ZZ45TVLE-Bf5BRvHn.js} +1 -1
  19. package/dist/static/assets/classDiagram-6PBFFD2Q-C21XTpMd.js +1 -0
  20. package/dist/static/assets/classDiagram-v2-HSJHXN6E-C21XTpMd.js +1 -0
  21. package/dist/static/assets/clone-CkYm7wr9.js +1 -0
  22. package/dist/static/assets/{dagre-6pJbXBwH.js → dagre-C3Mnk3nz.js} +1 -1
  23. package/dist/static/assets/{dagre-KV5264BT-BJyP1auN.js → dagre-KV5264BT-DXfNIK-t.js} +1 -1
  24. package/dist/static/assets/{diagram-5BDNPKRD-DFxiU2EJ.js → diagram-5BDNPKRD-ClER8Mwr.js} +1 -1
  25. package/dist/static/assets/{diagram-G4DWMVQ6-BIDNJM-q.js → diagram-G4DWMVQ6-COCUYENa.js} +1 -1
  26. package/dist/static/assets/{diagram-MMDJMWI5-Ci_j3cKx.js → diagram-MMDJMWI5-Byd8_F1r.js} +1 -1
  27. package/dist/static/assets/{diagram-TYMM5635-C0PmTqCg.js → diagram-TYMM5635-Cbkp1Ymx.js} +1 -1
  28. package/dist/static/assets/{erDiagram-SMLLAGMA-1BYkjsb3.js → erDiagram-SMLLAGMA-k_IGMyiB.js} +1 -1
  29. package/dist/static/assets/{flatten-C82IZOe8.js → flatten-D3-Hu84F.js} +1 -1
  30. package/dist/static/assets/{flowDiagram-DWJPFMVM-CEpAmUgJ.js → flowDiagram-DWJPFMVM-C5YebBBp.js} +1 -1
  31. package/dist/static/assets/{ganttDiagram-T4ZO3ILL-BM0M3-l6.js → ganttDiagram-T4ZO3ILL-CMEibCZ8.js} +1 -1
  32. package/dist/static/assets/gitGraph-7Q5UKJZL-Bznd6cmv.js +1 -0
  33. package/dist/static/assets/{gitGraphDiagram-UUTBAWPF-Co_v6pTU.js → gitGraphDiagram-UUTBAWPF-Be92XfIL.js} +1 -1
  34. package/dist/static/assets/{graphlib-Bvx89xlV.js → graphlib-DKIpiH0z.js} +1 -1
  35. package/dist/static/assets/{highlighted-body-OFNGDK62-Jz8-dX-g.js → highlighted-body-OFNGDK62-nmzAwvKZ.js} +1 -1
  36. package/dist/static/assets/index-BuD-dZQh.css +1 -0
  37. package/dist/static/assets/{index-DJQBI_ho.js → index-waG5aDzz.js} +125 -124
  38. package/dist/static/assets/info-OMHHGYJF-YFBlQoqV.js +1 -0
  39. package/dist/static/assets/{infoDiagram-42DDH7IO-B1K2Gxno.js → infoDiagram-42DDH7IO-BjllAV5t.js} +1 -1
  40. package/dist/static/assets/{ishikawaDiagram-UXIWVN3A-BeBWyTpn.js → ishikawaDiagram-UXIWVN3A-T7cGIphU.js} +1 -1
  41. package/dist/static/assets/{journeyDiagram-VCZTEJTY-CastltpM.js → journeyDiagram-VCZTEJTY-D4uc80Tx.js} +1 -1
  42. package/dist/static/assets/{kanban-definition-6JOO6SKY-BSiZBnAh.js → kanban-definition-6JOO6SKY-mDkTssKv.js} +1 -1
  43. package/dist/static/assets/{line-B9eInJAa.js → line-DJNVxq8v.js} +1 -1
  44. package/dist/static/assets/mermaid-GHXKKRXX-CyVzSlcp.js +1 -0
  45. package/dist/static/assets/{mermaid-parser.core-BujAZvMv.js → mermaid-parser.core-CHWXDn3r.js} +2 -2
  46. package/dist/static/assets/{mermaid.core-BPQk2kFy.js → mermaid.core-DYWByRwk.js} +4 -4
  47. package/dist/static/assets/{mindmap-definition-QFDTVHPH-zRRdmNRY.js → mindmap-definition-QFDTVHPH-Dxofbtsk.js} +1 -1
  48. package/dist/static/assets/packet-4T2RLAQJ-DNYtghrG.js +1 -0
  49. package/dist/static/assets/pie-ZZUOXDRM-CF61uLIT.js +1 -0
  50. package/dist/static/assets/{pieDiagram-DEJITSTG-BDQFQmx9.js → pieDiagram-DEJITSTG-BOy3rBVe.js} +1 -1
  51. package/dist/static/assets/{quadrantDiagram-34T5L4WZ-CV-BbvM6.js → quadrantDiagram-34T5L4WZ-BwPri_BA.js} +1 -1
  52. package/dist/static/assets/radar-PYXPWWZC-DfEqRxad.js +1 -0
  53. package/dist/static/assets/{reduce-DWz7mvMR.js → reduce-BMeQr176.js} +1 -1
  54. package/dist/static/assets/{requirementDiagram-MS252O5E-DO-JGx2u.js → requirementDiagram-MS252O5E-CTyZdXEI.js} +1 -1
  55. package/dist/static/assets/{sankeyDiagram-XADWPNL6-BZJsg5RC.js → sankeyDiagram-XADWPNL6-6WbgyuD6.js} +1 -1
  56. package/dist/static/assets/{sequenceDiagram-FGHM5R23-DutrYGYT.js → sequenceDiagram-FGHM5R23-CGPCTU5V.js} +1 -1
  57. package/dist/static/assets/{stateDiagram-FHFEXIEX-CHOe-Kj8.js → stateDiagram-FHFEXIEX-Cp_qcEDx.js} +1 -1
  58. package/dist/static/assets/stateDiagram-v2-QKLJ7IA2-Dzt7hTIe.js +1 -0
  59. package/dist/static/assets/{timeline-definition-GMOUNBTQ-Dd1WN3Fi.js → timeline-definition-GMOUNBTQ-BXKTAS5X.js} +1 -1
  60. package/dist/static/assets/treeView-SZITEDCU-DM2IX42I.js +1 -0
  61. package/dist/static/assets/treemap-W4RFUUIX-blr89NrW.js +1 -0
  62. package/dist/static/assets/{vennDiagram-DHZGUBPP-Ddm0FH0W.js → vennDiagram-DHZGUBPP-C2zpcIK2.js} +1 -1
  63. package/dist/static/assets/wardley-RL74JXVD-1E4hlKE6.js +1 -0
  64. package/dist/static/assets/{wardleyDiagram-NUSXRM2D-BOzh-dCL.js → wardleyDiagram-NUSXRM2D-VghDQ2Ca.js} +1 -1
  65. package/dist/static/assets/{xychartDiagram-5P7HB3ND-Lwb-GUjU.js → xychartDiagram-5P7HB3ND-DzUoa_lo.js} +1 -1
  66. package/dist/static/index.html +2 -2
  67. package/package.json +3 -1
  68. package/dist/static/assets/architecture-YZFGNWBL-BWt1VfOJ.js +0 -1
  69. package/dist/static/assets/channel-C_eVd27M.js +0 -1
  70. package/dist/static/assets/classDiagram-6PBFFD2Q-DTn1kdub.js +0 -1
  71. package/dist/static/assets/classDiagram-v2-HSJHXN6E-DTn1kdub.js +0 -1
  72. package/dist/static/assets/clone-C_mVuHy8.js +0 -1
  73. package/dist/static/assets/gitGraph-7Q5UKJZL-nDOqN8ui.js +0 -1
  74. package/dist/static/assets/index-BbRu2AMb.css +0 -1
  75. package/dist/static/assets/info-OMHHGYJF-DW3U9eT2.js +0 -1
  76. package/dist/static/assets/mermaid-GHXKKRXX-Cd85wDAq.js +0 -1
  77. package/dist/static/assets/packet-4T2RLAQJ-XPBybydT.js +0 -1
  78. package/dist/static/assets/pie-ZZUOXDRM-BaAWF3Tl.js +0 -1
  79. package/dist/static/assets/radar-PYXPWWZC-BJ8lXi3f.js +0 -1
  80. package/dist/static/assets/stateDiagram-v2-QKLJ7IA2-DuOV9_f7.js +0 -1
  81. package/dist/static/assets/treeView-SZITEDCU-mBzlyBey.js +0 -1
  82. package/dist/static/assets/treemap-W4RFUUIX-D6HVcSYp.js +0 -1
  83. package/dist/static/assets/wardley-RL74JXVD-Td5yeK1U.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 t3(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=e3(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=e3(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 Mg(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 Sx(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 Nx(){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 ms=new yD;var Px={name:"@rainmanhhh/pi-web",version:"0.9.0",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",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","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-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 db}from"@earendil-works/pi-coding-agent";var Rx={port:31415};var nf=(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 ux=Symbol();var dx=(n,U)=>{return new Response(n,{headers:{"Content-Type":U.replace(/^[^;]+/,(c)=>c.toLowerCase())}}).formData()};var Hg=(n)=>("headers"in n),px=async(n,U=Object.create(null))=>{let{all:D=!1,dot:c=!1}=U,h=(Hg(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 oz(n,{all:D,dot:c});return{}};async function oz(n,U){if(!Hg(n)&&n.bodyCache.formData)return kx(await n.bodyCache.formData,U);let D=Hg(n)?n.headers:n.raw.headers,c=await n.arrayBuffer(),g=dx(c,D.get("Content-Type")||"");if(!Hg(n))n.bodyCache.formData=g;let f=await g;if(f)return kx(f,U);return{}}function kx(n,U){let D=Object.create(null);if(n.forEach((c,g)=>{if(!(U.all||g.endsWith("[]")))D[g]=c;else rz(D,g,c)}),U.dot)Object.entries(D).forEach(([c,g])=>{if(c.includes("."))lz(D,c,g),delete D[c]});return D}var rz=(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]},lz=(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 Df=(n)=>{let U=n.split("/");if(U[0]==="")U.shift();return U},mx=(n)=>{let{groups:U,path:D}=tz(n),c=Df(D);return ez(c,U)},tz=(n)=>{let U=[];return n=n.replace(/\{[^}]+\}/g,(D,c)=>{let g=`@${c}`;return U.push([g,D]),g}),{groups:U,path:n}},ez=(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},Cg={},ax=(n,U)=>{if(n==="*")return"*";let D=n.match(/^\:([^\{\}]+)(?:\{(.+)\})?$/);if(D){let c=`${n}#${U}`;if(!Cg[c])if(D[2])Cg[c]=U&&U[0]!==":"&&U[0]!=="*"?[c,D[1],new RegExp(`^${D[2]}(?=/${U})`)]:[n,D[1],new RegExp(`^${D[2]}$`)];else Cg[c]=[n,D[1],!0];return Cg[c]}return null},ox=(n,U)=>{try{return U(n)}catch{return n.replace(/(?:%[0-9A-Fa-f]{2})+/g,(D)=>{try{return U(D)}catch{return D}})}},sz=(n)=>ox(n,decodeURI),cf=(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 sz(T.includes("%25")?T.replace(/%25/g,"%2525"):T)}else if(g===63||g===35)break}return U.slice(D,c)};var rx=(n)=>{let U=cf(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}`}`},Eg=(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)},wg=(n)=>n.indexOf("%")!==-1?ox(n,nO):n,Uf=(n)=>{if(n.indexOf("+")!==-1)n=n.replace(/\+/g," ");return wg(n)},lx=(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 Uf(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=Uf(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=Uf(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},tx=lx,ex=(n,U)=>{return lx(n,U,!0)},nO=decodeURIComponent;var sx=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&&wg(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]=wg(c)}return n}#c(n){return this.#U[1]?this.#U[1][n]:n}query(n){return tx(this.url,n)}queries(n){return ex(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 px(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[ux](){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 nW={Stringify:1,BeforeStream:2,Stream:3},UO=(n,U)=>{let D=new String(n);return D.isEscaped=!0,D.callbacks=U,D};var gf=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)=>gf(T,U,!1,c,g))).then(()=>g[0]));if(D)return UO(await h,f);else return h};var DO="text/plain; charset=UTF-8",ff=(n,U)=>{return{"Content-Type":n,...U}},Ac=(n,U)=>new Response(n,U),hf=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 sx(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||=Ac(null,{headers:this.#x??=new Headers})}set res(n){if(this.#g&&n){n=Ac(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=Ac(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 Ac(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,ff(DO,D))};json=(n,U,D)=>{return this.#h(JSON.stringify(n),U,ff("application/json",D))};html=(n,U,D)=>{let c=(g)=>this.#h(g,U,ff("text/html; charset=UTF-8",D));return typeof n==="object"?gf(n,nW.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??=()=>Ac(),this.#T(this)}};var A1="ALL",UW="all",DW=["get","post","put","delete","options","patch","query"],jg="Can not add a route since the matcher is already built.",Ig=class extends Error{};var cW="__COMPOSED_HANDLER";var cO=(n)=>{return n.text("404 Not Found",404)},gW=(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)},fW=class n{get;post;put;delete;options;patch;query;all;on;use;router;getPath;_basePath="/";#n="/";routes=[];constructor(U={}){[...DW,UW].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??cf:rx}#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=cO;errorHandler=gW;route(U,D){let c=this.basePath(U);return D.routes.map((g)=>{let f;if(D.errorHandler===gW)f=g.handler;else f=async(h,x)=>(await nf([],D.errorHandler)(h,()=>g.handler(h,x))).res,f[cW]=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 hf(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=nf(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 _g(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 vg="[^/]+",FD=".*",ZU="(?:|/.*)",a2=Symbol(),hW=new Set(".\\+*[^]$()");function gO(n,U){if(n.length===1)return U.length===1?n<U?-1:1:-1;if(U.length===1)return 1;if(n===FD||n===ZU)return U===ZU?-1:1;else if(U===FD||U===ZU)return-1;if(n===vg)return 1;else if(U===vg)return-1;return n.length===U.length?n<U?-1:1:U.length-n.length}var xW=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?["","",FD]:["","",vg]:null:W==="/*"?["","",ZU]:W.match(/^\:([^\{\}]+)(?:\{(.+)\})?$/),F;if(y){let i=y[1],X=y[2]||vg;if(i&&y[2]){if(X===".*")throw a2;if(X=X.replace(/^\((?!\?:)(?=[^)]+\)$)/,"(?:"),/\((?!\?:)/.test(X))throw a2;if(X.length===1&&hW.has(X))throw a2}if(F=h.#D[X],!F){if(X!==FD&&X!==ZU){for(let $ in h.#D)if((X.length>1||$.length>1)&&$!==FD&&$!==ZU)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!==FD&&i!==ZU)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(gO).map((c)=>{let g=this.#D[c],f=g.buildRegExpStr();return f===""?"":(typeof g.#U==="number"?`(${c})@${g.#U}`:hW.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 xf=class{#n={varIndex:0};#U=new xW;#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 WW=Object.create(null);function TW(n){return WW[n]??=new RegExp(n==="*"?"":`^${n.replace(/\/\*$|([.\\+*[^\]$()])/g,(U,D)=>D?`\\${D}`:"(?:|/.*)")}$`)}function fO(){WW=Object.create(null)}function Sg(n,U){if(!n)return;for(let D of Object.keys(n).sort((c,g)=>g.length-c.length))if(TW(D).test(U))return[...n[D]];return}var Ng=class{name="RegExpRouter";#n;#U;#D;constructor(){this.#n={[A1]:Object.create(null)},this.#U={[A1]:Object.create(null)},this.#D={[A1]:new xf}}#f(n,U){try{this.#D[n].insert(U,!/\*|\/:/.test(U))}catch(D){throw D===a2?new Ig(U):D}}add(n,U,D){let c=this.#n,g=this.#U;if(!c||!g)throw Error(jg);if(!c[n])this.#D[n]=new xf,[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=TW(U);Object.keys(c).forEach((T)=>{if((n===A1||n===T)&&!c[T][U])this.#f(T,U),c[T][U]=Sg(c[T],U)||Sg(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=Eg(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]=[...Sg(c[y],W)||Sg(c[A1],W)||[]];g[y][W].push([D,f-T+x+1])}})}}match=_g;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,fO(),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 hO=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=_g};var Wf=class{name="SmartRouter";#n=[];#U=[];constructor(n){this.#n=n.routers}add(n,U,D){if(!this.#U)throw Error(jg);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 Ig)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 Hc=Object.create(null),xO=(n)=>{for(let U in n)return!0;return!1},yW=class n{#n;#U;#D;#f=0;#c=Hc;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=mx(D),h=[];for(let x=0,T=f.length;x<T;x++){let W=f[x],y=f[x+1],F=ax(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!==Hc||f&&f!==Hc)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=Hc;let f=[this],h=Df(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===Hc?{}:{...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[Z,M,O]=z;if(!F&&!(O instanceof RegExp))continue;let _=V.#U[Z];if(O instanceof RegExp){if(W===null){W=Array(T);let S=D[0]==="/"?1:0;for(let P=0;P<T;P++)W[P]=S,S+=h[P].length+1}let w=D.substring(W[y]),L=O.exec(w);if(L){if(q[M]=L[0],this.#g(c,_,U,V.#c,q),L[0].length===w.length&&_.#U["*"])this.#g(c,_.#U["*"],U,V.#c,q);if(xO(_.#U)){_.#c=q;let S=L[0].match(/\//g)?.length??0;(x[S]||=[]).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 Tf=class{name="TrieRouter";#n;constructor(){this.#n=new yW}add(n,U,D){let c=Eg(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 yf=class extends fW{constructor(n={}){super(n);this.router=n.router??new Wf({routers:[new Ng,new Tf]})}};import{getAgentDir as le}from"@earendil-works/pi-coding-agent";import{isIP as FW}from"node:net";function iW(n){return(n.startsWith("[")&&n.endsWith("]")?n.slice(1,-1):n).toLowerCase().replace(/\.$/,"")}function XW(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 iW(U.hostname)}catch{return null}}function WO(n){let U=n?.trim();if(!U)return null;return FW(U)?iW(U):XW(U)}function TO(n){return n==="localhost"||n.endsWith(".localhost")}function JW(){return[process.env.PI_WEB_HOSTNAME,...process.env.PI_WEB_ALLOWED_HOSTS?.split(",")??[]].filter((n)=>Boolean(n?.trim()))}function $W(n){try{return new URL(n).origin}catch{return null}}function yO(n){let U=new URL(n.url),D=n.headers.get("host");return D?$W(`${U.protocol}//${D}`):null}function FO(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 Ff(n,U=JW()){let D=n.headers.get("host"),c=D?XW(D):null;if(!c)return!1;if(TO(c)||FW(c))return!0;return U.some((g)=>WO(g)===c)}function iO(n){let U=n.headers.get("origin");if(n.headers.get("sec-fetch-site")==="cross-site")return!1;if(!U)return!0;let c=yO(n);return c!==null&&$W(U)===c}function XO(n){return n.headers.has("origin")||n.headers.has("sec-fetch-site")}function U2(n,U=JW()){if(!Ff(n,U))return!1;if(FO(n))return!0;return!XO(n)||iO(n)}function iD(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 JO,timingSafeEqual as $O}from"node:crypto";var VO="pi";function VW(n){return JO("sha256").update(n,"utf8").digest()}function QW(n,U){return $O(VW(n),VW(U))}function Xf(n=process.env.PI_WEB_PASSWORD){return typeof n==="string"&&n.length>0}function YW(n,U=process.env.PI_WEB_PASSWORD){if(!Xf(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=QW(f,VO),T=QW(h,U);return x&&T}class Jf 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 $f=!1,BW=performance.now();function GW(n){if($f=n,BW=performance.now(),$f)KW("boot","debug log enabled")}function XD(n){return(U,D)=>KW(n,U,D)}function KW(n,U,D){if(!$f)return;let c=performance.now()-BW,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 QO=XD("mount"),YO=["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 YO){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 Jf(y.req.raw),{params:Promise.resolve(i)});return QO(`${x} ${y.req.path}`,`${X.status} ${Math.round(performance.now()-F)}ms`),X})}}var Lf={};U1(Lf,{GET:()=>hq});import{tmpdir as gq}from"node:os";import{Readable as fq}from"node:stream";import{constants as Vf}from"node:fs";import{lstat as BO,open as GO}from"node:fs/promises";import{basename as KO,dirname as ZO,resolve as ZW}from"node:path";var Pg=5242880;function bW(n,U){let D=ZW(n);if(ZO(D)!==ZW(U))return null;if(!/^pi-bash-[A-Za-z0-9_-]+\.log$/.test(KO(D)))return null;return D}async function Qf(n){if(!(await BO(n)).isFile())throw Error("Bash output path is not a regular file");let D=typeof Vf.O_NOFOLLOW==="number"?Vf.O_NOFOLLOW:0,c=await GO(n,Vf.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 zW(n,U=Pg){let{handle:D,fileInfo:c}=await Qf(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 wW,readFile as _O,readdir as vO}from"node:fs/promises";import{existsSync as SO,readdirSync as NO}from"node:fs";import{join as dg,normalize as bf}from"node:path";import{getAgentDir as PO,buildContextEntries as RO,buildSessionContext as uO,SessionManager as jW}from"@earendil-works/pi-coding-agent";function bO(n){return typeof n==="object"&&n!==null&&!Array.isArray(n)}function zO(n){if(!bO(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 Yf(n){if(n.role!=="assistant")return n;let U=n.content;if(!Array.isArray(U))return n;let D=U.map((c)=>{return zO(c)??c});return{...n,content:D}}import OW from"node:path";function Cn(n,U=process.platform){let D=U==="win32"?OW.win32.normalize(n):OW.posix.normalize(n);return U==="win32"?D.toLowerCase():D}import{execFile as OO}from"node:child_process";import{existsSync as Rg,mkdirSync as qO,realpathSync as MO}from"node:fs";import{basename as AO,dirname as Gf,join as MW,resolve as LO}from"node:path";import{promisify as HO}from"node:util";function R1(n){let U=n.replace(/\\/g,"/");return/^[a-zA-Z]:$/.test(U)?`${U}/`:U}function Bf(){if(!globalThis.__piAdditionalAllowedRoots)globalThis.__piAdditionalAllowedRoots=new Set;return globalThis.__piAdditionalAllowedRoots}function On(n){if(!n)return;let U=R1(n);Bf().add(U),globalThis.__piAllowedRootsCache?.roots.add(U)}var CO=HO(OO),qW=60000;function EO(){if(!globalThis.__piProjectCache)globalThis.__piProjectCache=new Map;return globalThis.__piProjectCache}function AW(){globalThis.__piProjectCache?.clear()}async function bU(n,U){let{stdout:D}=await CO("git",["-C",n,...U],{timeout:1e4,maxBuffer:1048576,env:{...process.env,LC_ALL:"C"}});return D.trim()}function wO(n){let U=Gf(n);if(!U.endsWith("-worktrees"))return null;let D=U.slice(0,-10);if(!D||!Rg(MW(D,".git")))return null;return{projectRoot:D,branch:AO(n),isWorktree:!0,isTopLevel:!0}}async function ug(n){let U=EO(),D=U.get(n);if(D&&D.expiresAt>Date.now())return D.info;let c;try{if(!Rg(n))return c=wO(n)??{projectRoot:n,branch:null,isWorktree:!1,isTopLevel:!1},U.set(n,{info:c,expiresAt:Date.now()+qW}),c;let g=await bU(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 Sx(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 Nx(){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 ms=new yD;var Px={name:"@rainmanhhh/pi-web",version:"0.10.0",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",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 db}from"@earendil-works/pi-coding-agent";var Rx={port:31415};var nf=(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 ux=Symbol();var dx=(n,U)=>{return new Response(n,{headers:{"Content-Type":U.replace(/^[^;]+/,(c)=>c.toLowerCase())}}).formData()};var Hg=(n)=>("headers"in n),px=async(n,U=Object.create(null))=>{let{all:D=!1,dot:c=!1}=U,h=(Hg(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 oz(n,{all:D,dot:c});return{}};async function oz(n,U){if(!Hg(n)&&n.bodyCache.formData)return kx(await n.bodyCache.formData,U);let D=Hg(n)?n.headers:n.raw.headers,c=await n.arrayBuffer(),g=dx(c,D.get("Content-Type")||"");if(!Hg(n))n.bodyCache.formData=g;let f=await g;if(f)return kx(f,U);return{}}function kx(n,U){let D=Object.create(null);if(n.forEach((c,g)=>{if(!(U.all||g.endsWith("[]")))D[g]=c;else rz(D,g,c)}),U.dot)Object.entries(D).forEach(([c,g])=>{if(c.includes("."))lz(D,c,g),delete D[c]});return D}var rz=(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]},lz=(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 Df=(n)=>{let U=n.split("/");if(U[0]==="")U.shift();return U},mx=(n)=>{let{groups:U,path:D}=tz(n),c=Df(D);return ez(c,U)},tz=(n)=>{let U=[];return n=n.replace(/\{[^}]+\}/g,(D,c)=>{let g=`@${c}`;return U.push([g,D]),g}),{groups:U,path:n}},ez=(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},Cg={},ax=(n,U)=>{if(n==="*")return"*";let D=n.match(/^\:([^\{\}]+)(?:\{(.+)\})?$/);if(D){let c=`${n}#${U}`;if(!Cg[c])if(D[2])Cg[c]=U&&U[0]!==":"&&U[0]!=="*"?[c,D[1],new RegExp(`^${D[2]}(?=/${U})`)]:[n,D[1],new RegExp(`^${D[2]}$`)];else Cg[c]=[n,D[1],!0];return Cg[c]}return null},ox=(n,U)=>{try{return U(n)}catch{return n.replace(/(?:%[0-9A-Fa-f]{2})+/g,(D)=>{try{return U(D)}catch{return D}})}},sz=(n)=>ox(n,decodeURI),cf=(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 sz(T.includes("%25")?T.replace(/%25/g,"%2525"):T)}else if(g===63||g===35)break}return U.slice(D,c)};var rx=(n)=>{let U=cf(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}`}`},Eg=(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)},wg=(n)=>n.indexOf("%")!==-1?ox(n,nO):n,Uf=(n)=>{if(n.indexOf("+")!==-1)n=n.replace(/\+/g," ");return wg(n)},lx=(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 Uf(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=Uf(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=Uf(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},tx=lx,ex=(n,U)=>{return lx(n,U,!0)},nO=decodeURIComponent;var sx=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&&wg(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]=wg(c)}return n}#c(n){return this.#U[1]?this.#U[1][n]:n}query(n){return tx(this.url,n)}queries(n){return ex(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 px(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[ux](){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 nW={Stringify:1,BeforeStream:2,Stream:3},UO=(n,U)=>{let D=new String(n);return D.isEscaped=!0,D.callbacks=U,D};var gf=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)=>gf(T,U,!1,c,g))).then(()=>g[0]));if(D)return UO(await h,f);else return h};var DO="text/plain; charset=UTF-8",ff=(n,U)=>{return{"Content-Type":n,...U}},Ac=(n,U)=>new Response(n,U),hf=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 sx(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||=Ac(null,{headers:this.#x??=new Headers})}set res(n){if(this.#g&&n){n=Ac(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=Ac(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 Ac(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,ff(DO,D))};json=(n,U,D)=>{return this.#h(JSON.stringify(n),U,ff("application/json",D))};html=(n,U,D)=>{let c=(g)=>this.#h(g,U,ff("text/html; charset=UTF-8",D));return typeof n==="object"?gf(n,nW.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??=()=>Ac(),this.#T(this)}};var A1="ALL",UW="all",DW=["get","post","put","delete","options","patch","query"],jg="Can not add a route since the matcher is already built.",Ig=class extends Error{};var cW="__COMPOSED_HANDLER";var cO=(n)=>{return n.text("404 Not Found",404)},gW=(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)},fW=class n{get;post;put;delete;options;patch;query;all;on;use;router;getPath;_basePath="/";#n="/";routes=[];constructor(U={}){[...DW,UW].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??cf:rx}#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=cO;errorHandler=gW;route(U,D){let c=this.basePath(U);return D.routes.map((g)=>{let f;if(D.errorHandler===gW)f=g.handler;else f=async(h,x)=>(await nf([],D.errorHandler)(h,()=>g.handler(h,x))).res,f[cW]=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 hf(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=nf(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 _g(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 vg="[^/]+",FD=".*",ZU="(?:|/.*)",a2=Symbol(),hW=new Set(".\\+*[^]$()");function gO(n,U){if(n.length===1)return U.length===1?n<U?-1:1:-1;if(U.length===1)return 1;if(n===FD||n===ZU)return U===ZU?-1:1;else if(U===FD||U===ZU)return-1;if(n===vg)return 1;else if(U===vg)return-1;return n.length===U.length?n<U?-1:1:U.length-n.length}var xW=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?["","",FD]:["","",vg]:null:W==="/*"?["","",ZU]:W.match(/^\:([^\{\}]+)(?:\{(.+)\})?$/),F;if(y){let i=y[1],X=y[2]||vg;if(i&&y[2]){if(X===".*")throw a2;if(X=X.replace(/^\((?!\?:)(?=[^)]+\)$)/,"(?:"),/\((?!\?:)/.test(X))throw a2;if(X.length===1&&hW.has(X))throw a2}if(F=h.#D[X],!F){if(X!==FD&&X!==ZU){for(let $ in h.#D)if((X.length>1||$.length>1)&&$!==FD&&$!==ZU)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!==FD&&i!==ZU)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(gO).map((c)=>{let g=this.#D[c],f=g.buildRegExpStr();return f===""?"":(typeof g.#U==="number"?`(${c})@${g.#U}`:hW.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 xf=class{#n={varIndex:0};#U=new xW;#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 WW=Object.create(null);function TW(n){return WW[n]??=new RegExp(n==="*"?"":`^${n.replace(/\/\*$|([.\\+*[^\]$()])/g,(U,D)=>D?`\\${D}`:"(?:|/.*)")}$`)}function fO(){WW=Object.create(null)}function Sg(n,U){if(!n)return;for(let D of Object.keys(n).sort((c,g)=>g.length-c.length))if(TW(D).test(U))return[...n[D]];return}var Ng=class{name="RegExpRouter";#n;#U;#D;constructor(){this.#n={[A1]:Object.create(null)},this.#U={[A1]:Object.create(null)},this.#D={[A1]:new xf}}#f(n,U){try{this.#D[n].insert(U,!/\*|\/:/.test(U))}catch(D){throw D===a2?new Ig(U):D}}add(n,U,D){let c=this.#n,g=this.#U;if(!c||!g)throw Error(jg);if(!c[n])this.#D[n]=new xf,[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=TW(U);Object.keys(c).forEach((T)=>{if((n===A1||n===T)&&!c[T][U])this.#f(T,U),c[T][U]=Sg(c[T],U)||Sg(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=Eg(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]=[...Sg(c[y],W)||Sg(c[A1],W)||[]];g[y][W].push([D,f-T+x+1])}})}}match=_g;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,fO(),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 hO=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=_g};var Wf=class{name="SmartRouter";#n=[];#U=[];constructor(n){this.#n=n.routers}add(n,U,D){if(!this.#U)throw Error(jg);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 Ig)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 Hc=Object.create(null),xO=(n)=>{for(let U in n)return!0;return!1},yW=class n{#n;#U;#D;#f=0;#c=Hc;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=mx(D),h=[];for(let x=0,T=f.length;x<T;x++){let W=f[x],y=f[x+1],F=ax(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!==Hc||f&&f!==Hc)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=Hc;let f=[this],h=Df(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===Hc?{}:{...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[Z,M,O]=z;if(!F&&!(O instanceof RegExp))continue;let _=V.#U[Z];if(O instanceof RegExp){if(W===null){W=Array(T);let S=D[0]==="/"?1:0;for(let P=0;P<T;P++)W[P]=S,S+=h[P].length+1}let w=D.substring(W[y]),L=O.exec(w);if(L){if(q[M]=L[0],this.#g(c,_,U,V.#c,q),L[0].length===w.length&&_.#U["*"])this.#g(c,_.#U["*"],U,V.#c,q);if(xO(_.#U)){_.#c=q;let S=L[0].match(/\//g)?.length??0;(x[S]||=[]).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 Tf=class{name="TrieRouter";#n;constructor(){this.#n=new yW}add(n,U,D){let c=Eg(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 yf=class extends fW{constructor(n={}){super(n);this.router=n.router??new Wf({routers:[new Ng,new Tf]})}};import{getAgentDir as le}from"@earendil-works/pi-coding-agent";import{isIP as FW}from"node:net";function iW(n){return(n.startsWith("[")&&n.endsWith("]")?n.slice(1,-1):n).toLowerCase().replace(/\.$/,"")}function XW(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 iW(U.hostname)}catch{return null}}function WO(n){let U=n?.trim();if(!U)return null;return FW(U)?iW(U):XW(U)}function TO(n){return n==="localhost"||n.endsWith(".localhost")}function JW(){return[process.env.PI_WEB_HOSTNAME,...process.env.PI_WEB_ALLOWED_HOSTS?.split(",")??[]].filter((n)=>Boolean(n?.trim()))}function $W(n){try{return new URL(n).origin}catch{return null}}function yO(n){let U=new URL(n.url),D=n.headers.get("host");return D?$W(`${U.protocol}//${D}`):null}function FO(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 Ff(n,U=JW()){let D=n.headers.get("host"),c=D?XW(D):null;if(!c)return!1;if(TO(c)||FW(c))return!0;return U.some((g)=>WO(g)===c)}function iO(n){let U=n.headers.get("origin");if(n.headers.get("sec-fetch-site")==="cross-site")return!1;if(!U)return!0;let c=yO(n);return c!==null&&$W(U)===c}function XO(n){return n.headers.has("origin")||n.headers.has("sec-fetch-site")}function U2(n,U=JW()){if(!Ff(n,U))return!1;if(FO(n))return!0;return!XO(n)||iO(n)}function iD(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 JO,timingSafeEqual as $O}from"node:crypto";var VO="pi";function VW(n){return JO("sha256").update(n,"utf8").digest()}function QW(n,U){return $O(VW(n),VW(U))}function Xf(n=process.env.PI_WEB_PASSWORD){return typeof n==="string"&&n.length>0}function YW(n,U=process.env.PI_WEB_PASSWORD){if(!Xf(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=QW(f,VO),T=QW(h,U);return x&&T}class Jf 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 $f=!1,BW=performance.now();function GW(n){if($f=n,BW=performance.now(),$f)KW("boot","debug log enabled")}function XD(n){return(U,D)=>KW(n,U,D)}function KW(n,U,D){if(!$f)return;let c=performance.now()-BW,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 QO=XD("mount"),YO=["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 YO){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 Jf(y.req.raw),{params:Promise.resolve(i)});return QO(`${x} ${y.req.path}`,`${X.status} ${Math.round(performance.now()-F)}ms`),X})}}var Lf={};U1(Lf,{GET:()=>hq});import{tmpdir as gq}from"node:os";import{Readable as fq}from"node:stream";import{constants as Vf}from"node:fs";import{lstat as BO,open as GO}from"node:fs/promises";import{basename as KO,dirname as ZO,resolve as ZW}from"node:path";var Pg=5242880;function bW(n,U){let D=ZW(n);if(ZO(D)!==ZW(U))return null;if(!/^pi-bash-[A-Za-z0-9_-]+\.log$/.test(KO(D)))return null;return D}async function Qf(n){if(!(await BO(n)).isFile())throw Error("Bash output path is not a regular file");let D=typeof Vf.O_NOFOLLOW==="number"?Vf.O_NOFOLLOW:0,c=await GO(n,Vf.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 zW(n,U=Pg){let{handle:D,fileInfo:c}=await Qf(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 wW,readFile as _O,readdir as vO}from"node:fs/promises";import{existsSync as SO,readdirSync as NO}from"node:fs";import{join as dg,normalize as bf}from"node:path";import{getAgentDir as PO,buildContextEntries as RO,buildSessionContext as uO,SessionManager as jW}from"@earendil-works/pi-coding-agent";function bO(n){return typeof n==="object"&&n!==null&&!Array.isArray(n)}function zO(n){if(!bO(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 Yf(n){if(n.role!=="assistant")return n;let U=n.content;if(!Array.isArray(U))return n;let D=U.map((c)=>{return zO(c)??c});return{...n,content:D}}import OW from"node:path";function Cn(n,U=process.platform){let D=U==="win32"?OW.win32.normalize(n):OW.posix.normalize(n);return U==="win32"?D.toLowerCase():D}import{execFile as OO}from"node:child_process";import{existsSync as Rg,mkdirSync as qO,realpathSync as MO}from"node:fs";import{basename as AO,dirname as Gf,join as MW,resolve as LO}from"node:path";import{promisify as HO}from"node:util";function R1(n){let U=n.replace(/\\/g,"/");return/^[a-zA-Z]:$/.test(U)?`${U}/`:U}function Bf(){if(!globalThis.__piAdditionalAllowedRoots)globalThis.__piAdditionalAllowedRoots=new Set;return globalThis.__piAdditionalAllowedRoots}function On(n){if(!n)return;let U=R1(n);Bf().add(U),globalThis.__piAllowedRootsCache?.roots.add(U)}var CO=HO(OO),qW=60000;function EO(){if(!globalThis.__piProjectCache)globalThis.__piProjectCache=new Map;return globalThis.__piProjectCache}function AW(){globalThis.__piProjectCache?.clear()}async function bU(n,U){let{stdout:D}=await CO("git",["-C",n,...U],{timeout:1e4,maxBuffer:1048576,env:{...process.env,LC_ALL:"C"}});return D.trim()}function wO(n){let U=Gf(n);if(!U.endsWith("-worktrees"))return null;let D=U.slice(0,-10);if(!D||!Rg(MW(D,".git")))return null;return{projectRoot:D,branch:AO(n),isWorktree:!0,isTopLevel:!0}}async function ug(n){let U=EO(),D=U.get(n);if(D&&D.expiresAt>Date.now())return D.info;let c;try{if(!Rg(n))return c=wO(n)??{projectRoot:n,branch:null,isWorktree:!1,isTopLevel:!1},U.set(n,{info:c,expiresAt:Date.now()+qW}),c;let g=await bU(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=MO(n)}catch{}let y=x===W,F=h!==f&&y;c={projectRoot:F?Gf(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()+qW}),c}async function jO(n){let U=await bU(n,["rev-parse","--path-format=absolute","--git-common-dir"]);return Gf(U)}async function Kf(n){let U=await bU(n,["worktree","list","--porcelain"]),D=[],c=null,g=()=>{if(c?.path){if(!c.prunable&&Rg(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 IO(n){return n.replace(/[/\\:*?"<>|\s]+/g,"-").replace(/^-+|-+$/g,"")}async function LW(n,U){let D=U.trim();if(!D)throw Error("Branch name is required");let c=IO(D);if(!c)throw Error(`Invalid branch name: ${U}`);let g=await jO(n),f=`${LO(g)}-worktrees`,h=MW(f,c);if(Rg(h))throw Error(`Directory already exists: ${h}`);qO(f,{recursive:!0});let x=!1;try{await bU(g,["rev-parse","--verify","--quiet",`refs/heads/${D}`]),x=!0}catch{x=!1}try{if(x)await bU(g,["worktree","add","--",h,D]);else await bU(g,["worktree","add","-b",D,"--",h])}catch(T){throw Error(CW(T),{cause:T})}return On(h),AW(),{path:h,branch:D}}async function HW(n,U,D=!1){let g=(await Kf(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 bU(n,["worktree","remove",...D?["--force"]:[],U])}catch(f){throw Error(CW(f),{cause:f})}AW()}function CW(n){let U=n.stderr;if(typeof U==="string"&&U.trim())return U.trim();return n instanceof Error?n.message:String(n)}async function dO(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 ug(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 kO(){let n=await IW(dg(PO(),"sessions"));for(let U of n)o2(U.id,U.path);return n}async function pO(n){let U=[],D=async(c)=>{let g;try{g=await vO(c,{withFileTypes:!0})}catch{return}for(let f of g){let h=dg(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 mO(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 aO(n){let U=await _O(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 $=mO(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 oO(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 rO(n){try{let U=await wW(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-wF3yQwi7.js";import{y as e}from"./mermaid-parser.core-CHWXDn3r.js";export{e as createArchitectureServices};