@rainmanhhh/pi-web 0.29.2 → 0.29.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/server.mjs +2 -2
- package/dist/static/assets/{CodeMirrorEditor-C9nalvrY.js → CodeMirrorEditor-CaRiggm3.js} +1 -1
- package/dist/static/assets/{abnfDiagram-VCTEODGH-ClLYq500.js → abnfDiagram-VCTEODGH-Evc_Nl9C.js} +1 -1
- package/dist/static/assets/architecture-7GRP2DOG-B9yLU2Qy.js +1 -0
- package/dist/static/assets/{architectureDiagram-5GKGNRK7-Cdi5UHKo.js → architectureDiagram-5GKGNRK7-DC90w0NN.js} +1 -1
- package/dist/static/assets/{blockDiagram-I7D4REHJ-CXlcUKel.js → blockDiagram-I7D4REHJ-CjyuSH-_.js} +1 -1
- package/dist/static/assets/{c4Diagram-7LVT6UL2-HLq2ec37.js → c4Diagram-7LVT6UL2-CyJIWkfo.js} +1 -1
- package/dist/static/assets/channel-C33loTip.js +1 -0
- package/dist/static/assets/{chunk-4HAMMTFA-D7jJBKp9.js → chunk-4HAMMTFA-Cr9qBysc.js} +1 -1
- package/dist/static/assets/{chunk-75Z2AOVW-B3NeYxlu.js → chunk-75Z2AOVW-PEk69fiS.js} +1 -1
- package/dist/static/assets/{chunk-DU6HZSFF-BkQ9MFh7.js → chunk-DU6HZSFF-bRzgeAW0.js} +1 -1
- package/dist/static/assets/{chunk-F27PBJKO-BW2JrUoQ.js → chunk-F27PBJKO-5v9tz9Cm.js} +1 -1
- package/dist/static/assets/{chunk-GMAD6QVW-DeX-sMOS.js → chunk-GMAD6QVW-ge28hWCu.js} +1 -1
- package/dist/static/assets/{chunk-GVQU2GXP-D3fwtsiK.js → chunk-GVQU2GXP-DGXZi6Aa.js} +1 -1
- package/dist/static/assets/{chunk-IMKFNOWR-DJxFd57L.js → chunk-IMKFNOWR-Bz9eTOjI.js} +1 -1
- package/dist/static/assets/{chunk-L3NEJ4N5-CgMvo_Yw.js → chunk-L3NEJ4N5-Di95Tkr3.js} +1 -1
- package/dist/static/assets/{chunk-OSK3NFVY-BWn_UK8c.js → chunk-OSK3NFVY-DGHHDxm-.js} +1 -1
- package/dist/static/assets/{chunk-P2QGCYS3-CvLPEkcu.js → chunk-P2QGCYS3-DravFjHe.js} +1 -1
- package/dist/static/assets/{chunk-POPQ4Y6H-RAaw9n9u.js → chunk-POPQ4Y6H-C9nmucSm.js} +1 -1
- package/dist/static/assets/{chunk-PWAF6VOD-CmpQyleR.js → chunk-PWAF6VOD-CgR77nX-.js} +1 -1
- package/dist/static/assets/{chunk-SHT3W25Y-Vjxu5u5n.js → chunk-SHT3W25Y-Dshxdljp.js} +1 -1
- package/dist/static/assets/{chunk-SVP7TREG-Dw0sZrN_.js → chunk-SVP7TREG-Dd5N_bjg.js} +1 -1
- package/dist/static/assets/{chunk-TICWLB2K-BocpgZHy.js → chunk-TICWLB2K-DfZTMWTd.js} +1 -1
- package/dist/static/assets/classDiagram-ZZMXUADV-DmywY7Ir.js +1 -0
- package/dist/static/assets/classDiagram-v2-VYDZK3BY-DmywY7Ir.js +1 -0
- package/dist/static/assets/{cynefin-OW5HDTMX-DbamSSEd.js → cynefin-OW5HDTMX-jvjTWNZg.js} +1 -1
- package/dist/static/assets/{cynefinDiagram-5FMLGOSQ-_wx8PbMk.js → cynefinDiagram-5FMLGOSQ-BUHMgBz-.js} +1 -1
- package/dist/static/assets/{dagre-GXQ25YYZ-Bc6_MtBy.js → dagre-GXQ25YYZ-VU-PIgmn.js} +1 -1
- package/dist/static/assets/{diagram-S7CK7UJ4-CB646hpl.js → diagram-S7CK7UJ4-Cz6IulqM.js} +1 -1
- package/dist/static/assets/{diagram-UQ7AKVKN-CPjUL1vP.js → diagram-UQ7AKVKN-pJfnuRVx.js} +1 -1
- package/dist/static/assets/{diagram-VSXAHHWV-D78-Jhey.js → diagram-VSXAHHWV-1xwU7nvI.js} +1 -1
- package/dist/static/assets/{diagram-VX7I27RA-EmeI3rfA.js → diagram-VX7I27RA-B1T53QzL.js} +1 -1
- package/dist/static/assets/{diagram-Z3DM3KII-CEYxan3t.js → diagram-Z3DM3KII-DyZWtmXL.js} +1 -1
- package/dist/static/assets/{ebnfDiagram-PWID7BFC-BAf3zy_M.js → ebnfDiagram-PWID7BFC-BVDQ5NaS.js} +1 -1
- package/dist/static/assets/{erDiagram-RLTQ6QDP--OBydd4t.js → erDiagram-RLTQ6QDP-CbjNC4Ic.js} +1 -1
- package/dist/static/assets/eventmodeling-NTZA5JFV-S3i4m4gk.js +1 -0
- package/dist/static/assets/flowDiagram-HODETNUW-DwIN-1sO.js +1 -0
- package/dist/static/assets/{ganttDiagram-EL5Y4UJY-nLGEDzzE.js → ganttDiagram-EL5Y4UJY-CDXtNIdH.js} +1 -1
- package/dist/static/assets/{gitGraph-4MIJSDKK-RtHIulxs.js → gitGraph-4MIJSDKK-CelB5U2Y.js} +1 -1
- package/dist/static/assets/{gitGraphDiagram-WWUBYQGX-CZyyNDg5.js → gitGraphDiagram-WWUBYQGX-DxJbw0jF.js} +1 -1
- package/dist/static/assets/{highlighted-body-KPVGNVTW-B7SALrzB.js → highlighted-body-KPVGNVTW-B1Ro97x9.js} +1 -1
- package/dist/static/assets/{index-CxeFejG3.js → index-DY4IOdWF.js} +130 -130
- package/dist/static/assets/{info-A6RAGUB7-CruHtzdD.js → info-A6RAGUB7-ZBa5wABL.js} +1 -1
- package/dist/static/assets/{infoDiagram-27XIBGKW-Bm64VA7Y.js → infoDiagram-27XIBGKW-CAuVx-_Y.js} +1 -1
- package/dist/static/assets/{ishikawaDiagram-5VMMS53U-CFNfHojz.js → ishikawaDiagram-5VMMS53U-DYS7vhdA.js} +1 -1
- package/dist/static/assets/{journeyDiagram-3NMN7TZE-0QSk3qw2.js → journeyDiagram-3NMN7TZE-CuDBbA4v.js} +1 -1
- package/dist/static/assets/{kanban-definition-UXKFOSKX-BeuVfS5_.js → kanban-definition-UXKFOSKX-BtA07gyc.js} +1 -1
- package/dist/static/assets/{line-BTgxP1gu.js → line-CJ0Q7JeR.js} +1 -1
- package/dist/static/assets/mermaid-HWGCJPDP-C_tZ0gDd.js +1 -0
- package/dist/static/assets/{mermaid-parser.core-D-2N1ZoK.js → mermaid-parser.core-CixuxjLk.js} +3 -3
- package/dist/static/assets/{mermaid.core-Bx5d9AZS.js → mermaid.core-BxxJ5VMb.js} +4 -4
- package/dist/static/assets/{mindmap-definition-YA3MSWOX-CsHSkmu5.js → mindmap-definition-YA3MSWOX-55mi8Exb.js} +1 -1
- package/dist/static/assets/{packet-AYTQ26CC-DjnEMa_h.js → packet-AYTQ26CC-CnmzUcEJ.js} +1 -1
- package/dist/static/assets/{pegDiagram-XKGWAZYB-D_bzmv-L.js → pegDiagram-XKGWAZYB-CauaDSuY.js} +1 -1
- package/dist/static/assets/{pie-WAS4IAKB-RDu0q_ax.js → pie-WAS4IAKB-Chl1_IET.js} +1 -1
- package/dist/static/assets/{pieDiagram-E7YTZNPT-UNQxesjJ.js → pieDiagram-E7YTZNPT-BeN1abkQ.js} +1 -1
- package/dist/static/assets/{quadrantDiagram-AXDQQJYC-DJoz6dqd.js → quadrantDiagram-AXDQQJYC-ClZcfyl6.js} +1 -1
- package/dist/static/assets/{radar-RG4KPBEZ-CbYRLjXw.js → radar-RG4KPBEZ-Qt2bgDfN.js} +1 -1
- package/dist/static/assets/{railroad-74A4TZTK-CAZNN15t.js → railroad-74A4TZTK-hDHHaEVD.js} +1 -1
- package/dist/static/assets/railroad-abnf-HS5TGJTU-D7YDAls-.js +1 -0
- package/dist/static/assets/railroad-ebnf-LZEXJU2U-bpOWwlHn.js +1 -0
- package/dist/static/assets/railroad-peg-WCYAUIDC-DT0fQPRs.js +1 -0
- package/dist/static/assets/{railroadDiagram-O6MQD6OU-D2OF_Yoe.js → railroadDiagram-O6MQD6OU-BvQRJU5N.js} +1 -1
- package/dist/static/assets/{requirementDiagram-BXWQKSXE-CXqc1z45.js → requirementDiagram-BXWQKSXE-B9qBucDr.js} +1 -1
- package/dist/static/assets/{sankeyDiagram-P5KCCOFB-Cwj2FtNr.js → sankeyDiagram-P5KCCOFB-DRu7wgUu.js} +1 -1
- package/dist/static/assets/{sequenceDiagram-WJ2MYXX4-DaLwITv4.js → sequenceDiagram-WJ2MYXX4-BZUX7PIC.js} +1 -1
- package/dist/static/assets/{stateDiagram-D77RDMKH-kGoAKU-N.js → stateDiagram-D77RDMKH-Cco4h7wu.js} +1 -1
- package/dist/static/assets/stateDiagram-v2-MP3YSRHH-CXV6Brwu.js +1 -0
- package/dist/static/assets/{swimlanes-42K2YHIH-B1aWDwKc.js → swimlanes-42K2YHIH-D8UtEZVi.js} +1 -1
- package/dist/static/assets/swimlanesDiagram-VR7AAH4N-R9XfuWIX.js +8 -0
- package/dist/static/assets/{timeline-definition-24CTP7MA-CGZ83thX.js → timeline-definition-24CTP7MA-B3ywMxMM.js} +1 -1
- package/dist/static/assets/{treeView-Q6P3EWNA-9zJIcvoT.js → treeView-Q6P3EWNA-qalIp24c.js} +1 -1
- package/dist/static/assets/{treemap-WGGIJYW6-DdCMbl3F.js → treemap-WGGIJYW6-DjPg9Lfo.js} +1 -1
- package/dist/static/assets/{vennDiagram-4TSXK5OY-_5E5BR7A.js → vennDiagram-4TSXK5OY-CLHFgb-L.js} +1 -1
- package/dist/static/assets/{wardley-WFR3VGLG-CkRE-VJH.js → wardley-WFR3VGLG-B8Nflyh5.js} +1 -1
- package/dist/static/assets/{wardleyDiagram-VM6X3IG4-iXjFZkr2.js → wardleyDiagram-VM6X3IG4-Bzv3cVyG.js} +1 -1
- package/dist/static/assets/{xychartDiagram-S5SC5T6Z-BZXJJdWW.js → xychartDiagram-S5SC5T6Z-DydmskZa.js} +1 -1
- package/dist/static/index.html +1 -1
- package/package.json +1 -1
- package/dist/static/assets/architecture-7GRP2DOG-DAivJHzq.js +0 -1
- package/dist/static/assets/channel-vWcCxzuS.js +0 -1
- package/dist/static/assets/classDiagram-ZZMXUADV-BoIf3Qrf.js +0 -1
- package/dist/static/assets/classDiagram-v2-VYDZK3BY-BoIf3Qrf.js +0 -1
- package/dist/static/assets/eventmodeling-NTZA5JFV-DPAv8bMS.js +0 -1
- package/dist/static/assets/flowDiagram-HODETNUW-BXfM_619.js +0 -1
- package/dist/static/assets/mermaid-HWGCJPDP-BclGD5uu.js +0 -1
- package/dist/static/assets/railroad-abnf-HS5TGJTU-Ch_1gqO5.js +0 -1
- package/dist/static/assets/railroad-ebnf-LZEXJU2U-BNCb1kOy.js +0 -1
- package/dist/static/assets/railroad-peg-WCYAUIDC-BVmbYUvc.js +0 -1
- package/dist/static/assets/stateDiagram-v2-MP3YSRHH-CAwQH9O5.js +0 -1
- package/dist/static/assets/swimlanesDiagram-VR7AAH4N-CHJrh-JE.js +0 -8
package/dist/server.mjs
CHANGED
|
@@ -257,7 +257,7 @@ Expecting one of '${n.join("', '")}'`);if(this._lifeCycleHooks[e])this._lifeCycl
|
|
|
257
257
|
`),this.outputHelp({error:!0});let n=t||{},r=n.exitCode||1,i=n.code||"commander.error";this._exit(r,i,e)}_parseOptionsEnv(){this.options.forEach((e)=>{if(e.envVar&&e.envVar in me.env){let t=e.attributeName();if(this.getOptionValue(t)===void 0||["default","config","env"].includes(this.getOptionValueSource(t)))if(e.required||e.optional)this.emit(`optionEnv:${e.name()}`,me.env[e.envVar]);else this.emit(`optionEnv:${e.name()}`)}})}_parseOptionsImplied(){let e=new fh(this.options),t=(n)=>this.getOptionValue(n)!==void 0&&!["default","implied"].includes(this.getOptionValueSource(n));this.options.filter((n)=>n.implied!==void 0&&t(n.attributeName())&&e.valueFromOption(this.getOptionValue(n.attributeName()),n)).forEach((n)=>{Object.keys(n.implied).filter((r)=>!t(r)).forEach((r)=>{this.setOptionValueWithSource(r,n.implied[r],"implied")})})}missingArgument(e){let t=`error: missing required argument '${e}'`;this.error(t,{code:"commander.missingArgument"})}optionMissingArgument(e){let t=`error: option '${e.flags}' argument missing`;this.error(t,{code:"commander.optionMissingArgument"})}missingMandatoryOptionValue(e){let t=`error: required option '${e.flags}' not specified`;this.error(t,{code:"commander.missingMandatoryOptionValue"})}_conflictingOption(e,t){let n=(o)=>{let s=o.attributeName(),a=this.getOptionValue(s),c=this.options.find((d)=>d.negate&&s===d.attributeName()),u=this.options.find((d)=>!d.negate&&s===d.attributeName());if(c&&(c.presetArg===void 0&&a===!1||c.presetArg!==void 0&&a===c.presetArg))return c;return u||o},r=(o)=>{let s=n(o),a=s.attributeName();if(this.getOptionValueSource(a)==="env")return`environment variable '${s.envVar}'`;return`option '${s.flags}'`},i=`error: ${r(e)} cannot be used with ${r(t)}`;this.error(i,{code:"commander.conflictingOption"})}unknownOption(e){if(this._allowUnknownOption)return;let t="";if(e.startsWith("--")&&this._showSuggestionAfterError){let r=[],i=this;do{let o=i.createHelp().visibleOptions(i).filter((s)=>s.long).map((s)=>s.long);r=r.concat(o),i=i.parent}while(i&&!i._enablePositionalOptions);t=ph(e,r)}let n=`error: unknown option '${e}'${t}`;this.error(n,{code:"commander.unknownOption"})}_excessArguments(e){if(this._allowExcessArguments)return;let t=this.registeredArguments.length,n=t===1?"":"s",r=e.length,i=this.parent?` for '${this.name()}'`:"",o=e.join(", "),s=`error: too many arguments${i}. Expected ${t} argument${n} but got ${r}: ${o}.`;this.error(s,{code:"commander.excessArguments"})}unknownCommand(){let e=this.args[0],t="";if(this._showSuggestionAfterError){let r=[];this.createHelp().visibleCommands(this).forEach((i)=>{if(r.push(i.name()),i.alias())r.push(i.alias())}),t=ph(e,r)}let n=`error: unknown command '${e}'${t}`;this.error(n,{code:"commander.unknownCommand"})}version(e,t,n){if(e===void 0)return this._version;this._version=e,t=t||"-V, --version",n=n||"output the version number";let r=this.createOption(t,n);return this._versionOptionName=r.attributeName(),this._registerOption(r),this.on("option:"+r.name(),()=>{this._outputConfiguration.writeOut(`${e}
|
|
258
258
|
`),this._exit(0,"commander.version",e)}),this}description(e,t){if(e===void 0&&t===void 0)return this._description;if(this._description=e,t)this._argsDescription=t;return this}summary(e){if(e===void 0)return this._summary;return this._summary=e,this}alias(e){if(e===void 0)return this._aliases[0];let t=this;if(this.commands.length!==0&&this.commands[this.commands.length-1]._executableHandler)t=this.commands[this.commands.length-1];if(e===t._name)throw Error("Command alias can't be the same as its name");let n=this.parent?._findCommand(e);if(n){let r=[n.name()].concat(n.aliases()).join("|");throw Error(`cannot add alias '${e}' to command '${this.name()}' as already have command '${r}'`)}return t._aliases.push(e),this}aliases(e){if(e===void 0)return this._aliases;return e.forEach((t)=>this.alias(t)),this}usage(e){if(e===void 0){if(this._usage)return this._usage;let t=this.registeredArguments.map((n)=>Fu(n));return[].concat(this.options.length||this._helpOption!==null?"[options]":[],this.commands.length?"[command]":[],this.registeredArguments.length?t:[]).join(" ")}return this._usage=e,this}name(e){if(e===void 0)return this._name;return this._name=e,this}helpGroup(e){if(e===void 0)return this._helpGroupHeading??"";return this._helpGroupHeading=e,this}commandsGroup(e){if(e===void 0)return this._defaultCommandGroup??"";return this._defaultCommandGroup=e,this}optionsGroup(e){if(e===void 0)return this._defaultOptionGroup??"";return this._defaultOptionGroup=e,this}_initOptionGroup(e){if(this._defaultOptionGroup&&!e.helpGroupHeading)e.helpGroup(this._defaultOptionGroup)}_initCommandGroup(e){if(this._defaultCommandGroup&&!e.helpGroup())e.helpGroup(this._defaultCommandGroup)}nameFromFilename(e){return this._name=Vn.basename(e,Vn.extname(e)),this}executableDir(e){if(e===void 0)return this._executableDir;return this._executableDir=e,this}helpInformation(e){let t=this.createHelp(),n=this._getOutputContext(e);t.prepareContext({error:n.error,helpWidth:n.helpWidth,outputHasColors:n.hasColors});let r=t.formatHelp(this,t);if(n.hasColors)return r;return this._outputConfiguration.stripColor(r)}_getOutputContext(e){e=e||{};let t=!!e.error,n,r,i;if(t)n=(s)=>this._outputConfiguration.writeErr(s),r=this._outputConfiguration.getErrHasColors(),i=this._outputConfiguration.getErrHelpWidth();else n=(s)=>this._outputConfiguration.writeOut(s),r=this._outputConfiguration.getOutHasColors(),i=this._outputConfiguration.getOutHelpWidth();return{error:t,write:(s)=>{if(!r)s=this._outputConfiguration.stripColor(s);return n(s)},hasColors:r,helpWidth:i}}outputHelp(e){let t;if(typeof e==="function")t=e,e=void 0;let n=this._getOutputContext(e),r={error:n.error,write:n.write,command:this};this._getCommandAndAncestors().reverse().forEach((o)=>o.emit("beforeAllHelp",r)),this.emit("beforeHelp",r);let i=this.helpInformation({error:n.error});if(t){if(i=t(i),typeof i!=="string"&&!Buffer.isBuffer(i))throw Error("outputHelp callback must return a string or a Buffer")}if(n.write(i),this._getHelpOption()?.long)this.emit(this._getHelpOption().long);this.emit("afterHelp",r),this._getCommandAndAncestors().forEach((o)=>o.emit("afterAllHelp",r))}helpOption(e,t){if(typeof e==="boolean"){if(e){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(e??"-h, --help",t??"display help for command"),e||t)this._initOptionGroup(this._helpOption);return this}_getHelpOption(){if(this._helpOption===void 0)this.helpOption(void 0,void 0);return this._helpOption}addHelpOption(e){return this._helpOption=e,this._initOptionGroup(e),this}help(e){this.outputHelp(e);let t=Number(me.exitCode??0);if(t===0&&e&&typeof e!=="function"&&e.error)t=1;this._exit(t,"commander.help","(outputHelp)")}addHelpText(e,t){let n=["beforeAll","before","after","afterAll"];if(!n.includes(e))throw Error(`Unexpected value for position to addHelpText.
|
|
259
259
|
Expecting one of '${n.join("', '")}'`);let r=`${e}Help`;return this.on(r,(i)=>{let o;if(typeof t==="function")o=t({error:i.error,command:i.command});else o=t;if(o)i.write(`${o}
|
|
260
|
-
`)}),this}_outputHelpIfRequested(e){let t=this._getHelpOption();if(t&&e.find((r)=>t.is(r)))this.outputHelp(),this._exit(0,"commander.helpDisplayed","(outputHelp)")}}function w2(e){return e.map((t)=>{if(!t.startsWith("--inspect"))return t;let n,r="127.0.0.1",i="9229",o;if((o=t.match(/^(--inspect(-brk)?)$/))!==null)n=o[1];else if((o=t.match(/^(--inspect(-brk|-port)?)=([^:]+)$/))!==null)if(n=o[1],/^\d+$/.test(o[3]))i=o[3];else r=o[3];else if((o=t.match(/^(--inspect(-brk|-port)?)=([^:]+):(\d+)$/))!==null)n=o[1],r=o[3],i=o[4];if(n&&i!=="0")return`${n}=${r}:${parseInt(i)+1}`;return t})}function _2(){if(me.env.NO_COLOR||me.env.FORCE_COLOR==="0"||me.env.FORCE_COLOR==="false")return!1;if(me.env.FORCE_COLOR||me.env.CLICOLOR_FORCE!==void 0)return!0;return}var Yge=new lo;var ia={name:"@rainmanhhh/pi-web",version:"0.29.2",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:">=24.0.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","e2e:prepare":"bun run scripts/e2e-prepare.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",fta:"bun scripts/fta-gate.mjs . --output-limit 15",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":"cross-env CODEBUDDY_SAFE_DELETE_ENABLED=0 bun run e2e:stop && playwright test","test:unit":"vitest run","test:unit:bun":"bun --bun run test:unit",prepare:"husky || true"},dependencies:{"@codemirror/commands":"^6.11.0","@codemirror/lang-css":"^6.3.1","@codemirror/lang-html":"^6.4.12","@codemirror/lang-javascript":"^6.2.5","@codemirror/lang-json":"^6.0.2","@codemirror/lang-markdown":"^6.5.2","@codemirror/lang-yaml":"^6.1.3","@codemirror/language":"^6.12.4","@codemirror/state":"^6.7.1","@codemirror/theme-one-dark":"^6.1.3","@codemirror/view":"^6.43.9","@earendil-works/pi-agent-core":"1.1.0","@earendil-works/pi-ai":"1.1.0","@earendil-works/pi-coding-agent":"1.1.0","@earendil-works/pi-tui":"1.1.0","@hono/node-server":"^2.1.1","class-variance-authority":"^0.7.1",clsx:"^2.1.1",codemirror:"^6.0.2",hono:"^4.13.5","lucide-react":"^1.37.0","p-defer":"^4.0.1",pointrix:"^1.1.0","proper-lockfile":"4.1.2","radix-ui":"^1.6.7",react:"^19.2.8","react-dom":"^19.2.8",shadcn:"^4.19.0",streamdown:"2.6.0","tailwind-merge":"^3.6.0","tw-animate-css":"^1.4.0",virtua:"^0.50.6",ws:"^8.21.3"},devDependencies:{"@biomejs/biome":"^2.5.13","@lobehub/icons":"^5.16.0","@playwright/test":"^1.62.1","@tailwindcss/postcss":"^4.3.3","@testing-library/dom":"^10.4.1","@testing-library/react":"^16.3.3","@types/node":"^25.9.5","@types/proper-lockfile":"4.1.4","@types/react":"^19.2.18","@types/react-dom":"^19.2.5","@types/react-resizable":"^4.0.0","@types/react-syntax-highlighter":"^15.5.13","@types/ws":"^8.18.1","@vitejs/plugin-react":"^6.1.1",commander:"^15.0.0","cross-env":"^10.1.0","fta-cli":"^3.0.1",husky:"^9.1.7",jiti:"^2.7.0",jscpd:"^5.1.0",jsdom:"^30.0.1",katex:"^0.18.4","lint-staged":"^17.4.1",mammoth:"^1.12.2",mermaid:"^11.17.2",oxlint:"^1.80.0",postcss:"^8.5.26","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.3.3",typescript:"^7.0.2",vite:"^8.2.2","vite-plugin-remove-console":"^2.2.0","vite-plugin-svgr":"^5.2.0",vitest:"^4.1.11"},type:"module",overrides:{katex:"^0.18.4"}};var gh=!1,D2=performance.now();function E2(e){if(gh=e,D2=performance.now(),gh)Qe("boot","debug log enabled")}function ze(e){return(t,n)=>Qe(e,t,n)}function Qe(e,t,n){if(!gh)return;let r=performance.now()-D2,i=new Date,o=(a,c=2)=>String(a).padStart(c,"0"),s=`${o(i.getHours())}:${o(i.getMinutes())}:${o(i.getSeconds())}.${o(i.getMilliseconds(),3)}`;console.debug(`[debug][${e}][${s}][+${r.toFixed(1)}ms] ${t}${n?` — ${n}`:""}`)}import{existsSync as jN,mkdirSync as qN,readFileSync as q2,writeFileSync as $N}from"node:fs";import{dirname as HN,join as $2}from"node:path";import{getAgentDir as H2}from"@earendil-works/pi-coding-agent";var C2=[{label:{en:"Explore project","zh-CN":"阅读项目"},message:{en:"Explore the current project and summarize the overall directory structure and responsibilities of core modules.","zh-CN":"阅读当前项目,总结整体目录结构与核心模块的职责。"}},{label:{en:"Review workspace changes","zh-CN":"审查工作区改动"},message:{en:"Review all changes in the current workspace, point out potential issues and improvements.","zh-CN":"审查当前工作区的所有改动,指出潜在问题与改进点。"}},{label:{en:"Find and fix bugs","zh-CN":"寻找并修复bug"},message:{en:"Inspect the current codebase, find and fix existing bugs.","zh-CN":"检查当前代码,寻找并修复其中存在的 bug。"}}];var A2=C2;import{mkdirSync as R2,readFileSync as Bu,writeFileSync as F2}from"node:fs";import{dirname as P2,join as O2}from"node:path";import{getAgentDir as WN}from"@earendil-works/pi-coding-agent";var oa=["off","minimal","low","medium","high","xhigh","max"];var LN=["off","minimal","low","medium","high"];function yh(e){let t={...e??{}};for(let n of LN)if(!(n in t))t[n]=n;return t}function Iu(e){if(!e.reasoning)return;let t=yh(e.thinkingLevelMap);return oa.find((n)=>typeof t[n]==="string")??"low"}function Mu(e){return e==="en"||e==="zh-CN"?e:void 0}function vh(e){return e==="dark"||e==="light"?e:void 0}function xh(e){return typeof e==="string"&&oa.includes(e)?e:void 0}function wh(e){if(typeof e!=="object"||e===null)return;let t=e;if(typeof t.enabled!=="boolean")return;if(typeof t.reserveTokens!=="number"||!Number.isInteger(t.reserveTokens)||t.reserveTokens<=0)return;if(typeof t.keepRecentTokens!=="number"||!Number.isInteger(t.keepRecentTokens)||t.keepRecentTokens<=0)return;return{enabled:t.enabled,reserveTokens:t.reserveTokens,keepRecentTokens:t.keepRecentTokens}}function BN(e){if(typeof e!=="object"||e===null)return;let t=e,n={};if(typeof t.timeoutMs==="number"&&Number.isInteger(t.timeoutMs)&&t.timeoutMs>0)n.timeoutMs=t.timeoutMs;if(typeof t.maxRetries==="number"&&Number.isInteger(t.maxRetries)&&t.maxRetries>0)n.maxRetries=t.maxRetries;if(typeof t.maxRetryDelayMs==="number"&&Number.isInteger(t.maxRetryDelayMs)&&t.maxRetryDelayMs>0)n.maxRetryDelayMs=t.maxRetryDelayMs;return Object.keys(n).length>0?n:void 0}function _h(e){if(typeof e!=="object"||e===null)return;let t=e;if(typeof t.maxRetries!=="number"||!Number.isInteger(t.maxRetries)||t.maxRetries<=0)return;if(typeof t.baseDelayMs!=="number"||!Number.isInteger(t.baseDelayMs)||t.baseDelayMs<=0)return;let n={maxRetries:t.maxRetries,baseDelayMs:t.baseDelayMs};if(typeof t.enabled==="boolean")n.enabled=t.enabled;let r=BN(t.provider);if(r!==void 0)n.provider=r;return n}function Nu(e){if(e==="ask"||e==="always"||e==="never")return e;if(e==="trust")return"always";if(e==="deny")return"never";return}function Lu(e){return typeof e==="number"&&Number.isFinite(e)&&e>=0.85&&e<=1.3?e:void 0}var sa=(e)=>typeof e==="boolean"?e:void 0,bh=(e)=>typeof e==="number"&&Number.isInteger(e)&&e>0?e:void 0,k2=(e)=>typeof e==="string"&&e.trim()!==""?e:void 0;function U2(e,t){if(typeof e!=="object"||e===null)return;let n=e,r={};for(let[i,o]of Object.entries(t)){let s=o(n[i]);if(s!==void 0)r[i]=s}return Object.keys(r).length>0?r:void 0}var Xn=(e)=>Array.isArray(e)&&e.every((t)=>typeof t==="string"&&t.length>0)?e:void 0,Dh=[{key:"defaultTools",validate:Xn},{key:"httpProxy",validate:k2},{key:"httpIdleTimeoutMs",validate:bh},{key:"websocketConnectTimeoutMs",validate:bh},{key:"enableAnalytics",validate:sa},{key:"enableInstallTelemetry",validate:sa},{key:"trackingId",validate:k2},{key:"branchSummary",validate:(e)=>U2(e,{reserveTokens:bh,skipPrompt:sa})},{key:"images",validate:(e)=>U2(e,{autoResize:sa,blockImages:sa})}];function Eh(e){return wh(Kn("compaction",e))}function I2(e,t){let n=wh(e);if(!n)return Eh(t);return fo("compaction",n,t),n}function Sh(e){return _h(Kn("retry",e))}function M2(e,t){let n=_h(e);if(!n)return Sh(t);return fo("retry",n,t),n}function Kn(e,t){try{return JSON.parse(Bu(B2(t),"utf8"))[e]}catch{return}}function fo(e,t,n){try{let r=B2(n),i={};try{i=JSON.parse(Bu(r,"utf8"))}catch{i={}}if(t===void 0)delete i[e];else i[e]=t;R2(P2(r),{recursive:!0}),F2(r,JSON.stringify(i,null,2),"utf8")}catch{}}function N2(e){return O2(e,".pi","settings.json")}function Wu(e,t){try{return JSON.parse(Bu(N2(e),"utf8"))[t]}catch{return}}function L2(e,t,n){try{let r=N2(e),i={};try{i=JSON.parse(Bu(r,"utf8"))}catch{i={}}if(n===void 0)delete i[t];else i[t]=n;R2(P2(r),{recursive:!0}),F2(r,JSON.stringify(i,null,2),"utf8")}catch{}}function po(e,t){let n=Kn(e,t);return typeof n==="string"?n:void 0}function ju(e,t,n){if(t===void 0)return po(e,n);return fo(e,t,n),t}function B2(e){return O2(e??WN(),"settings.json")}function aa(e){return vh(po("theme",e))??"light"}function W2(e,t){let n=vh(e);if(!n)return aa(t);return ju("theme",n,t),n}function qu(e){let t={};for(let{key:n,validate:r}of Dh){let i=r(Kn(n,e));if(i!==void 0)t[n]=i}return Object.keys(t).length>0?t:void 0}function j2(e,t){for(let{key:n,validate:r}of Dh){if(!(n in e))continue;let i=r(e[n]);if(i===void 0)continue;fo(n,i,t)}return qu(t)}var $u=new Map;function Th(e){return $2(e??H2(),"pi-web","config.json")}function GN(e){return $2(e??H2(),"pi-web-preferences.json")}function Ch(e){try{if(jN(Th(e)))return;let t=JSON.parse(q2(GN(e),"utf8"));Ah({firstPaint:{locale:Mu(t.firstPaint?.locale),fontScale:Lu(t.firstPaint?.fontScale)},preferences:t.preferences??{}},e)}catch{}}function zN(e){let t=xh(po("defaultThinkingLevel",e)),n=Eh(e),r=Sh(e),i=Nu(po("defaultProjectTrust",e)),o=qu(e);return{theme:aa(e),...t!==void 0?{defaultThinkingLevel:t}:{},...n!==void 0?{compaction:n}:{},...r!==void 0?{retry:r}:{},...i!==void 0?{defaultProjectTrust:i}:{},...o!==void 0?{piSettings:o}:{}}}function Zn(e){let t=e===void 0,n=e??"",r=t?$u.get(n):void 0;if(!t||r===void 0||r===null)try{let i=q2(Th(e),"utf8"),o=JSON.parse(i);r={firstPaint:{locale:Mu(o.firstPaint?.locale),fontScale:Lu(o.firstPaint?.fontScale)},preferences:o.preferences??{},theme:aa(e)},$u.set(n,r)}catch{if(r={firstPaint:{},preferences:{},theme:aa(e)},t)$u.set(n,r)}return{...r,...zN(e)}}function Ah(e,t){try{let n=Th(t);qN(HN(n),{recursive:!0});let r={firstPaint:e.firstPaint,preferences:e.preferences};if($N(n,JSON.stringify(r,null,2),"utf8"),t===void 0)$u.set("",e)}catch{}}function VN(e,t){return{...e,...t.locale!==void 0?{locale:Mu(t.locale)??e.locale}:{},...t.fontScale!==void 0?{fontScale:Lu(t.fontScale)??e.fontScale}:{}}}function XN(e,t){if(e===void 0)return Nu(po("defaultProjectTrust",t));let n=Nu(e);if(n===void 0)return;return ju("defaultProjectTrust",n,t),n}function kh(e,t){let n=Zn(t),r=VN(n.firstPaint,e),i=n.theme;if(e.theme!==void 0)i=W2(e.theme,t);let o=ju("defaultThinkingLevel",xh(e.defaultThinkingLevel),t),s=I2(e.compaction,t),a=M2(e.retry,t),c=XN(e.defaultProjectTrust,t),u=e.piSettings===void 0?qu(t):j2(e.piSettings,t),d={firstPaint:r,preferences:n.preferences,theme:i,defaultThinkingLevel:o,...s!==void 0?{compaction:s}:{},...a!==void 0?{retry:a}:{},...c!==void 0?{defaultProjectTrust:c}:{},...u!==void 0?{piSettings:u}:{}};return Ah(d,t),d}function Hu(e,t){let n=Zn(t),r={firstPaint:n.firstPaint,preferences:{...n.preferences,...e},theme:n.theme};return Ah(r,t),r}function Uh(e){let{preferences:t}=Zn(e);if(t.startScreenMessages!==void 0)return;Hu({startScreenMessages:A2},e)}import{DefaultResourceLoader as cL,getAgentDir as Y2}from"@earendil-works/pi-coding-agent";import{hasTrustRequiringProjectResources as KN,ProjectTrustStore as Rh}from"@earendil-works/pi-coding-agent";function Oe(e,t){if(!(Boolean(e)&&KN(e)))return{requiresTrust:!1,trusted:!0};return{requiresTrust:!0,trusted:new Rh(t).get(e)===!0}}function G2(e,t){let n=Oe(e,t);if(!n.requiresTrust)return n;return new Rh(t).set(e,!0),{requiresTrust:!0,trusted:!0}}function ho(e,t){if(!Oe(e,t).requiresTrust)return;let r=new Rh(t);return{resolveProjectTrust:async()=>r.get(e)===!0}}import{existsSync as ZN,readFileSync as YN}from"node:fs";import{homedir as JN}from"node:os";import{isAbsolute as QN,join as ca,relative as eL,resolve as z2,sep as tL}from"node:path";function nL({homeDir:e=JN(),xdgStateHome:t=process.env.XDG_STATE_HOME}={}){return t?ca(t,"skills",".skill-lock.json"):ca(e,".agents",".skill-lock.json")}function V2(e){try{let t=JSON.parse(YN(e,"utf8"));return t.skills&&typeof t.skills==="object"?t.skills:{}}catch{return{}}}function X2(e,t){let n=eL(z2(t),z2(e));return n!==""&&n!==".."&&!n.startsWith(`..${tL}`)&&!QN(n)}function rL(e,t){if(e[t])return e[t];let n=t.toLowerCase(),r=Object.keys(e).find((i)=>i.toLowerCase()===n);return r?e[r]:void 0}function iL(e,t){if(t!=="github")return e.replace(/\/$/,"");return e.replace(/^git\+/,"").replace(/^https?:\/\/github\.com\//,"").replace(/^git@github\.com:/,"").replace(/\.git$/,"").replace(/\/$/,"")}function oL(e,t){if(!e||e.includes("://")||e.startsWith("git@"))return;let n=e.split("/").filter(Boolean).map(encodeURIComponent).join("/");if(!n)return;return`https://skills.sh/${n}/${encodeURIComponent(t)}`}function sL(e,t){let n=typeof e.sourceType==="string"?e.sourceType:void 0,r=iL(e.source.trim(),n),i=typeof e.skillPath==="string"?e.skillPath:void 0,o=typeof e.ref==="string"?e.ref:void 0,s=t==="global"?e.skillFolderHash:e.computedHash;return{sourceType:n,source:r,skillPath:i,ref:o,versionHash:typeof s==="string"&&s?s:void 0}}function aL(e,t){let{sourceType:n,source:r,skillPath:i,versionHash:o,ref:s}=e,a=n==="github"&&/^[\w.-]+\/[\w.-]+$/.test(r);return Boolean(a&&i&&o&&(t==="global"||!s))}function K2(e,t,n){let r=rL(e,t);if(!r||typeof r.source!=="string"||!r.source.trim())return;let{sourceType:i,source:o,skillPath:s,ref:a,versionHash:c}=sL(r,n);if(!o)return;return{package:`${o}@${t}`,scope:n,source:o,sourceType:i,skillsShUrl:i==="local"?void 0:oL(o,t),...s&&{skillPath:s},...a&&{ref:a},...c&&{versionHash:c},canCheckForUpdates:aL({sourceType:i,source:o,skillPath:s,versionHash:c,ref:a},n)}}function Z2(e,{cwd:t,agentDir:n,globalLockPath:r=nL(),projectLockPath:i=ca(t,"skills-lock.json")}){let o=V2(r),s=V2(i),a=ca(n,"skills"),c=ca(t,".pi","skills");return e.map((u)=>{if(!ZN(u.filePath))return u;let d=X2(u.filePath,a)?K2(o,u.name,"global"):X2(u.filePath,c)?K2(s,u.name,"project"):void 0;return d?{...u,install:d}:u})}var uL=32,gi=new Map,Fh=new Map;async function cn(e,t){let n=t?.forceFresh??!1,r=e===""?Y2():e;if(!n){let s=gi.get(e);if(s)return{skills:[...s.skills.values()],diagnostics:s.diagnostics,projectResourcesLoaded:s.projectResourcesLoaded}}let i=Fh.get(e);if(i)return i;let o=lL(r,e);Fh.set(e,o);try{return await o}finally{Fh.delete(e)}}async function lL(e,t){let n=Y2(),r=new cL({cwd:e,agentDir:n});await r.reload(ho(e,n));let{skills:i,diagnostics:o}=r.getSkills(),s={skills:Z2(i,{cwd:e,agentDir:n}),diagnostics:o,projectResourcesLoaded:Oe(e,n).trusted},a=new Map;for(let c of s.skills)a.set(c.filePath,c);return gi.set(t,{skills:a,diagnostics:s.diagnostics,projectResourcesLoaded:s.projectResourcesLoaded,loadedAt:Date.now()}),dL(),s}function dL(){while(gi.size>uL){let e=null,t=1/0;for(let[n,r]of gi){if(n==="")continue;if(r.loadedAt<t)t=r.loadedAt,e=n}if(e===null)break;gi.delete(e)}}function J2(e,t,n){let r=gi.get(e);if(!r)return;let i=r.skills.get(t);if(!i){gi.delete(e);return}if(n.disableModelInvocation!==void 0)i.disableModelInvocation=n.disableModelInvocation}var Gu=null;function Q2(e){if(Gu)return;let t=(async()=>{for(let n of e)await Promise.allSettled([n()])})();Gu=t,t.then(()=>{Gu=null})}function _n(){return Gu??Promise.resolve()}var e1={port:31415};import{getAgentDir as ape}from"@earendil-works/pi-coding-agent";var Ph=(e,t,n)=>(r,i)=>{let o=-1;return s(0);async function s(a){if(a<=o)throw Error("next() called multiple times");o=a;let c,u=!1,d;if(e[a])d=e[a][0][0],r.req.routeIndex=a;else d=a===e.length&&i||void 0;if(d)try{c=await d(r,()=>s(a+1))}catch(f){if(f instanceof Error&&t)r.error=f,c=await t(f,r),u=!0;else throw f}else if(r.finalized===!1&&n)c=await n(r);if(c&&(r.finalized===!1||u))r.res=c;return r}};var t1=Symbol();var n1=(e,t)=>new Response(e,{headers:{"Content-Type":t.replace(/^[^;]+/,(r)=>r.toLowerCase())}}).formData();var r1=32,fL=1e4,zu=(e)=>("headers"in e),s1=async(e,t=Object.create(null))=>{let{all:n=!1,dot:r=!1}=t,s=(zu(e)?e.headers:e.raw.headers).get("Content-Type")?.split(";")[0].trim().toLowerCase();if(s==="multipart/form-data"||s==="application/x-www-form-urlencoded")return pL(e,{all:n,dot:r});return{}};async function pL(e,t){if(!zu(e)&&e.bodyCache.formData)return i1(await e.bodyCache.formData,t);let n=zu(e)?e.headers:e.raw.headers,r=await e.arrayBuffer(),i=n1(r,n.get("Content-Type")||"");if(!zu(e))e.bodyCache.formData=i;let o=await i;if(o)return i1(o,t);return{}}function i1(e,t){let n=Object.create(null),r={count:0};if(e.forEach((i,o)=>{if(!(t.all||o.endsWith("[]")))n[o]=i;else hL(n,o,i)}),t.dot)Object.entries(n).forEach(([i,o])=>{if(i.includes("."))gL(n,i,o,r),delete n[i]});return n}var hL=(e,t,n)=>{if(e[t]!==void 0)if(Array.isArray(e[t]))e[t].push(n);else e[t]=[e[t],n];else if(!t.endsWith("[]"))e[t]=n;else e[t]=[n]},gL=(e,t,n,r)=>{if(/(?:^|\.)__proto__\./.test(t))return;let i=e,o=t.split(".",r1+2);if(o.length>r1+1)o1();o.forEach((s,a)=>{if(a===o.length-1)i[s]=n;else{if(!i[s]||typeof i[s]!=="object"||Array.isArray(i[s])||i[s]instanceof File){if(r.count++>=fL)o1();i[s]=Object.create(null)}i=i[s]}})},o1=()=>{throw Error("Nesting limit exceeded")};mi();var h1=class{raw;#e;#t;routeIndex=0;path;bodyCache={};constructor(e,t="/",n=[[]]){this.raw=e,this.path=t,this.#t=n}param(e){return e?this.#n(e):this.#o()}#n(e){let t=this.#t[0][this.routeIndex]?.[1][e],n=this.#i(t);return n&&Ku(n)}#o(){let e={},t=Object.keys(this.#t[0][this.routeIndex]?.[1]??{});for(let n of t){let r=this.#i(this.#t[0][this.routeIndex][1][n]);if(r!==void 0)e[n]=Ku(r)}return e}#i(e){return this.#t[1]?this.#t[1][e]:e}query(e){return f1(this.url,e)}queries(e){return p1(this.url,e)}header(e){if(e)return this.raw.headers.get(e)??void 0;let t=Object.create(null);return this.raw.headers.forEach((n,r)=>{t[r]=n}),t}async parseBody(e){return s1(this,e)}#r=(e)=>{let{bodyCache:t,raw:n}=this,r=t[e];if(r)return r;for(let i in t)return t[i].then((o)=>{if(i==="json")o=JSON.stringify(o);return new Response(o)[e]()});return t[e]=n[e]()};json(){return this.#r("text").then((e)=>JSON.parse(e))}text(){return this.#r("text")}arrayBuffer(){return this.#r("arrayBuffer")}bytes(){return this.#r("arrayBuffer").then((e)=>new Uint8Array(e))}blob(){return this.#r("blob")}formData(){return this.#r("formData")}addValidatedData(e,t){(this.#e??={})[e]=t}valid(e){return this.#e?.[e]}get url(){return this.raw.url}get method(){return this.raw.method}get[t1](){return this.#t}get matchedRoutes(){return this.#t[0].map(([[,e]])=>e)}get routePath(){return this.#t[0].map(([[,e]])=>e)[this.routeIndex].path}};Bh();var vL="text/plain; charset=UTF-8",Wh=(e,t)=>({"Content-Type":e,...t}),ua=(e,t)=>new Response(e,t),jh=class{#e;#t;env={};#n;finalized=!1;error;#o;#i;#r;#c;#s;#a;#l;#d;#f;constructor(e,t){if(this.#e=e,t)this.#i=t.executionCtx,this.env=t.env,this.#a=t.notFoundHandler,this.#f=t.path,this.#d=t.matchResult}get req(){return this.#t??=new h1(this.#e,this.#f,this.#d),this.#t}get event(){if(this.#i&&"respondWith"in this.#i)return this.#i;else throw Error("This context has no FetchEvent")}get executionCtx(){if(this.#i)return this.#i;else throw Error("This context has no ExecutionContext")}get res(){return this.#r||=ua(null,{headers:this.#l??=new Headers})}set res(e){if(this.#r&&e){e=ua(e.body,e);for(let[t,n]of this.#r.headers.entries()){if(t==="content-type")continue;if(t==="set-cookie"){let r=this.#r.headers.getSetCookie();e.headers.delete("set-cookie");for(let i of r)e.headers.append("set-cookie",i)}else e.headers.set(t,n)}}this.#r=e,this.finalized=!0}render=(...e)=>(this.#s??=(t)=>this.html(t),this.#s(...e));setLayout=(e)=>this.#c=e;getLayout=()=>this.#c;setRenderer=(e)=>{this.#s=e};header=(e,t,n)=>{if(this.finalized)this.#r=ua(this.#r.body,this.#r);let r=this.#r?this.#r.headers:this.#l??=new Headers;if(t===void 0)r.delete(e);else if(n?.append)r.append(e,t);else r.set(e,t)};status=(e)=>{this.#o=e};set=(e,t)=>{this.#n??=new Map,this.#n.set(e,t)};get=(e)=>this.#n?this.#n.get(e):void 0;get var(){if(!this.#n)return{};return Object.fromEntries(this.#n)}#u(e,t,n){let r=this.#r?new Headers(this.#r.headers):this.#l;if(typeof t==="object"&&t.headers){r??=new Headers;for(let[o,s]of new Headers(t.headers))if(o==="set-cookie")r.append(o,s);else r.set(o,s)}if(n){if(!r){let o=0;for(let s in n)if(++o>1||typeof n[s]!=="string"){r=new Headers;break}}if(r)for(let o in n){let s=n[o];if(typeof s==="string")r.set(o,s);else{r.delete(o);for(let a of s)r.append(o,a)}}}let i=typeof t==="number"?t:t?.status??this.#o;return ua(e,{status:i,headers:r??n})}newResponse=(...e)=>this.#u(...e);body=(e,t,n)=>this.#u(e,t,n);text=(e,t,n)=>!this.#l&&!this.#o&&!t&&!n&&!this.finalized?new Response(e):this.#u(e,t,Wh(vL,n));json=(e,t,n)=>this.#u(JSON.stringify(e),t,Wh("application/json",n));html=(e,t,n)=>{let r=(i)=>this.#u(i,t,Wh("text/html; charset=UTF-8",n));return typeof e==="object"?Lh(e,g1.Stringify,!1,{}).then(r):r(e)};redirect=(e,t)=>{let n=String(e);return this.header("Location",!/[^\x00-\xFF]/.test(n)?n:encodeURI(n)),this.newResponse(null,t??302)};notFound=()=>(this.#a??=()=>ua(),this.#a(this))};Sr();qh();mi();var xL=(e)=>e.text("404 Not Found",404),v1=(e,t)=>{if("getResponse"in e){let n=e.getResponse();return t.newResponse(n.body,n)}return console.error(e),t.text("Internal Server Error",500)},x1=class e{get;post;put;delete;options;patch;query;all;on;use;router;getPath;_basePath="/";#e="/";routes=[];constructor(t={}){[...b1,y1].forEach((o)=>{this[o]=(s,...a)=>{if(typeof s==="string")this.#e=s;else this.#o(o,this.#e,s);return a.forEach((c)=>{this.#o(o,this.#e,c)}),this}}),this.on=(o,s,...a)=>{for(let c of[s].flat()){this.#e=c;for(let u of[o].flat())a.map((d)=>{this.#o(u.toUpperCase(),this.#e,d)})}return this},this.use=(o,...s)=>{if(typeof o==="string")this.#e=o;else this.#e="*",s.unshift(o);return s.forEach((a)=>{this.#o(Xe,this.#e,a)}),this};let{strict:r,...i}=t;Object.assign(this,i),this.getPath=r??!0?t.getPath??Nh:l1}#t(){let t=new e({router:this.router,getPath:this.getPath});return t.errorHandler=this.errorHandler,t.#n=this.#n,t.routes=this.routes,t}#n=xL;errorHandler=v1;route(t,n){let r=this.basePath(t);return n.routes.map((i)=>{let o;if(n.errorHandler===v1)o=i.handler;else o=async(s,a)=>(await Ph([],n.errorHandler)(s,()=>i.handler(s,a))).res,o[la]=i.handler;r.#o(i.method,i.path,o,i.basePath)}),this}basePath(t){let n=this.#t();return n._basePath=Er(this._basePath,t),n}onError=(t)=>(this.errorHandler=t,this);notFound=(t)=>(this.#n=t,this);mount(t,n,r){let i,o;if(r)if(typeof r==="function")o=r;else if(o=r.optionHandler,r.replaceRequest===!1)i=(c)=>c;else i=r.replaceRequest;let s=o?(c)=>{let u=o(c);return Array.isArray(u)?u:[u]}:(c)=>{let u=void 0;try{u=c.executionCtx}catch{}return[c.env,u]};i||=(()=>{let c=Er(this._basePath,t),u=c==="/"?0:c.length;return(d)=>{let f=new URL(d.url);return f.pathname=this.getPath(d).slice(u)||"/",new Request(f,d)}})();let a=async(c,u)=>{let d=await n(i(c.req.raw),...s(c));if(d)return d;await u()};return this.#o(Xe,Er(t,"*"),a),this}#o(t,n,r,i){t=t.toUpperCase(),n=Er(this._basePath,n);let o={basePath:i!==void 0?Er(this._basePath,i):this._basePath,path:n,method:t,handler:r};this.router.add(t,n,[r,o]),this.routes.push(o)}#i(t,n){if(t instanceof Error)return this.errorHandler(t,n);throw t}#r(t,n,r,i){if(i==="HEAD")return(async()=>new Response(null,await this.#r(t,n,r,"GET")))();let o=this.getPath(t,{env:r}),s=this.router.match(i,o),a=new jh(t,{path:o,matchResult:s,env:r,executionCtx:n,notFoundHandler:this.#n});if(s[0].length===1){let u;try{u=s[0][0][0][0](a,async()=>{a.res=await this.#n(a)})}catch(d){return this.#i(d,a)}return u instanceof Promise?u.then((d)=>d||(a.finalized?a.res:this.#n(a))).catch((d)=>this.#i(d,a)):u??this.#n(a)}let c=Ph(s[0],this.errorHandler,this.#n);return(async()=>{try{let u=await c(a);if(!u.finalized)throw Error("Context is not finalized. Did you forget to return a Response object or `await next()`?");return u.res}catch(u){return this.#i(u,a)}})()}fetch=(t,...n)=>this.#r(t,n[1],n[0],t.method);request=(t,n,r,i)=>{if(t instanceof Request)return this.fetch(n?new Request(t,n):t,r,i);return t=t.toString(),this.fetch(new Request(/^https?:\/\//.test(t)?t:`http://localhost${Er("/",t)}`,n),r,i)};fire=()=>{addEventListener("fetch",(t)=>{t.respondWith(this.#r(t.request,t,void 0,t.request.method))})}};Sr();mi();var et=()=>Object.create(null);Sr();var Ju=[];function $h(e,t){let n=this.buildAllMatchers(),r=(i,o)=>{let s=n[i]||n[Xe],a=s[2][o];if(a)return a;let c=o.match(s[0]);if(!c)return[[],Ju];let u=c.indexOf("",1);return[s[1][u],c]};return this.match=r,r(e,t)}var go="[^/]+",Cr=".*",Yn="(?:|/.*)",Tr=Symbol(),w1=new Set(".\\+*[^]$()");function wL(e,t){if(e.length===1)return t.length===1?e<t?-1:1:-1;if(t.length===1)return 1;if(e===Cr||e===Yn)return t===Yn?-1:1;else if(t===Cr||t===Yn)return-1;if(e===go)return 1;else if(t===go)return-1;return e.length===t.length?e<t?-1:1:t.length-e.length}var _1=class e{#e;#t;#n=et();insert(t,n,r,i,o){let s=this;for(let a=0,c=t.length;a<c;a++){let u=t[a],d=u.length===1?u==="*"?a===c-1?["","",Cr]:["","",go]:null:u==="/*"?["","",Yn]:u.match(/^\:([^\{\}]+)(?:\{(.+)\})?$/),f;if(d){let p=d[1],h=d[2]||go;if(p&&d[2]){if(h===".*")throw Tr;if(h=h.replace(/^\((?!\?:)(?=[^)]+\)$)/,"(?:"),/\((?!\?:)/.test(h))throw Tr;if(h.length===1&&w1.has(h))throw Tr}if(f=s.#n[h],!f){if(h!==Cr&&h!==Yn){for(let g in s.#n)if((h.length>1||g.length>1)&&g!==Cr&&g!==Yn)throw Tr}f=s.#n[h]=new e}if(p!=="")f.#t??=i.varIndex++,r.push([p,f.#t])}else if(f=s.#n[u],!f){for(let p in s.#n)if(p.length>1&&p!==Cr&&p!==Yn)throw Tr;f=s.#n[u]=new e}s=f}if(s.#e!==void 0)throw Tr;s.#e=o?-1:n}buildRegExpStr(){let n=Object.keys(this.#n).sort(wL).map((r)=>{let i=this.#n[r],o=i.buildRegExpStr();return o===""?"":(typeof i.#t==="number"?`(${r})@${i.#t}`:w1.has(r)?`\\${r}`:r)+o}).filter(Boolean);if(typeof this.#e==="number"&&this.#e!==-1)n.unshift(`#${this.#e}`);if(n.length===0)return"";if(n.length===1)return n[0];return"(?:"+n.join("|")+")"}};var Hh=class{#e={varIndex:0};#t=new _1;#n=0;paths=et();insert(e,t){if(t){this.#t.insert(e.split(""),0,[],this.#e,!0);return}let n=[],r=[],i=e;for(let s=0;;){let a=!1;if(i=i.replace(/\{[^}]+\}/g,(c)=>{let u=`@\\${s}`;return r[s]=[u,c],s++,a=!0,u}),!a)break}let o=i.match(/(?::[^\/]+)|(?:\/\*$)|./g)||[];for(let s=r.length-1;s>=0;s--){let[a]=r[s];for(let c=o.length-1;c>=0;c--)if(o[c].indexOf(a)!==-1){o[c]=o[c].replace(a,r[s][1]);break}}this.#t.insert(o,this.#n,n,this.#e,!1),this.paths[e]=[this.#n++,n]}buildRegExp(){let e=this.#t.buildRegExpStr();if(e==="")return[/^$/,[],[]];let t=0,n=[],r=[];return e=e.replace(/#(\d+)|@(\d+)|\.\*\$/g,(i,o,s)=>{if(o!==void 0)return n[++t]=Number(o),"$()";if(s!==void 0)return r[Number(s)]=++t,"";return""}),[new RegExp(`^${e}`),n,r]}};var D1=et();function E1(e){return D1[e]??=new RegExp(`^${e.replace(/\/:[^/{}]+(?:\{\[\^\/]\+})?(?=[/{]|$)|\/?\*$|([.\\+*[^\]$()?{}|])/g,(t,n)=>n?`\\${n}`:t==="/*"?Yn:t==="*"?Cr:`/:${go}`)}$`)}function Qu(e,t){for(let n of Object.keys(e).sort((r,i)=>i.length-r.length))if(E1(n).test(t))return[...e[n]];return}var el=class{name="RegExpRouter";#e;#t;#n;constructor(){this.#e={[Xe]:et()},this.#t={[Xe]:et()},this.#n={[Xe]:new Hh}}#o(e,t){try{this.#n[e].insert(t,!/\*|\/:/.test(t))}catch(n){throw n===Tr?new Yu(t):n}}add(e,t,n){let r=this.#e,i=this.#t;if(!r)throw Error(Zu);if(!r[e]){this.#n[e]=new Hh;for(let a of[r,i]){a[e]=et();for(let c in a[Xe])a[e][c]=[...a[Xe][c]],this.#o(e,c)}}if(t==="/*")t="*";let o=e===Xe?Object.keys(r):[e];if(/\*$/.test(t)){let a=E1(t);for(let c of o)if(!r[c][t])this.#o(c,t),r[c][t]=Qu(r[c],t)||Qu(r[Xe],t)||[];for(let c of[r,i])for(let u of o)for(let d in c[u])a.test(d)&&c[u][d].push([n,t]);return}let s=Xu(t)||[t];for(let a of s)for(let c of o){if(!i[c][a])this.#o(c,a),i[c][a]=Qu(r[c],a)||Qu(r[Xe],a)||[];i[c][a].push([n,a])}}match=$h;buildAllMatchers(){let e=et();for(let t of Object.keys(this.#t))e[t]=this.#i(t);return this.#e=this.#t=this.#n=void 0,D1=et(),e}#i(e){let t=this.#e[e],n=this.#t[e],r=this.#n[e],i=et(),o=[],[s,a,c]=r.buildRegExp();for(let u of[t,n])for(let d in u){let f=u[d],p=r.paths[d];if(!p){i[d]=[f.map(([h])=>[h,et()]),Ju];continue}o[p[0]]=f.map(([h,g])=>[h,r.paths[g][1].reduceRight((b,[v],y)=>(b[v]=c[p[1][y][1]],b),et())])}return[s,a.map((u)=>o[u]),i]}};Sr();Sr();var Gh=class{name="SmartRouter";#e=[];#t=[];constructor(e){this.#e=e.routers}add(e,t,n){if(!this.#t)throw Error(Zu);this.#t.push([e,t,n])}match(e,t){if(!this.#t)throw Error("Fatal error");let n=this.#e,r=this.#t,i=n.length,o=0,s;for(;o<i;o++){let a=n[o];try{for(let c=0,u=r.length;c<u;c++)a.add(...r[c]);s=a.match(e,t)}catch(c){if(c instanceof Yu)continue;throw c}this.match=a.match.bind(a),this.#e=[a],this.#t=void 0;break}if(o===i)throw Error("Fatal error");return this.name=`SmartRouter + ${this.activeRouter.name}`,s}get activeRouter(){if(this.#t||this.#e.length!==1)throw Error("No active router has been determined yet.");return this.#e[0]}};mi();Sr();mi();var zh=et(),_L=0,S1=class e{#e=[];#t=et();#n=[];#o;#i=zh;insert(t,n,r){let i=this,o=a1(n),s=new Set,a=0;for(let c of o){let u=o[++a],d=c1(c,u)||(u===void 0&&c&&c.indexOf("*")===c.length-1?c:null),f=Array.isArray(d),p=f?d[0]:d||c,h=i.#t[p]||=new e;if(d&&!h.#o)h.#o=d,i.#n.push(h);if(i=h,f)s.add(d[1])}i.#e.push({[t]:{handler:r,possibleKeys:[...s],score:++_L}})}#r(t,n,r,i,o){for(let s=0,a=n.#e.length;s<a;s++){let c=n.#e[s],u=c[r]||c[Xe];if(u){u.params=et(),t.push(u);for(let d=0,f=u.possibleKeys.length;d<f;d++){let p=u.possibleKeys[d];u.params[p]=o?.[p]&&!d?o[p]:i[p]??o?.[p]}}}}search(t,n){let r=[];this.#i=zh;let o=[this],s=Ih(n),a=[],c=s.length,u=null;for(let d=0;d<c;d++){let f=s[d],p=d===c-1,h=[];for(let b=0,v=o.length;b<v;b++){let y=o[b],x=y.#t[f];if(x)if(x.#i=y.#i,p){if(x.#t["*"])this.#r(r,x.#t["*"],t,y.#i);this.#r(r,x,t,y.#i)}else h.push(x);for(let m of y.#n){let w=m.#o,D=y.#i===zh?{}:{...y.#i};if(typeof w==="string"){if(w==="*"||f.startsWith(w.slice(0,-1))){if(this.#r(r,m,t,y.#i),w==="*")m.#i=D,h.push(m)}continue}let[,T,_]=w;if(!f&&_===!0)continue;if(_!==!0){if(!u){u=[];let M=n[0]==="/"?1:0;for(let P=0;P<c;P++)u[P]=M,M+=s[P].length+1}let A=n.slice(u[d]),S=_.exec(A);if(S){if(D[T]=S[0],this.#r(r,m,t,y.#i,D),S[0].length===A.length&&m.#t["*"])this.#r(r,m.#t["*"],t,y.#i,D);for(let M in m.#t){m.#i=D;let P=S[0].match(/\//g)?.length??0;(a[P]||=[]).push(m);break}continue}}if(_===!0||_.test(f))if(D[T]=f,p){if(this.#r(r,m,t,D,y.#i),m.#t["*"])this.#r(r,m.#t["*"],t,D,y.#i)}else m.#i=D,h.push(m)}}let g=a.shift();o=g?h.concat(g):h}if(r[1])r.sort((d,f)=>d.score-f.score);return[r.map(({handler:d,params:f})=>[d,f])]}};var Vh=class{name="TrieRouter";#e=new S1;add(e,t,n){for(let r of Xu(t)||[t])this.#e.insert(e,r,n)}match(e,t){return this.#e.search(e,t)}};var Xh=class extends x1{constructor(e={}){super(e);this.router=e.router??new Gh({routers:[new el,new Vh]})}};function Kh(){let e={};return e.promise=new Promise((t,n)=>{e.resolve=t,e.reject=n}),e}import{execFile as DL}from"node:child_process";import mo from"node:path";import{promisify as EL}from"node:util";var da=EL(DL),tl=1e4,T1=120000,fa=8388608;async function xt(e,t,n=fa,r=tl){let{stdout:i}=await da("git",["-C",e,...t],{timeout:r,maxBuffer:n,env:{...process.env,LC_ALL:"C"}});return i}async function Ut(e){try{return(await xt(e,["rev-parse","--show-toplevel"])).trim()||null}catch{return null}}function yi(e,t){let n=mo.relative(mo.resolve(e),mo.resolve(t));return n===""||!n.startsWith(`..${mo.sep}`)&&n!==".."&&!mo.isAbsolute(n)}function Ar(e){return e.split(mo.sep).join("/")}function nl(e){return e.includes(0)}import{lstat as OL,readFile as IL}from"node:fs/promises";import F1 from"node:path";var bi=262144,C1=10485760,A1=10485760,SL={png:"image/png",jpg:"image/jpeg",jpeg:"image/jpeg",gif:"image/gif",webp:"image/webp",svg:"image/svg+xml",bmp:"image/bmp",ico:"image/x-icon",avif:"image/avif"},TL={mp3:"audio/mpeg",wav:"audio/wav",ogg:"audio/ogg",oga:"audio/ogg",opus:"audio/ogg",m4a:"audio/mp4",aac:"audio/aac",flac:"audio/flac",weba:"audio/webm",webm:"audio/webm"},CL={pdf:"application/pdf",docx:"application/vnd.openxmlformats-officedocument.wordprocessingml.document"};function AL(e){return e.replace(/\\/g,"/").split("/").pop()??""}function yo(e){return AL(e).toLowerCase().split(".").pop()??""}function rl(e){return SL[yo(e)]??null}function il(e){return TL[yo(e)]??null}function ol(e){return CL[yo(e)]??null}function k1(e){let t=yo(e);if(t==="pdf"||t==="docx")return t;return null}function kL(e,t){return e==="R"||e==="C"||t==="R"||t==="C"}function U1(e){let t=e.split("\x00"),n=[];for(let r=0;r<t.length;r++){let i=t[r];if(!i||i.length<4||i[2]!==" ")continue;let o=i[0],s=i[1],a={path:i.slice(3),indexStatus:o,worktreeStatus:s};if(kL(o,s))a.originalPath=t[++r]||void 0;n.push(a)}return n}var UL=new Set(["DD","AU","UD","UA","DU","AA","UU"]);function sl(e){let t=`${e.indexStatus}${e.worktreeStatus}`;if(t==="??")return{status:"untracked",code:"U"};if(UL.has(t)||t.includes("U"))return{status:"conflict",code:"C"};if(t.includes("D"))return{status:"deleted",code:"D"};if(t.includes("R")||t.includes("C"))return{status:"renamed",code:"R"};if(t.includes("A"))return{status:"added",code:"A"};return{status:"modified",code:"M"}}import{lstat as RL,readFile as FL}from"node:fs/promises";import Zh from"node:path";async function Yh(e){let t=await xt(e,["status","--porcelain=v1","-z","--untracked-files=all"]);return U1(t)}async function R1(e,t,n){let i=Ar(Zh.relative(e,t))||".";try{let o=await xt(e,["diff","--no-color","--no-ext-diff","--numstat",...n,"--",i]),s=new Map;for(let a of o.split(/\r?\n/)){if(!a)continue;let[c,u,...d]=a.split("\t");if(d.length===0)continue;let f=Number(c),p=Number(u);if(!Number.isInteger(f)||!Number.isInteger(p))continue;let h=d.join("\t"),g=h.indexOf(" => ");if(g!==-1)h=h.slice(g+4);s.set(Ar(h.trim()),{additions:f,deletions:p})}return s}catch{return new Map}}async function PL(e){try{let t=await RL(e);if(!t.isFile()||t.size>bi)return 0;let n=await FL(e);if(nl(n)||n.length===0)return 0;let r=n.toString("utf8");return r.endsWith(`
|
|
260
|
+
`)}),this}_outputHelpIfRequested(e){let t=this._getHelpOption();if(t&&e.find((r)=>t.is(r)))this.outputHelp(),this._exit(0,"commander.helpDisplayed","(outputHelp)")}}function w2(e){return e.map((t)=>{if(!t.startsWith("--inspect"))return t;let n,r="127.0.0.1",i="9229",o;if((o=t.match(/^(--inspect(-brk)?)$/))!==null)n=o[1];else if((o=t.match(/^(--inspect(-brk|-port)?)=([^:]+)$/))!==null)if(n=o[1],/^\d+$/.test(o[3]))i=o[3];else r=o[3];else if((o=t.match(/^(--inspect(-brk|-port)?)=([^:]+):(\d+)$/))!==null)n=o[1],r=o[3],i=o[4];if(n&&i!=="0")return`${n}=${r}:${parseInt(i)+1}`;return t})}function _2(){if(me.env.NO_COLOR||me.env.FORCE_COLOR==="0"||me.env.FORCE_COLOR==="false")return!1;if(me.env.FORCE_COLOR||me.env.CLICOLOR_FORCE!==void 0)return!0;return}var Yge=new lo;var ia={name:"@rainmanhhh/pi-web",version:"0.29.3",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:">=24.0.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","e2e:prepare":"bun run scripts/e2e-prepare.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",fta:"bun scripts/fta-gate.mjs . --output-limit 15",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":"cross-env CODEBUDDY_SAFE_DELETE_ENABLED=0 bun run e2e:stop && playwright test","test:unit":"vitest run","test:unit:bun":"bun --bun run test:unit",prepare:"husky || true"},dependencies:{"@codemirror/commands":"^6.11.0","@codemirror/lang-css":"^6.3.1","@codemirror/lang-html":"^6.4.12","@codemirror/lang-javascript":"^6.2.5","@codemirror/lang-json":"^6.0.2","@codemirror/lang-markdown":"^6.5.2","@codemirror/lang-yaml":"^6.1.3","@codemirror/language":"^6.12.4","@codemirror/state":"^6.7.1","@codemirror/theme-one-dark":"^6.1.3","@codemirror/view":"^6.43.9","@earendil-works/pi-agent-core":"1.1.0","@earendil-works/pi-ai":"1.1.0","@earendil-works/pi-coding-agent":"1.1.0","@earendil-works/pi-tui":"1.1.0","@hono/node-server":"^2.1.1","class-variance-authority":"^0.7.1",clsx:"^2.1.1",codemirror:"^6.0.2",hono:"^4.13.5","lucide-react":"^1.37.0","p-defer":"^4.0.1",pointrix:"^1.1.0","proper-lockfile":"4.1.2","radix-ui":"^1.6.7",react:"^19.2.8","react-dom":"^19.2.8",shadcn:"^4.19.0",streamdown:"2.6.0","tailwind-merge":"^3.6.0","tw-animate-css":"^1.4.0",virtua:"^0.50.6",ws:"^8.21.3"},devDependencies:{"@biomejs/biome":"^2.5.13","@lobehub/icons":"^5.16.0","@playwright/test":"^1.62.1","@tailwindcss/postcss":"^4.3.3","@testing-library/dom":"^10.4.1","@testing-library/react":"^16.3.3","@types/node":"^25.9.5","@types/proper-lockfile":"4.1.4","@types/react":"^19.2.18","@types/react-dom":"^19.2.5","@types/react-resizable":"^4.0.0","@types/react-syntax-highlighter":"^15.5.13","@types/ws":"^8.18.1","@vitejs/plugin-react":"^6.1.1",commander:"^15.0.0","cross-env":"^10.1.0","fta-cli":"^3.0.1",husky:"^9.1.7",jiti:"^2.7.0",jscpd:"^5.1.0",jsdom:"^30.0.1",katex:"^0.18.4","lint-staged":"^17.4.1",mammoth:"^1.12.2",mermaid:"^11.17.2",oxlint:"^1.80.0",postcss:"^8.5.26","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.3.3",typescript:"^7.0.2",vite:"^8.2.2","vite-plugin-remove-console":"^2.2.0","vite-plugin-svgr":"^5.2.0",vitest:"^4.1.11"},type:"module",overrides:{katex:"^0.18.4"}};var gh=!1,D2=performance.now();function E2(e){if(gh=e,D2=performance.now(),gh)Qe("boot","debug log enabled")}function ze(e){return(t,n)=>Qe(e,t,n)}function Qe(e,t,n){if(!gh)return;let r=performance.now()-D2,i=new Date,o=(a,c=2)=>String(a).padStart(c,"0"),s=`${o(i.getHours())}:${o(i.getMinutes())}:${o(i.getSeconds())}.${o(i.getMilliseconds(),3)}`;console.debug(`[debug][${e}][${s}][+${r.toFixed(1)}ms] ${t}${n?` — ${n}`:""}`)}import{existsSync as jN,mkdirSync as qN,readFileSync as q2,writeFileSync as $N}from"node:fs";import{dirname as HN,join as $2}from"node:path";import{getAgentDir as H2}from"@earendil-works/pi-coding-agent";var C2=[{label:{en:"Explore project","zh-CN":"阅读项目"},message:{en:"Explore the current project and summarize the overall directory structure and responsibilities of core modules.","zh-CN":"阅读当前项目,总结整体目录结构与核心模块的职责。"}},{label:{en:"Review workspace changes","zh-CN":"审查工作区改动"},message:{en:"Review all changes in the current workspace, point out potential issues and improvements.","zh-CN":"审查当前工作区的所有改动,指出潜在问题与改进点。"}},{label:{en:"Find and fix bugs","zh-CN":"寻找并修复bug"},message:{en:"Inspect the current codebase, find and fix existing bugs.","zh-CN":"检查当前代码,寻找并修复其中存在的 bug。"}}];var A2=C2;import{mkdirSync as R2,readFileSync as Bu,writeFileSync as F2}from"node:fs";import{dirname as P2,join as O2}from"node:path";import{getAgentDir as WN}from"@earendil-works/pi-coding-agent";var oa=["off","minimal","low","medium","high","xhigh","max"];var LN=["off","minimal","low","medium","high"];function yh(e){let t={...e??{}};for(let n of LN)if(!(n in t))t[n]=n;return t}function Iu(e){if(!e.reasoning)return;let t=yh(e.thinkingLevelMap);return oa.find((n)=>typeof t[n]==="string")??"low"}function Mu(e){return e==="en"||e==="zh-CN"?e:void 0}function vh(e){return e==="dark"||e==="light"?e:void 0}function xh(e){return typeof e==="string"&&oa.includes(e)?e:void 0}function wh(e){if(typeof e!=="object"||e===null)return;let t=e;if(typeof t.enabled!=="boolean")return;if(typeof t.reserveTokens!=="number"||!Number.isInteger(t.reserveTokens)||t.reserveTokens<=0)return;if(typeof t.keepRecentTokens!=="number"||!Number.isInteger(t.keepRecentTokens)||t.keepRecentTokens<=0)return;return{enabled:t.enabled,reserveTokens:t.reserveTokens,keepRecentTokens:t.keepRecentTokens}}function BN(e){if(typeof e!=="object"||e===null)return;let t=e,n={};if(typeof t.timeoutMs==="number"&&Number.isInteger(t.timeoutMs)&&t.timeoutMs>0)n.timeoutMs=t.timeoutMs;if(typeof t.maxRetries==="number"&&Number.isInteger(t.maxRetries)&&t.maxRetries>0)n.maxRetries=t.maxRetries;if(typeof t.maxRetryDelayMs==="number"&&Number.isInteger(t.maxRetryDelayMs)&&t.maxRetryDelayMs>0)n.maxRetryDelayMs=t.maxRetryDelayMs;return Object.keys(n).length>0?n:void 0}function _h(e){if(typeof e!=="object"||e===null)return;let t=e;if(typeof t.maxRetries!=="number"||!Number.isInteger(t.maxRetries)||t.maxRetries<=0)return;if(typeof t.baseDelayMs!=="number"||!Number.isInteger(t.baseDelayMs)||t.baseDelayMs<=0)return;let n={maxRetries:t.maxRetries,baseDelayMs:t.baseDelayMs};if(typeof t.enabled==="boolean")n.enabled=t.enabled;let r=BN(t.provider);if(r!==void 0)n.provider=r;return n}function Nu(e){if(e==="ask"||e==="always"||e==="never")return e;if(e==="trust")return"always";if(e==="deny")return"never";return}function Lu(e){return typeof e==="number"&&Number.isFinite(e)&&e>=0.85&&e<=1.3?e:void 0}var sa=(e)=>typeof e==="boolean"?e:void 0,bh=(e)=>typeof e==="number"&&Number.isInteger(e)&&e>0?e:void 0,k2=(e)=>typeof e==="string"&&e.trim()!==""?e:void 0;function U2(e,t){if(typeof e!=="object"||e===null)return;let n=e,r={};for(let[i,o]of Object.entries(t)){let s=o(n[i]);if(s!==void 0)r[i]=s}return Object.keys(r).length>0?r:void 0}var Xn=(e)=>Array.isArray(e)&&e.every((t)=>typeof t==="string"&&t.length>0)?e:void 0,Dh=[{key:"defaultTools",validate:Xn},{key:"httpProxy",validate:k2},{key:"httpIdleTimeoutMs",validate:bh},{key:"websocketConnectTimeoutMs",validate:bh},{key:"enableAnalytics",validate:sa},{key:"enableInstallTelemetry",validate:sa},{key:"trackingId",validate:k2},{key:"branchSummary",validate:(e)=>U2(e,{reserveTokens:bh,skipPrompt:sa})},{key:"images",validate:(e)=>U2(e,{autoResize:sa,blockImages:sa})}];function Eh(e){return wh(Kn("compaction",e))}function I2(e,t){let n=wh(e);if(!n)return Eh(t);return fo("compaction",n,t),n}function Sh(e){return _h(Kn("retry",e))}function M2(e,t){let n=_h(e);if(!n)return Sh(t);return fo("retry",n,t),n}function Kn(e,t){try{return JSON.parse(Bu(B2(t),"utf8"))[e]}catch{return}}function fo(e,t,n){try{let r=B2(n),i={};try{i=JSON.parse(Bu(r,"utf8"))}catch{i={}}if(t===void 0)delete i[e];else i[e]=t;R2(P2(r),{recursive:!0}),F2(r,JSON.stringify(i,null,2),"utf8")}catch{}}function N2(e){return O2(e,".pi","settings.json")}function Wu(e,t){try{return JSON.parse(Bu(N2(e),"utf8"))[t]}catch{return}}function L2(e,t,n){try{let r=N2(e),i={};try{i=JSON.parse(Bu(r,"utf8"))}catch{i={}}if(n===void 0)delete i[t];else i[t]=n;R2(P2(r),{recursive:!0}),F2(r,JSON.stringify(i,null,2),"utf8")}catch{}}function po(e,t){let n=Kn(e,t);return typeof n==="string"?n:void 0}function ju(e,t,n){if(t===void 0)return po(e,n);return fo(e,t,n),t}function B2(e){return O2(e??WN(),"settings.json")}function aa(e){return vh(po("theme",e))??"light"}function W2(e,t){let n=vh(e);if(!n)return aa(t);return ju("theme",n,t),n}function qu(e){let t={};for(let{key:n,validate:r}of Dh){let i=r(Kn(n,e));if(i!==void 0)t[n]=i}return Object.keys(t).length>0?t:void 0}function j2(e,t){for(let{key:n,validate:r}of Dh){if(!(n in e))continue;let i=r(e[n]);if(i===void 0)continue;fo(n,i,t)}return qu(t)}var $u=new Map;function Th(e){return $2(e??H2(),"pi-web","config.json")}function GN(e){return $2(e??H2(),"pi-web-preferences.json")}function Ch(e){try{if(jN(Th(e)))return;let t=JSON.parse(q2(GN(e),"utf8"));Ah({firstPaint:{locale:Mu(t.firstPaint?.locale),fontScale:Lu(t.firstPaint?.fontScale)},preferences:t.preferences??{}},e)}catch{}}function zN(e){let t=xh(po("defaultThinkingLevel",e)),n=Eh(e),r=Sh(e),i=Nu(po("defaultProjectTrust",e)),o=qu(e);return{theme:aa(e),...t!==void 0?{defaultThinkingLevel:t}:{},...n!==void 0?{compaction:n}:{},...r!==void 0?{retry:r}:{},...i!==void 0?{defaultProjectTrust:i}:{},...o!==void 0?{piSettings:o}:{}}}function Zn(e){let t=e===void 0,n=e??"",r=t?$u.get(n):void 0;if(!t||r===void 0||r===null)try{let i=q2(Th(e),"utf8"),o=JSON.parse(i);r={firstPaint:{locale:Mu(o.firstPaint?.locale),fontScale:Lu(o.firstPaint?.fontScale)},preferences:o.preferences??{},theme:aa(e)},$u.set(n,r)}catch{if(r={firstPaint:{},preferences:{},theme:aa(e)},t)$u.set(n,r)}return{...r,...zN(e)}}function Ah(e,t){try{let n=Th(t);qN(HN(n),{recursive:!0});let r={firstPaint:e.firstPaint,preferences:e.preferences};if($N(n,JSON.stringify(r,null,2),"utf8"),t===void 0)$u.set("",e)}catch{}}function VN(e,t){return{...e,...t.locale!==void 0?{locale:Mu(t.locale)??e.locale}:{},...t.fontScale!==void 0?{fontScale:Lu(t.fontScale)??e.fontScale}:{}}}function XN(e,t){if(e===void 0)return Nu(po("defaultProjectTrust",t));let n=Nu(e);if(n===void 0)return;return ju("defaultProjectTrust",n,t),n}function kh(e,t){let n=Zn(t),r=VN(n.firstPaint,e),i=n.theme;if(e.theme!==void 0)i=W2(e.theme,t);let o=ju("defaultThinkingLevel",xh(e.defaultThinkingLevel),t),s=I2(e.compaction,t),a=M2(e.retry,t),c=XN(e.defaultProjectTrust,t),u=e.piSettings===void 0?qu(t):j2(e.piSettings,t),d={firstPaint:r,preferences:n.preferences,theme:i,defaultThinkingLevel:o,...s!==void 0?{compaction:s}:{},...a!==void 0?{retry:a}:{},...c!==void 0?{defaultProjectTrust:c}:{},...u!==void 0?{piSettings:u}:{}};return Ah(d,t),d}function Hu(e,t){let n=Zn(t),r={firstPaint:n.firstPaint,preferences:{...n.preferences,...e},theme:n.theme};return Ah(r,t),r}function Uh(e){let{preferences:t}=Zn(e);if(t.startScreenMessages!==void 0)return;Hu({startScreenMessages:A2},e)}import{DefaultResourceLoader as cL,getAgentDir as Y2}from"@earendil-works/pi-coding-agent";import{hasTrustRequiringProjectResources as KN,ProjectTrustStore as Rh}from"@earendil-works/pi-coding-agent";function Oe(e,t){if(!(Boolean(e)&&KN(e)))return{requiresTrust:!1,trusted:!0};return{requiresTrust:!0,trusted:new Rh(t).get(e)===!0}}function G2(e,t){let n=Oe(e,t);if(!n.requiresTrust)return n;return new Rh(t).set(e,!0),{requiresTrust:!0,trusted:!0}}function ho(e,t){if(!Oe(e,t).requiresTrust)return;let r=new Rh(t);return{resolveProjectTrust:async()=>r.get(e)===!0}}import{existsSync as ZN,readFileSync as YN}from"node:fs";import{homedir as JN}from"node:os";import{isAbsolute as QN,join as ca,relative as eL,resolve as z2,sep as tL}from"node:path";function nL({homeDir:e=JN(),xdgStateHome:t=process.env.XDG_STATE_HOME}={}){return t?ca(t,"skills",".skill-lock.json"):ca(e,".agents",".skill-lock.json")}function V2(e){try{let t=JSON.parse(YN(e,"utf8"));return t.skills&&typeof t.skills==="object"?t.skills:{}}catch{return{}}}function X2(e,t){let n=eL(z2(t),z2(e));return n!==""&&n!==".."&&!n.startsWith(`..${tL}`)&&!QN(n)}function rL(e,t){if(e[t])return e[t];let n=t.toLowerCase(),r=Object.keys(e).find((i)=>i.toLowerCase()===n);return r?e[r]:void 0}function iL(e,t){if(t!=="github")return e.replace(/\/$/,"");return e.replace(/^git\+/,"").replace(/^https?:\/\/github\.com\//,"").replace(/^git@github\.com:/,"").replace(/\.git$/,"").replace(/\/$/,"")}function oL(e,t){if(!e||e.includes("://")||e.startsWith("git@"))return;let n=e.split("/").filter(Boolean).map(encodeURIComponent).join("/");if(!n)return;return`https://skills.sh/${n}/${encodeURIComponent(t)}`}function sL(e,t){let n=typeof e.sourceType==="string"?e.sourceType:void 0,r=iL(e.source.trim(),n),i=typeof e.skillPath==="string"?e.skillPath:void 0,o=typeof e.ref==="string"?e.ref:void 0,s=t==="global"?e.skillFolderHash:e.computedHash;return{sourceType:n,source:r,skillPath:i,ref:o,versionHash:typeof s==="string"&&s?s:void 0}}function aL(e,t){let{sourceType:n,source:r,skillPath:i,versionHash:o,ref:s}=e,a=n==="github"&&/^[\w.-]+\/[\w.-]+$/.test(r);return Boolean(a&&i&&o&&(t==="global"||!s))}function K2(e,t,n){let r=rL(e,t);if(!r||typeof r.source!=="string"||!r.source.trim())return;let{sourceType:i,source:o,skillPath:s,ref:a,versionHash:c}=sL(r,n);if(!o)return;return{package:`${o}@${t}`,scope:n,source:o,sourceType:i,skillsShUrl:i==="local"?void 0:oL(o,t),...s&&{skillPath:s},...a&&{ref:a},...c&&{versionHash:c},canCheckForUpdates:aL({sourceType:i,source:o,skillPath:s,versionHash:c,ref:a},n)}}function Z2(e,{cwd:t,agentDir:n,globalLockPath:r=nL(),projectLockPath:i=ca(t,"skills-lock.json")}){let o=V2(r),s=V2(i),a=ca(n,"skills"),c=ca(t,".pi","skills");return e.map((u)=>{if(!ZN(u.filePath))return u;let d=X2(u.filePath,a)?K2(o,u.name,"global"):X2(u.filePath,c)?K2(s,u.name,"project"):void 0;return d?{...u,install:d}:u})}var uL=32,gi=new Map,Fh=new Map;async function cn(e,t){let n=t?.forceFresh??!1,r=e===""?Y2():e;if(!n){let s=gi.get(e);if(s)return{skills:[...s.skills.values()],diagnostics:s.diagnostics,projectResourcesLoaded:s.projectResourcesLoaded}}let i=Fh.get(e);if(i)return i;let o=lL(r,e);Fh.set(e,o);try{return await o}finally{Fh.delete(e)}}async function lL(e,t){let n=Y2(),r=new cL({cwd:e,agentDir:n});await r.reload(ho(e,n));let{skills:i,diagnostics:o}=r.getSkills(),s={skills:Z2(i,{cwd:e,agentDir:n}),diagnostics:o,projectResourcesLoaded:Oe(e,n).trusted},a=new Map;for(let c of s.skills)a.set(c.filePath,c);return gi.set(t,{skills:a,diagnostics:s.diagnostics,projectResourcesLoaded:s.projectResourcesLoaded,loadedAt:Date.now()}),dL(),s}function dL(){while(gi.size>uL){let e=null,t=1/0;for(let[n,r]of gi){if(n==="")continue;if(r.loadedAt<t)t=r.loadedAt,e=n}if(e===null)break;gi.delete(e)}}function J2(e,t,n){let r=gi.get(e);if(!r)return;let i=r.skills.get(t);if(!i){gi.delete(e);return}if(n.disableModelInvocation!==void 0)i.disableModelInvocation=n.disableModelInvocation}var Gu=null;function Q2(e){if(Gu)return;let t=(async()=>{for(let n of e)await Promise.allSettled([n()])})();Gu=t,t.then(()=>{Gu=null})}function _n(){return Gu??Promise.resolve()}var e1={port:31415};import{getAgentDir as ape}from"@earendil-works/pi-coding-agent";var Ph=(e,t,n)=>(r,i)=>{let o=-1;return s(0);async function s(a){if(a<=o)throw Error("next() called multiple times");o=a;let c,u=!1,d;if(e[a])d=e[a][0][0],r.req.routeIndex=a;else d=a===e.length&&i||void 0;if(d)try{c=await d(r,()=>s(a+1))}catch(f){if(f instanceof Error&&t)r.error=f,c=await t(f,r),u=!0;else throw f}else if(r.finalized===!1&&n)c=await n(r);if(c&&(r.finalized===!1||u))r.res=c;return r}};var t1=Symbol();var n1=(e,t)=>new Response(e,{headers:{"Content-Type":t.replace(/^[^;]+/,(r)=>r.toLowerCase())}}).formData();var r1=32,fL=1e4,zu=(e)=>("headers"in e),s1=async(e,t=Object.create(null))=>{let{all:n=!1,dot:r=!1}=t,s=(zu(e)?e.headers:e.raw.headers).get("Content-Type")?.split(";")[0].trim().toLowerCase();if(s==="multipart/form-data"||s==="application/x-www-form-urlencoded")return pL(e,{all:n,dot:r});return{}};async function pL(e,t){if(!zu(e)&&e.bodyCache.formData)return i1(await e.bodyCache.formData,t);let n=zu(e)?e.headers:e.raw.headers,r=await e.arrayBuffer(),i=n1(r,n.get("Content-Type")||"");if(!zu(e))e.bodyCache.formData=i;let o=await i;if(o)return i1(o,t);return{}}function i1(e,t){let n=Object.create(null),r={count:0};if(e.forEach((i,o)=>{if(!(t.all||o.endsWith("[]")))n[o]=i;else hL(n,o,i)}),t.dot)Object.entries(n).forEach(([i,o])=>{if(i.includes("."))gL(n,i,o,r),delete n[i]});return n}var hL=(e,t,n)=>{if(e[t]!==void 0)if(Array.isArray(e[t]))e[t].push(n);else e[t]=[e[t],n];else if(!t.endsWith("[]"))e[t]=n;else e[t]=[n]},gL=(e,t,n,r)=>{if(/(?:^|\.)__proto__\./.test(t))return;let i=e,o=t.split(".",r1+2);if(o.length>r1+1)o1();o.forEach((s,a)=>{if(a===o.length-1)i[s]=n;else{if(!i[s]||typeof i[s]!=="object"||Array.isArray(i[s])||i[s]instanceof File){if(r.count++>=fL)o1();i[s]=Object.create(null)}i=i[s]}})},o1=()=>{throw Error("Nesting limit exceeded")};mi();var h1=class{raw;#e;#t;routeIndex=0;path;bodyCache={};constructor(e,t="/",n=[[]]){this.raw=e,this.path=t,this.#t=n}param(e){return e?this.#n(e):this.#o()}#n(e){let t=this.#t[0][this.routeIndex]?.[1][e],n=this.#i(t);return n&&Ku(n)}#o(){let e={},t=Object.keys(this.#t[0][this.routeIndex]?.[1]??{});for(let n of t){let r=this.#i(this.#t[0][this.routeIndex][1][n]);if(r!==void 0)e[n]=Ku(r)}return e}#i(e){return this.#t[1]?this.#t[1][e]:e}query(e){return f1(this.url,e)}queries(e){return p1(this.url,e)}header(e){if(e)return this.raw.headers.get(e)??void 0;let t=Object.create(null);return this.raw.headers.forEach((n,r)=>{t[r]=n}),t}async parseBody(e){return s1(this,e)}#r=(e)=>{let{bodyCache:t,raw:n}=this,r=t[e];if(r)return r;for(let i in t)return t[i].then((o)=>{if(i==="json")o=JSON.stringify(o);return new Response(o)[e]()});return t[e]=n[e]()};json(){return this.#r("text").then((e)=>JSON.parse(e))}text(){return this.#r("text")}arrayBuffer(){return this.#r("arrayBuffer")}bytes(){return this.#r("arrayBuffer").then((e)=>new Uint8Array(e))}blob(){return this.#r("blob")}formData(){return this.#r("formData")}addValidatedData(e,t){(this.#e??={})[e]=t}valid(e){return this.#e?.[e]}get url(){return this.raw.url}get method(){return this.raw.method}get[t1](){return this.#t}get matchedRoutes(){return this.#t[0].map(([[,e]])=>e)}get routePath(){return this.#t[0].map(([[,e]])=>e)[this.routeIndex].path}};Bh();var vL="text/plain; charset=UTF-8",Wh=(e,t)=>({"Content-Type":e,...t}),ua=(e,t)=>new Response(e,t),jh=class{#e;#t;env={};#n;finalized=!1;error;#o;#i;#r;#c;#s;#a;#l;#d;#f;constructor(e,t){if(this.#e=e,t)this.#i=t.executionCtx,this.env=t.env,this.#a=t.notFoundHandler,this.#f=t.path,this.#d=t.matchResult}get req(){return this.#t??=new h1(this.#e,this.#f,this.#d),this.#t}get event(){if(this.#i&&"respondWith"in this.#i)return this.#i;else throw Error("This context has no FetchEvent")}get executionCtx(){if(this.#i)return this.#i;else throw Error("This context has no ExecutionContext")}get res(){return this.#r||=ua(null,{headers:this.#l??=new Headers})}set res(e){if(this.#r&&e){e=ua(e.body,e);for(let[t,n]of this.#r.headers.entries()){if(t==="content-type")continue;if(t==="set-cookie"){let r=this.#r.headers.getSetCookie();e.headers.delete("set-cookie");for(let i of r)e.headers.append("set-cookie",i)}else e.headers.set(t,n)}}this.#r=e,this.finalized=!0}render=(...e)=>(this.#s??=(t)=>this.html(t),this.#s(...e));setLayout=(e)=>this.#c=e;getLayout=()=>this.#c;setRenderer=(e)=>{this.#s=e};header=(e,t,n)=>{if(this.finalized)this.#r=ua(this.#r.body,this.#r);let r=this.#r?this.#r.headers:this.#l??=new Headers;if(t===void 0)r.delete(e);else if(n?.append)r.append(e,t);else r.set(e,t)};status=(e)=>{this.#o=e};set=(e,t)=>{this.#n??=new Map,this.#n.set(e,t)};get=(e)=>this.#n?this.#n.get(e):void 0;get var(){if(!this.#n)return{};return Object.fromEntries(this.#n)}#u(e,t,n){let r=this.#r?new Headers(this.#r.headers):this.#l;if(typeof t==="object"&&t.headers){r??=new Headers;for(let[o,s]of new Headers(t.headers))if(o==="set-cookie")r.append(o,s);else r.set(o,s)}if(n){if(!r){let o=0;for(let s in n)if(++o>1||typeof n[s]!=="string"){r=new Headers;break}}if(r)for(let o in n){let s=n[o];if(typeof s==="string")r.set(o,s);else{r.delete(o);for(let a of s)r.append(o,a)}}}let i=typeof t==="number"?t:t?.status??this.#o;return ua(e,{status:i,headers:r??n})}newResponse=(...e)=>this.#u(...e);body=(e,t,n)=>this.#u(e,t,n);text=(e,t,n)=>!this.#l&&!this.#o&&!t&&!n&&!this.finalized?new Response(e):this.#u(e,t,Wh(vL,n));json=(e,t,n)=>this.#u(JSON.stringify(e),t,Wh("application/json",n));html=(e,t,n)=>{let r=(i)=>this.#u(i,t,Wh("text/html; charset=UTF-8",n));return typeof e==="object"?Lh(e,g1.Stringify,!1,{}).then(r):r(e)};redirect=(e,t)=>{let n=String(e);return this.header("Location",!/[^\x00-\xFF]/.test(n)?n:encodeURI(n)),this.newResponse(null,t??302)};notFound=()=>(this.#a??=()=>ua(),this.#a(this))};Sr();qh();mi();var xL=(e)=>e.text("404 Not Found",404),v1=(e,t)=>{if("getResponse"in e){let n=e.getResponse();return t.newResponse(n.body,n)}return console.error(e),t.text("Internal Server Error",500)},x1=class e{get;post;put;delete;options;patch;query;all;on;use;router;getPath;_basePath="/";#e="/";routes=[];constructor(t={}){[...b1,y1].forEach((o)=>{this[o]=(s,...a)=>{if(typeof s==="string")this.#e=s;else this.#o(o,this.#e,s);return a.forEach((c)=>{this.#o(o,this.#e,c)}),this}}),this.on=(o,s,...a)=>{for(let c of[s].flat()){this.#e=c;for(let u of[o].flat())a.map((d)=>{this.#o(u.toUpperCase(),this.#e,d)})}return this},this.use=(o,...s)=>{if(typeof o==="string")this.#e=o;else this.#e="*",s.unshift(o);return s.forEach((a)=>{this.#o(Xe,this.#e,a)}),this};let{strict:r,...i}=t;Object.assign(this,i),this.getPath=r??!0?t.getPath??Nh:l1}#t(){let t=new e({router:this.router,getPath:this.getPath});return t.errorHandler=this.errorHandler,t.#n=this.#n,t.routes=this.routes,t}#n=xL;errorHandler=v1;route(t,n){let r=this.basePath(t);return n.routes.map((i)=>{let o;if(n.errorHandler===v1)o=i.handler;else o=async(s,a)=>(await Ph([],n.errorHandler)(s,()=>i.handler(s,a))).res,o[la]=i.handler;r.#o(i.method,i.path,o,i.basePath)}),this}basePath(t){let n=this.#t();return n._basePath=Er(this._basePath,t),n}onError=(t)=>(this.errorHandler=t,this);notFound=(t)=>(this.#n=t,this);mount(t,n,r){let i,o;if(r)if(typeof r==="function")o=r;else if(o=r.optionHandler,r.replaceRequest===!1)i=(c)=>c;else i=r.replaceRequest;let s=o?(c)=>{let u=o(c);return Array.isArray(u)?u:[u]}:(c)=>{let u=void 0;try{u=c.executionCtx}catch{}return[c.env,u]};i||=(()=>{let c=Er(this._basePath,t),u=c==="/"?0:c.length;return(d)=>{let f=new URL(d.url);return f.pathname=this.getPath(d).slice(u)||"/",new Request(f,d)}})();let a=async(c,u)=>{let d=await n(i(c.req.raw),...s(c));if(d)return d;await u()};return this.#o(Xe,Er(t,"*"),a),this}#o(t,n,r,i){t=t.toUpperCase(),n=Er(this._basePath,n);let o={basePath:i!==void 0?Er(this._basePath,i):this._basePath,path:n,method:t,handler:r};this.router.add(t,n,[r,o]),this.routes.push(o)}#i(t,n){if(t instanceof Error)return this.errorHandler(t,n);throw t}#r(t,n,r,i){if(i==="HEAD")return(async()=>new Response(null,await this.#r(t,n,r,"GET")))();let o=this.getPath(t,{env:r}),s=this.router.match(i,o),a=new jh(t,{path:o,matchResult:s,env:r,executionCtx:n,notFoundHandler:this.#n});if(s[0].length===1){let u;try{u=s[0][0][0][0](a,async()=>{a.res=await this.#n(a)})}catch(d){return this.#i(d,a)}return u instanceof Promise?u.then((d)=>d||(a.finalized?a.res:this.#n(a))).catch((d)=>this.#i(d,a)):u??this.#n(a)}let c=Ph(s[0],this.errorHandler,this.#n);return(async()=>{try{let u=await c(a);if(!u.finalized)throw Error("Context is not finalized. Did you forget to return a Response object or `await next()`?");return u.res}catch(u){return this.#i(u,a)}})()}fetch=(t,...n)=>this.#r(t,n[1],n[0],t.method);request=(t,n,r,i)=>{if(t instanceof Request)return this.fetch(n?new Request(t,n):t,r,i);return t=t.toString(),this.fetch(new Request(/^https?:\/\//.test(t)?t:`http://localhost${Er("/",t)}`,n),r,i)};fire=()=>{addEventListener("fetch",(t)=>{t.respondWith(this.#r(t.request,t,void 0,t.request.method))})}};Sr();mi();var et=()=>Object.create(null);Sr();var Ju=[];function $h(e,t){let n=this.buildAllMatchers(),r=(i,o)=>{let s=n[i]||n[Xe],a=s[2][o];if(a)return a;let c=o.match(s[0]);if(!c)return[[],Ju];let u=c.indexOf("",1);return[s[1][u],c]};return this.match=r,r(e,t)}var go="[^/]+",Cr=".*",Yn="(?:|/.*)",Tr=Symbol(),w1=new Set(".\\+*[^]$()");function wL(e,t){if(e.length===1)return t.length===1?e<t?-1:1:-1;if(t.length===1)return 1;if(e===Cr||e===Yn)return t===Yn?-1:1;else if(t===Cr||t===Yn)return-1;if(e===go)return 1;else if(t===go)return-1;return e.length===t.length?e<t?-1:1:t.length-e.length}var _1=class e{#e;#t;#n=et();insert(t,n,r,i,o){let s=this;for(let a=0,c=t.length;a<c;a++){let u=t[a],d=u.length===1?u==="*"?a===c-1?["","",Cr]:["","",go]:null:u==="/*"?["","",Yn]:u.match(/^\:([^\{\}]+)(?:\{(.+)\})?$/),f;if(d){let p=d[1],h=d[2]||go;if(p&&d[2]){if(h===".*")throw Tr;if(h=h.replace(/^\((?!\?:)(?=[^)]+\)$)/,"(?:"),/\((?!\?:)/.test(h))throw Tr;if(h.length===1&&w1.has(h))throw Tr}if(f=s.#n[h],!f){if(h!==Cr&&h!==Yn){for(let g in s.#n)if((h.length>1||g.length>1)&&g!==Cr&&g!==Yn)throw Tr}f=s.#n[h]=new e}if(p!=="")f.#t??=i.varIndex++,r.push([p,f.#t])}else if(f=s.#n[u],!f){for(let p in s.#n)if(p.length>1&&p!==Cr&&p!==Yn)throw Tr;f=s.#n[u]=new e}s=f}if(s.#e!==void 0)throw Tr;s.#e=o?-1:n}buildRegExpStr(){let n=Object.keys(this.#n).sort(wL).map((r)=>{let i=this.#n[r],o=i.buildRegExpStr();return o===""?"":(typeof i.#t==="number"?`(${r})@${i.#t}`:w1.has(r)?`\\${r}`:r)+o}).filter(Boolean);if(typeof this.#e==="number"&&this.#e!==-1)n.unshift(`#${this.#e}`);if(n.length===0)return"";if(n.length===1)return n[0];return"(?:"+n.join("|")+")"}};var Hh=class{#e={varIndex:0};#t=new _1;#n=0;paths=et();insert(e,t){if(t){this.#t.insert(e.split(""),0,[],this.#e,!0);return}let n=[],r=[],i=e;for(let s=0;;){let a=!1;if(i=i.replace(/\{[^}]+\}/g,(c)=>{let u=`@\\${s}`;return r[s]=[u,c],s++,a=!0,u}),!a)break}let o=i.match(/(?::[^\/]+)|(?:\/\*$)|./g)||[];for(let s=r.length-1;s>=0;s--){let[a]=r[s];for(let c=o.length-1;c>=0;c--)if(o[c].indexOf(a)!==-1){o[c]=o[c].replace(a,r[s][1]);break}}this.#t.insert(o,this.#n,n,this.#e,!1),this.paths[e]=[this.#n++,n]}buildRegExp(){let e=this.#t.buildRegExpStr();if(e==="")return[/^$/,[],[]];let t=0,n=[],r=[];return e=e.replace(/#(\d+)|@(\d+)|\.\*\$/g,(i,o,s)=>{if(o!==void 0)return n[++t]=Number(o),"$()";if(s!==void 0)return r[Number(s)]=++t,"";return""}),[new RegExp(`^${e}`),n,r]}};var D1=et();function E1(e){return D1[e]??=new RegExp(`^${e.replace(/\/:[^/{}]+(?:\{\[\^\/]\+})?(?=[/{]|$)|\/?\*$|([.\\+*[^\]$()?{}|])/g,(t,n)=>n?`\\${n}`:t==="/*"?Yn:t==="*"?Cr:`/:${go}`)}$`)}function Qu(e,t){for(let n of Object.keys(e).sort((r,i)=>i.length-r.length))if(E1(n).test(t))return[...e[n]];return}var el=class{name="RegExpRouter";#e;#t;#n;constructor(){this.#e={[Xe]:et()},this.#t={[Xe]:et()},this.#n={[Xe]:new Hh}}#o(e,t){try{this.#n[e].insert(t,!/\*|\/:/.test(t))}catch(n){throw n===Tr?new Yu(t):n}}add(e,t,n){let r=this.#e,i=this.#t;if(!r)throw Error(Zu);if(!r[e]){this.#n[e]=new Hh;for(let a of[r,i]){a[e]=et();for(let c in a[Xe])a[e][c]=[...a[Xe][c]],this.#o(e,c)}}if(t==="/*")t="*";let o=e===Xe?Object.keys(r):[e];if(/\*$/.test(t)){let a=E1(t);for(let c of o)if(!r[c][t])this.#o(c,t),r[c][t]=Qu(r[c],t)||Qu(r[Xe],t)||[];for(let c of[r,i])for(let u of o)for(let d in c[u])a.test(d)&&c[u][d].push([n,t]);return}let s=Xu(t)||[t];for(let a of s)for(let c of o){if(!i[c][a])this.#o(c,a),i[c][a]=Qu(r[c],a)||Qu(r[Xe],a)||[];i[c][a].push([n,a])}}match=$h;buildAllMatchers(){let e=et();for(let t of Object.keys(this.#t))e[t]=this.#i(t);return this.#e=this.#t=this.#n=void 0,D1=et(),e}#i(e){let t=this.#e[e],n=this.#t[e],r=this.#n[e],i=et(),o=[],[s,a,c]=r.buildRegExp();for(let u of[t,n])for(let d in u){let f=u[d],p=r.paths[d];if(!p){i[d]=[f.map(([h])=>[h,et()]),Ju];continue}o[p[0]]=f.map(([h,g])=>[h,r.paths[g][1].reduceRight((b,[v],y)=>(b[v]=c[p[1][y][1]],b),et())])}return[s,a.map((u)=>o[u]),i]}};Sr();Sr();var Gh=class{name="SmartRouter";#e=[];#t=[];constructor(e){this.#e=e.routers}add(e,t,n){if(!this.#t)throw Error(Zu);this.#t.push([e,t,n])}match(e,t){if(!this.#t)throw Error("Fatal error");let n=this.#e,r=this.#t,i=n.length,o=0,s;for(;o<i;o++){let a=n[o];try{for(let c=0,u=r.length;c<u;c++)a.add(...r[c]);s=a.match(e,t)}catch(c){if(c instanceof Yu)continue;throw c}this.match=a.match.bind(a),this.#e=[a],this.#t=void 0;break}if(o===i)throw Error("Fatal error");return this.name=`SmartRouter + ${this.activeRouter.name}`,s}get activeRouter(){if(this.#t||this.#e.length!==1)throw Error("No active router has been determined yet.");return this.#e[0]}};mi();Sr();mi();var zh=et(),_L=0,S1=class e{#e=[];#t=et();#n=[];#o;#i=zh;insert(t,n,r){let i=this,o=a1(n),s=new Set,a=0;for(let c of o){let u=o[++a],d=c1(c,u)||(u===void 0&&c&&c.indexOf("*")===c.length-1?c:null),f=Array.isArray(d),p=f?d[0]:d||c,h=i.#t[p]||=new e;if(d&&!h.#o)h.#o=d,i.#n.push(h);if(i=h,f)s.add(d[1])}i.#e.push({[t]:{handler:r,possibleKeys:[...s],score:++_L}})}#r(t,n,r,i,o){for(let s=0,a=n.#e.length;s<a;s++){let c=n.#e[s],u=c[r]||c[Xe];if(u){u.params=et(),t.push(u);for(let d=0,f=u.possibleKeys.length;d<f;d++){let p=u.possibleKeys[d];u.params[p]=o?.[p]&&!d?o[p]:i[p]??o?.[p]}}}}search(t,n){let r=[];this.#i=zh;let o=[this],s=Ih(n),a=[],c=s.length,u=null;for(let d=0;d<c;d++){let f=s[d],p=d===c-1,h=[];for(let b=0,v=o.length;b<v;b++){let y=o[b],x=y.#t[f];if(x)if(x.#i=y.#i,p){if(x.#t["*"])this.#r(r,x.#t["*"],t,y.#i);this.#r(r,x,t,y.#i)}else h.push(x);for(let m of y.#n){let w=m.#o,D=y.#i===zh?{}:{...y.#i};if(typeof w==="string"){if(w==="*"||f.startsWith(w.slice(0,-1))){if(this.#r(r,m,t,y.#i),w==="*")m.#i=D,h.push(m)}continue}let[,T,_]=w;if(!f&&_===!0)continue;if(_!==!0){if(!u){u=[];let M=n[0]==="/"?1:0;for(let P=0;P<c;P++)u[P]=M,M+=s[P].length+1}let A=n.slice(u[d]),S=_.exec(A);if(S){if(D[T]=S[0],this.#r(r,m,t,y.#i,D),S[0].length===A.length&&m.#t["*"])this.#r(r,m.#t["*"],t,y.#i,D);for(let M in m.#t){m.#i=D;let P=S[0].match(/\//g)?.length??0;(a[P]||=[]).push(m);break}continue}}if(_===!0||_.test(f))if(D[T]=f,p){if(this.#r(r,m,t,D,y.#i),m.#t["*"])this.#r(r,m.#t["*"],t,D,y.#i)}else m.#i=D,h.push(m)}}let g=a.shift();o=g?h.concat(g):h}if(r[1])r.sort((d,f)=>d.score-f.score);return[r.map(({handler:d,params:f})=>[d,f])]}};var Vh=class{name="TrieRouter";#e=new S1;add(e,t,n){for(let r of Xu(t)||[t])this.#e.insert(e,r,n)}match(e,t){return this.#e.search(e,t)}};var Xh=class extends x1{constructor(e={}){super(e);this.router=e.router??new Gh({routers:[new el,new Vh]})}};function Kh(){let e={};return e.promise=new Promise((t,n)=>{e.resolve=t,e.reject=n}),e}import{execFile as DL}from"node:child_process";import mo from"node:path";import{promisify as EL}from"node:util";var da=EL(DL),tl=1e4,T1=120000,fa=8388608;async function xt(e,t,n=fa,r=tl){let{stdout:i}=await da("git",["-C",e,...t],{timeout:r,maxBuffer:n,env:{...process.env,LC_ALL:"C"}});return i}async function Ut(e){try{return(await xt(e,["rev-parse","--show-toplevel"])).trim()||null}catch{return null}}function yi(e,t){let n=mo.relative(mo.resolve(e),mo.resolve(t));return n===""||!n.startsWith(`..${mo.sep}`)&&n!==".."&&!mo.isAbsolute(n)}function Ar(e){return e.split(mo.sep).join("/")}function nl(e){return e.includes(0)}import{lstat as OL,readFile as IL}from"node:fs/promises";import F1 from"node:path";var bi=262144,C1=10485760,A1=10485760,SL={png:"image/png",jpg:"image/jpeg",jpeg:"image/jpeg",gif:"image/gif",webp:"image/webp",svg:"image/svg+xml",bmp:"image/bmp",ico:"image/x-icon",avif:"image/avif"},TL={mp3:"audio/mpeg",wav:"audio/wav",ogg:"audio/ogg",oga:"audio/ogg",opus:"audio/ogg",m4a:"audio/mp4",aac:"audio/aac",flac:"audio/flac",weba:"audio/webm",webm:"audio/webm"},CL={pdf:"application/pdf",docx:"application/vnd.openxmlformats-officedocument.wordprocessingml.document"};function AL(e){return e.replace(/\\/g,"/").split("/").pop()??""}function yo(e){return AL(e).toLowerCase().split(".").pop()??""}function rl(e){return SL[yo(e)]??null}function il(e){return TL[yo(e)]??null}function ol(e){return CL[yo(e)]??null}function k1(e){let t=yo(e);if(t==="pdf"||t==="docx")return t;return null}function kL(e,t){return e==="R"||e==="C"||t==="R"||t==="C"}function U1(e){let t=e.split("\x00"),n=[];for(let r=0;r<t.length;r++){let i=t[r];if(!i||i.length<4||i[2]!==" ")continue;let o=i[0],s=i[1],a={path:i.slice(3),indexStatus:o,worktreeStatus:s};if(kL(o,s))a.originalPath=t[++r]||void 0;n.push(a)}return n}var UL=new Set(["DD","AU","UD","UA","DU","AA","UU"]);function sl(e){let t=`${e.indexStatus}${e.worktreeStatus}`;if(t==="??")return{status:"untracked",code:"U"};if(UL.has(t)||t.includes("U"))return{status:"conflict",code:"C"};if(t.includes("D"))return{status:"deleted",code:"D"};if(t.includes("R")||t.includes("C"))return{status:"renamed",code:"R"};if(t.includes("A"))return{status:"added",code:"A"};return{status:"modified",code:"M"}}import{lstat as RL,readFile as FL}from"node:fs/promises";import Zh from"node:path";async function Yh(e){let t=await xt(e,["status","--porcelain=v1","-z","--untracked-files=all"]);return U1(t)}async function R1(e,t,n){let i=Ar(Zh.relative(e,t))||".";try{let o=await xt(e,["diff","--no-color","--no-ext-diff","--numstat",...n,"--",i]),s=new Map;for(let a of o.split(/\r?\n/)){if(!a)continue;let[c,u,...d]=a.split("\t");if(d.length===0)continue;let f=Number(c),p=Number(u);if(!Number.isInteger(f)||!Number.isInteger(p))continue;let h=d.join("\t"),g=h.indexOf(" => ");if(g!==-1)h=h.slice(g+4);s.set(Ar(h.trim()),{additions:f,deletions:p})}return s}catch{return new Map}}async function PL(e){try{let t=await RL(e);if(!t.isFile()||t.size>bi)return 0;let n=await FL(e);if(nl(n)||n.length===0)return 0;let r=n.toString("utf8");return r.endsWith(`
|
|
261
261
|
`)?r.split(`
|
|
262
262
|
`).length-1:r.split(`
|
|
263
263
|
`).length}catch{return 0}}async function al(e){try{let n=(await xt(e,["rev-parse","--abbrev-ref","HEAD"])).trim()||null;if(!n||n==="HEAD")return{branch:n,upstream:null,ahead:0,behind:0,hasUpstream:!1};let r=null,i=!1;try{r=(await xt(e,["rev-parse","--abbrev-ref","--symbolic-full-name","@{u}"])).trim()||null,i=!!r}catch{return{branch:n,upstream:null,ahead:0,behind:0,hasUpstream:!1}}if(!i||!r)return{branch:n,upstream:null,ahead:0,behind:0,hasUpstream:!1};try{let s=(await xt(e,["rev-list","--left-right","--count","HEAD...@{u}"])).trim().split(/\s+/).map((u)=>Number(u)),a=Number.isInteger(s[0])?s[0]:0,c=Number.isInteger(s[1])?s[1]:0;return{branch:n,upstream:r,ahead:a,behind:c,hasUpstream:!0}}catch{return{branch:n,upstream:r,ahead:0,behind:0,hasUpstream:!0}}}catch{return{branch:null,upstream:null,ahead:0,behind:0,hasUpstream:!1}}}async function Jh(e){let t=await Ut(e);if(!t)return{isGitRepository:!1,repositoryRoot:null,files:[],additions:0,deletions:0,stagedFiles:[],stagedAdditions:0,stagedDeletions:0,branch:null,upstream:null,ahead:0,behind:0,hasUpstream:!1};let[n,r,i,o]=await Promise.all([Yh(t),R1(t,e,[]),R1(t,e,["--cached"]),al(t)]),s=[],a=[];for(let g of n){let b=Zh.resolve(t,g.path);if(!yi(e,b))continue;let v=sl(g),y={filePath:b,...v,indexStatus:g.indexStatus,worktreeStatus:g.worktreeStatus},x=g.indexStatus!==" "&&g.indexStatus!=="?",m=g.worktreeStatus!==" ";if(x)a.push({...y,lineStats:i.get(g.path)});if(m)s.push({...y,lineStats:r.get(g.path)})}let c=await Promise.all(s.map(async(g)=>g.status==="untracked"?{filePath:g.filePath,additions:await PL(g.filePath)}:{filePath:g.filePath,additions:0})),u=new Map(c.map((g)=>[g.filePath,g.additions])),d=[...u.values()].reduce((g,b)=>g+b,0);for(let g of s){if(g.status!=="untracked")continue;let b=u.get(g.filePath)??0;if(b>0)g.lineStats={additions:b,deletions:0}}let f=(g)=>{let b=0,v=0;for(let y of g.values())b+=y.additions,v+=y.deletions;return{additions:b,deletions:v}},p=f(r),h=f(i);return{isGitRepository:!0,repositoryRoot:t,files:s,additions:p.additions+d,deletions:p.deletions,stagedFiles:a,stagedAdditions:h.additions,stagedDeletions:h.deletions,...o}}function P1(e,t){let n=t.endsWith(`
|
|
@@ -284,7 +284,7 @@ ${e.summary}`,timestamp:fg(e.timestamp)};case"custom_message":return{role:"custo
|
|
|
284
284
|
`;MB(n,i,{encoding:"utf8",flag:"wx"}),t.flushed=!0,jt(e.sessionId,n)}import{realpathSync as NB}from"node:fs";import{resolve as LB}from"node:path";function Xt(){if(!globalThis.__piSessions){globalThis.__piSessions=new Map;let e=()=>globalThis.__piSessions?.forEach((t)=>t.destroy());process.once("exit",e),process.once("SIGINT",e),process.once("SIGTERM",e)}return globalThis.__piSessions}function s_(){if(!globalThis.__piStartLocks)globalThis.__piStartLocks=new Map;return globalThis.__piStartLocks}function a_(){if(!globalThis.__piStartLocksAt)globalThis.__piStartLocksAt=new Map;return globalThis.__piStartLocksAt}function _t(e){let t=LB(e);try{return NB(t)}catch{return t}}function c_(){if(!globalThis.__piStartingSessionCwds)globalThis.__piStartingSessionCwds=new Map;return globalThis.__piStartingSessionCwds}function u_(e){let t=c_(),n=_t(e);return t.set(n,(t.get(n)??0)+1),()=>{let r=(t.get(n)??1)-1;if(r>0)t.set(n,r);else t.delete(n)}}function Be(e){return Xt().get(e)}function yg(e){let t=_t(e);for(let[n,r]of Xt()){if(!r.isAlive())continue;if(_t(r.cwd)!==t)continue;if(r.hasMessages())continue;return n}return}function bg(e){let t=_t(e);if(c_().has(t))return!0;return Array.from(Xt().values()).some((n)=>_t(n.cwd)===t&&n.isRunning())}function vg(){let e=new Set,t=[];for(let n of Xt().values()){let r=_t(n.cwd);if(e.has(r))continue;e.add(r),t.push(r)}return t}function xg(e){let t=_t(e),n=Array.from(Xt().values()).filter((r)=>_t(r.cwd)===t);for(let r of n)r.destroy();return n.length}function xa(e,t={}){let n=[],r=[];for(let i of e){let o=Xt().get(i);if(!o)continue;if(t.skipRunning&&o.isRunning()){r.push(o.sessionId||i);continue}o.destroy(),n.push(o.sessionId||i)}return{restarted:n,skipped:r}}function wg(){let e=new Set;for(let[t,n]of Xt())if(n.isRunning())e.add(n.sessionId||t);return[...e]}function wo(){let e=[],t={},n={},r={},i={};for(let[o,s]of Xt())if(s.isRunning()){let a=s.sessionId||o;e.push(a);let c=s.getPhase();if(c){t[a]=c;let d=s.getPhaseStartedAt();if(d!==null)n[a]=d}else{let d=s.getRespondingStartedAt();if(d!==null)r[a]=d}let u=s.getBusyStartedAt();if(u!==null)i[a]=u}return{runningSessionIds:e,phases:t,phaseSince:n,respondingSince:r,busySince:i}}function l_(){if(!globalThis.__piRunningListeners)globalThis.__piRunningListeners=new Set;return globalThis.__piRunningListeners}function _g(e){let t=l_();return t.add(e),()=>{t.delete(e)}}var mg="";function Ft(){let e=l_(),t=wo();if(Qe("running-snapshot","change",`ids=[${t.runningSessionIds.join(",")}] phases=${JSON.stringify(t.phases)} since=${JSON.stringify(t.phaseSince)} responding=${JSON.stringify(t.respondingSince)}`),e.size===0){mg="";return}let n=JSON.stringify(t);if(n===mg)return;mg=n;for(let r of e)try{r(t)}catch{}}function d_(){if(!globalThis.__piAgentEventListeners)globalThis.__piAgentEventListeners=new Set;return globalThis.__piAgentEventListeners}function Dg(e){let t=d_();return t.add(e),()=>{t.delete(e)}}function Eg(e,t){for(let n of d_())try{n(e,t)}catch{}}async function f_(e,t){if(e.isPromptRunning()||e.inner.isStreaming||e.inner.isCompacting||e.inner.isBashRunning)throw Error("Cannot run a shell command while the session is busy");let n=e.inner.executeBash(t.command,void 0,{excludeFromContext:t.excludeFromContext});e.markBusyStart(!0),e.markLocalDrive(!0),e.setPhase({kind:"running_command"}),Ft();try{let r=await n;return o_(e.inner),r}finally{e.markLocalDrive(!1),e.resetIdleTimer(),qe(),e.emit({type:"prompt_done"}),e.setPhase(null),Ft()}}function p_(e){return e.inner.abortBash(),null}async function h_(e,t){if(e.inner.isBashRunning)throw Error("Cannot send a prompt while a shell command is running");let{images:n,streamingBehavior:r}=t;return Qe("ui-chain","2a sdk prompt",`${JSON.stringify(String(t.message).slice(0,80))} streamingBehavior=${r??"-"}`),e.setPromptRunning(!0),e.markBusyStart(!r),e.setPhase({kind:"waiting_model"}),e.touchPromptActivity(),Ft(),e.inner.prompt(t.message,{...n?.length?{images:n}:{},...r?{streamingBehavior:r}:{},source:"rpc"}).then(()=>{if(Qe("ui-chain","2c prompt done"),e.setPromptRunning(!1),e.resetIdleTimer(),!r)e.emit({type:"prompt_done"});Ft()}).catch((i)=>{if(Qe("ui-chain","2c prompt error",i instanceof Error?i.message:String(i)),e.setPromptRunning(!1),e.resetIdleTimer(),qe(),e.emit({type:"prompt_error",errorMessage:i instanceof Error?i.message:String(i)}),!r)e.emit({type:"prompt_done"});Ft()}),null}function BB(e){if(!e.inner.model)return;let n=e.inner.getContextUsage();if(!n||n.tokens==null||n.contextWindow<=0||n.tokens<=n.contextWindow)return n;let r=e.inner.sessionManager.buildSessionProjection(),i=e.inner.sessionManager.getBranch(),o=null;if(r.messages.forEach((u,d)=>{if(u.role!=="assistant")return;let f=u;if(!f.usage||f.stopReason==="aborted"||f.stopReason==="error")return;let p=f.usage;if((p.totalTokens??(p.input??0)+(p.output??0)+(p.cacheRead??0)+(p.cacheWrite??0))>0)o=d}),o==null)return{...n,tokens:null,percent:null};let s=-1,a=0;for(let u of r.entries){let d=a+u.messages.length;if(o<d){s=i.findIndex((f)=>f.id===u.sourceEntry.id);break}a=d}let c=-1;for(let u=i.length-1;u>=0;u--){let d=i[u].type;if(d==="context_edit"||d==="compaction"){c=u;break}}if(s>c)return n;return{...n,tokens:null,percent:null}}function g_(e){let t=e.inner.model,n=BB(e);return{sessionId:e.inner.sessionId,sessionFile:e.inner.sessionFile??"",isStreaming:e.inner.isStreaming,isPromptRunning:e.isPromptRunning(),isBashRunning:e.inner.isBashRunning,isCompacting:e.inner.isCompacting,autoCompactionEnabled:e.inner.autoCompactionEnabled,autoRetryEnabled:e.inner.autoRetryEnabled,model:t?{id:t.id,provider:t.provider}:void 0,messageCount:0,pendingMessageCount:e.inner.pendingMessageCount,queuedMessages:{steering:[...e.inner.getSteeringMessages()],followUp:[...e.inner.getFollowUpMessages()]},contextUsage:n?{percent:n.percent,contextWindow:n.contextWindow,tokens:n.tokens}:null,systemPrompt:e.inner.agent.state?.systemPrompt??"",thinkingLevel:e.inner.agent.state?.thinkingLevel??"off",extensionStatuses:e.getExtensionStatuses(),extensionWidgets:e.getExtensionWidgets()}}var WB=["read","bash","edit","write","grep","find","ls"];function Dl(e,t){if(t.length===0)return[];let n=new Set(WB),r=new Set(e.getActiveToolNames()),i=e.getAllTools().map((o)=>o.name).filter((o)=>!n.has(o)&&(o!=="codemode"||r.has("codemode")));return[...new Set([...t,...i])]}function m_(e){let t=e.inner.getAllTools(),n=new Set(e.inner.getActiveToolNames());return t.map((r)=>({name:r.name,description:r.description,active:n.has(r.name)}))}function y_(e){let t=[];for(let n of e.inner.extensionRunner.getRegisteredCommands())t.push({name:n.invocationName,description:n.description,source:"extension",sourceInfo:n.sourceInfo});for(let n of e.inner.promptTemplates)t.push({name:n.name,description:n.description,source:"prompt",sourceInfo:n.sourceInfo});for(let n of e.inner.resourceLoader.getSkills().skills)t.push({name:`skill:${n.name}`,description:n.description,source:"skill",sourceInfo:n.sourceInfo});return{commands:t}}function b_(e,t){let n=t.toolNames;return e.setForceEmptySystemPrompt(n.length===0),e.inner.setActiveToolsByName(Dl(e.inner,n)),e.applyForcedEmptySystemPrompt(),null}import{SessionManager as Tg}from"@earendil-works/pi-coding-agent";import{copyFileSync as jB,readdirSync as qB,statSync as $B,unlinkSync as HB}from"node:fs";import{basename as GB,dirname as wa,join as El}from"node:path";function Sl(e){let t=GB(e);return t.endsWith(".jsonl")?t.slice(0,-6):t}function Sg(e,t){if(!t||t.includes("/")||t.includes("\\")||t.includes(".."))return!1;let n=Sl(e);if(t===`${n}.jsonl`)return!1;return t.startsWith(`${n}.`)}function Tl(e){let t=Sl(e);try{return qB(wa(e)).filter((n)=>{if(!n.startsWith(`${t}.`)||n===`${t}.jsonl`)return!1;return Sg(e,n)}).map((n)=>{let r=$B(El(wa(e),n));return{name:n,size:r.size,modified:r.mtime.toISOString()}}).sort((n,r)=>n.name.localeCompare(r.name))}catch{return[]}}function v_(e,t,n){let r=Sl(e),i=Sl(t);for(let o of n){if(!Sg(e,o))continue;let s=o.slice(r.length);try{jB(El(wa(e),o),El(wa(t),`${i}${s}`))}catch{}}}function x_(e,t){for(let n of t){if(!Sg(e,n))continue;try{HB(El(wa(e),n))}catch{}}}async function w_(e,t){if(e.inner.isBashRunning)throw Error("Cannot fork while a shell command is running");let n=t.entryId,r=e.inner.sessionManager,i=e.inner.sessionFile;if(!r.isPersisted())return{cancelled:!0};if(!i)throw Error("Persisted session is missing a session file");let o=r.getEntry(n);if(!o)throw Error("Invalid entry ID for forking");let s=r.getSessionDir(),a;if(!o.parentId){let d=Tg.create(r.getCwd(),s);d.newSession({parentSession:i}),a=d.getSessionFile()}else{let f=Tg.open(i,s).createBranchedSession(o.parentId);if(!f)throw Error("Failed to create forked session");a=f}let c=Tg.open(a,s).getSessionId(),u=t.copyAuxFiles;if(Array.isArray(u)&&u.every((d)=>typeof d==="string"))v_(i,a,u);return jt(c,a),qe(),e.destroy(),{cancelled:!1,newSessionId:c}}async function __(e,t){if(e.inner.isBashRunning)throw Error("Cannot navigate while a shell command is running");return{cancelled:(await e.inner.navigateTree(t.targetId,{})).cancelled}}class _o extends Error{}function D_(e){return e instanceof _o||e instanceof Error&&/cannot be queued|while a shell command is running/.test(e.message)}async function zB(e,t){let{provider:n,modelId:r}=t,i=e.inner.modelRuntime.getModel(n,r);if(!i)await e.inner.modelRuntime.refresh({allowNetwork:!1}),i=e.inner.modelRuntime.getModel(n,r);if(!i)throw Error(`Model not found: ${n}/${r}`);return await e.inner.setModel(i),Ce(),qe(),{id:i.id,provider:i.provider}}async function VB(e,t){let n=t.level;if(e.inner.setThinkingLevel(n),n==="xhigh"&&e.inner.model?.compat?.thinkingFormat==="deepseek"&&e.inner.agent?.state)e.inner.agent.state.thinkingLevel="xhigh";return qe(),null}async function XB(e,t){try{return await e.withFinalRunningNotification(()=>e.inner.compact(t.customInstructions))}catch(n){if(n instanceof Error&&n.message.includes(Y1))throw Error(J1,{cause:n});throw n}finally{qe()}}async function KB(e,t){let n=t.name?.trim();if(!n)throw Error("Session name cannot be empty");return e.inner.setSessionName(n),qe(),null}async function ZB(e){return{...e.inner.getSessionStats(),sessionName:e.inner.sessionManager.getSessionName()}}async function YB(e,t){return e.inner.setAutoCompactionEnabled(t.enabled),null}async function JB(e,t){let n=t.images;try{await e.inner.steer(t.message,n?.length?n:void 0)}catch(r){if(D_(r))throw new _o(r instanceof Error?r.message:String(r));throw r}return null}async function QB(e,t){let n=t.images;return await e.inner.followUp(t.message,n?.length?n:void 0),null}async function e9(e){if(await e.waitForExtensionsBound(),e.clearExtensionUiState(),e.syncProjectTrust(),await e.inner.reload(),typeof e.inner.bindExtensions!=="function")e.inner.extensionRunner.setUIContext?.(va(e.extensionUiHost()),"rpc");return e.applyForcedEmptySystemPrompt(),Ce(),{success:!0}}var t9={prompt:h_,abort:(e)=>e.withFinalRunningNotification(()=>e.inner.abort()),get_state:g_,set_model:zB,fork:w_,navigate_tree:__,set_thinking_level:VB,compact:XB,set_session_name:KB,get_session_stats:ZB,get_last_assistant_text:(e)=>({text:e.inner.getLastAssistantText()??""}),set_auto_compaction:YB,clear_queue:(e)=>e.inner.clearQueue(),steer:JB,follow_up:QB,get_tools:m_,get_commands:y_,set_tools:b_,reload:e9,abort_compaction:(e)=>e.inner.abortCompaction(),extension_ui_response:(e,t)=>(e.resolveExtensionUiResponse(t),null),extension_ui_input:(e,t)=>(gg(e.extensionUiHost(),t.id,t.data),null),set_auto_retry:(e,t)=>(e.inner.setAutoRetryEnabled(t.enabled),null),bash:f_,abort_bash:p_};function E_(e){async function t(n,r){let i=t9[n];if(!i)throw Error(`Unsupported command: ${n}`);return i(e,r)}return{dispatch:t}}import{getAgentDir as l9}from"@earendil-works/pi-coding-agent";function n9(e){if(typeof e!=="string")return null;if(e.startsWith("image/"))return"image";return null}function r9(e){return e>=65&&e<=90||e>=97&&e<=122||e>=48&&e<=57||e===43||e===47}function i9(e){if(!e||e.length%4!==0)return null;let t=e.endsWith("==")?2:e.endsWith("=")?1:0,n=e.length-t;for(let r=0;r<n;r+=1)if(!r9(e.charCodeAt(r)))return null;for(let r=n;r<e.length;r+=1)if(e[r]!=="=")return null;return e.length/4*3-t}function o9(e){if(!e||typeof e!=="object")return!1;let t=e;if(typeof t.data!=="string"||typeof t.mimeType!=="string"||n9(t.mimeType)===null)return!1;let n=i9(t.data);return n!==null&&n<=10485760}function S_(e){if(e===void 0)return null;if(!Array.isArray(e))return"images must be an array";if(e.length>10)return"A message can include at most 10 attachments";for(let t of e){if(!t||typeof t!=="object"||t.type!=="image")return"Each attachment must use the image content block type";if(!o9(t))return"Each attachment must be valid base64 image data of 10MB or smaller"}return null}import{randomUUID as Cg}from"node:crypto";class Ag{deps;pendingUiResponses=new Map;pendingUiRequests=new Map;activeCustomUis=new Map;extensionStatuses=new Map;extensionWidgets=new Map;extensionsBound=!1;extensionBindingPromise=null;extensionBindingError=null;constructor(e){this.deps=e}beginBinding(e={}){this.ensureBound(e).catch((t)=>{console.error("[pi-web] failed to dispatch session_start to extensions:",t instanceof Error?t.message:t)})}async waitUntilReady(){await this.waitForBound()}shouldWaitForExtensions(e){return e==="prompt"||e==="steer"||e==="follow_up"||e==="get_commands"}uiDiagnostics(){return[...this.pendingUiRequests.values()]}cancelPendingUiResponses(){for(let e of this.pendingUiResponses.values())e.cancel();this.pendingUiResponses.clear(),this.pendingUiRequests.clear()}destroyUiState(){this.cancelPendingUiResponses();let e=this.uiHost();for(let t of Array.from(this.activeCustomUis.keys()))vo(e,t,void 0);this.pendingUiResponses.clear(),this.pendingUiRequests.clear()}clearUiState(){this.extensionStatuses.clear(),this.extensionWidgets.clear()}getPendingUiRequests(){return Array.from(this.pendingUiRequests.values())}hasPendingUiRequests(){return this.pendingUiRequests.size>0}resolveExtensionUiResponse(e){let t=this.pendingUiResponses.get(e.id);if(!t){Qe("ui-chain",`4b ui response DROPPED (no pending) id=${e.id.slice(0,8)}`,JSON.stringify(e).slice(0,200));return}Qe("ui-chain",`4 ui response id=${e.id.slice(0,8)}`,JSON.stringify(e).slice(0,200)),t.resolve(e)}getExtensionStatuses(){return Array.from(this.extensionStatuses,([e,t])=>({key:e,text:t}))}getExtensionWidgets(){return Array.from(this.extensionWidgets.values())}replayInto(e){for(let t of this.pendingUiRequests.values())e(t);for(let t of this.extensionWidgets.values())e({type:"extension_ui_request",id:Cg(),method:"setWidget",widgetKey:t.key,widgetLines:t.lines,widgetPlacement:t.placement});for(let[t,n]of this.extensionStatuses)e({type:"extension_ui_request",id:Cg(),method:"setStatus",statusKey:t,statusText:n})}uiHost(){return{activeCustomUis:this.activeCustomUis,pendingUiRequests:this.pendingUiRequests,pendingUiResponses:this.pendingUiResponses,extensionStatuses:this.extensionStatuses,extensionWidgets:this.extensionWidgets,emit:(e)=>this.deps.emit(e)}}ensureBound(e={}){if(e.forceEmptySystemPrompt)this.deps.markForceEmptySystemPrompt();if(this.extensionsBound)return this.deps.applyForcedEmptySystemPrompt(),Promise.resolve();if(this.extensionBindingPromise)return this.extensionBindingPromise;return this.extensionBindingError=null,this.extensionBindingPromise=(async()=>{if(!this.deps.isAlive())return;let t=va(this.uiHost());if(typeof this.deps.inner.bindExtensions==="function")await this.deps.inner.bindExtensions.call(this.deps.inner,{uiContext:t,mode:"rpc",commandContextActions:this.createCommandContextActions(),shutdownHandler:()=>this.deps.emit({type:"extension_ui_request",id:Cg(),method:"notify",notifyType:"warning",message:"Extension requested shutdown, but shutdown is not supported in Pi Web."}),onError:(r)=>this.deps.emit({type:"extension_error",extensionPath:r.extensionPath,event:r.event,error:r.error})});else this.deps.inner.extensionRunner.setUIContext?.(t,"rpc");this.extensionsBound=!0,this.deps.applyForcedEmptySystemPrompt(),console.log(`[pi-web] session_start dispatched to extensions for session ${this.deps.inner.sessionId}`)})().catch((t)=>{throw this.extensionBindingError=t,t}),this.extensionBindingPromise}async waitForBound(){try{if(this.extensionBindingPromise)await this.extensionBindingPromise}catch(e){throw e instanceof Error?e:Error(String(e))}if(this.extensionBindingError)throw this.extensionBindingError instanceof Error?this.extensionBindingError:Error(String(this.extensionBindingError))}createCommandContextActions(){return{waitForIdle:async()=>{await this.deps.inner.agent.waitForIdle?.()},newSession:async()=>({cancelled:!0}),fork:async()=>({cancelled:!0}),navigateTree:async(e,t)=>({cancelled:(await this.deps.inner.navigateTree(e,{summarize:t?.summarize})).cancelled}),switchSession:async()=>({cancelled:!0}),reload:async()=>{this.extensionStatuses.clear(),this.extensionWidgets.clear(),this.deps.syncProjectTrust(),await this.deps.inner.reload({beforeSessionStart:()=>{this.deps.inner.extensionRunner.setUIContext?.(va(this.uiHost()),"rpc")}}),this.deps.applyForcedEmptySystemPrompt()}}}}import{existsSync as s9}from"node:fs";var T_=(()=>{if(process.env.PI_WEB_E2E!=="1")return 600000;let e=Number(process.env.PI_SESSION_IDLE_MS);return Number.isFinite(e)&&e>0?e:600000})();class kg{idleTimer=null;deps;constructor(e){this.deps=e}reset(){if(this.idleTimer)clearTimeout(this.idleTimer);this.idleTimer=setTimeout(()=>{if(this.deps.isRunning()){if(this.deps.isPromptRunning()&&Date.now()-this.deps.getLastPromptActivityAt()>=T_){if(this.deps.isBashRunning()||this.deps.hasPendingUiRequests()){this.reset();return}this.settleStalledRun();return}this.reset();return}let e=this.deps.sessionFile();if(e&&!s9(e)){this.reset();return}this.deps.destroy()},T_)}stop(){if(this.idleTimer)clearTimeout(this.idleTimer);this.idleTimer=null}settleStalledRun(){try{this.deps.unlockStall()}catch{}this.deps.setPromptRunning(!1),this.deps.emit({type:"prompt_error",errorMessage:"Agent run stalled (no activity for 10 minutes) — reset to idle. "+"If this keeps happening, restart the pi-web server."}),this.deps.emit({type:"prompt_done"}),this.reset(),this.deps.notifyRunningChange()}}function C_(e){let t=e?.contentIndex;if(typeof t!=="number")return null;let n=e?.partial?.content?.[t];if(n?.type!=="toolCall")return null;let r=n;if(typeof r.id!=="string"||!r.id)return null;return{id:r.id,name:typeof r.name==="string"&&r.name?r.name:r.id}}var a9=120000,c9=5000,u9=new Set(["agent_start","message_update","message_end","tool_execution_start","tool_execution_update","tool_execution_end","bash_execution_update","auto_compaction_start","compaction_start"]);class Ug{phase=null;phaseStartedAt=null;respondingStartedAt=null;busyStartedAt=null;runningToolNames=new Map;promptRunning=!1;lastPromptActivityAt=0;externalActivityAt=null;localDriveActive=!1;localDriveEndedAt=null;getPhase(){return this.phase}getPhaseStartedAt(){return this.phaseStartedAt}getRespondingStartedAt(){return this.respondingStartedAt}getBusyStartedAt(){return this.busyStartedAt}isPromptRunning(){return this.promptRunning}isExternalActivityFresh(){return this.externalActivityAt!==null&&Date.now()-this.externalActivityAt<a9}setPromptRunning(e){if(this.promptRunning=e,e)this.localDriveActive=!0,this.localDriveEndedAt=null;else this.localDriveActive=!1,this.localDriveEndedAt=Date.now()}markLocalDrive(e){if(e)this.localDriveActive=!0,this.localDriveEndedAt=null;else this.localDriveActive=!1,this.localDriveEndedAt=Date.now()}isLocallyDriven(){return this.localDriveActive||this.localDriveEndedAt!==null&&Date.now()-this.localDriveEndedAt<c9}markBusyStart(e){if(this.busyStartedAt===null||e)this.busyStartedAt=Date.now()}touchPromptActivity(){this.lastPromptActivityAt=Date.now()}getLastPromptActivityAt(){return this.lastPromptActivityAt}setPhase(e){let t=(this.phase?.kind??null)!==(e?.kind??null);if(this.phase=e,!e){if(this.phaseStartedAt=null,this.busyStartedAt!==null)this.respondingStartedAt=Math.max(this.respondingStartedAt??Date.now(),this.busyStartedAt);return}this.respondingStartedAt=null;let n=t||this.phaseStartedAt===null?Date.now():this.phaseStartedAt;this.phaseStartedAt=this.busyStartedAt!==null?Math.max(n,this.busyStartedAt):n}updatePhaseFromEvent(e){if(!this.promptRunning&&!this.isLocallyDriven()&&u9.has(e.type))this.externalActivityAt=Date.now();switch(e.type){case"agent_start":this.onAgentStart();break;case"agent_end":this.onAgentEnd();break;case"message_update":this.onMessageUpdate(e);break;case"auto_retry_start":this.onAutoRetryStart(e);break;case"auto_retry_end":this.onAutoRetryEnd();break;case"tool_execution_start":this.onToolStart(e);break;case"tool_execution_end":this.onToolEnd(e);break}}onAgentStart(){this.setPhase({kind:"waiting_model"})}onAgentEnd(){this.runningToolNames.clear(),this.setPhase(null)}toolsOrFallback(e){return this.runningToolNames.size>0?{kind:"running_tools",tools:[...this.runningToolNames.entries()].map(([t,n])=>({id:t,name:n}))}:e}onMessageUpdate(e){let t=e.assistantMessageEvent,n=t?.type??"";if(n.startsWith("thinking")){this.setPhase(this.toolsOrFallback({kind:"thinking"}));return}if(n==="toolcall_start"||n==="toolcall_delta"){let r=C_(t);if(r)this.runningToolNames.set(r.id,r.name);this.syncRunningToolsPhase();return}if(n==="toolcall_end")return;this.setPhase(this.toolsOrFallback(null))}onAutoRetryStart(e){let t=e;this.setPhase({kind:"retrying",attempt:t.attempt??1,maxAttempts:t.maxAttempts??1,errorMessage:t.errorMessage})}onAutoRetryEnd(){this.setPhase(null)}onToolStart(e){let t=e.toolCallId;if(t)this.runningToolNames.set(t,e.toolName??t);this.syncRunningToolsPhase()}onToolEnd(e){let t=e.toolCallId;if(t)this.runningToolNames.delete(t);this.syncRunningToolsPhase()}syncRunningToolsPhase(){this.setPhase(this.runningToolNames.size>0?{kind:"running_tools",tools:[...this.runningToolNames.entries()].map(([e,t])=>({id:e,name:t}))}:{kind:"waiting_model"})}}var d9=1000,f9=new Set(["agent_start","agent_end","agent_settled","message_update","tool_execution_start","tool_execution_end","auto_compaction_start","auto_compaction_end","compaction_start","compaction_end","auto_retry_start","auto_retry_end"]),p9=new Set(["agent_end","agent_settled","auto_compaction_end","compaction_end"]),h9=new Set(["agent_start","message_update","message_end","tool_execution_start","tool_execution_update","tool_execution_end","bash_execution_update","agent_end","agent_settled","auto_compaction_start","auto_compaction_end","compaction_start","compaction_end","prompt_done","prompt_error"]);class Cl{inner;listeners=[];forceEmptySystemPrompt=!1;savedTransformContext;unsubscribe=null;idle=new kg({isRunning:()=>this.isRunning(),isPromptRunning:()=>this.phases.isPromptRunning(),getLastPromptActivityAt:()=>this.phases.getLastPromptActivityAt(),isBashRunning:()=>this.inner.isBashRunning,hasPendingUiRequests:()=>this.extensions.hasPendingUiRequests(),sessionFile:()=>this.sessionFile,setPromptRunning:(e)=>this.phases.setPromptRunning(e),emit:(e)=>this.emit(e),destroy:()=>this.destroy(),notifyRunningChange:()=>Ft(),unlockStall:()=>{this.cancelPendingUiResponses(),this.inner.abort().catch(()=>{})}});onDestroyCallback=null;bufferedEvents=[];_alive=!0;commands=null;phases=new Ug;extensions;constructor(e){this.inner=e;this.extensions=new Ag({inner:this.inner,isAlive:()=>this._alive,emit:(t)=>this.emit(t),markForceEmptySystemPrompt:()=>{this.forceEmptySystemPrompt=!0},applyForcedEmptySystemPrompt:()=>this.applyForcedEmptySystemPrompt(),syncProjectTrust:()=>this.syncProjectTrust()})}getCommands(){if(!this.commands)this.commands=E_(this.commandDeps());return this.commands}get sessionId(){return this.inner.sessionId}get sessionFile(){return this.inner.sessionFile??""}get cwd(){return this.inner.sessionManager.getCwd()}hasMessages(){return this.inner.sessionManager.getBranch().some((e)=>e.type==="message")}isAlive(){return this._alive}isRunning(){return this._alive&&(this.phases.isPromptRunning()||this.inner.isStreaming||this.inner.isCompacting||this.inner.isBashRunning||this.phases.isExternalActivityFresh())}start(){this.unsubscribe=this.inner.subscribe((e)=>{if(e.type==="agent_end")qe();if(p9.has(e.type))this.idle.reset();if(h9.has(e.type))this.phases.touchPromptActivity();if(this.phases.updatePhaseFromEvent(e),this.emit(e),f9.has(e.type))Ft()}),this.idle.reset(),Ft()}getPhase(){return this.phases.getPhase()}getPhaseStartedAt(){return this.phases.getPhaseStartedAt()}getRespondingStartedAt(){return this.phases.getRespondingStartedAt()}getBusyStartedAt(){return this.phases.getBusyStartedAt()}setPhase(e){this.phases.setPhase(e)}setForceEmptySystemPrompt(e){this.forceEmptySystemPrompt=e,this.applyForcedEmptySystemPrompt()}beginExtensionBinding(e={}){this.extensions.beginBinding(e)}async waitUntilReady(){await this.extensions.waitUntilReady()}shouldWaitForExtensions(e){return this.extensions.shouldWaitForExtensions(e)}async withFinalRunningNotification(e){try{return await e()}finally{this.idle.reset(),Ft()}}applyForcedEmptySystemPrompt(){let e=this.inner.agent;if(!e)return;if(this.forceEmptySystemPrompt){if(this.savedTransformContext!==void 0)return;let t=e.transformContext;this.savedTransformContext=t,e.transformContext=async(n,r)=>{let i=t?await t(n,r):n;return[{role:"system",content:"",timestamp:Date.now()},...i.filter((s)=>s.role!=="system")]}}else if(this.savedTransformContext!==void 0)e.transformContext=this.savedTransformContext,this.savedTransformContext=void 0}emit(e){if(Eg(this.sessionId,e),this.listeners.length===0){if(this.bufferedEvents.push(e),this.bufferedEvents.length>d9)this.bufferedEvents.shift();return}for(let t of this.listeners)t(e)}onEvent(e){let t=this.bufferedEvents;this.bufferedEvents=[];for(let n of t)e(n);return this.listeners.push(e),this.extensions.replayInto(e),()=>{let n=this.listeners.indexOf(e);if(n!==-1)this.listeners.splice(n,1)}}onDestroy(e){this.onDestroyCallback=e}commandDeps(){return{inner:this.inner,emit:(e)=>this.emit(e),setPhase:(e)=>this.setPhase(e),resetIdleTimer:()=>this.idle.reset(),isPromptRunning:()=>this.phases.isPromptRunning(),setPromptRunning:(e)=>{this.phases.setPromptRunning(e)},markBusyStart:(e)=>this.phases.markBusyStart(e),markLocalDrive:(e)=>this.phases.markLocalDrive(e),touchPromptActivity:()=>this.phases.touchPromptActivity(),setForceEmptySystemPrompt:(e)=>this.setForceEmptySystemPrompt(e),waitForExtensionsBound:()=>this.extensions.waitUntilReady(),withFinalRunningNotification:(e)=>this.withFinalRunningNotification(e),clearExtensionUiState:()=>this.extensions.clearUiState(),syncProjectTrust:()=>this.syncProjectTrust(),extensionUiHost:()=>this.extensions.uiHost(),resolveExtensionUiResponse:(e)=>this.extensions.resolveExtensionUiResponse(e),applyForcedEmptySystemPrompt:()=>this.applyForcedEmptySystemPrompt(),getExtensionStatuses:()=>this.extensions.getExtensionStatuses(),getExtensionWidgets:()=>this.extensions.getExtensionWidgets(),destroy:()=>this.destroy()}}async send(e){this.idle.reset();let t=e.type;if(this.shouldWaitForExtensions(t))await this.extensions.waitUntilReady();if(t==="prompt"||t==="steer"||t==="follow_up"){let n=S_(e.images);if(n)throw Error(n)}return this.getCommands().dispatch(t,e)}destroy(){if(!this._alive)return;if(this._alive=!1,this.idle.stop(),this.inner.isBashRunning)this.inner.abortBash();this.unsubscribe?.(),this.extensions.destroyUiState(),this.onDestroyCallback?.(),Ft()}cancelPendingUiResponses(){this.extensions.cancelPendingUiResponses()}diagnostics(){return{alive:this._alive,running:this.isRunning(),promptRunning:this.phases.isPromptRunning(),lastPromptActivityAt:this.phases.getLastPromptActivityAt(),lastPromptActivityAgeMs:Date.now()-this.phases.getLastPromptActivityAt(),bufferedEvents:this.bufferedEvents.length,pendingUiRequests:this.extensions.uiDiagnostics()}}getPendingUiRequests(){return this.extensions.getPendingUiRequests()}resolveExtensionUiResponse(e){this.extensions.resolveExtensionUiResponse(e)}getExtensionStatuses(){return this.extensions.getExtensionStatuses()}getExtensionWidgets(){return this.extensions.getExtensionWidgets()}syncProjectTrust(){let e=Oe(this.cwd,l9());this.inner.settingsManager.setProjectTrusted(e.trusted)}}async function A_(e,t,n){if(!t.model&&!t.thinkingLevel)return{modelDefaultChanged:!1};let r=!1;if(t.model&&n.model&&t.model.provider===n.model.provider&&t.model.modelId===n.model.modelId)e.setDefaultModelAndProvider(n.model.provider,n.model.modelId),r=!0;if(t.thinkingLevel&&(n.supportsThinking||n.thinkingLevel!=="off"))e.setDefaultThinkingLevel(n.thinkingLevel);return await e.flush(),{modelDefaultChanged:r}}function _9(e,t,n,r){return{...e?{requestedModel:e}:{},...t&&n?{defaultModel:{provider:t,modelId:n}}:{},...r?{thinkingLevel:r}:{}}}function D9(e){if(e===void 0)return;return e.length===0?[]:void 0}function E9(e,t){return{...e.model?{model:e.model}:{},...e.thinkingLevel?{thinkingLevel:e.thinkingLevel}:{},...e.scopedModels.length>0?{scopedModels:e.scopedModels}:{},...t!==void 0?{tools:t}:{}}}function S9(e,t){return{...e?{model:e}:{},...t?{thinkingLevel:t}:{}}}function T9(e,t,n){return{...e?{model:{provider:e.provider,modelId:e.id}}:{},thinkingLevel:t,supportsThinking:n}}var Rg=ze("rpc-start"),C9=60000;async function Rr(e,t,n,r={}){let{toolNames:i,initialModel:o,thinkingLevel:s}=r,a=Xt(),c=s_(),u=a_(),d=a.get(e);if(d?.isAlive())return{session:d,realSessionId:e};let f=c.get(e);if(f){let x=Date.now()-(u.get(e)??0);if(x<C9)return f;Rg(`stale lock sid=${e} age=${Math.round(x/1000)}s — restarting fresh`),c.delete(e),u.delete(e)}let p;if(t)p=k_.open(t,void 0);else{if(!n)throw Error("cwd is required for a new session");p=k_.create(n,void 0)}let h=p.getCwd(),g=u_(h),b=performance.now(),v=(x)=>Rg(`sid=${e} ${x} +${Math.round(performance.now()-b)}ms`);v("cold start begin");let y=(async()=>{w9();let x=x9();await pg(h,x);let m=D9(i),w=ho(h,x),D=[b9(),y9({}),v9()],T=r.fixtureExtensionPaths??ml(e);v("creating services");let _=await m9({cwd:h,agentDir:x,...w?{resourceLoaderReloadOptions:w}:{},resourceLoaderOptions:{extensionFactories:D,...T.length>0?{additionalExtensionPaths:T}:{}}}),A=await ll(_.modelRuntime,_.settingsManager.getEnabledModels()),S=_.settingsManager.getDefaultProvider(),M=_.settingsManager.getDefaultModel(),C=p.getBranch().some((F)=>F.type==="message")?{scopedModels:[...A.scopedModels]}:dl(A,_9(o,S,M,s));v("services ready — spawning agent session");let{session:L}=await g9({services:_,sessionManager:p,...E9(C,m)});if((await A_(_.settingsManager,S9(o,s),T9(L.model,L.thinkingLevel,L.supportsThinking()))).modelDefaultChanged)Ce();if(i&&i.length>0)L.setActiveToolsByName(Dl(L,i));let H=new Cl(L);if(i?.length===0)H.setForceEmptySystemPrompt(!0);H.start();let{sessionId:E,sessionFile:R}=L;if(R)jt(E,R);let k=a.get(E);if(k&&k!==H)throw Rg(`sid=${e} duplicate settle — destroying late instance`),H.destroy(),Error(`session ${e} already registered by a newer instance`);return H.onDestroy(()=>a.delete(E)),a.set(E,H),v("cold start done"),H.beginExtensionBinding({forceEmptySystemPrompt:i?.length===0}),{session:H,realSessionId:E}})().finally(()=>{c.delete(e),g()});return c.set(e,y),u.set(e,Date.now()),y.catch(()=>{}),y}var A9=5000,k9=60,U_=60000,Al=new Map,kl=new Set,Fg=new Map,_a=new Map;function U9(){let e=Zn().preferences.gitAutoFetchIntervalSec;return typeof e==="number"&&Number.isFinite(e)?e:k9}function R9(e){let t=Fg.get(e);if(t)return t;let n=Kh();Fg.set(e,n.promise);let r;return(async()=>{try{let i=await Promise.race([(async()=>{let o=await og(e);if(!o.ok)return{ok:!1,error:o.error};let s=await al(e);return{ok:!0,snapshot:{ahead:s.ahead,behind:s.behind,updatedAt:Date.now()}}})(),new Promise((o,s)=>{r=setTimeout(()=>s(Error(`git fetch timeout after ${U_/1000}s`)),U_),r.unref?.()})]);n.resolve(i)}catch(i){n.resolve({ok:!1,error:i instanceof Error?i.message:String(i)})}finally{if(r)clearTimeout(r);Fg.delete(e)}})(),n.promise}async function R_(e){let t=new Map;for(let n of e){let r=null;try{r=await Ut(n)}catch{r=null}if(!r)continue;let i=t.get(r);if(i)i.push(n);else t.set(r,[n])}return t}async function F_(e,t){await Promise.all(Array.from(e,async([n,r])=>{let i=await R9(n);if(!i.ok){console.warn(`[git-autofetch] fetch failed for ${n}: ${i.error}`);return}for(let o of r)Al.set(_t(o),i.snapshot);_a.set(n,t)}))}function F9(e){let t=new Set(e);for(let n of[...kl])if(!e.includes(n))kl.delete(n);for(let n of[...Al.keys()])if(!t.has(n))Al.delete(n)}function P9(e){for(let t of[..._a.keys()])if(!e.has(t))_a.delete(t)}async function O9(e,t){let n=e.filter((i)=>!kl.has(i));if(n.length===0)return;let r=await R_(n);await F_(r,t);for(let i of n)kl.add(i)}async function I9(e,t,n){let r=new Map;for(let[i,o]of e){let s=_a.get(i)??0;if(t-s<n*1000)continue;r.set(i,o)}if(r.size===0)return;await F_(r,t)}async function M9(e=Date.now()){let t=vg();if(F9(t),t.length===0){_a.clear();return}let n=U9(),r=await R_(t);if(P9(r),n<=0){await O9(t,e);return}await I9(r,e,n)}function P_(e){return Al.get(_t(e))??null}function O_(){setInterval(()=>{M9()},A9).unref()}import{isIP as I_}from"node:net";function M_(e){return(e.startsWith("[")&&e.endsWith("]")?e.slice(1,-1):e).toLowerCase().replace(/\.$/,"")}function N_(e){if(!e||/[\s/@\\]/.test(e))return null;try{let t=new URL(`http://${e}`);if(t.username||t.password||t.pathname!=="/"||t.search||t.hash)return null;return M_(t.hostname)}catch{return null}}function N9(e){let t=e?.trim();if(!t)return null;return I_(t)?M_(t):N_(t)}function L9(e){return e==="localhost"||e.endsWith(".localhost")}function L_(){return[process.env.PI_WEB_HOSTNAME,...process.env.PI_WEB_ALLOWED_HOSTS?.split(",")??[]].filter((e)=>Boolean(e?.trim()))}function B_(e){try{return new URL(e).origin}catch{return null}}function B9(e){let t=new URL(e.url),n=e.headers.get("host");return n?B_(`${t.protocol}//${n}`):null}function W9(e){if(e.method!=="GET"||e.headers.get("sec-fetch-mode")!=="navigate"||e.headers.get("sec-fetch-dest")!=="document"||e.headers.get("sec-fetch-user")!=="?1")return!1;try{return/^\/api\/sessions\/[^/]+\/export$/.test(new URL(e.url).pathname)}catch{return!1}}function Pg(e,t=L_()){let n=e.headers.get("host"),r=n?N_(n):null;if(!r)return!1;if(L9(r)||I_(r))return!0;return t.some((i)=>N9(i)===r)}function j9(e){let t=e.headers.get("origin");if(e.headers.get("sec-fetch-site")==="cross-site")return!1;if(!t)return!0;let r=B9(e);return r!==null&&B_(t)===r}function q9(e){return e.headers.has("origin")||e.headers.has("sec-fetch-site")}function Pt(e,t=L_()){if(!Pg(e,t))return!1;if(W9(e))return!0;return!q9(e)||j9(e)}function Fr(e){let t=e.headers.get("content-type")?.split(";",1)[0]?.trim().toLowerCase();return t==="application/json"||Boolean(t?.startsWith("application/")&&t.endsWith("+json"))}import{createHash as $9,timingSafeEqual as H9}from"node:crypto";var G9="pi";function W_(e){return $9("sha256").update(e,"utf8").digest()}function j_(e,t){return H9(W_(e),W_(t))}function Da(e=process.env.PI_WEB_PASSWORD){return typeof e==="string"&&e.length>0}function Ul(e,t=process.env.PI_WEB_PASSWORD){if(!Da(t)||!e)return!1;let n=/^Basic\s+(\S+)$/i.exec(e);if(!n)return!1;let r;try{let u=Buffer.from(n[1],"base64");if(u.toString("base64")!==n[1])return!1;r=new TextDecoder("utf-8",{fatal:!0}).decode(u)}catch{return!1}let i=r.indexOf(":");if(i===-1)return!1;let o=r.slice(0,i),s=r.slice(i+1),a=j_(o,G9),c=j_(s,t);return a&&c}var q_=ze("mount"),z9=["GET","POST","PUT","PATCH","DELETE"];function Y(e,t,n){let r=t.split("/").filter(Boolean),i=[],o=new Map;for(let a of r){let c=a.match(/^\[\.\.\.(.+)\]$/),u=a.match(/^\[(.+)\]$/);if(c)i.push(`:${c[1]}{.+}`),o.set(c[1],{hono:c[1],catchAll:!0});else if(u)i.push(`:${u[1]}`),o.set(u[1],{hono:u[1],catchAll:!1});else i.push(a)}let s=`/${i.join("/")}`;for(let a of z9){let c=n[a];if(typeof c!=="function")continue;let u=c;e.on(a,s,async(d)=>{let f=performance.now();q_(`${a} ${d.req.path}`,"received");let p={};for(let[g,{hono:b,catchAll:v}]of o)if(v){let y=d.req.param(b)??"";p[g]=y===""?[]:y.split("/")}else p[g]=d.req.param(b)??"";let h=await u(d.req.raw,{params:Promise.resolve(p)});return q_(`${a} ${d.req.path}`,`${h.status} ${Math.round(performance.now()-f)}ms done`),h})}}var Mg={};Z(Mg,{GET:()=>t6});import{tmpdir as Q9}from"node:os";import{Readable as e6}from"node:stream";import{constants as Og}from"node:fs";import{lstat as V9,open as X9}from"node:fs/promises";import{basename as K9,dirname as Z9,resolve as $_}from"node:path";var Rl=5242880;function H_(e,t){let n=$_(e);if(Z9(n)!==$_(t))return null;if(!/^pi-bash-[A-Za-z0-9_-]+\.log$/.test(K9(n)))return null;return n}async function Ig(e){if(!(await V9(e)).isFile())throw Error("Bash output path is not a regular file");let n=typeof Og.O_NOFOLLOW==="number"?Og.O_NOFOLLOW:0,r=await X9(e,Og.O_RDONLY|n);try{let i=await r.stat();if(!i.isFile())throw Error("Bash output path is not a regular file");return{handle:r,fileInfo:i}}catch(i){throw await r.close(),i}}async function G_(e,t=Rl){let{handle:n,fileInfo:r}=await Ig(e);try{if(r.size>t)return{tooLarge:!0,size:r.size};let i=Buffer.alloc(r.size),o=0;while(o<i.length){let s=await n.read(i,o,i.length-o,o);if(s.bytesRead===0)break;o+=s.bytesRead}return{tooLarge:!1,content:i.subarray(0,o).toString("utf8"),size:o}}finally{await n.close()}}var Y9=/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;function z_(e){return!!e&&Y9.test(e)}function V_(e,t){return t.some((n)=>n.type==="message"&&n.message.role==="bashExecution"&&n.message.fullOutputPath===e)}async function X_(e,t){if(!z_(t))return!1;try{let n=await De(t);if(!n)return!1;return V_(e,xl(n))}catch{return!1}}async function t6(e,{params:t}){let{id:n}=await t,r=null,i=!1;try{let s=new URL(e.url);r=s.searchParams.get("path"),i=s.searchParams.get("download")==="1"}catch{return Response.json({error:"invalid url"},{status:400})}if(!r)return Response.json({error:"path required"},{status:400});let o=H_(r,Q9());if(!o)return Response.json({error:"invalid path"},{status:400});if(!await X_(o,n))return Response.json({error:"forbidden"},{status:403});try{if(i){let{handle:a}=await Ig(o),c=e6.toWeb(a.createReadStream());return new Response(c,{headers:{"Content-Type":"text/plain; charset=utf-8","Content-Disposition":'attachment; filename="bash-output.log"',"Cache-Control":"no-store"}})}let s=await G_(o);if(s.tooLarge)return Response.json({error:`Full output is too large to display (limit ${Rl} bytes)`,data:{size:s.size,maxBytes:Rl}},{status:413});return Response.json({success:!0,data:{output:s.content}})}catch{return Response.json({error:"full output unavailable"},{status:404})}}var Ng={};Z(Ng,{GET:()=>n6});async function n6(e,{params:t}){let{id:n}=await t,r=Be(n);if(!r?.isAlive())return Response.json({error:"Session not found or not alive"},{status:404});return Response.json({success:!0,data:r.diagnostics()})}var Gg={};Z(Gg,{GET:()=>W6,POST:()=>B6,sendWithDeferredModelSwitch:()=>Hg,setFakeBusySession:()=>To});import{resolve as r6}from"node:path";var i6="piE2eFixtureDir",o6="piE2eFixtureDir";function Lg(e){return r6(process.cwd(),e)}function s6(e){if(!e)return{};let t={};for(let n of e.split(";")){let r=n.indexOf("=");if(r===-1)continue;t[n.slice(0,r).trim()]=n.slice(r+1).trim()}return t}function ae(e){let t=s6(e.headers.get("cookie"))[i6];if(t)try{return Lg(decodeURIComponent(t))}catch{return Lg(t)}let n=new URL(e.url).searchParams.get(o6);return n?Lg(n):void 0}Eo();import{mkdir as g6,readFile as m6,rename as y6,writeFile as b6}from"node:fs/promises";import{dirname as v6,join as x6}from"node:path";import{getAgentDir as w6}from"@earendil-works/pi-coding-agent";var _6=[{name:"readonly",tools:["read","grep","find","ls"],description:{en:"Read-only tools (read/grep/find/ls)","zh-CN":"仅只读工具(read/grep/find/ls)"}},{name:"full",tools:["bash","read","edit","write","grep","find","ls"],description:{en:"All built-in tools enabled (except codemode)","zh-CN":"内置工具全开(codemode除外)"}},{name:"codemode",tools:["codemode"],description:{en:"Codemode only","zh-CN":"仅激活codemode"}}],D6=new Set(["off","default"]),Z_=_6;function Y_(){return x6(w6(),"pi-web","tool-presets.json")}function Bg(e){if(!Array.isArray(e))return null;let t=new Set,n=[];for(let r of e){if(typeof r!=="object"||r===null)return null;let{name:i,tools:o,description:s}=r;if(typeof i!=="string"||i.trim().length===0)return null;let a=i.trim();if(t.has(a))return null;if(!Array.isArray(o)||o.some((u)=>typeof u!=="string"||u.trim()===""))return null;t.add(a);let c=E6(s);n.push({name:a,tools:o.map((u)=>u.trim()),...c?{description:c}:{}})}return n}function E6(e){if(typeof e==="string"){let r=e.trim();return r.length>0?r:void 0}if(typeof e!=="object"||e===null||Array.isArray(e))return;let t=e,n={};for(let r of["en","zh-CN"]){let i=t[r];if(typeof i==="string"&&i.trim().length>0)n[r]=i.trim()}if(Object.keys(n).length===0)return;return n}function J_(e){return e.filter((t)=>!D6.has(t.name))}async function So(){try{let e=await m6(Y_(),"utf8"),t=Bg(JSON.parse(e));return t?{presets:J_(t),exists:!0}:{presets:Z_,exists:!1}}catch{return{presets:Z_,exists:!1}}}async function Q_(e){let t=Y_();await g6(v6(t),{recursive:!0});let n=`${t}.tmp`;await b6(n,`${JSON.stringify(J_(e),null,2)}
|
|
285
285
|
`,"utf8"),await y6(n,t)}var S6=".pi-web.json";function Pl(e){return e+S6}function Ol(e){let t=Dt(Pl(e));return t?.version===1?t:null}function eD(e,t){un(Pl(e),t)}async function Il(e,t){let r=Ol(t)?.toolPreset;if(!r||typeof r!=="string")return;try{let{presets:i}=await So(),o=i.find((s)=>s.name===r);if(!o)return;await e.send({type:"set_tools",toolNames:[...o.tools]})}catch(i){console.warn(`[sidecar] replay toolPreset failed for ${t}:`,i)}}import{randomUUID as R6}from"node:crypto";import{existsSync as F6}from"node:fs";import{readdirSync as A6}from"node:fs";import{homedir as iD}from"node:os";import Ml from"node:path";import{realpathSync as tD}from"node:fs";import Wg from"node:path";var T6=/^[a-zA-Z]:[\\/]/;function nD(e){return T6.test(e)||e.startsWith("\\\\")||e.startsWith("//")}function C6(e,t){for(let n of t){let r=nD(e)||nD(n),i=r?Wg.win32:Wg,o=r?"\\":Wg.sep,s=i.resolve(e),a=i.resolve(n),c=r?s.toLowerCase():s,u=r?a.toLowerCase():a,d=u.endsWith(o)?u:u+o;if(c===u||c.startsWith(d))return!0}return!1}function rD(e,t){let n;try{n=tD(e)}catch{return!1}let r=new Set;for(let i of t)try{r.add(tD(i))}catch{}return C6(n,r)}var k6=5000,U6=/^[a-zA-Z]:[\\/]/;function Ie(e){return U6.test(e)||e.startsWith("\\\\")||e.startsWith("//")}async function oe(){let e=Date.now(),t=globalThis.__piAllowedRootsCache;if(t&&t.expiresAt>e)return t.roots;let n=await Ur(),r=new Set;for(let i of n){if(i.cwd)r.add(Ke(i.cwd));if(i.projectRoot)r.add(Ke(i.projectRoot))}try{for(let i of A6(iD()))if(/^pi-cwd-\d{8}$/.test(i))r.add(Ke(Ml.join(iD(),i)))}catch{}for(let i of cg())r.add(i);return globalThis.__piAllowedRootsCache={roots:r,expiresAt:e+k6},r}function Re(e,t){for(let n of t){let r=Ie(e)||Ie(n),i=r?Ml.win32:Ml,o=r?"\\":Ml.sep,s=i.resolve(e),a=i.resolve(n),c=r?s.toLowerCase():s,u=r?a.toLowerCase():a,d=u.endsWith(o)?u:u+o;if(c===u||c.startsWith(d))return!0}return!1}function ce(e,t){return rD(e,t)}var P6=new Set(["off","minimal","low","medium","high","xhigh","max"]);function O6(e){if(e===void 0)return;if(typeof e==="string"&&P6.has(e))return e;throw Error(`Invalid thinking level: ${String(e)}`)}function jg(e){if(!e||e.id==="unknown"||e.provider==="unknown")return null;return{provider:e.provider,modelId:e.id}}async function I6(e,t,{provider:n,modelId:r,thinkingLevel:i}){if(n&&r)try{await e.send({type:"set_model",provider:n,modelId:r})}catch(o){console.error(`[api] set_model on reused session ${t} failed:`,o)}if(i)try{await e.send({type:"set_thinking_level",level:i})}catch(o){console.error(`[api] set_thinking_level on reused session ${t} failed:`,o)}}async function M6(e,t){let n=yg(e);if(!n)return;let r=Be(n);if(!r?.isAlive())return;await I6(r,n,t);let i=await r.send({type:"get_state"});return Response.json({success:!0,sessionId:n,data:null,model:jg(i.model),thinkingLevel:i.thinkingLevel})}function N6(e,{provider:t,modelId:n,thinkingLevel:r},i){return{...i?{toolNames:i}:{},...t&&n?{initialModel:{provider:t,modelId:n}}:{},...r?{thinkingLevel:r}:{},...e?{fixtureExtensionPaths:ma(e)}:{}}}async function L6(e,{provider:t,modelId:n},r,i){if(t&&n&&r!=="ensure_session"&&(i.model?.provider!==t||i.model?.id!==n))await e.send({type:"set_model",provider:t,modelId:n})}async function oD(e,t){let{cwd:n,...r}=e;if(!n||typeof n!=="string")return Response.json({error:"cwd is required"},{status:400});if(!F6(n))return Response.json({error:`Directory does not exist: ${n}`},{status:400});let{provider:i,modelId:o,toolNames:s,thinkingLevel:a,...c}=r;if(i&&!o||!i&&o)throw Error("provider and modelId must be provided together");let u={provider:i,modelId:o,thinkingLevel:O6(a)};if(c.type==="ensure_session"){let b=await M6(n,u);if(b)return b}let d=`__new__${R6()}`,{session:f,realSessionId:p}=await Rr(d,"",n,N6(t,u,s));wt(n),qe();let h=await f.send({type:"get_state"});if(await L6(f,u,c.type,h),c.type==="ensure_session")return Response.json({success:!0,sessionId:p,data:null,model:jg(h.model),thinkingLevel:h.thinkingLevel});let g=await f.send(c);return Response.json({success:!0,sessionId:p,data:g,model:jg(h.model),thinkingLevel:h.thinkingLevel})}var Ea=ze("oom-debug"),qg=ze("oom-stress");async function sD(e){Ea("oomDebugHandler called",`session ${e}`);let t=30,n=Be(e);if(!n?.isAlive())return Ea("session not alive or not found",`session ${e}`),Response.json({error:"Session not found"},{status:404});return(async()=>{To(e,!0);try{let r=(o)=>{n.emit(o)};r({type:"agent_start"}),await new Promise((o)=>setTimeout(o,t*1000));let i=`✅ OOM debug: fake response after ${t}s wait.`;r({type:"message_start",message:{role:"assistant",content:[]}}),r({type:"message_update",message:{role:"assistant",content:[{type:"text",text:i}]}}),r({type:"message_end",message:{role:"assistant",content:[{type:"text",text:i}]}}),r({type:"agent_end"})}finally{To(e,!1)}})(),Response.json({success:!0,data:null})}async function aD(e){qg("oomStressHandler called",`session ${e}`);let t=5,n=Be(e);if(!n?.isAlive())return Response.json({error:"Session not found"},{status:404});return(async()=>{To(e,!0);try{let r=(d)=>{n.emit(d)};r({type:"agent_start"}),await new Promise((d)=>setTimeout(d,t*1000)),r({type:"message_start",message:{role:"assistant",content:[]}}),r({type:"message_update",assistantMessageEvent:{type:"thinking_start",contentIndex:0}});let i=400,o=500,s=80,a=[];for(let d=0;d<i;d++){let f=`Thinking step ${d+1}: ${"x".repeat(o-40)}
|
|
286
286
|
`;a.push(f),r({type:"message_update",assistantMessageEvent:{type:"thinking_delta",contentIndex:0,delta:f}}),await new Promise((p)=>setTimeout(p,s))}let c=a.join("");r({type:"message_update",assistantMessageEvent:{type:"thinking_end",contentIndex:0,content:c}});let u=`
|
|
287
|
-
Done. Streamed ${i} thinking chunks (${c.length} chars).`;r({type:"message_update",assistantMessageEvent:{type:"text_start",contentIndex:1}}),r({type:"message_update",assistantMessageEvent:{type:"text_delta",contentIndex:1,delta:u}}),r({type:"message_update",assistantMessageEvent:{type:"text_end",contentIndex:1,content:u}}),r({type:"message_end",message:{role:"assistant",content:[{type:"thinking",thinking:c},{type:"text",text:u}]}}),r({type:"agent_end"})}finally{To(e,!1)}})(),Response.json({success:!0,data:null})}var $g=new Set;function To(e,t){if(t)$g.add(e);else $g.delete(e)}async function B6(e,{params:t}){let{id:n}=await t;try{let r=await e.json();if(Ea(`POST /api/agent/${n}`,`type=${r.type} message=${JSON.stringify(r.message)} keys=${Object.keys(r).join(",")}`),r.type==="prompt"&&r.message==="oom debug")return Ea("INTERCEPTED","routing to oomDebugHandler"),sD(n);if(r.type==="prompt"&&r.message==="oom stress")return qg("INTERCEPTED","routing to oomStressHandler"),aD(n);if(n==="new")return oD(r,ae(e));let i=Be(n);if(i?.isAlive()){let c=await Hg(i,r);return Response.json({success:!0,data:c})}let o=await De(n);if(!o)return Response.json({error:"Session not found"},{status:404});let{session:s}=await Rr(n,o,void 0);await Il(s,o);let a=await Hg(s,r);return Response.json({success:!0,data:a})}catch(r){console.error(`[api] ${new URL(e.url).pathname} failed:`,r);let i=r instanceof _o?400:500;return Response.json({error:String(r)},{status:i})}}async function Hg(e,t){let{provider:n,modelId:r,...i}=t;if(t.type==="prompt"&&n&&r){let o=await e.send({type:"get_state"});if(o.model?.provider!==n||o.model?.id!==r)await e.send({type:"set_model",provider:n,modelId:r});return e.send(i)}return e.send(t)}async function W6(e,{params:t}){let{id:n}=await t;try{let r=Be(n);if(!r?.isAlive())return Response.json({running:!1});if($g.has(n))return Response.json({running:!0,state:{isStreaming:!0,isPromptRunning:!0}});let i=await r.send({type:"get_state"});return Response.json({running:!0,state:i})}catch(r){return console.error(`[api] ${new URL(e.url).pathname} failed:`,r),Response.json({error:String(r)},{status:500})}}var zg={};Z(zg,{GET:()=>j6});async function j6(){return Response.json(wo(),{headers:{"Cache-Control":"no-store"}})}import Xg from"node:fs";var q6=new Set(["select","confirm","input","editor"]),$6=new Set(["agent_settled","prompt_done","prompt_error","extension_error"]);function Et(e,t,n){try{e.ws.send(JSON.stringify({ch:t,data:n}))}catch{}}function cD(e,t,n){if(!e)return;for(let r of e){if(t==="global"){let i=n,o=i.type==="extension_ui_request"&&q6.has(i.method),s=typeof i.type==="string"&&$6.has(i.type);if(o)Qe("ui-chain",`3 ws broadcast ${String(i.method)}`,`id=${String(i.id).slice(0,8)} sid=${String(i.sessionId).slice(0,8)} conns=${e.size}`);if(!s){let a=i.sessionId;if(a&&!r.seenSessions.has(a))continue}Et(r,t,n);continue}if(t==="running"){Et(r,t,{type:"running",...Vg(n,r.seenSessions)});continue}Et(r,t,n)}}function Vg(e,t){let n=e.runningSessionIds.filter((s)=>t.has(s)),r={},i={},o={};for(let s of n){if(e.phases[s]!==void 0)r[s]=e.phases[s];if(e.phaseSince[s]!==void 0)i[s]=e.phaseSince[s];if(e.busySince[s]!==void 0)o[s]=e.busySince[s]}return{runningSessionIds:n,phases:r,phaseSince:i,busySince:o}}var H6=new Set(["turn_start","turn_end"]);function uD(e){if(H6.has(e.type))return null;if(e.type==="message_update"){let n=e.assistantMessageEvent;if(!n||typeof n.type!=="string")return e;return{type:"message_update",assistantMessageEvent:G6(n)}}if(e.type==="message_start"||e.type==="message_end")return e;if(e.type==="agent_end")return{type:"agent_end"};return e}function G6(e){let t={type:e.type};if(typeof e.delta==="string")t.delta=e.delta;if(typeof e.contentIndex==="number")t.contentIndex=e.contentIndex;if(e.type==="toolcall_end"&&e.toolCall&&typeof e.toolCall==="object")t.toolCall=e.toolCall;if(e.type==="toolcall_start"&&typeof e.contentIndex==="number"){let r=e.partial?.content?.[e.contentIndex];if(r&&r.type==="toolCall"&&typeof r.name==="string")t.toolCall={type:"toolCall",toolCallId:typeof r.id==="string"?r.id:"",toolName:r.name}}return t}var Nl=ze("ws-agent");var Dn=new Map,Ll=null,Bl=null;function Wl(e,t){cD(Dn.get(e),e,t)}function dD(){let e=new Set;for(let t of Dn.get("global")??[])for(let n of t.seenSessions)e.add(n);return[...e]}function z6(e){if(e==="global"&&!Ll)Ll=Dg((t,n)=>{let r=uD(n);if(r)Wl("global",{sessionId:t,...r})});if(e==="running"&&!Bl)Bl=_g((t)=>Wl("running",t))}function V6(e){if(e==="global"&&Dn.get("global")?.size===0)Ll?.(),Ll=null;if(e==="running"&&Dn.get("running")?.size===0)Bl?.(),Bl=null}function lD(e,t){let n=Dn.get(t);if(!n)n=new Set,Dn.set(t,n);if(n.add(e),!e.channels.has(t))e.channels.set(t,{kind:"passive"});z6(t)}function Ta(e,t){let n=e.channels.get(t);if(!n)return;if(e.channels.delete(t),n.kind==="agent")n.unsubscribe();if(n.kind==="watch")try{n.watcher.close()}catch{}if(Dn.get(t)?.delete(e),n.kind==="passive")V6(t);if(n.kind==="agent"){let r=Dn.get(t);if(!r||r.size===0){let i=t.slice(6);K6(i)}}}var X6=30000,Sa=new Map;function K6(e){let t=Sa.get(e);if(t)clearTimeout(t);Sa.set(e,setTimeout(()=>{Sa.delete(e),Be(e)?.cancelPendingUiResponses()},X6))}async function Z6(e,t){let n=`agent:${t}`,r=performance.now();if(e.seenSessions.add(t),e.channels.has(n))return;let i=Be(t);if(Nl(`sub sid=${t} ${i?.isAlive()?"alive":"cold start"}`),!i?.isAlive()){let a=await De(t);if(!a){Nl(`sub sid=${t} not_found`),Et(e,n,{type:"not_found",sessionId:t});return}try{({session:i}=await Rr(t,a,void 0)),await Il(i,a)}catch(c){Nl(`sub sid=${t} start_failed +${Math.round(performance.now()-r)}ms: ${String(c)}`),Et(e,n,{type:"start_failed",sessionId:t,message:String(c)});return}}e.channels.set(n,{kind:"agent",unsubscribe:()=>{}}),Dn.get(n)?.add(e);let o=Sa.get(t);if(o)clearTimeout(o),Sa.delete(t);Et(e,n,{type:"connected",sessionId:t}),Nl(`sub sid=${t} connected +${Math.round(performance.now()-r)}ms`);let s=i.getPendingUiRequests();for(let a of s)Et(e,"global",{...a,sessionId:t})}function Y6(e,t){let n=t,r=`watch:${n}`,i;try{i=Xg.statSync(n)}catch{Et(e,r,{event:"error",message:"Not found"});return}if(!i.isFile()){Et(e,r,{event:"error",message:"Not a file"});return}let o,s=i.mtimeMs,a=i.size;try{o=Xg.watch(n,()=>{try{let c=Xg.statSync(n);if(c.mtimeMs===s&&c.size===a)return;s=c.mtimeMs,a=c.size,Et(e,r,{event:"change",mtime:c.mtime.toISOString(),size:c.size})}catch{Et(e,r,{event:"change",mtime:new Date().toISOString(),size:0})}})}catch{Et(e,r,{event:"error",message:"Failed to watch file"});return}o.on("error",()=>{Ta(e,r)}),e.channels.set(r,{kind:"watch",watcher:o}),Dn.get(r)?.add(e),Et(e,r,{event:"connected",filePath:n})}async function fD(e,t){switch(t.ch){case"global":{lD(e,"global");return}case"running":{lD(e,"running"),Et(e,"running",{type:"running",...Vg(wo(),e.seenSessions)});return}case"agent":{let n=typeof t.sessionId==="string"?t.sessionId:"";if(n)await Z6(e,n);return}case"watch":{if(typeof t.filePath==="string"&&t.filePath)Y6(e,t.filePath);return}default:return}}function pD(e){if(!Pt(e))return!1;let t=process.env.PI_WEB_PASSWORD;if(Da(t)&&!Ul(e.headers.get("authorization"),t))return!1;return!0}var Kg=ze("api-ws"),Zg=null;function Yg(e){Zg=e((t)=>{if(!pD(t.req.raw))return{onOpen:(o,s)=>s.close(1008,"untrusted")};let n={ws:null,channels:new Map,seenSessions:new Set},r=null,i=!1;return{onOpen:(o,s)=>{n.ws=s,Kg("connected",`${n.channels.size} channels restored`),s.send(JSON.stringify({type:"connected"})),r=setInterval(()=>{try{if(i){Kg("pong-timeout","no pong within one cycle — closing (half-open suspected)"),s.close();return}s.send(JSON.stringify({type:"ping"})),i=!0}catch{}},30000)},onMessage:async(o)=>{if(typeof o.data!=="string")return;let s;try{s=JSON.parse(o.data)}catch{return}if(s.type==="pong")i=!1;else if(s.type==="sub")await fD(n,s);else if(s.type==="unsub"&&typeof s.ch==="string")Ta(n,s.ch);else if(s.type==="unseen"&&typeof s.sessionId==="string"){let a=s.sessionId;n.seenSessions.delete(a);let c=`agent:${a}`;if(n.channels.has(c))Ta(n,c)}},onClose:()=>{if(Kg("closed",`${n.channels.size} channels dropped`),r)clearInterval(r);i=!1;for(let o of[...n.channels.keys()])Ta(n,o)}}})}function hD(e){e.get("/api/ws",(t,n)=>Zg?Zg(t,n):n())}var Jg={};Z(Jg,{DELETE:()=>sW,POST:()=>oW});import{randomUUID as J6}from"node:crypto";import{mkdir as Q6,unlink as eW,writeFile as tW}from"node:fs/promises";import{tmpdir as nW}from"node:os";import Co from"node:path";var gD=209715200,rW=/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}-[^/\\]+$/;function mD(){return Co.join(nW(),"pi-web-attachments")}function iW(e){let t=Co.basename(e??"");return Array.from(t).filter((i)=>i.charCodeAt(0)>31&&!'<>:"/\\|?*'.includes(i)).join("").replace(/^\.+/,"").slice(0,120)||"attachment"}async function oW(e){let t=iW(new URL(e.url).searchParams.get("name")),n=Buffer.from(await e.arrayBuffer());if(n.byteLength===0)return Response.json({error:"empty body"},{status:400});if(n.byteLength>gD)return Response.json({error:`attachment exceeds ${gD/1048576}MB`},{status:413});let r=mD();await Q6(r,{recursive:!0});let i=Co.join(r,`${J6()}-${t}`);return await tW(i,n),Response.json({path:i,name:t,size:n.byteLength})}async function sW(e){let t=new URL(e.url).searchParams.get("path");if(!t)return Response.json({error:"path is required"},{status:400});let n=Co.resolve(t);if(Co.dirname(n)!==mD()||!rW.test(Co.basename(n)))return Response.json({error:"not an uploaded attachment"},{status:400});try{await eW(n)}catch(r){if(r.code!=="ENOENT")throw r}return Response.json({ok:!0})}var wm={};Z(wm,{GET:()=>Dj});import{ModelRuntime as _j}from"@earendil-works/pi-coding-agent";var aW={"openai-codex":"ChatGPT Plus/Pro","github-copilot":"GitHub Copilot"};function yD(e){let t=new Set,n=[];for(let r of e){if(t.has(r.id))continue;t.add(r.id),n.push(r)}return n}function bD(e){let t=[];for(let n of yD(e)){if(!n.hasApiKeyLogin)continue;if(n.isCustom)continue;let r=n.status.configured&&n.credentialType!=="oauth";t.push({id:n.id,displayName:n.name,configured:r,...r&&n.status.source?{source:n.status.source}:{},modelCount:n.modelCount,modelIds:n.modelIds,reasoningModelIds:n.reasoningModelIds,inputModelIds:n.inputModelIds,supportsOAuth:n.hasOAuth,...n.baseUrl?{baseUrl:n.baseUrl}:{},...n.api?{api:n.api}:{}})}return t}function vD(e){let t=[];for(let n of yD(e)){if(!n.hasOAuth)continue;t.push({id:n.id,name:aW[n.id]??n.oauthName??n.name,usesCallbackServer:!1,loggedIn:n.credentialType==="oauth",modelIds:n.modelIds,reasoningModelIds:n.reasoningModelIds,inputModelIds:n.inputModelIds,supportsApiKey:n.hasApiKeyLogin,...n.baseUrl?{baseUrl:n.baseUrl}:{},...n.api?{api:n.api}:{}})}return t}async function jl(e,t){let n=e.getModels(),r=new Map;for(let s of n){if(!s.reasoning)continue;let a=r.get(s.provider);if(a)a.push(s.id);else r.set(s.provider,[s.id])}let i=new Map;for(let s of n){let a=(Array.isArray(s.input)?s.input:[]).filter((u)=>u!=="text");if(a.length===0)continue;let c=i.get(s.provider);if(!c)c={},i.set(s.provider,c);for(let u of a){let d=c[u]??[];d.push(s.id),c[u]=d}}let o=new Map;try{for(let s of await e.listCredentials())if(s.type==="api_key"||s.type==="oauth")o.set(s.providerId,s.type)}catch{}return e.getProviders().map((s)=>({id:s.id,name:s.name,isCustom:t?.has(s.id)??!1,...typeof s.baseUrl==="string"&&s.baseUrl.trim()?{baseUrl:s.baseUrl}:{},...n.find((a)=>a.provider===s.id)?.api?{api:n.find((a)=>a.provider===s.id).api}:{},hasApiKeyLogin:Boolean(s.auth.apiKey?.login),hasOAuth:Boolean(s.auth.oauth),...s.auth.oauth?.name?{oauthName:s.auth.oauth.name}:{},status:e.getProviderAuthStatus(s.id),...o.has(s.id)?{credentialType:o.get(s.id)}:{},modelCount:n.filter((a)=>a.provider===s.id).length,modelIds:n.filter((a)=>a.provider===s.id).map((a)=>a.id),reasoningModelIds:r.get(s.id)??[],inputModelIds:i.get(s.id)??{}}))}Ao();import{mkdir as cW,readdir as uW,readFile as DD,stat as ED,writeFile as lW}from"node:fs/promises";import{join as Aa}from"node:path";import{getAgentDir as SD}from"@earendil-works/pi-coding-agent";var ql=Aa(SD(),"pi-web","provider");function Mr(e){return/^[A-Za-z0-9][A-Za-z0-9._-]*$/.test(e)}async function Di(e){if(!Mr(e))return[];let t=Aa(ql,e,"models.json");try{if(!(await ED(t)).isFile())return[]}catch{return[]}try{let n=await DD(t,"utf-8");return Ir(JSON.parse(n))}catch{return[]}}async function $l(e){let t=[];for(let n of await Di(e)){let r=Or(n);if(r)t.push(r)}return t}function _i(e){let t=typeof e==="string"?Number(e):e;return typeof t==="number"&&Number.isFinite(t)?t:void 0}function dW(e,t){return{contextWindow:_i(e.context_length)??_i(e.context_window)??_i(t?.context_length)??_i(e.max_model_len)??0,maxTokens:_i(e.max_completion_tokens)??_i(e.max_output_tokens)??_i(t?.max_completion_tokens)??0}}function fW(e,t){if(Array.isArray(e.supported_parameters))return e.supported_parameters.some((n)=>n==="reasoning"||n==="thinking");if(e.reasoning!==void 0)return e.reasoning===!0;return t?.reasoning===!0}function pW(e,t){let n=Array.isArray(e.input_modalities)?e.input_modalities:Array.isArray(t?.input_modalities)?t.input_modalities:["text"],r=new Set(["text","image","audio","video","pdf"]),i=n.filter((o)=>typeof o==="string"&&r.has(o));if(i.length===0)i.push("text");return i}function em(e,t){let n=Or(t);if(!n)return null;let r=typeof t==="object"&&t!==null?t:{},i=r.top_provider,o=r.architecture,s=r.pricing,a=r.capabilities,{contextWindow:c,maxTokens:u}=dW(r,i),d=fW(r,a),f=pW(r,o),p=(g)=>{let b=typeof g==="string"?Number(g):g;if(typeof b!=="number"||!Number.isFinite(b))return 0;return Math.abs(b)<1?b*1e6:b},h=s&&typeof s==="object"?{input:p(s.prompt),output:p(s.completion),cacheRead:p(s.input_cache_read),cacheWrite:p(s.input_cache_write)}:{input:0,output:0,cacheRead:0,cacheWrite:0};return{id:n.id,name:n.name??n.id,provider:e,api:"openai-completions",baseUrl:"",reasoning:d,input:f,cost:h,contextWindow:c,maxTokens:u}}function hW(e){if(!e||typeof e!=="object")return new Set;let t=new Set;for(let[n,r]of Object.entries(e)){let i=r&&typeof r==="object"?r:void 0;if(i&&Array.isArray(i.models))t.add(n.toLowerCase())}return t}async function ko(){try{let e=JSON.parse(await DD(Aa(SD(),"models.json"),"utf-8"));return hW(e.providers)}catch{return new Set}}async function Uo(){try{if(!(await ED(ql)).isDirectory())return[]}catch{return[]}return(await uW(ql,{withFileTypes:!0})).filter((t)=>t.isDirectory()).map((t)=>t.name)}var gW=["off","minimal","low","medium","high","xhigh","max"];async function Hl(e,t){if(!Mr(e))return;let n=Aa(ql,e);await cW(n,{recursive:!0}),await lW(Aa(n,"models.json"),`${JSON.stringify(t,null,2)}
|
|
287
|
+
Done. Streamed ${i} thinking chunks (${c.length} chars).`;r({type:"message_update",assistantMessageEvent:{type:"text_start",contentIndex:1}}),r({type:"message_update",assistantMessageEvent:{type:"text_delta",contentIndex:1,delta:u}}),r({type:"message_update",assistantMessageEvent:{type:"text_end",contentIndex:1,content:u}}),r({type:"message_end",message:{role:"assistant",content:[{type:"thinking",thinking:c},{type:"text",text:u}]}}),r({type:"agent_end"})}finally{To(e,!1)}})(),Response.json({success:!0,data:null})}var $g=new Set;function To(e,t){if(t)$g.add(e);else $g.delete(e)}async function B6(e,{params:t}){let{id:n}=await t;try{let r=await e.json();if(Ea(`POST /api/agent/${n}`,`type=${r.type} message=${JSON.stringify(r.message)} keys=${Object.keys(r).join(",")}`),r.type==="prompt"&&r.message==="oom debug")return Ea("INTERCEPTED","routing to oomDebugHandler"),sD(n);if(r.type==="prompt"&&r.message==="oom stress")return qg("INTERCEPTED","routing to oomStressHandler"),aD(n);if(n==="new")return oD(r,ae(e));let i=Be(n);if(i?.isAlive()){let c=await Hg(i,r);return Response.json({success:!0,data:c})}let o=await De(n);if(!o)return Response.json({error:"Session not found"},{status:404});let{session:s}=await Rr(n,o,void 0);await Il(s,o);let a=await Hg(s,r);return Response.json({success:!0,data:a})}catch(r){console.error(`[api] ${new URL(e.url).pathname} failed:`,r);let i=r instanceof _o?400:500;return Response.json({error:String(r)},{status:i})}}async function Hg(e,t){let{provider:n,modelId:r,...i}=t;if(t.type==="prompt"&&n&&r){let o=await e.send({type:"get_state"});if(o.model?.provider!==n||o.model?.id!==r)await e.send({type:"set_model",provider:n,modelId:r});return e.send(i)}return e.send(t)}async function W6(e,{params:t}){let{id:n}=await t;try{let r=Be(n);if(!r?.isAlive())return Response.json({running:!1});if($g.has(n))return Response.json({running:!0,state:{isStreaming:!0,isPromptRunning:!0}});let i=await r.send({type:"get_state"});return Response.json({running:!0,state:i})}catch(r){return console.error(`[api] ${new URL(e.url).pathname} failed:`,r),Response.json({error:String(r)},{status:500})}}var zg={};Z(zg,{GET:()=>j6});async function j6(){return Response.json(wo(),{headers:{"Cache-Control":"no-store"}})}import Xg from"node:fs";var q6=new Set(["select","confirm","input","editor"]),$6=new Set(["agent_settled","prompt_done","prompt_error","extension_error"]);function Et(e,t,n){try{e.ws.send(JSON.stringify({ch:t,data:n}))}catch{}}function cD(e,t,n){if(!e)return;for(let r of e){if(t==="global"){let i=n,o=i.type==="extension_ui_request"&&q6.has(i.method),s=typeof i.type==="string"&&$6.has(i.type);if(o)Qe("ui-chain",`3 ws broadcast ${String(i.method)}`,`id=${String(i.id).slice(0,8)} sid=${String(i.sessionId).slice(0,8)} conns=${e.size}`);if(!s){let a=i.sessionId;if(a&&!r.seenSessions.has(a))continue}Et(r,t,n);continue}if(t==="running"){Et(r,t,{type:"running",...Vg(n,r.seenSessions)});continue}Et(r,t,n)}}function Vg(e,t){let n=e.runningSessionIds.filter((a)=>t.has(a)),r={},i={},o={},s={};for(let a of n){if(e.phases[a]!==void 0)r[a]=e.phases[a];if(e.phaseSince[a]!==void 0)i[a]=e.phaseSince[a];if(e.respondingSince[a]!==void 0)o[a]=e.respondingSince[a];if(e.busySince[a]!==void 0)s[a]=e.busySince[a]}return{runningSessionIds:n,phases:r,phaseSince:i,respondingSince:o,busySince:s}}var H6=new Set(["turn_start","turn_end"]);function uD(e){if(H6.has(e.type))return null;if(e.type==="message_update"){let n=e.assistantMessageEvent;if(!n||typeof n.type!=="string")return e;return{type:"message_update",assistantMessageEvent:G6(n)}}if(e.type==="message_start"||e.type==="message_end")return e;if(e.type==="agent_end")return{type:"agent_end"};return e}function G6(e){let t={type:e.type};if(typeof e.delta==="string")t.delta=e.delta;if(typeof e.contentIndex==="number")t.contentIndex=e.contentIndex;if(e.type==="toolcall_end"&&e.toolCall&&typeof e.toolCall==="object")t.toolCall=e.toolCall;if(e.type==="toolcall_start"&&typeof e.contentIndex==="number"){let r=e.partial?.content?.[e.contentIndex];if(r&&r.type==="toolCall"&&typeof r.name==="string")t.toolCall={type:"toolCall",toolCallId:typeof r.id==="string"?r.id:"",toolName:r.name}}return t}var Nl=ze("ws-agent");var Dn=new Map,Ll=null,Bl=null;function Wl(e,t){cD(Dn.get(e),e,t)}function dD(){let e=new Set;for(let t of Dn.get("global")??[])for(let n of t.seenSessions)e.add(n);return[...e]}function z6(e){if(e==="global"&&!Ll)Ll=Dg((t,n)=>{let r=uD(n);if(r)Wl("global",{sessionId:t,...r})});if(e==="running"&&!Bl)Bl=_g((t)=>Wl("running",t))}function V6(e){if(e==="global"&&Dn.get("global")?.size===0)Ll?.(),Ll=null;if(e==="running"&&Dn.get("running")?.size===0)Bl?.(),Bl=null}function lD(e,t){let n=Dn.get(t);if(!n)n=new Set,Dn.set(t,n);if(n.add(e),!e.channels.has(t))e.channels.set(t,{kind:"passive"});z6(t)}function Ta(e,t){let n=e.channels.get(t);if(!n)return;if(e.channels.delete(t),n.kind==="agent")n.unsubscribe();if(n.kind==="watch")try{n.watcher.close()}catch{}if(Dn.get(t)?.delete(e),n.kind==="passive")V6(t);if(n.kind==="agent"){let r=Dn.get(t);if(!r||r.size===0){let i=t.slice(6);K6(i)}}}var X6=30000,Sa=new Map;function K6(e){let t=Sa.get(e);if(t)clearTimeout(t);Sa.set(e,setTimeout(()=>{Sa.delete(e),Be(e)?.cancelPendingUiResponses()},X6))}async function Z6(e,t){let n=`agent:${t}`,r=performance.now();if(e.seenSessions.add(t),e.channels.has(n))return;let i=Be(t);if(Nl(`sub sid=${t} ${i?.isAlive()?"alive":"cold start"}`),!i?.isAlive()){let a=await De(t);if(!a){Nl(`sub sid=${t} not_found`),Et(e,n,{type:"not_found",sessionId:t});return}try{({session:i}=await Rr(t,a,void 0)),await Il(i,a)}catch(c){Nl(`sub sid=${t} start_failed +${Math.round(performance.now()-r)}ms: ${String(c)}`),Et(e,n,{type:"start_failed",sessionId:t,message:String(c)});return}}e.channels.set(n,{kind:"agent",unsubscribe:()=>{}}),Dn.get(n)?.add(e);let o=Sa.get(t);if(o)clearTimeout(o),Sa.delete(t);Et(e,n,{type:"connected",sessionId:t}),Nl(`sub sid=${t} connected +${Math.round(performance.now()-r)}ms`);let s=i.getPendingUiRequests();for(let a of s)Et(e,"global",{...a,sessionId:t})}function Y6(e,t){let n=t,r=`watch:${n}`,i;try{i=Xg.statSync(n)}catch{Et(e,r,{event:"error",message:"Not found"});return}if(!i.isFile()){Et(e,r,{event:"error",message:"Not a file"});return}let o,s=i.mtimeMs,a=i.size;try{o=Xg.watch(n,()=>{try{let c=Xg.statSync(n);if(c.mtimeMs===s&&c.size===a)return;s=c.mtimeMs,a=c.size,Et(e,r,{event:"change",mtime:c.mtime.toISOString(),size:c.size})}catch{Et(e,r,{event:"change",mtime:new Date().toISOString(),size:0})}})}catch{Et(e,r,{event:"error",message:"Failed to watch file"});return}o.on("error",()=>{Ta(e,r)}),e.channels.set(r,{kind:"watch",watcher:o}),Dn.get(r)?.add(e),Et(e,r,{event:"connected",filePath:n})}async function fD(e,t){switch(t.ch){case"global":{lD(e,"global");return}case"running":{lD(e,"running"),Et(e,"running",{type:"running",...Vg(wo(),e.seenSessions)});return}case"agent":{let n=typeof t.sessionId==="string"?t.sessionId:"";if(n)await Z6(e,n);return}case"watch":{if(typeof t.filePath==="string"&&t.filePath)Y6(e,t.filePath);return}default:return}}function pD(e){if(!Pt(e))return!1;let t=process.env.PI_WEB_PASSWORD;if(Da(t)&&!Ul(e.headers.get("authorization"),t))return!1;return!0}var Kg=ze("api-ws"),Zg=null;function Yg(e){Zg=e((t)=>{if(!pD(t.req.raw))return{onOpen:(o,s)=>s.close(1008,"untrusted")};let n={ws:null,channels:new Map,seenSessions:new Set},r=null,i=!1;return{onOpen:(o,s)=>{n.ws=s,Kg("connected",`${n.channels.size} channels restored`),s.send(JSON.stringify({type:"connected"})),r=setInterval(()=>{try{if(i){Kg("pong-timeout","no pong within one cycle — closing (half-open suspected)"),s.close();return}s.send(JSON.stringify({type:"ping"})),i=!0}catch{}},30000)},onMessage:async(o)=>{if(typeof o.data!=="string")return;let s;try{s=JSON.parse(o.data)}catch{return}if(s.type==="pong")i=!1;else if(s.type==="sub")await fD(n,s);else if(s.type==="unsub"&&typeof s.ch==="string")Ta(n,s.ch);else if(s.type==="unseen"&&typeof s.sessionId==="string"){let a=s.sessionId;n.seenSessions.delete(a);let c=`agent:${a}`;if(n.channels.has(c))Ta(n,c)}},onClose:()=>{if(Kg("closed",`${n.channels.size} channels dropped`),r)clearInterval(r);i=!1;for(let o of[...n.channels.keys()])Ta(n,o)}}})}function hD(e){e.get("/api/ws",(t,n)=>Zg?Zg(t,n):n())}var Jg={};Z(Jg,{DELETE:()=>sW,POST:()=>oW});import{randomUUID as J6}from"node:crypto";import{mkdir as Q6,unlink as eW,writeFile as tW}from"node:fs/promises";import{tmpdir as nW}from"node:os";import Co from"node:path";var gD=209715200,rW=/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}-[^/\\]+$/;function mD(){return Co.join(nW(),"pi-web-attachments")}function iW(e){let t=Co.basename(e??"");return Array.from(t).filter((i)=>i.charCodeAt(0)>31&&!'<>:"/\\|?*'.includes(i)).join("").replace(/^\.+/,"").slice(0,120)||"attachment"}async function oW(e){let t=iW(new URL(e.url).searchParams.get("name")),n=Buffer.from(await e.arrayBuffer());if(n.byteLength===0)return Response.json({error:"empty body"},{status:400});if(n.byteLength>gD)return Response.json({error:`attachment exceeds ${gD/1048576}MB`},{status:413});let r=mD();await Q6(r,{recursive:!0});let i=Co.join(r,`${J6()}-${t}`);return await tW(i,n),Response.json({path:i,name:t,size:n.byteLength})}async function sW(e){let t=new URL(e.url).searchParams.get("path");if(!t)return Response.json({error:"path is required"},{status:400});let n=Co.resolve(t);if(Co.dirname(n)!==mD()||!rW.test(Co.basename(n)))return Response.json({error:"not an uploaded attachment"},{status:400});try{await eW(n)}catch(r){if(r.code!=="ENOENT")throw r}return Response.json({ok:!0})}var wm={};Z(wm,{GET:()=>Dj});import{ModelRuntime as _j}from"@earendil-works/pi-coding-agent";var aW={"openai-codex":"ChatGPT Plus/Pro","github-copilot":"GitHub Copilot"};function yD(e){let t=new Set,n=[];for(let r of e){if(t.has(r.id))continue;t.add(r.id),n.push(r)}return n}function bD(e){let t=[];for(let n of yD(e)){if(!n.hasApiKeyLogin)continue;if(n.isCustom)continue;let r=n.status.configured&&n.credentialType!=="oauth";t.push({id:n.id,displayName:n.name,configured:r,...r&&n.status.source?{source:n.status.source}:{},modelCount:n.modelCount,modelIds:n.modelIds,reasoningModelIds:n.reasoningModelIds,inputModelIds:n.inputModelIds,supportsOAuth:n.hasOAuth,...n.baseUrl?{baseUrl:n.baseUrl}:{},...n.api?{api:n.api}:{}})}return t}function vD(e){let t=[];for(let n of yD(e)){if(!n.hasOAuth)continue;t.push({id:n.id,name:aW[n.id]??n.oauthName??n.name,usesCallbackServer:!1,loggedIn:n.credentialType==="oauth",modelIds:n.modelIds,reasoningModelIds:n.reasoningModelIds,inputModelIds:n.inputModelIds,supportsApiKey:n.hasApiKeyLogin,...n.baseUrl?{baseUrl:n.baseUrl}:{},...n.api?{api:n.api}:{}})}return t}async function jl(e,t){let n=e.getModels(),r=new Map;for(let s of n){if(!s.reasoning)continue;let a=r.get(s.provider);if(a)a.push(s.id);else r.set(s.provider,[s.id])}let i=new Map;for(let s of n){let a=(Array.isArray(s.input)?s.input:[]).filter((u)=>u!=="text");if(a.length===0)continue;let c=i.get(s.provider);if(!c)c={},i.set(s.provider,c);for(let u of a){let d=c[u]??[];d.push(s.id),c[u]=d}}let o=new Map;try{for(let s of await e.listCredentials())if(s.type==="api_key"||s.type==="oauth")o.set(s.providerId,s.type)}catch{}return e.getProviders().map((s)=>({id:s.id,name:s.name,isCustom:t?.has(s.id)??!1,...typeof s.baseUrl==="string"&&s.baseUrl.trim()?{baseUrl:s.baseUrl}:{},...n.find((a)=>a.provider===s.id)?.api?{api:n.find((a)=>a.provider===s.id).api}:{},hasApiKeyLogin:Boolean(s.auth.apiKey?.login),hasOAuth:Boolean(s.auth.oauth),...s.auth.oauth?.name?{oauthName:s.auth.oauth.name}:{},status:e.getProviderAuthStatus(s.id),...o.has(s.id)?{credentialType:o.get(s.id)}:{},modelCount:n.filter((a)=>a.provider===s.id).length,modelIds:n.filter((a)=>a.provider===s.id).map((a)=>a.id),reasoningModelIds:r.get(s.id)??[],inputModelIds:i.get(s.id)??{}}))}Ao();import{mkdir as cW,readdir as uW,readFile as DD,stat as ED,writeFile as lW}from"node:fs/promises";import{join as Aa}from"node:path";import{getAgentDir as SD}from"@earendil-works/pi-coding-agent";var ql=Aa(SD(),"pi-web","provider");function Mr(e){return/^[A-Za-z0-9][A-Za-z0-9._-]*$/.test(e)}async function Di(e){if(!Mr(e))return[];let t=Aa(ql,e,"models.json");try{if(!(await ED(t)).isFile())return[]}catch{return[]}try{let n=await DD(t,"utf-8");return Ir(JSON.parse(n))}catch{return[]}}async function $l(e){let t=[];for(let n of await Di(e)){let r=Or(n);if(r)t.push(r)}return t}function _i(e){let t=typeof e==="string"?Number(e):e;return typeof t==="number"&&Number.isFinite(t)?t:void 0}function dW(e,t){return{contextWindow:_i(e.context_length)??_i(e.context_window)??_i(t?.context_length)??_i(e.max_model_len)??0,maxTokens:_i(e.max_completion_tokens)??_i(e.max_output_tokens)??_i(t?.max_completion_tokens)??0}}function fW(e,t){if(Array.isArray(e.supported_parameters))return e.supported_parameters.some((n)=>n==="reasoning"||n==="thinking");if(e.reasoning!==void 0)return e.reasoning===!0;return t?.reasoning===!0}function pW(e,t){let n=Array.isArray(e.input_modalities)?e.input_modalities:Array.isArray(t?.input_modalities)?t.input_modalities:["text"],r=new Set(["text","image","audio","video","pdf"]),i=n.filter((o)=>typeof o==="string"&&r.has(o));if(i.length===0)i.push("text");return i}function em(e,t){let n=Or(t);if(!n)return null;let r=typeof t==="object"&&t!==null?t:{},i=r.top_provider,o=r.architecture,s=r.pricing,a=r.capabilities,{contextWindow:c,maxTokens:u}=dW(r,i),d=fW(r,a),f=pW(r,o),p=(g)=>{let b=typeof g==="string"?Number(g):g;if(typeof b!=="number"||!Number.isFinite(b))return 0;return Math.abs(b)<1?b*1e6:b},h=s&&typeof s==="object"?{input:p(s.prompt),output:p(s.completion),cacheRead:p(s.input_cache_read),cacheWrite:p(s.input_cache_write)}:{input:0,output:0,cacheRead:0,cacheWrite:0};return{id:n.id,name:n.name??n.id,provider:e,api:"openai-completions",baseUrl:"",reasoning:d,input:f,cost:h,contextWindow:c,maxTokens:u}}function hW(e){if(!e||typeof e!=="object")return new Set;let t=new Set;for(let[n,r]of Object.entries(e)){let i=r&&typeof r==="object"?r:void 0;if(i&&Array.isArray(i.models))t.add(n.toLowerCase())}return t}async function ko(){try{let e=JSON.parse(await DD(Aa(SD(),"models.json"),"utf-8"));return hW(e.providers)}catch{return new Set}}async function Uo(){try{if(!(await ED(ql)).isDirectory())return[]}catch{return[]}return(await uW(ql,{withFileTypes:!0})).filter((t)=>t.isDirectory()).map((t)=>t.name)}var gW=["off","minimal","low","medium","high","xhigh","max"];async function Hl(e,t){if(!Mr(e))return;let n=Aa(ql,e);await cW(n,{recursive:!0}),await lW(Aa(n,"models.json"),`${JSON.stringify(t,null,2)}
|
|
288
288
|
`)}function mW(e){let n=(typeof e==="object"&&e!==null?e:{}).reasoning;if(typeof n!=="object"||n===null)return;let r=n.supported_efforts;if(!Array.isArray(r))return;let i=r.filter((s)=>typeof s==="string"),o={};for(let s of gW)o[s]=i.includes(s)?s:null;return o}function yW(e,t){let n={};for(let r of["input","output","cacheRead","cacheWrite"]){let i=e[r];if(i>0&&i!==t?.[r])n[r]=i}return Object.keys(n).length>0?n:void 0}function bW(e,t){let n={},r=!1;for(let[i,o]of Object.entries(e))if(t[i]!==o)n[i]=o,r=!0;return r?n:void 0}function TD(e,t){let n=em("__suggestion__",e);if(!n)return{};let r={};if(n.contextWindow>0&&n.contextWindow!==t.contextWindow)r.contextWindow=n.contextWindow;if(n.maxTokens>0&&n.maxTokens!==t.maxTokens)r.maxTokens=n.maxTokens;if(n.reasoning!==t.reasoning)r.reasoning=n.reasoning;if(JSON.stringify(n.input)!==JSON.stringify(t.input))r.input=n.input;let i=t.cost,o=yW(n.cost,i);if(o)r.cost=o;let s=mW(e);if(s){let a=t.thinkingLevelMap??{},c=bW(s,a);if(c)r.thinkingLevelMap=c}return r}Ro();import{existsSync as wj}from"node:fs";var sE=vn(nE(),1);import{chmodSync as iE,existsSync as rE,mkdirSync as yj,readFileSync as bj,writeFileSync as oE}from"node:fs";import{dirname as vj,join as bm}from"node:path";import{getAgentDir as vm}from"@earendil-works/pi-coding-agent";var aE={encoding:"utf-8",mode:384};function xj(e){let t=vj(e);if(!rE(t))yj(t,{recursive:!0,mode:448});if(!rE(e))oE(e,"{}",aE),iE(e,384)}async function xm(e,t){xj(e);let n,r=await sE.default.lock(e,{retries:{retries:10,factor:2,minTimeout:100,maxTimeout:1e4,randomize:!0},stale:30000,onCompromised:(o)=>{n=o}}),i=()=>{if(n)throw n};try{i();let o=JSON.parse(bj(e,"utf-8"));if(!je(o))throw Error("Invalid auth.json: expected an object");let{result:s,changed:a}=t(o);if(a)i(),oE(e,JSON.stringify(o,null,2),aE),iE(e,384),i();return s}finally{try{await r()}catch{}}}function rd(e,t,n=bm(vm(),"auth.json")){return xm(n,(r)=>(r[e]=t,{result:void 0,changed:!0}))}async function Mo(e,t,n=bm(vm(),"auth.json")){return xm(n,(r)=>{if(!Object.hasOwn(r,e))return{result:{status:"not_found"},changed:!1};let i=r[e],o=je(i)&&typeof i.type==="string"?i.type:"unknown";if(o!==t)return{result:{status:"type_mismatch",storedType:o},changed:!1};return delete r[e],{result:{status:"removed"},changed:!0}})}async function cE(e,t,n=bm(vm(),"auth.json")){await xm(n,(r)=>{let i=r[e],o=je(i)&&typeof i.type==="string"?i.type:void 0;if(o!=="api_key"&&o!=="oauth")return{result:void 0,changed:!1};if(delete r[e],!Object.hasOwn(r,t))r[t]=i;return{result:void 0,changed:!0}})}Eo();function id(e){if(!e||typeof e!=="object"||Array.isArray(e))return!1;return Object.keys(e).some((t)=>t!=="modelOverrides")}function od(e){let t=ln("models.json",St("models.json",e));if(!wj(t))return new Set;let n=Dt(t);if(!n)return new Set;let r=n.providers??{};return new Set(Object.keys(r).filter((i)=>id(r[i])))}async function uE(e,t,n,r=new Set){for(let[i,o]of Object.entries(e)){if(t.has(i)||r.has(i)||!id(o))continue;for(let s of["api_key","oauth"])await Mo(i,s,n).catch((a)=>{console.warn(`[models-config] could not drop auth.json entry for ${i}:`,a)})}}async function Dj(e){let t=await _j.create({allowModelNetwork:!0}),n=bD(await jl(t,od(ae(e))));return await Ej(n),Ce(),Response.json({providers:n})}async function Ej(e){let t=await Uo();if(t.length===0)return;let n=await ko(),r=new Map;for(let i of t){if(n.has(i.toLowerCase()))continue;let o=await $l(i);if(o.length>0)r.set(i,o.map((s)=>s.id))}for(let i of e){let o=r.get(i.id);if(o)i.modelIds=o,i.modelCount=o.length}}var _m={};Z(_m,{DELETE:()=>Cj,GET:()=>Sj,POST:()=>Tj});import{ModelRuntime as lE}from"@earendil-works/pi-coding-agent";async function Sj(e,{params:t}){let{provider:n}=await t,r=await lE.create(),i=r.getProviderAuthStatus(n),o=r.getProvider(n)?.name??n,s=r.getModels(n).length;return Response.json({provider:n,displayName:o,configured:i.configured,source:i.source,models:s})}async function Tj(e,{params:t}){let{provider:n}=await t;try{let{apiKey:r}=await e.json();if(!r||typeof r!=="string"||!r.trim())return Response.json({error:"apiKey is required"},{status:400});let o=(await lE.create()).getProvider(n)?.auth.apiKey;if(!o?.login)throw Error(`${n} does not support API key login`);let s=!1,a=await o.login({signal:e.signal,notify:()=>{},prompt:async(c)=>{if(c.type==="select"){let u=c.options.find((d)=>d.id==="api-key"||d.id==="bearer-token");if(u)return u.id;throw Error(`${n} requires interactive authentication setup`)}if(!s&&c.type==="secret")return s=!0,r.trim();throw Error(`${n} requires additional authentication settings`)}});return await rd(n,a),Ce(),Response.json({success:!0})}catch(r){return Response.json({error:String(r)},{status:500})}}async function Cj(e,{params:t}){let{provider:n}=await t;try{let r=await Mo(n,"api_key");if(r.status==="type_mismatch")return Response.json({error:`${n} is authenticated with OAuth, not an API key`},{status:409});if(r.status==="not_found")return Response.json({error:`no stored API key for ${n} (key may come from environment)`},{status:404});return Ce(),Response.json({success:!0})}catch(r){return Response.json({error:String(r)},{status:500})}}var Dm={};Z(Dm,{GET:()=>Uj,POST:()=>kj});import{ModelRuntime as Aj}from"@earendil-works/pi-coding-agent";function dE(){if(!globalThis.__piLoginCallbacks)globalThis.__piLoginCallbacks=new Map;return globalThis.__piLoginCallbacks}async function kj(e,{params:t}){let{provider:n}=await t,{token:r,code:i}=await e.json();if(!r||!i)return Response.json({error:"token and code required"},{status:400});let o=dE(),s=o.get(r);if(!s)return Response.json({error:"No pending login for token"},{status:404});if(!r.startsWith(`${n}-`))return Response.json({error:"Token does not match provider"},{status:400});return s.resolve(i),o.delete(r),Response.json({ok:!0,provider:n})}async function Uj(e,{params:t}){let{provider:n}=await t,r=new URL(e.url).searchParams.get("type")==="api_key"?"api_key":"oauth",i=new TextEncoder,o=(c,u)=>{c.enqueue(i.encode(`data: ${JSON.stringify(u)}
|
|
289
289
|
|
|
290
290
|
`))},s=new AbortController;e.signal.addEventListener("abort",()=>s.abort());let a=new ReadableStream({async start(c){let u=await Aj.create(),d=u.getProvider(n);if(!(r==="api_key"?!!d?.auth.apiKey:!!d?.auth.oauth)){o(c,{type:"error",message:`Unknown provider: ${n}`}),c.close();return}let p=dE(),h=new Set,g,b=()=>{let x=`${n}-${Date.now()}-${Math.random().toString(36).slice(2)}`;h.add(x);let m=new Promise((w,D)=>{p.set(x,{resolve:(T)=>{h.delete(x),p.delete(x),w(T)},reject:(T)=>{h.delete(x),p.delete(x),D(T)}})});return{token:x,promise:m}},v=()=>{if(!g)g=b(),g.promise.finally(()=>{g=void 0}).catch(()=>{});return g},y=()=>{for(let x of h)p.get(x)?.reject(Error("Login cancelled")),p.delete(x);h.clear()};s.signal.addEventListener("abort",y);try{await u.login(n,r,{prompt:async(x)=>{let m=x.type==="manual_code"?v():b();if(x.type==="select")o(c,{type:"select_request",message:x.message,options:x.options,token:m.token});else o(c,{type:"prompt_request",message:x.message,placeholder:x.placeholder??null,secret:x.type==="secret",token:m.token});return m.promise},notify:(x)=>{if(x.type==="auth_url"){let m=v();o(c,{type:"auth",url:x.url,instructions:x.instructions??null,token:m.token})}else if(x.type==="device_code")o(c,{type:"device_code",userCode:x.userCode,verificationUri:x.verificationUri,intervalSeconds:x.intervalSeconds??null,expiresInSeconds:x.expiresInSeconds??null});else o(c,{type:"progress",message:x.message})},signal:s.signal}),Ce(),o(c,{type:"success"})}catch(x){let m=x instanceof Error?x.message:String(x);if(m!=="Login cancelled")o(c,{type:"error",message:m});else o(c,{type:"cancelled"})}finally{y(),c.close()}},cancel(){s.abort()}});return new Response(a,{headers:{"Content-Type":"text/event-stream","Cache-Control":"no-cache",Connection:"keep-alive"}})}var Em={};Z(Em,{POST:()=>Rj});import{ModelRuntime as fE}from"@earendil-works/pi-coding-agent";async function Rj(e,{params:t}){let{provider:n}=await t;if(!(await fE.create()).getProvider(n)?.auth.oauth)return Response.json({error:`Unknown provider: ${n}`},{status:400});if((await Mo(n,"oauth")).status==="type_mismatch")return Response.json({error:`${n} is authenticated with an API key, not OAuth`},{status:409});return Ce(),Response.json({ok:!0})}var Sm={};Z(Sm,{GET:()=>Pj});import{ModelRuntime as Fj}from"@earendil-works/pi-coding-agent";async function Pj(e){let t=await Fj.create({allowModelNetwork:!0}),n=vD(await jl(t,od(ae(e))));return await Oj(n),Ce(),Response.json({providers:n})}async function Oj(e){let t=await Uo();if(t.length===0)return;let n=await ko(),r=new Map;for(let i of t){if(n.has(i.toLowerCase()))continue;let o=await $l(i);if(o.length>0)r.set(i,o.map((s)=>s.id))}for(let i of e){let o=r.get(i.id);if(o)i.modelIds=o}}var Tm={};Z(Tm,{GET:()=>Mj});import{readStoredCredential as Ij}from"@earendil-works/pi-coding-agent";async function Mj(e,{params:t}){let{provider:n}=await t,r=Ij(n);return Response.json({provider:n,configured:!!r,type:r?.type??null})}var Am={};Z(Am,{GET:()=>qj});import{createAgentSessionFromServices as Nj,createAgentSessionServices as Lj,getAgentDir as Bj,SessionManager as Wj}from"@earendil-works/pi-coding-agent";var Cm=null,sd=null;async function pE(e){if(!(e?.forceFresh??!1)&&Cm)return Cm.commands;if(sd)return sd;let n=jj();sd=n;try{return await n}finally{sd=null}}async function jj(){let e=Bj(),t=await Lj({cwd:e,agentDir:e}),n=Wj.inMemory(e),{session:r}=await Nj({services:t,sessionManager:n}),i=[];for(let o of r.extensionRunner.getRegisteredCommands())i.push({name:o.invocationName,description:o.description,source:"extension",sourceInfo:o.sourceInfo});for(let o of r.promptTemplates)i.push({name:o.name,description:o.description,source:"prompt",sourceInfo:o.sourceInfo});for(let o of r.resourceLoader.getSkills().skills)i.push({name:`skill:${o.name}`,description:o.description,source:"skill",sourceInfo:o.sourceInfo});return Cm={commands:i,loadedAt:Date.now()},i}async function qj(e){await _n();try{let t=(e.headers.get("cache-control")??"").includes("no-store"),n=await pE({forceFresh:t});return Response.json({commands:n})}catch(t){return Response.json({error:String(t)},{status:500})}}var Um={};Z(Um,{GET:()=>Kj});import{stat as Xj}from"node:fs/promises";import{readdir as gE,realpath as mE,stat as yE}from"node:fs/promises";import{homedir as km}from"node:os";import Wr from"node:path";function bE(e,t=process.platform){return t==="win32"&&!e}function vE(e){return e||km()}function $j(){return"ABCDEFGHIJKLMNOPQRSTUVWXYZ".split("").map((e)=>({name:`${e}:`,path:`${e}:\\`}))}var Hj=1500,Gj=30000,hE=null;async function zj(e,t){let n;try{return await Promise.race([yE(e).then((r)=>r.isDirectory()),new Promise((r)=>{n=setTimeout(()=>r(null),t)})])}catch{return!1}finally{if(n)clearTimeout(n)}}async function xE(){let e=hE;if(e&&Date.now()-e.at<Gj)return e.drives;let t=await Promise.all($j().map(async(i)=>{let o=await zj(i.path,Hj);return{drive:i,isDirectory:o}})),n=t.filter((i)=>i.isDirectory).map((i)=>({...i.drive,path:Ke(i.drive.path)}));if(!t.some((i)=>i.isDirectory===null))hE={at:Date.now(),drives:n};return n}function Vj(e){let t=Ke(e);if(t==="~")return km();if(t.startsWith("~/"))return Wr.resolve(km(),t.slice(2));return Wr.resolve(t)}function wE(e){let t=/^[a-zA-Z]:[\\/]/.test(e)||e.startsWith("\\\\")?Wr.win32:e.startsWith("/")?Wr.posix:Wr,n=t.normalize(e),r=t.dirname(n);return r===n?null:Ke(r)}async function _E(e){let t=await mE(Vj(e));return/^[a-zA-Z]:$/.test(t)?`${t}/`:t}async function DE(e){let t=await gE(e,{withFileTypes:!0});return(await Promise.all(t.map(async(r)=>{if(r.isDirectory())return{name:r.name,path:Ke(Wr.join(e,r.name))};if(!r.isSymbolicLink())return null;try{let i=Wr.join(e,r.name),o=await mE(i);if(!(await yE(o)).isDirectory())return null;return{name:r.name,path:Ke(i)}}catch{return null}}))).filter((r)=>r!==null).sort((r,i)=>r.name.localeCompare(i.name))}async function EE(e){return(await gE(e,{withFileTypes:!0})).filter((r)=>!r.isDirectory()).map((r)=>({name:r.name,path:Ke(Wr.join(e,r.name))})).sort((r,i)=>r.name.localeCompare(i.name))}async function Kj(e){try{let t=new URL(e.url).searchParams.get("path")?.trim();if(bE(t))return Response.json({path:"",parentPath:null,drives:await xE(),directories:[],files:[]});let n=vE(t),r;try{r=await _E(n)}catch{return Response.json({error:"Directory does not exist"},{status:404})}if(!(await Xj(r)).isDirectory())return Response.json({error:"Path is not a directory"},{status:400});let o=await DE(r),s=await EE(r);return Response.json({path:r,parentPath:wE(r),directories:o,files:s})}catch(t){return Response.json({error:String(t)},{status:500})}}var Rm={};Z(Rm,{POST:()=>Qj});import{statSync as Zj}from"node:fs";import{homedir as SE}from"node:os";import{isAbsolute as Yj,resolve as TE}from"node:path";function Jj(e){let t=Ke(e);if(t==="~")return SE();if(t.startsWith("~/"))return TE(SE(),t.slice(2));return Yj(t)?t:TE(t)}async function Qj(e){try{let t=await e.json(),n=typeof t.cwd==="string"?t.cwd.trim():"";if(!n)return Response.json({error:"Path is required"},{status:400});let r=Jj(n),i;try{i=Zj(r)}catch{return Response.json({error:`Directory does not exist: ${n}`},{status:400})}if(!i.isDirectory())return Response.json({error:`Path is not a directory: ${n}`},{status:400});return wt(r),Response.json({success:!0,cwd:r})}catch(t){return Response.json({error:String(t)},{status:500})}}var Fm={};Z(Fm,{POST:()=>r7});import{mkdirSync as e7}from"node:fs";import{homedir as t7}from"node:os";import{join as n7}from"node:path";async function r7(){try{let e=new Date().toISOString().slice(0,10).replace(/-/g,""),t=n7(t7(),`pi-cwd-${e}`);return e7(t,{recursive:!0}),wt(t),Response.json({cwd:t})}catch(e){return Response.json({error:String(e)},{status:500})}}var Pm={};Z(Pm,{GET:()=>o7,PUT:()=>a7});import{join as CE}from"node:path";import{getAgentDir as kE}from"@earendil-works/pi-coding-agent";function AE(e,t){let n=new Set(dD()),r=n;if(e==="project"&&t){let s=_t(t);r=new Set([...n].filter((a)=>{let c=Xt().get(a);return c&&_t(c.cwd)===s}))}let{restarted:i,skipped:o}=xa([...r],{skipRunning:!0});return Wl("global",{sessionId:"__config__",type:"defaulttools_changed",scope:e,cwd:t??null,at:Date.now()}),{restarted:i.length,skipped:o.length}}var i7=["read","bash","edit","write"];async function o7(e){let n=new URL(e.url).searchParams.get("cwd")??"",r=kE(),i=null,o=!1,s=!1,a=null;if(n&&(n.startsWith("/")||Ie(n))){let c=await oe();if(s=Re(n,c)&&ce(n,c),s)o=!Oe(n,r).requiresTrust?!0:Oe(n,r).trusted,i=Xn(Wu(n,"defaultTools"))??null,a=CE(n,".pi","settings.json")}return Response.json({defaults:i7,global:Xn(Kn("defaultTools"))??null,globalPath:CE(r,"settings.json"),project:i,projectPath:a,projectTrusted:o,projectAvailable:s})}function s7(e){if(e.tools===null)return{tools:null};let t=Xn(e.tools);if(t===void 0)return{tools:null,error:Response.json({error:"tools must be an array of strings or null"},{status:400})};return{tools:t}}async function a7(e){let t;try{t=await e.json()}catch{return Response.json({error:"invalid body"},{status:400})}let{tools:n,error:r}=s7(t);if(r)return r;if(t.scope==="global")return fo("defaultTools",n??void 0),Response.json({ok:!0,...AE("global")});if(t.scope==="project"){let i=typeof t.cwd==="string"?t.cwd:"";if(!i||!i.startsWith("/")&&!Ie(i))return Response.json({error:"cwd must be an absolute path"},{status:400});let o=await oe();if(!Re(i,o)||!ce(i,o))return Response.json({error:"Access denied"},{status:403});let s=Oe(i,kE());if(s.requiresTrust&&!s.trusted)return Response.json({error:"project not trusted"},{status:403});return L2(i,"defaultTools",n??void 0),Response.json({ok:!0,...AE("project",i)})}return Response.json({error:"scope must be global or project"},{status:400})}var Im={};Z(Im,{POST:()=>b7});var Ai=ze("echo-model"),Oa=(e)=>new Promise((t)=>setTimeout(t,e));function ki(e,t){e.write(`data: ${JSON.stringify(t)}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{r as e}from"./rolldown-runtime-hePW80VL.js";import{c as t,o as n,s as r}from"./index-
|
|
1
|
+
import{r as e}from"./rolldown-runtime-hePW80VL.js";import{c as t,o as n,s as r}from"./index-DY4IOdWF.js";var i=[],a=[];(()=>{let e=`lc,34,7n,7,7b,19,,,,2,,2,,,20,b,1c,l,g,,2t,7,2,6,2,2,,4,z,,u,r,2j,b,1m,9,9,,o,4,,9,,3,,5,17,3,1n,9,16,o,,x,1i,3,,i,,7,a,2,t,3,1k,,,7,2,2,2,3,9,,a,2,q,,2,3,1k,,,5,4,2,2,3,3,,u,2,3,,b,3,1k,,,8,,3,,3,k,2,m,6,,3,1k,,,7,2,2,2,3,7,3,a,2,u,,1n,5,3,3,,4,9,,14,5,1j,,,7,,3,,4,7,2,b,2,t,3,1k,,,7,,3,,4,7,2,b,2,f,,c,4,1j,2,,7,,3,,4,9,,a,2,t,3,1y,,4,6,,,,8,i,2,1p,,,8,c,8,2q,,,a,b,7,21,2,r,,,,,,4,2,1d,k,,2,5,b,,10,9,,2u,b,,6,n,4,4,3,g,4,d,,,3,6,,f,,jj,3,qa,4,s,3,t,2,u,2,1s,w,9,,19,3,,,39,2,y,,3a,c,4,c,63,5,1l,a,,,,,2,o,2,,1c,1a,2,c,k,5,1b,h,12,9,c,3,u,d,1k,e,1c,k,48,3,,l,4,,6,,2,3,5i,1s,ek,,5f,x,2da,3,3x,,2o,w,fe,6,2x,2,n9w,4,,a,w,2,28,2,7k,,3,,4,,n,5,4,,2b,2,1e,i,q,i,d,,12,8,p,d,18,4,1b,e,10,,1v,e,c,,8,2,1a,,1f,,,3,2,2,5,2,,,15,5,5,2,6k,8,,2,fn4,,kh,g,g,g,a6,2,gt,,6a,,45,5,1ae,3,,2,5,4,14,3,4,,4l,2,fx,4,1t,5,8t,2,25,6,1y,b,1d,4,3e,3,1h,f,15,,2,2,a,4,19,b,7,,1p,3,10,e,g,2,18,,c,3,1c,e,8,4,,2,2k,c,6,,2,,4d,c,l,4,1j,2,,7,2,2,2,3,9,,a,2,2,7,3,5,1v,9,,,2,,,4,,5,,,e,2,2a,i,n,,29,k,6j,7,2,9,r,2,2a,h,2y,d,2t,3,2,a,74,f,6t,6,,2,2,4,,,,2,3x,7,2,7,3,,s,a,14,7,,4,8,,9,b,1a,g,5i,8,5j,8,,8,2a,m,,e,3e,6,3,,,2,,7,,,1u,5,,2,,5,9n,4,9,2,,,1c,7,3,5,n,,44l,,6,f,8ug,i,1xc,5,1n,7,t4,,,1j,7,4,29,,b,2,f57,2,3mp,1a,2,n,f2,5,3,6,8,8,2,7,u,4,44,3,1iz,1j,4,1e,8,,e,,m,5,,f,11s,7,,h,2,7,,2,,5,2s,,4g,7,af,,1p,4,e4,4,72,2,6r,,2,,7,2,5,,d6,7,31,7,240,5`.split(`,`).map(e=>e?parseInt(e,36):1);for(let t=0,n=0;t<e.length;t++)(t%2?a:i).push(n+=e[t])})();function o(e){if(e<768)return!1;for(let t=0,n=i.length;;){let r=t+n>>1;if(e<i[r])n=r;else if(e>=a[r])t=r+1;else return!0;if(t==n)return!1}}function s(e){return e>=127462&&e<=127487}var c=8205;function l(e,t,n=!0,r=!0){return(n?u:d)(e,t,r)}function u(e,t,n){if(t==e.length)return t;t&&p(e.charCodeAt(t))&&m(e.charCodeAt(t-1))&&t--;let r=f(e,t);for(t+=h(r);t<e.length;){let i=f(e,t);if(r==c||i==c||n&&o(i))t+=h(i),r=i;else if(s(i)){let n=0,r=t-2;for(;r>=0&&s(f(e,r));)n++,r-=2;if(n%2==0)break;t+=2}else break}return t}function d(e,t,n){for(;t>1;){let r=u(e,t-2,n);if(r<t)return r;t--}return 0}function f(e,t){let n=e.charCodeAt(t);if(!m(n)||t+1==e.length)return n;let r=e.charCodeAt(t+1);return p(r)?(n-55296<<10)+(r-56320)+65536:n}function p(e){return e>=56320&&e<57344}function m(e){return e>=55296&&e<56320}function h(e){return e<65536?1:2}var g=class e{lineAt(e){if(e<0||e>this.length)throw RangeError(`Invalid position ${e} in document of length ${this.length}`);return this.lineInner(e,!1,1,0)}line(e){if(e<1||e>this.lines)throw RangeError(`Invalid line number ${e} in ${this.lines}-line document`);return this.lineInner(e,!0,1,0)}replace(e,t,n){[e,t]=ae(this,e,t);let r=[];return this.decompose(0,e,r,2),n.length&&n.decompose(0,n.length,r,3),this.decompose(t,this.length,r,1),v.from(r,this.length-(t-e)+n.length)}append(e){return this.replace(this.length,this.length,e)}slice(e,t=this.length){[e,t]=ae(this,e,t);let n=[];return this.decompose(e,t,n,0),v.from(n,t-e)}eq(e){if(e==this)return!0;if(e.length!=this.length||e.lines!=this.lines)return!1;let t=this.scanIdentical(e,1),n=this.length-this.scanIdentical(e,-1),r=new b(this),i=new b(e);for(let e=t,a=t;;){if(r.next(e),i.next(e),e=0,r.lineBreak!=i.lineBreak||r.done!=i.done||r.value!=i.value)return!1;if(a+=r.value.length,r.done||a>=n)return!0}}iter(e=1){return new b(this,e)}iterRange(e,t=this.length){return new ne(this,e,t)}iterLines(e,t){let n;if(e==null)n=this.iter();else{t??=this.lines+1;let r=this.line(e).from;n=this.iterRange(r,Math.max(r,t==this.lines+1?this.length:t<=1?0:this.line(t-1).to))}return new re(n)}toString(){return this.sliceString(0)}toJSON(){let e=[];return this.flatten(e),e}constructor(){}static of(t){if(t.length==0)throw RangeError(`A document must have at least one line`);return t.length==1&&!t[0]?e.empty:t.length<=32?new _(t):v.from(_.split(t,[]))}},_=class e extends g{constructor(e,t=y(e)){super(),this.text=e,this.length=t}get lines(){return this.text.length}get children(){return null}lineInner(e,t,n,r){for(let i=0;;i++){let a=this.text[i],o=r+a.length;if((t?n:o)>=e)return new ie(r,o,n,a);r=o+1,n++}}decompose(t,n,r,i){let a=t<=0&&n>=this.length?this:new e(te(this.text,t,n),Math.min(n,this.length)-Math.max(0,t));if(i&1){let t=r.pop(),n=ee(a.text,t.text.slice(),0,a.length);if(n.length<=32)r.push(new e(n,t.length+a.length));else{let t=n.length>>1;r.push(new e(n.slice(0,t)),new e(n.slice(t)))}}else r.push(a)}replace(t,n,r){if(!(r instanceof e))return super.replace(t,n,r);[t,n]=ae(this,t,n);let i=ee(this.text,ee(r.text,te(this.text,0,t)),n),a=this.length+r.length-(n-t);return i.length<=32?new e(i,a):v.from(e.split(i,[]),a)}sliceString(e,t=this.length,n=`
|
|
2
2
|
`){[e,t]=ae(this,e,t);let r=``;for(let i=0,a=0;i<=t&&a<this.text.length;a++){let o=this.text[a],s=i+o.length;i>e&&a&&(r+=n),e<s&&t>i&&(r+=o.slice(Math.max(0,e-i),t-i)),i=s+1}return r}flatten(e){for(let t of this.text)e.push(t)}scanIdentical(){return 0}static split(t,n){let r=[],i=-1;for(let a of t)r.push(a),i+=a.length+1,r.length==32&&(n.push(new e(r,i)),r=[],i=-1);return i>-1&&n.push(new e(r,i)),n}},v=class e extends g{constructor(e,t){super(),this.children=e,this.length=t,this.lines=0;for(let t of e)this.lines+=t.lines}lineInner(e,t,n,r){for(let i=0;;i++){let a=this.children[i],o=r+a.length,s=n+a.lines-1;if((t?s:o)>=e)return a.lineInner(e,t,n,r);r=o+1,n=s+1}}decompose(e,t,n,r){for(let i=0,a=0;a<=t&&i<this.children.length;i++){let o=this.children[i],s=a+o.length;if(e<=s&&t>=a){let i=r&(a<=e|(s>=t?2:0));a>=e&&s<=t&&!i?n.push(o):o.decompose(e-a,t-a,n,i)}a=s+1}}replace(t,n,r){if([t,n]=ae(this,t,n),r.lines<this.lines)for(let i=0,a=0;i<this.children.length;i++){let o=this.children[i],s=a+o.length;if(t>=a&&n<=s){let c=o.replace(t-a,n-a,r),l=this.lines-o.lines+c.lines;if(c.lines<l>>4&&c.lines>l>>6){let a=this.children.slice();return a[i]=c,new e(a,this.length-(n-t)+r.length)}return super.replace(a,s,c)}a=s+1}return super.replace(t,n,r)}sliceString(e,t=this.length,n=`
|
|
3
3
|
`){[e,t]=ae(this,e,t);let r=``;for(let i=0,a=0;i<this.children.length&&a<=t;i++){let o=this.children[i],s=a+o.length;a>e&&i&&(r+=n),e<s&&t>a&&(r+=o.sliceString(e-a,t-a,n)),a=s+1}return r}flatten(e){for(let t of this.children)t.flatten(e)}scanIdentical(t,n){if(!(t instanceof e))return 0;let r=0,[i,a,o,s]=n>0?[0,0,this.children.length,t.children.length]:[this.children.length-1,t.children.length-1,-1,-1];for(;;i+=n,a+=n){if(i==o||a==s)return r;let e=this.children[i],c=t.children[a];if(e!=c)return r+e.scanIdentical(c,n);r+=e.length+1}}static from(t,n=t.reduce((e,t)=>e+t.length+1,-1)){let r=0;for(let e of t)r+=e.lines;if(r<32){let e=[];for(let n of t)n.flatten(e);return new _(e,n)}let i=Math.max(32,r>>5),a=i<<1,o=i>>1,s=[],c=0,l=-1,u=[];function d(t){let n;if(t.lines>a&&t instanceof e)for(let e of t.children)d(e);else t.lines>o&&(c>o||!c)?(f(),s.push(t)):t instanceof _&&c&&(n=u[u.length-1])instanceof _&&t.lines+n.lines<=32?(c+=t.lines,l+=t.length+1,u[u.length-1]=new _(n.text.concat(t.text),n.length+1+t.length)):(c+t.lines>i&&f(),c+=t.lines,l+=t.length+1,u.push(t))}function f(){c!=0&&(s.push(u.length==1?u[0]:e.from(u,l)),l=-1,c=u.length=0)}for(let e of t)d(e);return f(),s.length==1?s[0]:new e(s,n)}};g.empty=new _([``],0);function y(e){let t=-1;for(let n of e)t+=n.length+1;return t}function ee(e,t,n=0,r=1e9){for(let i=0,a=0,o=!0;a<e.length&&i<=r;a++){let s=e[a],c=i+s.length;c>=n&&(c>r&&(s=s.slice(0,r-i)),i<n&&(s=s.slice(n-i)),o?(t[t.length-1]+=s,o=!1):t.push(s)),i=c+1}return t}function te(e,t,n){return ee(e,[``],t,n)}var b=class{constructor(e,t=1){this.dir=t,this.done=!1,this.lineBreak=!1,this.value=``,this.nodes=[e],this.offsets=[t>0?1:(e instanceof _?e.text.length:e.children.length)<<1]}nextInner(e,t){for(this.done=this.lineBreak=!1;;){let n=this.nodes.length-1,r=this.nodes[n],i=this.offsets[n],a=i>>1,o=r instanceof _?r.text.length:r.children.length;if(a==(t>0?o:0)){if(n==0)return this.done=!0,this.value=``,this;t>0&&this.offsets[n-1]++,this.nodes.pop(),this.offsets.pop()}else if((i&1)==(t>0?0:1)){if(this.offsets[n]+=t,e==0)return this.lineBreak=!0,this.value=`
|
|
4
4
|
`,this;e--}else if(r instanceof _){let i=r.text[a+(t<0?-1:0)];if(this.offsets[n]+=t,i.length>Math.max(0,e))return this.value=e==0?i:t>0?i.slice(e):i.slice(0,i.length-e),this;e-=i.length}else{let i=r.children[a+(t<0?-1:0)];e>i.length?(e-=i.length,this.offsets[n]+=t):(t<0&&this.offsets[n]--,this.nodes.push(i),this.offsets.push(t>0?1:(i instanceof _?i.text.length:i.children.length)<<1))}}}next(e=0){return e<0&&(this.nextInner(-e,-this.dir),e=this.value.length),this.nextInner(e,this.dir)}},ne=class{constructor(e,t,n){this.value=``,this.done=!1,this.cursor=new b(e,t>n?-1:1),this.pos=t>n?e.length:0,this.from=Math.min(t,n),this.to=Math.max(t,n)}nextInner(e,t){if(t<0?this.pos<=this.from:this.pos>=this.to)return this.value=``,this.done=!0,this;e+=Math.max(0,t<0?this.pos-this.to:this.from-this.pos);let n=t<0?this.pos-this.from:this.to-this.pos;e>n&&(e=n),n-=e;let{value:r}=this.cursor.next(e);return this.pos+=(r.length+e)*t,this.value=r.length<=n?r:t<0?r.slice(r.length-n):r.slice(0,n),this.done=!this.value,this}next(e=0){return e<0?e=Math.max(e,this.from-this.pos):e>0&&(e=Math.min(e,this.to-this.pos)),this.nextInner(e,this.cursor.dir)}get lineBreak(){return this.cursor.lineBreak&&this.value!=``}},re=class{constructor(e){this.inner=e,this.afterBreak=!0,this.value=``,this.done=!1}next(e=0){let{done:t,lineBreak:n,value:r}=this.inner.next(e);return t&&this.afterBreak?(this.value=``,this.afterBreak=!1):t?(this.done=!0,this.value=``):n?this.afterBreak?this.value=``:(this.afterBreak=!0,this.next()):(this.value=r,this.afterBreak=!1),this}get lineBreak(){return!1}};typeof Symbol<`u`&&(g.prototype[Symbol.iterator]=function(){return this.iter()},b.prototype[Symbol.iterator]=ne.prototype[Symbol.iterator]=re.prototype[Symbol.iterator]=function(){return this});var ie=class{constructor(e,t,n,r){this.from=e,this.to=t,this.number=n,this.text=r}get length(){return this.to-this.from}};function ae(e,t,n){return t=Math.max(0,Math.min(e.length,t)),[t,Math.max(t,Math.min(e.length,n))]}function x(e,t,n=!0,r=!0){return l(e,t,n,r)}function oe(e){return e>=56320&&e<57344}function se(e){return e>=55296&&e<56320}function S(e,t){let n=e.charCodeAt(t);if(!se(n)||t+1==e.length)return n;let r=e.charCodeAt(t+1);return oe(r)?(n-55296<<10)+(r-56320)+65536:n}function ce(e){return e<=65535?String.fromCharCode(e):(e-=65536,String.fromCharCode((e>>10)+55296,(e&1023)+56320))}function le(e){return e<65536?1:2}var ue=/\r\n?|\n/,C=(function(e){return e[e.Simple=0]=`Simple`,e[e.TrackDel=1]=`TrackDel`,e[e.TrackBefore=2]=`TrackBefore`,e[e.TrackAfter=3]=`TrackAfter`,e})(C||={}),de=class e{constructor(e){this.sections=e}get length(){let e=0;for(let t=0;t<this.sections.length;t+=2)e+=this.sections[t];return e}get newLength(){let e=0;for(let t=0;t<this.sections.length;t+=2){let n=this.sections[t+1];e+=n<0?this.sections[t]:n}return e}get empty(){return this.sections.length==0||this.sections.length==2&&this.sections[1]<0}iterGaps(e){for(let t=0,n=0,r=0;t<this.sections.length;){let i=this.sections[t++],a=this.sections[t++];a<0?(e(n,r,i),r+=i):r+=a,n+=i}}iterChangedRanges(e,t=!1){me(this,e,t)}get invertedDesc(){let t=[];for(let e=0;e<this.sections.length;){let n=this.sections[e++],r=this.sections[e++];r<0?t.push(n,r):t.push(r,n)}return new e(t)}composeDesc(e){return this.empty?e:e.empty?this:ge(this,e)}mapDesc(e,t=!1){return e.empty?this:he(this,e,t)}mapPos(e,t=-1,n=C.Simple){let r=0,i=0;for(let a=0;a<this.sections.length;){let o=this.sections[a++],s=this.sections[a++],c=r+o;if(s<0){if(c>e)return i+(e-r);i+=o}else{if(n!=C.Simple&&c>=e&&(n==C.TrackDel&&r<e&&c>e||n==C.TrackBefore&&r<e||n==C.TrackAfter&&c>e))return null;if(c>e||c==e&&t<0&&!o)return e==r||t<0?i:i+s;i+=s}r=c}if(e>r)throw RangeError(`Position ${e} is out of range for changeset of length ${r}`);return i}touchesRange(e,t=e){for(let n=0,r=0;n<this.sections.length&&r<=t;){let i=this.sections[n++],a=this.sections[n++],o=r+i;if(a>=0&&r<=t&&o>=e)return r<e&&o>t?`cover`:!0;r=o}return!1}toString(){let e=``;for(let t=0;t<this.sections.length;){let n=this.sections[t++],r=this.sections[t++];e+=(e?` `:``)+n+(r>=0?`:`+r:``)}return e}toJSON(){return this.sections}static fromJSON(t){if(!Array.isArray(t)||t.length%2||t.some(e=>typeof e!=`number`))throw RangeError(`Invalid JSON representation of ChangeDesc`);return new e(t)}static create(t){return new e(t)}},fe=class e extends de{constructor(e,t){super(e),this.inserted=t}apply(e){if(this.length!=e.length)throw RangeError(`Applying change set to a document with the wrong length`);return me(this,(t,n,r,i,a)=>e=e.replace(r,r+(n-t),a),!1),e}mapDesc(e,t=!1){return he(this,e,t,!0)}invert(t){let n=this.sections.slice(),r=[];for(let e=0,i=0;e<n.length;e+=2){let a=n[e],o=n[e+1];if(o>=0){n[e]=o,n[e+1]=a;let s=e>>1;for(;r.length<s;)r.push(g.empty);r.push(a?t.slice(i,i+a):g.empty)}i+=a}return new e(n,r)}compose(e){return this.empty?e:e.empty?this:ge(this,e,!0)}map(e,t=!1){return e.empty?this:he(this,e,t,!0)}iterChanges(e,t=!1){me(this,e,t)}get desc(){return de.create(this.sections)}filter(t){let n=[],r=[],i=[],a=new _e(this);done:for(let e=0,o=0;;){let s=e==t.length?1e9:t[e++];for(;o<s||o==s&&a.len==0;){if(a.done)break done;let e=Math.min(a.len,s-o);w(i,e,-1);let t=a.ins==-1?-1:a.off==0?a.ins:0;w(n,e,t),t>0&&pe(r,n,a.text),a.forward(e),o+=e}let c=t[e++];for(;o<c;){if(a.done)break done;let e=Math.min(a.len,c-o);w(n,e,-1),w(i,e,a.ins==-1?-1:a.off==0?a.ins:0),a.forward(e),o+=e}}return{changes:new e(n,r),filtered:de.create(i)}}toJSON(){let e=[];for(let t=0;t<this.sections.length;t+=2){let n=this.sections[t],r=this.sections[t+1];r<0?e.push(n):r==0?e.push([n]):e.push([n].concat(this.inserted[t>>1].toJSON()))}return e}static of(t,n,r){let i=[],a=[],o=0,s=null;function c(t=!1){if(!t&&!i.length)return;o<n&&w(i,n-o,-1);let r=new e(i,a);s=s?s.compose(r.map(s)):r,i=[],a=[],o=0}function l(t){if(Array.isArray(t))for(let e of t)l(e);else if(t instanceof e){if(t.length!=n)throw RangeError(`Mismatched change set length (got ${t.length}, expected ${n})`);c(),s=s?s.compose(t.map(s)):t}else{let{from:e,to:s=e,insert:l}=t;if(e>s||e<0||s>n)throw RangeError(`Invalid change range ${e} to ${s} (in doc of length ${n})`);let u=l?typeof l==`string`?g.of(l.split(r||ue)):l:g.empty,d=u.length;if(e==s&&d==0)return;e<o&&c(),e>o&&w(i,e-o,-1),w(i,s-e,d),pe(a,i,u),o=s}}return l(t),c(!s),s}static empty(t){return new e(t?[t,-1]:[],[])}static fromJSON(t){if(!Array.isArray(t))throw RangeError(`Invalid JSON representation of ChangeSet`);let n=[],r=[];for(let e=0;e<t.length;e++){let i=t[e];if(typeof i==`number`)n.push(i,-1);else if(!Array.isArray(i)||typeof i[0]!=`number`||i.some((e,t)=>t&&typeof e!=`string`))throw RangeError(`Invalid JSON representation of ChangeSet`);else if(i.length==1)n.push(i[0],0);else{for(;r.length<e;)r.push(g.empty);r[e]=g.of(i.slice(1)),n.push(i[0],r[e].length)}}return new e(n,r)}static createSet(t,n){return new e(t,n)}};function w(e,t,n,r=!1){if(t==0&&n<=0)return;let i=e.length-2;i>=0&&n<=0&&n==e[i+1]?e[i]+=t:i>=0&&t==0&&e[i]==0?e[i+1]+=n:r?(e[i]+=t,e[i+1]+=n):e.push(t,n)}function pe(e,t,n){if(n.length==0)return;let r=t.length-2>>1;if(r<e.length)e[e.length-1]=e[e.length-1].append(n);else{for(;e.length<r;)e.push(g.empty);e.push(n)}}function me(e,t,n){let r=e.inserted;for(let i=0,a=0,o=0;o<e.sections.length;){let s=e.sections[o++],c=e.sections[o++];if(c<0)i+=s,a+=s;else{let l=i,u=a,d=g.empty;for(;l+=s,u+=c,c&&r&&(d=d.append(r[o-2>>1])),!(n||o==e.sections.length||e.sections[o+1]<0);)s=e.sections[o++],c=e.sections[o++];t(i,l,a,u,d),i=l,a=u}}}function he(e,t,n,r=!1){let i=[],a=r?[]:null,o=new _e(e),s=new _e(t);for(let e=-1;;)if(o.done&&s.len||s.done&&o.len)throw Error(`Mismatched change set lengths`);else if(o.ins==-1&&s.ins==-1){let e=Math.min(o.len,s.len);w(i,e,-1),o.forward(e),s.forward(e)}else if(s.ins>=0&&(o.ins<0||e==o.i||o.off==0&&(s.len<o.len||s.len==o.len&&!n))){let t=s.len;for(w(i,s.ins,-1);t;){let n=Math.min(o.len,t);o.ins>=0&&e<o.i&&o.len<=n&&(w(i,0,o.ins),a&&pe(a,i,o.text),e=o.i),o.forward(n),t-=n}s.next()}else if(o.ins>=0){let t=0,n=o.len;for(;n;)if(s.ins==-1){let e=Math.min(n,s.len);t+=e,n-=e,s.forward(e)}else if(s.ins==0&&s.len<n)n-=s.len,s.next();else break;w(i,t,e<o.i?o.ins:0),a&&e<o.i&&pe(a,i,o.text),e=o.i,o.forward(o.len-n)}else if(o.done&&s.done)return a?fe.createSet(i,a):de.create(i);else throw Error(`Mismatched change set lengths`)}function ge(e,t,n=!1){let r=[],i=n?[]:null,a=new _e(e),o=new _e(t);for(let e=!1;;)if(a.done&&o.done)return i?fe.createSet(r,i):de.create(r);else if(a.ins==0)w(r,a.len,0,e),a.next();else if(o.len==0&&!o.done)w(r,0,o.ins,e),i&&pe(i,r,o.text),o.next();else if(a.done||o.done)throw Error(`Mismatched change set lengths`);else{let t=Math.min(a.len2,o.len),n=r.length;if(a.ins==-1){let n=o.ins==-1?-1:o.off?0:o.ins;w(r,t,n,e),i&&n&&pe(i,r,o.text)}else o.ins==-1?(w(r,a.off?0:a.len,t,e),i&&pe(i,r,a.textBit(t))):(w(r,a.off?0:a.len,o.off?0:o.ins,e),i&&!o.off&&pe(i,r,o.text));e=(a.ins>t||o.ins>=0&&o.len>t)&&(e||r.length>n),a.forward2(t),o.forward(t)}}var _e=class{constructor(e){this.set=e,this.i=0,this.next()}next(){let{sections:e}=this.set;this.i<e.length?(this.len=e[this.i++],this.ins=e[this.i++]):(this.len=0,this.ins=-2),this.off=0}get done(){return this.ins==-2}get len2(){return this.ins<0?this.len:this.ins}get text(){let{inserted:e}=this.set,t=this.i-2>>1;return t>=e.length?g.empty:e[t]}textBit(e){let{inserted:t}=this.set,n=this.i-2>>1;return n>=t.length&&!e?g.empty:t[n].slice(this.off,e==null?void 0:this.off+e)}forward(e){e==this.len?this.next():(this.len-=e,this.off+=e)}forward2(e){this.ins==-1?this.forward(e):e==this.ins?this.next():(this.ins-=e,this.off+=e)}},ve=class e{constructor(e,t,n,r){this.from=e,this.to=t,this.flags=n,this.goalColumn=r}get anchor(){return this.flags&32?this.to:this.from}get head(){return this.flags&32?this.from:this.to}get empty(){return this.from==this.to}get assoc(){return this.flags&8?-1:this.flags&16?1:0}get undirectional(){return(this.flags&64)>0}get bidiLevel(){let e=this.flags&7;return e==7?null:e}map(t,n=-1){let r,i;return this.empty?r=i=t.mapPos(this.from,n):(r=t.mapPos(this.from,1),i=t.mapPos(this.to,-1)),r==this.from&&i==this.to?this:new e(r,i,this.flags,this.goalColumn)}extend(e,t=e,n=0){if(e<=this.anchor&&t>=this.anchor)return T.range(e,t,void 0,void 0,n);let r=Math.abs(e-this.anchor)>Math.abs(t-this.anchor)?e:t;return T.range(this.anchor,r,void 0,void 0,n)}eq(e,t=!1){return this.anchor==e.anchor&&this.head==e.head&&this.goalColumn==e.goalColumn&&(!t||!this.empty||this.assoc==e.assoc)}toJSON(){return{anchor:this.anchor,head:this.head}}static fromJSON(e){if(!e||typeof e.anchor!=`number`||typeof e.head!=`number`)throw RangeError(`Invalid JSON representation for SelectionRange`);return T.range(e.anchor,e.head)}static create(t,n,r,i){return new e(t,n,r,i)}},T=class e{constructor(e,t){this.ranges=e,this.mainIndex=t}map(t,n=-1){return t.empty?this:e.create(this.ranges.map(e=>e.map(t,n)),this.mainIndex)}eq(e,t=!1){if(this.ranges.length!=e.ranges.length||this.mainIndex!=e.mainIndex)return!1;for(let n=0;n<this.ranges.length;n++)if(!this.ranges[n].eq(e.ranges[n],t))return!1;return!0}get main(){return this.ranges[this.mainIndex]}asSingle(){return this.ranges.length==1?this:new e([this.main],0)}addRange(t,n=!0){return e.create([t].concat(this.ranges),n?0:this.mainIndex+1)}replaceRange(t,n=this.mainIndex){let r=this.ranges.slice();return r[n]=t,e.create(r,this.mainIndex)}toJSON(){return{ranges:this.ranges.map(e=>e.toJSON()),main:this.mainIndex}}static fromJSON(t){if(!t||!Array.isArray(t.ranges)||typeof t.main!=`number`||t.main>=t.ranges.length)throw RangeError(`Invalid JSON representation for EditorSelection`);return new e(t.ranges.map(e=>ve.fromJSON(e)),t.main)}static single(t,n=t){return new e([e.range(t,n)],0)}static create(t,n=0){if(t.length==0)throw RangeError(`A selection needs at least one range`);for(let r=0,i=0;i<t.length;i++){let a=t[i];if(a.empty?a.from<=r:a.from<r)return e.normalized(t.slice(),n);r=a.to}return new e(t,n)}static cursor(e,t=0,n,r){return ve.create(e,e,(t==0?0:t<0?8:16)|(n==null?7:Math.min(6,n)),r)}static range(e,t,n,r,i){let a=r==null?7:Math.min(6,r);return!i&&e!=t&&(i=t<e?1:-1),i&&(a|=i<0?8:16),t<e?ve.create(t,e,a|32,n):ve.create(e,t,a,n)}static undirectionalRange(e,t){return ve.create(e,t,64,void 0)}static normalized(t,n=0){let r=t[n];t.sort((e,t)=>e.from-t.from),n=t.indexOf(r);for(let r=1;r<t.length;r++){let i=t[r],a=t[r-1];if(i.empty?i.from<=a.to:i.from<a.to){let o=a.from,s=Math.max(i.to,a.to);r<=n&&n--,t.splice(--r,2,i.anchor>i.head?e.range(s,o):e.range(o,s))}}return new e(t,n)}};function ye(e,t){for(let n of e.ranges)if(n.to>t)throw RangeError(`Selection points outside of document`)}var be=0,E=class e{constructor(e,t,n,r,i){this.combine=e,this.compareInput=t,this.compare=n,this.isStatic=r,this.id=be++,this.default=e([]),this.extensions=typeof i==`function`?i(this):i}get reader(){return this}static define(t={}){return new e(t.combine||(e=>e),t.compareInput||((e,t)=>e===t),t.compare||(t.combine?(e,t)=>e===t:xe),!!t.static,t.enables)}of(e){return new Se([],this,0,e)}compute(e,t){if(this.isStatic)throw Error(`Can't compute a static facet`);return new Se(e,this,1,t)}computeN(e,t){if(this.isStatic)throw Error(`Can't compute a static facet`);return new Se(e,this,2,t)}from(e,t){return t||=e=>e,this.compute([e],n=>t(n.field(e)))}};function xe(e,t){return e==t||e.length==t.length&&e.every((e,n)=>e===t[n])}var Se=class{constructor(e,t,n,r){this.dependencies=e,this.facet=t,this.type=n,this.value=r,this.id=be++}dynamicSlot(e){let t=this.value,n=this.facet.compareInput,r=this.id,i=e[r]>>1,a=this.type==2,o=!1,s=!1,c=[];for(let t of this.dependencies)t==`doc`?o=!0:t==`selection`?s=!0:(e[t.id]??1)&1||c.push(e[t.id]);return{create(e){return e.values[i]=t(e),1},update(e,r){if(o&&r.docChanged||s&&(r.docChanged||r.selection)||we(e,c)){let r=t(e);if(a?!Ce(r,e.values[i],n):!n(r,e.values[i]))return e.values[i]=r,1}return 0},reconfigure:(e,o)=>{let s,c=o.config.address[r];if(c!=null){let r=Le(o,c);if(this.dependencies.every(t=>t instanceof E?o.facet(t)===e.facet(t):t instanceof De?o.field(t,!1)==e.field(t,!1):!0)||(a?Ce(s=t(e),r,n):n(s=t(e),r)))return e.values[i]=r,0}else s=t(e);return e.values[i]=s,1}}}get extension(){return this}};function Ce(e,t,n){if(e.length!=t.length)return!1;for(let r=0;r<e.length;r++)if(!n(e[r],t[r]))return!1;return!0}function we(e,t){let n=!1;for(let r of t)Ie(e,r)&1&&(n=!0);return n}function Te(e,t,n){let r=n.map(t=>e[t.id]),i=n.map(e=>e.type),a=r.filter(e=>!(e&1)),o=e[t.id]>>1;function s(e){let n=[];for(let t=0;t<r.length;t++){let a=Le(e,r[t]);if(i[t]==2)for(let e of a)n.push(e);else n.push(a)}return t.combine(n)}return{create(e){for(let t of r)Ie(e,t);return e.values[o]=s(e),1},update(e,n){if(!we(e,a))return 0;let r=s(e);return t.compare(r,e.values[o])?0:(e.values[o]=r,1)},reconfigure(e,i){let a=we(e,r),c=i.config.facets[t.id],l=i.facet(t);if(c&&!a&&xe(n,c))return e.values[o]=l,0;let u=s(e);return t.compare(u,l)?(e.values[o]=l,0):(e.values[o]=u,1)}}}var Ee=E.define({static:!0}),De=class e{constructor(e,t,n,r,i){this.id=e,this.createF=t,this.updateF=n,this.compareF=r,this.spec=i,this.provides=void 0}static define(t){let n=new e(be++,t.create,t.update,t.compare||((e,t)=>e===t),t);return t.provide&&(n.provides=t.provide(n)),n}create(e){return(e.facet(Ee).find(e=>e.field==this)?.create||this.createF)(e)}slot(e){let t=e[this.id]>>1;return{create:e=>(e.values[t]=this.create(e),1),update:(e,n)=>{let r=e.values[t],i=this.updateF(r,n);return this.compareF(r,i)?0:(e.values[t]=i,1)},reconfigure:(e,n)=>{let r=e.facet(Ee),i=n.facet(Ee),a;return(a=r.find(e=>e.field==this))&&a!=i.find(e=>e.field==this)?(e.values[t]=a.create(e),1):n.config.address[this.id]==null?(e.values[t]=this.create(e),1):(e.values[t]=n.field(this),0)}}}init(e){return[this,Ee.of({field:this,create:e})]}get extension(){return this}},Oe={lowest:4,low:3,default:2,high:1,highest:0};function ke(e){return t=>new je(t,e)}var Ae={highest:ke(Oe.highest),high:ke(Oe.high),default:ke(Oe.default),low:ke(Oe.low),lowest:ke(Oe.lowest)},je=class{constructor(e,t){this.inner=e,this.prec=t}get extension(){return this}},Me=class e{of(e){return new Ne(this,e)}reconfigure(t){return e.reconfigure.of({compartment:this,extension:t})}get(e){return e.config.compartments.get(this)}},Ne=class{constructor(e,t){this.compartment=e,this.inner=t}get extension(){return this}},Pe=class e{constructor(e,t,n,r,i,a){for(this.base=e,this.compartments=t,this.dynamicSlots=n,this.address=r,this.staticValues=i,this.facets=a,this.statusTemplate=[];this.statusTemplate.length<n.length;)this.statusTemplate.push(0)}staticFacet(e){let t=this.address[e.id];return t==null?e.default:this.staticValues[t>>1]}static resolve(t,n,r){let i=[],a=Object.create(null),o=new Map;for(let e of Fe(t,n,o))e instanceof De?i.push(e):(a[e.facet.id]||(a[e.facet.id]=[])).push(e);let s=Object.create(null),c=[],l=[];for(let e of i)s[e.id]=l.length<<1,l.push(t=>e.slot(t));let u=r?.config.facets;for(let e in a){let t=a[e],n=t[0].facet,i=u&&u[e]||[];if(t.every(e=>e.type==0)){if(s[n.id]=c.length<<1|1,xe(i,t))c.push(r.facet(n));else{let e=n.combine(t.map(e=>e.value));c.push(r&&n.compare(e,r.facet(n))?r.facet(n):e)}}else{for(let e of t)e.type==0?(s[e.id]=c.length<<1|1,c.push(e.value)):(s[e.id]=l.length<<1,l.push(t=>e.dynamicSlot(t)));s[n.id]=l.length<<1,l.push(e=>Te(e,n,t))}}let d=l.map(e=>e(s));return new e(t,o,d,s,c,a)}};function Fe(e,t,n){let r=[[],[],[],[],[]],i=new Map;function a(e,o){let s=i.get(e);if(s!=null){if(s<=o)return;let t=r[s].indexOf(e);t>-1&&r[s].splice(t,1),e instanceof Ne&&n.delete(e.compartment)}if(i.set(e,o),Array.isArray(e))for(let t of e)a(t,o);else if(e instanceof Ne){if(n.has(e.compartment))throw RangeError(`Duplicate use of compartment in extensions`);let r=t.get(e.compartment)||e.inner;n.set(e.compartment,r),a(r,o)}else if(e instanceof je)a(e.inner,e.prec);else if(e instanceof De)r[o].push(e),e.provides&&a(e.provides,o);else if(e instanceof Se)r[o].push(e),e.facet.extensions&&a(e.facet.extensions,Oe.default);else{let t=e.extension;if(!t)throw Error(`Unrecognized extension value in extension set (${e}).`);if(t==e)throw Error(`Unrecognized extension value in extension set (${e}). This sometimes happens because multiple instances of @codemirror/state are loaded, breaking instanceof checks.`);a(t,o)}}return a(e,Oe.default),r.reduce((e,t)=>e.concat(t))}function Ie(e,t){if(t&1)return 2;let n=t>>1,r=e.status[n];if(r==4)throw Error(`Cyclic dependency between fields and/or facets`);if(r&2)return r;e.status[n]=4;let i=e.computeSlot(e,e.config.dynamicSlots[n]);return e.status[n]=2|i}function Le(e,t){return t&1?e.config.staticValues[t>>1]:e.values[t>>1]}var Re=E.define(),ze=E.define({combine:e=>e.some(e=>e),static:!0}),Be=E.define({combine:e=>e.length?e[0]:void 0,static:!0}),Ve=E.define(),He=E.define(),Ue=E.define(),We=E.define({combine:e=>e.length?e[0]:!1}),Ge=class{constructor(e,t){this.type=e,this.value=t}static define(){return new Ke}},Ke=class{of(e){return new Ge(this,e)}},qe=class{constructor(e){this.map=e}of(e){return new D(this,e)}},D=class e{constructor(e,t){this.type=e,this.value=t}map(t){let n=this.type.map(this.value,t);return n===void 0?void 0:n==this.value?this:new e(this.type,n)}is(e){return this.type==e}static define(e={}){return new qe(e.map||(e=>e))}static mapEffects(e,t){if(!e.length)return e;let n=[];for(let r of e){let e=r.map(t);e&&n.push(e)}return n}};D.reconfigure=D.define(),D.appendConfig=D.define();var Je=class e{constructor(t,n,r,i,a,o){this.startState=t,this.changes=n,this.selection=r,this.effects=i,this.annotations=a,this.scrollIntoView=o,this._doc=null,this._state=null,r&&ye(r,n.newLength),a.some(t=>t.type==e.time)||(this.annotations=a.concat(e.time.of(Date.now())))}static create(t,n,r,i,a,o){return new e(t,n,r,i,a,o)}get newDoc(){return this._doc||=this.changes.apply(this.startState.doc)}get newSelection(){return this.selection||this.startState.selection.map(this.changes)}get state(){return this._state||this.startState.applyTransaction(this),this._state}annotation(e){for(let t of this.annotations)if(t.type==e)return t.value}get docChanged(){return!this.changes.empty}get reconfigured(){return this.startState.config!=this.state.config}isUserEvent(t){let n=this.annotation(e.userEvent);return!!(n&&(n==t||n.length>t.length&&n.slice(0,t.length)==t&&n[t.length]==`.`))}};Je.time=Ge.define(),Je.userEvent=Ge.define(),Je.addToHistory=Ge.define(),Je.remote=Ge.define();function Ye(e,t){let n=[];for(let r=0,i=0;;){let a,o;if(r<e.length&&(i==t.length||t[i]>=e[r]))a=e[r++],o=e[r++];else if(i<t.length)a=t[i++],o=t[i++];else return n;!n.length||n[n.length-1]<a?n.push(a,o):n[n.length-1]<o&&(n[n.length-1]=o)}}function Xe(e,t,n){let r,i,a;return n?(r=t.changes,i=fe.empty(t.changes.length),a=e.changes.compose(t.changes)):(r=t.changes.map(e.changes),i=e.changes.mapDesc(t.changes,!0),a=e.changes.compose(r)),{changes:a,selection:t.selection?t.selection.map(i):e.selection?.map(r),effects:D.mapEffects(e.effects,r).concat(D.mapEffects(t.effects,i)),annotations:e.annotations.length?e.annotations.concat(t.annotations):t.annotations,scrollIntoView:e.scrollIntoView||t.scrollIntoView}}function Ze(e,t,n){let r=t.selection,i=nt(t.annotations);return t.userEvent&&(i=i.concat(Je.userEvent.of(t.userEvent))),{changes:t.changes instanceof fe?t.changes:fe.of(t.changes||[],n,e.facet(Be)),selection:r&&(r instanceof T?r:T.single(r.anchor,r.head)),effects:nt(t.effects),annotations:i,scrollIntoView:!!t.scrollIntoView}}function Qe(e,t,n){let r=Ze(e,t.length?t[0]:{},e.doc.length);t.length&&t[0].filter===!1&&(n=!1);for(let i=1;i<t.length;i++){t[i].filter===!1&&(n=!1);let a=!!t[i].sequential;r=Xe(r,Ze(e,t[i],a?r.changes.newLength:e.doc.length),a)}let i=Je.create(e,r.changes,r.selection,r.effects,r.annotations,r.scrollIntoView);return et(n?$e(i):i)}function $e(e){let t=e.startState,n=!0;for(let r of t.facet(Ve)){let t=r(e);if(t===!1){n=!1;break}Array.isArray(t)&&(n=n===!0?t:Ye(n,t))}if(n!==!0){let r,i;if(n===!1)i=e.changes.invertedDesc,r=fe.empty(t.doc.length);else{let t=e.changes.filter(n);r=t.changes,i=t.filtered.mapDesc(t.changes).invertedDesc}e=Je.create(t,r,e.selection&&e.selection.map(i),D.mapEffects(e.effects,i),e.annotations,e.scrollIntoView)}let r=t.facet(He);for(let n=r.length-1;n>=0;n--){let i=r[n](e);e=i instanceof Je?i:Array.isArray(i)&&i.length==1&&i[0]instanceof Je?i[0]:Qe(t,nt(i),!1)}return e}function et(e){let t=e.startState,n=t.facet(Ue),r=e;for(let i=n.length-1;i>=0;i--){let a=n[i](e);a&&Object.keys(a).length&&(r=Xe(r,Ze(t,a,e.changes.newLength),!0))}return r==e?e:Je.create(t,e.changes,e.selection,r.effects,r.annotations,r.scrollIntoView)}var tt=[];function nt(e){return e==null?tt:Array.isArray(e)?e:[e]}var O=(function(e){return e[e.Word=0]=`Word`,e[e.Space=1]=`Space`,e[e.Other=2]=`Other`,e})(O||={}),rt=/[\u00df\u0587\u0590-\u05f4\u0600-\u06ff\u3040-\u309f\u30a0-\u30ff\u3400-\u4db5\u4e00-\u9fcc\uac00-\ud7af]/,it;try{it=RegExp(`[\\p{Alphabetic}\\p{Number}_]`,`u`)}catch{}function at(e){if(it)return it.test(e);for(let t=0;t<e.length;t++){let n=e[t];if(/\w/.test(n)||n>``&&(n.toUpperCase()!=n.toLowerCase()||rt.test(n)))return!0}return!1}function ot(e){return t=>{if(!/\S/.test(t))return O.Space;if(at(t))return O.Word;for(let n=0;n<e.length;n++)if(t.indexOf(e[n])>-1)return O.Word;return O.Other}}var k=class e{constructor(e,t,n,r,i,a){this.config=e,this.doc=t,this.selection=n,this.values=r,this.status=e.statusTemplate.slice(),this.computeSlot=i,a&&(a._state=this);for(let e=0;e<this.config.dynamicSlots.length;e++)Ie(this,e<<1);this.computeSlot=null}field(e,t=!0){let n=this.config.address[e.id];if(n==null){if(t)throw RangeError(`Field is not present in this state`);return}return Ie(this,n),Le(this,n)}update(...e){return Qe(this,e,!0)}applyTransaction(t){let n=this.config,{base:r,compartments:i}=n;for(let e of t.effects)e.is(Me.reconfigure)?(n&&=(i=new Map,n.compartments.forEach((e,t)=>i.set(t,e)),null),i.set(e.value.compartment,e.value.extension)):e.is(D.reconfigure)?(n=null,r=e.value):e.is(D.appendConfig)&&(n=null,r=nt(r).concat(e.value));let a;n?a=t.startState.values.slice():(n=Pe.resolve(r,i,this),a=new e(n,this.doc,this.selection,n.dynamicSlots.map(()=>null),(e,t)=>t.reconfigure(e,this),null).values);let o=t.startState.facet(ze)?t.newSelection:t.newSelection.asSingle();new e(n,t.newDoc,o,a,(e,n)=>n.update(e,t),t)}replaceSelection(e){return typeof e==`string`&&(e=this.toText(e)),this.changeByRange(t=>({changes:{from:t.from,to:t.to,insert:e},range:T.cursor(t.from+e.length)}))}changeByRange(e){let t=this.selection,n=e(t.ranges[0]),r=this.changes(n.changes),i=[n.range],a=nt(n.effects);for(let n=1;n<t.ranges.length;n++){let o=e(t.ranges[n]),s=this.changes(o.changes),c=s.map(r);for(let e=0;e<n;e++)i[e]=i[e].map(c);let l=r.mapDesc(s,!0);i.push(o.range.map(l)),r=r.compose(c),a=D.mapEffects(a,c).concat(D.mapEffects(nt(o.effects),l))}return{changes:r,selection:T.create(i,t.mainIndex),effects:a}}changes(t=[]){return t instanceof fe?t:fe.of(t,this.doc.length,this.facet(e.lineSeparator))}toText(t){return g.of(t.split(this.facet(e.lineSeparator)||ue))}sliceDoc(e=0,t=this.doc.length){return this.doc.sliceString(e,t,this.lineBreak)}facet(e){let t=this.config.address[e.id];return t==null?e.default:(Ie(this,t),Le(this,t))}toJSON(e){let t={doc:this.sliceDoc(),selection:this.selection.toJSON()};if(e)for(let n in e){let r=e[n];r instanceof De&&this.config.address[r.id]!=null&&(t[n]=r.spec.toJSON(this.field(e[n]),this))}return t}static fromJSON(t,n={},r){if(!t||typeof t.doc!=`string`)throw RangeError(`Invalid JSON representation for EditorState`);let i=[];if(r){for(let e in r)if(Object.prototype.hasOwnProperty.call(t,e)){let n=r[e],a=t[e];i.push(n.init(e=>n.spec.fromJSON(a,e)))}}return e.create({doc:t.doc,selection:T.fromJSON(t.selection),extensions:n.extensions?i.concat([n.extensions]):i})}static create(t={}){let n=Pe.resolve(t.extensions||[],new Map),r=t.doc instanceof g?t.doc:g.of((t.doc||``).split(n.staticFacet(e.lineSeparator)||ue)),i=t.selection?t.selection instanceof T?t.selection:T.single(t.selection.anchor,t.selection.head):T.single(0);return ye(i,r.length),n.staticFacet(ze)||(i=i.asSingle()),new e(n,r,i,n.dynamicSlots.map(()=>null),(e,t)=>t.create(e),null)}get tabSize(){return this.facet(e.tabSize)}get lineBreak(){return this.facet(e.lineSeparator)||`
|
package/dist/static/assets/{abnfDiagram-VCTEODGH-ClLYq500.js → abnfDiagram-VCTEODGH-Evc_Nl9C.js}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{m as e,t}from"./mermaid-parser.core-
|
|
1
|
+
import{m as e,t}from"./mermaid-parser.core-CixuxjLk.js";import{n}from"./chunk-Y2CYZVJY-DsF7k-Jl.js";import{m as r}from"./src-B6xuSHsQ.js";import"./chunk-DU6HZSFF-bRzgeAW0.js";import{n as i,r as a,t as o}from"./chunk-SVP7TREG-Dd5N_bjg.js";import{t as s}from"./chunk-JWPE2WC7-DVXcaiue.js";import"./mermaid.core-BxxJ5VMb.js";var c=e().RailroadAbnf.parser.LangiumParser,l=n(e=>{let t=e.alternatives.map(u);return t.length===1?t[0]:{type:`choice`,alternatives:t}},`transformAlternation`),u=n(e=>{let t=e.elements.map(f);return t.length===1?t[0]:{type:`sequence`,elements:t}},`transformConcatenation`),d=n(e=>{if(e.includes(`*`)){let[t,n]=e.split(`*`);return{min:t?parseInt(t,10):0,max:n?parseInt(n,10):1/0}}let t=parseInt(e,10);return{min:t,max:t}},`parseRepeat`),f=n(e=>{let t=p(e.primary);if(!e.repeat)return t;let{min:n,max:r}=d(e.repeat);return n===0&&r===1?{type:`optional`,element:t}:{type:`repetition`,element:t,min:n,max:r}},`transformElement`),p=n(e=>{switch(e.$type){case`AbnfStringLiteral`:return{type:`terminal`,value:e.value};case`AbnfNumVal`:return{type:`terminal`,value:e.value};case`AbnfRuleName`:return{type:`nonterminal`,name:e.name};case`AbnfGroup`:return l(e.element);case`AbnfOptionalGroup`:return{type:`optional`,element:l(e.element)};default:throw Error(`Unsupported ABNF primary node: ${e.$type}`)}},`transformPrimary`),m=n(e=>({name:e.name,definition:l(e.definition)}),`transformRule`),h=n(e=>{s(e,o),e.title&&o.setTitle(e.title),e.rules.map(e=>o.addRule(m(e)))},`populateDb`),g={parser:{parse:n(e=>{o.clear(),r.debug(`[ABNF Parser] Starting Langium parse`);let n=c.parse(e);if(n.lexerErrors.length>0||n.parserErrors.length>0)throw new t(n);let i=n.value;r.debug(`[ABNF Parser] Parsed rules:`,i.rules.length),h(i),r.debug(`[ABNF Parser] Parse complete`)},`parse`),parser:{yy:o}},db:o,renderer:a,styles:i};export{g as diagram};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import"./chunk-FOHPRMQF-DHwB1DNv.js";import{M as e}from"./mermaid-parser.core-CixuxjLk.js";export{e as createArchitectureServices};
|