@rainmanhhh/pi-web 0.8.7 → 0.8.8

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/README.md +1 -1
  2. package/README.zh-CN.md +1 -1
  3. package/dist/server.mjs +1 -1
  4. package/dist/static/assets/architecture-YZFGNWBL-CE8zmxGh.js +1 -0
  5. package/dist/static/assets/{architectureDiagram-Q4EWVU46-BUaFXLue.js → architectureDiagram-Q4EWVU46-Bo_C1YHd.js} +1 -1
  6. package/dist/static/assets/{blockDiagram-DXYQGD6D-BD7crHZn.js → blockDiagram-DXYQGD6D-oOd8ePeg.js} +1 -1
  7. package/dist/static/assets/{c4Diagram-AHTNJAMY-BTvR1Qix.js → c4Diagram-AHTNJAMY-CwcawFAB.js} +1 -1
  8. package/dist/static/assets/channel-BA9JvJ8R.js +1 -0
  9. package/dist/static/assets/{chunk-4TB4RGXK-CYXNKQNe.js → chunk-4TB4RGXK-COyix3Ib.js} +1 -1
  10. package/dist/static/assets/{chunk-5FUZZQ4R-BghvyuR7.js → chunk-5FUZZQ4R-D9z2FUZb.js} +1 -1
  11. package/dist/static/assets/{chunk-5PVQY5BW-CZT35iHI.js → chunk-5PVQY5BW-pT0Jdfcx.js} +1 -1
  12. package/dist/static/assets/{chunk-EDXVE4YY-C4TkNvln.js → chunk-EDXVE4YY-D3tO4lt0.js} +1 -1
  13. package/dist/static/assets/{chunk-ENJZ2VHE-BNRddB0h.js → chunk-ENJZ2VHE-CBn4WOJm.js} +1 -1
  14. package/dist/static/assets/{chunk-ICPOFSXX-BIhiNjvk.js → chunk-ICPOFSXX-XeH99vHC.js} +1 -1
  15. package/dist/static/assets/{chunk-K5T4RW27-FpH_VPgE.js → chunk-K5T4RW27-C8DhOshc.js} +1 -1
  16. package/dist/static/assets/{chunk-OYMX7WX6-Dg0dFe8H.js → chunk-OYMX7WX6-UKLcc72x.js} +1 -1
  17. package/dist/static/assets/{chunk-U2HBQHQK-CJqSKuXA.js → chunk-U2HBQHQK-BN1InmER.js} +1 -1
  18. package/dist/static/assets/{chunk-X2U36JSP-DVXuKdYc.js → chunk-X2U36JSP-AI72-plh.js} +1 -1
  19. package/dist/static/assets/{chunk-YZCP3GAM-D4t97aMk.js → chunk-YZCP3GAM-DFmXkClv.js} +1 -1
  20. package/dist/static/assets/{chunk-ZZ45TVLE-D3ALxVxH.js → chunk-ZZ45TVLE-Bbg4x1-v.js} +1 -1
  21. package/dist/static/assets/classDiagram-6PBFFD2Q-DZbDGDKl.js +1 -0
  22. package/dist/static/assets/classDiagram-v2-HSJHXN6E-DZbDGDKl.js +1 -0
  23. package/dist/static/assets/clone-C7NO38cA.js +1 -0
  24. package/dist/static/assets/{dagre-DANBRJgS.js → dagre-1CYS-Ny4.js} +1 -1
  25. package/dist/static/assets/{dagre-KV5264BT-RX495Ogs.js → dagre-KV5264BT-D0MCXq-V.js} +1 -1
  26. package/dist/static/assets/{diagram-5BDNPKRD-B3TQrwLp.js → diagram-5BDNPKRD-BZrgv2Py.js} +1 -1
  27. package/dist/static/assets/{diagram-G4DWMVQ6-DMTfV1fq.js → diagram-G4DWMVQ6-XQrZNV3H.js} +1 -1
  28. package/dist/static/assets/{diagram-MMDJMWI5-BA8Bf6LU.js → diagram-MMDJMWI5-Bz-jnwT3.js} +1 -1
  29. package/dist/static/assets/{diagram-TYMM5635-DZgWIMF2.js → diagram-TYMM5635-5obDSKfG.js} +1 -1
  30. package/dist/static/assets/{erDiagram-SMLLAGMA-BPjiJgpM.js → erDiagram-SMLLAGMA-cfTRKaOt.js} +1 -1
  31. package/dist/static/assets/{flatten-DYA82rhy.js → flatten-C2rQ8QFK.js} +1 -1
  32. package/dist/static/assets/{flowDiagram-DWJPFMVM-C8itnDyk.js → flowDiagram-DWJPFMVM-OrquTUrO.js} +1 -1
  33. package/dist/static/assets/{ganttDiagram-T4ZO3ILL-QijQZ_7A.js → ganttDiagram-T4ZO3ILL-CQsiK_P_.js} +1 -1
  34. package/dist/static/assets/gitGraph-7Q5UKJZL-B_fLhcQF.js +1 -0
  35. package/dist/static/assets/{gitGraphDiagram-UUTBAWPF-B4SbXUo2.js → gitGraphDiagram-UUTBAWPF-nJKHP8BK.js} +1 -1
  36. package/dist/static/assets/{graphlib-CAZZWEle.js → graphlib-C4HR9ncL.js} +1 -1
  37. package/dist/static/assets/{highlighted-body-OFNGDK62-B6SZt-Xj.js → highlighted-body-OFNGDK62-W4WpIyFI.js} +1 -1
  38. package/dist/static/assets/{index-CtaBtFPm.js → index-C-PDc0L4.js} +5 -5
  39. package/dist/static/assets/info-OMHHGYJF-UaubFIl0.js +1 -0
  40. package/dist/static/assets/{infoDiagram-42DDH7IO-SEL8m7Hn.js → infoDiagram-42DDH7IO-2Jb4kbnI.js} +1 -1
  41. package/dist/static/assets/{ishikawaDiagram-UXIWVN3A-BiGygTnl.js → ishikawaDiagram-UXIWVN3A-mFEvcuxD.js} +1 -1
  42. package/dist/static/assets/{journeyDiagram-VCZTEJTY-x16DmnC7.js → journeyDiagram-VCZTEJTY-i0HF8ovx.js} +1 -1
  43. package/dist/static/assets/{kanban-definition-6JOO6SKY-B_Vmy_se.js → kanban-definition-6JOO6SKY-DxJ4yAl1.js} +1 -1
  44. package/dist/static/assets/{line-BXZmYadU.js → line-DgJyNdHA.js} +1 -1
  45. package/dist/static/assets/mermaid-GHXKKRXX-BUs0ZH-Y.js +1 -0
  46. package/dist/static/assets/{mermaid-parser.core-BdiNtuYK.js → mermaid-parser.core-DY6a9lAQ.js} +2 -2
  47. package/dist/static/assets/{mermaid.core-Cy3kC-2x.js → mermaid.core-DzXctdsm.js} +4 -4
  48. package/dist/static/assets/{mindmap-definition-QFDTVHPH-DibAS34Z.js → mindmap-definition-QFDTVHPH-CVN7seuD.js} +1 -1
  49. package/dist/static/assets/packet-4T2RLAQJ-JH_PFOoa.js +1 -0
  50. package/dist/static/assets/pie-ZZUOXDRM-Bbm7ur0x.js +1 -0
  51. package/dist/static/assets/{pieDiagram-DEJITSTG-DE3IRdo2.js → pieDiagram-DEJITSTG-te9h9cEd.js} +1 -1
  52. package/dist/static/assets/{quadrantDiagram-34T5L4WZ-BnFzq8uS.js → quadrantDiagram-34T5L4WZ-CFxrdRQ5.js} +1 -1
  53. package/dist/static/assets/radar-PYXPWWZC-C_9SLXgF.js +1 -0
  54. package/dist/static/assets/{reduce-D9Ymtwj-.js → reduce-DmSNNaJl.js} +1 -1
  55. package/dist/static/assets/{requirementDiagram-MS252O5E-4JH5mfMt.js → requirementDiagram-MS252O5E-Ngm2lF8g.js} +1 -1
  56. package/dist/static/assets/{sankeyDiagram-XADWPNL6-BBM3bCVp.js → sankeyDiagram-XADWPNL6-D4jEBW99.js} +1 -1
  57. package/dist/static/assets/{sequenceDiagram-FGHM5R23-Ngkhph4n.js → sequenceDiagram-FGHM5R23-DYOJK9h9.js} +1 -1
  58. package/dist/static/assets/{stateDiagram-FHFEXIEX-B8QHUbFP.js → stateDiagram-FHFEXIEX-D73mnSRS.js} +1 -1
  59. package/dist/static/assets/stateDiagram-v2-QKLJ7IA2--DsrJkDL.js +1 -0
  60. package/dist/static/assets/{timeline-definition-GMOUNBTQ-Cj_jCa6v.js → timeline-definition-GMOUNBTQ-BnMQm946.js} +1 -1
  61. package/dist/static/assets/treeView-SZITEDCU-ByeZeQy9.js +1 -0
  62. package/dist/static/assets/treemap-W4RFUUIX-DGdAHbk4.js +1 -0
  63. package/dist/static/assets/{vennDiagram-DHZGUBPP-Nv73eNL-.js → vennDiagram-DHZGUBPP-T7V0-LG1.js} +1 -1
  64. package/dist/static/assets/wardley-RL74JXVD-CiCnLicM.js +1 -0
  65. package/dist/static/assets/{wardleyDiagram-NUSXRM2D-D4_-w6kd.js → wardleyDiagram-NUSXRM2D-BngVEiq9.js} +1 -1
  66. package/dist/static/assets/{xychartDiagram-5P7HB3ND-BWrW2XAn.js → xychartDiagram-5P7HB3ND-YQVhe9SR.js} +1 -1
  67. package/dist/static/index.html +1 -1
  68. package/package.json +1 -1
  69. package/dist/static/assets/architecture-YZFGNWBL-DSVeA3Mc.js +0 -1
  70. package/dist/static/assets/channel-DSbgxqFl.js +0 -1
  71. package/dist/static/assets/classDiagram-6PBFFD2Q-3fKgRhOi.js +0 -1
  72. package/dist/static/assets/classDiagram-v2-HSJHXN6E-3fKgRhOi.js +0 -1
  73. package/dist/static/assets/clone-Dgktwry5.js +0 -1
  74. package/dist/static/assets/gitGraph-7Q5UKJZL-DUTBJasc.js +0 -1
  75. package/dist/static/assets/info-OMHHGYJF-y8VVrvpT.js +0 -1
  76. package/dist/static/assets/mermaid-GHXKKRXX-CZfowopI.js +0 -1
  77. package/dist/static/assets/packet-4T2RLAQJ-QWjI5ifX.js +0 -1
  78. package/dist/static/assets/pie-ZZUOXDRM-CCpZfmHW.js +0 -1
  79. package/dist/static/assets/radar-PYXPWWZC-DJRfpCAG.js +0 -1
  80. package/dist/static/assets/stateDiagram-v2-QKLJ7IA2-8s677m33.js +0 -1
  81. package/dist/static/assets/treeView-SZITEDCU-BYIf12Kb.js +0 -1
  82. package/dist/static/assets/treemap-W4RFUUIX-ChTAE-ps.js +0 -1
  83. package/dist/static/assets/wardley-RL74JXVD-D4JZq5aY.js +0 -1
package/README.md CHANGED
@@ -25,7 +25,7 @@ npm install -g @rainmanhhh/pi-web # 或 bun add -g @rainmanhhh/pi-web
25
25
  pi-web
26
26
  ```
27
27
 
28
- The packaged server listens on `http://127.0.0.1:3142` by default and binds `127.0.0.1`. It serves the API and the built frontend from one process; add `--open` to open the browser automatically once it is ready.
28
+ The packaged server listens on `http://127.0.0.1:31415` by default and binds `127.0.0.1`. It serves the API and the built frontend from one process; add `--open` to open the browser automatically once it is ready.
29
29
 
30
30
  **Options:**
31
31
 
package/README.zh-CN.md CHANGED
@@ -23,7 +23,7 @@ npm install -g @rainmanhhh/pi-web
23
23
  pi-web
24
24
  ```
25
25
 
26
- 发布版服务默认监听 `http://127.0.0.1:3142` 并绑定 `127.0.0.1`,单进程同时提供 API 和构建后的前端;加 `--open` 可在服务就绪后自动打开浏览器。
26
+ 发布版服务默认监听 `http://127.0.0.1:31415` 并绑定 `127.0.0.1`,单进程同时提供 API 和构建后的前端;加 `--open` 可在服务就绪后自动打开浏览器。
27
27
 
28
28
  **可选参数:**
29
29
 
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(),W=this.getOptionValue(h),T=this.options.find((y)=>y.negate&&h===y.attributeName()),x=this.options.find((y)=>!y.negate&&h===y.attributeName());if(T&&(T.presetArg===void 0&&W===!1||T.presetArg!==void 0&&W===T.presetArg))return T;return x||f},c=(f)=>{let h=D(f),W=h.attributeName();if(this.getOptionValueSource(W)==="env")return`environment variable '${h.envVar}'`;return`option '${h.flags}'`},g=`error: ${c(n)} cannot be used with ${c(U)}`;this.error(g,{code:"commander.conflictingOption"})}unknownOption(n){if(this._allowUnknownOption)return;let U="";if(n.startsWith("--")&&this._showSuggestionAfterError){let c=[],g=this;do{let f=g.createHelp().visibleOptions(g).filter((h)=>h.long).map((h)=>h.long);c=c.concat(f),g=g.parent}while(g&&!g._enablePositionalOptions);U=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 Hg(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 uW(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 dW(){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 h11=new iD;var kW={name:"@rainmanhhh/pi-web",version:"0.8.7",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","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/node-notifier":"^8.0.5","@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","node-notifier":"^10.0.1",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 lb}from"@earendil-works/pi-coding-agent";var pW={port:3142};var Uf=(n,U,D)=>{return(c,g)=>{let f=-1;return h(0);async function h(W){if(W<=f)throw Error("next() called multiple times");f=W;let T,x=!1,y;if(n[W])y=n[W][0][0],c.req.routeIndex=W;else y=W===n.length&&g||void 0;if(y)try{T=await y(c,()=>h(W+1))}catch(F){if(F instanceof Error&&U)c.error=F,T=await U(F,c),x=!0;else throw F}else if(c.finalized===!1&&D)T=await D(c);if(T&&(c.finalized===!1||x))c.res=T;return c}}};var mW=Symbol();var aW=(n,U)=>{return new Response(n,{headers:{"Content-Type":U.replace(/^[^;]+/,(c)=>c.toLowerCase())}}).formData()};var Eg=(n)=>("headers"in n),rW=async(n,U=Object.create(null))=>{let{all:D=!1,dot:c=!1}=U,h=(Eg(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 UO(n,{all:D,dot:c});return{}};async function UO(n,U){if(!Eg(n)&&n.bodyCache.formData)return oW(await n.bodyCache.formData,U);let D=Eg(n)?n.headers:n.raw.headers,c=await n.arrayBuffer(),g=aW(c,D.get("Content-Type")||"");if(!Eg(n))n.bodyCache.formData=g;let f=await g;if(f)return oW(f,U);return{}}function oW(n,U){let D=Object.create(null);if(n.forEach((c,g)=>{if(!(U.all||g.endsWith("[]")))D[g]=c;else DO(D,g,c)}),U.dot)Object.entries(D).forEach(([c,g])=>{if(c.includes("."))cO(D,c,g),delete D[c]});return D}var DO=(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]},cO=(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},lW=(n)=>{let{groups:U,path:D}=gO(n),c=cf(D);return fO(c,U)},gO=(n)=>{let U=[];return n=n.replace(/\{[^}]+\}/g,(D,c)=>{let g=`@${c}`;return U.push([g,D]),g}),{groups:U,path:n}},fO=(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},wg={},tW=(n,U)=>{if(n==="*")return"*";let D=n.match(/^\:([^\{\}]+)(?:\{(.+)\})?$/);if(D){let c=`${n}#${U}`;if(!wg[c])if(D[2])wg[c]=U&&U[0]!==":"&&U[0]!=="*"?[c,D[1],new RegExp(`^${D[2]}(?=/${U})`)]:[n,D[1],new RegExp(`^${D[2]}$`)];else wg[c]=[n,D[1],!0];return wg[c]}return null},eW=(n,U)=>{try{return U(n)}catch{return n.replace(/(?:%[0-9A-Fa-f]{2})+/g,(D)=>{try{return U(D)}catch{return D}})}},hO=(n)=>eW(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),W=f===-1?h===-1?void 0:h:h===-1?f:Math.min(f,h),T=U.slice(D,W);return hO(T.includes("%25")?T.replace(/%25/g,"%2525"):T)}else if(g===63||g===35)break}return U.slice(D,c)};var sW=(n)=>{let U=gf(n);return U.length>1&&U.at(-1)==="/"?U.slice(0,-1):U},a2=(n,U,...D)=>{if(D.length)U=a2(U,...D);return`${n?.[0]==="/"?"":"/"}${n}${U==="/"?"":`${n?.at(-1)==="/"?"":"/"}${U?.[0]==="/"?U.slice(1):U}`}`},jg=(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)},Ig=(n)=>n.indexOf("%")!==-1?eW(n,WO):n,Df=(n)=>{if(n.indexOf("+")!==-1)n=n.replace(/\+/g," ");return Ig(n)},nx=(n,U,D)=>{let c;if(!D&&U&&U.indexOf("%")===-1&&U.indexOf("+")===-1){let h=n.indexOf("?",8);if(h===-1)return;if(!n.startsWith(U,h+1))h=n.indexOf(`&${U}`,h+1);while(h!==-1){let W=n.charCodeAt(h+U.length+1);if(W===61){let T=h+U.length+2,x=n.indexOf("&",T);return Df(n.slice(T,x===-1?void 0:x))}else if(W==38||isNaN(W))return"";h=n.indexOf(`&${U}`,h+1)}if(c=/[%+]/.test(n),!c)return}let g=Object.create(null);c??=/[%+]/.test(n);let f=n.indexOf("?",8);while(f!==-1){let h=n.indexOf("&",f+1),W=n.indexOf("=",f);if(W>h&&h!==-1)W=-1;let T=n.slice(f+1,W===-1?h===-1?void 0:h:W);if(c)T=Df(T);if(f=h,T==="")continue;let x;if(W===-1)x="";else if(x=n.slice(W+1,h===-1?void 0:h),c)x=Df(x);if(D){if(!(g[T]&&Array.isArray(g[T])))g[T]=[];g[T].push(x)}else g[T]??=x}return U?g[U]:g},Ux=nx,Dx=(n,U)=>{return nx(n,U,!0)},WO=decodeURIComponent;var cx=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&&Ig(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]=Ig(c)}return n}#c(n){return this.#U[1]?this.#U[1][n]:n}query(n){return Ux(this.url,n)}queries(n){return Dx(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 rW(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[mW](){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 gx={Stringify:1,BeforeStream:2,Stream:3},xO=(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((W)=>W({phase:U,buffer:g,context:c}))).then((W)=>Promise.all(W.filter(Boolean).map((T)=>ff(T,U,!1,c,g))).then(()=>g[0]));if(D)return xO(await h,f);else return h};var TO="text/plain; charset=UTF-8",hf=(n,U)=>{return{"Content-Type":n,...U}},Lc=(n,U)=>new Response(n,U),Wf=class{#n;#U;env={};#D;finalized=!1;error;#f;#c;#g;#y;#x;#T;#W;#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 cx(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||=Lc(null,{headers:this.#W??=new Headers})}set res(n){if(this.#g&&n){n=Lc(n.body,n);for(let[U,D]of this.#g.headers.entries()){if(U==="content-type")continue;if(U==="set-cookie"){let c=this.#g.headers.getSetCookie();n.headers.delete("set-cookie");for(let g of c)n.headers.append("set-cookie",g)}else n.headers.set(U,D)}}this.#g=n,this.finalized=!0}render=(...n)=>{return this.#x??=(U)=>this.html(U),this.#x(...n)};setLayout=(n)=>this.#y=n;getLayout=()=>this.#y;setRenderer=(n)=>{this.#x=n};header=(n,U,D)=>{if(this.finalized)this.#g=Lc(this.#g.body,this.#g);let c=this.#g?this.#g.headers:this.#W??=new Headers;if(U===void 0)c.delete(n);else if(D?.append)c.append(n,U);else c.set(n,U)};status=(n)=>{this.#f=n};set=(n,U)=>{this.#D??=new Map,this.#D.set(n,U)};get=(n)=>{return this.#D?this.#D.get(n):void 0};get var(){if(!this.#D)return{};return Object.fromEntries(this.#D)}#h(n,U,D){let c=this.#g?new Headers(this.#g.headers):this.#W;if(typeof U==="object"&&U.headers){c??=new Headers;for(let[f,h]of new Headers(U.headers))if(f==="set-cookie")c.append(f,h);else c.set(f,h)}if(D){if(!c){let f=0;for(let h in D)if(++f>1||typeof D[h]!=="string"){c=new Headers;break}}if(c)for(let f in D){let h=D[f];if(typeof h==="string")c.set(f,h);else{c.delete(f);for(let W of h)c.append(f,W)}}}let g=typeof U==="number"?U:U?.status??this.#f;return Lc(n,{status:g,headers:c??D})}newResponse=(...n)=>this.#h(...n);body=(n,U,D)=>this.#h(n,U,D);text=(n,U,D)=>{return!this.#W&&!this.#f&&!U&&!D&&!this.finalized?new Response(n):this.#h(n,U,hf(TO,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,gx.Stringify,!1,{}).then(c):c(n)};redirect=(n,U)=>{let D=String(n);return this.header("Location",!/[^\x00-\xFF]/.test(D)?D:encodeURI(D)),this.newResponse(null,U??302)};notFound=()=>{return this.#T??=()=>Lc(),this.#T(this)}};var A1="ALL",fx="all",hx=["get","post","put","delete","options","patch","query"],_g="Can not add a route since the matcher is already built.",Sg=class extends Error{};var Wx="__COMPOSED_HANDLER";var yO=(n)=>{return n.text("404 Not Found",404)},xx=(n,U)=>{if("getResponse"in n){let D=n.getResponse();return U.newResponse(D.body,D)}return console.error(n),U.text("Internal Server Error",500)},Tx=class n{get;post;put;delete;options;patch;query;all;on;use;router;getPath;_basePath="/";#n="/";routes=[];constructor(U={}){[...hx,fx].forEach((f)=>{this[f]=(h,...W)=>{if(typeof h==="string")this.#n=h;else this.#f(f,this.#n,h);return W.forEach((T)=>{this.#f(f,this.#n,T)}),this}}),this.on=(f,h,...W)=>{for(let T of[h].flat()){this.#n=T;for(let x of[f].flat())W.map((y)=>{this.#f(x.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((W)=>{this.#f(A1,this.#n,W)}),this};let{strict:c,...g}=U;Object.assign(this,g),this.getPath=c??!0?U.getPath??gf:sW}#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=yO;errorHandler=xx;route(U,D){let c=this.basePath(U);return D.routes.map((g)=>{let f;if(D.errorHandler===xx)f=g.handler;else f=async(h,W)=>(await Uf([],D.errorHandler)(h,()=>g.handler(h,W))).res,f[Wx]=g.handler;c.#f(g.method,g.path,f,g.basePath)}),this}basePath(U){let D=this.#U();return D._basePath=a2(this._basePath,U),D}onError=(U)=>{return this.errorHandler=U,this};notFound=(U)=>{return this.#D=U,this};mount(U,D,c){let g,f;if(c)if(typeof c==="function")f=c;else if(f=c.optionHandler,c.replaceRequest===!1)g=(T)=>T;else g=c.replaceRequest;let h=f?(T)=>{let x=f(T);return Array.isArray(x)?x:[x]}:(T)=>{let x=void 0;try{x=T.executionCtx}catch{}return[T.env,x]};g||=(()=>{let T=a2(this._basePath,U),x=T==="/"?0:T.length;return(y)=>{let F=new URL(y.url);return F.pathname=this.getPath(y).slice(x)||"/",new Request(F,y)}})();let W=async(T,x)=>{let y=await D(g(T.req.raw),...h(T));if(y)return y;await x()};return this.#f(A1,a2(U,"*"),W),this}#f(U,D,c,g){U=U.toUpperCase(),D=a2(this._basePath,D);let f={basePath:g!==void 0?a2(this._basePath,g):this._basePath,path:D,method:U,handler:c};this.router.add(U,D,[c,f]),this.routes.push(f)}#c(U,D){if(U instanceof Error)return this.errorHandler(U,D);throw U}#g(U,D,c,g){if(g==="HEAD")return(async()=>new Response(null,await this.#g(U,D,c,"GET")))();let f=this.getPath(U,{env:c}),h=this.router.match(g,f),W=new Wf(U,{path:f,matchResult:h,env:c,executionCtx:D,notFoundHandler:this.#D});if(h[0].length===1){let x;try{x=h[0][0][0][0](W,async()=>{W.res=await this.#D(W)})}catch(y){return this.#c(y,W)}return x instanceof Promise?x.then((y)=>y||(W.finalized?W.res:this.#D(W))).catch((y)=>this.#c(y,W)):x??this.#D(W)}let T=Uf(h[0],this.errorHandler,this.#D);return(async()=>{try{let x=await T(W);if(!x.finalized)throw Error("Context is not finalized. Did you forget to return a Response object or `await next()`?");return x.res}catch(x){return this.#c(x,W)}})()}fetch=(U,...D)=>{return this.#g(U,D[1],D[0],U.method)};request=(U,D,c,g)=>{if(U instanceof Request)return this.fetch(D?new Request(U,D):U,c,g);return U=U.toString(),this.fetch(new Request(/^https?:\/\//.test(U)?U:`http://localhost${a2("/",U)}`,D),c,g)};fire=()=>{addEventListener("fetch",(U)=>{U.respondWith(this.#g(U.request,U,void 0,U.request.method))})}};var Cc=[];function vg(n,U){let D=this.buildAllMatchers(),c=(g,f)=>{let h=D[g]||D[A1],W=h[2][f];if(W)return W;let T=f.match(h[0]);if(!T)return[[],Cc];let x=T.indexOf("",1);return[h[1][x],T]};return this.match=c,c(n,U)}var Ng="[^/]+",XD=".*",bU="(?:|/.*)",o2=Symbol(),yx=new Set(".\\+*[^]$()");function FO(n,U){if(n.length===1)return U.length===1?n<U?-1:1:-1;if(U.length===1)return 1;if(n===XD||n===bU)return U===bU?-1:1;else if(U===XD||U===bU)return-1;if(n===Ng)return 1;else if(U===Ng)return-1;return n.length===U.length?n<U?-1:1:U.length-n.length}var Fx=class n{#n;#U;#D=Object.create(null);insert(U,D,c,g,f){let h=this;for(let W=0,T=U.length;W<T;W++){let x=U[W],y=x.length===1?x==="*"?W===T-1?["","",XD]:["","",Ng]:null:x==="/*"?["","",bU]:x.match(/^\:([^\{\}]+)(?:\{(.+)\})?$/),F;if(y){let i=y[1],X=y[2]||Ng;if(i&&y[2]){if(X===".*")throw o2;if(X=X.replace(/^\((?!\?:)(?=[^)]+\)$)/,"(?:"),/\((?!\?:)/.test(X))throw o2;if(X.length===1&&yx.has(X))throw o2}if(F=h.#D[X],!F){if(X!==XD&&X!==bU){for(let $ in h.#D)if((X.length>1||$.length>1)&&$!==XD&&$!==bU)throw o2}F=h.#D[X]=new n}if(i!=="")F.#U??=g.varIndex++,c.push([i,F.#U])}else if(F=h.#D[x],!F){for(let i in h.#D)if(i.length>1&&i!==XD&&i!==bU)throw o2;F=h.#D[x]=new n}h=F}if(h.#n!==void 0)throw o2;h.#n=f?-1:D}buildRegExpStr(){let D=Object.keys(this.#D).sort(FO).map((c)=>{let g=this.#D[c],f=g.buildRegExpStr();return f===""?"":(typeof g.#U==="number"?`(${c})@${g.#U}`:yx.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 Fx;#D=0;paths=Object.create(null);insert(n,U){if(U){this.#U.insert(n.split(""),0,[],this.#n,!0);return}let D=[],c=[],g=n;for(let h=0;;){let W=!1;if(g=g.replace(/\{[^}]+\}/g,(T)=>{let x=`@\\${h}`;return c[h]=[x,T],h++,W=!0,x}),!W)break}let f=g.match(/(?::[^\/]+)|(?:\/\*$)|./g)||[];for(let h=c.length-1;h>=0;h--){let[W]=c[h];for(let T=f.length-1;T>=0;T--)if(f[T].indexOf(W)!==-1){f[T]=f[T].replace(W,c[h][1]);break}}this.#U.insert(f,this.#D,D,this.#n,!1),this.paths[n]=[this.#D++,D]}buildRegExp(){let n=this.#U.buildRegExpStr();if(n==="")return[/^$/,[],[]];let U=0,D=[],c=[];return n=n.replace(/#(\d+)|@(\d+)|\.\*\$/g,(g,f,h)=>{if(f!==void 0)return D[++U]=Number(f),"$()";if(h!==void 0)return c[Number(h)]=++U,"";return""}),[new RegExp(`^${n}`),D,c]}};var ix=Object.create(null);function Xx(n){return ix[n]??=new RegExp(n==="*"?"":`^${n.replace(/\/\*$|([.\\+*[^\]$()])/g,(U,D)=>D?`\\${D}`:"(?:|/.*)")}$`)}function iO(){ix=Object.create(null)}function Pg(n,U){if(!n)return;for(let D of Object.keys(n).sort((c,g)=>g.length-c.length))if(Xx(D).test(U))return[...n[D]];return}var Rg=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===o2?new Sg(U):D}}add(n,U,D){let c=this.#n,g=this.#U;if(!c||!g)throw Error(_g);if(!c[n])this.#D[n]=new xf,[c,g].forEach((W)=>{W[n]=Object.create(null),Object.keys(W[A1]).forEach((T)=>{W[n][T]=[...W[A1][T]],this.#f(n,T)})});if(U==="/*")U="*";let f=(U.match(/\/:/g)||[]).length;if(/\*$/.test(U)){let W=Xx(U);Object.keys(c).forEach((T)=>{if((n===A1||n===T)&&!c[T][U])this.#f(T,U),c[T][U]=Pg(c[T],U)||Pg(c[A1],U)||[]}),Object.keys(c).forEach((T)=>{if(n===A1||n===T)Object.keys(c[T]).forEach((x)=>{W.test(x)&&c[T][x].push([D,f])})}),Object.keys(g).forEach((T)=>{if(n===A1||n===T)Object.keys(g[T]).forEach((x)=>W.test(x)&&g[T][x].push([D,f]))});return}let h=jg(U)||[U];for(let W=0,T=h.length;W<T;W++){let x=h[W];Object.keys(g).forEach((y)=>{if(n===A1||n===y){if(!g[y][x])this.#f(y,x),g[y][x]=[...Pg(c[y],x)||Pg(c[A1],x)||[]];g[y][x].push([D,f-T+W+1])}})}}match=vg;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,iO(),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)]),Cc];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,W,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 x=[];for(let y in W)x[y]=f[W[y]];return[h,x,g]}};var XO=class{name="PreparedRegExpRouter";#n;#U;constructor(n,U){this.#n=n,this.#U=U}#D(n,U){let D=this.#n[n];D[1].forEach((c)=>c&&c.push(U)),Object.values(D[2]).forEach((c)=>c[0].push(U))}#f(n,U,D,c,g){let f=this.#n[n];if(!g)f[2][U][0].push([D,{}]);else c.forEach((h)=>{if(typeof h==="number")f[1][h].push([D,g]);else f[2][h||U][0].push([D,g])})}add(n,U,D){if(!this.#n[n]){let g=this.#n[A1],f={};for(let h in g[2])f[h]=[g[2][h][0].slice(),Cc];this.#n[n]=[g[0],g[1].map((h)=>Array.isArray(h)?h.slice():0),f]}if(U==="/*"||U==="*"){let g=[D,{}];if(n===A1)for(let f in this.#n)this.#D(f,g);else this.#D(n,g);return}let c=this.#U[U];if(!c)throw Error(`Path ${U} is not registered`);for(let[g,f]of c)if(n===A1)for(let h in this.#n)this.#f(h,U,D,g,f);else this.#f(n,U,D,g,f)}buildAllMatchers(){return this.#n}match=vg};var Tf=class{name="SmartRouter";#n=[];#U=[];constructor(n){this.#n=n.routers}add(n,U,D){if(!this.#U)throw Error(_g);this.#U.push([n,U,D])}match(n,U){if(!this.#U)throw Error("Fatal error");let D=this.#n,c=this.#U,g=D.length,f=0,h;for(;f<g;f++){let W=D[f];try{for(let T=0,x=c.length;T<x;T++)W.add(...c[T]);h=W.match(n,U)}catch(T){if(T instanceof Sg)continue;throw T}this.match=W.match.bind(W),this.#n=[W],this.#U=void 0;break}if(f===g)throw Error("Fatal error");return this.name=`SmartRouter + ${this.activeRouter.name}`,h}get activeRouter(){if(this.#U||this.#n.length!==1)throw Error("No active router has been determined yet.");return this.#n[0]}};var Ec=Object.create(null),JO=(n)=>{for(let U in n)return!0;return!1},Jx=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=lW(D),h=[];for(let W=0,T=f.length;W<T;W++){let x=f[W],y=f[W+1],F=tW(x,y),i=Array.isArray(F)?F[0]:x;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((W,T,x)=>x.indexOf(W)===T),score:this.#f}}),g}#g(U,D,c,g,f){for(let h=0,W=D.#n.length;h<W;h++){let T=D.#n[h],x=T[c]||T[A1],y={};if(x!==void 0){if(x.params=Object.create(null),U.push(x),g!==Ec||f&&f!==Ec)for(let F=0,i=x.possibleKeys.length;F<i;F++){let X=x.possibleKeys[F],$=y[x.score];x.params[X]=f?.[X]&&!$?f[X]:g[X]??f?.[X],y[x.score]=!0}}}}search(U,D){let c=[];this.#c=Ec;let f=[this],h=cf(D),W=[],T=h.length,x=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(x===null){x=Array(T);let v=D[0]==="/"?1:0;for(let P=0;P<T;P++)x[P]=v,v+=h[P].length+1}let w=D.substring(x[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(JO(_.#U)){_.#c=q;let v=H[0].match(/\//g)?.length??0;(W[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 $=W.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 Jx}add(n,U,D){let c=jg(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 Tx{constructor(n={}){super(n);this.router=n.router??new Tf({routers:[new Rg,new yf]})}};import{getAgentDir as ys}from"@earendil-works/pi-coding-agent";import{isIP as $x}from"node:net";function Vx(n){return(n.startsWith("[")&&n.endsWith("]")?n.slice(1,-1):n).toLowerCase().replace(/\.$/,"")}function Qx(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 Vx(U.hostname)}catch{return null}}function $O(n){let U=n?.trim();if(!U)return null;return $x(U)?Vx(U):Qx(U)}function VO(n){return n==="localhost"||n.endsWith(".localhost")}function Yx(){return[process.env.PI_WEB_HOSTNAME,...process.env.PI_WEB_ALLOWED_HOSTS?.split(",")??[]].filter((n)=>Boolean(n?.trim()))}function Bx(n){try{return new URL(n).origin}catch{return null}}function QO(n){let U=new URL(n.url),D=n.headers.get("host");return D?Bx(`${U.protocol}//${D}`):null}function YO(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=Yx()){let D=n.headers.get("host"),c=D?Qx(D):null;if(!c)return!1;if(VO(c)||$x(c))return!0;return U.some((g)=>$O(g)===c)}function BO(n){let U=n.headers.get("origin");if(n.headers.get("sec-fetch-site")==="cross-site")return!1;if(!U)return!0;let c=QO(n);return c!==null&&Bx(U)===c}function GO(n){return n.headers.has("origin")||n.headers.has("sec-fetch-site")}function U2(n,U=Yx()){if(!Xf(n,U))return!1;if(YO(n))return!0;return!GO(n)||BO(n)}function JD(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 KO,timingSafeEqual as ZO}from"node:crypto";var bO="pi";function Gx(n){return KO("sha256").update(n,"utf8").digest()}function Kx(n,U){return ZO(Gx(n),Gx(U))}function Jf(n=process.env.PI_WEB_PASSWORD){return typeof n==="string"&&n.length>0}function Zx(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 x=Buffer.from(D[1],"base64");if(x.toString("base64")!==D[1])return!1;c=new TextDecoder("utf-8",{fatal:!0}).decode(x)}catch{return!1}let g=c.indexOf(":");if(g===-1)return!1;let f=c.slice(0,g),h=c.slice(g+1),W=Kx(f,bO),T=Kx(h,U);return W&&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,bx=performance.now();function zx(n){if(Vf=n,bx=performance.now(),Vf)Ox("boot","debug log enabled")}function $D(n){return(U,D)=>Ox(n,U,D)}function Ox(n,U,D){if(!Vf)return;let c=performance.now()-bx,g=new Date,f=(W,T=2)=>String(W).padStart(T,"0"),h=`${f(g.getHours())}:${f(g.getMinutes())}:${f(g.getSeconds())}.${f(g.getMilliseconds(),3)}`;console.debug(`[debug][${n}][${h}][+${c.toFixed(1)}ms] ${U}${D?` — ${D}`:""}`)}var zO=$D("mount"),OO=["GET","POST","PUT","PATCH","DELETE"];function n1(n,U,D){let c=U.split("/").filter(Boolean),g=[],f=new Map;for(let W of c){let T=W.match(/^\[\.\.\.(.+)\]$/),x=W.match(/^\[(.+)\]$/);if(T)g.push(`:${T[1]}{.+}`),f.set(T[1],{hono:T[1],catchAll:!0});else if(x)g.push(`:${x[1]}`),f.set(x[1],{hono:x[1],catchAll:!1});else g.push(W)}let h=`/${g.join("/")}`;for(let W of OO){let T=D[W];if(typeof T!=="function")continue;let x=T;n.on(W,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 x(new $f(y.req.raw),{params:Promise.resolve(i)});return zO(`${W} ${y.req.path}`,`${X.status} ${Math.round(performance.now()-F)}ms`),X})}}var Lf={};U1(Lf,{GET:()=>Xq});import{tmpdir as Fq}from"node:os";import{Readable as iq}from"node:stream";import{constants as Qf}from"node:fs";import{lstat as qO,open as MO}from"node:fs/promises";import{basename as AO,dirname as HO,resolve as qx}from"node:path";var ug=5242880;function Mx(n,U){let D=qx(n);if(HO(D)!==qx(U))return null;if(!/^pi-bash-[A-Za-z0-9_-]+\.log$/.test(AO(D)))return null;return D}async function Yf(n){if(!(await qO(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 MO(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 Ax(n,U=ug){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 Sx,readFile as dO,readdir as kO}from"node:fs/promises";import{existsSync as pO,readdirSync as mO}from"node:fs";import{join as pg,normalize as zf}from"node:path";import{getAgentDir as aO,buildContextEntries as oO,buildSessionContext as rO,SessionManager as vx}from"@earendil-works/pi-coding-agent";function LO(n){return typeof n==="object"&&n!==null&&!Array.isArray(n)}function CO(n){if(!LO(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 Hx from"node:path";function Cn(n,U=process.platform){let D=U==="win32"?Hx.win32.normalize(n):Hx.posix.normalize(n);return U==="win32"?D.toLowerCase():D}import{execFile as EO}from"node:child_process";import{existsSync as dg,mkdirSync as wO,realpathSync as jO}from"node:fs";import{basename as IO,dirname as Kf,join as Cx,resolve as _O}from"node:path";import{promisify as SO}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 vO=SO(EO),Lx=60000;function NO(){if(!globalThis.__piProjectCache)globalThis.__piProjectCache=new Map;return globalThis.__piProjectCache}function Ex(){globalThis.__piProjectCache?.clear()}async function zU(n,U){let{stdout:D}=await vO("git",["-C",n,...U],{timeout:1e4,maxBuffer:1048576,env:{...process.env,LC_ALL:"C"}});return D.trim()}function PO(n){let U=Kf(n);if(!U.endsWith("-worktrees"))return null;let D=U.slice(0,-10);if(!D||!dg(Cx(D,".git")))return null;return{projectRoot:D,branch:IO(n),isWorktree:!0,isTopLevel:!0}}async function kg(n){let U=NO(),D=U.get(n);if(D&&D.expiresAt>Date.now())return D.info;let c;try{if(!dg(n))return c=PO(n)??{projectRoot:n,branch:null,isWorktree:!1,isTopLevel:!1},U.set(n,{info:c,expiresAt:Date.now()+Lx}),c;let g=await zU(n,["rev-parse","--path-format=absolute","--git-common-dir","--git-dir","--show-toplevel","--abbrev-ref","HEAD"]),[f,h,W,T]=g.split(`
252
+ `)}),this}_outputHelpIfRequested(n){let U=this._getHelpOption();if(U&&n.find((c)=>U.is(c)))this.outputHelp(),this._exit(0,"commander.helpDisplayed","(outputHelp)")}}function uW(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 dW(){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 h11=new iD;var kW={name:"@rainmanhhh/pi-web",version:"0.8.8",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","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/node-notifier":"^8.0.5","@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","node-notifier":"^10.0.1",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 lb}from"@earendil-works/pi-coding-agent";var pW={port:31415};var Uf=(n,U,D)=>{return(c,g)=>{let f=-1;return h(0);async function h(W){if(W<=f)throw Error("next() called multiple times");f=W;let T,x=!1,y;if(n[W])y=n[W][0][0],c.req.routeIndex=W;else y=W===n.length&&g||void 0;if(y)try{T=await y(c,()=>h(W+1))}catch(F){if(F instanceof Error&&U)c.error=F,T=await U(F,c),x=!0;else throw F}else if(c.finalized===!1&&D)T=await D(c);if(T&&(c.finalized===!1||x))c.res=T;return c}}};var mW=Symbol();var aW=(n,U)=>{return new Response(n,{headers:{"Content-Type":U.replace(/^[^;]+/,(c)=>c.toLowerCase())}}).formData()};var Eg=(n)=>("headers"in n),rW=async(n,U=Object.create(null))=>{let{all:D=!1,dot:c=!1}=U,h=(Eg(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 UO(n,{all:D,dot:c});return{}};async function UO(n,U){if(!Eg(n)&&n.bodyCache.formData)return oW(await n.bodyCache.formData,U);let D=Eg(n)?n.headers:n.raw.headers,c=await n.arrayBuffer(),g=aW(c,D.get("Content-Type")||"");if(!Eg(n))n.bodyCache.formData=g;let f=await g;if(f)return oW(f,U);return{}}function oW(n,U){let D=Object.create(null);if(n.forEach((c,g)=>{if(!(U.all||g.endsWith("[]")))D[g]=c;else DO(D,g,c)}),U.dot)Object.entries(D).forEach(([c,g])=>{if(c.includes("."))cO(D,c,g),delete D[c]});return D}var DO=(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]},cO=(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},lW=(n)=>{let{groups:U,path:D}=gO(n),c=cf(D);return fO(c,U)},gO=(n)=>{let U=[];return n=n.replace(/\{[^}]+\}/g,(D,c)=>{let g=`@${c}`;return U.push([g,D]),g}),{groups:U,path:n}},fO=(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},wg={},tW=(n,U)=>{if(n==="*")return"*";let D=n.match(/^\:([^\{\}]+)(?:\{(.+)\})?$/);if(D){let c=`${n}#${U}`;if(!wg[c])if(D[2])wg[c]=U&&U[0]!==":"&&U[0]!=="*"?[c,D[1],new RegExp(`^${D[2]}(?=/${U})`)]:[n,D[1],new RegExp(`^${D[2]}$`)];else wg[c]=[n,D[1],!0];return wg[c]}return null},eW=(n,U)=>{try{return U(n)}catch{return n.replace(/(?:%[0-9A-Fa-f]{2})+/g,(D)=>{try{return U(D)}catch{return D}})}},hO=(n)=>eW(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),W=f===-1?h===-1?void 0:h:h===-1?f:Math.min(f,h),T=U.slice(D,W);return hO(T.includes("%25")?T.replace(/%25/g,"%2525"):T)}else if(g===63||g===35)break}return U.slice(D,c)};var sW=(n)=>{let U=gf(n);return U.length>1&&U.at(-1)==="/"?U.slice(0,-1):U},a2=(n,U,...D)=>{if(D.length)U=a2(U,...D);return`${n?.[0]==="/"?"":"/"}${n}${U==="/"?"":`${n?.at(-1)==="/"?"":"/"}${U?.[0]==="/"?U.slice(1):U}`}`},jg=(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)},Ig=(n)=>n.indexOf("%")!==-1?eW(n,WO):n,Df=(n)=>{if(n.indexOf("+")!==-1)n=n.replace(/\+/g," ");return Ig(n)},nx=(n,U,D)=>{let c;if(!D&&U&&U.indexOf("%")===-1&&U.indexOf("+")===-1){let h=n.indexOf("?",8);if(h===-1)return;if(!n.startsWith(U,h+1))h=n.indexOf(`&${U}`,h+1);while(h!==-1){let W=n.charCodeAt(h+U.length+1);if(W===61){let T=h+U.length+2,x=n.indexOf("&",T);return Df(n.slice(T,x===-1?void 0:x))}else if(W==38||isNaN(W))return"";h=n.indexOf(`&${U}`,h+1)}if(c=/[%+]/.test(n),!c)return}let g=Object.create(null);c??=/[%+]/.test(n);let f=n.indexOf("?",8);while(f!==-1){let h=n.indexOf("&",f+1),W=n.indexOf("=",f);if(W>h&&h!==-1)W=-1;let T=n.slice(f+1,W===-1?h===-1?void 0:h:W);if(c)T=Df(T);if(f=h,T==="")continue;let x;if(W===-1)x="";else if(x=n.slice(W+1,h===-1?void 0:h),c)x=Df(x);if(D){if(!(g[T]&&Array.isArray(g[T])))g[T]=[];g[T].push(x)}else g[T]??=x}return U?g[U]:g},Ux=nx,Dx=(n,U)=>{return nx(n,U,!0)},WO=decodeURIComponent;var cx=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&&Ig(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]=Ig(c)}return n}#c(n){return this.#U[1]?this.#U[1][n]:n}query(n){return Ux(this.url,n)}queries(n){return Dx(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 rW(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[mW](){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 gx={Stringify:1,BeforeStream:2,Stream:3},xO=(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((W)=>W({phase:U,buffer:g,context:c}))).then((W)=>Promise.all(W.filter(Boolean).map((T)=>ff(T,U,!1,c,g))).then(()=>g[0]));if(D)return xO(await h,f);else return h};var TO="text/plain; charset=UTF-8",hf=(n,U)=>{return{"Content-Type":n,...U}},Lc=(n,U)=>new Response(n,U),Wf=class{#n;#U;env={};#D;finalized=!1;error;#f;#c;#g;#y;#x;#T;#W;#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 cx(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||=Lc(null,{headers:this.#W??=new Headers})}set res(n){if(this.#g&&n){n=Lc(n.body,n);for(let[U,D]of this.#g.headers.entries()){if(U==="content-type")continue;if(U==="set-cookie"){let c=this.#g.headers.getSetCookie();n.headers.delete("set-cookie");for(let g of c)n.headers.append("set-cookie",g)}else n.headers.set(U,D)}}this.#g=n,this.finalized=!0}render=(...n)=>{return this.#x??=(U)=>this.html(U),this.#x(...n)};setLayout=(n)=>this.#y=n;getLayout=()=>this.#y;setRenderer=(n)=>{this.#x=n};header=(n,U,D)=>{if(this.finalized)this.#g=Lc(this.#g.body,this.#g);let c=this.#g?this.#g.headers:this.#W??=new Headers;if(U===void 0)c.delete(n);else if(D?.append)c.append(n,U);else c.set(n,U)};status=(n)=>{this.#f=n};set=(n,U)=>{this.#D??=new Map,this.#D.set(n,U)};get=(n)=>{return this.#D?this.#D.get(n):void 0};get var(){if(!this.#D)return{};return Object.fromEntries(this.#D)}#h(n,U,D){let c=this.#g?new Headers(this.#g.headers):this.#W;if(typeof U==="object"&&U.headers){c??=new Headers;for(let[f,h]of new Headers(U.headers))if(f==="set-cookie")c.append(f,h);else c.set(f,h)}if(D){if(!c){let f=0;for(let h in D)if(++f>1||typeof D[h]!=="string"){c=new Headers;break}}if(c)for(let f in D){let h=D[f];if(typeof h==="string")c.set(f,h);else{c.delete(f);for(let W of h)c.append(f,W)}}}let g=typeof U==="number"?U:U?.status??this.#f;return Lc(n,{status:g,headers:c??D})}newResponse=(...n)=>this.#h(...n);body=(n,U,D)=>this.#h(n,U,D);text=(n,U,D)=>{return!this.#W&&!this.#f&&!U&&!D&&!this.finalized?new Response(n):this.#h(n,U,hf(TO,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,gx.Stringify,!1,{}).then(c):c(n)};redirect=(n,U)=>{let D=String(n);return this.header("Location",!/[^\x00-\xFF]/.test(D)?D:encodeURI(D)),this.newResponse(null,U??302)};notFound=()=>{return this.#T??=()=>Lc(),this.#T(this)}};var A1="ALL",fx="all",hx=["get","post","put","delete","options","patch","query"],_g="Can not add a route since the matcher is already built.",Sg=class extends Error{};var Wx="__COMPOSED_HANDLER";var yO=(n)=>{return n.text("404 Not Found",404)},xx=(n,U)=>{if("getResponse"in n){let D=n.getResponse();return U.newResponse(D.body,D)}return console.error(n),U.text("Internal Server Error",500)},Tx=class n{get;post;put;delete;options;patch;query;all;on;use;router;getPath;_basePath="/";#n="/";routes=[];constructor(U={}){[...hx,fx].forEach((f)=>{this[f]=(h,...W)=>{if(typeof h==="string")this.#n=h;else this.#f(f,this.#n,h);return W.forEach((T)=>{this.#f(f,this.#n,T)}),this}}),this.on=(f,h,...W)=>{for(let T of[h].flat()){this.#n=T;for(let x of[f].flat())W.map((y)=>{this.#f(x.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((W)=>{this.#f(A1,this.#n,W)}),this};let{strict:c,...g}=U;Object.assign(this,g),this.getPath=c??!0?U.getPath??gf:sW}#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=yO;errorHandler=xx;route(U,D){let c=this.basePath(U);return D.routes.map((g)=>{let f;if(D.errorHandler===xx)f=g.handler;else f=async(h,W)=>(await Uf([],D.errorHandler)(h,()=>g.handler(h,W))).res,f[Wx]=g.handler;c.#f(g.method,g.path,f,g.basePath)}),this}basePath(U){let D=this.#U();return D._basePath=a2(this._basePath,U),D}onError=(U)=>{return this.errorHandler=U,this};notFound=(U)=>{return this.#D=U,this};mount(U,D,c){let g,f;if(c)if(typeof c==="function")f=c;else if(f=c.optionHandler,c.replaceRequest===!1)g=(T)=>T;else g=c.replaceRequest;let h=f?(T)=>{let x=f(T);return Array.isArray(x)?x:[x]}:(T)=>{let x=void 0;try{x=T.executionCtx}catch{}return[T.env,x]};g||=(()=>{let T=a2(this._basePath,U),x=T==="/"?0:T.length;return(y)=>{let F=new URL(y.url);return F.pathname=this.getPath(y).slice(x)||"/",new Request(F,y)}})();let W=async(T,x)=>{let y=await D(g(T.req.raw),...h(T));if(y)return y;await x()};return this.#f(A1,a2(U,"*"),W),this}#f(U,D,c,g){U=U.toUpperCase(),D=a2(this._basePath,D);let f={basePath:g!==void 0?a2(this._basePath,g):this._basePath,path:D,method:U,handler:c};this.router.add(U,D,[c,f]),this.routes.push(f)}#c(U,D){if(U instanceof Error)return this.errorHandler(U,D);throw U}#g(U,D,c,g){if(g==="HEAD")return(async()=>new Response(null,await this.#g(U,D,c,"GET")))();let f=this.getPath(U,{env:c}),h=this.router.match(g,f),W=new Wf(U,{path:f,matchResult:h,env:c,executionCtx:D,notFoundHandler:this.#D});if(h[0].length===1){let x;try{x=h[0][0][0][0](W,async()=>{W.res=await this.#D(W)})}catch(y){return this.#c(y,W)}return x instanceof Promise?x.then((y)=>y||(W.finalized?W.res:this.#D(W))).catch((y)=>this.#c(y,W)):x??this.#D(W)}let T=Uf(h[0],this.errorHandler,this.#D);return(async()=>{try{let x=await T(W);if(!x.finalized)throw Error("Context is not finalized. Did you forget to return a Response object or `await next()`?");return x.res}catch(x){return this.#c(x,W)}})()}fetch=(U,...D)=>{return this.#g(U,D[1],D[0],U.method)};request=(U,D,c,g)=>{if(U instanceof Request)return this.fetch(D?new Request(U,D):U,c,g);return U=U.toString(),this.fetch(new Request(/^https?:\/\//.test(U)?U:`http://localhost${a2("/",U)}`,D),c,g)};fire=()=>{addEventListener("fetch",(U)=>{U.respondWith(this.#g(U.request,U,void 0,U.request.method))})}};var Cc=[];function vg(n,U){let D=this.buildAllMatchers(),c=(g,f)=>{let h=D[g]||D[A1],W=h[2][f];if(W)return W;let T=f.match(h[0]);if(!T)return[[],Cc];let x=T.indexOf("",1);return[h[1][x],T]};return this.match=c,c(n,U)}var Ng="[^/]+",XD=".*",bU="(?:|/.*)",o2=Symbol(),yx=new Set(".\\+*[^]$()");function FO(n,U){if(n.length===1)return U.length===1?n<U?-1:1:-1;if(U.length===1)return 1;if(n===XD||n===bU)return U===bU?-1:1;else if(U===XD||U===bU)return-1;if(n===Ng)return 1;else if(U===Ng)return-1;return n.length===U.length?n<U?-1:1:U.length-n.length}var Fx=class n{#n;#U;#D=Object.create(null);insert(U,D,c,g,f){let h=this;for(let W=0,T=U.length;W<T;W++){let x=U[W],y=x.length===1?x==="*"?W===T-1?["","",XD]:["","",Ng]:null:x==="/*"?["","",bU]:x.match(/^\:([^\{\}]+)(?:\{(.+)\})?$/),F;if(y){let i=y[1],X=y[2]||Ng;if(i&&y[2]){if(X===".*")throw o2;if(X=X.replace(/^\((?!\?:)(?=[^)]+\)$)/,"(?:"),/\((?!\?:)/.test(X))throw o2;if(X.length===1&&yx.has(X))throw o2}if(F=h.#D[X],!F){if(X!==XD&&X!==bU){for(let $ in h.#D)if((X.length>1||$.length>1)&&$!==XD&&$!==bU)throw o2}F=h.#D[X]=new n}if(i!=="")F.#U??=g.varIndex++,c.push([i,F.#U])}else if(F=h.#D[x],!F){for(let i in h.#D)if(i.length>1&&i!==XD&&i!==bU)throw o2;F=h.#D[x]=new n}h=F}if(h.#n!==void 0)throw o2;h.#n=f?-1:D}buildRegExpStr(){let D=Object.keys(this.#D).sort(FO).map((c)=>{let g=this.#D[c],f=g.buildRegExpStr();return f===""?"":(typeof g.#U==="number"?`(${c})@${g.#U}`:yx.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 Fx;#D=0;paths=Object.create(null);insert(n,U){if(U){this.#U.insert(n.split(""),0,[],this.#n,!0);return}let D=[],c=[],g=n;for(let h=0;;){let W=!1;if(g=g.replace(/\{[^}]+\}/g,(T)=>{let x=`@\\${h}`;return c[h]=[x,T],h++,W=!0,x}),!W)break}let f=g.match(/(?::[^\/]+)|(?:\/\*$)|./g)||[];for(let h=c.length-1;h>=0;h--){let[W]=c[h];for(let T=f.length-1;T>=0;T--)if(f[T].indexOf(W)!==-1){f[T]=f[T].replace(W,c[h][1]);break}}this.#U.insert(f,this.#D,D,this.#n,!1),this.paths[n]=[this.#D++,D]}buildRegExp(){let n=this.#U.buildRegExpStr();if(n==="")return[/^$/,[],[]];let U=0,D=[],c=[];return n=n.replace(/#(\d+)|@(\d+)|\.\*\$/g,(g,f,h)=>{if(f!==void 0)return D[++U]=Number(f),"$()";if(h!==void 0)return c[Number(h)]=++U,"";return""}),[new RegExp(`^${n}`),D,c]}};var ix=Object.create(null);function Xx(n){return ix[n]??=new RegExp(n==="*"?"":`^${n.replace(/\/\*$|([.\\+*[^\]$()])/g,(U,D)=>D?`\\${D}`:"(?:|/.*)")}$`)}function iO(){ix=Object.create(null)}function Pg(n,U){if(!n)return;for(let D of Object.keys(n).sort((c,g)=>g.length-c.length))if(Xx(D).test(U))return[...n[D]];return}var Rg=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===o2?new Sg(U):D}}add(n,U,D){let c=this.#n,g=this.#U;if(!c||!g)throw Error(_g);if(!c[n])this.#D[n]=new xf,[c,g].forEach((W)=>{W[n]=Object.create(null),Object.keys(W[A1]).forEach((T)=>{W[n][T]=[...W[A1][T]],this.#f(n,T)})});if(U==="/*")U="*";let f=(U.match(/\/:/g)||[]).length;if(/\*$/.test(U)){let W=Xx(U);Object.keys(c).forEach((T)=>{if((n===A1||n===T)&&!c[T][U])this.#f(T,U),c[T][U]=Pg(c[T],U)||Pg(c[A1],U)||[]}),Object.keys(c).forEach((T)=>{if(n===A1||n===T)Object.keys(c[T]).forEach((x)=>{W.test(x)&&c[T][x].push([D,f])})}),Object.keys(g).forEach((T)=>{if(n===A1||n===T)Object.keys(g[T]).forEach((x)=>W.test(x)&&g[T][x].push([D,f]))});return}let h=jg(U)||[U];for(let W=0,T=h.length;W<T;W++){let x=h[W];Object.keys(g).forEach((y)=>{if(n===A1||n===y){if(!g[y][x])this.#f(y,x),g[y][x]=[...Pg(c[y],x)||Pg(c[A1],x)||[]];g[y][x].push([D,f-T+W+1])}})}}match=vg;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,iO(),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)]),Cc];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,W,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 x=[];for(let y in W)x[y]=f[W[y]];return[h,x,g]}};var XO=class{name="PreparedRegExpRouter";#n;#U;constructor(n,U){this.#n=n,this.#U=U}#D(n,U){let D=this.#n[n];D[1].forEach((c)=>c&&c.push(U)),Object.values(D[2]).forEach((c)=>c[0].push(U))}#f(n,U,D,c,g){let f=this.#n[n];if(!g)f[2][U][0].push([D,{}]);else c.forEach((h)=>{if(typeof h==="number")f[1][h].push([D,g]);else f[2][h||U][0].push([D,g])})}add(n,U,D){if(!this.#n[n]){let g=this.#n[A1],f={};for(let h in g[2])f[h]=[g[2][h][0].slice(),Cc];this.#n[n]=[g[0],g[1].map((h)=>Array.isArray(h)?h.slice():0),f]}if(U==="/*"||U==="*"){let g=[D,{}];if(n===A1)for(let f in this.#n)this.#D(f,g);else this.#D(n,g);return}let c=this.#U[U];if(!c)throw Error(`Path ${U} is not registered`);for(let[g,f]of c)if(n===A1)for(let h in this.#n)this.#f(h,U,D,g,f);else this.#f(n,U,D,g,f)}buildAllMatchers(){return this.#n}match=vg};var Tf=class{name="SmartRouter";#n=[];#U=[];constructor(n){this.#n=n.routers}add(n,U,D){if(!this.#U)throw Error(_g);this.#U.push([n,U,D])}match(n,U){if(!this.#U)throw Error("Fatal error");let D=this.#n,c=this.#U,g=D.length,f=0,h;for(;f<g;f++){let W=D[f];try{for(let T=0,x=c.length;T<x;T++)W.add(...c[T]);h=W.match(n,U)}catch(T){if(T instanceof Sg)continue;throw T}this.match=W.match.bind(W),this.#n=[W],this.#U=void 0;break}if(f===g)throw Error("Fatal error");return this.name=`SmartRouter + ${this.activeRouter.name}`,h}get activeRouter(){if(this.#U||this.#n.length!==1)throw Error("No active router has been determined yet.");return this.#n[0]}};var Ec=Object.create(null),JO=(n)=>{for(let U in n)return!0;return!1},Jx=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=lW(D),h=[];for(let W=0,T=f.length;W<T;W++){let x=f[W],y=f[W+1],F=tW(x,y),i=Array.isArray(F)?F[0]:x;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((W,T,x)=>x.indexOf(W)===T),score:this.#f}}),g}#g(U,D,c,g,f){for(let h=0,W=D.#n.length;h<W;h++){let T=D.#n[h],x=T[c]||T[A1],y={};if(x!==void 0){if(x.params=Object.create(null),U.push(x),g!==Ec||f&&f!==Ec)for(let F=0,i=x.possibleKeys.length;F<i;F++){let X=x.possibleKeys[F],$=y[x.score];x.params[X]=f?.[X]&&!$?f[X]:g[X]??f?.[X],y[x.score]=!0}}}}search(U,D){let c=[];this.#c=Ec;let f=[this],h=cf(D),W=[],T=h.length,x=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(x===null){x=Array(T);let v=D[0]==="/"?1:0;for(let P=0;P<T;P++)x[P]=v,v+=h[P].length+1}let w=D.substring(x[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(JO(_.#U)){_.#c=q;let v=H[0].match(/\//g)?.length??0;(W[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 $=W.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 Jx}add(n,U,D){let c=jg(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 Tx{constructor(n={}){super(n);this.router=n.router??new Tf({routers:[new Rg,new yf]})}};import{getAgentDir as ys}from"@earendil-works/pi-coding-agent";import{isIP as $x}from"node:net";function Vx(n){return(n.startsWith("[")&&n.endsWith("]")?n.slice(1,-1):n).toLowerCase().replace(/\.$/,"")}function Qx(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 Vx(U.hostname)}catch{return null}}function $O(n){let U=n?.trim();if(!U)return null;return $x(U)?Vx(U):Qx(U)}function VO(n){return n==="localhost"||n.endsWith(".localhost")}function Yx(){return[process.env.PI_WEB_HOSTNAME,...process.env.PI_WEB_ALLOWED_HOSTS?.split(",")??[]].filter((n)=>Boolean(n?.trim()))}function Bx(n){try{return new URL(n).origin}catch{return null}}function QO(n){let U=new URL(n.url),D=n.headers.get("host");return D?Bx(`${U.protocol}//${D}`):null}function YO(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=Yx()){let D=n.headers.get("host"),c=D?Qx(D):null;if(!c)return!1;if(VO(c)||$x(c))return!0;return U.some((g)=>$O(g)===c)}function BO(n){let U=n.headers.get("origin");if(n.headers.get("sec-fetch-site")==="cross-site")return!1;if(!U)return!0;let c=QO(n);return c!==null&&Bx(U)===c}function GO(n){return n.headers.has("origin")||n.headers.has("sec-fetch-site")}function U2(n,U=Yx()){if(!Xf(n,U))return!1;if(YO(n))return!0;return!GO(n)||BO(n)}function JD(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 KO,timingSafeEqual as ZO}from"node:crypto";var bO="pi";function Gx(n){return KO("sha256").update(n,"utf8").digest()}function Kx(n,U){return ZO(Gx(n),Gx(U))}function Jf(n=process.env.PI_WEB_PASSWORD){return typeof n==="string"&&n.length>0}function Zx(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 x=Buffer.from(D[1],"base64");if(x.toString("base64")!==D[1])return!1;c=new TextDecoder("utf-8",{fatal:!0}).decode(x)}catch{return!1}let g=c.indexOf(":");if(g===-1)return!1;let f=c.slice(0,g),h=c.slice(g+1),W=Kx(f,bO),T=Kx(h,U);return W&&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,bx=performance.now();function zx(n){if(Vf=n,bx=performance.now(),Vf)Ox("boot","debug log enabled")}function $D(n){return(U,D)=>Ox(n,U,D)}function Ox(n,U,D){if(!Vf)return;let c=performance.now()-bx,g=new Date,f=(W,T=2)=>String(W).padStart(T,"0"),h=`${f(g.getHours())}:${f(g.getMinutes())}:${f(g.getSeconds())}.${f(g.getMilliseconds(),3)}`;console.debug(`[debug][${n}][${h}][+${c.toFixed(1)}ms] ${U}${D?` — ${D}`:""}`)}var zO=$D("mount"),OO=["GET","POST","PUT","PATCH","DELETE"];function n1(n,U,D){let c=U.split("/").filter(Boolean),g=[],f=new Map;for(let W of c){let T=W.match(/^\[\.\.\.(.+)\]$/),x=W.match(/^\[(.+)\]$/);if(T)g.push(`:${T[1]}{.+}`),f.set(T[1],{hono:T[1],catchAll:!0});else if(x)g.push(`:${x[1]}`),f.set(x[1],{hono:x[1],catchAll:!1});else g.push(W)}let h=`/${g.join("/")}`;for(let W of OO){let T=D[W];if(typeof T!=="function")continue;let x=T;n.on(W,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 x(new $f(y.req.raw),{params:Promise.resolve(i)});return zO(`${W} ${y.req.path}`,`${X.status} ${Math.round(performance.now()-F)}ms`),X})}}var Lf={};U1(Lf,{GET:()=>Xq});import{tmpdir as Fq}from"node:os";import{Readable as iq}from"node:stream";import{constants as Qf}from"node:fs";import{lstat as qO,open as MO}from"node:fs/promises";import{basename as AO,dirname as HO,resolve as qx}from"node:path";var ug=5242880;function Mx(n,U){let D=qx(n);if(HO(D)!==qx(U))return null;if(!/^pi-bash-[A-Za-z0-9_-]+\.log$/.test(AO(D)))return null;return D}async function Yf(n){if(!(await qO(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 MO(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 Ax(n,U=ug){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 Sx,readFile as dO,readdir as kO}from"node:fs/promises";import{existsSync as pO,readdirSync as mO}from"node:fs";import{join as pg,normalize as zf}from"node:path";import{getAgentDir as aO,buildContextEntries as oO,buildSessionContext as rO,SessionManager as vx}from"@earendil-works/pi-coding-agent";function LO(n){return typeof n==="object"&&n!==null&&!Array.isArray(n)}function CO(n){if(!LO(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 Hx from"node:path";function Cn(n,U=process.platform){let D=U==="win32"?Hx.win32.normalize(n):Hx.posix.normalize(n);return U==="win32"?D.toLowerCase():D}import{execFile as EO}from"node:child_process";import{existsSync as dg,mkdirSync as wO,realpathSync as jO}from"node:fs";import{basename as IO,dirname as Kf,join as Cx,resolve as _O}from"node:path";import{promisify as SO}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 vO=SO(EO),Lx=60000;function NO(){if(!globalThis.__piProjectCache)globalThis.__piProjectCache=new Map;return globalThis.__piProjectCache}function Ex(){globalThis.__piProjectCache?.clear()}async function zU(n,U){let{stdout:D}=await vO("git",["-C",n,...U],{timeout:1e4,maxBuffer:1048576,env:{...process.env,LC_ALL:"C"}});return D.trim()}function PO(n){let U=Kf(n);if(!U.endsWith("-worktrees"))return null;let D=U.slice(0,-10);if(!D||!dg(Cx(D,".git")))return null;return{projectRoot:D,branch:IO(n),isWorktree:!0,isTopLevel:!0}}async function kg(n){let U=NO(),D=U.get(n);if(D&&D.expiresAt>Date.now())return D.info;let c;try{if(!dg(n))return c=PO(n)??{projectRoot:n,branch:null,isWorktree:!1,isTopLevel:!1},U.set(n,{info:c,expiresAt:Date.now()+Lx}),c;let g=await zU(n,["rev-parse","--path-format=absolute","--git-common-dir","--git-dir","--show-toplevel","--abbrev-ref","HEAD"]),[f,h,W,T]=g.split(`
253
253
  `).map((i)=>i.trim()),x=n;try{x=jO(n)}catch{}let y=W===x,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()+Lx}),c}async function RO(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&&dg(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 uO(n){return n.replace(/[/\\:*?"<>|\s]+/g,"-").replace(/^-+|-+$/g,"")}async function wx(n,U){let D=U.trim();if(!D)throw Error("Branch name is required");let c=uO(D);if(!c)throw Error(`Invalid branch name: ${U}`);let g=await RO(n),f=`${_O(g)}-worktrees`,h=Cx(f,c);if(dg(h))throw Error(`Directory already exists: ${h}`);wO(f,{recursive:!0});let W=!1;try{await zU(g,["rev-parse","--verify","--quiet",`refs/heads/${D}`]),W=!0}catch{W=!1}try{if(W)await zU(g,["worktree","add","--",h,D]);else await zU(g,["worktree","add","-b",D,"--",h])}catch(T){throw Error(Ix(T),{cause:T})}return On(h),Ex(),{path:h,branch:D}}async function jx(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(Ix(f),{cause:f})}Ex()}function Ix(n){let U=n.stderr;if(typeof U==="string"&&U.trim())return U.trim();return n instanceof Error?n.message:String(n)}async function lO(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 kg(f))})),n.map((f)=>{r2(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 tO(){let n=await Nx(pg(aO(),"sessions"));for(let U of n)r2(U.id,U.path);return n}async function eO(n){let U=[],D=async(c)=>{let g;try{g=await kO(c,{withFileTypes:!0})}catch{return}for(let f of g){let h=pg(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 sO(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 nq(n){let U=await dO(n,"utf8"),D=[];for(let x of U.split(`
255
255
  `)){let y=x.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="",W,T;for(let x of D){let y=x;if(y.type==="session_info"){let $=y.name;if(typeof $==="string"&&$.trim())W=$.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 $=sO(F);if($)h=$}}return{path:n,id:c.id,cwd:typeof c.cwd==="string"?c.cwd:"",name:W,parentSessionPath:typeof c.parentSession==="string"?c.parentSession:void 0,created:g,modified:typeof T==="number"&&T>0?new Date(T):g,messageCount:f,firstMessage:h||"(no messages)",allMessagesText:""}}function Uq(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 Dq(n){try{let U=await Sx(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-C8DhOshc.js";import{y as e}from"./mermaid-parser.core-DY6a9lAQ.js";export{e as createArchitectureServices};