@rainmanhhh/pi-web 0.10.13 → 0.10.14

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-D6oaErTi.js +1 -0
  3. package/dist/static/assets/{architectureDiagram-Q4EWVU46-DCMT38_a.js → architectureDiagram-Q4EWVU46-3n1xmvaB.js} +1 -1
  4. package/dist/static/assets/{blockDiagram-DXYQGD6D-ByeS-tBX.js → blockDiagram-DXYQGD6D-DbESKVcZ.js} +1 -1
  5. package/dist/static/assets/{c4Diagram-AHTNJAMY-XNXjalJ1.js → c4Diagram-AHTNJAMY-CeQJkGOs.js} +1 -1
  6. package/dist/static/assets/channel-DX1rQukM.js +1 -0
  7. package/dist/static/assets/{chunk-4TB4RGXK-CpT-g_5V.js → chunk-4TB4RGXK-BQdPUkjK.js} +1 -1
  8. package/dist/static/assets/{chunk-5FUZZQ4R-DrrUPjey.js → chunk-5FUZZQ4R-DgASVo3u.js} +1 -1
  9. package/dist/static/assets/{chunk-5PVQY5BW-DtsRI2NY.js → chunk-5PVQY5BW-1Jia3zCX.js} +1 -1
  10. package/dist/static/assets/{chunk-EDXVE4YY-BtvkgOTp.js → chunk-EDXVE4YY-BxaSZGHp.js} +1 -1
  11. package/dist/static/assets/{chunk-ENJZ2VHE-CYJLnDxG.js → chunk-ENJZ2VHE-DxoWA_m0.js} +1 -1
  12. package/dist/static/assets/{chunk-ICPOFSXX-1BgarcOE.js → chunk-ICPOFSXX-B6gt0I9c.js} +1 -1
  13. package/dist/static/assets/{chunk-K5T4RW27-BsVKekN6.js → chunk-K5T4RW27-D4oTXCdu.js} +1 -1
  14. package/dist/static/assets/{chunk-OYMX7WX6-BCXhQxQJ.js → chunk-OYMX7WX6-CZQigcQ7.js} +1 -1
  15. package/dist/static/assets/{chunk-U2HBQHQK-CarinT7u.js → chunk-U2HBQHQK-X39oJ1wF.js} +1 -1
  16. package/dist/static/assets/{chunk-X2U36JSP-D1ttJ3tM.js → chunk-X2U36JSP-BLoL0Vhs.js} +1 -1
  17. package/dist/static/assets/{chunk-YZCP3GAM-DlwCk2o9.js → chunk-YZCP3GAM-DkbTKFVq.js} +1 -1
  18. package/dist/static/assets/{chunk-ZZ45TVLE-DQOMl98a.js → chunk-ZZ45TVLE-CJ5MObcc.js} +1 -1
  19. package/dist/static/assets/classDiagram-6PBFFD2Q-Bl2VoZGa.js +1 -0
  20. package/dist/static/assets/classDiagram-v2-HSJHXN6E-Bl2VoZGa.js +1 -0
  21. package/dist/static/assets/clone-DTD_5312.js +1 -0
  22. package/dist/static/assets/{dagre-KV5264BT-z41UdtRW.js → dagre-KV5264BT-EUvakxOv.js} +1 -1
  23. package/dist/static/assets/{dagre-CqdpMsKF.js → dagre-nmxfOSNl.js} +1 -1
  24. package/dist/static/assets/{diagram-5BDNPKRD-GX0kJHdh.js → diagram-5BDNPKRD-Bpk9Kj3P.js} +1 -1
  25. package/dist/static/assets/{diagram-G4DWMVQ6-Du95qzMb.js → diagram-G4DWMVQ6-BZWBCT9C.js} +1 -1
  26. package/dist/static/assets/{diagram-MMDJMWI5-CNuu-kTY.js → diagram-MMDJMWI5-oaSVf3P7.js} +1 -1
  27. package/dist/static/assets/{diagram-TYMM5635-BL0MXSPE.js → diagram-TYMM5635-Bw4WE55v.js} +1 -1
  28. package/dist/static/assets/{erDiagram-SMLLAGMA-Dw3bQYZ0.js → erDiagram-SMLLAGMA-DXmSBhWa.js} +1 -1
  29. package/dist/static/assets/{flatten-BKmg9Y2p.js → flatten-COH4jUaW.js} +1 -1
  30. package/dist/static/assets/{flowDiagram-DWJPFMVM-BFrrhYMD.js → flowDiagram-DWJPFMVM-Bf2Rbn1K.js} +1 -1
  31. package/dist/static/assets/{ganttDiagram-T4ZO3ILL-DUUqEbX5.js → ganttDiagram-T4ZO3ILL-BVh1xReG.js} +1 -1
  32. package/dist/static/assets/gitGraph-7Q5UKJZL-D4A9BhqJ.js +1 -0
  33. package/dist/static/assets/{gitGraphDiagram-UUTBAWPF-BK0VorG_.js → gitGraphDiagram-UUTBAWPF-BMudrZVe.js} +1 -1
  34. package/dist/static/assets/{graphlib-Dfve_Hpb.js → graphlib-CBnobRl-.js} +1 -1
  35. package/dist/static/assets/{highlighted-body-OFNGDK62-DbF5rie_.js → highlighted-body-OFNGDK62-DJA06gqy.js} +1 -1
  36. package/dist/static/assets/index-BTjogIDU.css +1 -0
  37. package/dist/static/assets/{index-BxESrEJN.js → index-BhAZIYhW.js} +7 -7
  38. package/dist/static/assets/info-OMHHGYJF-CBlka8P4.js +1 -0
  39. package/dist/static/assets/{infoDiagram-42DDH7IO-ruIpsHHM.js → infoDiagram-42DDH7IO-Div2bT9M.js} +1 -1
  40. package/dist/static/assets/{ishikawaDiagram-UXIWVN3A-DXexiujP.js → ishikawaDiagram-UXIWVN3A-DDLFFTik.js} +1 -1
  41. package/dist/static/assets/{journeyDiagram-VCZTEJTY-ClpEt7qz.js → journeyDiagram-VCZTEJTY-COYMJPt-.js} +1 -1
  42. package/dist/static/assets/{kanban-definition-6JOO6SKY-Bl6m0VOT.js → kanban-definition-6JOO6SKY-CTVGVgzI.js} +1 -1
  43. package/dist/static/assets/{line-St2Sn1qU.js → line-CRyqSZoC.js} +1 -1
  44. package/dist/static/assets/mermaid-GHXKKRXX-72CFXdOh.js +1 -0
  45. package/dist/static/assets/{mermaid-parser.core-DfyDHxE3.js → mermaid-parser.core-DWpUNspI.js} +2 -2
  46. package/dist/static/assets/{mermaid.core-BcrdCelT.js → mermaid.core-CzDulcyp.js} +4 -4
  47. package/dist/static/assets/{mindmap-definition-QFDTVHPH-N-zD3VqI.js → mindmap-definition-QFDTVHPH-CnraZinI.js} +1 -1
  48. package/dist/static/assets/packet-4T2RLAQJ-CtN6qry3.js +1 -0
  49. package/dist/static/assets/pie-ZZUOXDRM-CXTBzqYS.js +1 -0
  50. package/dist/static/assets/{pieDiagram-DEJITSTG-C4vjxvqu.js → pieDiagram-DEJITSTG-nNm3jPwJ.js} +1 -1
  51. package/dist/static/assets/{quadrantDiagram-34T5L4WZ-Bs4yyCT4.js → quadrantDiagram-34T5L4WZ-qhnhOmCI.js} +1 -1
  52. package/dist/static/assets/radar-PYXPWWZC--IrRRw-9.js +1 -0
  53. package/dist/static/assets/{reduce-Ch0_H-jO.js → reduce-Boey-bWd.js} +1 -1
  54. package/dist/static/assets/{requirementDiagram-MS252O5E-DW9Eb4t-.js → requirementDiagram-MS252O5E-BNzfBkyw.js} +1 -1
  55. package/dist/static/assets/{sankeyDiagram-XADWPNL6-HkQKReus.js → sankeyDiagram-XADWPNL6-DEDuE0ao.js} +1 -1
  56. package/dist/static/assets/{sequenceDiagram-FGHM5R23-BoCwxAjD.js → sequenceDiagram-FGHM5R23-BE5DUGiR.js} +1 -1
  57. package/dist/static/assets/{stateDiagram-FHFEXIEX-C-FS0-BC.js → stateDiagram-FHFEXIEX-kndbFD4H.js} +1 -1
  58. package/dist/static/assets/stateDiagram-v2-QKLJ7IA2-CBvbHVVS.js +1 -0
  59. package/dist/static/assets/{timeline-definition-GMOUNBTQ-BUm3-hrf.js → timeline-definition-GMOUNBTQ-CSn5Mj1J.js} +1 -1
  60. package/dist/static/assets/treeView-SZITEDCU-BFfXk7pr.js +1 -0
  61. package/dist/static/assets/treemap-W4RFUUIX-C_s2fkYS.js +1 -0
  62. package/dist/static/assets/{vennDiagram-DHZGUBPP-CjvLhrwr.js → vennDiagram-DHZGUBPP-BaLRFS9F.js} +1 -1
  63. package/dist/static/assets/wardley-RL74JXVD-C-XTX8Xq.js +1 -0
  64. package/dist/static/assets/{wardleyDiagram-NUSXRM2D-Dp3Dc6QX.js → wardleyDiagram-NUSXRM2D-BN-DJllK.js} +1 -1
  65. package/dist/static/assets/{xychartDiagram-5P7HB3ND-DFluYOOF.js → xychartDiagram-5P7HB3ND-C14-bHVD.js} +1 -1
  66. package/dist/static/index.html +2 -2
  67. package/package.json +1 -1
  68. package/dist/static/assets/architecture-YZFGNWBL-DlEaZlY8.js +0 -1
  69. package/dist/static/assets/channel-C6pPdyOP.js +0 -1
  70. package/dist/static/assets/classDiagram-6PBFFD2Q-2Fnc_MNN.js +0 -1
  71. package/dist/static/assets/classDiagram-v2-HSJHXN6E-2Fnc_MNN.js +0 -1
  72. package/dist/static/assets/clone-b_bLb60g.js +0 -1
  73. package/dist/static/assets/gitGraph-7Q5UKJZL-CgiPpKL1.js +0 -1
  74. package/dist/static/assets/index-BFrpkO0Y.css +0 -1
  75. package/dist/static/assets/info-OMHHGYJF-DlKPQ93W.js +0 -1
  76. package/dist/static/assets/mermaid-GHXKKRXX-BevFigWx.js +0 -1
  77. package/dist/static/assets/packet-4T2RLAQJ-B4rOi6a8.js +0 -1
  78. package/dist/static/assets/pie-ZZUOXDRM-KfQ2osSA.js +0 -1
  79. package/dist/static/assets/radar-PYXPWWZC-Y_Z2Gl5u.js +0 -1
  80. package/dist/static/assets/stateDiagram-v2-QKLJ7IA2-CK9nQhcj.js +0 -1
  81. package/dist/static/assets/treeView-SZITEDCU-LO3tF7vI.js +0 -1
  82. package/dist/static/assets/treemap-W4RFUUIX-DTJf3t8-.js +0 -1
  83. package/dist/static/assets/wardley-RL74JXVD-BN2JNP3V.js +0 -1
package/dist/server.mjs CHANGED
@@ -249,7 +249,7 @@ Expecting one of '${D.join("', '")}'`);if(this._lifeCycleHooks[n])this._lifeCycl
249
249
  `),this.outputHelp({error:!0});let D=U||{},c=D.exitCode||1,g=D.code||"commander.error";this._exit(c,g,n)}_parseOptionsEnv(){this.options.forEach((n)=>{if(n.envVar&&n.envVar in T1.env){let U=n.attributeName();if(this.getOptionValue(U)===void 0||["default","config","env"].includes(this.getOptionValueSource(U)))if(n.required||n.optional)this.emit(`optionEnv:${n.name()}`,T1.env[n.envVar]);else this.emit(`optionEnv:${n.name()}`)}})}_parseOptionsImplied(){let n=new e3(this.options),U=(D)=>{return this.getOptionValue(D)!==void 0&&!["default","implied"].includes(this.getOptionValueSource(D))};this.options.filter((D)=>D.implied!==void 0&&U(D.attributeName())&&n.valueFromOption(this.getOptionValue(D.attributeName()),D)).forEach((D)=>{Object.keys(D.implied).filter((c)=>!U(c)).forEach((c)=>{this.setOptionValueWithSource(c,D.implied[c],"implied")})})}missingArgument(n){let U=`error: missing required argument '${n}'`;this.error(U,{code:"commander.missingArgument"})}optionMissingArgument(n){let U=`error: option '${n.flags}' argument missing`;this.error(U,{code:"commander.optionMissingArgument"})}missingMandatoryOptionValue(n){let U=`error: required option '${n.flags}' not specified`;this.error(U,{code:"commander.missingMandatoryOptionValue"})}_conflictingOption(n,U){let D=(f)=>{let h=f.attributeName(),x=this.getOptionValue(h),T=this.options.find((y)=>y.negate&&h===y.attributeName()),W=this.options.find((y)=>!y.negate&&h===y.attributeName());if(T&&(T.presetArg===void 0&&x===!1||T.presetArg!==void 0&&x===T.presetArg))return T;return W||f},c=(f)=>{let h=D(f),x=h.attributeName();if(this.getOptionValueSource(x)==="env")return`environment variable '${h.envVar}'`;return`option '${h.flags}'`},g=`error: ${c(n)} cannot be used with ${c(U)}`;this.error(g,{code:"commander.conflictingOption"})}unknownOption(n){if(this._allowUnknownOption)return;let U="";if(n.startsWith("--")&&this._showSuggestionAfterError){let c=[],g=this;do{let f=g.createHelp().visibleOptions(g).filter((h)=>h.long).map((h)=>h.long);c=c.concat(f),g=g.parent}while(g&&!g._enablePositionalOptions);U=s3(n,c)}let D=`error: unknown option '${n}'${U}`;this.error(D,{code:"commander.unknownOption"})}_excessArguments(n){if(this._allowExcessArguments)return;let U=this.registeredArguments.length,D=U===1?"":"s",c=n.length,g=this.parent?` for '${this.name()}'`:"",f=n.join(", "),h=`error: too many arguments${g}. Expected ${U} argument${D} but got ${c}: ${f}.`;this.error(h,{code:"commander.excessArguments"})}unknownCommand(){let n=this.args[0],U="";if(this._showSuggestionAfterError){let c=[];this.createHelp().visibleCommands(this).forEach((g)=>{if(c.push(g.name()),g.alias())c.push(g.alias())}),U=s3(n,c)}let D=`error: unknown command '${n}'${U}`;this.error(D,{code:"commander.unknownCommand"})}version(n,U,D){if(n===void 0)return this._version;this._version=n,U=U||"-V, --version",D=D||"output the version number";let c=this.createOption(U,D);return this._versionOptionName=c.attributeName(),this._registerOption(c),this.on("option:"+c.name(),()=>{this._outputConfiguration.writeOut(`${n}
250
250
  `),this._exit(0,"commander.version",n)}),this}description(n,U){if(n===void 0&&U===void 0)return this._description;if(this._description=n,U)this._argsDescription=U;return this}summary(n){if(n===void 0)return this._summary;return this._summary=n,this}alias(n){if(n===void 0)return this._aliases[0];let U=this;if(this.commands.length!==0&&this.commands[this.commands.length-1]._executableHandler)U=this.commands[this.commands.length-1];if(n===U._name)throw Error("Command alias can't be the same as its name");let D=this.parent?._findCommand(n);if(D){let c=[D.name()].concat(D.aliases()).join("|");throw Error(`cannot add alias '${n}' to command '${this.name()}' as already have command '${c}'`)}return U._aliases.push(n),this}aliases(n){if(n===void 0)return this._aliases;return n.forEach((U)=>this.alias(U)),this}usage(n){if(n===void 0){if(this._usage)return this._usage;let U=this.registeredArguments.map((D)=>{return H8(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 dx(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 px(){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 c11=new FD;var mx={name:"@rainmanhhh/pi-web",version:"0.10.13",description:"Web UI for the pi coding agent (fork of @agegr/pi-web)",homepage:"https://gitee.com/dsxbygzzl/pi-web#readme",repository:{type:"git",url:"git+https://gitee.com/dsxbygzzl/pi-web.git"},bugs:{url:"https://gitee.com/dsxbygzzl/pi-web/issues"},author:"rainmanhhh",license:"MIT",publishConfig:{access:"public",registry:"https://registry.npmjs.org"},engines:{node:">=22.19.0"},files:["dist","public","extensions","package.json"],bin:{"pi-web":"dist/server.mjs"},scripts:{dev:"vite","dev:lan":"vite --host 0.0.0.0",mb:"bun run --env-file=.env.manual api",mf:"bun run --env-file=.env.manual dev -- --port 3001",api:"bun run server/main.ts","api:node":"bun run build:server && node dist/server.mjs","build:server":'bun build server/main.ts --target node --outfile dist/server.mjs --minify --external "@earendil-works/*" --define "process.env.PI_WEB_PACKAGED=1"',"e2e:stop":"bun run scripts/e2e-stop.mjs",build:"vite build && bun run scripts/prune-fonts.mjs","build:analyze":"vite build --config scripts/analyze-bundle.config.ts && bun run scripts/prune-fonts.mjs",lint:"oxlint --fix",jscpd:"jscpd --config .jscpd.json",check:"tsc --noEmit",format:"biome check --write .",prepublishOnly:"bun run check && bun run build && bun run build:server","test:e2e":"playwright test","test:unit":"vitest run",prepare:"husky || true"},dependencies:{"@earendil-works/pi-agent-core":"0.84.1","@earendil-works/pi-ai":"0.84.1","@earendil-works/pi-coding-agent":"0.84.1","@earendil-works/pi-tui":"0.84.1","@hono/node-server":"^2.1.0","class-variance-authority":"^0.7.1",clsx:"^2.1.1",hono:"^4.13.1","lucide-react":"^1.31.0",pointrix:"^1.1.0","proper-lockfile":"4.1.2","radix-ui":"^1.6.7",react:"^19.2.4","react-dom":"^19.2.4",shadcn:"^4.17.0",streamdown:"2.5.0","tailwind-merge":"^3.6.0","tw-animate-css":"^1.4.0",undici:"8.9.0"},devDependencies:{"@lobehub/icons":"^5.6.0","@playwright/test":"^1.62.1","@tailwindcss/postcss":"^4.2.2","@testing-library/dom":"^10.4.1","@testing-library/react":"^16.3.2","@types/node":"^25","@types/proper-lockfile":"4.1.4","@types/react":"^19","@types/react-dom":"^19","@types/react-resizable":"^4.0.0","@types/react-syntax-highlighter":"^15.5.13","@vitejs/plugin-react":"^6.0.5",biome:"^0.3.3",commander:"^15.0.0",husky:"^9.1.7",jiti:"^2.7.0",jscpd:"^5.0.14",jsdom:"^30.0.1",katex:"^0.16.47","lint-staged":"^17.3.0",mammoth:"^1.12.0",mermaid:"^11.14.0",oxlint:"^1.78.0",postcss:"^8","react-markdown":"^10.1.0","react-syntax-highlighter":"^16.1.1","rehype-katex":"^7.0.1","rehype-raw":"^7.0.0","rehype-sanitize":"^6.0.0","remark-gfm":"^4.0.1","remark-math":"^6.0.0",tailwindcss:"^4.2.2",typescript:"^7.0.2",vite:"^8.2.1","vite-plugin-svgr":"^5.2.0",vitest:"^4.1.10"},type:"module"};import{getAgentDir as rb}from"@earendil-works/pi-coding-agent";var ax={port:31415};var Uf=(n,U,D)=>{return(c,g)=>{let f=-1;return h(0);async function h(x){if(x<=f)throw Error("next() called multiple times");f=x;let T,W=!1,y;if(n[x])y=n[x][0][0],c.req.routeIndex=x;else y=x===n.length&&g||void 0;if(y)try{T=await y(c,()=>h(x+1))}catch(F){if(F instanceof Error&&U)c.error=F,T=await U(F,c),W=!0;else throw F}else if(c.finalized===!1&&D)T=await D(c);if(T&&(c.finalized===!1||W))c.res=T;return c}}};var ox=Symbol();var rx=(n,U)=>{return new Response(n,{headers:{"Content-Type":U.replace(/^[^;]+/,(c)=>c.toLowerCase())}}).formData()};var C8=(n)=>("headers"in n),tx=async(n,U=Object.create(null))=>{let{all:D=!1,dot:c=!1}=U,h=(C8(n)?n.headers:n.raw.headers).get("Content-Type")?.split(";")[0].trim().toLowerCase();if(h==="multipart/form-data"||h==="application/x-www-form-urlencoded")return DO(n,{all:D,dot:c});return{}};async function DO(n,U){if(!C8(n)&&n.bodyCache.formData)return lx(await n.bodyCache.formData,U);let D=C8(n)?n.headers:n.raw.headers,c=await n.arrayBuffer(),g=rx(c,D.get("Content-Type")||"");if(!C8(n))n.bodyCache.formData=g;let f=await g;if(f)return lx(f,U);return{}}function lx(n,U){let D=Object.create(null);if(n.forEach((c,g)=>{if(!(U.all||g.endsWith("[]")))D[g]=c;else cO(D,g,c)}),U.dot)Object.entries(D).forEach(([c,g])=>{if(c.includes("."))gO(D,c,g),delete D[c]});return D}var cO=(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]},gO=(n,U,D)=>{if(/(?:^|\.)__proto__\./.test(U))return;let c=n,g=U.split(".");g.forEach((f,h)=>{if(h===g.length-1)c[f]=D;else{if(!c[f]||typeof c[f]!=="object"||Array.isArray(c[f])||c[f]instanceof File)c[f]=Object.create(null);c=c[f]}})};var cf=(n)=>{let U=n.split("/");if(U[0]==="")U.shift();return U},ex=(n)=>{let{groups:U,path:D}=fO(n),c=cf(D);return hO(c,U)},fO=(n)=>{let U=[];return n=n.replace(/\{[^}]+\}/g,(D,c)=>{let g=`@${c}`;return U.push([g,D]),g}),{groups:U,path:n}},hO=(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},w8={},sx=(n,U)=>{if(n==="*")return"*";let D=n.match(/^\:([^\{\}]+)(?:\{(.+)\})?$/);if(D){let c=`${n}#${U}`;if(!w8[c])if(D[2])w8[c]=U&&U[0]!==":"&&U[0]!=="*"?[c,D[1],new RegExp(`^${D[2]}(?=/${U})`)]:[n,D[1],new RegExp(`^${D[2]}$`)];else w8[c]=[n,D[1],!0];return w8[c]}return null},nW=(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)=>nW(n,decodeURI),gf=(n)=>{let U=n.url,D=U.indexOf("/",U.indexOf(":")+4),c=D;for(;c<U.length;c++){let g=U.charCodeAt(c);if(g===37){let f=U.indexOf("?",c),h=U.indexOf("#",c),x=f===-1?h===-1?void 0:h:h===-1?f:Math.min(f,h),T=U.slice(D,x);return xO(T.includes("%25")?T.replace(/%25/g,"%2525"):T)}else if(g===63||g===35)break}return U.slice(D,c)};var UW=(n)=>{let U=gf(n);return U.length>1&&U.at(-1)==="/"?U.slice(0,-1):U},m2=(n,U,...D)=>{if(D.length)U=m2(U,...D);return`${n?.[0]==="/"?"":"/"}${n}${U==="/"?"":`${n?.at(-1)==="/"?"":"/"}${U?.[0]==="/"?U.slice(1):U}`}`},j8=(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)},I8=(n)=>n.indexOf("%")!==-1?nW(n,WO):n,Df=(n)=>{if(n.indexOf("+")!==-1)n=n.replace(/\+/g," ");return I8(n)},DW=(n,U,D)=>{let c;if(!D&&U&&U.indexOf("%")===-1&&U.indexOf("+")===-1){let h=n.indexOf("?",8);if(h===-1)return;if(!n.startsWith(U,h+1))h=n.indexOf(`&${U}`,h+1);while(h!==-1){let x=n.charCodeAt(h+U.length+1);if(x===61){let T=h+U.length+2,W=n.indexOf("&",T);return Df(n.slice(T,W===-1?void 0:W))}else if(x==38||isNaN(x))return"";h=n.indexOf(`&${U}`,h+1)}if(c=/[%+]/.test(n),!c)return}let g=Object.create(null);c??=/[%+]/.test(n);let f=n.indexOf("?",8);while(f!==-1){let h=n.indexOf("&",f+1),x=n.indexOf("=",f);if(x>h&&h!==-1)x=-1;let T=n.slice(f+1,x===-1?h===-1?void 0:h:x);if(c)T=Df(T);if(f=h,T==="")continue;let W;if(x===-1)W="";else if(W=n.slice(x+1,h===-1?void 0:h),c)W=Df(W);if(D){if(!(g[T]&&Array.isArray(g[T])))g[T]=[];g[T].push(W)}else g[T]??=W}return U?g[U]:g},cW=DW,gW=(n,U)=>{return DW(n,U,!0)},WO=decodeURIComponent;var fW=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&&I8(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]=I8(c)}return n}#c(n){return this.#U[1]?this.#U[1][n]:n}query(n){return cW(this.url,n)}queries(n){return gW(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 tx(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[ox](){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 hW={Stringify:1,BeforeStream:2,Stream:3},TO=(n,U)=>{let D=new String(n);return D.isEscaped=!0,D.callbacks=U,D};var ff=async(n,U,D,c,g)=>{if(typeof n==="object"&&!(n instanceof String)){if(!(n instanceof Promise))n=n.toString();if(n instanceof Promise)n=await n}let f=n.callbacks;if(!f?.length)return Promise.resolve(n);if(g)g[0]+=n;else g=[n];let h=Promise.all(f.map((x)=>x({phase:U,buffer:g,context:c}))).then((x)=>Promise.all(x.filter(Boolean).map((T)=>ff(T,U,!1,c,g))).then(()=>g[0]));if(D)return TO(await h,f);else return h};var yO="text/plain; charset=UTF-8",hf=(n,U)=>{return{"Content-Type":n,...U}},Hc=(n,U)=>new Response(n,U),xf=class{#n;#U;env={};#D;finalized=!1;error;#f;#c;#g;#y;#W;#T;#x;#F;#i;constructor(n,U){if(this.#n=n,U)this.#c=U.executionCtx,this.env=U.env,this.#T=U.notFoundHandler,this.#i=U.path,this.#F=U.matchResult}get req(){return this.#U??=new fW(this.#n,this.#i,this.#F),this.#U}get event(){if(this.#c&&"respondWith"in this.#c)return this.#c;else throw Error("This context has no FetchEvent")}get executionCtx(){if(this.#c)return this.#c;else throw Error("This context has no ExecutionContext")}get res(){return this.#g||=Hc(null,{headers:this.#x??=new Headers})}set res(n){if(this.#g&&n){n=Hc(n.body,n);for(let[U,D]of this.#g.headers.entries()){if(U==="content-type")continue;if(U==="set-cookie"){let c=this.#g.headers.getSetCookie();n.headers.delete("set-cookie");for(let g of c)n.headers.append("set-cookie",g)}else n.headers.set(U,D)}}this.#g=n,this.finalized=!0}render=(...n)=>{return this.#W??=(U)=>this.html(U),this.#W(...n)};setLayout=(n)=>this.#y=n;getLayout=()=>this.#y;setRenderer=(n)=>{this.#W=n};header=(n,U,D)=>{if(this.finalized)this.#g=Hc(this.#g.body,this.#g);let c=this.#g?this.#g.headers:this.#x??=new Headers;if(U===void 0)c.delete(n);else if(D?.append)c.append(n,U);else c.set(n,U)};status=(n)=>{this.#f=n};set=(n,U)=>{this.#D??=new Map,this.#D.set(n,U)};get=(n)=>{return this.#D?this.#D.get(n):void 0};get var(){if(!this.#D)return{};return Object.fromEntries(this.#D)}#h(n,U,D){let c=this.#g?new Headers(this.#g.headers):this.#x;if(typeof U==="object"&&U.headers){c??=new Headers;for(let[f,h]of new Headers(U.headers))if(f==="set-cookie")c.append(f,h);else c.set(f,h)}if(D){if(!c){let f=0;for(let h in D)if(++f>1||typeof D[h]!=="string"){c=new Headers;break}}if(c)for(let f in D){let h=D[f];if(typeof h==="string")c.set(f,h);else{c.delete(f);for(let x of h)c.append(f,x)}}}let g=typeof U==="number"?U:U?.status??this.#f;return Hc(n,{status:g,headers:c??D})}newResponse=(...n)=>this.#h(...n);body=(n,U,D)=>this.#h(n,U,D);text=(n,U,D)=>{return!this.#x&&!this.#f&&!U&&!D&&!this.finalized?new Response(n):this.#h(n,U,hf(yO,D))};json=(n,U,D)=>{return this.#h(JSON.stringify(n),U,hf("application/json",D))};html=(n,U,D)=>{let c=(g)=>this.#h(g,U,hf("text/html; charset=UTF-8",D));return typeof n==="object"?ff(n,hW.Stringify,!1,{}).then(c):c(n)};redirect=(n,U)=>{let D=String(n);return this.header("Location",!/[^\x00-\xFF]/.test(D)?D:encodeURI(D)),this.newResponse(null,U??302)};notFound=()=>{return this.#T??=()=>Hc(),this.#T(this)}};var A1="ALL",xW="all",WW=["get","post","put","delete","options","patch","query"],_8="Can not add a route since the matcher is already built.",S8=class extends Error{};var TW="__COMPOSED_HANDLER";var FO=(n)=>{return n.text("404 Not Found",404)},yW=(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={}){[...WW,xW].forEach((f)=>{this[f]=(h,...x)=>{if(typeof h==="string")this.#n=h;else this.#f(f,this.#n,h);return x.forEach((T)=>{this.#f(f,this.#n,T)}),this}}),this.on=(f,h,...x)=>{for(let T of[h].flat()){this.#n=T;for(let W of[f].flat())x.map((y)=>{this.#f(W.toUpperCase(),this.#n,y)})}return this},this.use=(f,...h)=>{if(typeof f==="string")this.#n=f;else this.#n="*",h.unshift(f);return h.forEach((x)=>{this.#f(A1,this.#n,x)}),this};let{strict:c,...g}=U;Object.assign(this,g),this.getPath=c??!0?U.getPath??gf:UW}#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=FO;errorHandler=yW;route(U,D){let c=this.basePath(U);return D.routes.map((g)=>{let f;if(D.errorHandler===yW)f=g.handler;else f=async(h,x)=>(await Uf([],D.errorHandler)(h,()=>g.handler(h,x))).res,f[TW]=g.handler;c.#f(g.method,g.path,f,g.basePath)}),this}basePath(U){let D=this.#U();return D._basePath=m2(this._basePath,U),D}onError=(U)=>{return this.errorHandler=U,this};notFound=(U)=>{return this.#D=U,this};mount(U,D,c){let g,f;if(c)if(typeof c==="function")f=c;else if(f=c.optionHandler,c.replaceRequest===!1)g=(T)=>T;else g=c.replaceRequest;let h=f?(T)=>{let W=f(T);return Array.isArray(W)?W:[W]}:(T)=>{let W=void 0;try{W=T.executionCtx}catch{}return[T.env,W]};g||=(()=>{let T=m2(this._basePath,U),W=T==="/"?0:T.length;return(y)=>{let F=new URL(y.url);return F.pathname=this.getPath(y).slice(W)||"/",new Request(F,y)}})();let x=async(T,W)=>{let y=await D(g(T.req.raw),...h(T));if(y)return y;await W()};return this.#f(A1,m2(U,"*"),x),this}#f(U,D,c,g){U=U.toUpperCase(),D=m2(this._basePath,D);let f={basePath:g!==void 0?m2(this._basePath,g):this._basePath,path:D,method:U,handler:c};this.router.add(U,D,[c,f]),this.routes.push(f)}#c(U,D){if(U instanceof Error)return this.errorHandler(U,D);throw U}#g(U,D,c,g){if(g==="HEAD")return(async()=>new Response(null,await this.#g(U,D,c,"GET")))();let f=this.getPath(U,{env:c}),h=this.router.match(g,f),x=new xf(U,{path:f,matchResult:h,env:c,executionCtx:D,notFoundHandler:this.#D});if(h[0].length===1){let W;try{W=h[0][0][0][0](x,async()=>{x.res=await this.#D(x)})}catch(y){return this.#c(y,x)}return W instanceof Promise?W.then((y)=>y||(x.finalized?x.res:this.#D(x))).catch((y)=>this.#c(y,x)):W??this.#D(x)}let T=Uf(h[0],this.errorHandler,this.#D);return(async()=>{try{let W=await T(x);if(!W.finalized)throw Error("Context is not finalized. Did you forget to return a Response object or `await next()`?");return W.res}catch(W){return this.#c(W,x)}})()}fetch=(U,...D)=>{return this.#g(U,D[1],D[0],U.method)};request=(U,D,c,g)=>{if(U instanceof Request)return this.fetch(D?new Request(U,D):U,c,g);return U=U.toString(),this.fetch(new Request(/^https?:\/\//.test(U)?U:`http://localhost${m2("/",U)}`,D),c,g)};fire=()=>{addEventListener("fetch",(U)=>{U.respondWith(this.#g(U.request,U,void 0,U.request.method))})}};var Lc=[];function v8(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 N8="[^/]+",iD=".*",ZU="(?:|/.*)",a2=Symbol(),iW=new Set(".\\+*[^]$()");function iO(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===N8)return 1;else if(U===N8)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?["","",iD]:["","",N8]:null:W==="/*"?["","",ZU]:W.match(/^\:([^\{\}]+)(?:\{(.+)\})?$/),F;if(y){let i=y[1],X=y[2]||N8;if(i&&y[2]){if(X===".*")throw a2;if(X=X.replace(/^\((?!\?:)(?=[^)]+\)$)/,"(?:"),/\((?!\?:)/.test(X))throw a2;if(X.length===1&&iW.has(X))throw a2}if(F=h.#D[X],!F){if(X!==iD&&X!==ZU){for(let $ in h.#D)if((X.length>1||$.length>1)&&$!==iD&&$!==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!==iD&&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(iO).map((c)=>{let g=this.#D[c],f=g.buildRegExpStr();return f===""?"":(typeof g.#U==="number"?`(${c})@${g.#U}`:iW.has(c)?`\\${c}`:c)+f}).filter(Boolean);if(typeof this.#n==="number"&&this.#n!==-1)D.unshift(`#${this.#n}`);if(D.length===0)return"";if(D.length===1)return D[0];return"(?:"+D.join("|")+")"}};var Wf=class{#n={varIndex:0};#U=new 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 JW=Object.create(null);function $W(n){return JW[n]??=new RegExp(n==="*"?"":`^${n.replace(/\/\*$|([.\\+*[^\]$()])/g,(U,D)=>D?`\\${D}`:"(?:|/.*)")}$`)}function XO(){JW=Object.create(null)}function P8(n,U){if(!n)return;for(let D of Object.keys(n).sort((c,g)=>g.length-c.length))if($W(D).test(U))return[...n[D]];return}var R8=class{name="RegExpRouter";#n;#U;#D;constructor(){this.#n={[A1]:Object.create(null)},this.#U={[A1]:Object.create(null)},this.#D={[A1]:new Wf}}#f(n,U){try{this.#D[n].insert(U,!/\*|\/:/.test(U))}catch(D){throw D===a2?new S8(U):D}}add(n,U,D){let c=this.#n,g=this.#U;if(!c||!g)throw Error(_8);if(!c[n])this.#D[n]=new Wf,[c,g].forEach((x)=>{x[n]=Object.create(null),Object.keys(x[A1]).forEach((T)=>{x[n][T]=[...x[A1][T]],this.#f(n,T)})});if(U==="/*")U="*";let f=(U.match(/\/:/g)||[]).length;if(/\*$/.test(U)){let x=$W(U);Object.keys(c).forEach((T)=>{if((n===A1||n===T)&&!c[T][U])this.#f(T,U),c[T][U]=P8(c[T],U)||P8(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=j8(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]=[...P8(c[y],W)||P8(c[A1],W)||[]];g[y][W].push([D,f-T+x+1])}})}}match=v8;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,XO(),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 JO=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=v8};var Tf=class{name="SmartRouter";#n=[];#U=[];constructor(n){this.#n=n.routers}add(n,U,D){if(!this.#U)throw Error(_8);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 S8)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 Ec=Object.create(null),$O=(n)=>{for(let U in n)return!0;return!1},VW=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=ex(D),h=[];for(let x=0,T=f.length;x<T;x++){let W=f[x],y=f[x+1],F=sx(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!==Ec||f&&f!==Ec)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=Ec;let f=[this],h=cf(D),x=[],T=h.length,W=null;for(let y=0;y<T;y++){let F=h[y],i=y===T-1,X=[];for(let Q=0,Y=f.length;Q<Y;Q++){let V=f[Q],G=V.#U[F];if(G)if(G.#c=V.#c,i){if(G.#U["*"])this.#g(c,G.#U["*"],U,V.#c);this.#g(c,G,U,V.#c)}else X.push(G);for(let J=0,B=V.#D.length;J<B;J++){let z=V.#D[J],q=V.#c===Ec?{}:{...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 v=D[0]==="/"?1:0;for(let P=0;P<T;P++)W[P]=v,v+=h[P].length+1}let w=D.substring(W[y]),H=O.exec(w);if(H){if(q[M]=H[0],this.#g(c,_,U,V.#c,q),H[0].length===w.length&&_.#U["*"])this.#g(c,_.#U["*"],U,V.#c,q);if($O(_.#U)){_.#c=q;let v=H[0].match(/\//g)?.length??0;(x[v]||=[]).push(_)}continue}}if(O===!0||O.test(F))if(q[M]=F,i){if(this.#g(c,_,U,q,V.#c),_.#U["*"])this.#g(c,_.#U["*"],U,q,V.#c)}else _.#c=q,X.push(_)}}let $=x.shift();f=$?X.concat($):X}if(c.length>1)c.sort((y,F)=>{return y.score-F.score});return[c.map(({handler:y,params:F})=>[y,F])]}};var yf=class{name="TrieRouter";#n;constructor(){this.#n=new VW}add(n,U,D){let c=j8(U);if(c){for(let g=0,f=c.length;g<f;g++)this.#n.insert(n,c[g],D);return}this.#n.insert(n,U,D)}match(n,U){return this.#n.search(n,U)}};var Ff=class extends FW{constructor(n={}){super(n);this.router=n.router??new Tf({routers:[new R8,new yf]})}};import{getAgentDir as xs}from"@earendil-works/pi-coding-agent";import{isIP as QW}from"node:net";function YW(n){return(n.startsWith("[")&&n.endsWith("]")?n.slice(1,-1):n).toLowerCase().replace(/\.$/,"")}function BW(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 YW(U.hostname)}catch{return null}}function VO(n){let U=n?.trim();if(!U)return null;return QW(U)?YW(U):BW(U)}function QO(n){return n==="localhost"||n.endsWith(".localhost")}function GW(){return[process.env.PI_WEB_HOSTNAME,...process.env.PI_WEB_ALLOWED_HOSTS?.split(",")??[]].filter((n)=>Boolean(n?.trim()))}function KW(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?KW(`${U.protocol}//${D}`):null}function BO(n){if(n.method!=="GET"||n.headers.get("sec-fetch-mode")!=="navigate"||n.headers.get("sec-fetch-dest")!=="document"||n.headers.get("sec-fetch-user")!=="?1")return!1;try{return/^\/api\/sessions\/[^/]+\/export$/.test(new URL(n.url).pathname)}catch{return!1}}function Xf(n,U=GW()){let D=n.headers.get("host"),c=D?BW(D):null;if(!c)return!1;if(QO(c)||QW(c))return!0;return U.some((g)=>VO(g)===c)}function GO(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&&KW(U)===c}function KO(n){return n.headers.has("origin")||n.headers.has("sec-fetch-site")}function U2(n,U=GW()){if(!Xf(n,U))return!1;if(BO(n))return!0;return!KO(n)||GO(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 ZO,timingSafeEqual as bO}from"node:crypto";var zO="pi";function ZW(n){return ZO("sha256").update(n,"utf8").digest()}function bW(n,U){return bO(ZW(n),ZW(U))}function Jf(n=process.env.PI_WEB_PASSWORD){return typeof n==="string"&&n.length>0}function zW(n,U=process.env.PI_WEB_PASSWORD){if(!Jf(U)||!n)return!1;let D=/^Basic\s+(\S+)$/i.exec(n);if(!D)return!1;let c;try{let W=Buffer.from(D[1],"base64");if(W.toString("base64")!==D[1])return!1;c=new TextDecoder("utf-8",{fatal:!0}).decode(W)}catch{return!1}let g=c.indexOf(":");if(g===-1)return!1;let f=c.slice(0,g),h=c.slice(g+1),x=bW(f,zO),T=bW(h,U);return x&&T}class $f extends Request{nextUrl;constructor(n){let U=n.method!=="GET"&&n.method!=="HEAD";super(n.url,{method:n.method,headers:n.headers,body:U?n.body:void 0,duplex:U?"half":void 0,signal:n.signal});this.nextUrl=new URL(n.url)}}class K extends Response{static json(n,U){let D=new Headers(U?.headers);return D.set("content-type","application/json; charset=utf-8"),new K(JSON.stringify(n),{status:U?.status??200,statusText:U?.statusText,headers:D})}}var Vf=!1,OW=performance.now();function qW(n){if(Vf=n,OW=performance.now(),Vf)MW("boot","debug log enabled")}function bU(n){return(U,D)=>MW(n,U,D)}function MW(n,U,D){if(!Vf)return;let c=performance.now()-OW,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 OO=bU("mount"),qO=["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 qO){let T=D[x];if(typeof T!=="function")continue;let W=T;n.on(x,h,async(y)=>{let F=performance.now(),i={};for(let[$,{hono:Q,catchAll:Y}]of f)if(Y){let V=y.req.param(Q)??"";i[$]=V===""?[]:V.split("/")}else i[$]=y.req.param(Q)??"";let X=await W(new $f(y.req.raw),{params:Promise.resolve(i)});return OO(`${x} ${y.req.path}`,`${X.status} ${Math.round(performance.now()-F)}ms`),X})}}var Lf={};U1(Lf,{GET:()=>Jq});import{tmpdir as iq}from"node:os";import{Readable as Xq}from"node:stream";import{constants as Qf}from"node:fs";import{lstat as MO,open as AO}from"node:fs/promises";import{basename as HO,dirname as LO,resolve as AW}from"node:path";var u8=5242880;function HW(n,U){let D=AW(n);if(LO(D)!==AW(U))return null;if(!/^pi-bash-[A-Za-z0-9_-]+\.log$/.test(HO(D)))return null;return D}async function Yf(n){if(!(await MO(n)).isFile())throw Error("Bash output path is not a regular file");let D=typeof Qf.O_NOFOLLOW==="number"?Qf.O_NOFOLLOW:0,c=await AO(n,Qf.O_RDONLY|D);try{let g=await c.stat();if(!g.isFile())throw Error("Bash output path is not a regular file");return{handle:c,fileInfo:g}}catch(g){throw await c.close(),g}}async function LW(n,U=u8){let{handle:D,fileInfo:c}=await Yf(n);try{if(c.size>U)return{tooLarge:!0,size:c.size};let g=Buffer.alloc(c.size),f=0;while(f<g.length){let h=await D.read(g,f,g.length-f,f);if(h.bytesRead===0)break;f+=h.bytesRead}return{tooLarge:!1,content:g.subarray(0,f).toString("utf8"),size:f}}finally{await D.close()}}import{open as NW,readFile as dO,readdir as pO}from"node:fs/promises";import{existsSync as mO,readdirSync as aO}from"node:fs";import{join as p8,normalize as zf}from"node:path";import{getAgentDir as oO,buildContextEntries as rO,buildSessionContext as lO,SessionManager as PW}from"@earendil-works/pi-coding-agent";function EO(n){return typeof n==="object"&&n!==null&&!Array.isArray(n)}function CO(n){if(!EO(n)||n.type!=="toolCall")return null;return{type:"toolCall",toolCallId:typeof n.toolCallId==="string"?n.toolCallId:typeof n.id==="string"?n.id:"",toolName:typeof n.toolName==="string"?n.toolName:typeof n.name==="string"?n.name:"",input:typeof n.input==="object"&&n.input!==null&&!Array.isArray(n.input)?n.input:typeof n.arguments==="object"&&n.arguments!==null&&!Array.isArray(n.arguments)?n.arguments:{}}}function Bf(n){if(n.role!=="assistant")return n;let U=n.content;if(!Array.isArray(U))return n;let D=U.map((c)=>{return CO(c)??c});return{...n,content:D}}import EW from"node:path";function En(n,U=process.platform){let D=U==="win32"?EW.win32.normalize(n):EW.posix.normalize(n);return U==="win32"?D.toLowerCase():D}import{execFile as wO}from"node:child_process";import{existsSync as k8,mkdirSync as jO,realpathSync as IO}from"node:fs";import{basename as _O,dirname as Kf,join as wW,resolve as SO}from"node:path";import{promisify as vO}from"node:util";function u1(n){let U=n.replace(/\\/g,"/");return/^[a-zA-Z]:$/.test(U)?`${U}/`:U}function Gf(){if(!globalThis.__piAdditionalAllowedRoots)globalThis.__piAdditionalAllowedRoots=new Set;return globalThis.__piAdditionalAllowedRoots}function On(n){if(!n)return;let U=u1(n);Gf().add(U),globalThis.__piAllowedRootsCache?.roots.add(U)}var NO=vO(wO),CW=60000;function PO(){if(!globalThis.__piProjectCache)globalThis.__piProjectCache=new Map;return globalThis.__piProjectCache}function jW(){globalThis.__piProjectCache?.clear()}async function zU(n,U){let{stdout:D}=await NO("git",["-C",n,...U],{timeout:1e4,maxBuffer:1048576,env:{...process.env,LC_ALL:"C"}});return D.trim()}function RO(n){let U=Kf(n);if(!U.endsWith("-worktrees"))return null;let D=U.slice(0,-10);if(!D||!k8(wW(D,".git")))return null;return{projectRoot:D,branch:_O(n),isWorktree:!0,isTopLevel:!0}}async function d8(n){let U=PO(),D=U.get(n);if(D&&D.expiresAt>Date.now())return D.info;let c;try{if(!k8(n))return c=RO(n)??{projectRoot:n,branch:null,isWorktree:!1,isTopLevel:!1},U.set(n,{info:c,expiresAt:Date.now()+CW}),c;let g=await zU(n,["rev-parse","--path-format=absolute","--git-common-dir","--git-dir","--show-toplevel","--abbrev-ref","HEAD"]),[f,h,x,T]=g.split(`
252
+ `)}),this}_outputHelpIfRequested(n){let U=this._getHelpOption();if(U&&n.find((c)=>U.is(c)))this.outputHelp(),this._exit(0,"commander.helpDisplayed","(outputHelp)")}}function dx(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 px(){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 c11=new FD;var mx={name:"@rainmanhhh/pi-web",version:"0.10.14",description:"Web UI for the pi coding agent (fork of @agegr/pi-web)",homepage:"https://gitee.com/dsxbygzzl/pi-web#readme",repository:{type:"git",url:"git+https://gitee.com/dsxbygzzl/pi-web.git"},bugs:{url:"https://gitee.com/dsxbygzzl/pi-web/issues"},author:"rainmanhhh",license:"MIT",publishConfig:{access:"public",registry:"https://registry.npmjs.org"},engines:{node:">=22.19.0"},files:["dist","public","extensions","package.json"],bin:{"pi-web":"dist/server.mjs"},scripts:{dev:"vite","dev:lan":"vite --host 0.0.0.0",mb:"bun run --env-file=.env.manual api",mf:"bun run --env-file=.env.manual dev -- --port 3001",api:"bun run server/main.ts","api:node":"bun run build:server && node dist/server.mjs","build:server":'bun build server/main.ts --target node --outfile dist/server.mjs --minify --external "@earendil-works/*" --define "process.env.PI_WEB_PACKAGED=1"',"e2e:stop":"bun run scripts/e2e-stop.mjs",build:"vite build && bun run scripts/prune-fonts.mjs","build:analyze":"vite build --config scripts/analyze-bundle.config.ts && bun run scripts/prune-fonts.mjs",lint:"oxlint --fix",jscpd:"jscpd --config .jscpd.json",check:"tsc --noEmit",format:"biome check --write .",prepublishOnly:"bun run check && bun run build && bun run build:server","test:e2e":"playwright test","test:unit":"vitest run",prepare:"husky || true"},dependencies:{"@earendil-works/pi-agent-core":"0.84.1","@earendil-works/pi-ai":"0.84.1","@earendil-works/pi-coding-agent":"0.84.1","@earendil-works/pi-tui":"0.84.1","@hono/node-server":"^2.1.0","class-variance-authority":"^0.7.1",clsx:"^2.1.1",hono:"^4.13.1","lucide-react":"^1.31.0",pointrix:"^1.1.0","proper-lockfile":"4.1.2","radix-ui":"^1.6.7",react:"^19.2.4","react-dom":"^19.2.4",shadcn:"^4.17.0",streamdown:"2.5.0","tailwind-merge":"^3.6.0","tw-animate-css":"^1.4.0",undici:"8.9.0"},devDependencies:{"@lobehub/icons":"^5.6.0","@playwright/test":"^1.62.1","@tailwindcss/postcss":"^4.2.2","@testing-library/dom":"^10.4.1","@testing-library/react":"^16.3.2","@types/node":"^25","@types/proper-lockfile":"4.1.4","@types/react":"^19","@types/react-dom":"^19","@types/react-resizable":"^4.0.0","@types/react-syntax-highlighter":"^15.5.13","@vitejs/plugin-react":"^6.0.5",biome:"^0.3.3",commander:"^15.0.0",husky:"^9.1.7",jiti:"^2.7.0",jscpd:"^5.0.14",jsdom:"^30.0.1",katex:"^0.16.47","lint-staged":"^17.3.0",mammoth:"^1.12.0",mermaid:"^11.14.0",oxlint:"^1.78.0",postcss:"^8","react-markdown":"^10.1.0","react-syntax-highlighter":"^16.1.1","rehype-katex":"^7.0.1","rehype-raw":"^7.0.0","rehype-sanitize":"^6.0.0","remark-gfm":"^4.0.1","remark-math":"^6.0.0",tailwindcss:"^4.2.2",typescript:"^7.0.2",vite:"^8.2.1","vite-plugin-svgr":"^5.2.0",vitest:"^4.1.10"},type:"module"};import{getAgentDir as rb}from"@earendil-works/pi-coding-agent";var ax={port:31415};var Uf=(n,U,D)=>{return(c,g)=>{let f=-1;return h(0);async function h(x){if(x<=f)throw Error("next() called multiple times");f=x;let T,W=!1,y;if(n[x])y=n[x][0][0],c.req.routeIndex=x;else y=x===n.length&&g||void 0;if(y)try{T=await y(c,()=>h(x+1))}catch(F){if(F instanceof Error&&U)c.error=F,T=await U(F,c),W=!0;else throw F}else if(c.finalized===!1&&D)T=await D(c);if(T&&(c.finalized===!1||W))c.res=T;return c}}};var ox=Symbol();var rx=(n,U)=>{return new Response(n,{headers:{"Content-Type":U.replace(/^[^;]+/,(c)=>c.toLowerCase())}}).formData()};var C8=(n)=>("headers"in n),tx=async(n,U=Object.create(null))=>{let{all:D=!1,dot:c=!1}=U,h=(C8(n)?n.headers:n.raw.headers).get("Content-Type")?.split(";")[0].trim().toLowerCase();if(h==="multipart/form-data"||h==="application/x-www-form-urlencoded")return DO(n,{all:D,dot:c});return{}};async function DO(n,U){if(!C8(n)&&n.bodyCache.formData)return lx(await n.bodyCache.formData,U);let D=C8(n)?n.headers:n.raw.headers,c=await n.arrayBuffer(),g=rx(c,D.get("Content-Type")||"");if(!C8(n))n.bodyCache.formData=g;let f=await g;if(f)return lx(f,U);return{}}function lx(n,U){let D=Object.create(null);if(n.forEach((c,g)=>{if(!(U.all||g.endsWith("[]")))D[g]=c;else cO(D,g,c)}),U.dot)Object.entries(D).forEach(([c,g])=>{if(c.includes("."))gO(D,c,g),delete D[c]});return D}var cO=(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]},gO=(n,U,D)=>{if(/(?:^|\.)__proto__\./.test(U))return;let c=n,g=U.split(".");g.forEach((f,h)=>{if(h===g.length-1)c[f]=D;else{if(!c[f]||typeof c[f]!=="object"||Array.isArray(c[f])||c[f]instanceof File)c[f]=Object.create(null);c=c[f]}})};var cf=(n)=>{let U=n.split("/");if(U[0]==="")U.shift();return U},ex=(n)=>{let{groups:U,path:D}=fO(n),c=cf(D);return hO(c,U)},fO=(n)=>{let U=[];return n=n.replace(/\{[^}]+\}/g,(D,c)=>{let g=`@${c}`;return U.push([g,D]),g}),{groups:U,path:n}},hO=(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},w8={},sx=(n,U)=>{if(n==="*")return"*";let D=n.match(/^\:([^\{\}]+)(?:\{(.+)\})?$/);if(D){let c=`${n}#${U}`;if(!w8[c])if(D[2])w8[c]=U&&U[0]!==":"&&U[0]!=="*"?[c,D[1],new RegExp(`^${D[2]}(?=/${U})`)]:[n,D[1],new RegExp(`^${D[2]}$`)];else w8[c]=[n,D[1],!0];return w8[c]}return null},nW=(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)=>nW(n,decodeURI),gf=(n)=>{let U=n.url,D=U.indexOf("/",U.indexOf(":")+4),c=D;for(;c<U.length;c++){let g=U.charCodeAt(c);if(g===37){let f=U.indexOf("?",c),h=U.indexOf("#",c),x=f===-1?h===-1?void 0:h:h===-1?f:Math.min(f,h),T=U.slice(D,x);return xO(T.includes("%25")?T.replace(/%25/g,"%2525"):T)}else if(g===63||g===35)break}return U.slice(D,c)};var UW=(n)=>{let U=gf(n);return U.length>1&&U.at(-1)==="/"?U.slice(0,-1):U},m2=(n,U,...D)=>{if(D.length)U=m2(U,...D);return`${n?.[0]==="/"?"":"/"}${n}${U==="/"?"":`${n?.at(-1)==="/"?"":"/"}${U?.[0]==="/"?U.slice(1):U}`}`},j8=(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)},I8=(n)=>n.indexOf("%")!==-1?nW(n,WO):n,Df=(n)=>{if(n.indexOf("+")!==-1)n=n.replace(/\+/g," ");return I8(n)},DW=(n,U,D)=>{let c;if(!D&&U&&U.indexOf("%")===-1&&U.indexOf("+")===-1){let h=n.indexOf("?",8);if(h===-1)return;if(!n.startsWith(U,h+1))h=n.indexOf(`&${U}`,h+1);while(h!==-1){let x=n.charCodeAt(h+U.length+1);if(x===61){let T=h+U.length+2,W=n.indexOf("&",T);return Df(n.slice(T,W===-1?void 0:W))}else if(x==38||isNaN(x))return"";h=n.indexOf(`&${U}`,h+1)}if(c=/[%+]/.test(n),!c)return}let g=Object.create(null);c??=/[%+]/.test(n);let f=n.indexOf("?",8);while(f!==-1){let h=n.indexOf("&",f+1),x=n.indexOf("=",f);if(x>h&&h!==-1)x=-1;let T=n.slice(f+1,x===-1?h===-1?void 0:h:x);if(c)T=Df(T);if(f=h,T==="")continue;let W;if(x===-1)W="";else if(W=n.slice(x+1,h===-1?void 0:h),c)W=Df(W);if(D){if(!(g[T]&&Array.isArray(g[T])))g[T]=[];g[T].push(W)}else g[T]??=W}return U?g[U]:g},cW=DW,gW=(n,U)=>{return DW(n,U,!0)},WO=decodeURIComponent;var fW=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&&I8(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]=I8(c)}return n}#c(n){return this.#U[1]?this.#U[1][n]:n}query(n){return cW(this.url,n)}queries(n){return gW(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 tx(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[ox](){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 hW={Stringify:1,BeforeStream:2,Stream:3},TO=(n,U)=>{let D=new String(n);return D.isEscaped=!0,D.callbacks=U,D};var ff=async(n,U,D,c,g)=>{if(typeof n==="object"&&!(n instanceof String)){if(!(n instanceof Promise))n=n.toString();if(n instanceof Promise)n=await n}let f=n.callbacks;if(!f?.length)return Promise.resolve(n);if(g)g[0]+=n;else g=[n];let h=Promise.all(f.map((x)=>x({phase:U,buffer:g,context:c}))).then((x)=>Promise.all(x.filter(Boolean).map((T)=>ff(T,U,!1,c,g))).then(()=>g[0]));if(D)return TO(await h,f);else return h};var yO="text/plain; charset=UTF-8",hf=(n,U)=>{return{"Content-Type":n,...U}},Hc=(n,U)=>new Response(n,U),xf=class{#n;#U;env={};#D;finalized=!1;error;#f;#c;#g;#y;#W;#T;#x;#F;#i;constructor(n,U){if(this.#n=n,U)this.#c=U.executionCtx,this.env=U.env,this.#T=U.notFoundHandler,this.#i=U.path,this.#F=U.matchResult}get req(){return this.#U??=new fW(this.#n,this.#i,this.#F),this.#U}get event(){if(this.#c&&"respondWith"in this.#c)return this.#c;else throw Error("This context has no FetchEvent")}get executionCtx(){if(this.#c)return this.#c;else throw Error("This context has no ExecutionContext")}get res(){return this.#g||=Hc(null,{headers:this.#x??=new Headers})}set res(n){if(this.#g&&n){n=Hc(n.body,n);for(let[U,D]of this.#g.headers.entries()){if(U==="content-type")continue;if(U==="set-cookie"){let c=this.#g.headers.getSetCookie();n.headers.delete("set-cookie");for(let g of c)n.headers.append("set-cookie",g)}else n.headers.set(U,D)}}this.#g=n,this.finalized=!0}render=(...n)=>{return this.#W??=(U)=>this.html(U),this.#W(...n)};setLayout=(n)=>this.#y=n;getLayout=()=>this.#y;setRenderer=(n)=>{this.#W=n};header=(n,U,D)=>{if(this.finalized)this.#g=Hc(this.#g.body,this.#g);let c=this.#g?this.#g.headers:this.#x??=new Headers;if(U===void 0)c.delete(n);else if(D?.append)c.append(n,U);else c.set(n,U)};status=(n)=>{this.#f=n};set=(n,U)=>{this.#D??=new Map,this.#D.set(n,U)};get=(n)=>{return this.#D?this.#D.get(n):void 0};get var(){if(!this.#D)return{};return Object.fromEntries(this.#D)}#h(n,U,D){let c=this.#g?new Headers(this.#g.headers):this.#x;if(typeof U==="object"&&U.headers){c??=new Headers;for(let[f,h]of new Headers(U.headers))if(f==="set-cookie")c.append(f,h);else c.set(f,h)}if(D){if(!c){let f=0;for(let h in D)if(++f>1||typeof D[h]!=="string"){c=new Headers;break}}if(c)for(let f in D){let h=D[f];if(typeof h==="string")c.set(f,h);else{c.delete(f);for(let x of h)c.append(f,x)}}}let g=typeof U==="number"?U:U?.status??this.#f;return Hc(n,{status:g,headers:c??D})}newResponse=(...n)=>this.#h(...n);body=(n,U,D)=>this.#h(n,U,D);text=(n,U,D)=>{return!this.#x&&!this.#f&&!U&&!D&&!this.finalized?new Response(n):this.#h(n,U,hf(yO,D))};json=(n,U,D)=>{return this.#h(JSON.stringify(n),U,hf("application/json",D))};html=(n,U,D)=>{let c=(g)=>this.#h(g,U,hf("text/html; charset=UTF-8",D));return typeof n==="object"?ff(n,hW.Stringify,!1,{}).then(c):c(n)};redirect=(n,U)=>{let D=String(n);return this.header("Location",!/[^\x00-\xFF]/.test(D)?D:encodeURI(D)),this.newResponse(null,U??302)};notFound=()=>{return this.#T??=()=>Hc(),this.#T(this)}};var A1="ALL",xW="all",WW=["get","post","put","delete","options","patch","query"],_8="Can not add a route since the matcher is already built.",S8=class extends Error{};var TW="__COMPOSED_HANDLER";var FO=(n)=>{return n.text("404 Not Found",404)},yW=(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={}){[...WW,xW].forEach((f)=>{this[f]=(h,...x)=>{if(typeof h==="string")this.#n=h;else this.#f(f,this.#n,h);return x.forEach((T)=>{this.#f(f,this.#n,T)}),this}}),this.on=(f,h,...x)=>{for(let T of[h].flat()){this.#n=T;for(let W of[f].flat())x.map((y)=>{this.#f(W.toUpperCase(),this.#n,y)})}return this},this.use=(f,...h)=>{if(typeof f==="string")this.#n=f;else this.#n="*",h.unshift(f);return h.forEach((x)=>{this.#f(A1,this.#n,x)}),this};let{strict:c,...g}=U;Object.assign(this,g),this.getPath=c??!0?U.getPath??gf:UW}#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=FO;errorHandler=yW;route(U,D){let c=this.basePath(U);return D.routes.map((g)=>{let f;if(D.errorHandler===yW)f=g.handler;else f=async(h,x)=>(await Uf([],D.errorHandler)(h,()=>g.handler(h,x))).res,f[TW]=g.handler;c.#f(g.method,g.path,f,g.basePath)}),this}basePath(U){let D=this.#U();return D._basePath=m2(this._basePath,U),D}onError=(U)=>{return this.errorHandler=U,this};notFound=(U)=>{return this.#D=U,this};mount(U,D,c){let g,f;if(c)if(typeof c==="function")f=c;else if(f=c.optionHandler,c.replaceRequest===!1)g=(T)=>T;else g=c.replaceRequest;let h=f?(T)=>{let W=f(T);return Array.isArray(W)?W:[W]}:(T)=>{let W=void 0;try{W=T.executionCtx}catch{}return[T.env,W]};g||=(()=>{let T=m2(this._basePath,U),W=T==="/"?0:T.length;return(y)=>{let F=new URL(y.url);return F.pathname=this.getPath(y).slice(W)||"/",new Request(F,y)}})();let x=async(T,W)=>{let y=await D(g(T.req.raw),...h(T));if(y)return y;await W()};return this.#f(A1,m2(U,"*"),x),this}#f(U,D,c,g){U=U.toUpperCase(),D=m2(this._basePath,D);let f={basePath:g!==void 0?m2(this._basePath,g):this._basePath,path:D,method:U,handler:c};this.router.add(U,D,[c,f]),this.routes.push(f)}#c(U,D){if(U instanceof Error)return this.errorHandler(U,D);throw U}#g(U,D,c,g){if(g==="HEAD")return(async()=>new Response(null,await this.#g(U,D,c,"GET")))();let f=this.getPath(U,{env:c}),h=this.router.match(g,f),x=new xf(U,{path:f,matchResult:h,env:c,executionCtx:D,notFoundHandler:this.#D});if(h[0].length===1){let W;try{W=h[0][0][0][0](x,async()=>{x.res=await this.#D(x)})}catch(y){return this.#c(y,x)}return W instanceof Promise?W.then((y)=>y||(x.finalized?x.res:this.#D(x))).catch((y)=>this.#c(y,x)):W??this.#D(x)}let T=Uf(h[0],this.errorHandler,this.#D);return(async()=>{try{let W=await T(x);if(!W.finalized)throw Error("Context is not finalized. Did you forget to return a Response object or `await next()`?");return W.res}catch(W){return this.#c(W,x)}})()}fetch=(U,...D)=>{return this.#g(U,D[1],D[0],U.method)};request=(U,D,c,g)=>{if(U instanceof Request)return this.fetch(D?new Request(U,D):U,c,g);return U=U.toString(),this.fetch(new Request(/^https?:\/\//.test(U)?U:`http://localhost${m2("/",U)}`,D),c,g)};fire=()=>{addEventListener("fetch",(U)=>{U.respondWith(this.#g(U.request,U,void 0,U.request.method))})}};var Lc=[];function v8(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 N8="[^/]+",iD=".*",ZU="(?:|/.*)",a2=Symbol(),iW=new Set(".\\+*[^]$()");function iO(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===N8)return 1;else if(U===N8)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?["","",iD]:["","",N8]:null:W==="/*"?["","",ZU]:W.match(/^\:([^\{\}]+)(?:\{(.+)\})?$/),F;if(y){let i=y[1],X=y[2]||N8;if(i&&y[2]){if(X===".*")throw a2;if(X=X.replace(/^\((?!\?:)(?=[^)]+\)$)/,"(?:"),/\((?!\?:)/.test(X))throw a2;if(X.length===1&&iW.has(X))throw a2}if(F=h.#D[X],!F){if(X!==iD&&X!==ZU){for(let $ in h.#D)if((X.length>1||$.length>1)&&$!==iD&&$!==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!==iD&&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(iO).map((c)=>{let g=this.#D[c],f=g.buildRegExpStr();return f===""?"":(typeof g.#U==="number"?`(${c})@${g.#U}`:iW.has(c)?`\\${c}`:c)+f}).filter(Boolean);if(typeof this.#n==="number"&&this.#n!==-1)D.unshift(`#${this.#n}`);if(D.length===0)return"";if(D.length===1)return D[0];return"(?:"+D.join("|")+")"}};var Wf=class{#n={varIndex:0};#U=new 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 JW=Object.create(null);function $W(n){return JW[n]??=new RegExp(n==="*"?"":`^${n.replace(/\/\*$|([.\\+*[^\]$()])/g,(U,D)=>D?`\\${D}`:"(?:|/.*)")}$`)}function XO(){JW=Object.create(null)}function P8(n,U){if(!n)return;for(let D of Object.keys(n).sort((c,g)=>g.length-c.length))if($W(D).test(U))return[...n[D]];return}var R8=class{name="RegExpRouter";#n;#U;#D;constructor(){this.#n={[A1]:Object.create(null)},this.#U={[A1]:Object.create(null)},this.#D={[A1]:new Wf}}#f(n,U){try{this.#D[n].insert(U,!/\*|\/:/.test(U))}catch(D){throw D===a2?new S8(U):D}}add(n,U,D){let c=this.#n,g=this.#U;if(!c||!g)throw Error(_8);if(!c[n])this.#D[n]=new Wf,[c,g].forEach((x)=>{x[n]=Object.create(null),Object.keys(x[A1]).forEach((T)=>{x[n][T]=[...x[A1][T]],this.#f(n,T)})});if(U==="/*")U="*";let f=(U.match(/\/:/g)||[]).length;if(/\*$/.test(U)){let x=$W(U);Object.keys(c).forEach((T)=>{if((n===A1||n===T)&&!c[T][U])this.#f(T,U),c[T][U]=P8(c[T],U)||P8(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=j8(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]=[...P8(c[y],W)||P8(c[A1],W)||[]];g[y][W].push([D,f-T+x+1])}})}}match=v8;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,XO(),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 JO=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=v8};var Tf=class{name="SmartRouter";#n=[];#U=[];constructor(n){this.#n=n.routers}add(n,U,D){if(!this.#U)throw Error(_8);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 S8)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 Ec=Object.create(null),$O=(n)=>{for(let U in n)return!0;return!1},VW=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=ex(D),h=[];for(let x=0,T=f.length;x<T;x++){let W=f[x],y=f[x+1],F=sx(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!==Ec||f&&f!==Ec)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=Ec;let f=[this],h=cf(D),x=[],T=h.length,W=null;for(let y=0;y<T;y++){let F=h[y],i=y===T-1,X=[];for(let Q=0,Y=f.length;Q<Y;Q++){let V=f[Q],G=V.#U[F];if(G)if(G.#c=V.#c,i){if(G.#U["*"])this.#g(c,G.#U["*"],U,V.#c);this.#g(c,G,U,V.#c)}else X.push(G);for(let J=0,B=V.#D.length;J<B;J++){let z=V.#D[J],q=V.#c===Ec?{}:{...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 v=D[0]==="/"?1:0;for(let P=0;P<T;P++)W[P]=v,v+=h[P].length+1}let w=D.substring(W[y]),H=O.exec(w);if(H){if(q[M]=H[0],this.#g(c,_,U,V.#c,q),H[0].length===w.length&&_.#U["*"])this.#g(c,_.#U["*"],U,V.#c,q);if($O(_.#U)){_.#c=q;let v=H[0].match(/\//g)?.length??0;(x[v]||=[]).push(_)}continue}}if(O===!0||O.test(F))if(q[M]=F,i){if(this.#g(c,_,U,q,V.#c),_.#U["*"])this.#g(c,_.#U["*"],U,q,V.#c)}else _.#c=q,X.push(_)}}let $=x.shift();f=$?X.concat($):X}if(c.length>1)c.sort((y,F)=>{return y.score-F.score});return[c.map(({handler:y,params:F})=>[y,F])]}};var yf=class{name="TrieRouter";#n;constructor(){this.#n=new VW}add(n,U,D){let c=j8(U);if(c){for(let g=0,f=c.length;g<f;g++)this.#n.insert(n,c[g],D);return}this.#n.insert(n,U,D)}match(n,U){return this.#n.search(n,U)}};var Ff=class extends FW{constructor(n={}){super(n);this.router=n.router??new Tf({routers:[new R8,new yf]})}};import{getAgentDir as xs}from"@earendil-works/pi-coding-agent";import{isIP as QW}from"node:net";function YW(n){return(n.startsWith("[")&&n.endsWith("]")?n.slice(1,-1):n).toLowerCase().replace(/\.$/,"")}function BW(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 YW(U.hostname)}catch{return null}}function VO(n){let U=n?.trim();if(!U)return null;return QW(U)?YW(U):BW(U)}function QO(n){return n==="localhost"||n.endsWith(".localhost")}function GW(){return[process.env.PI_WEB_HOSTNAME,...process.env.PI_WEB_ALLOWED_HOSTS?.split(",")??[]].filter((n)=>Boolean(n?.trim()))}function KW(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?KW(`${U.protocol}//${D}`):null}function BO(n){if(n.method!=="GET"||n.headers.get("sec-fetch-mode")!=="navigate"||n.headers.get("sec-fetch-dest")!=="document"||n.headers.get("sec-fetch-user")!=="?1")return!1;try{return/^\/api\/sessions\/[^/]+\/export$/.test(new URL(n.url).pathname)}catch{return!1}}function Xf(n,U=GW()){let D=n.headers.get("host"),c=D?BW(D):null;if(!c)return!1;if(QO(c)||QW(c))return!0;return U.some((g)=>VO(g)===c)}function GO(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&&KW(U)===c}function KO(n){return n.headers.has("origin")||n.headers.has("sec-fetch-site")}function U2(n,U=GW()){if(!Xf(n,U))return!1;if(BO(n))return!0;return!KO(n)||GO(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 ZO,timingSafeEqual as bO}from"node:crypto";var zO="pi";function ZW(n){return ZO("sha256").update(n,"utf8").digest()}function bW(n,U){return bO(ZW(n),ZW(U))}function Jf(n=process.env.PI_WEB_PASSWORD){return typeof n==="string"&&n.length>0}function zW(n,U=process.env.PI_WEB_PASSWORD){if(!Jf(U)||!n)return!1;let D=/^Basic\s+(\S+)$/i.exec(n);if(!D)return!1;let c;try{let W=Buffer.from(D[1],"base64");if(W.toString("base64")!==D[1])return!1;c=new TextDecoder("utf-8",{fatal:!0}).decode(W)}catch{return!1}let g=c.indexOf(":");if(g===-1)return!1;let f=c.slice(0,g),h=c.slice(g+1),x=bW(f,zO),T=bW(h,U);return x&&T}class $f extends Request{nextUrl;constructor(n){let U=n.method!=="GET"&&n.method!=="HEAD";super(n.url,{method:n.method,headers:n.headers,body:U?n.body:void 0,duplex:U?"half":void 0,signal:n.signal});this.nextUrl=new URL(n.url)}}class K extends Response{static json(n,U){let D=new Headers(U?.headers);return D.set("content-type","application/json; charset=utf-8"),new K(JSON.stringify(n),{status:U?.status??200,statusText:U?.statusText,headers:D})}}var Vf=!1,OW=performance.now();function qW(n){if(Vf=n,OW=performance.now(),Vf)MW("boot","debug log enabled")}function bU(n){return(U,D)=>MW(n,U,D)}function MW(n,U,D){if(!Vf)return;let c=performance.now()-OW,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 OO=bU("mount"),qO=["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 qO){let T=D[x];if(typeof T!=="function")continue;let W=T;n.on(x,h,async(y)=>{let F=performance.now(),i={};for(let[$,{hono:Q,catchAll:Y}]of f)if(Y){let V=y.req.param(Q)??"";i[$]=V===""?[]:V.split("/")}else i[$]=y.req.param(Q)??"";let X=await W(new $f(y.req.raw),{params:Promise.resolve(i)});return OO(`${x} ${y.req.path}`,`${X.status} ${Math.round(performance.now()-F)}ms`),X})}}var Lf={};U1(Lf,{GET:()=>Jq});import{tmpdir as iq}from"node:os";import{Readable as Xq}from"node:stream";import{constants as Qf}from"node:fs";import{lstat as MO,open as AO}from"node:fs/promises";import{basename as HO,dirname as LO,resolve as AW}from"node:path";var u8=5242880;function HW(n,U){let D=AW(n);if(LO(D)!==AW(U))return null;if(!/^pi-bash-[A-Za-z0-9_-]+\.log$/.test(HO(D)))return null;return D}async function Yf(n){if(!(await MO(n)).isFile())throw Error("Bash output path is not a regular file");let D=typeof Qf.O_NOFOLLOW==="number"?Qf.O_NOFOLLOW:0,c=await AO(n,Qf.O_RDONLY|D);try{let g=await c.stat();if(!g.isFile())throw Error("Bash output path is not a regular file");return{handle:c,fileInfo:g}}catch(g){throw await c.close(),g}}async function LW(n,U=u8){let{handle:D,fileInfo:c}=await Yf(n);try{if(c.size>U)return{tooLarge:!0,size:c.size};let g=Buffer.alloc(c.size),f=0;while(f<g.length){let h=await D.read(g,f,g.length-f,f);if(h.bytesRead===0)break;f+=h.bytesRead}return{tooLarge:!1,content:g.subarray(0,f).toString("utf8"),size:f}}finally{await D.close()}}import{open as NW,readFile as dO,readdir as pO}from"node:fs/promises";import{existsSync as mO,readdirSync as aO}from"node:fs";import{join as p8,normalize as zf}from"node:path";import{getAgentDir as oO,buildContextEntries as rO,buildSessionContext as lO,SessionManager as PW}from"@earendil-works/pi-coding-agent";function EO(n){return typeof n==="object"&&n!==null&&!Array.isArray(n)}function CO(n){if(!EO(n)||n.type!=="toolCall")return null;return{type:"toolCall",toolCallId:typeof n.toolCallId==="string"?n.toolCallId:typeof n.id==="string"?n.id:"",toolName:typeof n.toolName==="string"?n.toolName:typeof n.name==="string"?n.name:"",input:typeof n.input==="object"&&n.input!==null&&!Array.isArray(n.input)?n.input:typeof n.arguments==="object"&&n.arguments!==null&&!Array.isArray(n.arguments)?n.arguments:{}}}function Bf(n){if(n.role!=="assistant")return n;let U=n.content;if(!Array.isArray(U))return n;let D=U.map((c)=>{return CO(c)??c});return{...n,content:D}}import EW from"node:path";function En(n,U=process.platform){let D=U==="win32"?EW.win32.normalize(n):EW.posix.normalize(n);return U==="win32"?D.toLowerCase():D}import{execFile as wO}from"node:child_process";import{existsSync as k8,mkdirSync as jO,realpathSync as IO}from"node:fs";import{basename as _O,dirname as Kf,join as wW,resolve as SO}from"node:path";import{promisify as vO}from"node:util";function u1(n){let U=n.replace(/\\/g,"/");return/^[a-zA-Z]:$/.test(U)?`${U}/`:U}function Gf(){if(!globalThis.__piAdditionalAllowedRoots)globalThis.__piAdditionalAllowedRoots=new Set;return globalThis.__piAdditionalAllowedRoots}function On(n){if(!n)return;let U=u1(n);Gf().add(U),globalThis.__piAllowedRootsCache?.roots.add(U)}var NO=vO(wO),CW=60000;function PO(){if(!globalThis.__piProjectCache)globalThis.__piProjectCache=new Map;return globalThis.__piProjectCache}function jW(){globalThis.__piProjectCache?.clear()}async function zU(n,U){let{stdout:D}=await NO("git",["-C",n,...U],{timeout:1e4,maxBuffer:1048576,env:{...process.env,LC_ALL:"C"}});return D.trim()}function RO(n){let U=Kf(n);if(!U.endsWith("-worktrees"))return null;let D=U.slice(0,-10);if(!D||!k8(wW(D,".git")))return null;return{projectRoot:D,branch:_O(n),isWorktree:!0,isTopLevel:!0}}async function d8(n){let U=PO(),D=U.get(n);if(D&&D.expiresAt>Date.now())return D.info;let c;try{if(!k8(n))return c=RO(n)??{projectRoot:n,branch:null,isWorktree:!1,isTopLevel:!1},U.set(n,{info:c,expiresAt:Date.now()+CW}),c;let g=await zU(n,["rev-parse","--path-format=absolute","--git-common-dir","--git-dir","--show-toplevel","--abbrev-ref","HEAD"]),[f,h,x,T]=g.split(`
253
253
  `).map((i)=>i.trim()),W=n;try{W=IO(n)}catch{}let y=x===W,F=h!==f&&y;c={projectRoot:F?Kf(f):n,branch:T&&T!=="HEAD"?T:null,isWorktree:F,isTopLevel:y}}catch{c={projectRoot:n,branch:null,isWorktree:!1,isTopLevel:!1}}return U.set(n,{info:c,expiresAt:Date.now()+CW}),c}async function uO(n){let U=await zU(n,["rev-parse","--path-format=absolute","--git-common-dir"]);return Kf(U)}async function Zf(n){let U=await zU(n,["worktree","list","--porcelain"]),D=[],c=null,g=()=>{if(c?.path){if(!c.prunable&&k8(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 kO(n){return n.replace(/[/\\:*?"<>|\s]+/g,"-").replace(/^-+|-+$/g,"")}async function IW(n,U){let D=U.trim();if(!D)throw Error("Branch name is required");let c=kO(D);if(!c)throw Error(`Invalid branch name: ${U}`);let g=await uO(n),f=`${SO(g)}-worktrees`,h=wW(f,c);if(k8(h))throw Error(`Directory already exists: ${h}`);jO(f,{recursive:!0});let x=!1;try{await zU(g,["rev-parse","--verify","--quiet",`refs/heads/${D}`]),x=!0}catch{x=!1}try{if(x)await zU(g,["worktree","add","--",h,D]);else await zU(g,["worktree","add","-b",D,"--",h])}catch(T){throw Error(SW(T),{cause:T})}return On(h),jW(),{path:h,branch:D}}async function _W(n,U,D=!1){let g=(await Zf(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(SW(f),{cause:f})}jW()}function SW(n){let U=n.stderr;if(typeof U==="string"&&U.trim())return U.trim();return n instanceof Error?n.message:String(n)}async function tO(n,U){let D=new Map;for(let f of n)D.set(En(f.path),f.id);let c=[...new Set(n.map((f)=>f.cwd).filter(Boolean))],g=new Map;return await Promise.all(c.map(async(f)=>{g.set(f,await d8(f))})),n.map((f)=>{o2(f.id,f.path,U);let h=f.cwd?g.get(f.cwd):void 0;return{path:f.path,id:f.id,cwd:f.cwd,name:f.name,created:f.created instanceof Date?f.created.toISOString():String(f.created),modified:f.modified instanceof Date?f.modified.toISOString():String(f.modified),messageCount:f.messageCount,firstMessage:f.firstMessage||"(no messages)",parentSessionId:f.parentSessionPath?D.get(En(f.parentSessionPath)):void 0,projectRoot:h?.projectRoot??f.cwd,...h?.isWorktree&&h.branch?{worktreeBranch:h.branch}:{}}})}async function eO(){let n=await RW(p8(oO(),"sessions"));for(let U of n)o2(U.id,U.path);return n}async function sO(n){let U=[],D=async(c)=>{let g;try{g=await pO(c,{withFileTypes:!0})}catch{return}for(let f of g){let h=p8(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 nq(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 Uq(n){let U=await dO(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 $=nq(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 Dq(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 cq(n){try{let U=await NW(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-D4oTXCdu.js";import{y as e}from"./mermaid-parser.core-DWpUNspI.js";export{e as createArchitectureServices};