@hyperpuncher/pi-ui 0.54.0 → 0.54.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (123) hide show
  1. package/README.md +2 -1
  2. package/dist/npm/server-main.js +2 -2
  3. package/package.json +1 -1
  4. package/static/app.css +1 -1
  5. package/static/build/chunks/angular-html-9t1z861h.js +1 -0
  6. package/static/build/chunks/{angular-ts-wpa0ntyd.js → angular-ts-yces35hm.js} +1 -1
  7. package/static/build/chunks/bat-sykj1aa7.js +1 -0
  8. package/static/build/chunks/bibtex-f2ty1dx3.js +1 -0
  9. package/static/build/chunks/{bsl-ekqr89hb.js → bsl-dhrmm1jj.js} +1 -1
  10. package/static/build/chunks/cmake-5z22d5ee.js +1 -0
  11. package/static/build/chunks/{code-theme-a5ywgc5d.js → code-theme-ame4fn6s.js} +1 -1
  12. package/static/build/chunks/csv-j1nr2egp.js +1 -0
  13. package/static/build/chunks/{erb-ssgyt8yk.js → erb-5ke38pz0.js} +1 -1
  14. package/static/build/chunks/{fortran-fixed-form-yqrdwjab.js → fortran-fixed-form-eawvv1am.js} +1 -1
  15. package/static/build/chunks/fortran-free-form-wpe8st7g.js +1 -0
  16. package/static/build/chunks/fsharp-9e2dnvk9.js +1 -0
  17. package/static/build/chunks/{gdresource-4fj86xjd.js → gdresource-gfrqcbcg.js} +1 -1
  18. package/static/build/chunks/gdscript-5nb9fzmy.js +1 -0
  19. package/static/build/chunks/gdshader-ba7x07gg.js +1 -0
  20. package/static/build/chunks/{graphql-ddq2qt0v.js → graphql-6dembcfz.js} +1 -1
  21. package/static/build/chunks/haml-fs8t607p.js +1 -0
  22. package/static/build/chunks/handlebars-qxp1hmm5.js +1 -0
  23. package/static/build/chunks/haxe-63hhvesn.js +1 -0
  24. package/static/build/chunks/hlsl-99cqj6by.js +1 -0
  25. package/static/build/chunks/{http-q7kc4tj6.js → http-r101fvka.js} +1 -1
  26. package/static/build/chunks/{hurl-megk96q7.js → hurl-hzcngdvj.js} +1 -1
  27. package/static/build/chunks/{hxml-6ch21be5.js → hxml-psqp1nsp.js} +1 -1
  28. package/static/build/chunks/{index-wg53q3y0.js → index-hynb8kca.js} +13 -13
  29. package/static/build/chunks/jsonc-15dhk5z3.js +1 -0
  30. package/static/build/chunks/jsx-h2hggewx.js +1 -0
  31. package/static/build/chunks/{julia-mgfk32ya.js → julia-427d8qjf.js} +1 -1
  32. package/static/build/chunks/{just-rjtrh43a.js → just-ezfq4t7j.js} +1 -1
  33. package/static/build/chunks/latex-41146jxq.js +1 -0
  34. package/static/build/chunks/log-jvqtv319.js +1 -0
  35. package/static/build/chunks/{main-hw5rht8r.js → main-098d512h.js} +2 -2
  36. package/static/build/chunks/{main-dedmwdfs.js → main-0g6qtbm7.js} +2 -2
  37. package/static/build/chunks/{main-17y72e2k.js → main-25shm7ha.js} +2 -2
  38. package/static/build/chunks/{main-q53pa7e1.js → main-29fmzgdz.js} +1 -1
  39. package/static/build/chunks/{main-c4y2m713.js → main-5dymmn8v.js} +2 -2
  40. package/static/build/chunks/{main-b4j28cva.js → main-6yfb802z.js} +2 -2
  41. package/static/build/chunks/{main-s13hhth9.js → main-8nztd0r5.js} +2 -2
  42. package/static/build/chunks/{main-epsspf8t.js → main-93jq8y6w.js} +2 -2
  43. package/static/build/chunks/{main-vqg1a9c8.js → main-9brcqyac.js} +2 -2
  44. package/static/build/chunks/{main-sh14kcap.js → main-9kwttvkk.js} +2 -2
  45. package/static/build/chunks/{main-v6yya2rp.js → main-aabsw5zs.js} +2 -2
  46. package/static/build/chunks/{main-q0zg1fh4.js → main-brz9x4r1.js} +2 -2
  47. package/static/build/chunks/{main-z8x5tyev.js → main-ch19n8dg.js} +2 -2
  48. package/static/build/chunks/{main-q6xq4ymt.js → main-d2jmsjyj.js} +2 -2
  49. package/static/build/chunks/{main-60jmcz5q.js → main-d5kpdgb3.js} +2 -2
  50. package/static/build/chunks/{main-drhnr196.js → main-dckqpwtw.js} +1 -1
  51. package/static/build/chunks/{main-0tfr6zpw.js → main-e3dchyzh.js} +2 -2
  52. package/static/build/chunks/{main-aj799kta.js → main-gza5czsg.js} +2 -2
  53. package/static/build/chunks/{main-0m5jmwcm.js → main-jx88bb4k.js} +2 -2
  54. package/static/build/chunks/{main-z9ya2zyf.js → main-kqvqxvs9.js} +15 -15
  55. package/static/build/chunks/{main-m23prjtn.js → main-m3gqgzj2.js} +2 -2
  56. package/static/build/chunks/{main-75b7czew.js → main-mvvsw424.js} +2 -2
  57. package/static/build/chunks/{main-0eq28dnr.js → main-mwqd3xej.js} +2 -2
  58. package/static/build/chunks/{main-wg1rgmq8.js → main-mx73v44m.js} +2 -2
  59. package/static/build/chunks/{main-320cz9m0.js → main-n1amqv0y.js} +2 -2
  60. package/static/build/chunks/{main-1h81h5tc.js → main-n2gksx7q.js} +2 -2
  61. package/static/build/chunks/{main-fxxjfq5x.js → main-na165zc6.js} +2 -2
  62. package/static/build/chunks/{main-w4ktfx46.js → main-qjaabb97.js} +2 -2
  63. package/static/build/chunks/{main-fnryfy0w.js → main-trx88rdg.js} +2 -2
  64. package/static/build/chunks/{main-12hs60r7.js → main-v9hveeqk.js} +2 -2
  65. package/static/build/chunks/{main-svq37c5n.js → main-vyjr38wk.js} +2 -2
  66. package/static/build/chunks/{main-g5cvv1jb.js → main-wjv4knsy.js} +2 -2
  67. package/static/build/chunks/{main-n354gvtx.js → main-xxtt0kat.js} +2 -2
  68. package/static/build/chunks/{main-ncmhhxpc.js → main-ze318jkq.js} +2 -2
  69. package/static/build/chunks/{main-pf4sasgx.js → main-zne4xghc.js} +1 -1
  70. package/static/build/chunks/{nextflow-vsm9mewk.js → nextflow-ecafj8kf.js} +1 -1
  71. package/static/build/chunks/nextflow-groovy-xvrmcddz.js +1 -0
  72. package/static/build/chunks/{nim-rjrps4r1.js → nim-jcfn78ep.js} +1 -1
  73. package/static/build/chunks/ocaml-3t7q77vf.js +1 -0
  74. package/static/build/chunks/{org-41f97gct.js → org-83gwmman.js} +1 -1
  75. package/static/build/chunks/powershell-bft3fprh.js +1 -0
  76. package/static/build/chunks/pug-67fg5zkc.js +1 -0
  77. package/static/build/chunks/{rst-qgaks9ys.js → rst-0j7thaq8.js} +1 -1
  78. package/static/build/chunks/{ruby-10gnpa9m.js → ruby-h41d1jye.js} +1 -1
  79. package/static/build/chunks/sdbl-pe5gn8zr.js +1 -0
  80. package/static/build/chunks/{shaderlab-qdakc6m7.js → shaderlab-b58smhfe.js} +1 -1
  81. package/static/build/chunks/{sparql-hrn3zm8y.js → sparql-wz87e1pd.js} +1 -1
  82. package/static/build/chunks/stylus-x9mf4enc.js +1 -0
  83. package/static/build/chunks/swift-zn3gdbrz.js +1 -0
  84. package/static/build/chunks/system-verilog-gcgja1bf.js +1 -0
  85. package/static/build/chunks/tex-pxg823cm.js +1 -0
  86. package/static/build/chunks/turtle-rygwqp46.js +1 -0
  87. package/static/build/chunks/{twig-1rd58h0d.js → twig-zr6z9qb5.js} +1 -1
  88. package/static/build/chunks/{typst-pg1czsjz.js → typst-5t62efc4.js} +1 -1
  89. package/static/build/chunks/verilog-jp5dkmgg.js +1 -0
  90. package/static/build/chunks/{vue-vine-d46tfy6m.js → vue-vine-x1pd5ydv.js} +1 -1
  91. package/static/build/chunks/{workspace-review-73s0n7hc.js → workspace-review-5r77y1ft.js} +11 -11
  92. package/static/build/chunks/zig-98xskbfp.js +1 -0
  93. package/static/build/main.js +4 -4
  94. package/static/build/chunks/angular-html-z4fqs47k.js +0 -1
  95. package/static/build/chunks/bat-4986hex0.js +0 -1
  96. package/static/build/chunks/bibtex-n2nhe0wx.js +0 -1
  97. package/static/build/chunks/cmake-86bharq9.js +0 -1
  98. package/static/build/chunks/csv-kzar1n4v.js +0 -1
  99. package/static/build/chunks/fortran-free-form-4tb589s6.js +0 -1
  100. package/static/build/chunks/fsharp-5v62w2jq.js +0 -1
  101. package/static/build/chunks/gdscript-4h1shwqj.js +0 -1
  102. package/static/build/chunks/gdshader-5za4a2j9.js +0 -1
  103. package/static/build/chunks/haml-vsp7hh3f.js +0 -1
  104. package/static/build/chunks/handlebars-59gn5dj7.js +0 -1
  105. package/static/build/chunks/haxe-zvpwvpvn.js +0 -1
  106. package/static/build/chunks/hlsl-svktsk04.js +0 -1
  107. package/static/build/chunks/jsonc-ssb35fmp.js +0 -1
  108. package/static/build/chunks/jsx-9ct7s1py.js +0 -1
  109. package/static/build/chunks/latex-xha4wvvc.js +0 -1
  110. package/static/build/chunks/log-jnggnqka.js +0 -1
  111. package/static/build/chunks/nextflow-groovy-b4w15vkr.js +0 -1
  112. package/static/build/chunks/ocaml-yt0kq4b3.js +0 -1
  113. package/static/build/chunks/powershell-8cv2gpfc.js +0 -1
  114. package/static/build/chunks/pug-s4e1p0x9.js +0 -1
  115. package/static/build/chunks/sdbl-rw2b1wff.js +0 -1
  116. package/static/build/chunks/stylus-051daetz.js +0 -1
  117. package/static/build/chunks/swift-c3wmm92e.js +0 -1
  118. package/static/build/chunks/system-verilog-cysaabmv.js +0 -1
  119. package/static/build/chunks/tex-yj0j713p.js +0 -1
  120. package/static/build/chunks/turtle-am0wf2w4.js +0 -1
  121. package/static/build/chunks/verilog-1bxyw8xv.js +0 -1
  122. package/static/build/chunks/zig-rdjds834.js +0 -1
  123. /package/static/build/chunks/{main-0spvwn6n.js → main-m9dfhq6m.js} +0 -0
package/README.md CHANGED
@@ -130,7 +130,8 @@ all options with their defaults:
130
130
  "autoTitle": {
131
131
  "enabled": true,
132
132
  "models": [
133
- "openai-codex/gpt-5.6-luna:minimal",
133
+ "openai/gpt-6-luna:low",
134
+ "openai-codex/gpt-6-luna:low",
134
135
  "opencode-go/deepseek-v4.1-flash:off"
135
136
  ],
136
137
  "prompt": "use lowercase"
@@ -1,6 +1,6 @@
1
1
  #!/usr/bin/env bun
2
2
  // @bun
3
- var Uun=Object.create;var{getPrototypeOf:Hun,defineProperty:Aj,getOwnPropertyNames:n9e,getOwnPropertyDescriptor:zun}=Object,wue=Object.prototype.hasOwnProperty;function a9e(e){return this[e]}var Wun,Kun,Yt=(e,t,n)=>{var a=e!=null&&typeof e==="object";if(a){var r=t?Wun??=new WeakMap:Kun??=new WeakMap,i=r.get(e);if(i)return i}n=e!=null?Uun(Hun(e)):{};let o=t||!e||!e.__esModule||!wue.call(e,"default")?Aj(n,"default",{value:e,enumerable:!0}):n;if(e&&typeof e==="object"||typeof e==="function"){for(let s of n9e(e))if(!wue.call(o,s))Aj(o,s,{get:a9e.bind(e,s),enumerable:!0})}if(a)r.set(e,o);return o},Vun=(e)=>{var t=(t9e??=new WeakMap).get(e),n;if(t)return t;if(t=Aj({},"__esModule",{value:!0}),e&&typeof e==="object"||typeof e==="function"){for(var a of n9e(e))if(!wue.call(t,a))Aj(t,a,{get:a9e.bind(e,a),enumerable:!(n=zun(e,a))||n.enumerable})}return t9e.set(e,t),t},t9e,Je=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports);var Yun=(e)=>e;function Zun(e,t){this[e]=Yun.bind(null,t)}var Te=(e,t)=>{for(var n in t)Aj(e,n,{get:t[n],enumerable:!0,configurable:!0,set:Zun.bind(t,n)})};var E=(e,t,n)=>()=>{if(e)try{t=e(e=0)}catch(a){n=[a]}if(n)throw n[0];return t};var Wt=import.meta.require;async function wk(e,t={}){let n=Bun.spawn([e,...t.args??[]],{cwd:t.cwd,env:{...process.env,...t.env},stdin:t.stdin??"ignore",stdout:"pipe",stderr:"pipe",windowsHide:!0,signal:t.signal,timeout:t.timeout}),[a,r,i]=await Promise.all([new Response(n.stdout).bytes(),new Response(n.stderr).bytes(),n.exited]);return{code:i,stdout:a,stderr:r,success:i===0,timedOut:t.timeout!==void 0&&n.signalCode==="SIGTERM"&&!t.signal?.aborted}}function zq(e,t){return Error.isError(e)&&"code"in e&&e.code===t}function Wq(e){return zq(e,"EEXIST")}function Ts(e){return zq(e,"ENOENT")}function kue(e){return zq(e,"EACCES")||zq(e,"EPERM")}var Kq,Ud;var pS=E(()=>{Kq=globalThis.navigator?.platform??globalThis.process?.platform,Ud=Kq==="win32"||Kq?.startsWith("Win")?"windows":Kq==="darwin"||Kq?.startsWith("Mac")?"darwin":"linux"});var y9e;var b9e=E(()=>{y9e={name:"@hyperpuncher/pi-ui",version:"0.54.0",description:"keyboard-first minimal gui for pi",homepage:"https://pi-ui.app",bugs:"https://github.com/hyperpuncher/pi-ui/issues",license:"MIT",repository:{type:"git",url:"git+https://github.com/hyperpuncher/pi-ui.git"},bin:{"pi-ui":"dist/npm/server-main.js"},files:["dist/npm","static","!static/app"],type:"module",imports:{"#src/*":"./src/*","#static/*":"./static/*","#testing/assertions":"./tests/src/testing/assertions.ts","#testing/temp":"./tests/src/testing/temp.ts"},publishConfig:{access:"public"},scripts:{dev:"bun run assets:build && bun src/server-main.ts","assets:build":"bun scripts/check-typebox.ts && bun scripts/generate-icons.ts && bun scripts/build-assets.ts",build:"bun run assets:build && bun scripts/build.ts","npm:build":"bun run assets:build && bun scripts/build-npm.ts",prepack:"bun run npm:build",run:"./dist/pi-ui",release:"bun scripts/release.ts","schema:build":"bun scripts/generate-config-schema.ts","schema:check":"bun scripts/generate-config-schema.ts --check",fmt:"bun run schema:build && dsfmt --write . && bunx oxfmt",lint:"bunx oxlint && bun run lint:css","lint:css":'bunx stylelint "src/**/*.css"',"lint:fix":"bunx oxlint --fix && bun run lint:css --fix",check:"bun run schema:check && bunx tsc --noEmit",test:"bun test --parallel=8",audit:"bunx fallow audit"},devDependencies:{"@earendil-works/pi-ai":"^1.0.0","@earendil-works/pi-coding-agent":"^1.0.0","@earendil-works/pi-tui":"^1.0.0","@iconify-json/lucide":"^1.2.138","@kitajs/html":"5.0.0-next.1","@oxlint/plugins":"1.86.0","@pierre/diffs":"^1.5.1","@pierre/trees":"^1.0.0-beta.6","@starfederation/datastar-sdk":"^1.0.0","@types/bun":"^1.4.2","open-props":"^1.7.23",oxfmt:"^0.71.0",oxlint:"1.86.0",stylelint:"^17.16.0","stylelint-config-standard":"^40.0.0",typebox:"1.3.27",typescript:"^7.0.2"},engines:{bun:">=1.4.0"},packageManager:"bun@1.4.2",patchedDependencies:{"@shikijs/primitive@4.4.3":"patches/@shikijs%2Fprimitive@4.4.3.patch"}}});function w9e(e){return e.length===1&&e[0]==="--version"}var Yq;var Tue=E(()=>{b9e();Yq=y9e.version});var k9e=1000,x9e=!1,_9e=!1,Rue="selector",Zq="mode",Que="elements",fj="namespace",v9e="useViewTransition",Pue="signals",C9e="onlyIfMissing",Fue,jue,E9e="outer",B9e="html";var Mue=E(()=>{Fue=["outer","inner","replace","prepend","append","before","after","remove"],jue=["html","svg","mathml"]});var I9e,Lue;var Nue=E(()=>{Mue();I9e={"Cache-Control":"no-cache",Connection:"keep-alive","Content-Type":"text/event-stream"},Lue={[Zq]:E9e,[fj]:B9e,[v9e]:x9e,[C9e]:_9e}});class $ue{constructor(){}validateElementPatchMode(e){if(!Fue.includes(e))throw Error(`Invalid ElementPatchMode: "${e}". Valid modes are: ${Fue.join(", ")}`)}validateNamespace(e){if(!jue.includes(e))throw Error(`Invalid namespace: "${e}". Valid namespaces are: ${jue.join(", ")}`)}validateRequired(e,t){if(!e||e.trim()==="")throw Error(`${t} is required and cannot be empty`)}send(e,t,n){let{eventId:a,retryDuration:r}=n||{},i=[`event: ${e}
3
+ var Uun=Object.create;var{getPrototypeOf:Hun,defineProperty:Aj,getOwnPropertyNames:n9e,getOwnPropertyDescriptor:zun}=Object,wue=Object.prototype.hasOwnProperty;function a9e(e){return this[e]}var Wun,Kun,Yt=(e,t,n)=>{var a=e!=null&&typeof e==="object";if(a){var r=t?Wun??=new WeakMap:Kun??=new WeakMap,i=r.get(e);if(i)return i}n=e!=null?Uun(Hun(e)):{};let o=t||!e||!e.__esModule||!wue.call(e,"default")?Aj(n,"default",{value:e,enumerable:!0}):n;if(e&&typeof e==="object"||typeof e==="function"){for(let s of n9e(e))if(!wue.call(o,s))Aj(o,s,{get:a9e.bind(e,s),enumerable:!0})}if(a)r.set(e,o);return o},Vun=(e)=>{var t=(t9e??=new WeakMap).get(e),n;if(t)return t;if(t=Aj({},"__esModule",{value:!0}),e&&typeof e==="object"||typeof e==="function"){for(var a of n9e(e))if(!wue.call(t,a))Aj(t,a,{get:a9e.bind(e,a),enumerable:!(n=zun(e,a))||n.enumerable})}return t9e.set(e,t),t},t9e,Je=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports);var Yun=(e)=>e;function Zun(e,t){this[e]=Yun.bind(null,t)}var Te=(e,t)=>{for(var n in t)Aj(e,n,{get:t[n],enumerable:!0,configurable:!0,set:Zun.bind(t,n)})};var E=(e,t,n)=>()=>{if(e)try{t=e(e=0)}catch(a){n=[a]}if(n)throw n[0];return t};var Wt=import.meta.require;async function wk(e,t={}){let n=Bun.spawn([e,...t.args??[]],{cwd:t.cwd,env:{...process.env,...t.env},stdin:t.stdin??"ignore",stdout:"pipe",stderr:"pipe",windowsHide:!0,signal:t.signal,timeout:t.timeout}),[a,r,i]=await Promise.all([new Response(n.stdout).bytes(),new Response(n.stderr).bytes(),n.exited]);return{code:i,stdout:a,stderr:r,success:i===0,timedOut:t.timeout!==void 0&&n.signalCode==="SIGTERM"&&!t.signal?.aborted}}function zq(e,t){return Error.isError(e)&&"code"in e&&e.code===t}function Wq(e){return zq(e,"EEXIST")}function Ts(e){return zq(e,"ENOENT")}function kue(e){return zq(e,"EACCES")||zq(e,"EPERM")}var Kq,Ud;var pS=E(()=>{Kq=globalThis.navigator?.platform??globalThis.process?.platform,Ud=Kq==="win32"||Kq?.startsWith("Win")?"windows":Kq==="darwin"||Kq?.startsWith("Mac")?"darwin":"linux"});var y9e;var b9e=E(()=>{y9e={name:"@hyperpuncher/pi-ui",version:"0.54.1",description:"keyboard-first minimal gui for pi",homepage:"https://pi-ui.app",bugs:"https://github.com/hyperpuncher/pi-ui/issues",license:"MIT",repository:{type:"git",url:"git+https://github.com/hyperpuncher/pi-ui.git"},bin:{"pi-ui":"dist/npm/server-main.js"},files:["dist/npm","static","!static/app"],type:"module",imports:{"#src/*":"./src/*","#static/*":"./static/*","#testing/assertions":"./tests/src/testing/assertions.ts","#testing/temp":"./tests/src/testing/temp.ts"},publishConfig:{access:"public"},scripts:{dev:"bun run assets:build && bun src/server-main.ts","assets:build":"bun scripts/check-typebox.ts && bun scripts/generate-icons.ts && bun scripts/build-assets.ts",build:"bun run assets:build && bun scripts/build.ts","npm:build":"bun run assets:build && bun scripts/build-npm.ts",prepack:"bun run npm:build",run:"./dist/pi-ui",release:"bun scripts/release.ts","schema:build":"bun scripts/generate-config-schema.ts","schema:check":"bun scripts/generate-config-schema.ts --check",fmt:"bun run schema:build && dsfmt --write . && bunx oxfmt",lint:"bunx oxlint && bun run lint:css","lint:css":'bunx stylelint "src/**/*.css"',"lint:fix":"bunx oxlint --fix && bun run lint:css --fix",check:"bun run schema:check && bunx tsc --noEmit",test:"bun test --parallel=8",audit:"bunx fallow audit"},devDependencies:{"@earendil-works/pi-ai":"^1.0.0","@earendil-works/pi-coding-agent":"^1.0.0","@earendil-works/pi-tui":"^1.0.0","@iconify-json/lucide":"^1.2.138","@kitajs/html":"5.0.0-next.1","@oxlint/plugins":"1.86.0","@pierre/diffs":"^1.5.1","@pierre/trees":"^1.0.0-beta.6","@starfederation/datastar-sdk":"^1.0.0","@types/bun":"^1.4.2","open-props":"^1.7.23",oxfmt:"^0.71.0",oxlint:"1.86.0",stylelint:"^17.16.0","stylelint-config-standard":"^40.0.0",typebox:"1.3.27",typescript:"^7.0.2"},engines:{bun:">=1.4.0"},packageManager:"bun@1.4.2",patchedDependencies:{"@shikijs/primitive@4.4.3":"patches/@shikijs%2Fprimitive@4.4.3.patch"}}});function w9e(e){return e.length===1&&e[0]==="--version"}var Yq;var Tue=E(()=>{b9e();Yq=y9e.version});var k9e=1000,x9e=!1,_9e=!1,Rue="selector",Zq="mode",Que="elements",fj="namespace",v9e="useViewTransition",Pue="signals",C9e="onlyIfMissing",Fue,jue,E9e="outer",B9e="html";var Mue=E(()=>{Fue=["outer","inner","replace","prepend","append","before","after","remove"],jue=["html","svg","mathml"]});var I9e,Lue;var Nue=E(()=>{Mue();I9e={"Cache-Control":"no-cache",Connection:"keep-alive","Content-Type":"text/event-stream"},Lue={[Zq]:E9e,[fj]:B9e,[v9e]:x9e,[C9e]:_9e}});class $ue{constructor(){}validateElementPatchMode(e){if(!Fue.includes(e))throw Error(`Invalid ElementPatchMode: "${e}". Valid modes are: ${Fue.join(", ")}`)}validateNamespace(e){if(!jue.includes(e))throw Error(`Invalid namespace: "${e}". Valid namespaces are: ${jue.join(", ")}`)}validateRequired(e,t){if(!e||e.trim()==="")throw Error(`${t} is required and cannot be empty`)}send(e,t,n){let{eventId:a,retryDuration:r}=n||{},i=[`event: ${e}
4
4
  `],o=a?[`id: ${a}
5
5
  `]:[],s=!r||r===1000?[]:[`retry: ${r??k9e}
6
6
  `];return i.concat(o,s,t.map((c)=>`data: ${c}
@@ -3483,7 +3483,7 @@ ${n.body}`)].join(`
3483
3483
  `),messages:[{role:"user",content:`First user message:
3484
3484
  <user-message>
3485
3485
  ${a}
3486
- </user-message>`,timestamp:Date.now()}]};for(let c of i)try{let u={maxTokens:512,maxRetries:0,timeoutMs:30000};if(c.reasoning!=="off")u.reasoning=c.reasoning;let l=await e.services.modelRuntime.completeSimple(c.model,s,u);if(["error","aborted","deferred"].includes(l.stopReason))continue;let p=h7a(ks(l.content," "));if(p&&!/[?\uFF1F]$/.test(p))return p}catch{}return}function g7a(e){let t=e.find((n)=>n.type==="message"&&n.message.role==="user");if(!t||t.type!=="message"||t.message.role!=="user")return;return f7a(t.message).slice(0,A7a)||void 0}function f7a(e){if(e.role!=="user"&&e.role!=="assistant")return"";return Icn(ks(e.content," "))}function Icn(e){return[...e].map((n)=>{let a=n.charCodeAt(0);return a<32||a===127?" ":n}).join("").replace(/\s+/g," ").trim()}function h7a(e){let t=e.replace(/^```(?:text)?\s*/i,"").replace(/\s*```$/,"").split(/\r?\n/).find((n)=>n.trim())?.trim();if(!t)return;if(t=t.replace(/^(?:title\s*:\s*)/i,"").trim(),t.startsWith('"')&&t.endsWith('"')||t.startsWith("'")&&t.endsWith("'")||t.startsWith("`")&&t.endsWith("`"))t=t.slice(1,-1).trim();if(t=Icn(t),!t)return;return t}var zle,A7a=6000;var J$e=E(()=>{xs();xv();zle={enabled:!0,models:["openai-codex/gpt-5.6-luna:minimal","opencode-go/deepseek-v4.1-flash:off"],prompt:"use lowercase"}});import{AsyncLocalStorage as b7a}from"async_hooks";function Tcn(e,t){let n=t?.trim();if(!n)return;y7a(),Dcn.set(e,n);let a=e.streamSimple.bind(e);e.streamSimple=(r,i,o)=>eOe.run(n,()=>a(r,i,{...o,env:{HTTP_PROXY:n,HTTPS_PROXY:n,...o?.env}}))}function sj(e,t){let n=Dcn.get(e);return n?eOe.run(n,t):t()}function y7a(){if(Scn)return;Scn=!0,globalThis.fetch=w7a}function w7a(e,t){let n=eOe.getStore();if(!n||t&&"proxy"in t)return X$e(e,t);let a=k7a(e);if(!a||!x7a(a))return X$e(e,t);return X$e(e,{...t,proxy:n})}function k7a(e){if(Rn(e))return URL.parse(e)??void 0;if(e instanceof URL)return e;if(e instanceof Request)return URL.parse(e.url)??void 0;return}function x7a(e){let t=(process.env.no_proxy||process.env.NO_PROXY||"").toLowerCase();if(!t)return!0;if(t==="*")return!1;let n=e.hostname,a=Number.parseInt(e.port,10)||v7a(e.protocol);return t.split(/[,\s]/).filter(Boolean).every((i)=>_7a(i,n,a))}function _7a(e,t,n){let a=e.match(/^(.+):(\d+)$/),r=a?a[1]:e,i=a?Number.parseInt(a[2],10):0;if(i&&i!==n)return!0;if(!/^[.*]/.test(r))return t!==r;if(r.startsWith("*"))r=r.slice(1);return!t.endsWith(r)}function v7a(e){if(e==="http:"||e==="ws:")return 80;if(e==="https:"||e==="wss:")return 443;if(e==="ftp:")return 21;if(e==="gopher:")return 70;return 0}var X$e,eOe,Dcn,Scn=!1;var Wle=E(()=>{X$e=globalThis.fetch,eOe=new b7a,Dcn=new WeakMap});async function Rcn(e){let t=C7a(e);try{let n=await wk(t.command,{args:t.args});if(!n.success){let a=new TextDecoder().decode(n.stderr).trim();throw Error(a||`Trash command failed with code ${n.code}`)}}catch(n){if(Ts(n)){await Bun.file(e).delete();return}throw n}}function C7a(e){if(Ud==="darwin")return{command:"osascript",args:["-e",`tell application "Finder" to delete POSIX file ${JSON.stringify(e)}`]};if(Ud==="windows")return{command:"powershell",args:["-NoProfile","-Command",`Add-Type -AssemblyName Microsoft.VisualBasic; [Microsoft.VisualBasic.FileIO.FileSystem]::DeleteFile(${JSON.stringify(e)}, 'OnlyErrorDialogs', 'SendToRecycleBin')`]};return{command:"trash",args:[e]}}var Qcn=E(()=>{pS()});var Fcn="./quickjs-r1pq2107.wasm";var Pcn=()=>{};import{resolve as B7a}from"path";var jcn=E(()=>{nr();Pcn();Xvt(B7a(import.meta.dir,Fcn))});class tOe{getRuntime;state;onAuthChanged;loginRun;loginSequence=0;constructor(e,t,n){this.getRuntime=e;this.state=t;this.onAuthChanged=n}openLogin(e){this.cancelLogin();let t=this.getLoginProviders();if(e){let a=e.toLowerCase();t=t.filter((r)=>r.id.toLowerCase()===a||r.name.toLowerCase()===a)}let n={mode:"login",phase:"providers",providers:t,progress:[]};if(e&&t.length===0)n.error=`Provider not found: ${e}`;this.state.setAuthDialog(n)}openLogout(){this.cancelLogin();let e=this.getRuntime();this.state.setAuthDialog({mode:"logout",phase:"providers",providers:[],status:"Loading stored credentials\u2026",progress:[]}),e.services.modelRuntime.listCredentials().then((t)=>{let n=this.state.authDialog;if(!n||n.mode!=="logout")return;let a=t.map(({providerId:r,type:i})=>{let o=e.services.modelRuntime.getProvider(r);return{id:r,name:o?.name??r,authType:i,subscription:i==="oauth"?o?.auth.oauth?.isSubscription===!0:void 0}}).sort(Mcn);this.state.setAuthDialog({...n,providers:a,status:void 0})}).catch((t)=>{let n=this.state.authDialog;if(!n||n.mode!=="logout")return;this.state.setAuthDialog({...n,status:void 0,error:Bl(t)})})}startLogin(e,t){if(!I7a(t))return!1;let n=this.getLoginProviders().find((i)=>i.id===e&&i.authType===t);if(!n)return!1;let a=this.getRuntime().services.modelRuntime.getProvider(n.id),r=n.authType==="oauth"?a?.auth.oauth:a?.auth.apiKey;if(!r)return!1;if(this.cancelLogin(),n.authType==="api_key"&&!r.login)return this.state.setAuthDialog({mode:"login",phase:"result",providers:[],providerId:n.id,providerName:n.name,status:`${r.name} is configured outside pi-ui.`,progress:[]}),!0;return this.startProviderLogin(n),!0}submitInput(e){let t=this.state.authDialog,n=this.loginRun;if(!t||!n?.inputResolver||t.phase!=="api-key"&&t.phase!=="oauth")return!1;let a=n.inputResolver;return a(e),this.state.setAuthDialog({...t,prompt:void 0,error:void 0,status:"Waiting for authentication\u2026"}),!0}logout(e){let t=this.state.authDialog;if(t?.mode!=="logout")return!1;let n=t.providers.find((r)=>r.id===e);if(!n)return!1;return this.getRuntime().services.modelRuntime.logout(n.id).then(()=>{if(this.state.authDialog?.mode!=="logout")return;this.completeAuthentication(n.authType==="oauth"?`Logged out of ${n.name}.`:`Removed the stored API key for ${n.name}.`)}).catch((r)=>{let i=this.state.authDialog;if(!i||i.mode!=="logout")return;this.state.setAuthDialog({...i,phase:"result",error:Bl(r)})}),!0}close(){this.cancelLogin(),this.state.setAuthDialog(void 0)}dispose(){this.cancelLogin()}getLoginProviders(){let e=[];for(let t of this.getRuntime().services.modelRuntime.getProviders()){if(t.auth.oauth)e.push({id:t.id,name:t.name,authType:"oauth",subscription:t.auth.oauth.isSubscription===!0});if(t.auth.apiKey)e.push({id:t.id,name:t.name,authType:"api_key"})}return e.sort(Mcn)}startProviderLogin(e){let t={id:++this.loginSequence,abortController:new AbortController};this.loginRun=t,this.state.setAuthDialog({mode:"login",phase:e.authType==="api_key"?"api-key":"oauth",providers:[],providerId:e.id,providerName:e.name,status:"Starting authentication\u2026",progress:[]});let{modelRuntime:n,settingsManager:a}=this.getRuntime().services;sj(n,()=>n.login(e.id,e.authType,{signal:t.abortController.signal,prompt:(r)=>this.promptForInput(t,r),notify:(r)=>this.notifyAuthentication(t,r)},{getDeviceId:()=>a.getOrCreateDeviceId()})).then(()=>{if(!this.isCurrentRun(t))return;this.loginRun=void 0,this.completeAuthentication(e.authType==="oauth"?`Logged in to ${e.name}.`:`Saved credentials for ${e.name}.`)}).catch((r)=>{if(!this.isCurrentRun(t))return;this.loginRun=void 0,this.patchAuthenticationDialog({phase:"result",error:`Login failed: ${Bl(r)}`,prompt:void 0})})}promptForInput(e,t){if(!this.isCurrentRun(e))return Promise.reject(Error("Login cancelled"));if(t.signal?.aborted)return Promise.reject(Error("Login cancelled"));this.patchAuthenticationDialog({prompt:{id:crypto.randomUUID(),message:t.message,placeholder:"placeholder"in t?t.placeholder:void 0,secret:t.type==="secret",options:t.type==="select"?t.options.map(({id:s,label:c})=>({id:s,label:c})):void 0},status:void 0,error:void 0});let{promise:n,resolve:a,reject:r}=Promise.withResolvers(),i=(s)=>{if(e.inputResolver!==i)return;if(e.inputResolver=void 0,t.signal?.removeEventListener("abort",o),s===void 0)r(Error("Login cancelled"));else a(s)},o=()=>i(void 0);return e.inputResolver=i,t.signal?.addEventListener("abort",o,{once:!0}),n}notifyAuthentication(e,t){if(!this.isCurrentRun(e))return;if(t.type==="auth_url"){Lcn(t.url),this.patchAuthenticationDialog({url:t.url,instructions:t.instructions,status:"Complete authentication in your browser."});return}if(t.type==="device_code"){Lcn(t.verificationUri),this.patchAuthenticationDialog({url:t.verificationUri,deviceCode:t.userCode,status:"Waiting for authentication\u2026"});return}if(t.type==="info"){this.patchAuthenticationDialog({status:t.message,url:t.links?.[0]?.url});return}let n=this.state.authDialog;this.patchAuthenticationDialog({progress:[...n?.progress??[],t.message].slice(-6)})}completeAuthentication(e){this.onAuthChanged();let t=this.state.authDialog;this.state.setAuthDialog({mode:t?.mode??"login",phase:"result",providers:[],providerId:t?.providerId,providerName:t?.providerName,status:t?.mode==="logout"?e:`${e} Select a model to begin.`,progress:[]})}patchAuthenticationDialog(e){let t=this.state.authDialog;if(!t||t.phase!=="api-key"&&t.phase!=="oauth")return;this.state.setAuthDialog({...t,...e})}isCurrentRun(e){return this.loginRun?.id===e.id}cancelLogin(){let e=this.loginRun;if(!e)return;this.loginRun=void 0,e.abortController.abort(),e.inputResolver?.(void 0)}}function I7a(e){return e==="oauth"||e==="api_key"}function Mcn(e,t){let n=e.name.localeCompare(t.name);if(n!==0)return n;return e.authType.localeCompare(t.authType)}function Lcn(e){kf(e)}var Ncn=E(()=>{MI();tE();Wle()});function $cn(e,t,n,a){return e===n&&t===a}class nOe{runtimes=new Map;nextGeneration=1;failures=0;allocateGeneration(){return this.nextGeneration++}get invariantFailureCount(){return this.failures}get(e){return this.runtimes.get(e)}has(e){return this.runtimes.has(e)}values(){return this.runtimes.values()}entries(){return this.runtimes.entries()}register(e,t){let n=this.runtimes.get(e);if(n&&n!==t)throw this.failures+=1,new cj;this.runtimes.set(e,t)}delete(e){return this.runtimes.delete(e)}beginActivation(e){let t=this.runtimes.get(e);if(!t)return;let n=!1;return{runtime:t,commit:()=>{if(n)return;if(n=!0,this.runtimes.get(e)!==t)throw this.failures+=1,new cj;this.runtimes.delete(e)},rollback:()=>{n=!0}}}liveCount(e){let t=e?1:0;for(let n of this.runtimes.values())if(n.status==="running"||n.observedRunning)t+=1;return t}clear(){this.runtimes.clear()}}var cj;var Ocn=E(()=>{cj=class cj extends Error{constructor(e="Runtime ownership invariant failed"){super(e);this.name="RuntimeOwnershipInvariantError"}}});function Kle(e){if(e.missedTokens<S7a&&e.missedCost<D7a)return;let t=e.missedCost>=0.01?` (~$${e.missedCost.toFixed(2)})`:"",n="cache miss";if(e.modelChanged)n="cache miss after model switch";else if(e.idleMs>=Uce)n=`cache miss after ${Math.round(e.idleMs/60000)}m idle`;return{title:n,text:`${yx(e.missedTokens)} tokens re-billed${t}`}}var S7a=20000,D7a=0.1;var aOe=()=>{};class rOe{store;#e=[];#t=new Map;#a=new Map;#n;#r;#u;#f=!0;constructor(e){this.store=e}context(e){return{select:(t,n,a)=>this.select(e,t,n,a),confirm:(t,n,a)=>this.confirm(e,t,n,a),input:(t,n,a)=>this.input(e,t,n,a),notify:(t,n="info")=>{if(!e())return;this.store.appendMessage("notice",n==="info"?t:`${n}: ${t}`)},onTerminalInput:()=>Jy("raw terminal input"),setStatus:(t,n)=>{if(!e())return;if(n===void 0)this.#t.delete(t);else this.#t.set(t,n);this.store.setExtensionStatuses(this.#t.entries().map(([a,r])=>({key:a,text:r})).toArray())},setWorkingMessage:(t)=>{if(!e())return;this.#u=t,this.syncWorking()},setWorkingVisible:(t)=>{if(!e())return;this.#f=t,this.syncWorking()},setWorkingIndicator:(t)=>{if(!e())return;this.#r=R7a(t),this.syncWorking()},setHiddenThinkingLabel:(t)=>{if(e()&&t!==void 0)Jy("custom thinking labels")},setWidget:(t,n,a)=>{if(!e())return;if(n===void 0)this.#a.delete(t);else if(Array.isArray(n))this.#a.set(t,{key:t,lines:[...n],placement:a?.placement??"aboveEditor"});else Jy("component widgets");this.store.setExtensionWidgets(this.#a.values().toArray())},setFooter:(t)=>{if(e()&&t)Jy("custom footer components")},setHeader:(t)=>{if(e()&&t)Jy("custom header components")},setTitle:(t)=>{if(e())this.store.setDocumentTitle(t)},custom:async()=>Jy("custom TUI components"),pasteToEditor:(t)=>{if(!e())return;this.setEditorText(`${this.store.promptEditorText}${t}`)},setEditorText:(t)=>{if(e())this.setEditorText(t)},getEditorText:()=>e()?this.store.promptEditorText:"",editor:(t,n)=>this.editor(e,t,n),addAutocompleteProvider:()=>{if(e())Jy("autocomplete providers")},setEditorComponent:(t)=>{if(e()&&t)Jy("custom editor components")},getEditorComponent:()=>{return},theme:T7a,getAllThemes:()=>[],getTheme:()=>{return},setTheme:()=>({success:!1,error:"TUI themes are unavailable in pi-ui"}),getToolsExpanded:()=>!1,setToolsExpanded:()=>{if(e())Jy("global tool expansion state")}}}respond(e,t,n){if(this.#n?.dialog.id!==e)return!1;let a=this.#n;return this.finish(a),a.respond(t,n),this.showNext(),!0}cancelAll(){let e=[this.#n,...this.#e].filter((t)=>t!==void 0);this.#n=void 0,this.#e.length=0;for(let t of e)this.cleanup(t),t.respond(void 0,!0);this.#t.clear(),this.#a.clear(),this.#r=void 0,this.#u=void 0,this.#f=!0,this.store.setExtensionDialog(void 0),this.store.setExtensionStatuses([]),this.store.setExtensionWidgets([]),this.syncWorking(),this.store.setDocumentTitle("pi-ui")}select(e,t,n,a){if(!e())return Promise.resolve(void 0);let{promise:r,resolve:i}=Promise.withResolvers();return this.enqueue({dialog:{id:crypto.randomUUID(),kind:"select",title:t,options:[...n]},respond:(o,s)=>i(!s&&o!==void 0&&n.includes(o)?o:void 0)},a),r}confirm(e,t,n,a){if(!e())return Promise.resolve(!1);let{promise:r,resolve:i}=Promise.withResolvers();return this.enqueue({dialog:{id:crypto.randomUUID(),kind:"confirm",title:t,message:n},respond:(o,s)=>i(!s&&o==="confirm")},a),r}input(e,t,n,a){return this.textDialog(e,{id:crypto.randomUUID(),kind:"input",title:t,placeholder:n},a)}editor(e,t,n){return this.textDialog(e,{id:crypto.randomUUID(),kind:"editor",title:t,prefill:n})}textDialog(e,t,n){if(!e())return Promise.resolve(void 0);let{promise:a,resolve:r}=Promise.withResolvers();return this.enqueue({dialog:t,respond:(i,o)=>r(o?void 0:i??"")},n),a}enqueue(e,t){if(t?.signal?.aborted){e.respond(void 0,!0);return}if(e.signal=t?.signal,e.signal)e.abort=()=>this.abort(e),e.signal.addEventListener("abort",e.abort,{once:!0});if(t?.timeout!==void 0)e.timer=setTimeout(()=>this.abort(e),t.timeout);this.#e.push(e),this.showNext()}showNext(){if(this.#n)return;this.#n=this.#e.shift(),this.store.setExtensionDialog(this.#n?.dialog)}abort(e){if(e===this.#n){this.finish(e),e.respond(void 0,!0),this.showNext();return}let t=this.#e.indexOf(e);if(t<0)return;this.#e.splice(t,1),this.cleanup(e),e.respond(void 0,!0)}finish(e){this.cleanup(e),this.#n=void 0,this.store.setExtensionDialog(void 0)}cleanup(e){if(e.timer!==void 0)clearTimeout(e.timer);if(e.signal&&e.abort)e.signal.removeEventListener("abort",e.abort)}setEditorText(e){this.store.setPromptEditorText(e)}syncWorking(){this.store.setExtensionWorking({message:this.#u,visible:this.#f,indicator:this.#r})}}function R7a(e){if(!e?.frames)return;return e.frames[0]??""}function Jy(e){throw Error(`${e} are not supported by the pi-ui web interface`)}var T7a;var qcn=E(()=>{T7a=new Proxy({},{get:()=>Jy("TUI themes")})});class iOe{getRuntime;state;onModelsChanged;operation;constructor(e,t,n){this.getRuntime=e;this.state=t;this.onModelsChanged=n}open(){this.cancelOperation(),this.state.setLlamaDialog({models:[],status:"Loading models\u2026"}),this.refreshDialog()}close(){this.cancelOperation(),this.state.setLlamaDialog(void 0)}toggle(e){let t=this.state.llamaDialog,n=t?.models.find((r)=>r.id===e);if(!t||!n||this.operation)return!1;let a={abortController:new AbortController,modelId:e,load:!Q7a(n.status)};return this.operation=a,this.state.setLlamaDialog({...t,busyModel:e,status:a.load?`Loading ${e}\u2026`:`Unloading ${e}\u2026`,error:void 0}),this.run(a),!0}dispose(){this.cancelOperation()}async refreshDialog(){try{let e=await this.client();if(!this.state.llamaDialog)return;let t=await e.list({signal:AbortSignal.timeout(15000)});if(!this.state.llamaDialog)return;this.state.setLlamaDialog({models:t.map(Ucn),serverUrl:e.serverUrl})}catch(e){if(!this.state.llamaDialog)return;this.state.setLlamaDialog({models:[],error:Bl(e)})}}async run(e){let{modelId:t,load:n,abortController:a}=e;try{let r=await this.client();if(e.client=r,n)await r.loadAndWait(t,({message:o,ratio:s})=>{if(this.operation===e)this.updateDialog({progress:{label:o,ratio:s}})},a.signal);else await r.unloadAndWait(t,a.signal);let i=await r.list({signal:a.signal});if(await this.getRuntime().services.modelRuntime.refresh({providers:[Gm],signal:a.signal}),this.operation!==e||!this.state.llamaDialog)return;this.operation=void 0,a.abort(),this.state.setLlamaDialog({models:i.map(Ucn),serverUrl:r.serverUrl,status:n?`Loaded ${t}.`:`Unloaded ${t}.`}),this.onModelsChanged()}catch(r){if(this.operation!==e||a.signal.aborted)return;this.operation=void 0,this.updateDialog({busyModel:void 0,progress:void 0,status:void 0,error:Bl(r)})}}async client(){let e=await this.getRuntime().services.modelRuntime.getAuth(Gm);if(!e)throw Gcn();let t=e.env?.LLAMA_BASE_URL??e.auth.baseUrl;if(!t)throw Gcn();return new Ov(t,e.auth.apiKey)}updateDialog(e){let t=this.state.llamaDialog;if(t)this.state.setLlamaDialog({...t,...e})}cancelOperation(){let e=this.operation;if(!e)return;if(this.operation=void 0,e.abortController.abort(),e.load&&e.client)e.client.unload(e.modelId,AbortSignal.timeout(15000)).catch(()=>{})}}function Gcn(){return Error("Configure llama.cpp with /login llama.cpp first.")}function Q7a(e){return e==="loaded"||e==="sleeping"}function Ucn(e){return{id:e.id,status:e.status.value}}var Hcn=E(()=>{Nce();tE()});var zcn;var Wcn=E(()=>{Nce();zcn={name:Gm,builtin:!0,factory:(e)=>{e.registerProvider(Lce().provider)},hidden:!0}});class oOe{getRuntime;state;onModelChanged;constructor(e,t,n){this.getRuntime=e;this.state=t;this.onModelChanged=n}async set(e){let t=this.findOrReport(e);if(!t)return!1;let n=this.getRuntime();return await n.session.setModel(t,{persist:!1}),n.services.settingsManager.setDefaultModelAndProvider(t.provider,t.id),await n.services.settingsManager.flush(),this.onModelChanged(),!0}async cycle(e="forward"){let t=this.getRuntime();if(!await t.session.cycleModel(e,{persist:!0}))return!1;return await t.services.settingsManager.flush(),this.onModelChanged(),!0}async toggleScoped(e){let t=this.findOrReport(e);if(!t)return!1;let n=this.getRuntime(),a=n.session,r=`${t.provider}/${t.id}`,i=a.scopedModels.filter((u)=>`${u.model.provider}/${u.model.id}`!==r);if(i.length===a.scopedModels.length)i.push({model:t});let o=n.services.modelRuntime,s=0;for(let u of o.getModels())if(o.hasConfiguredAuth(u.provider))s+=1;let c=i.length===0||i.length===s?void 0:i.map((u)=>`${u.model.provider}/${u.model.id}`);return n.services.settingsManager.setEnabledModels(c),await n.services.settingsManager.flush(),a.setScopedModels(c===void 0?[]:i),this.sync(),!0}sync(){let e=this.getRuntime(),t=e.session,n=e.services.modelRuntime,a=t.model?`${t.model.provider}/${t.model.id}`:void 0,r=new Set(t.scopedModels.map((o)=>`${o.model.provider}/${o.model.id}`)),i=n.getModels().map((o)=>({id:o.id,provider:o.provider,name:o.name??o.id,configured:n.hasConfiguredAuth(o.provider),scoped:r.has(`${o.provider}/${o.id}`)})).filter((o)=>o.configured||`${o.provider}/${o.id}`===a).sort((o,s)=>F7a(o,s,a));this.state.setModels(i,a)}async refresh(e={}){let t=this.getRuntime();if(await t.services.modelRuntime.refresh(e),t===this.getRuntime())this.sync()}setThinking(e){if(!Fq(e))return!1;return this.getRuntime().session.setThinkingLevel(e),this.syncThinking(),!0}cycleThinking(e="forward"){let t=this.getRuntime().session;if(e==="forward"){if(!t.cycleThinkingLevel())return!1}else{if(!t.supportsThinking())return!1;let n=t.getAvailableThinkingLevels().filter(Fq);if(!n.length)return!1;let a=Fq(t.thinkingLevel)?t.thinkingLevel:n[0],r=n.indexOf(a);t.setThinkingLevel(n[r<=0?n.length-1:r-1])}return this.syncThinking(),!0}syncThinking(){let e=this.getRuntime().session,t=e.getAvailableThinkingLevels().filter(Fq),n=Fq(e.thinkingLevel)?e.thinkingLevel:t[0]??"off";this.state.setThinking(n,t)}findOrReport(e){let[t,...n]=e.split("/"),a=n.join("/"),r=t&&a?this.getRuntime().services.modelRuntime.getModel(t,a):void 0;if(!r)this.state.appendMessage("system",`Model not found: ${e}`);return r}}function F7a(e,t,n){if(e.scoped!==t.scoped)return e.scoped?-1:1;let a=`${e.provider}/${e.id}`===n,r=`${t.provider}/${t.id}`===n;if(a!==r)return a?-1:1;return e.provider.localeCompare(t.provider)||e.id.localeCompare(t.id)}function Fq(e){return P7a.has(e)}var P7a;var Kcn=E(()=>{P7a=new Set(["off","minimal","low","medium","high","xhigh","max"])});class sOe{stateFor;pending=new Map;compactionQueues=new Map;constructor(e){this.stateFor=e}hasPending(e){return(this.pending.get(e)??0)>0}submit(e,t,n={}){let{promise:a,resolve:r}=Promise.withResolvers();return this.markPending(e),e.session.prompt(t,{images:n.images,streamingBehavior:e.session.isStreaming?n.streamingBehavior??"steer":void 0,preflightResult:()=>r(!0)}).catch((i)=>{r(!1),this.reportError(e,i)}).finally(()=>this.markSettled(e)),a}queueAfterCompaction(e,t,n,a){let r=this.compactionQueues.get(e)??[];r.push({text:t,images:a,streamingBehavior:n}),this.compactionQueues.set(e,r),this.sync(e)}restore(e){let t=this.compactionQueues.get(e)??[];this.compactionQueues.delete(e);let{steering:n,followUp:a}=e.session.clearQueue(),r=Vcn(t);return this.stateFor(e)?.setQueuedMessages([],[]),[...n,...r.steering,...a,...r.followUp].join(`
3486
+ </user-message>`,timestamp:Date.now()}]};for(let c of i)try{let u={maxTokens:512,maxRetries:0,timeoutMs:30000};if(c.reasoning!=="off")u.reasoning=c.reasoning;let l=await e.services.modelRuntime.completeSimple(c.model,s,u);if(["error","aborted","deferred"].includes(l.stopReason))continue;let p=h7a(ks(l.content," "));if(p&&!/[?\uFF1F]$/.test(p))return p}catch{}return}function g7a(e){let t=e.find((n)=>n.type==="message"&&n.message.role==="user");if(!t||t.type!=="message"||t.message.role!=="user")return;return f7a(t.message).slice(0,A7a)||void 0}function f7a(e){if(e.role!=="user"&&e.role!=="assistant")return"";return Icn(ks(e.content," "))}function Icn(e){return[...e].map((n)=>{let a=n.charCodeAt(0);return a<32||a===127?" ":n}).join("").replace(/\s+/g," ").trim()}function h7a(e){let t=e.replace(/^```(?:text)?\s*/i,"").replace(/\s*```$/,"").split(/\r?\n/).find((n)=>n.trim())?.trim();if(!t)return;if(t=t.replace(/^(?:title\s*:\s*)/i,"").trim(),t.startsWith('"')&&t.endsWith('"')||t.startsWith("'")&&t.endsWith("'")||t.startsWith("`")&&t.endsWith("`"))t=t.slice(1,-1).trim();if(t=Icn(t),!t)return;return t}var zle,A7a=6000;var J$e=E(()=>{xs();xv();zle={enabled:!0,models:["openai/gpt-6-luna:low","openai-codex/gpt-6-luna:low","opencode-go/deepseek-v4.1-flash:off"],prompt:"use lowercase"}});import{AsyncLocalStorage as b7a}from"async_hooks";function Tcn(e,t){let n=t?.trim();if(!n)return;y7a(),Dcn.set(e,n);let a=e.streamSimple.bind(e);e.streamSimple=(r,i,o)=>eOe.run(n,()=>a(r,i,{...o,env:{HTTP_PROXY:n,HTTPS_PROXY:n,...o?.env}}))}function sj(e,t){let n=Dcn.get(e);return n?eOe.run(n,t):t()}function y7a(){if(Scn)return;Scn=!0,globalThis.fetch=w7a}function w7a(e,t){let n=eOe.getStore();if(!n||t&&"proxy"in t)return X$e(e,t);let a=k7a(e);if(!a||!x7a(a))return X$e(e,t);return X$e(e,{...t,proxy:n})}function k7a(e){if(Rn(e))return URL.parse(e)??void 0;if(e instanceof URL)return e;if(e instanceof Request)return URL.parse(e.url)??void 0;return}function x7a(e){let t=(process.env.no_proxy||process.env.NO_PROXY||"").toLowerCase();if(!t)return!0;if(t==="*")return!1;let n=e.hostname,a=Number.parseInt(e.port,10)||v7a(e.protocol);return t.split(/[,\s]/).filter(Boolean).every((i)=>_7a(i,n,a))}function _7a(e,t,n){let a=e.match(/^(.+):(\d+)$/),r=a?a[1]:e,i=a?Number.parseInt(a[2],10):0;if(i&&i!==n)return!0;if(!/^[.*]/.test(r))return t!==r;if(r.startsWith("*"))r=r.slice(1);return!t.endsWith(r)}function v7a(e){if(e==="http:"||e==="ws:")return 80;if(e==="https:"||e==="wss:")return 443;if(e==="ftp:")return 21;if(e==="gopher:")return 70;return 0}var X$e,eOe,Dcn,Scn=!1;var Wle=E(()=>{X$e=globalThis.fetch,eOe=new b7a,Dcn=new WeakMap});async function Rcn(e){let t=C7a(e);try{let n=await wk(t.command,{args:t.args});if(!n.success){let a=new TextDecoder().decode(n.stderr).trim();throw Error(a||`Trash command failed with code ${n.code}`)}}catch(n){if(Ts(n)){await Bun.file(e).delete();return}throw n}}function C7a(e){if(Ud==="darwin")return{command:"osascript",args:["-e",`tell application "Finder" to delete POSIX file ${JSON.stringify(e)}`]};if(Ud==="windows")return{command:"powershell",args:["-NoProfile","-Command",`Add-Type -AssemblyName Microsoft.VisualBasic; [Microsoft.VisualBasic.FileIO.FileSystem]::DeleteFile(${JSON.stringify(e)}, 'OnlyErrorDialogs', 'SendToRecycleBin')`]};return{command:"trash",args:[e]}}var Qcn=E(()=>{pS()});var Fcn="./quickjs-r1pq2107.wasm";var Pcn=()=>{};import{resolve as B7a}from"path";var jcn=E(()=>{nr();Pcn();Xvt(B7a(import.meta.dir,Fcn))});class tOe{getRuntime;state;onAuthChanged;loginRun;loginSequence=0;constructor(e,t,n){this.getRuntime=e;this.state=t;this.onAuthChanged=n}openLogin(e){this.cancelLogin();let t=this.getLoginProviders();if(e){let a=e.toLowerCase();t=t.filter((r)=>r.id.toLowerCase()===a||r.name.toLowerCase()===a)}let n={mode:"login",phase:"providers",providers:t,progress:[]};if(e&&t.length===0)n.error=`Provider not found: ${e}`;this.state.setAuthDialog(n)}openLogout(){this.cancelLogin();let e=this.getRuntime();this.state.setAuthDialog({mode:"logout",phase:"providers",providers:[],status:"Loading stored credentials\u2026",progress:[]}),e.services.modelRuntime.listCredentials().then((t)=>{let n=this.state.authDialog;if(!n||n.mode!=="logout")return;let a=t.map(({providerId:r,type:i})=>{let o=e.services.modelRuntime.getProvider(r);return{id:r,name:o?.name??r,authType:i,subscription:i==="oauth"?o?.auth.oauth?.isSubscription===!0:void 0}}).sort(Mcn);this.state.setAuthDialog({...n,providers:a,status:void 0})}).catch((t)=>{let n=this.state.authDialog;if(!n||n.mode!=="logout")return;this.state.setAuthDialog({...n,status:void 0,error:Bl(t)})})}startLogin(e,t){if(!I7a(t))return!1;let n=this.getLoginProviders().find((i)=>i.id===e&&i.authType===t);if(!n)return!1;let a=this.getRuntime().services.modelRuntime.getProvider(n.id),r=n.authType==="oauth"?a?.auth.oauth:a?.auth.apiKey;if(!r)return!1;if(this.cancelLogin(),n.authType==="api_key"&&!r.login)return this.state.setAuthDialog({mode:"login",phase:"result",providers:[],providerId:n.id,providerName:n.name,status:`${r.name} is configured outside pi-ui.`,progress:[]}),!0;return this.startProviderLogin(n),!0}submitInput(e){let t=this.state.authDialog,n=this.loginRun;if(!t||!n?.inputResolver||t.phase!=="api-key"&&t.phase!=="oauth")return!1;let a=n.inputResolver;return a(e),this.state.setAuthDialog({...t,prompt:void 0,error:void 0,status:"Waiting for authentication\u2026"}),!0}logout(e){let t=this.state.authDialog;if(t?.mode!=="logout")return!1;let n=t.providers.find((r)=>r.id===e);if(!n)return!1;return this.getRuntime().services.modelRuntime.logout(n.id).then(()=>{if(this.state.authDialog?.mode!=="logout")return;this.completeAuthentication(n.authType==="oauth"?`Logged out of ${n.name}.`:`Removed the stored API key for ${n.name}.`)}).catch((r)=>{let i=this.state.authDialog;if(!i||i.mode!=="logout")return;this.state.setAuthDialog({...i,phase:"result",error:Bl(r)})}),!0}close(){this.cancelLogin(),this.state.setAuthDialog(void 0)}dispose(){this.cancelLogin()}getLoginProviders(){let e=[];for(let t of this.getRuntime().services.modelRuntime.getProviders()){if(t.auth.oauth)e.push({id:t.id,name:t.name,authType:"oauth",subscription:t.auth.oauth.isSubscription===!0});if(t.auth.apiKey)e.push({id:t.id,name:t.name,authType:"api_key"})}return e.sort(Mcn)}startProviderLogin(e){let t={id:++this.loginSequence,abortController:new AbortController};this.loginRun=t,this.state.setAuthDialog({mode:"login",phase:e.authType==="api_key"?"api-key":"oauth",providers:[],providerId:e.id,providerName:e.name,status:"Starting authentication\u2026",progress:[]});let{modelRuntime:n,settingsManager:a}=this.getRuntime().services;sj(n,()=>n.login(e.id,e.authType,{signal:t.abortController.signal,prompt:(r)=>this.promptForInput(t,r),notify:(r)=>this.notifyAuthentication(t,r)},{getDeviceId:()=>a.getOrCreateDeviceId()})).then(()=>{if(!this.isCurrentRun(t))return;this.loginRun=void 0,this.completeAuthentication(e.authType==="oauth"?`Logged in to ${e.name}.`:`Saved credentials for ${e.name}.`)}).catch((r)=>{if(!this.isCurrentRun(t))return;this.loginRun=void 0,this.patchAuthenticationDialog({phase:"result",error:`Login failed: ${Bl(r)}`,prompt:void 0})})}promptForInput(e,t){if(!this.isCurrentRun(e))return Promise.reject(Error("Login cancelled"));if(t.signal?.aborted)return Promise.reject(Error("Login cancelled"));this.patchAuthenticationDialog({prompt:{id:crypto.randomUUID(),message:t.message,placeholder:"placeholder"in t?t.placeholder:void 0,secret:t.type==="secret",options:t.type==="select"?t.options.map(({id:s,label:c})=>({id:s,label:c})):void 0},status:void 0,error:void 0});let{promise:n,resolve:a,reject:r}=Promise.withResolvers(),i=(s)=>{if(e.inputResolver!==i)return;if(e.inputResolver=void 0,t.signal?.removeEventListener("abort",o),s===void 0)r(Error("Login cancelled"));else a(s)},o=()=>i(void 0);return e.inputResolver=i,t.signal?.addEventListener("abort",o,{once:!0}),n}notifyAuthentication(e,t){if(!this.isCurrentRun(e))return;if(t.type==="auth_url"){Lcn(t.url),this.patchAuthenticationDialog({url:t.url,instructions:t.instructions,status:"Complete authentication in your browser."});return}if(t.type==="device_code"){Lcn(t.verificationUri),this.patchAuthenticationDialog({url:t.verificationUri,deviceCode:t.userCode,status:"Waiting for authentication\u2026"});return}if(t.type==="info"){this.patchAuthenticationDialog({status:t.message,url:t.links?.[0]?.url});return}let n=this.state.authDialog;this.patchAuthenticationDialog({progress:[...n?.progress??[],t.message].slice(-6)})}completeAuthentication(e){this.onAuthChanged();let t=this.state.authDialog;this.state.setAuthDialog({mode:t?.mode??"login",phase:"result",providers:[],providerId:t?.providerId,providerName:t?.providerName,status:t?.mode==="logout"?e:`${e} Select a model to begin.`,progress:[]})}patchAuthenticationDialog(e){let t=this.state.authDialog;if(!t||t.phase!=="api-key"&&t.phase!=="oauth")return;this.state.setAuthDialog({...t,...e})}isCurrentRun(e){return this.loginRun?.id===e.id}cancelLogin(){let e=this.loginRun;if(!e)return;this.loginRun=void 0,e.abortController.abort(),e.inputResolver?.(void 0)}}function I7a(e){return e==="oauth"||e==="api_key"}function Mcn(e,t){let n=e.name.localeCompare(t.name);if(n!==0)return n;return e.authType.localeCompare(t.authType)}function Lcn(e){kf(e)}var Ncn=E(()=>{MI();tE();Wle()});function $cn(e,t,n,a){return e===n&&t===a}class nOe{runtimes=new Map;nextGeneration=1;failures=0;allocateGeneration(){return this.nextGeneration++}get invariantFailureCount(){return this.failures}get(e){return this.runtimes.get(e)}has(e){return this.runtimes.has(e)}values(){return this.runtimes.values()}entries(){return this.runtimes.entries()}register(e,t){let n=this.runtimes.get(e);if(n&&n!==t)throw this.failures+=1,new cj;this.runtimes.set(e,t)}delete(e){return this.runtimes.delete(e)}beginActivation(e){let t=this.runtimes.get(e);if(!t)return;let n=!1;return{runtime:t,commit:()=>{if(n)return;if(n=!0,this.runtimes.get(e)!==t)throw this.failures+=1,new cj;this.runtimes.delete(e)},rollback:()=>{n=!0}}}liveCount(e){let t=e?1:0;for(let n of this.runtimes.values())if(n.status==="running"||n.observedRunning)t+=1;return t}clear(){this.runtimes.clear()}}var cj;var Ocn=E(()=>{cj=class cj extends Error{constructor(e="Runtime ownership invariant failed"){super(e);this.name="RuntimeOwnershipInvariantError"}}});function Kle(e){if(e.missedTokens<S7a&&e.missedCost<D7a)return;let t=e.missedCost>=0.01?` (~$${e.missedCost.toFixed(2)})`:"",n="cache miss";if(e.modelChanged)n="cache miss after model switch";else if(e.idleMs>=Uce)n=`cache miss after ${Math.round(e.idleMs/60000)}m idle`;return{title:n,text:`${yx(e.missedTokens)} tokens re-billed${t}`}}var S7a=20000,D7a=0.1;var aOe=()=>{};class rOe{store;#e=[];#t=new Map;#a=new Map;#n;#r;#u;#f=!0;constructor(e){this.store=e}context(e){return{select:(t,n,a)=>this.select(e,t,n,a),confirm:(t,n,a)=>this.confirm(e,t,n,a),input:(t,n,a)=>this.input(e,t,n,a),notify:(t,n="info")=>{if(!e())return;this.store.appendMessage("notice",n==="info"?t:`${n}: ${t}`)},onTerminalInput:()=>Jy("raw terminal input"),setStatus:(t,n)=>{if(!e())return;if(n===void 0)this.#t.delete(t);else this.#t.set(t,n);this.store.setExtensionStatuses(this.#t.entries().map(([a,r])=>({key:a,text:r})).toArray())},setWorkingMessage:(t)=>{if(!e())return;this.#u=t,this.syncWorking()},setWorkingVisible:(t)=>{if(!e())return;this.#f=t,this.syncWorking()},setWorkingIndicator:(t)=>{if(!e())return;this.#r=R7a(t),this.syncWorking()},setHiddenThinkingLabel:(t)=>{if(e()&&t!==void 0)Jy("custom thinking labels")},setWidget:(t,n,a)=>{if(!e())return;if(n===void 0)this.#a.delete(t);else if(Array.isArray(n))this.#a.set(t,{key:t,lines:[...n],placement:a?.placement??"aboveEditor"});else Jy("component widgets");this.store.setExtensionWidgets(this.#a.values().toArray())},setFooter:(t)=>{if(e()&&t)Jy("custom footer components")},setHeader:(t)=>{if(e()&&t)Jy("custom header components")},setTitle:(t)=>{if(e())this.store.setDocumentTitle(t)},custom:async()=>Jy("custom TUI components"),pasteToEditor:(t)=>{if(!e())return;this.setEditorText(`${this.store.promptEditorText}${t}`)},setEditorText:(t)=>{if(e())this.setEditorText(t)},getEditorText:()=>e()?this.store.promptEditorText:"",editor:(t,n)=>this.editor(e,t,n),addAutocompleteProvider:()=>{if(e())Jy("autocomplete providers")},setEditorComponent:(t)=>{if(e()&&t)Jy("custom editor components")},getEditorComponent:()=>{return},theme:T7a,getAllThemes:()=>[],getTheme:()=>{return},setTheme:()=>({success:!1,error:"TUI themes are unavailable in pi-ui"}),getToolsExpanded:()=>!1,setToolsExpanded:()=>{if(e())Jy("global tool expansion state")}}}respond(e,t,n){if(this.#n?.dialog.id!==e)return!1;let a=this.#n;return this.finish(a),a.respond(t,n),this.showNext(),!0}cancelAll(){let e=[this.#n,...this.#e].filter((t)=>t!==void 0);this.#n=void 0,this.#e.length=0;for(let t of e)this.cleanup(t),t.respond(void 0,!0);this.#t.clear(),this.#a.clear(),this.#r=void 0,this.#u=void 0,this.#f=!0,this.store.setExtensionDialog(void 0),this.store.setExtensionStatuses([]),this.store.setExtensionWidgets([]),this.syncWorking(),this.store.setDocumentTitle("pi-ui")}select(e,t,n,a){if(!e())return Promise.resolve(void 0);let{promise:r,resolve:i}=Promise.withResolvers();return this.enqueue({dialog:{id:crypto.randomUUID(),kind:"select",title:t,options:[...n]},respond:(o,s)=>i(!s&&o!==void 0&&n.includes(o)?o:void 0)},a),r}confirm(e,t,n,a){if(!e())return Promise.resolve(!1);let{promise:r,resolve:i}=Promise.withResolvers();return this.enqueue({dialog:{id:crypto.randomUUID(),kind:"confirm",title:t,message:n},respond:(o,s)=>i(!s&&o==="confirm")},a),r}input(e,t,n,a){return this.textDialog(e,{id:crypto.randomUUID(),kind:"input",title:t,placeholder:n},a)}editor(e,t,n){return this.textDialog(e,{id:crypto.randomUUID(),kind:"editor",title:t,prefill:n})}textDialog(e,t,n){if(!e())return Promise.resolve(void 0);let{promise:a,resolve:r}=Promise.withResolvers();return this.enqueue({dialog:t,respond:(i,o)=>r(o?void 0:i??"")},n),a}enqueue(e,t){if(t?.signal?.aborted){e.respond(void 0,!0);return}if(e.signal=t?.signal,e.signal)e.abort=()=>this.abort(e),e.signal.addEventListener("abort",e.abort,{once:!0});if(t?.timeout!==void 0)e.timer=setTimeout(()=>this.abort(e),t.timeout);this.#e.push(e),this.showNext()}showNext(){if(this.#n)return;this.#n=this.#e.shift(),this.store.setExtensionDialog(this.#n?.dialog)}abort(e){if(e===this.#n){this.finish(e),e.respond(void 0,!0),this.showNext();return}let t=this.#e.indexOf(e);if(t<0)return;this.#e.splice(t,1),this.cleanup(e),e.respond(void 0,!0)}finish(e){this.cleanup(e),this.#n=void 0,this.store.setExtensionDialog(void 0)}cleanup(e){if(e.timer!==void 0)clearTimeout(e.timer);if(e.signal&&e.abort)e.signal.removeEventListener("abort",e.abort)}setEditorText(e){this.store.setPromptEditorText(e)}syncWorking(){this.store.setExtensionWorking({message:this.#u,visible:this.#f,indicator:this.#r})}}function R7a(e){if(!e?.frames)return;return e.frames[0]??""}function Jy(e){throw Error(`${e} are not supported by the pi-ui web interface`)}var T7a;var qcn=E(()=>{T7a=new Proxy({},{get:()=>Jy("TUI themes")})});class iOe{getRuntime;state;onModelsChanged;operation;constructor(e,t,n){this.getRuntime=e;this.state=t;this.onModelsChanged=n}open(){this.cancelOperation(),this.state.setLlamaDialog({models:[],status:"Loading models\u2026"}),this.refreshDialog()}close(){this.cancelOperation(),this.state.setLlamaDialog(void 0)}toggle(e){let t=this.state.llamaDialog,n=t?.models.find((r)=>r.id===e);if(!t||!n||this.operation)return!1;let a={abortController:new AbortController,modelId:e,load:!Q7a(n.status)};return this.operation=a,this.state.setLlamaDialog({...t,busyModel:e,status:a.load?`Loading ${e}\u2026`:`Unloading ${e}\u2026`,error:void 0}),this.run(a),!0}dispose(){this.cancelOperation()}async refreshDialog(){try{let e=await this.client();if(!this.state.llamaDialog)return;let t=await e.list({signal:AbortSignal.timeout(15000)});if(!this.state.llamaDialog)return;this.state.setLlamaDialog({models:t.map(Ucn),serverUrl:e.serverUrl})}catch(e){if(!this.state.llamaDialog)return;this.state.setLlamaDialog({models:[],error:Bl(e)})}}async run(e){let{modelId:t,load:n,abortController:a}=e;try{let r=await this.client();if(e.client=r,n)await r.loadAndWait(t,({message:o,ratio:s})=>{if(this.operation===e)this.updateDialog({progress:{label:o,ratio:s}})},a.signal);else await r.unloadAndWait(t,a.signal);let i=await r.list({signal:a.signal});if(await this.getRuntime().services.modelRuntime.refresh({providers:[Gm],signal:a.signal}),this.operation!==e||!this.state.llamaDialog)return;this.operation=void 0,a.abort(),this.state.setLlamaDialog({models:i.map(Ucn),serverUrl:r.serverUrl,status:n?`Loaded ${t}.`:`Unloaded ${t}.`}),this.onModelsChanged()}catch(r){if(this.operation!==e||a.signal.aborted)return;this.operation=void 0,this.updateDialog({busyModel:void 0,progress:void 0,status:void 0,error:Bl(r)})}}async client(){let e=await this.getRuntime().services.modelRuntime.getAuth(Gm);if(!e)throw Gcn();let t=e.env?.LLAMA_BASE_URL??e.auth.baseUrl;if(!t)throw Gcn();return new Ov(t,e.auth.apiKey)}updateDialog(e){let t=this.state.llamaDialog;if(t)this.state.setLlamaDialog({...t,...e})}cancelOperation(){let e=this.operation;if(!e)return;if(this.operation=void 0,e.abortController.abort(),e.load&&e.client)e.client.unload(e.modelId,AbortSignal.timeout(15000)).catch(()=>{})}}function Gcn(){return Error("Configure llama.cpp with /login llama.cpp first.")}function Q7a(e){return e==="loaded"||e==="sleeping"}function Ucn(e){return{id:e.id,status:e.status.value}}var Hcn=E(()=>{Nce();tE()});var zcn;var Wcn=E(()=>{Nce();zcn={name:Gm,builtin:!0,factory:(e)=>{e.registerProvider(Lce().provider)},hidden:!0}});class oOe{getRuntime;state;onModelChanged;constructor(e,t,n){this.getRuntime=e;this.state=t;this.onModelChanged=n}async set(e){let t=this.findOrReport(e);if(!t)return!1;let n=this.getRuntime();return await n.session.setModel(t,{persist:!1}),n.services.settingsManager.setDefaultModelAndProvider(t.provider,t.id),await n.services.settingsManager.flush(),this.onModelChanged(),!0}async cycle(e="forward"){let t=this.getRuntime();if(!await t.session.cycleModel(e,{persist:!0}))return!1;return await t.services.settingsManager.flush(),this.onModelChanged(),!0}async toggleScoped(e){let t=this.findOrReport(e);if(!t)return!1;let n=this.getRuntime(),a=n.session,r=`${t.provider}/${t.id}`,i=a.scopedModels.filter((u)=>`${u.model.provider}/${u.model.id}`!==r);if(i.length===a.scopedModels.length)i.push({model:t});let o=n.services.modelRuntime,s=0;for(let u of o.getModels())if(o.hasConfiguredAuth(u.provider))s+=1;let c=i.length===0||i.length===s?void 0:i.map((u)=>`${u.model.provider}/${u.model.id}`);return n.services.settingsManager.setEnabledModels(c),await n.services.settingsManager.flush(),a.setScopedModels(c===void 0?[]:i),this.sync(),!0}sync(){let e=this.getRuntime(),t=e.session,n=e.services.modelRuntime,a=t.model?`${t.model.provider}/${t.model.id}`:void 0,r=new Set(t.scopedModels.map((o)=>`${o.model.provider}/${o.model.id}`)),i=n.getModels().map((o)=>({id:o.id,provider:o.provider,name:o.name??o.id,configured:n.hasConfiguredAuth(o.provider),scoped:r.has(`${o.provider}/${o.id}`)})).filter((o)=>o.configured||`${o.provider}/${o.id}`===a).sort((o,s)=>F7a(o,s,a));this.state.setModels(i,a)}async refresh(e={}){let t=this.getRuntime();if(await t.services.modelRuntime.refresh(e),t===this.getRuntime())this.sync()}setThinking(e){if(!Fq(e))return!1;return this.getRuntime().session.setThinkingLevel(e),this.syncThinking(),!0}cycleThinking(e="forward"){let t=this.getRuntime().session;if(e==="forward"){if(!t.cycleThinkingLevel())return!1}else{if(!t.supportsThinking())return!1;let n=t.getAvailableThinkingLevels().filter(Fq);if(!n.length)return!1;let a=Fq(t.thinkingLevel)?t.thinkingLevel:n[0],r=n.indexOf(a);t.setThinkingLevel(n[r<=0?n.length-1:r-1])}return this.syncThinking(),!0}syncThinking(){let e=this.getRuntime().session,t=e.getAvailableThinkingLevels().filter(Fq),n=Fq(e.thinkingLevel)?e.thinkingLevel:t[0]??"off";this.state.setThinking(n,t)}findOrReport(e){let[t,...n]=e.split("/"),a=n.join("/"),r=t&&a?this.getRuntime().services.modelRuntime.getModel(t,a):void 0;if(!r)this.state.appendMessage("system",`Model not found: ${e}`);return r}}function F7a(e,t,n){if(e.scoped!==t.scoped)return e.scoped?-1:1;let a=`${e.provider}/${e.id}`===n,r=`${t.provider}/${t.id}`===n;if(a!==r)return a?-1:1;return e.provider.localeCompare(t.provider)||e.id.localeCompare(t.id)}function Fq(e){return P7a.has(e)}var P7a;var Kcn=E(()=>{P7a=new Set(["off","minimal","low","medium","high","xhigh","max"])});class sOe{stateFor;pending=new Map;compactionQueues=new Map;constructor(e){this.stateFor=e}hasPending(e){return(this.pending.get(e)??0)>0}submit(e,t,n={}){let{promise:a,resolve:r}=Promise.withResolvers();return this.markPending(e),e.session.prompt(t,{images:n.images,streamingBehavior:e.session.isStreaming?n.streamingBehavior??"steer":void 0,preflightResult:()=>r(!0)}).catch((i)=>{r(!1),this.reportError(e,i)}).finally(()=>this.markSettled(e)),a}queueAfterCompaction(e,t,n,a){let r=this.compactionQueues.get(e)??[];r.push({text:t,images:a,streamingBehavior:n}),this.compactionQueues.set(e,r),this.sync(e)}restore(e){let t=this.compactionQueues.get(e)??[];this.compactionQueues.delete(e);let{steering:n,followUp:a}=e.session.clearQueue(),r=Vcn(t);return this.stateFor(e)?.setQueuedMessages([],[]),[...n,...r.steering,...a,...r.followUp].join(`
3487
3487
 
3488
3488
  `)}async remove(e,t,n){let a=t==="steer"?e.session.getSteeringMessages():e.session.getFollowUpMessages(),r=this.compactionQueues.get(e)??[];if(n>=a.length){let o=n-a.length,s=r.findIndex((c)=>c.streamingBehavior===t&&o--===0);if(s<0)return!1;if(r.splice(s,1),r.length===0)this.compactionQueues.delete(e);return this.sync(e),!0}let i=e.session.clearQueue();i[t==="steer"?"steering":"followUp"].splice(n,1);try{for(let o of i.steering)await e.session.steer(o);for(let o of i.followUp)await e.session.followUp(o)}catch(o){this.reportError(e,o)}return this.sync(e),!0}sync(e){let t=Vcn(this.compactionQueues.get(e)??[]);this.stateFor(e)?.setQueuedMessages([...e.session.getSteeringMessages(),...t.steering],[...e.session.getFollowUpMessages(),...t.followUp])}async flushCompactionQueue(e){let t=this.compactionQueues.get(e);if(!t?.length)return;this.compactionQueues.delete(e),this.sync(e);for(let n=0;n<t.length;n+=1){let a=t[n];if(await this.submit(e,a.text,{images:a.images,streamingBehavior:a.streamingBehavior}))continue;this.compactionQueues.set(e,t.slice(n)),this.sync(e);return}}clear(e){this.compactionQueues.delete(e)}dispose(){this.pending.clear(),this.compactionQueues.clear()}markPending(e){this.pending.set(e,(this.pending.get(e)??0)+1)}markSettled(e){let t=(this.pending.get(e)??1)-1;if(t>0)this.pending.set(e,t);else this.pending.delete(e)}reportError(e,t){this.stateFor(e)?.appendMessage("system",Bl(t))}}function Vcn(e){let t=[],n=[];for(let a of e)(a.streamingBehavior==="steer"?t:n).push(a.text);return{steering:t,followUp:n}}var Ycn=E(()=>{tE()});import{access as j7a,readFile as Zcn}from"fs/promises";function eln(e){let t=new Map,n=new Map,a=yv(e,{autoResizeImages:!1,operations:{access:j7a,async detectImageMimeType(i){let o=await My(i);if(!o)return null;let s=await Lle(await Zcn(i),o);if(!s)throw Error(`Could not process image: ${i}`);return Jcn(t,i,{bytes:Buffer.from(s.data,"base64"),mimeType:s.mimeType,dimensionNote:WQ(s)}),s.mimeType},async readFile(i){let o=Xcn(t,i);if(!o)return Zcn(i);if(o.dimensionNote)Jcn(n,i,o.dimensionNote);return o.bytes}}}),r=a.execute;return a.execute=async(...i)=>{let o=await r(...i),s=Xcn(n,i[1].path),c=o.content.find((u)=>u.type==="text");if(s&&c?.type==="text")c.text+=`
3489
3489
  ${s}`;return o},Q5(a)}function Jcn(e,t,n){let a=e.get(t);if(a)a.push(n);else e.set(t,[n])}function Xcn(e,t){let n=e.get(t),a=n?.shift();if(n?.length===0)e.delete(t);return a}var tln=E(()=>{hI();y$e()});import{watch as M7a}from"fs";import{join as L7a}from"path";var N7a=".jsonl",nln=(e,t)=>{try{let n=M7a(e,{recursive:!0},(a,r)=>{if(!r)return;let i=L7a(e,r.toString());if(i.endsWith(N7a))t(i)});return n.on("error",(a)=>{console.warn("Session catalogue watcher stopped",a)}),()=>n.close()}catch{return()=>{}}};var aln=()=>{};function rln(e,t,n){return e.map((a)=>{let{backgroundStatus:r,...i}=a,o=a.path===n?void 0:t.get(a.path);return o?{...i,backgroundStatus:o}:i})}import{resolve as iln}from"path";function cOe(){let e=process.env.PI_CODING_AGENT_SESSION_DIR?.trim();return e?iln(z0(e)):void 0}function Vle(e=oa()){return cOe()??iln(e,"sessions")}var lOe=E(()=>{hI();hg()});function Yle(e){let t=[],n=e;while(!0){let a=n.match(/^@((?:\/|[A-Za-z]:[\\/])[^\r\n]+)(?:\r?\n|$)/);if(!a)break;t.push(a[1]),n=n.slice(a[0].length)}return{prompt:n,paths:t}}function Zle(e){return(e.split(/[\\/]/).filter(Boolean).at(-1)??e).replace(/^file-[a-f0-9]+-/i,"")}import{mkdir as $7a,rename as O7a,rm as q7a}from"fs/promises";import{dirname as G7a}from"path";function lj(){return mz("session-index.json")}async function eue(e=lj()){try{let t=JSON.parse(await Bun.file(e).text());if(!_a(t)||t.version!==uOe||!_a(t.sessions))return sln();let n={};for(let[a,r]of Object.entries(t.sessions)){let i=J7a(r);if(i)n[a]=i}return{version:uOe,sessions:n}}catch(t){if(Ts(t)||t instanceof SyntaxError)return sln();throw t}}async function W7a(e,t=lj()){await $7a(G7a(t),{recursive:!0});let n=`${t}.${crypto.randomUUID()}.tmp`;try{await Bun.write(n,`${JSON.stringify(e,null,"\t")}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@hyperpuncher/pi-ui",
3
- "version": "0.54.0",
3
+ "version": "0.54.1",
4
4
  "description": "keyboard-first minimal gui for pi",
5
5
  "homepage": "https://pi-ui.app",
6
6
  "bugs": "https://github.com/hyperpuncher/pi-ui/issues",